<?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>133156</bug_id>
          
          <creation_ts>2014-05-21 12:23:55 -0700</creation_ts>
          <short_desc>make css jit work on arm64</short_desc>
          <delta_ts>2014-05-23 18:21:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1010807</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-21 12:23:55 -0700</bug_when>
    <thetext>The css jit works on arm64.  It still needs to be tested and optimized so I won&apos;t enable it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010809</commentid>
    <comment_count>1</comment_count>
      <attachid>231836</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-21 12:27:38 -0700</bug_when>
    <thetext>Created attachment 231836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010812</commentid>
    <comment_count>2</comment_count>
      <attachid>231836</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-05-21 12:45:30 -0700</bug_when>
    <thetext>Comment on attachment 231836
Patch

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

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:879
&gt; +    generatePrologue();

Why doesn&apos;t x86_64 need a prologue? Doesn&apos;t it need to save the frame pointer register (%rbp)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010820</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-21 13:19:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Why doesn&apos;t x86_64 need a prologue? Doesn&apos;t it need to save the frame pointer register (%rbp)?
Doesn&apos;t x86_64 do that with the CALL instruction?  This will need to be optimized later to only push and pop the link register and frame pointer if it calls a function, but this is just to get it working so we can optimize from here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010822</commentid>
    <comment_count>4</comment_count>
      <attachid>231836</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-21 13:35:26 -0700</bug_when>
    <thetext>Comment on attachment 231836
Patch

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

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:874
&gt; +#if CPU(ARM64)
&gt; +    m_assembler.pushPair(JSC::ARM64Registers::lr, JSC::ARM64Registers::fp);
&gt; +#endif
&gt; +}
&gt; +
&gt; +void SelectorCodeGenerator::generateEpilogue()
&gt; +{
&gt; +#if CPU(ARM64)
&gt; +    m_assembler.popPair(JSC::ARM64Registers::lr, JSC::ARM64Registers::fp);
&gt; +#endif

I would prefer this to be done through the stack allocator.

Here, if we have a mismatch of pushPair/popPair, we could run into security problems.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:935
&gt; +            generateEpilogue();
&gt;              m_assembler.ret();
&gt;  
&gt;              // Failure.
&gt;              if (!failureCases.empty()) {
&gt;                  failureCases.link(&amp;m_assembler);
&gt;                  m_assembler.move(Assembler::TrustedImm32(0), returnRegister);
&gt; +                generateEpilogue();
&gt;                  m_assembler.ret();

The duplicated epilogue may be slower than an unconditional jump. You may want to generalize reservedCalleeSavedRegisters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011051</commentid>
    <comment_count>5</comment_count>
      <attachid>231910</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-22 13:53:17 -0700</bug_when>
    <thetext>Created attachment 231910
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011075</commentid>
    <comment_count>6</comment_count>
      <attachid>231917</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-22 16:13:55 -0700</bug_when>
    <thetext>Created attachment 231917
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011076</commentid>
    <comment_count>7</comment_count>
      <attachid>231918</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-22 16:46:32 -0700</bug_when>
    <thetext>Created attachment 231918
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011098</commentid>
    <comment_count>8</comment_count>
      <attachid>231918</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-22 17:53:23 -0700</bug_when>
    <thetext>Comment on attachment 231918
Patch

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

Great encapsulation for the ARM64 parts!

Some comments bellow and I have a big doubt with the stack references.

&gt; Source/WebCore/cssjit/FunctionCall.h:168
&gt; +        m_savedRegisterStackReferences.appendVector(m_stackAllocator.push(m_registerAllocator.allocatedRegisters()));

Can you split this on 3 lines?
It is 3 important operations, I would prefer to have 3 statements.

&gt; Source/WebCore/cssjit/RegisterAllocator.h:-32
&gt; -#include &lt;StackAllocator.h&gt;

I am so happy about this :)

&gt; Source/WebCore/cssjit/RegisterAllocator.h:116
&gt; +    Vector&lt;JSC::MacroAssembler::RegisterID, calleeSavedRegisterCount&gt; calleeSavedRegistersToReserve(unsigned count)

I think the name calleeSavedRegistersToReserve masks the side effects of this function.
What about: &quot;preAllocateCalleeSavedRegisters(count)&quot;, or even keep &quot;reserveCalleeSavedRegisters()&quot;?

&gt; Source/WebCore/cssjit/RegisterAllocator.h:118
&gt; +        Vector&lt;JSC::MacroAssembler::RegisterID, calleeSavedRegisterCount&gt; registers;

Is this used?

&gt; Source/WebCore/cssjit/RegisterAllocator.h:120
&gt; +        ASSERT(!m_reservedCalleeSavedRegisters.size());

We can afford RELEASE_ASSERT here.

&gt; Source/WebCore/cssjit/RegisterAllocator.h:129
&gt; +    Vector&lt;JSC::MacroAssembler::RegisterID, calleeSavedRegisterCount&gt; calleeSavedRegistersToRestore()

restoreCalleeSavedRegisters/returnPreAllocatedCalleeSavedRegisters?

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:550
&gt; -#if CSS_SELECTOR_JIT_DEBUGGING &amp;&amp; ASSERT_DISABLED
&gt; +#if CSS_SELECTOR_JIT_DEBUGGING

IIRC, this was for certain debug builds, I can&apos;t remember why, that was during the initial proof-of-concept work.

Did you try debug builds?

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:865
&gt; +    

Spaaaaaaces

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:871
&gt; +static inline bool willGenerateFunctionCalls(const SelectorFragmentList&amp; selectorFragments)
&gt; +{
&gt; +    // FIXME: If this selector doesn&apos;t call any functions, then we don&apos;t need to push the link register or frame pointer.
&gt; +    UNUSED_PARAM(selectorFragments);
&gt; +    return true;
&gt; +}

I would add this with the patch, not ahead of time.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:872
&gt; +    

Spaaaaaaces

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:883
&gt; +        prologueRegister.append(JSC::X86Registers::ebp);

You can use GPRInfo::callFrameRegister to have a name for it.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:915
&gt; +    bool reservedCalleeSavedRegisters = m_registerAllocator.availableRegisterCount() &lt; minimumRegisterCountForAttributes;
&gt; +    bool callsFunctions = willGenerateFunctionCalls(m_selectorFragments);
&gt; +    generatePrologue(callsFunctions, reservedCalleeSavedRegisters, minimumRegisterCountForAttributes);

I would just have:
    bool needsEpilogue = generatePrologue(callsFunctions, reservedCalleeSavedRegisters, minimumRegisterCountForAttributes)

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:952
&gt; +        if (!m_needsAdjacentBacktrackingStart &amp;&amp; !reservedCalleeSavedRegisters &amp;&amp; !callsFunctions) {

&amp;&amp; !needsEpilogue

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:955
&gt; +            // Epilogue not needed because it wouldn&apos;t write anything.

Once you move the name to the condition, you could remove the comments.

The comments could still be valuable but I would have it as a little explanation at the beginning of this branch.
Or...you could make this little block into a method generateFunctionEndWithoutEpilogue().

&gt; Source/WebCore/cssjit/StackAllocator.h:71
&gt; +    Vector&lt;StackReference&gt; push(Vector&lt;JSC::MacroAssembler::RegisterID&gt; registerIDs)

const Vector&lt;JSC::MacroAssembler::RegisterID&gt;&amp;

&gt; Source/WebCore/cssjit/StackAllocator.h:78
&gt; +        for (unsigned i = 0; i &lt; registerCount - 1; i += 2) {

I wonder how clang compile this :)

&gt; Source/WebCore/cssjit/StackAllocator.h:82
&gt; +            stackReferences.append(StackReference(m_offsetFromTop - stackUnitInBytes / 2));
&gt; +            stackReferences.append(StackReference(m_offsetFromTop));

Is this right?

I would have thought stackReferences.append(StackReference(m_offsetFromTop)); should go before stackReferences.append(StackReference(m_offsetFromTop - stackUnitInBytes / 2));

Or maybe you should to push i + 1 before i?

&gt; Source/WebCore/cssjit/StackAllocator.h:116
&gt; +        ASSERT(stackReferences.size() == registerCount);

RELEASE_ASSERT, if we run into this, something horribly wrong has happened.

&gt; Source/WebCore/cssjit/StackAllocator.h:126
&gt; +            RELEASE_ASSERT(stackReferences[i - 1] == m_offsetFromTop &amp;&amp; stackReferences[i - 2] == m_offsetFromTop - stackUnitInBytes / 2);

Let&apos;s split this into two release assert for clarity.

&gt; Source/WebCore/cssjit/StackAllocator.h:128
&gt; +            m_assembler.popPair(registerIDs[i - 2], registerIDs[i - 1]);

Don&apos;t forget to update this if you change the order of push above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011157</commentid>
    <comment_count>9</comment_count>
      <attachid>231918</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-05-22 21:51:29 -0700</bug_when>
    <thetext>Comment on attachment 231918
Patch

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

Great!

&gt; Source/WebCore/cssjit/StackAllocator.h:105
&gt;          m_assembler.push(registerID);

Since MacroAssembler provides `pushToSave` for all environments, we can remove this ifdef and simply use `pushToSave` for x86_64 environment :)

&gt; Source/WebCore/cssjit/StackAllocator.h:146
&gt; +        m_assembler.popToRestore(registerID);

Likewise we can use `popToRestore` for `StackAllocator::pop` and remove ifdef :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011290</commentid>
    <comment_count>10</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-23 10:42:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/WebCore/cssjit/SelectorCompiler.cpp:550
&gt; &gt; -#if CSS_SELECTOR_JIT_DEBUGGING &amp;&amp; ASSERT_DISABLED
&gt; &gt; +#if CSS_SELECTOR_JIT_DEBUGGING
&gt; 
&gt; IIRC, this was for certain debug builds, I can&apos;t remember why, that was during the initial proof-of-concept work.
&gt; 
&gt; Did you try debug builds?
Yes.  It works fine.  I think this should be changed to make debugging debug builds easier.
&gt; &gt; Source/WebCore/cssjit/StackAllocator.h:82
&gt; &gt; +            stackReferences.append(StackReference(m_offsetFromTop - stackUnitInBytes / 2));
&gt; &gt; +            stackReferences.append(StackReference(m_offsetFromTop));
&gt; 
&gt; Is this right?
Yes.  The order is arbitrary, but it has to be consistent.  This way the registers are pushed in the order they are in the vector and popped in the opposite order of the given vector, which I think makes the most sense and is most like x86_64.

I fixed all other comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011302</commentid>
    <comment_count>11</comment_count>
      <attachid>231973</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-23 11:04:16 -0700</bug_when>
    <thetext>Created attachment 231973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011307</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-23 11:09:21 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Did you try debug builds?
&gt; Yes.  It works fine.  I think this should be changed to make debugging debug builds easier.
&gt; &gt; &gt; Source/WebCore/cssjit/StackAllocator.h:82
&gt; &gt; &gt; +            stackReferences.append(StackReference(m_offsetFromTop - stackUnitInBytes / 2));
&gt; &gt; &gt; +            stackReferences.append(StackReference(m_offsetFromTop));
&gt; &gt; 
&gt; &gt; Is this right?
&gt; Yes.  The order is arbitrary, but it has to be consistent.  This way the registers are pushed in the order they are in the vector and popped in the opposite order of the given vector, which I think makes the most sense and is most like x86_64.

The order in which you store registers on the stack can be arbitrary. But the StackReferences are used to access values by address, they need to match the order in which the register are stored on the stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011310</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-23 11:11:48 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; The order in which you store registers on the stack can be arbitrary. But the StackReferences are used to access values by address, they need to match the order in which the register are stored on the stack.
They do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011317</commentid>
    <comment_count>14</comment_count>
      <attachid>231975</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-23 11:37:48 -0700</bug_when>
    <thetext>Created attachment 231975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011366</commentid>
    <comment_count>15</comment_count>
      <attachid>231989</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-23 14:33:25 -0700</bug_when>
    <thetext>Created attachment 231989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011438</commentid>
    <comment_count>16</comment_count>
      <attachid>231989</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-23 17:49:01 -0700</bug_when>
    <thetext>Comment on attachment 231989
Patch

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

&gt; Source/WebCore/cssjit/RegisterAllocator.h:125
&gt; +        return Vector&lt;JSC::MacroAssembler::RegisterID, calleeSavedRegisterCount&gt;(m_reservedCalleeSavedRegisters);

Do you need to explicit copy constructor here?

&gt; Source/WebCore/cssjit/StackAllocator.h:76
&gt; +        stackReferences.reserveCapacity(registerCount);

reserveInitialCapacity()

&gt; Source/WebCore/cssjit/StackAllocator.h:113
&gt; +        ASSERT(m_offsetFromTop &gt;= stackUnitInBytes * registerCount);

Is this right on ARM64? You could have 2 registers by stack units.

This is probably only good for x86_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011441</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-05-23 18:21:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/169297</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231836</attachid>
            <date>2014-05-21 12:27:38 -0700</date>
            <delta_ts>2014-05-22 13:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133156-20140521122723.patch</filename>
            <type>text/plain</type>
            <size>3460</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTE3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTA1LTIxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBDU1Mg
SklUIHJ1biBvbiBBUk02NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVByb2xv
Z3VlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRXBpbG9ndWUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICBDYWxsIGdlbmVyYXRlUHJvbG9ndWUgYW5kIGdlbmVyYXRl
RXBpbG9ndWUgdG8gcHVzaCBhbmQgcG9wIHRoZSBsaW5rIHJlZ2lzdGVyIGFuZCBmcmFtZSBwb2lu
dGVyIG9uIEFSTTY0LgorCiAyMDE0LTA1LTIxICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgR2FyYmFnZSB3aGVuIHJ1YmJlci1iYW5kaW5nIGF0IHRoZSByaWdodCBl
ZGdlIG9mIGEgcGFnZSB6b29tZWQgdG8gbm9uLWludGVncmFsIHNjYWxlLgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5MTcyKQor
KysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzIsNiArMTcyLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcHV0ZUJhY2t0
cmFja2luZ0luZm9ybWF0aW9uKCk7CiAgICAgdm9pZCBnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigp
OworICAgIHZvaWQgZ2VuZXJhdGVQcm9sb2d1ZSgpOworICAgIHZvaWQgZ2VuZXJhdGVFcGlsb2d1
ZSgpOwogCiAgICAgLy8gRWxlbWVudCByZWxhdGlvbnMgdHJlZSB3YWxrZXIuCiAgICAgdm9pZCBn
ZW5lcmF0ZVdhbGtUb1BhcmVudE5vZGUoQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRhcmdldFJlZ2lz
dGVyKTsKQEAgLTg1OCw4ICs4NjAsMjQgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNv
bXB1dGVCYWNrdAogICAgIH0KIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlUHJvbG9ndWUoKQoreworI2lmIENQVShBUk02NCkKKyAgICBtX2Fzc2VtYmxlci5wdXNoUGFp
cihKU0M6OkFSTTY0UmVnaXN0ZXJzOjpsciwgSlNDOjpBUk02NFJlZ2lzdGVyczo6ZnApOworI2Vu
ZGlmCit9CisKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVwaWxvZ3VlKCkK
K3sKKyNpZiBDUFUoQVJNNjQpCisgICAgbV9hc3NlbWJsZXIucG9wUGFpcihKU0M6OkFSTTY0UmVn
aXN0ZXJzOjpsciwgSlNDOjpBUk02NFJlZ2lzdGVyczo6ZnApOworI2VuZGlmCit9CisKIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiB7CisgICAg
Z2VuZXJhdGVQcm9sb2d1ZSgpOworICAgIAogICAgIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJl
Z2lzdGVycyA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQgPSBt
X3JlZ2lzdGVyQWxsb2NhdG9yLmF2YWlsYWJsZVJlZ2lzdGVyQ291bnQoKTsKICAgICB1bnNpZ25l
ZCBtaW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgPSBtaW5pbXVtUmVnaXN0ZXJSZXF1
aXJlbWVudHMobV9zZWxlY3RvckZyYWdtZW50cyk7CkBAIC05MDYsMTIgKzkyNCwxNCBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlCiAgICAgICAgIGlmICghbV9uZWVk
c0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQgJiYgIXJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3Rl
cnMpIHsKICAgICAgICAgICAgIC8vIFN1Y2Nlc3MuCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAg
ICAgICBnZW5lcmF0ZUVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsK
IAogICAgICAgICAgICAgLy8gRmFpbHVyZS4KICAgICAgICAgICAgIGlmICghZmFpbHVyZUNhc2Vz
LmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmbV9hc3NlbWJs
ZXIpOwogICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMCksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0ZUVwaWxv
Z3VlKCk7CiAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7CkBAIC05MjksNiArOTQ5LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlU2VsZQogICAgICAgICAgICAgaWYgKG1fbmVlZHNBZGphY2VudEJh
Y2t0cmFja2luZ1N0YXJ0KQogICAgICAgICAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wQW5k
RGlzY2FyZFVwVG8obV9hZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKICAgICAgICAgICAgIG1f
cmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1fc3RhY2tBbGxv
Y2F0b3IpOworICAgICAgICAgICAgZ2VuZXJhdGVFcGlsb2d1ZSgpOwogICAgICAgICAgICAgbV9h
c3NlbWJsZXIucmV0KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtOTQ3LDYgKzk2OCw3
IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGUKIAogICAgICAgICBt
X3N0YWNrQWxsb2NhdG9yLnBvcEFuZERpc2NhcmRVcFRvKG1fY2hlY2tpbmdDb250ZXh0U3RhY2tS
ZWZlcmVuY2UpOwogICAgICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVDYWxsZWVTYXZl
ZFJlZ2lzdGVycyhtX3N0YWNrQWxsb2NhdG9yKTsKKyAgICAgICAgZ2VuZXJhdGVFcGlsb2d1ZSgp
OwogICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231910</attachid>
            <date>2014-05-22 13:53:17 -0700</date>
            <delta_ts>2014-05-22 16:13:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133156-20140522135259.patch</filename>
            <type>text/plain</type>
            <size>11804</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTIxNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE0LTA1LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBDU1Mg
SklUIHJ1biBvbiBBUk02NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6RnVu
Y3Rpb25DYWxsOjpzYXZlQWxsb2NhdGVkUmVnaXN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1
bmN0aW9uQ2FsbDo6cmVzdG9yZUFsbG9jYXRlZFJlZ2lzdGVycyk6CisgICAgICAgIFVzZSBTdGFj
a0FsbG9jYXRvcidzIG5ldyBwdXNoIGFuZCBwb3AgZnVuY3Rpb25zIHRvIHB1c2ggYW5kIHBvcCBh
IHZlY3RvciBpbnN0ZWFkIG9mIGl0ZXJhdGluZyBpdC4KKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAgICBSZW1vdmVkIHRoZSByZXF1aXJl
bWVudCBmb3IgYXNzZXJ0IHRvIGJlIGRpc2FibGVkIHRvIHByaW50IGRpc2Fzc2VtYmx5IHdoZW4g
ZGVidWdnaW5nIGNzcyBqaXQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUHJvbG9ndWUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVwaWxv
Z3VlKToKKyAgICAgICAgQWRkZWQgdG8gY29ycmVjdGx5IHB1c2ggdGhlIGxpbmsgcmVnaXN0ZXIg
YW5kIGZyYW1lIHBvaW50ZXIuCisgICAgICAgIFRoaXMgaXMgcmVxdWlyZWQgaWYgdGhlIGppdCBj
b2RlIGNhbGxzIGEgZnVuY3Rpb24gb24gYXJtNjQgYW5kIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyB0
b29scyBvbiB4ODZfNjQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgR2Vu
ZXJhdGUgdGhlIHByb2xvZ3VlLCBlcGlsb2d1ZSwgYW5kIG9uZSByZXR1cm4gb3BlcmF0aW9uIHRv
IGFkZCBhbiBhc3NlcnRpb24gdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucworICAgICAgICBhbmQg
dG8gY29ycmVjdGx5IGNhbGwgYXNzZXJ0aW9ucyBpbiB0aGUgU3RhY2tBbGxvY2F0b3IgZGVzdHJ1
Y3Rvci4KKyAgICAgICAgKiBjc3NqaXQvU3RhY2tBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0YWNrQWxsb2NhdG9yOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrQWxsb2Nh
dG9yOjpwb3ApOgorICAgICAgICBBZGRlZCBuZXcgdmVjdG9yIHB1c2ggYW5kIHBvcCBmdW5jdGlv
bnMgdG8gdXNlIHN0cCBhbmQgbGRiIGluc3RydWN0aW9ucyBvbiBhcm02NC4KKwogMjAxNC0wNS0y
MiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbTVNFXSBTdG9y
ZWQgc2FtcGxlcyBhcmUgbm90IGZyZWVkIHdoZW4gU291cmNlQnVmZmVyIGlzIHJlbW92ZWQgZnJv
bSBNZWRpYVNvdXJjZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAkocmV2
aXNpb24gMTY5MTIxKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsMjAgKzE2NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2F2
ZUFsbG9jYXRlZFJlZ2lzdGVycygpCiAgICAgewogICAgICAgICBBU1NFUlQobV9zYXZlZFJlZ2lz
dGVyU3RhY2tSZWZlcmVuY2VzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgYWxsb2Nh
dGVkUmVnaXN0ZXJzQ291bnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVy
cygpLnNpemUoKTsKLSAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLnJlc2Vy
dmVDYXBhY2l0eShhbGxvY2F0ZWRSZWdpc3RlcnNDb3VudCk7Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFsbG9jYXRlZFJlZ2lzdGVyc0NvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJRCA9IG1fcmVnaXN0
ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKClbaV07Ci0gICAgICAgICAgICBtX3NhdmVk
UmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMuYXBwZW5kKG1fc3RhY2tBbGxvY2F0b3IucHVzaChyZWdp
c3RlcklEKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVu
Y2VzLmFwcGVuZFZlY3RvcihtX3N0YWNrQWxsb2NhdG9yLnB1c2gobV9yZWdpc3RlckFsbG9jYXRv
ci5hbGxvY2F0ZWRSZWdpc3RlcnMoKSkpOwogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZUFsbG9j
YXRlZFJlZ2lzdGVycygpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lz
dGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVycygpLnNpemUoKTsgaSA+IDA7IC0taSkKLSAg
ICAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wKG1fc2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJl
bmNlc1tpIC0gMV0sIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKClbaSAt
IDFdKTsKKyAgICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3AobV9zYXZlZFJlZ2lzdGVyU3RhY2tS
ZWZlcmVuY2VzLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVycygpKTsKICAg
ICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmNsZWFyKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCShyZXZpc2lv
biAxNjkxMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyMSw2ICsyMjEsMTAgQEAgcHJpdmF0ZToKICAgICBBc3NlbWJs
ZXI6Okp1bXAgbW9kdWxvKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiwgQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIGlucHV0RGl2aWRlbmQsIGludCBkaXZpc29yKTsKICAgICB2b2lk
IG1vZHVsb0lzWmVybyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxl
cjo6UmVnaXN0ZXJJRCBpbnB1dERpdmlkZW5kLCBpbnQgZGl2aXNvcik7CiAKKyAgICB2b2lkIGdl
bmVyYXRlUHJvbG9ndWUoKTsKKyAgICB2b2lkIGdlbmVyYXRlRXBpbG9ndWUoKTsKKyAgICBWZWN0
b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlPiBtX3Byb2xvZ3VlU3RhY2tSZWZlcmVu
Y2VzOworCiAgICAgQXNzZW1ibGVyIG1fYXNzZW1ibGVyOwogICAgIFJlZ2lzdGVyQWxsb2NhdG9y
IG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3IgbV9zdGFja0FsbG9jYXRv
cjsKQEAgLTU0Miw3ICs1NDYsNyBAQCBpbmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBT
ZWxlY3RvCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnVuY3Rpb25DYWxscy5zaXpl
KCk7IGkrKykKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fZnVuY3Rpb25DYWxsc1tpXS5maXJz
dCwgbV9mdW5jdGlvbkNhbGxzW2ldLnNlY29uZCk7CiAKLSNpZiBDU1NfU0VMRUNUT1JfSklUX0RF
QlVHR0lORyAmJiBBU1NFUlRfRElTQUJMRUQKKyNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lO
RwogICAgIGNvZGVSZWYgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseSgi
Q1NTIFNlbGVjdG9yIEpJVCBmb3IgXCIlc1wiIiwgbV9vcmlnaW5hbFNlbGVjdG9yLT5zZWxlY3Rv
clRleHQoKS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCiAgICAgY29kZVJlZiA9IEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgKCJDU1MgU2VsZWN0b3IgSklUIikpOwpAQCAtODU4LDggKzg2MiwzOCBA
QCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29tcHV0ZUJhY2t0CiAgICAgfQogfQogCitp
bmxpbmUgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUHJvbG9ndWUoKQorewor
I2lmIENQVShBUk02NCkKKyAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCwgMj4gcHJvbG9ndWVSZWdpc3RlcnM7CisgICAgcHJvbG9ndWVSZWdpc3RlcnMuYXBwZW5kKEpT
Qzo6QVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICBwcm9sb2d1ZVJlZ2lzdGVycy5hcHBlbmQoSlND
OjpBUk02NFJlZ2lzdGVyczo6ZnApOworICAgIG1fcHJvbG9ndWVTdGFja1JlZmVyZW5jZXMgPSBt
X3N0YWNrQWxsb2NhdG9yLnB1c2gocHJvbG9ndWVSZWdpc3RlcnMpOworI2VsaWYgQ1BVKFg4Nl82
NCkgJiYgQ1NTX1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcKKyAgICBWZWN0b3I8SlNDOjpNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCwgMT4gcHJvbG9ndWVSZWdpc3RlcjsKKyAgICBwcm9sb2d1ZVJl
Z2lzdGVyLmFwcGVuZChKU0M6Olg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICBtX3Byb2xvZ3VlU3Rh
Y2tSZWZlcmVuY2VzID0gbV9zdGFja0FsbG9jYXRvci5wdXNoKHByb2xvZ3VlUmVnaXN0ZXIpOwor
I2VuZGlmCit9CisgICAgCitpbmxpbmUgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlRXBpbG9ndWUoKQoreworI2lmIENQVShBUk02NCkKKyAgICBWZWN0b3I8SlNDOjpNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCwgMj4gcHJvbG9ndWVSZWdpc3RlcnM7CisgICAgcHJvbG9ndWVS
ZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICBwcm9sb2d1ZVJl
Z2lzdGVycy5hcHBlbmQoSlNDOjpBUk02NFJlZ2lzdGVyczo6ZnApOworICAgIG1fc3RhY2tBbGxv
Y2F0b3IucG9wKG1fcHJvbG9ndWVTdGFja1JlZmVyZW5jZXMsIHByb2xvZ3VlUmVnaXN0ZXJzKTsK
KyNlbGlmIENQVShYODZfNjQpICYmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCisgICAgVmVj
dG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIDE+IHByb2xvZ3VlUmVnaXN0ZXI7
CisgICAgcHJvbG9ndWVSZWdpc3Rlci5hcHBlbmQoSlNDOjpYODZSZWdpc3RlcnM6OmVicCk7Cisg
ICAgbV9zdGFja0FsbG9jYXRvci5wb3AobV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlcywgcHJvbG9n
dWVSZWdpc3Rlcik7CisjZW5kaWYKK30KKyAgICAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiB7CisgICAgZ2VuZXJhdGVQcm9sb2d1ZSgpOwor
ICAgIAogICAgIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyA9IGZhbHNlOwogICAg
IHVuc2lnbmVkIGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmF2
YWlsYWJsZVJlZ2lzdGVyQ291bnQoKTsKICAgICB1bnNpZ25lZCBtaW5pbXVtUmVnaXN0ZXJDb3Vu
dEZvckF0dHJpYnV0ZXMgPSBtaW5pbXVtUmVnaXN0ZXJSZXF1aXJlbWVudHMobV9zZWxlY3RvckZy
YWdtZW50cyk7CkBAIC05MDIsMTcgKzkzNiwxOSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVTZWxlCiAKICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdp
c3RlcihlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKIAorICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qg
cmV0dXJuczsKKyAgICAKICAgICBpZiAobV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpT
aW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKICAgICAgICAgaWYgKCFtX25lZWRzQWRqYWNlbnRCYWNr
dHJhY2tpbmdTdGFydCAmJiAhcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycykgewogICAgICAg
ICAgICAgLy8gU3VjY2Vzcy4KICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMSksIHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnJldCgpOworICAgICAgICAgICAgcmV0dXJucy5hcHBlbmQobV9hc3NlbWJsZXIuanVtcCgp
KTsKIAogICAgICAgICAgICAgLy8gRmFpbHVyZS4KICAgICAgICAgICAgIGlmICghZmFpbHVyZUNh
c2VzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmbV9hc3Nl
bWJsZXIpOwogICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5yZXQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm5zLmFwcGVuZChtX2Fzc2VtYmxlci5qdW1w
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU3Vj
Y2Vzcy4KQEAgLTkyOSw3ICs5NjUsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVTZWxlCiAgICAgICAgICAgICBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3Rh
cnQpCiAgICAgICAgICAgICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3BBbmREaXNjYXJkVXBUbyht
X2FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOwogICAgICAgICAgICAgbV9yZWdpc3RlckFsbG9j
YXRvci5yZXN0b3JlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMobV9zdGFja0FsbG9jYXRvcik7Ci0gICAg
ICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKKyAgICAgICAgICAgIHJldHVybnMuYXBwZW5kKG1f
YXNzZW1ibGVyLmp1bXAoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBBU1NF
UlQobV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hl
Y2tpbmdDb250ZXh0KTsKQEAgLTk0Nyw4ICs5ODMsMTMgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlU2VsZQogCiAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wQW5kRGlz
Y2FyZFVwVG8obV9jaGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSk7CiAgICAgICAgIG1fcmVn
aXN0ZXJBbGxvY2F0b3IucmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1fc3RhY2tBbGxvY2F0
b3IpOwotICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKKyAgICAgICAgcmV0dXJucy5hcHBlbmQo
bV9hc3NlbWJsZXIuanVtcCgpKTsKICAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoIXJl
dHVybnMuZW1wdHkoKSk7CisgICAgcmV0dXJucy5saW5rKCZtX2Fzc2VtYmxlcik7CisgICAgZ2Vu
ZXJhdGVFcGlsb2d1ZSgpOworICAgIG1fYXNzZW1ibGVyLnJldCgpOwogfQogCiBzdGF0aWMgaW5s
aW5lIEFzc2VtYmxlcjo6SnVtcCB0ZXN0SXNFbGVtZW50RmxhZ09uTm9kZShBc3NlbWJsZXI6OlJl
c3VsdENvbmRpdGlvbiBjb25kaXRpb24sIEFzc2VtYmxlciYgYXNzZW1ibGVyLCBBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgbm9kZUFkZHJlc3MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU3Rh
Y2tBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tB
bGxvY2F0b3IuaAkocmV2aXNpb24gMTY5MTIxKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0
YWNrQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDEyICs2OCwzOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3ApOwogICAgIH0K
IAotICAgIC8vIEZJWE1FOiBBUk02NCBuZWVkcyBhbiBBUEkgdGFrZSBhIGxpc3Qgb2YgcmVnaXN0
ZXIgdG8gcHVzaCBhbmQgcG9wIHRvIHVzZSBzdHJwIGFuZCBsZHJwIHdoZW4gcG9zc2libGUuCisg
ICAgVmVjdG9yPFN0YWNrUmVmZXJlbmNlPiBwdXNoKFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklEPiByZWdpc3RlcklEcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2hhc0Z1bmN0aW9uQ2FsbFBhZGRpbmcpOworICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNv
dW50ID0gcmVnaXN0ZXJJRHMuc2l6ZSgpOworICAgICAgICBWZWN0b3I8U3RhY2tSZWZlcmVuY2U+
IHN0YWNrUmVmZXJlbmNlczsKKyAgICAgICAgc3RhY2tSZWZlcmVuY2VzLnJlc2VydmVDYXBhY2l0
eShyZWdpc3RlckNvdW50KTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZWdpc3RlckNvdW50IC0gMTsgaSArPSAyKSB7CisgICAgICAgICAgICBtX2Fz
c2VtYmxlci5wdXNoUGFpcihyZWdpc3RlcklEc1tpXSwgcmVnaXN0ZXJJRHNbaSArIDFdKTsKKyAg
ICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICAg
ICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3Ag
LSBzdGFja1VuaXRJbkJ5dGVzIC8gMikpOworICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFw
cGVuZChTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3ApKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocmVnaXN0ZXJDb3VudCAlIDIpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hU
b1NhdmUocmVnaXN0ZXJJRHNbcmVnaXN0ZXJDb3VudCAtIDFdKTsKKyAgICAgICAgICAgIG1fb2Zm
c2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICAgICAgc3RhY2tSZWZlcmVu
Y2VzLmFwcGVuZChTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3ApKTsKKyAgICAgICAgfQor
I2Vsc2UKKyAgICAgICAgZm9yIChhdXRvIHJlZ2lzdGVySUQgOiByZWdpc3RlcklEcykgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIucHVzaChyZWdpc3RlcklEKTsKKyAgICAgICAgICAgIG1fb2Zm
c2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICAgICAgc3RhY2tSZWZlcmVu
Y2VzLmFwcGVuZChTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3ApKTsKKyAgICAgICAgfQor
I2VuZGlmCisgICAgICAgIHJldHVybiBzdGFja1JlZmVyZW5jZXM7CisgICAgfQorICAgIAogICAg
IFN0YWNrUmVmZXJlbmNlIHB1c2goSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdp
c3RlcklEKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxs
UGFkZGluZyk7CiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICBtX2Fzc2VtYmxlci5tX2Fzc2VtYmxl
ci5zdHI8NjQ+KHJlZ2lzdGVySUQsIEpTQzo6QVJNNjRSZWdpc3RlcnM6OnNwLCBKU0M6OlByZUlu
ZGV4KC0xNikpOworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoVG9TYXZlKHJlZ2lzdGVySUQpOwog
I2Vsc2UKICAgICAgICAgbV9hc3NlbWJsZXIucHVzaChyZWdpc3RlcklEKTsKICNlbmRpZgpAQCAt
ODEsMTQgKzEwOCw0MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGFja1JlZmVyZW5jZSht
X29mZnNldEZyb21Ub3ApOwogICAgIH0KIAorICAgIHZvaWQgcG9wKFZlY3RvcjxTdGFja1JlZmVy
ZW5jZT4gc3RhY2tSZWZlcmVuY2VzLCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
ZXJJRD4gcmVnaXN0ZXJJRHMpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9oYXNG
dW5jdGlvbkNhbGxQYWRkaW5nKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVy
Q291bnQgPSByZWdpc3RlcklEcy5zaXplKCk7CisgICAgICAgIEFTU0VSVChzdGFja1JlZmVyZW5j
ZXMuc2l6ZSgpID09IHJlZ2lzdGVyQ291bnQpOworICAgICAgICBBU1NFUlQobV9vZmZzZXRGcm9t
VG9wID49IHN0YWNrVW5pdEluQnl0ZXMgKiByZWdpc3RlckNvdW50KTsKKyNpZiBDUFUoQVJNNjQp
CisgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnRPZGQgPSByZWdpc3RlckNvdW50ICUgMjsK
KyAgICAgICAgaWYgKHJlZ2lzdGVyQ291bnRPZGQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YWNrUmVmZXJlbmNlc1tyZWdpc3RlckNvdW50IC0gMV0gPT0gbV9vZmZzZXRGcm9tVG9w
KTsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJbkJ5dGVzOworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIucG9wVG9SZXN0b3JlKHJlZ2lzdGVySURzW3JlZ2lzdGVyQ291
bnQgLSAxXSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVnaXN0ZXJD
b3VudCAtIHJlZ2lzdGVyQ291bnRPZGQ7IGkgPiAwOyBpIC09IDIpIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNlc1tpIC0gMV0gPT0gbV9vZmZzZXRGcm9tVG9wICYm
IHN0YWNrUmVmZXJlbmNlc1tpIC0gMl0gPT0gbV9vZmZzZXRGcm9tVG9wIC0gc3RhY2tVbml0SW5C
eXRlcyAvIDIpOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wIC09IHN0YWNrVW5pdEluQnl0
ZXM7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5wb3BQYWlyKHJlZ2lzdGVySURzW2kgLSAyXSwg
cmVnaXN0ZXJJRHNbaSAtIDFdKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gcmVnaXN0ZXJDb3VudDsgaSA+IDA7IC0taSkgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW2kgLSAxXSA9PSBtX29mZnNldEZyb21Ub3ApOworICAg
ICAgICAgICAgbV9vZmZzZXRGcm9tVG9wIC09IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5wb3AocmVnaXN0ZXJJRHNbaSAtIDFdKTsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgfQorICAgIAogICAgIHZvaWQgcG9wKFN0YWNrUmVmZXJlbmNlIHN0YWNrUmVmZXJlbmNl
LCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZ2lzdGVySUQpCiAgICAgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdGFja1JlZmVyZW5jZSA9PSBtX29mZnNldEZyb21Ub3ApOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9oYXNGdW5jdGlvbkNhbGxQYWRkaW5nKTsKLSAgICAg
ICAgQVNTRVJUKG1fb2Zmc2V0RnJvbVRvcCA+IDApOworICAgICAgICBBU1NFUlQobV9vZmZzZXRG
cm9tVG9wID49IHN0YWNrVW5pdEluQnl0ZXMpOwogICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0g
c3RhY2tVbml0SW5CeXRlczsKICNpZiBDUFUoQVJNNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmxkcjw2ND4ocmVnaXN0ZXJJRCwgSlNDOjpBUk02NFJlZ2lzdGVyczo6c3AsIEpT
Qzo6UG9zdEluZGV4KDE2KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnBvcFRvUmVzdG9yZShyZWdp
c3RlcklEKTsKICNlbHNlCiAgICAgICAgIG1fYXNzZW1ibGVyLnBvcChyZWdpc3RlcklEKTsKICNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231917</attachid>
            <date>2014-05-22 16:13:55 -0700</date>
            <delta_ts>2014-05-22 16:46:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133156-20140522161338.patch</filename>
            <type>text/plain</type>
            <size>13362</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTIyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE0LTA1LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBDU1Mg
SklUIHJ1biBvbiBBUk02NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6RnVu
Y3Rpb25DYWxsOjpzYXZlQWxsb2NhdGVkUmVnaXN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1
bmN0aW9uQ2FsbDo6cmVzdG9yZUFsbG9jYXRlZFJlZ2lzdGVycyk6CisgICAgICAgIFVzZSBTdGFj
a0FsbG9jYXRvcidzIG5ldyBwdXNoIGFuZCBwb3AgZnVuY3Rpb25zIHRvIHB1c2ggYW5kIHBvcCBh
IHZlY3RvciBpbnN0ZWFkIG9mIGl0ZXJhdGluZyBpdC4KKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAgICBSZW1vdmVkIHRoZSByZXF1aXJl
bWVudCBmb3IgYXNzZXJ0IHRvIGJlIGRpc2FibGVkIHRvIHByaW50IGRpc2Fzc2VtYmx5IHdoZW4g
ZGVidWdnaW5nIGNzcyBqaXQuCisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjp3
aWxsR2VuZXJhdGVGdW5jdGlvbkNhbGxzKTogQWRkZWQgc3R1Yi4KKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVQcm9sb2d1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRXBpbG9ndWUpOgorICAgICAgICBBZGRlZCB0byBjb3JyZWN0bHkgcHVz
aCB0aGUgbGluayByZWdpc3RlciBhbmQgZnJhbWUgcG9pbnRlci4KKyAgICAgICAgVGhpcyBpcyBy
ZXF1aXJlZCBpZiB0aGUgaml0IGNvZGUgY2FsbHMgYSBmdW5jdGlvbiBvbiBhcm02NCBhbmQgaGVs
cGZ1bCBmb3IgZGVidWdnaW5nIHRvb2xzIG9uIHg4Nl82NC4KKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNo
ZWNrZXIpOgorICAgICAgICBHZW5lcmF0ZSB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIHdoaWNo
IHJlc3BlY3RpdmVseSBwdXNoIGFuZCBwb3AKKyAgICAgICAgdGhlIGxpbmsgcmVnaXN0ZXIsIGZy
YW1lIHBvaW50ZXIsIGFuZCBjYWxsZWUgc2F2ZWQgcmVnaXN0ZXJzIGlmIG5lZWRlZC4KKyAgICAg
ICAgKiBjc3NqaXQvU3RhY2tBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrQWxs
b2NhdG9yOjpwdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrQWxsb2NhdG9yOjpwb3ApOgor
ICAgICAgICBBZGRlZCBuZXcgdmVjdG9yIHB1c2ggYW5kIHBvcCBmdW5jdGlvbnMgdG8gdXNlIHN0
cCBhbmQgbGRiIGluc3RydWN0aW9ucyBvbiBhcm02NC4KKwogMjAxNC0wNS0yMiAgTWFydGluIEhv
Y2sgIDxtaG9ja0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gRW5hYmxlIC1hcHBsZS1zeXN0
ZW0tIHN0eWxlZCBlbGVtZW50cyB0byByZXNwb25kIHRvIHN5c3RlbSBmb250IHNpemUgY2hhbmdl
cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHJldmlzaW9uIDE2OTEy
MSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlvbkNhbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMTY1LDIwICsxNjUsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNhdmVBbGxvY2F0ZWRS
ZWdpc3RlcnMoKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc2F2ZWRSZWdpc3RlclN0YWNrUmVm
ZXJlbmNlcy5pc0VtcHR5KCkpOwotCi0gICAgICAgIHVuc2lnbmVkIGFsbG9jYXRlZFJlZ2lzdGVy
c0NvdW50ID0gbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZWRSZWdpc3RlcnMoKS5zaXplKCk7
Ci0gICAgICAgIG1fc2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlcy5yZXNlcnZlQ2FwYWNpdHko
YWxsb2NhdGVkUmVnaXN0ZXJzQ291bnQpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhbGxvY2F0ZWRSZWdpc3RlcnNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZ2lzdGVySUQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9y
LmFsbG9jYXRlZFJlZ2lzdGVycygpW2ldOwotICAgICAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3Rh
Y2tSZWZlcmVuY2VzLmFwcGVuZChtX3N0YWNrQWxsb2NhdG9yLnB1c2gocmVnaXN0ZXJJRCkpOwot
ICAgICAgICB9CisgICAgICAgIG1fc2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlcy5hcHBlbmRW
ZWN0b3IobV9zdGFja0FsbG9jYXRvci5wdXNoKG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVk
UmVnaXN0ZXJzKCkpKTsKICAgICB9CiAKICAgICB2b2lkIHJlc3RvcmVBbGxvY2F0ZWRSZWdpc3Rl
cnMoKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9yZWdpc3RlckFsbG9jYXRv
ci5hbGxvY2F0ZWRSZWdpc3RlcnMoKS5zaXplKCk7IGkgPiAwOyAtLWkpCi0gICAgICAgICAgICBt
X3N0YWNrQWxsb2NhdG9yLnBvcChtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXNbaSAtIDFd
LCBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVycygpW2kgLSAxXSk7CisgICAg
ICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wKG1fc2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlcywg
bV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZWRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fc2F2
ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlcy5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5MTIxKQor
KysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjEsNiArMjIxLDEwIEBAIHByaXZhdGU6CiAgICAgQXNzZW1ibGVyOjpKdW1wIG1v
ZHVsbyhKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24sIEFzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBpbnB1dERpdmlkZW5kLCBpbnQgZGl2aXNvcik7CiAgICAgdm9pZCBtb2R1bG9Jc1pl
cm8oQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgaW5wdXREaXZpZGVuZCwgaW50IGRpdmlzb3IpOwogCisgICAgdm9pZCBnZW5lcmF0ZVByb2xv
Z3VlKGJvb2wgY2FsbHNGdW5jdGlvbnMsIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVy
cywgdW5zaWduZWQgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzKTsKKyAgICB2b2lk
IGdlbmVyYXRlRXBpbG9ndWUoYm9vbCBjYWxsc0Z1bmN0aW9ucywgYm9vbCByZXNlcnZlZENhbGxl
ZVNhdmVkUmVnaXN0ZXJzKTsKKyAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJl
bmNlPiBtX3Byb2xvZ3VlU3RhY2tSZWZlcmVuY2VzOworCiAgICAgQXNzZW1ibGVyIG1fYXNzZW1i
bGVyOwogICAgIFJlZ2lzdGVyQWxsb2NhdG9yIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3Rh
Y2tBbGxvY2F0b3IgbV9zdGFja0FsbG9jYXRvcjsKQEAgLTU0Miw3ICs1NDYsNyBAQCBpbmxpbmUg
U2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZnVuY3Rpb25DYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKG1fZnVuY3Rpb25DYWxsc1tpXS5maXJzdCwgbV9mdW5jdGlvbkNhbGxzW2ldLnNlY29uZCk7
CiAKLSNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORyAmJiBBU1NFUlRfRElTQUJMRUQKKyNp
ZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORwogICAgIGNvZGVSZWYgPSBsaW5rQnVmZmVyLmZp
bmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseSgiQ1NTIFNlbGVjdG9yIEpJVCBmb3IgXCIlc1wiIiwg
bV9vcmlnaW5hbFNlbGVjdG9yLT5zZWxlY3RvclRleHQoKS51dGY4KCkuZGF0YSgpKTsKICNlbHNl
CiAgICAgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJDU1MgU2VsZWN0b3Ig
SklUIikpOwpAQCAtODU3LDE3ICs4NjEsNTcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmNvbXB1dGVCYWNrdAogICAgICAgICB9CiAgICAgfQogfQotCisgICAgCitzdGF0aWMgaW5saW5l
IGJvb2wgd2lsbEdlbmVyYXRlRnVuY3Rpb25DYWxscyhjb25zdCBTZWxlY3RvckZyYWdtZW50TGlz
dCYgc2VsZWN0b3JGcmFnbWVudHMpCit7CisgICAgLy8gRklYTUU6IElmIHRoaXMgc2VsZWN0b3Ig
ZG9lc24ndCBjYWxsIGFueSBmdW5jdGlvbnMsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBwdXNoIHRo
ZSBsaW5rIHJlZ2lzdGVyIG9yIGZyYW1lIHBvaW50ZXIuCisgICAgVU5VU0VEX1BBUkFNKHNlbGVj
dG9yRnJhZ21lbnRzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAKK2lubGluZSB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVQcm9sb2d1ZShib29sIGNhbGxzRnVuY3Rpb25z
LCBib29sIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMsIHVuc2lnbmVkIG1pbmltdW1SZWdp
c3RlckNvdW50Rm9yQXR0cmlidXRlcykKK3sKKyAgICBpZiAoY2FsbHNGdW5jdGlvbnMpIHsKKyNp
ZiBDUFUoQVJNNjQpCisgICAgICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklELCAyPiBwcm9sb2d1ZVJlZ2lzdGVyczsKKyAgICAgICAgcHJvbG9ndWVSZWdpc3RlcnMuYXBw
ZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgcHJvbG9ndWVSZWdpc3RlcnMu
YXBwZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmZwKTsKKyAgICAgICAgbV9wcm9sb2d1ZVN0YWNr
UmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChwcm9sb2d1ZVJlZ2lzdGVycyk7Cisj
ZWxpZiBDUFUoWDg2XzY0KSAmJiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORworICAgICAgICBW
ZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgMT4gcHJvbG9ndWVSZWdpc3Rl
cjsKKyAgICAgICAgcHJvbG9ndWVSZWdpc3Rlci5hcHBlbmQoSlNDOjpYODZSZWdpc3RlcnM6OmVi
cCk7CisgICAgICAgIG1fcHJvbG9ndWVTdGFja1JlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9y
LnB1c2gocHJvbG9ndWVSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHJlc2VydmVk
Q2FsbGVlU2F2ZWRSZWdpc3RlcnMpCisgICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzZXJ2
ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1fc3RhY2tBbGxvY2F0b3IsIG1pbmltdW1SZWdpc3RlckNv
dW50Rm9yQXR0cmlidXRlcyAtIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYXZhaWxhYmxlUmVnaXN0ZXJD
b3VudCgpKTsKK30KKyAgICAKK2lubGluZSB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVFcGlsb2d1ZShib29sIGNhbGxzRnVuY3Rpb25zLCBib29sIHJlc2VydmVkQ2FsbGVlU2F2
ZWRSZWdpc3RlcnMpCit7CisgICAgaWYgKGNhbGxzRnVuY3Rpb25zKSB7CisjaWYgQ1BVKEFSTTY0
KQorICAgICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgMj4gcHJv
bG9ndWVSZWdpc3RlcnM7CisgICAgICAgIHByb2xvZ3VlUmVnaXN0ZXJzLmFwcGVuZChKU0M6OkFS
TTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIHByb2xvZ3VlUmVnaXN0ZXJzLmFwcGVuZChKU0M6
OkFSTTY0UmVnaXN0ZXJzOjpmcCk7CisgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wKG1fcHJv
bG9ndWVTdGFja1JlZmVyZW5jZXMsIHByb2xvZ3VlUmVnaXN0ZXJzKTsKKyNlbGlmIENQVShYODZf
NjQpICYmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCisgICAgICAgIFZlY3RvcjxKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCAxPiBwcm9sb2d1ZVJlZ2lzdGVyOworICAgICAgICBw
cm9sb2d1ZVJlZ2lzdGVyLmFwcGVuZChKU0M6Olg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAgICAgICAg
bV9zdGFja0FsbG9jYXRvci5wb3AobV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlcywgcHJvbG9ndWVS
ZWdpc3Rlcik7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdp
c3RlcnMpCisgICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZUNhbGxlZVNhdmVkUmVn
aXN0ZXJzKG1fc3RhY2tBbGxvY2F0b3IpOworfQorICAgIAogdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCkKIHsKLSAgICBib29sIHJlc2VydmVkQ2Fs
bGVlU2F2ZWRSZWdpc3RlcnMgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBhdmFpbGFibGVSZWdpc3Rl
ckNvdW50ID0gbV9yZWdpc3RlckFsbG9jYXRvci5hdmFpbGFibGVSZWdpc3RlckNvdW50KCk7CiAg
ICAgdW5zaWduZWQgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzID0gbWluaW11bVJl
Z2lzdGVyUmVxdWlyZW1lbnRzKG1fc2VsZWN0b3JGcmFnbWVudHMpOwotICAgIGlmIChhdmFpbGFi
bGVSZWdpc3RlckNvdW50IDwgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzKSB7Ci0g
ICAgICAgIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMgPSB0cnVlOwotICAgICAgICBtX3Jl
Z2lzdGVyQWxsb2NhdG9yLnJlc2VydmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhtX3N0YWNrQWxsb2Nh
dG9yLCBtaW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgLSBhdmFpbGFibGVSZWdpc3Rl
ckNvdW50KTsKLSAgICB9Ci0KKyAgICBib29sIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMg
PSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmF2YWlsYWJsZVJlZ2lzdGVyQ291bnQoKSA8IG1pbmltdW1S
ZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlczsKKyAgICBib29sIGNhbGxzRnVuY3Rpb25zID0gd2ls
bEdlbmVyYXRlRnVuY3Rpb25DYWxscyhtX3NlbGVjdG9yRnJhZ21lbnRzKTsKKyAgICBnZW5lcmF0
ZVByb2xvZ3VlKGNhbGxzRnVuY3Rpb25zLCByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzLCBt
aW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMpOworICAgIAogICAgIG1fcmVnaXN0ZXJB
bGxvY2F0b3IuYWxsb2NhdGVSZWdpc3RlcihlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKIAogICAg
IGlmIChtX2Z1bmN0aW9uVHlwZSA9PSBGdW5jdGlvblR5cGU6OlNlbGVjdG9yQ2hlY2tlcldpdGhD
aGVja2luZ0NvbnRleHQpCkBAIC05MDMsMTUgKzk0NywxNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVTZWxlCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRl
UmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBpZiAobV9mdW5jdGlvblR5
cGUgPT0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAgICAgaWYg
KCFtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCAmJiAhcmVzZXJ2ZWRDYWxsZWVTYXZl
ZFJlZ2lzdGVycykgeworICAgICAgICBpZiAoIW1fbmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0
YXJ0ICYmICFyZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzICYmICFjYWxsc0Z1bmN0aW9ucykg
ewogICAgICAgICAgICAgLy8gU3VjY2Vzcy4KICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmUo
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHJldHVyblJlZ2lzdGVyKTsKKyAgICAgICAgICAg
IC8vIEVwaWxvZ3VlIG5vdCBuZWVkZWQgYmVjYXVzZSBpdCB3b3VsZG4ndCB3cml0ZSBhbnl0aGlu
Zy4KICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnJldCgpOwogCiAgICAgICAgICAgICAvLyBGYWls
dXJlLgogICAgICAgICAgICAgaWYgKCFmYWlsdXJlQ2FzZXMuZW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmV0dXJuUmVnaXN0
ZXIpOworICAgICAgICAgICAgICAgIC8vIEVwaWxvZ3VlIG5vdCBuZWVkZWQgYmVjYXVzZSBpdCB3
b3VsZG4ndCB3cml0ZSBhbnl0aGluZy4KICAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5yZXQo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTkyOCw3ICs5NzQsNyBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlCiAKICAgICAgICAgICAgIGlm
IChtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCkKICAgICAgICAgICAgICAgICBtX3N0
YWNrQWxsb2NhdG9yLnBvcEFuZERpc2NhcmRVcFRvKG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFy
dCk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVDYWxsZWVTYXZlZFJl
Z2lzdGVycyhtX3N0YWNrQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIGdlbmVyYXRlRXBpbG9ndWUo
Y2FsbHNGdW5jdGlvbnMsIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMpOwogICAgICAgICAg
ICAgbV9hc3NlbWJsZXIucmV0KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtOTQ2LDcg
Kzk5Miw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGUKICAgICAg
ICAgfQogCiAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wQW5kRGlzY2FyZFVwVG8obV9jaGVj
a2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSk7Ci0gICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3Iu
cmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1fc3RhY2tBbGxvY2F0b3IpOworICAgICAgICBn
ZW5lcmF0ZUVwaWxvZ3VlKGNhbGxzRnVuY3Rpb25zLCByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0
ZXJzKTsKICAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CiAgICAgfQogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE2OTEyMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCwx
MiArNjgsMzkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RhY2tSZWZlcmVuY2UobV9vZmZz
ZXRGcm9tVG9wKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQVJNNjQgbmVlZHMgYW4gQVBJIHRh
a2UgYSBsaXN0IG9mIHJlZ2lzdGVyIHRvIHB1c2ggYW5kIHBvcCB0byB1c2Ugc3RycCBhbmQgbGRy
cCB3aGVuIHBvc3NpYmxlLgorICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gcHVzaChWZWN0b3I8
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gcmVnaXN0ZXJJRHMpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9oYXNGdW5jdGlvbkNhbGxQYWRkaW5nKTsKKyAgICAgICAg
dW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVySURzLnNpemUoKTsKKyAgICAgICAgVmVj
dG9yPFN0YWNrUmVmZXJlbmNlPiBzdGFja1JlZmVyZW5jZXM7CisgICAgICAgIHN0YWNrUmVmZXJl
bmNlcy5yZXNlcnZlQ2FwYWNpdHkocmVnaXN0ZXJDb3VudCk7CisjaWYgQ1BVKEFSTTY0KQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudCAtIDE7IGkgKz0gMikg
eworICAgICAgICAgICAgbV9hc3NlbWJsZXIucHVzaFBhaXIocmVnaXN0ZXJJRHNbaV0sIHJlZ2lz
dGVySURzW2kgKyAxXSk7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tVbml0
SW5CeXRlczsKKyAgICAgICAgICAgIHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZlcmVu
Y2UobV9vZmZzZXRGcm9tVG9wIC0gc3RhY2tVbml0SW5CeXRlcyAvIDIpKTsKKyAgICAgICAgICAg
IHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wKSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlZ2lzdGVyQ291bnQgJSAyKSB7CisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5wdXNoVG9TYXZlKHJlZ2lzdGVySURzW3JlZ2lzdGVyQ291bnQgLSAxXSk7
CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tVbml0SW5CeXRlczsKKyAgICAg
ICAgICAgIHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9t
VG9wKSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGZvciAoYXV0byByZWdpc3RlcklEIDog
cmVnaXN0ZXJJRHMpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2gocmVnaXN0ZXJJRCk7
CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tVbml0SW5CeXRlczsKKyAgICAg
ICAgICAgIHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9t
VG9wKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICByZXR1cm4gc3RhY2tSZWZlcmVuY2Vz
OworICAgIH0KKyAgICAKICAgICBTdGFja1JlZmVyZW5jZSBwdXNoKEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJRCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFtX2hhc0Z1bmN0aW9uQ2FsbFBhZGRpbmcpOwogI2lmIENQVShBUk02NCkKLSAgICAgICAgbV9h
c3NlbWJsZXIubV9hc3NlbWJsZXIuc3RyPDY0PihyZWdpc3RlcklELCBKU0M6OkFSTTY0UmVnaXN0
ZXJzOjpzcCwgSlNDOjpQcmVJbmRleCgtMTYpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIucHVzaFRv
U2F2ZShyZWdpc3RlcklEKTsKICNlbHNlCiAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2gocmVnaXN0
ZXJJRCk7CiAjZW5kaWYKQEAgLTgxLDE0ICsxMDgsNDIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wKTsKICAgICB9CiAKKyAgICB2b2lkIHBv
cChWZWN0b3I8U3RhY2tSZWZlcmVuY2U+IHN0YWNrUmVmZXJlbmNlcywgVmVjdG9yPEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHJlZ2lzdGVySURzKQorICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gcmVnaXN0ZXJJRHMuc2l6ZSgpOworICAgICAgICBB
U1NFUlQoc3RhY2tSZWZlcmVuY2VzLnNpemUoKSA9PSByZWdpc3RlckNvdW50KTsKKyAgICAgICAg
QVNTRVJUKG1fb2Zmc2V0RnJvbVRvcCA+PSBzdGFja1VuaXRJbkJ5dGVzICogcmVnaXN0ZXJDb3Vu
dCk7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50T2RkID0g
cmVnaXN0ZXJDb3VudCAlIDI7CisgICAgICAgIGlmIChyZWdpc3RlckNvdW50T2RkKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFja1JlZmVyZW5jZXNbcmVnaXN0ZXJDb3VudCAtIDFd
ID09IG1fb2Zmc2V0RnJvbVRvcCk7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0gc3Rh
Y2tVbml0SW5CeXRlczsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnBvcFRvUmVzdG9yZShyZWdp
c3RlcklEc1tyZWdpc3RlckNvdW50IC0gMV0pOworICAgICAgICB9CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHJlZ2lzdGVyQ291bnQgLSByZWdpc3RlckNvdW50T2RkOyBpID4gMDsgaSAtPSAy
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFja1JlZmVyZW5jZXNbaSAtIDFdID09
IG1fb2Zmc2V0RnJvbVRvcCAmJiBzdGFja1JlZmVyZW5jZXNbaSAtIDJdID09IG1fb2Zmc2V0RnJv
bVRvcCAtIHN0YWNrVW5pdEluQnl0ZXMgLyAyKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRv
cCAtPSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICAgICAgbV9hc3NlbWJsZXIucG9wUGFpcihy
ZWdpc3RlcklEc1tpIC0gMl0sIHJlZ2lzdGVySURzW2kgLSAxXSk7CisgICAgICAgIH0KKyNlbHNl
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHJlZ2lzdGVyQ291bnQ7IGkgPiAwOyAtLWkpIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNlc1tpIC0gMV0gPT0gbV9v
ZmZzZXRGcm9tVG9wKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJ
bkJ5dGVzOworICAgICAgICAgICAgbV9hc3NlbWJsZXIucG9wKHJlZ2lzdGVySURzW2kgLSAxXSk7
CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICAKICAgICB2b2lkIHBvcChTdGFja1JlZmVy
ZW5jZSBzdGFja1JlZmVyZW5jZSwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdp
c3RlcklEKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2UgPT0g
bV9vZmZzZXRGcm9tVG9wKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25D
YWxsUGFkZGluZyk7Ci0gICAgICAgIEFTU0VSVChtX29mZnNldEZyb21Ub3AgPiAwKTsKKyAgICAg
ICAgQVNTRVJUKG1fb2Zmc2V0RnJvbVRvcCA+PSBzdGFja1VuaXRJbkJ5dGVzKTsKICAgICAgICAg
bV9vZmZzZXRGcm9tVG9wIC09IHN0YWNrVW5pdEluQnl0ZXM7CiAjaWYgQ1BVKEFSTTY0KQotICAg
ICAgICBtX2Fzc2VtYmxlci5tX2Fzc2VtYmxlci5sZHI8NjQ+KHJlZ2lzdGVySUQsIEpTQzo6QVJN
NjRSZWdpc3RlcnM6OnNwLCBKU0M6OlBvc3RJbmRleCgxNikpOworICAgICAgICBtX2Fzc2VtYmxl
ci5wb3BUb1Jlc3RvcmUocmVnaXN0ZXJJRCk7CiAjZWxzZQogICAgICAgICBtX2Fzc2VtYmxlci5w
b3AocmVnaXN0ZXJJRCk7CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231918</attachid>
            <date>2014-05-22 16:46:32 -0700</date>
            <delta_ts>2014-05-23 11:04:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133156-20140522164614.patch</filename>
            <type>text/plain</type>
            <size>17917</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTIyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA1LTIyICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBDU1Mg
SklUIHJ1biBvbiBBUk02NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6RnVu
Y3Rpb25DYWxsOjpzYXZlQWxsb2NhdGVkUmVnaXN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1
bmN0aW9uQ2FsbDo6cmVzdG9yZUFsbG9jYXRlZFJlZ2lzdGVycyk6CisgICAgICAgIFVzZSBTdGFj
a0FsbG9jYXRvcidzIG5ldyBwdXNoIGFuZCBwb3AgZnVuY3Rpb25zIHRvIHB1c2ggYW5kIHBvcCBh
IHZlY3RvciBpbnN0ZWFkIG9mIGl0ZXJhdGluZyBpdC4KKyAgICAgICAgKiBjc3NqaXQvUmVnaXN0
ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyQWxsb2NhdG9yOjpjYWxs
ZWVTYXZlZFJlZ2lzdGVyc1RvUmVzZXJ2ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RlckFs
bG9jYXRvcjo6Y2FsbGVlU2F2ZWRSZWdpc3RlcnNUb1Jlc3RvcmUpOgorICAgICAgICBSZXR1cm4g
YSB2ZWN0b3Igb2YgcmVnaXN0ZXJzIHRvIGFsbG9jYXRlIGluc3RlYWQgb2YgZG9pbmcgdGhlIGFs
bG9jYXRpb24gdG8gbWFrZSB0aGUgUmVnaXN0ZXJBbGxvY2F0b3IKKyAgICAgICAgbm90IG5lZWQg
dG8ga25vdyBhYm91dCB0aGUgU3RhY2tBbGxvY2F0b3IgYW5kIHRvIHVzZSB0aGUgbmV3IHZlY3Rv
ciBwdXNoIGFuZCBwb3AgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJBbGxv
Y2F0b3I6On5SZWdpc3RlckFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RlckFs
bG9jYXRvcjo6cmVzZXJ2ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMp
OiBEZWxldGVkLgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Y29t
cGlsZSk6CisgICAgICAgIFJlbW92ZWQgdGhlIHJlcXVpcmVtZW50IGZvciBhc3NlcnQgdG8gYmUg
ZGlzYWJsZWQgdG8gcHJpbnQgZGlzYXNzZW1ibHkgd2hlbiBkZWJ1Z2dpbmcgY3NzIGppdC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OndpbGxHZW5lcmF0ZUZ1bmN0aW9uQ2Fs
bHMpOiBBZGRlZCBzdHViLgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVByb2xvZ3VlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFcGlsb2d1
ZSk6CisgICAgICAgIEFkZGVkIHRvIGNvcnJlY3RseSBwdXNoIHRoZSBsaW5rIHJlZ2lzdGVyIGFu
ZCBmcmFtZSBwb2ludGVyLgorICAgICAgICBUaGlzIGlzIHJlcXVpcmVkIGlmIHRoZSBqaXQgY29k
ZSBjYWxscyBhIGZ1bmN0aW9uIG9uIGFybTY0IGFuZCBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcgdG9v
bHMgb24geDg2XzY0LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIEdlbmVy
YXRlIHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgd2hpY2ggcmVzcGVjdGl2ZWx5IHB1c2ggYW5k
IHBvcAorICAgICAgICB0aGUgbGluayByZWdpc3RlciwgZnJhbWUgcG9pbnRlciwgYW5kIGNhbGxl
ZSBzYXZlZCByZWdpc3RlcnMgaWYgbmVlZGVkLgorICAgICAgICAqIGNzc2ppdC9TdGFja0FsbG9j
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RhY2tBbGxvY2F0b3I6OnB1c2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RhY2tBbGxvY2F0b3I6OnBvcCk6CisgICAgICAgIEFkZGVkIG5ldyB2ZWN0
b3IgcHVzaCBhbmQgcG9wIGZ1bmN0aW9ucyB0byB1c2Ugc3RwIGFuZCBsZGIgaW5zdHJ1Y3Rpb25z
IG9uIGFybTY0LgorCiAyMDE0LTA1LTIyICBNYXJ0aW4gSG9jayAgPG1ob2NrQGFwcGxlLmNvbT4K
IAogICAgICAgICBbaU9TXSBFbmFibGUgLWFwcGxlLXN5c3RlbS0gc3R5bGVkIGVsZW1lbnRzIHRv
IHJlc3BvbmQgdG8gc3lzdGVtIGZvbnQgc2l6ZSBjaGFuZ2VzLgpJbmRleDogU291cmNlL1dlYkNv
cmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
c2ppdC9GdW5jdGlvbkNhbGwuaAkocmV2aXNpb24gMTY5MTIxKQorKysgU291cmNlL1dlYkNvcmUv
Y3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMjAgKzE2NSwxMiBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2F2ZUFsbG9jYXRlZFJlZ2lzdGVycygpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmlzRW1wdHkoKSk7Ci0K
LSAgICAgICAgdW5zaWduZWQgYWxsb2NhdGVkUmVnaXN0ZXJzQ291bnQgPSBtX3JlZ2lzdGVyQWxs
b2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVycygpLnNpemUoKTsKLSAgICAgICAgbV9zYXZlZFJlZ2lz
dGVyU3RhY2tSZWZlcmVuY2VzLnJlc2VydmVDYXBhY2l0eShhbGxvY2F0ZWRSZWdpc3RlcnNDb3Vu
dCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFsbG9jYXRlZFJlZ2lzdGVy
c0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgcmVnaXN0ZXJJRCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKClb
aV07Ci0gICAgICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMuYXBwZW5kKG1f
c3RhY2tBbGxvY2F0b3IucHVzaChyZWdpc3RlcklEKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9z
YXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmFwcGVuZFZlY3RvcihtX3N0YWNrQWxsb2NhdG9y
LnB1c2gobV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZWRSZWdpc3RlcnMoKSkpOwogICAgIH0K
IAogICAgIHZvaWQgcmVzdG9yZUFsbG9jYXRlZFJlZ2lzdGVycygpCiAgICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVycygp
LnNpemUoKTsgaSA+IDA7IC0taSkKLSAgICAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wKG1f
c2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlc1tpIC0gMV0sIG1fcmVnaXN0ZXJBbGxvY2F0b3Iu
YWxsb2NhdGVkUmVnaXN0ZXJzKClbaSAtIDFdKTsKKyAgICAgICAgbV9zdGFja0FsbG9jYXRvci5w
b3AobV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFs
bG9jYXRlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVu
Y2VzLmNsZWFyKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0
ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0
ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTY5MTIxKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0
L1JlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNp
ZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01h
Y3JvQXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8U3RhY2tBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNzgsOCArNzcsOSBA
QCBzdGF0aWMgY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0CiAjZWxzZQogI2Vycm9y
IFJlZ2lzdGVyQWxsb2NhdG9yIGhhcyBubyBkZWZpbmVkIHJlZ2lzdGVycyBmb3IgdGhlIGFyY2hp
dGVjdHVyZS4KICNlbmRpZgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBX
VEZfQVJSQVlfTEVOR1RIKGNhbGxlclNhdmVkUmVnaXN0ZXJzKSArIFdURl9BUlJBWV9MRU5HVEgo
Y2FsbGVlU2F2ZWRSZWdpc3RlcnMpOwotCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FsbGVlU2F2
ZWRSZWdpc3RlckNvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChjYWxsZWVTYXZlZFJlZ2lzdGVycyk7
CitzdGF0aWMgY29uc3QgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVkUmVnaXN0
ZXJDb3VudCArIFdURl9BUlJBWV9MRU5HVEgoY2FsbGVyU2F2ZWRSZWdpc3RlcnMpOworICAgIAog
Y2xhc3MgUmVnaXN0ZXJBbGxvY2F0b3IgewogcHVibGljOgogICAgIFJlZ2lzdGVyQWxsb2NhdG9y
KCk7CkBAIC0xMTMsMjUgKzExMywyNCBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fcmVnaXN0ZXJzLmFkZChyZWdpc3RlcklEKS5pc05ld0VudHJ5KTsKICAgICB9CiAKLSAgICB2
b2lkIHJlc2VydmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhTdGFja0FsbG9jYXRvciYgc3RhY2ssIHVu
c2lnbmVkIGNvdW50KQorICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
LCBjYWxsZWVTYXZlZFJlZ2lzdGVyQ291bnQ+IGNhbGxlZVNhdmVkUmVnaXN0ZXJzVG9SZXNlcnZl
KHVuc2lnbmVkIGNvdW50KQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgZmluYWxTaXplID0gbV9j
YWxsZWVTYXZlZFJlZ2lzdGVycy5zaXplKCkgKyBjb3VudDsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoZmluYWxTaXplIDw9IFdURl9BUlJBWV9MRU5HVEgoY2FsbGVlU2F2ZWRSZWdpc3RlcnMpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9jYWxsZWVTYXZlZFJlZ2lzdGVycy5zaXplKCk7
IGkgPCBmaW5hbFNpemU7ICsraSkgeworICAgICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50PiByZWdpc3RlcnM7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IFdURl9BUlJBWV9MRU5HVEgoY2FsbGVlU2F2ZWRS
ZWdpc3RlcnMpKTsKKyAgICAgICAgQVNTRVJUKCFtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3Rl
cnMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKICAgICAgICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJ
ZCA9IGNhbGxlZVNhdmVkUmVnaXN0ZXJzW2ldOwotICAgICAgICAgICAgbV9jYWxsZWVTYXZlZFJl
Z2lzdGVycy5hcHBlbmQoc3RhY2sucHVzaChyZWdpc3RlcklkKSk7CisgICAgICAgICAgICBtX3Jl
c2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMuYXBwZW5kKHJlZ2lzdGVySWQpOwogICAgICAgICAg
ICAgbV9yZWdpc3RlcnMuYWRkKHJlZ2lzdGVySWQpOwogICAgICAgICB9CisgICAgICAgIHJldHVy
biBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRSZWdp
c3RlckNvdW50PihtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMpOwogICAgIH0KIAotICAg
IHZvaWQgcmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKFN0YWNrQWxsb2NhdG9yJiBzdGFjaykK
KyAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRS
ZWdpc3RlckNvdW50PiBjYWxsZWVTYXZlZFJlZ2lzdGVyc1RvUmVzdG9yZSgpCiAgICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzLnNpemUoKTsgaSA+
IDAgOyAtLWkpIHsKLSAgICAgICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQg
cmVnaXN0ZXJJZCA9IGNhbGxlZVNhdmVkUmVnaXN0ZXJzW2kgLSAxXTsKLSAgICAgICAgICAgIHN0
YWNrLnBvcChtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzW2kgLSAxXSwgcmVnaXN0ZXJJZCk7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVycy5yZW1vdmUocmVnaXN0ZXJJZCkpOwot
ICAgICAgICB9Ci0gICAgICAgIG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMuY2xlYXIoKTsKKyAgICAg
ICAgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIGNhbGxlZVNhdmVkUmVn
aXN0ZXJDb3VudD4gcmVnaXN0ZXJzKG1fcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyk7Cisg
ICAgICAgIG1fcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycy5jbGVhcigpOworICAgICAgICBy
ZXR1cm4gcmVnaXN0ZXJzOwogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklELCByZWdpc3RlckNvdW50PiYgYWxsb2NhdGVkUmVnaXN0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9hbGxvY2F0ZWRSZWdpc3RlcnM7IH0KQEAgLTE1MCw3ICsxNDksNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVu
c2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25l
ZD4+IG1fcmVnaXN0ZXJzOwogICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklELCByZWdpc3RlckNvdW50PiBtX2FsbG9jYXRlZFJlZ2lzdGVyczsKLSAgICBWZWN0b3I8U3Rh
Y2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlLCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxlZVNhdmVk
UmVnaXN0ZXJzKT4gbV9jYWxsZWVTYXZlZFJlZ2lzdGVyczsKKyAgICBWZWN0b3I8SlNDOjpNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50PiBtX3Jlc2Vy
dmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnM7CiB9OwogCiBjbGFzcyBMb2NhbFJlZ2lzdGVyIHsKQEAg
LTE4NCw3ICsxODMsNyBAQCBpbmxpbmUgUmVnaXN0ZXJBbGxvY2F0b3I6OlJlZ2lzdGVyQWxsb2Nh
CiAKIGlubGluZSBSZWdpc3RlckFsbG9jYXRvcjo6flJlZ2lzdGVyQWxsb2NhdG9yKCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzLmlzRW1wdHkoKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzLmlzRW1wdHkoKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2pp
dC9TZWxlY3RvckNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHJldmlzaW9uIDE2OTEyMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDYg
KzIyMSwxMSBAQCBwcml2YXRlOgogICAgIEFzc2VtYmxlcjo6SnVtcCBtb2R1bG8oSlNDOjpNYWNy
b0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5wdXRE
aXZpZGVuZCwgaW50IGRpdmlzb3IpOwogICAgIHZvaWQgbW9kdWxvSXNaZXJvKEFzc2VtYmxlcjo6
SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGlucHV0RGl2aWRl
bmQsIGludCBkaXZpc29yKTsKIAorICAgIHZvaWQgZ2VuZXJhdGVQcm9sb2d1ZShib29sIGNhbGxz
RnVuY3Rpb25zLCBib29sIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMsIHVuc2lnbmVkIG1p
bmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcyk7CisgICAgdm9pZCBnZW5lcmF0ZUVwaWxv
Z3VlKGJvb2wgY2FsbHNGdW5jdGlvbnMsIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVy
cyk7CisgICAgVmVjdG9yPFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZT4gbV9wcm9sb2d1
ZVN0YWNrUmVmZXJlbmNlczsKKyAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJl
bmNlPiBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7CisgICAgCiAgICAgQXNz
ZW1ibGVyIG1fYXNzZW1ibGVyOwogICAgIFJlZ2lzdGVyQWxsb2NhdG9yIG1fcmVnaXN0ZXJBbGxv
Y2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3IgbV9zdGFja0FsbG9jYXRvcjsKQEAgLTU0Miw3ICs1
NDcsNyBAQCBpbmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBTZWxlY3RvCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnVuY3Rpb25DYWxscy5zaXplKCk7IGkrKykKICAgICAg
ICAgbGlua0J1ZmZlci5saW5rKG1fZnVuY3Rpb25DYWxsc1tpXS5maXJzdCwgbV9mdW5jdGlvbkNh
bGxzW2ldLnNlY29uZCk7CiAKLSNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORyAmJiBBU1NF
UlRfRElTQUJMRUQKKyNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORwogICAgIGNvZGVSZWYg
PSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseSgiQ1NTIFNlbGVjdG9yIEpJ
VCBmb3IgXCIlc1wiIiwgbV9vcmlnaW5hbFNlbGVjdG9yLT5zZWxlY3RvclRleHQoKS51dGY4KCku
ZGF0YSgpKTsKICNlbHNlCiAgICAgY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
KCJDU1MgU2VsZWN0b3IgSklUIikpOwpAQCAtODU3LDE3ICs4NjIsNTggQEAgdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmNvbXB1dGVCYWNrdAogICAgICAgICB9CiAgICAgfQogfQotCisgICAg
CitzdGF0aWMgaW5saW5lIGJvb2wgd2lsbEdlbmVyYXRlRnVuY3Rpb25DYWxscyhjb25zdCBTZWxl
Y3RvckZyYWdtZW50TGlzdCYgc2VsZWN0b3JGcmFnbWVudHMpCit7CisgICAgLy8gRklYTUU6IElm
IHRoaXMgc2VsZWN0b3IgZG9lc24ndCBjYWxsIGFueSBmdW5jdGlvbnMsIHRoZW4gd2UgZG9uJ3Qg
bmVlZCB0byBwdXNoIHRoZSBsaW5rIHJlZ2lzdGVyIG9yIGZyYW1lIHBvaW50ZXIuCisgICAgVU5V
U0VEX1BBUkFNKHNlbGVjdG9yRnJhZ21lbnRzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyAgICAK
K2lubGluZSB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVQcm9sb2d1ZShib29s
IGNhbGxzRnVuY3Rpb25zLCBib29sIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMsIHVuc2ln
bmVkIG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcykKK3sKKyAgICBpZiAoY2FsbHNG
dW5jdGlvbnMpIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklELCAyPiBwcm9sb2d1ZVJlZ2lzdGVyczsKKyAgICAgICAgcHJvbG9n
dWVSZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgcHJv
bG9ndWVSZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmZwKTsKKyAgICAgICAg
bV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChwcm9sb2d1
ZVJlZ2lzdGVycyk7CisjZWxpZiBDUFUoWDg2XzY0KSAmJiBDU1NfU0VMRUNUT1JfSklUX0RFQlVH
R0lORworICAgICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgMT4g
cHJvbG9ndWVSZWdpc3RlcjsKKyAgICAgICAgcHJvbG9ndWVSZWdpc3Rlci5hcHBlbmQoSlNDOjpY
ODZSZWdpc3RlcnM6OmVicCk7CisgICAgICAgIG1fcHJvbG9ndWVTdGFja1JlZmVyZW5jZXMgPSBt
X3N0YWNrQWxsb2NhdG9yLnB1c2gocHJvbG9ndWVSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB9Cisg
ICAgQVNTRVJUKCFtX2NhbGxlZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMuc2l6ZSgpKTsK
KyAgICBpZiAocmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycykKKyAgICAgICAgbV9jYWxsZWVT
YXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzID0gbV9zdGFja0FsbG9jYXRvci5wdXNoKG1fcmVn
aXN0ZXJBbGxvY2F0b3IuY2FsbGVlU2F2ZWRSZWdpc3RlcnNUb1Jlc2VydmUobWluaW11bVJlZ2lz
dGVyQ291bnRGb3JBdHRyaWJ1dGVzIC0gbV9yZWdpc3RlckFsbG9jYXRvci5hdmFpbGFibGVSZWdp
c3RlckNvdW50KCkpKTsKK30KKyAgICAKK2lubGluZSB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVFcGlsb2d1ZShib29sIGNhbGxzRnVuY3Rpb25zLCBib29sIHJlc2VydmVkQ2Fs
bGVlU2F2ZWRSZWdpc3RlcnMpCit7CisgICAgaWYgKGNhbGxzRnVuY3Rpb25zKSB7CisjaWYgQ1BV
KEFSTTY0KQorICAgICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwg
Mj4gcHJvbG9ndWVSZWdpc3RlcnM7CisgICAgICAgIHByb2xvZ3VlUmVnaXN0ZXJzLmFwcGVuZChK
U0M6OkFSTTY0UmVnaXN0ZXJzOjpscik7CisgICAgICAgIHByb2xvZ3VlUmVnaXN0ZXJzLmFwcGVu
ZChKU0M6OkFSTTY0UmVnaXN0ZXJzOjpmcCk7CisgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9w
KG1fcHJvbG9ndWVTdGFja1JlZmVyZW5jZXMsIHByb2xvZ3VlUmVnaXN0ZXJzKTsKKyNlbGlmIENQ
VShYODZfNjQpICYmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCisgICAgICAgIFZlY3RvcjxK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCAxPiBwcm9sb2d1ZVJlZ2lzdGVyOworICAg
ICAgICBwcm9sb2d1ZVJlZ2lzdGVyLmFwcGVuZChKU0M6Olg4NlJlZ2lzdGVyczo6ZWJwKTsKKyAg
ICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3AobV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlcywgcHJv
bG9ndWVSZWdpc3Rlcik7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKHJlc2VydmVkQ2FsbGVlU2F2
ZWRSZWdpc3RlcnMpCisgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wKG1fY2FsbGVlU2F2ZWRS
ZWdpc3RlclN0YWNrUmVmZXJlbmNlcywgbV9yZWdpc3RlckFsbG9jYXRvci5jYWxsZWVTYXZlZFJl
Z2lzdGVyc1RvUmVzdG9yZSgpKTsKK30KKyAgICAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigpCiB7Ci0gICAgYm9vbCByZXNlcnZlZENhbGxlZVNh
dmVkUmVnaXN0ZXJzID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgYXZhaWxhYmxlUmVnaXN0ZXJDb3Vu
dCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYXZhaWxhYmxlUmVnaXN0ZXJDb3VudCgpOwogICAgIHVu
c2lnbmVkIG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcyA9IG1pbmltdW1SZWdpc3Rl
clJlcXVpcmVtZW50cyhtX3NlbGVjdG9yRnJhZ21lbnRzKTsKLSAgICBpZiAoYXZhaWxhYmxlUmVn
aXN0ZXJDb3VudCA8IG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcykgewotICAgICAg
ICByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzID0gdHJ1ZTsKLSAgICAgICAgbV9yZWdpc3Rl
ckFsbG9jYXRvci5yZXNlcnZlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMobV9zdGFja0FsbG9jYXRvciwg
bWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzIC0gYXZhaWxhYmxlUmVnaXN0ZXJDb3Vu
dCk7Ci0gICAgfQotCisgICAgYm9vbCByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzID0gbV9y
ZWdpc3RlckFsbG9jYXRvci5hdmFpbGFibGVSZWdpc3RlckNvdW50KCkgPCBtaW5pbXVtUmVnaXN0
ZXJDb3VudEZvckF0dHJpYnV0ZXM7CisgICAgYm9vbCBjYWxsc0Z1bmN0aW9ucyA9IHdpbGxHZW5l
cmF0ZUZ1bmN0aW9uQ2FsbHMobV9zZWxlY3RvckZyYWdtZW50cyk7CisgICAgZ2VuZXJhdGVQcm9s
b2d1ZShjYWxsc0Z1bmN0aW9ucywgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycywgbWluaW11
bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzKTsKKyAgICAKICAgICBtX3JlZ2lzdGVyQWxsb2Nh
dG9yLmFsbG9jYXRlUmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBpZiAo
bV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tp
bmdDb250ZXh0KQpAQCAtOTAzLDE1ICs5NDksMTcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlU2VsZQogICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lz
dGVyKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwogCiAgICAgaWYgKG1fZnVuY3Rpb25UeXBlID09
IEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyKSB7Ci0gICAgICAgIGlmICghbV9u
ZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQgJiYgIXJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdp
c3RlcnMpIHsKKyAgICAgICAgaWYgKCFtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCAm
JiAhcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyAmJiAhY2FsbHNGdW5jdGlvbnMpIHsKICAg
ICAgICAgICAgIC8vIFN1Y2Nlc3MuCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlKEFzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXR1cm5SZWdpc3Rlcik7CisgICAgICAgICAgICAvLyBF
cGlsb2d1ZSBub3QgbmVlZGVkIGJlY2F1c2UgaXQgd291bGRuJ3Qgd3JpdGUgYW55dGhpbmcuCiAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKIAogICAgICAgICAgICAgLy8gRmFpbHVyZS4K
ICAgICAgICAgICAgIGlmICghZmFpbHVyZUNhc2VzLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAg
ICBmYWlsdXJlQ2FzZXMubGluaygmbV9hc3NlbWJsZXIpOwogICAgICAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJldHVyblJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICAvLyBFcGlsb2d1ZSBub3QgbmVlZGVkIGJlY2F1c2UgaXQgd291bGRu
J3Qgd3JpdGUgYW55dGhpbmcuCiAgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC05MjgsNyArOTc2LDcgQEAgdm9pZCBT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZQogCiAgICAgICAgICAgICBpZiAobV9u
ZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpCiAgICAgICAgICAgICAgICAgbV9zdGFja0Fs
bG9jYXRvci5wb3BBbmREaXNjYXJkVXBUbyhtX2FkamFjZW50QmFja3RyYWNraW5nU3RhcnQpOwot
ICAgICAgICAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlQ2FsbGVlU2F2ZWRSZWdpc3Rl
cnMobV9zdGFja0FsbG9jYXRvcik7CisgICAgICAgICAgICBnZW5lcmF0ZUVwaWxvZ3VlKGNhbGxz
RnVuY3Rpb25zLCByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzKTsKICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnJldCgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTk0Niw3ICs5OTQs
NyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlCiAgICAgICAgIH0K
IAogICAgICAgICBtX3N0YWNrQWxsb2NhdG9yLnBvcEFuZERpc2NhcmRVcFRvKG1fY2hlY2tpbmdD
b250ZXh0U3RhY2tSZWZlcmVuY2UpOwotICAgICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLnJlc3Rv
cmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhtX3N0YWNrQWxsb2NhdG9yKTsKKyAgICAgICAgZ2VuZXJh
dGVFcGlsb2d1ZShjYWxsc0Z1bmN0aW9ucywgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyk7
CiAgICAgICAgIG1fYXNzZW1ibGVyLnJldCgpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNjkxMjEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4
LDM5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJv
bVRvcCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6IEFSTTY0IG5lZWRzIGFuIEFQSSB0YWtlIGEg
bGlzdCBvZiByZWdpc3RlciB0byBwdXNoIGFuZCBwb3AgdG8gdXNlIHN0cnAgYW5kIGxkcnAgd2hl
biBwb3NzaWJsZS4KKyAgICBWZWN0b3I8U3RhY2tSZWZlcmVuY2U+IHB1c2goVmVjdG9yPEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHJlZ2lzdGVySURzKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7CisgICAgICAgIHVuc2ln
bmVkIHJlZ2lzdGVyQ291bnQgPSByZWdpc3RlcklEcy5zaXplKCk7CisgICAgICAgIFZlY3RvcjxT
dGFja1JlZmVyZW5jZT4gc3RhY2tSZWZlcmVuY2VzOworICAgICAgICBzdGFja1JlZmVyZW5jZXMu
cmVzZXJ2ZUNhcGFjaXR5KHJlZ2lzdGVyQ291bnQpOworI2lmIENQVShBUk02NCkKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQgLSAxOyBpICs9IDIpIHsKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hQYWlyKHJlZ2lzdGVySURzW2ldLCByZWdpc3RlcklE
c1tpICsgMV0pOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0
ZXM7CisgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1f
b2Zmc2V0RnJvbVRvcCAtIHN0YWNrVW5pdEluQnl0ZXMgLyAyKSk7CisgICAgICAgICAgICBzdGFj
a1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChyZWdpc3RlckNvdW50ICUgMikgeworICAgICAgICAgICAgbV9h
c3NlbWJsZXIucHVzaFRvU2F2ZShyZWdpc3RlcklEc1tyZWdpc3RlckNvdW50IC0gMV0pOworICAg
ICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAg
ICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkp
OworICAgICAgICB9CisjZWxzZQorICAgICAgICBmb3IgKGF1dG8gcmVnaXN0ZXJJRCA6IHJlZ2lz
dGVySURzKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5wdXNoKHJlZ2lzdGVySUQpOworICAg
ICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAg
ICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkp
OworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHN0YWNrUmVmZXJlbmNlczsKKyAg
ICB9CisgICAgCiAgICAgU3RhY2tSZWZlcmVuY2UgcHVzaChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIHJlZ2lzdGVySUQpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9o
YXNGdW5jdGlvbkNhbGxQYWRkaW5nKTsKICNpZiBDUFUoQVJNNjQpCi0gICAgICAgIG1fYXNzZW1i
bGVyLm1fYXNzZW1ibGVyLnN0cjw2ND4ocmVnaXN0ZXJJRCwgSlNDOjpBUk02NFJlZ2lzdGVyczo6
c3AsIEpTQzo6UHJlSW5kZXgoLTE2KSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hUb1NhdmUo
cmVnaXN0ZXJJRCk7CiAjZWxzZQogICAgICAgICBtX2Fzc2VtYmxlci5wdXNoKHJlZ2lzdGVySUQp
OwogI2VuZGlmCkBAIC04MSwxNCArMTA4LDQyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0
YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCk7CiAgICAgfQogCisgICAgdm9pZCBwb3AoVmVj
dG9yPFN0YWNrUmVmZXJlbmNlPiBzdGFja1JlZmVyZW5jZXMsIFZlY3RvcjxKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEPiByZWdpc3RlcklEcykKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFtX2hhc0Z1bmN0aW9uQ2FsbFBhZGRpbmcpOworICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVySURzLnNpemUoKTsKKyAgICAgICAgQVNTRVJU
KHN0YWNrUmVmZXJlbmNlcy5zaXplKCkgPT0gcmVnaXN0ZXJDb3VudCk7CisgICAgICAgIEFTU0VS
VChtX29mZnNldEZyb21Ub3AgPj0gc3RhY2tVbml0SW5CeXRlcyAqIHJlZ2lzdGVyQ291bnQpOwor
I2lmIENQVShBUk02NCkKKyAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudE9kZCA9IHJlZ2lz
dGVyQ291bnQgJSAyOworICAgICAgICBpZiAocmVnaXN0ZXJDb3VudE9kZCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW3JlZ2lzdGVyQ291bnQgLSAxXSA9PSBt
X29mZnNldEZyb21Ub3ApOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wIC09IHN0YWNrVW5p
dEluQnl0ZXM7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5wb3BUb1Jlc3RvcmUocmVnaXN0ZXJJ
RHNbcmVnaXN0ZXJDb3VudCAtIDFdKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSByZWdpc3RlckNvdW50IC0gcmVnaXN0ZXJDb3VudE9kZDsgaSA+IDA7IGkgLT0gMikgewor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW2kgLSAxXSA9PSBtX29m
ZnNldEZyb21Ub3AgJiYgc3RhY2tSZWZlcmVuY2VzW2kgLSAyXSA9PSBtX29mZnNldEZyb21Ub3Ag
LSBzdGFja1VuaXRJbkJ5dGVzIC8gMik7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0g
c3RhY2tVbml0SW5CeXRlczsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnBvcFBhaXIocmVnaXN0
ZXJJRHNbaSAtIDJdLCByZWdpc3RlcklEc1tpIC0gMV0pOworICAgICAgICB9CisjZWxzZQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWdpc3RlckNvdW50OyBpID4gMDsgLS1pKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFja1JlZmVyZW5jZXNbaSAtIDFdID09IG1fb2Zmc2V0
RnJvbVRvcCk7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0gc3RhY2tVbml0SW5CeXRl
czsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnBvcChyZWdpc3RlcklEc1tpIC0gMV0pOworICAg
ICAgICB9CisjZW5kaWYKKyAgICB9CisgICAgCiAgICAgdm9pZCBwb3AoU3RhY2tSZWZlcmVuY2Ug
c3RhY2tSZWZlcmVuY2UsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJ
RCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNlID09IG1fb2Zm
c2V0RnJvbVRvcCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc0Z1bmN0aW9uQ2FsbFBh
ZGRpbmcpOwotICAgICAgICBBU1NFUlQobV9vZmZzZXRGcm9tVG9wID4gMCk7CisgICAgICAgIEFT
U0VSVChtX29mZnNldEZyb21Ub3AgPj0gc3RhY2tVbml0SW5CeXRlcyk7CiAgICAgICAgIG1fb2Zm
c2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJbkJ5dGVzOwogI2lmIENQVShBUk02NCkKLSAgICAgICAg
bV9hc3NlbWJsZXIubV9hc3NlbWJsZXIubGRyPDY0PihyZWdpc3RlcklELCBKU0M6OkFSTTY0UmVn
aXN0ZXJzOjpzcCwgSlNDOjpQb3N0SW5kZXgoMTYpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIucG9w
VG9SZXN0b3JlKHJlZ2lzdGVySUQpOwogI2Vsc2UKICAgICAgICAgbV9hc3NlbWJsZXIucG9wKHJl
Z2lzdGVySUQpOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231973</attachid>
            <date>2014-05-23 11:04:16 -0700</date>
            <delta_ts>2014-05-23 11:37:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133156-20140523110358.patch</filename>
            <type>text/plain</type>
            <size>17788</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA1LTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBDU1Mg
SklUIHJ1biBvbiBBUk02NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGNzc2ppdC9GdW5jdGlvbkNhbGwu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkZ1bmN0aW9uQ2FsbDo6c2F2ZUFsbG9jYXRlZFJlZ2lzdGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpGdW5jdGlvbkNhbGw6OnJlc3RvcmVBbGxvY2F0ZWRSZWdp
c3RlcnMpOgorICAgICAgICBVc2UgU3RhY2tBbGxvY2F0b3IncyBuZXcgcHVzaCBhbmQgcG9wIGZ1
bmN0aW9ucyB0byBwdXNoIGFuZCBwb3AgYSB2ZWN0b3IgaW5zdGVhZCBvZiBpdGVyYXRpbmcgaXQu
CisgICAgICAgICogY3Nzaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZWdpc3RlckFsbG9jYXRvcjo6cmVzZXJ2ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlZ2lzdGVyQWxsb2NhdG9yOjpyZXN0b3JlQ2FsbGVlU2F2ZWRSZWdpc3Rl
cnMpOgorICAgICAgICBSZXR1cm4gYSB2ZWN0b3Igb2YgcmVnaXN0ZXJzIHRvIGFsbG9jYXRlIGlu
c3RlYWQgb2YgZG9pbmcgdGhlIGFsbG9jYXRpb24gdG8gbWFrZSB0aGUgUmVnaXN0ZXJBbGxvY2F0
b3IKKyAgICAgICAgbm90IG5lZWQgdG8ga25vdyBhYm91dCB0aGUgU3RhY2tBbGxvY2F0b3IgYW5k
IHRvIHVzZSB0aGUgbmV3IHZlY3RvciBwdXNoIGFuZCBwb3AgZnVuY3Rpb25zLgorICAgICAgICAo
V2ViQ29yZTo6UmVnaXN0ZXJBbGxvY2F0b3I6On5SZWdpc3RlckFsbG9jYXRvcik6CisgICAgICAg
IFN0b3JlIFJlZ2lzdGVySURzIGluc3RlYWQgb2YgU3RhY2tSZWZlcmVuY2VzIHRvIGF2b2lkIG5l
ZWRpbmcgdG8ga25vdyBhYm91dCB0aGUgc3RhY2suCisgICAgICAgICogY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgUmVtb3ZlZCB0aGUgcmVxdWlyZW1l
bnQgZm9yIGFzc2VydCB0byBiZSBkaXNhYmxlZCB0byBwcmludCBkaXNhc3NlbWJseSB3aGVuIGRl
YnVnZ2luZyBjc3Mgaml0LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVByb2xvZ3VlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFcGlsb2d1
ZSk6CisgICAgICAgIEFkZGVkIHRvIGNvcnJlY3RseSBwdXNoIHRoZSBsaW5rIHJlZ2lzdGVyIGFu
ZCBmcmFtZSBwb2ludGVyLgorICAgICAgICBUaGlzIGlzIHJlcXVpcmVkIGlmIHRoZSBqaXQgY29k
ZSBjYWxscyBhIGZ1bmN0aW9uIG9uIGFybTY0IGFuZCBoZWxwZnVsIGZvciBkZWJ1Z2dpbmcgdG9v
bHMgb24geDg2XzY0LgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIEdlbmVy
YXRlIHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgd2hpY2ggcmVzcGVjdGl2ZWx5IHB1c2ggYW5k
IHBvcAorICAgICAgICB0aGUgbGluayByZWdpc3RlciwgZnJhbWUgcG9pbnRlciwgYW5kIGNhbGxl
ZSBzYXZlZCByZWdpc3RlcnMgaWYgbmVlZGVkLgorICAgICAgICAqIGNzc2ppdC9TdGFja0FsbG9j
YXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3RhY2tBbGxvY2F0b3I6OnB1c2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3RhY2tBbGxvY2F0b3I6OnBvcCk6CisgICAgICAgIEFkZGVkIG5ldyB2ZWN0
b3IgcHVzaCBhbmQgcG9wIGZ1bmN0aW9ucyB0byB1c2Ugc3RwIGFuZCBsZGIgaW5zdHJ1Y3Rpb25z
IG9uIGFybTY0LgorCiAyMDE0LTA1LTIzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CiAKICAgICAgICAgTmF2aWdhdG9yIG9iamVjdCBuZWVkcyB0byBoYXZlIHByb3BlcnRpZXMgZGly
ZWN0bHkgb24gdGhlIGluc3RhbmNlIG9iamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0
L0Z1bmN0aW9uQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5j
dGlvbkNhbGwuaAkocmV2aXNpb24gMTY5MTIxKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1
bmN0aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMjAgKzE2NSwxNCBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2F2ZUFsbG9jYXRlZFJlZ2lzdGVycygpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAg
dW5zaWduZWQgYWxsb2NhdGVkUmVnaXN0ZXJzQ291bnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFs
bG9jYXRlZFJlZ2lzdGVycygpLnNpemUoKTsKLSAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tS
ZWZlcmVuY2VzLnJlc2VydmVDYXBhY2l0eShhbGxvY2F0ZWRSZWdpc3RlcnNDb3VudCk7Ci0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFsbG9jYXRlZFJlZ2lzdGVyc0NvdW50OyAr
K2kpIHsKLSAgICAgICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0
ZXJJRCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKClbaV07Ci0gICAg
ICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMuYXBwZW5kKG1fc3RhY2tBbGxv
Y2F0b3IucHVzaChyZWdpc3RlcklEKSk7Ci0gICAgICAgIH0KKyAgICAgICAgY29uc3QgVmVjdG9y
PEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIHJlZ2lzdGVyQ291bnQ+JiBhbGxvY2F0
ZWRSZWdpc3RlcnMgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVycygpOwor
ICAgICAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlPiBzdGFja1JlZmVy
ZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLnB1c2goYWxsb2NhdGVkUmVnaXN0ZXJzKTsKKyAgICAg
ICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmFwcGVuZFZlY3RvcihzdGFja1JlZmVy
ZW5jZXMpOwogICAgIH0KIAogICAgIHZvaWQgcmVzdG9yZUFsbG9jYXRlZFJlZ2lzdGVycygpCiAg
ICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9j
YXRlZFJlZ2lzdGVycygpLnNpemUoKTsgaSA+IDA7IC0taSkKLSAgICAgICAgICAgIG1fc3RhY2tB
bGxvY2F0b3IucG9wKG1fc2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlc1tpIC0gMV0sIG1fcmVn
aXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKClbaSAtIDFdKTsKKyAgICAgICAgbV9z
dGFja0FsbG9jYXRvci5wb3AobV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLCBtX3JlZ2lz
dGVyQWxsb2NhdG9yLmFsbG9jYXRlZFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9zYXZlZFJlZ2lz
dGVyU3RhY2tSZWZlcmVuY2VzLmNsZWFyKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvUmVnaXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvUmVnaXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTY5MTIxKQorKysgU291cmNl
L1dlYkNvcmUvY3Nzaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoQ1NTX1NFTEVDVE9SX0pJVCkKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL01hY3JvQXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8U3RhY2tBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApA
QCAtNzgsNyArNzcsOCBAQCBzdGF0aWMgY29uc3QgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0
CiAjZWxzZQogI2Vycm9yIFJlZ2lzdGVyQWxsb2NhdG9yIGhhcyBubyBkZWZpbmVkIHJlZ2lzdGVy
cyBmb3IgdGhlIGFyY2hpdGVjdHVyZS4KICNlbmRpZgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJl
Z2lzdGVyQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGNhbGxlclNhdmVkUmVnaXN0ZXJzKSArIFdU
Rl9BUlJBWV9MRU5HVEgoY2FsbGVlU2F2ZWRSZWdpc3RlcnMpOworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGNhbGxlZVNhdmVkUmVnaXN0ZXJDb3VudCA9IFdURl9BUlJBWV9MRU5HVEgoY2FsbGVlU2F2
ZWRSZWdpc3RlcnMpOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxs
ZWVTYXZlZFJlZ2lzdGVyQ291bnQgKyBXVEZfQVJSQVlfTEVOR1RIKGNhbGxlclNhdmVkUmVnaXN0
ZXJzKTsKIAogY2xhc3MgUmVnaXN0ZXJBbGxvY2F0b3IgewogcHVibGljOgpAQCAtMTEzLDI1ICsx
MTMsMjMgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVycy5hZGQo
cmVnaXN0ZXJJRCkuaXNOZXdFbnRyeSk7CiAgICAgfQogCi0gICAgdm9pZCByZXNlcnZlQ2FsbGVl
U2F2ZWRSZWdpc3RlcnMoU3RhY2tBbGxvY2F0b3ImIHN0YWNrLCB1bnNpZ25lZCBjb3VudCkKKyAg
ICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRSZWdp
c3RlckNvdW50PiByZXNlcnZlQ2FsbGVlU2F2ZWRSZWdpc3RlcnModW5zaWduZWQgY291bnQpCiAg
ICAgewotICAgICAgICB1bnNpZ25lZCBmaW5hbFNpemUgPSBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJz
LnNpemUoKSArIGNvdW50OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChmaW5hbFNpemUgPD0gV1RG
X0FSUkFZX0xFTkdUSChjYWxsZWVTYXZlZFJlZ2lzdGVycykpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzLnNpemUoKTsgaSA8IGZpbmFsU2l6ZTsgKytp
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvdW50IDw9IFdURl9BUlJBWV9MRU5HVEgoY2Fs
bGVlU2F2ZWRSZWdpc3RlcnMpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fcmVzZXJ2ZWRD
YWxsZWVTYXZlZFJlZ2lzdGVycy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCByZWdpc3RlcklkID0gY2FsbGVlU2F2ZWRSZWdpc3RlcnNbaV07Ci0gICAgICAgICAg
ICBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzLmFwcGVuZChzdGFjay5wdXNoKHJlZ2lzdGVySWQpKTsK
KyAgICAgICAgICAgIG1fcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycy5hcHBlbmQocmVnaXN0
ZXJJZCk7CiAgICAgICAgICAgICBtX3JlZ2lzdGVycy5hZGQocmVnaXN0ZXJJZCk7CiAgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
LCBjYWxsZWVTYXZlZFJlZ2lzdGVyQ291bnQ+KG1fcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVy
cyk7CiAgICAgfQogCi0gICAgdm9pZCByZXN0b3JlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMoU3RhY2tB
bGxvY2F0b3ImIHN0YWNrKQorICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklELCBjYWxsZWVTYXZlZFJlZ2lzdGVyQ291bnQ+IHJlc3RvcmVDYWxsZWVTYXZlZFJlZ2lzdGVy
cygpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2NhbGxlZVNhdmVkUmVnaXN0
ZXJzLnNpemUoKTsgaSA+IDAgOyAtLWkpIHsKLSAgICAgICAgICAgIEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJZCA9IGNhbGxlZVNhdmVkUmVnaXN0ZXJzW2kgLSAxXTsK
LSAgICAgICAgICAgIHN0YWNrLnBvcChtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzW2kgLSAxXSwgcmVn
aXN0ZXJJZCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3JlZ2lzdGVycy5yZW1vdmUo
cmVnaXN0ZXJJZCkpOwotICAgICAgICB9Ci0gICAgICAgIG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMu
Y2xlYXIoKTsKKyAgICAgICAgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQs
IGNhbGxlZVNhdmVkUmVnaXN0ZXJDb3VudD4gcmVnaXN0ZXJzKG1fcmVzZXJ2ZWRDYWxsZWVTYXZl
ZFJlZ2lzdGVycyk7CisgICAgICAgIG1fcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycy5jbGVh
cigpOworICAgICAgICByZXR1cm4gcmVnaXN0ZXJzOwogICAgIH0KIAogICAgIGNvbnN0IFZlY3Rv
cjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCByZWdpc3RlckNvdW50PiYgYWxsb2Nh
dGVkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvY2F0ZWRSZWdpc3RlcnM7IH0KQEAg
LTE1MCw3ICsxNDgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhhc2hTZXQ8dW5zaWduZWQs
IERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czx1bnNpZ25lZD4+IG1fcmVnaXN0ZXJzOwogICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklELCByZWdpc3RlckNvdW50PiBtX2FsbG9jYXRlZFJlZ2lzdGVyczsK
LSAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlLCBXVEZfQVJSQVlfTEVO
R1RIKGNhbGxlZVNhdmVkUmVnaXN0ZXJzKT4gbV9jYWxsZWVTYXZlZFJlZ2lzdGVyczsKKyAgICBW
ZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRSZWdpc3Rl
ckNvdW50PiBtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnM7CiB9OwogCiBjbGFzcyBMb2Nh
bFJlZ2lzdGVyIHsKQEAgLTE4NCw3ICsxODIsNyBAQCBpbmxpbmUgUmVnaXN0ZXJBbGxvY2F0b3I6
OlJlZ2lzdGVyQWxsb2NhCiAKIGlubGluZSBSZWdpc3RlckFsbG9jYXRvcjo6flJlZ2lzdGVyQWxs
b2NhdG9yKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzLmlz
RW1wdHkoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQobV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0
ZXJzLmlzRW1wdHkoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHJldmlzaW9uIDE2OTEyMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIxLDYgKzIyMSwxMSBAQCBwcml2YXRlOgogICAgIEFzc2VtYmxlcjo6SnVtcCBt
b2R1bG8oSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uLCBBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgaW5wdXREaXZpZGVuZCwgaW50IGRpdmlzb3IpOwogICAgIHZvaWQgbW9kdWxvSXNa
ZXJvKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGlucHV0RGl2aWRlbmQsIGludCBkaXZpc29yKTsKIAorICAgIGJvb2wgZ2VuZXJhdGVQcm9s
b2d1ZShib29sIGNhbGxzRnVuY3Rpb25zLCBib29sIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3Rl
cnMsIHVuc2lnbmVkIG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcyk7CisgICAgdm9p
ZCBnZW5lcmF0ZUVwaWxvZ3VlKGJvb2wgY2FsbHNGdW5jdGlvbnMsIGJvb2wgcmVzZXJ2ZWRDYWxs
ZWVTYXZlZFJlZ2lzdGVycyk7CisgICAgVmVjdG9yPFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVy
ZW5jZT4gbV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlczsKKyAgICBWZWN0b3I8U3RhY2tBbGxvY2F0
b3I6OlN0YWNrUmVmZXJlbmNlPiBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7
CisgICAgCiAgICAgQXNzZW1ibGVyIG1fYXNzZW1ibGVyOwogICAgIFJlZ2lzdGVyQWxsb2NhdG9y
IG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3IgbV9zdGFja0FsbG9jYXRv
cjsKQEAgLTU0Miw3ICs1NDcsNyBAQCBpbmxpbmUgU2VsZWN0b3JDb21waWxhdGlvblN0YXR1cyBT
ZWxlY3RvCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnVuY3Rpb25DYWxscy5zaXpl
KCk7IGkrKykKICAgICAgICAgbGlua0J1ZmZlci5saW5rKG1fZnVuY3Rpb25DYWxsc1tpXS5maXJz
dCwgbV9mdW5jdGlvbkNhbGxzW2ldLnNlY29uZCk7CiAKLSNpZiBDU1NfU0VMRUNUT1JfSklUX0RF
QlVHR0lORyAmJiBBU1NFUlRfRElTQUJMRUQKKyNpZiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lO
RwogICAgIGNvZGVSZWYgPSBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhEaXNhc3NlbWJseSgi
Q1NTIFNlbGVjdG9yIEpJVCBmb3IgXCIlc1wiIiwgbV9vcmlnaW5hbFNlbGVjdG9yLT5zZWxlY3Rv
clRleHQoKS51dGY4KCkuZGF0YSgpKTsKICNlbHNlCiAgICAgY29kZVJlZiA9IEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgKCJDU1MgU2VsZWN0b3IgSklUIikpOwpAQCAtODU4LDE2ICs4NjMsNTIg
QEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXB1dGVCYWNrdAogICAgIH0KIH0KIAot
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCkKK2lu
bGluZSBib29sIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVQcm9sb2d1ZShib29sIGNh
bGxzRnVuY3Rpb25zLCBib29sIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMsIHVuc2lnbmVk
IG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcykKIHsKLSAgICBib29sIHJlc2VydmVk
Q2FsbGVlU2F2ZWRSZWdpc3RlcnMgPSBmYWxzZTsKLSAgICB1bnNpZ25lZCBhdmFpbGFibGVSZWdp
c3RlckNvdW50ID0gbV9yZWdpc3RlckFsbG9jYXRvci5hdmFpbGFibGVSZWdpc3RlckNvdW50KCk7
Ci0gICAgdW5zaWduZWQgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzID0gbWluaW11
bVJlZ2lzdGVyUmVxdWlyZW1lbnRzKG1fc2VsZWN0b3JGcmFnbWVudHMpOwotICAgIGlmIChhdmFp
bGFibGVSZWdpc3RlckNvdW50IDwgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzKSB7
Ci0gICAgICAgIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMgPSB0cnVlOwotICAgICAgICBt
X3JlZ2lzdGVyQWxsb2NhdG9yLnJlc2VydmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhtX3N0YWNrQWxs
b2NhdG9yLCBtaW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgLSBhdmFpbGFibGVSZWdp
c3RlckNvdW50KTsKKyAgICBpZiAoY2FsbHNGdW5jdGlvbnMpIHsKKyNpZiBDUFUoQVJNNjQpCisg
ICAgICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCAyPiBwcm9sb2d1
ZVJlZ2lzdGVyczsKKyAgICAgICAgcHJvbG9ndWVSZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJNNjRS
ZWdpc3RlcnM6OmxyKTsKKyAgICAgICAgcHJvbG9ndWVSZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJN
NjRSZWdpc3RlcnM6OmZwKTsKKyAgICAgICAgbV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlcyA9IG1f
c3RhY2tBbGxvY2F0b3IucHVzaChwcm9sb2d1ZVJlZ2lzdGVycyk7CisjZWxpZiBDUFUoWDg2XzY0
KSAmJiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORworICAgICAgICBWZWN0b3I8SlNDOjpNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgMT4gcHJvbG9ndWVSZWdpc3RlcjsKKyAgICAgICAgcHJv
bG9ndWVSZWdpc3Rlci5hcHBlbmQoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAg
ICBtX3Byb2xvZ3VlU3RhY2tSZWZlcmVuY2VzID0gbV9zdGFja0FsbG9jYXRvci5wdXNoKHByb2xv
Z3VlUmVnaXN0ZXIpOworI2VuZGlmCisgICAgfQorICAgIEFTU0VSVCghbV9jYWxsZWVTYXZlZFJl
Z2lzdGVyU3RhY2tSZWZlcmVuY2VzLnNpemUoKSk7CisgICAgaWYgKHJlc2VydmVkQ2FsbGVlU2F2
ZWRSZWdpc3RlcnMpCisgICAgICAgIG1fY2FsbGVlU2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNl
cyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChtX3JlZ2lzdGVyQWxsb2NhdG9yLnJlc2VydmVDYWxs
ZWVTYXZlZFJlZ2lzdGVycyhtaW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgLSBtX3Jl
Z2lzdGVyQWxsb2NhdG9yLmF2YWlsYWJsZVJlZ2lzdGVyQ291bnQoKSkpOworICAgIHJldHVybiBj
YWxsc0Z1bmN0aW9ucyB8fCByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzOworfQorICAgIAor
aW5saW5lIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVwaWxvZ3VlKGJvb2wg
Y2FsbHNGdW5jdGlvbnMsIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycykKK3sKKyAg
ICBpZiAoY2FsbHNGdW5jdGlvbnMpIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIFZlY3RvcjxK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCAyPiBwcm9sb2d1ZVJlZ2lzdGVyczsKKyAg
ICAgICAgcHJvbG9ndWVSZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmxyKTsK
KyAgICAgICAgcHJvbG9ndWVSZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmZw
KTsKKyAgICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3AobV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNl
cywgcHJvbG9ndWVSZWdpc3RlcnMpOworI2VsaWYgQ1BVKFg4Nl82NCkgJiYgQ1NTX1NFTEVDVE9S
X0pJVF9ERUJVR0dJTkcKKyAgICAgICAgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQsIDE+IHByb2xvZ3VlUmVnaXN0ZXI7CisgICAgICAgIHByb2xvZ3VlUmVnaXN0ZXIuYXBw
ZW5kKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9zdGFja0FsbG9jYXRv
ci5wb3AobV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlcywgcHJvbG9ndWVSZWdpc3Rlcik7CisjZW5k
aWYKICAgICB9CisgICAgaWYgKHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMpCisgICAgICAg
IG1fc3RhY2tBbGxvY2F0b3IucG9wKG1fY2FsbGVlU2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNl
cywgbV9yZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMoKSk7Cit9
CiAKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcigp
Cit7CisgICAgdW5zaWduZWQgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzID0gbWlu
aW11bVJlZ2lzdGVyUmVxdWlyZW1lbnRzKG1fc2VsZWN0b3JGcmFnbWVudHMpOworICAgIGJvb2wg
cmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYXZhaWxh
YmxlUmVnaXN0ZXJDb3VudCgpIDwgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzOwor
ICAgIC8vIEZJWE1FOiBJZiB0aGlzIHNlbGVjdG9yIGRvZXNuJ3QgY2FsbCBhbnkgZnVuY3Rpb25z
LCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gcHVzaCB0aGUgbGluayByZWdpc3RlciBvciBmcmFtZSBw
b2ludGVyLgorICAgIGJvb2wgY2FsbHNGdW5jdGlvbnMgPSB0cnVlOworICAgIGJvb2wgbmVlZHNF
cGlsb2d1ZSA9IGdlbmVyYXRlUHJvbG9ndWUoY2FsbHNGdW5jdGlvbnMsIHJlc2VydmVkQ2FsbGVl
U2F2ZWRSZWdpc3RlcnMsIG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcyk7CisgICAg
CiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKGVsZW1lbnRBZGRyZXNz
UmVnaXN0ZXIpOwogCiAgICAgaWYgKG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6U2Vs
ZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCkKQEAgLTkwMyw3ICs5NDQsNyBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlCiAgICAgbV9yZWdpc3RlckFsbG9j
YXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBp
ZiAobV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIp
IHsKLSAgICAgICAgaWYgKCFtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCAmJiAhcmVz
ZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycykgeworICAgICAgICBpZiAoIW1fbmVlZHNBZGphY2Vu
dEJhY2t0cmFja2luZ1N0YXJ0ICYmICFuZWVkc0VwaWxvZ3VlKSB7CiAgICAgICAgICAgICAvLyBT
dWNjZXNzLgogICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgcmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7
CkBAIC05MjgsNyArOTY5LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
U2VsZQogCiAgICAgICAgICAgICBpZiAobV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQp
CiAgICAgICAgICAgICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3BBbmREaXNjYXJkVXBUbyhtX2Fk
amFjZW50QmFja3RyYWNraW5nU3RhcnQpOwotICAgICAgICAgICAgbV9yZWdpc3RlckFsbG9jYXRv
ci5yZXN0b3JlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMobV9zdGFja0FsbG9jYXRvcik7CisgICAgICAg
ICAgICBnZW5lcmF0ZUVwaWxvZ3VlKGNhbGxzRnVuY3Rpb25zLCByZXNlcnZlZENhbGxlZVNhdmVk
UmVnaXN0ZXJzKTsKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnJldCgpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKQEAgLTk0Niw3ICs5ODcsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVTZWxlCiAgICAgICAgIH0KIAogICAgICAgICBtX3N0YWNrQWxsb2NhdG9yLnBv
cEFuZERpc2NhcmRVcFRvKG1fY2hlY2tpbmdDb250ZXh0U3RhY2tSZWZlcmVuY2UpOwotICAgICAg
ICBtX3JlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhtX3N0YWNr
QWxsb2NhdG9yKTsKKyAgICAgICAgZ2VuZXJhdGVFcGlsb2d1ZShjYWxsc0Z1bmN0aW9ucywgcmVz
ZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnJldCgpOwog
ICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCShyZXZp
c2lvbiAxNjkxMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNjgsMzEgKzY4LDc5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCk7CiAgICAgfQogCi0gICAgLy8gRklYTUU6
IEFSTTY0IG5lZWRzIGFuIEFQSSB0YWtlIGEgbGlzdCBvZiByZWdpc3RlciB0byBwdXNoIGFuZCBw
b3AgdG8gdXNlIHN0cnAgYW5kIGxkcnAgd2hlbiBwb3NzaWJsZS4KLSAgICBTdGFja1JlZmVyZW5j
ZSBwdXNoKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJRCkKKyAgICBW
ZWN0b3I8U3RhY2tSZWZlcmVuY2U+IHB1c2goY29uc3QgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+JiByZWdpc3RlcklEcykKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFtX2hhc0Z1bmN0aW9uQ2FsbFBhZGRpbmcpOworICAgICAgICB1bnNpZ25lZCByZWdpc3Rl
ckNvdW50ID0gcmVnaXN0ZXJJRHMuc2l6ZSgpOworICAgICAgICBWZWN0b3I8U3RhY2tSZWZlcmVu
Y2U+IHN0YWNrUmVmZXJlbmNlczsKKyAgICAgICAgc3RhY2tSZWZlcmVuY2VzLnJlc2VydmVDYXBh
Y2l0eShyZWdpc3RlckNvdW50KTsKICNpZiBDUFUoQVJNNjQpCi0gICAgICAgIG1fYXNzZW1ibGVy
Lm1fYXNzZW1ibGVyLnN0cjw2ND4ocmVnaXN0ZXJJRCwgSlNDOjpBUk02NFJlZ2lzdGVyczo6c3As
IEpTQzo6UHJlSW5kZXgoLTE2KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBy
ZWdpc3RlckNvdW50IC0gMTsgaSArPSAyKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5wdXNo
UGFpcihyZWdpc3RlcklEc1tpXSwgcmVnaXN0ZXJJRHNbaSArIDFdKTsKKyAgICAgICAgICAgIG1f
b2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICAgICAgc3RhY2tSZWZl
cmVuY2VzLmFwcGVuZChTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3AgLSBzdGFja1VuaXRJ
bkJ5dGVzIC8gMikpOworICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChTdGFja1Jl
ZmVyZW5jZShtX29mZnNldEZyb21Ub3ApKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVnaXN0
ZXJDb3VudCAlIDIpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hUb1NhdmUocmVnaXN0
ZXJJRHNbcmVnaXN0ZXJDb3VudCAtIDFdKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCAr
PSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChT
dGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3ApKTsKKyAgICAgICAgfQogI2Vsc2UKLSAgICAg
ICAgbV9hc3NlbWJsZXIucHVzaChyZWdpc3RlcklEKTsKKyAgICAgICAgZm9yIChhdXRvIHJlZ2lz
dGVySUQgOiByZWdpc3RlcklEcykgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIucHVzaFRvU2F2
ZShyZWdpc3RlcklEKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJ
bkJ5dGVzOworICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChTdGFja1JlZmVyZW5j
ZShtX29mZnNldEZyb21Ub3ApKTsKKyAgICAgICAgfQogI2VuZGlmCisgICAgICAgIHJldHVybiBz
dGFja1JlZmVyZW5jZXM7CisgICAgfQorCisgICAgU3RhY2tSZWZlcmVuY2UgcHVzaChKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZ2lzdGVySUQpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9oYXNGdW5jdGlvbkNhbGxQYWRkaW5nKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIucHVzaFRvU2F2ZShyZWdpc3RlcklEKTsKICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0
YWNrVW5pdEluQnl0ZXM7CiAgICAgICAgIHJldHVybiBTdGFja1JlZmVyZW5jZShtX29mZnNldEZy
b21Ub3ApOwogICAgIH0KIAotICAgIHZvaWQgcG9wKFN0YWNrUmVmZXJlbmNlIHN0YWNrUmVmZXJl
bmNlLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZ2lzdGVySUQpCisgICAgdm9p
ZCBwb3AoY29uc3QgVmVjdG9yPFN0YWNrUmVmZXJlbmNlPiYgc3RhY2tSZWZlcmVuY2VzLCBjb25z
dCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURzKQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2UgPT0gbV9vZmZzZXRG
cm9tVG9wKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGlu
Zyk7Ci0gICAgICAgIEFTU0VSVChtX29mZnNldEZyb21Ub3AgPiAwKTsKLSAgICAgICAgbV9vZmZz
ZXRGcm9tVG9wIC09IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgIAorICAgICAgICB1bnNpZ25l
ZCByZWdpc3RlckNvdW50ID0gcmVnaXN0ZXJJRHMuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChzdGFja1JlZmVyZW5jZXMuc2l6ZSgpID09IHJlZ2lzdGVyQ291bnQpOworICAgICAgICBB
U1NFUlQobV9vZmZzZXRGcm9tVG9wID49IHN0YWNrVW5pdEluQnl0ZXMgKiByZWdpc3RlckNvdW50
KTsKICNpZiBDUFUoQVJNNjQpCi0gICAgICAgIG1fYXNzZW1ibGVyLm1fYXNzZW1ibGVyLmxkcjw2
ND4ocmVnaXN0ZXJJRCwgSlNDOjpBUk02NFJlZ2lzdGVyczo6c3AsIEpTQzo6UG9zdEluZGV4KDE2
KSk7CisgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnRPZGQgPSByZWdpc3RlckNvdW50ICUg
MjsKKyAgICAgICAgaWYgKHJlZ2lzdGVyQ291bnRPZGQpIHsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0YWNrUmVmZXJlbmNlc1tyZWdpc3RlckNvdW50IC0gMV0gPT0gbV9vZmZzZXRGcm9t
VG9wKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJbkJ5dGVzOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIucG9wVG9SZXN0b3JlKHJlZ2lzdGVySURzW3JlZ2lzdGVy
Q291bnQgLSAxXSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVnaXN0
ZXJDb3VudCAtIHJlZ2lzdGVyQ291bnRPZGQ7IGkgPiAwOyBpIC09IDIpIHsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNlc1tpIC0gMV0gPT0gbV9vZmZzZXRGcm9tVG9w
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNlc1tpIC0gMl0gPT0g
bV9vZmZzZXRGcm9tVG9wIC0gc3RhY2tVbml0SW5CeXRlcyAvIDIpOworICAgICAgICAgICAgbV9v
ZmZzZXRGcm9tVG9wIC09IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5wb3BQYWlyKHJlZ2lzdGVySURzW2kgLSAyXSwgcmVnaXN0ZXJJRHNbaSAtIDFdKTsKKyAgICAg
ICAgfQogI2Vsc2UKLSAgICAgICAgbV9hc3NlbWJsZXIucG9wKHJlZ2lzdGVySUQpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSByZWdpc3RlckNvdW50OyBpID4gMDsgLS1pKSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdGFja1JlZmVyZW5jZXNbaSAtIDFdID09IG1fb2Zmc2V0RnJv
bVRvcCk7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0gc3RhY2tVbml0SW5CeXRlczsK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnBvcFRvUmVzdG9yZShyZWdpc3RlcklEc1tpIC0gMV0p
OworICAgICAgICB9CiAjZW5kaWYKICAgICB9CisgICAgCisgICAgdm9pZCBwb3AoU3RhY2tSZWZl
cmVuY2Ugc3RhY2tSZWZlcmVuY2UsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVn
aXN0ZXJJRCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNlID09
IG1fb2Zmc2V0RnJvbVRvcCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc0Z1bmN0aW9u
Q2FsbFBhZGRpbmcpOworICAgICAgICBBU1NFUlQobV9vZmZzZXRGcm9tVG9wID49IHN0YWNrVW5p
dEluQnl0ZXMpOworICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0gc3RhY2tVbml0SW5CeXRlczsK
KyAgICAgICAgbV9hc3NlbWJsZXIucG9wVG9SZXN0b3JlKHJlZ2lzdGVySUQpOworICAgIH0KIAog
ICAgIHZvaWQgcG9wQW5kRGlzY2FyZChTdGFja1JlZmVyZW5jZSBzdGFja1JlZmVyZW5jZSkKICAg
ICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231975</attachid>
            <date>2014-05-23 11:37:48 -0700</date>
            <delta_ts>2014-05-23 14:33:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133156-20140523113731.patch</filename>
            <type>text/plain</type>
            <size>17883</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE0LTA1LTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBDU1Mg
SklUIHJ1biBvbiBBUk02NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6RnVu
Y3Rpb25DYWxsOjpzYXZlQWxsb2NhdGVkUmVnaXN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1
bmN0aW9uQ2FsbDo6cmVzdG9yZUFsbG9jYXRlZFJlZ2lzdGVycyk6CisgICAgICAgIFVzZSBTdGFj
a0FsbG9jYXRvcidzIG5ldyBwdXNoIGFuZCBwb3AgZnVuY3Rpb25zIHRvIHB1c2ggYW5kIHBvcCBh
IHZlY3RvciBpbnN0ZWFkIG9mIGl0ZXJhdGluZyBpdC4KKyAgICAgICAgKiBjc3NqaXQvUmVnaXN0
ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyQWxsb2NhdG9yOjpyZXNl
cnZlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJBbGxv
Y2F0b3I6OnJlc3RvcmVDYWxsZWVTYXZlZFJlZ2lzdGVycyk6CisgICAgICAgIFJldHVybiBhIHZl
Y3RvciBvZiByZWdpc3RlcnMgdG8gYWxsb2NhdGUgaW5zdGVhZCBvZiBkb2luZyB0aGUgYWxsb2Nh
dGlvbiB0byBtYWtlIHRoZSBSZWdpc3RlckFsbG9jYXRvcgorICAgICAgICBub3QgbmVlZCB0byBr
bm93IGFib3V0IHRoZSBTdGFja0FsbG9jYXRvciBhbmQgdG8gdXNlIHRoZSBuZXcgdmVjdG9yIHB1
c2ggYW5kIHBvcCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RlckFsbG9jYXRv
cjo6flJlZ2lzdGVyQWxsb2NhdG9yKToKKyAgICAgICAgU3RvcmUgUmVnaXN0ZXJJRHMgaW5zdGVh
ZCBvZiBTdGFja1JlZmVyZW5jZXMgdG8gYXZvaWQgbmVlZGluZyB0byBrbm93IGFib3V0IHRoZSBz
dGFjay4KKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUp
OgorICAgICAgICBSZW1vdmVkIHRoZSByZXF1aXJlbWVudCBmb3IgYXNzZXJ0IHRvIGJlIGRpc2Fi
bGVkIHRvIHByaW50IGRpc2Fzc2VtYmx5IHdoZW4gZGVidWdnaW5nIGNzcyBqaXQuCisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlUHJvbG9ndWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVwaWxvZ3VlKToKKyAgICAgICAgQWRkZWQgdG8gY29y
cmVjdGx5IHB1c2ggdGhlIGxpbmsgcmVnaXN0ZXIgYW5kIGZyYW1lIHBvaW50ZXIuCisgICAgICAg
IFRoaXMgaXMgcmVxdWlyZWQgaWYgdGhlIGppdCBjb2RlIGNhbGxzIGEgZnVuY3Rpb24gb24gYXJt
NjQgYW5kIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyB0b29scyBvbiB4ODZfNjQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
U2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgR2VuZXJhdGUgdGhlIHByb2xvZ3VlIGFuZCBlcGls
b2d1ZSB3aGljaCByZXNwZWN0aXZlbHkgcHVzaCBhbmQgcG9wCisgICAgICAgIHRoZSBsaW5rIHJl
Z2lzdGVyLCBmcmFtZSBwb2ludGVyLCBhbmQgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBpZiBuZWVk
ZWQuCisgICAgICAgICogY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdGFja0FsbG9jYXRvcjo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpTdGFja0FsbG9jYXRv
cjo6cG9wKToKKyAgICAgICAgQWRkZWQgbmV3IHZlY3RvciBwdXNoIGFuZCBwb3AgZnVuY3Rpb25z
IHRvIHVzZSBzdHAgYW5kIGxkYiBpbnN0cnVjdGlvbnMgb24gYXJtNjQuCisKIDIwMTQtMDUtMjMg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBOYXZpZ2F0b3Igb2Jq
ZWN0IG5lZWRzIHRvIGhhdmUgcHJvcGVydGllcyBkaXJlY3RseSBvbiB0aGUgaW5zdGFuY2Ugb2Jq
ZWN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiAxNjkx
MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSwyMCArMTY1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzYXZlQWxsb2NhdGVk
UmVnaXN0ZXJzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3NhdmVkUmVnaXN0ZXJTdGFja1Jl
ZmVyZW5jZXMuaXNFbXB0eSgpKTsKLQotICAgICAgICB1bnNpZ25lZCBhbGxvY2F0ZWRSZWdpc3Rl
cnNDb3VudCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKCkuc2l6ZSgp
OwotICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMucmVzZXJ2ZUNhcGFjaXR5
KGFsbG9jYXRlZFJlZ2lzdGVyc0NvdW50KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYWxsb2NhdGVkUmVnaXN0ZXJzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgSlNDOjpN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdpc3RlcklEID0gbV9yZWdpc3RlckFsbG9jYXRv
ci5hbGxvY2F0ZWRSZWdpc3RlcnMoKVtpXTsKLSAgICAgICAgICAgIG1fc2F2ZWRSZWdpc3RlclN0
YWNrUmVmZXJlbmNlcy5hcHBlbmQobV9zdGFja0FsbG9jYXRvci5wdXNoKHJlZ2lzdGVySUQpKTsK
LSAgICAgICAgfQorICAgICAgICBjb25zdCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCwgcmVnaXN0ZXJDb3VudD4mIGFsbG9jYXRlZFJlZ2lzdGVycyA9IG1fcmVnaXN0ZXJB
bGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKCk7CisgICAgICAgIFZlY3RvcjxTdGFja0FsbG9j
YXRvcjo6U3RhY2tSZWZlcmVuY2U+IHN0YWNrUmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3Iu
cHVzaChhbGxvY2F0ZWRSZWdpc3RlcnMpOworICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1Jl
ZmVyZW5jZXMuYXBwZW5kVmVjdG9yKHN0YWNrUmVmZXJlbmNlcyk7CiAgICAgfQogCiAgICAgdm9p
ZCByZXN0b3JlQWxsb2NhdGVkUmVnaXN0ZXJzKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKCkuc2l6ZSgpOyBp
ID4gMDsgLS1pKQotICAgICAgICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3AobV9zYXZlZFJlZ2lz
dGVyU3RhY2tSZWZlcmVuY2VzW2kgLSAxXSwgbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZWRS
ZWdpc3RlcnMoKVtpIC0gMV0pOworICAgICAgICBtX3N0YWNrQWxsb2NhdG9yLnBvcChtX3NhdmVk
UmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMsIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVn
aXN0ZXJzKCkpOwogICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9SZWdpc3RlckFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9SZWdpc3RlckFsbG9jYXRv
ci5oCShyZXZpc2lvbiAxNjkxMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0ZXJB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShD
U1NfU0VMRUNUT1JfSklUKQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWFjcm9Bc3NlbWJs
ZXIuaD4KLSNpbmNsdWRlIDxTdGFja0FsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC03OCw3ICs3Nyw4IEBAIHN0YXRpYyBj
b25zdCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3QKICNlbHNlCiAjZXJyb3IgUmVnaXN0ZXJB
bGxvY2F0b3IgaGFzIG5vIGRlZmluZWQgcmVnaXN0ZXJzIGZvciB0aGUgYXJjaGl0ZWN0dXJlLgog
I2VuZGlmCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IFdURl9BUlJBWV9M
RU5HVEgoY2FsbGVyU2F2ZWRSZWdpc3RlcnMpICsgV1RGX0FSUkFZX0xFTkdUSChjYWxsZWVTYXZl
ZFJlZ2lzdGVycyk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FsbGVlU2F2ZWRSZWdpc3RlckNv
dW50ID0gV1RGX0FSUkFZX0xFTkdUSChjYWxsZWVTYXZlZFJlZ2lzdGVycyk7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVkUmVnaXN0ZXJDb3VudCArIFdU
Rl9BUlJBWV9MRU5HVEgoY2FsbGVyU2F2ZWRSZWdpc3RlcnMpOwogCiBjbGFzcyBSZWdpc3RlckFs
bG9jYXRvciB7CiBwdWJsaWM6CkBAIC0xMTMsMjUgKzExMywyMyBAQCBwdWJsaWM6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzLmFkZChyZWdpc3RlcklEKS5pc05ld0VudHJ5KTsK
ICAgICB9CiAKLSAgICB2b2lkIHJlc2VydmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhTdGFja0FsbG9j
YXRvciYgc3RhY2ssIHVuc2lnbmVkIGNvdW50KQorICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklELCBjYWxsZWVTYXZlZFJlZ2lzdGVyQ291bnQ+IHJlc2VydmVDYWxsZWVT
YXZlZFJlZ2lzdGVycyh1bnNpZ25lZCBjb3VudCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGZp
bmFsU2l6ZSA9IG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMuc2l6ZSgpICsgY291bnQ7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZpbmFsU2l6ZSA8PSBXVEZfQVJSQVlfTEVOR1RIKGNhbGxlZVNhdmVk
UmVnaXN0ZXJzKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fY2FsbGVlU2F2ZWRSZWdp
c3RlcnMuc2l6ZSgpOyBpIDwgZmluYWxTaXplOyArK2kpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY291bnQgPD0gV1RGX0FSUkFZX0xFTkdUSChjYWxsZWVTYXZlZFJlZ2lzdGVycykpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzLnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZ2lzdGVySWQgPSBjYWxs
ZWVTYXZlZFJlZ2lzdGVyc1tpXTsKLSAgICAgICAgICAgIG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMu
YXBwZW5kKHN0YWNrLnB1c2gocmVnaXN0ZXJJZCkpOworICAgICAgICAgICAgbV9yZXNlcnZlZENh
bGxlZVNhdmVkUmVnaXN0ZXJzLmFwcGVuZChyZWdpc3RlcklkKTsKICAgICAgICAgICAgIG1fcmVn
aXN0ZXJzLmFkZChyZWdpc3RlcklkKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gVmVjdG9y
PEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIGNhbGxlZVNhdmVkUmVnaXN0ZXJDb3Vu
dD4obV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzKTsKICAgICB9CiAKLSAgICB2b2lkIHJl
c3RvcmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhTdGFja0FsbG9jYXRvciYgc3RhY2spCisgICAgVmVj
dG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIGNhbGxlZVNhdmVkUmVnaXN0ZXJD
b3VudD4gcmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKCkKICAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMuc2l6ZSgpOyBpID4gMCA7IC0taSkg
ewotICAgICAgICAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdpc3Rlcklk
ID0gY2FsbGVlU2F2ZWRSZWdpc3RlcnNbaSAtIDFdOwotICAgICAgICAgICAgc3RhY2sucG9wKG1f
Y2FsbGVlU2F2ZWRSZWdpc3RlcnNbaSAtIDFdLCByZWdpc3RlcklkKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzLnJlbW92ZShyZWdpc3RlcklkKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9jYWxsZWVTYXZlZFJlZ2lzdGVycy5jbGVhcigpOworICAgICAgICBWZWN0b3I8
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50
PiByZWdpc3RlcnMobV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzKTsKKyAgICAgICAgbV9y
ZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzLmNsZWFyKCk7CisgICAgICAgIHJldHVybiByZWdp
c3RlcnM7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQsIHJlZ2lzdGVyQ291bnQ+JiBhbGxvY2F0ZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG9jYXRlZFJlZ2lzdGVyczsgfQpAQCAtMTUwLDcgKzE0OCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV9yZWdp
c3RlcnM7CiAgICAgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIHJlZ2lz
dGVyQ291bnQ+IG1fYWxsb2NhdGVkUmVnaXN0ZXJzOwotICAgIFZlY3RvcjxTdGFja0FsbG9jYXRv
cjo6U3RhY2tSZWZlcmVuY2UsIFdURl9BUlJBWV9MRU5HVEgoY2FsbGVlU2F2ZWRSZWdpc3RlcnMp
PiBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzOworICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklELCBjYWxsZWVTYXZlZFJlZ2lzdGVyQ291bnQ+IG1fcmVzZXJ2ZWRDYWxsZWVT
YXZlZFJlZ2lzdGVyczsKIH07CiAKIGNsYXNzIExvY2FsUmVnaXN0ZXIgewpAQCAtMTg0LDcgKzE4
Miw3IEBAIGlubGluZSBSZWdpc3RlckFsbG9jYXRvcjo6UmVnaXN0ZXJBbGxvY2EKIAogaW5saW5l
IFJlZ2lzdGVyQWxsb2NhdG9yOjp+UmVnaXN0ZXJBbGxvY2F0b3IoKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMuaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMuaXNFbXB0eSgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5MTIxKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDExIEBA
IHByaXZhdGU6CiAgICAgQXNzZW1ibGVyOjpKdW1wIG1vZHVsbyhKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24sIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbnB1dERpdmlkZW5kLCBp
bnQgZGl2aXNvcik7CiAgICAgdm9pZCBtb2R1bG9Jc1plcm8oQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5wdXREaXZpZGVuZCwgaW50IGRp
dmlzb3IpOwogCisgICAgYm9vbCBnZW5lcmF0ZVByb2xvZ3VlKGJvb2wgY2FsbHNGdW5jdGlvbnMs
IGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycywgdW5zaWduZWQgbWluaW11bVJlZ2lz
dGVyQ291bnRGb3JBdHRyaWJ1dGVzKTsKKyAgICB2b2lkIGdlbmVyYXRlRXBpbG9ndWUoYm9vbCBj
YWxsc0Z1bmN0aW9ucywgYm9vbCByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzKTsKKyAgICBW
ZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlPiBtX3Byb2xvZ3VlU3RhY2tSZWZl
cmVuY2VzOworICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2U+IG1fY2Fs
bGVlU2F2ZWRSZWdpc3RlclN0YWNrUmVmZXJlbmNlczsKKyAgICAKICAgICBBc3NlbWJsZXIgbV9h
c3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxvY2F0b3IgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAg
ICBTdGFja0FsbG9jYXRvciBtX3N0YWNrQWxsb2NhdG9yOwpAQCAtNTQyLDcgKzU0Nyw3IEBAIGlu
bGluZSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG8KICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9mdW5jdGlvbkNhbGxzLnNpemUoKTsgaSsrKQogICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsobV9mdW5jdGlvbkNhbGxzW2ldLmZpcnN0LCBtX2Z1bmN0aW9uQ2FsbHNbaV0uc2Vj
b25kKTsKIAotI2lmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HICYmIEFTU0VSVF9ESVNBQkxF
RAorI2lmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCiAgICAgY29kZVJlZiA9IGxpbmtCdWZm
ZXIuZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KCJDU1MgU2VsZWN0b3IgSklUIGZvciBcIiVz
XCIiLCBtX29yaWdpbmFsU2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwog
I2Vsc2UKICAgICBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkNTUyBTZWxl
Y3RvciBKSVQiKSk7CkBAIC04NTgsMTYgKzg2Myw1NiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVy
YXRvcjo6Y29tcHV0ZUJhY2t0CiAgICAgfQogfQogCi12b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQoraW5saW5lIGJvb2wgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZVByb2xvZ3VlKGJvb2wgY2FsbHNGdW5jdGlvbnMsIGJvb2wgcmVzZXJ2
ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycywgdW5zaWduZWQgbWluaW11bVJlZ2lzdGVyQ291bnRGb3JB
dHRyaWJ1dGVzKQogewotICAgIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyA9IGZh
bHNlOwotICAgIHVuc2lnbmVkIGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQgPSBtX3JlZ2lzdGVyQWxs
b2NhdG9yLmF2YWlsYWJsZVJlZ2lzdGVyQ291bnQoKTsKLSAgICB1bnNpZ25lZCBtaW5pbXVtUmVn
aXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgPSBtaW5pbXVtUmVnaXN0ZXJSZXF1aXJlbWVudHMobV9z
ZWxlY3RvckZyYWdtZW50cyk7Ci0gICAgaWYgKGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQgPCBtaW5p
bXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMpIHsKLSAgICAgICAgcmVzZXJ2ZWRDYWxsZWVT
YXZlZFJlZ2lzdGVycyA9IHRydWU7Ci0gICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzZXJ2
ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1fc3RhY2tBbGxvY2F0b3IsIG1pbmltdW1SZWdpc3RlckNv
dW50Rm9yQXR0cmlidXRlcyAtIGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQpOworICAgIGlmIChjYWxs
c0Z1bmN0aW9ucykgeworI2lmIENQVShBUk02NCkKKyAgICAgICAgVmVjdG9yPEpTQzo6TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQsIDI+IHByb2xvZ3VlUmVnaXN0ZXJzOworICAgICAgICBwcm9s
b2d1ZVJlZ2lzdGVycy5hcHBlbmQoSlNDOjpBUk02NFJlZ2lzdGVyczo6bHIpOworICAgICAgICBw
cm9sb2d1ZVJlZ2lzdGVycy5hcHBlbmQoSlNDOjpBUk02NFJlZ2lzdGVyczo6ZnApOworICAgICAg
ICBtX3Byb2xvZ3VlU3RhY2tSZWZlcmVuY2VzID0gbV9zdGFja0FsbG9jYXRvci5wdXNoKHByb2xv
Z3VlUmVnaXN0ZXJzKTsKKyNlbGlmIENQVShYODZfNjQpICYmIENTU19TRUxFQ1RPUl9KSVRfREVC
VUdHSU5HCisgICAgICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCAx
PiBwcm9sb2d1ZVJlZ2lzdGVyOworICAgICAgICBwcm9sb2d1ZVJlZ2lzdGVyLmFwcGVuZChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgICAgIG1fcHJvbG9ndWVTdGFja1JlZmVyZW5j
ZXMgPSBtX3N0YWNrQWxsb2NhdG9yLnB1c2gocHJvbG9ndWVSZWdpc3Rlcik7CisjZW5kaWYKKyAg
ICB9CisgICAgQVNTRVJUKCFtX2NhbGxlZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMuc2l6
ZSgpKTsKKyAgICBpZiAocmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycykKKyAgICAgICAgbV9j
YWxsZWVTYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzID0gbV9zdGFja0FsbG9jYXRvci5wdXNo
KG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzZXJ2ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1pbmltdW1S
ZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcyAtIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYXZhaWxhYmxl
UmVnaXN0ZXJDb3VudCgpKSk7CisjaWYgQ1BVKEFSTTY0KSB8fCAoQ1BVKFg4Nl82NCkgJiYgQ1NT
X1NFTEVDVE9SX0pJVF9ERUJVR0dJTkcpCisgICAgcmV0dXJuIGNhbGxzRnVuY3Rpb25zIHx8IHJl
c2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnM7CisjZWxzZQorICAgIHJldHVybiByZXNlcnZlZENh
bGxlZVNhdmVkUmVnaXN0ZXJzOworI2VuZGlmCit9CisgICAgCitpbmxpbmUgdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRXBpbG9ndWUoYm9vbCBjYWxsc0Z1bmN0aW9ucywgYm9v
bCByZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzKQoreworICAgIGlmIChjYWxsc0Z1bmN0aW9u
cykgeworI2lmIENQVShBUk02NCkKKyAgICAgICAgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQsIDI+IHByb2xvZ3VlUmVnaXN0ZXJzOworICAgICAgICBwcm9sb2d1ZVJlZ2lz
dGVycy5hcHBlbmQoSlNDOjpBUk02NFJlZ2lzdGVyczo6bHIpOworICAgICAgICBwcm9sb2d1ZVJl
Z2lzdGVycy5hcHBlbmQoSlNDOjpBUk02NFJlZ2lzdGVyczo6ZnApOworICAgICAgICBtX3N0YWNr
QWxsb2NhdG9yLnBvcChtX3Byb2xvZ3VlU3RhY2tSZWZlcmVuY2VzLCBwcm9sb2d1ZVJlZ2lzdGVy
cyk7CisjZWxpZiBDUFUoWDg2XzY0KSAmJiBDU1NfU0VMRUNUT1JfSklUX0RFQlVHR0lORworICAg
ICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgMT4gcHJvbG9ndWVS
ZWdpc3RlcjsKKyAgICAgICAgcHJvbG9ndWVSZWdpc3Rlci5hcHBlbmQoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgICAgICBtX3N0YWNrQWxsb2NhdG9yLnBvcChtX3Byb2xvZ3VlU3Rh
Y2tSZWZlcmVuY2VzLCBwcm9sb2d1ZVJlZ2lzdGVyKTsKKyNlbmRpZgogICAgIH0KKyAgICBpZiAo
cmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycykKKyAgICAgICAgbV9zdGFja0FsbG9jYXRvci5w
b3AobV9jYWxsZWVTYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLCBtX3JlZ2lzdGVyQWxsb2Nh
dG9yLnJlc3RvcmVDYWxsZWVTYXZlZFJlZ2lzdGVycygpKTsKK30KIAordm9pZCBTZWxlY3RvckNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyKCkKK3sKKyAgICB1bnNpZ25lZCBt
aW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgPSBtaW5pbXVtUmVnaXN0ZXJSZXF1aXJl
bWVudHMobV9zZWxlY3RvckZyYWdtZW50cyk7CisgICAgYm9vbCByZXNlcnZlZENhbGxlZVNhdmVk
UmVnaXN0ZXJzID0gbV9yZWdpc3RlckFsbG9jYXRvci5hdmFpbGFibGVSZWdpc3RlckNvdW50KCkg
PCBtaW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXM7CisgICAgLy8gRklYTUU6IElmIHRo
aXMgc2VsZWN0b3IgZG9lc24ndCBjYWxsIGFueSBmdW5jdGlvbnMsIHRoZW4gd2UgZG9uJ3QgbmVl
ZCB0byBwdXNoIHRoZSBsaW5rIHJlZ2lzdGVyIG9yIGZyYW1lIHBvaW50ZXIuCisgICAgYm9vbCBj
YWxsc0Z1bmN0aW9ucyA9IHRydWU7CisgICAgYm9vbCBuZWVkc0VwaWxvZ3VlID0gZ2VuZXJhdGVQ
cm9sb2d1ZShjYWxsc0Z1bmN0aW9ucywgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycywgbWlu
aW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzKTsKKyAgICAKICAgICBtX3JlZ2lzdGVyQWxs
b2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBp
ZiAobV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hl
Y2tpbmdDb250ZXh0KQpAQCAtOTAzLDcgKzk0OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZVNlbGUKICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdp
c3RlcihlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKIAogICAgIGlmIChtX2Z1bmN0aW9uVHlwZSA9
PSBGdW5jdGlvblR5cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgewotICAgICAgICBpZiAoIW1f
bmVlZHNBZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0ICYmICFyZXNlcnZlZENhbGxlZVNhdmVkUmVn
aXN0ZXJzKSB7CisgICAgICAgIGlmICghbV9uZWVkc0FkamFjZW50QmFja3RyYWNraW5nU3RhcnQg
JiYgIW5lZWRzRXBpbG9ndWUpIHsKICAgICAgICAgICAgIC8vIFN1Y2Nlc3MuCiAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXR1cm5SZWdp
c3Rlcik7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5yZXQoKTsKQEAgLTkyOCw3ICs5NzMsNyBA
QCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlCiAKICAgICAgICAgICAg
IGlmIChtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCkKICAgICAgICAgICAgICAgICBt
X3N0YWNrQWxsb2NhdG9yLnBvcEFuZERpc2NhcmRVcFRvKG1fYWRqYWNlbnRCYWNrdHJhY2tpbmdT
dGFydCk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVDYWxsZWVTYXZl
ZFJlZ2lzdGVycyhtX3N0YWNrQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIGdlbmVyYXRlRXBpbG9n
dWUoY2FsbHNGdW5jdGlvbnMsIHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMpOwogICAgICAg
ICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtOTQ2
LDcgKzk5MSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGUKICAg
ICAgICAgfQogCiAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wQW5kRGlzY2FyZFVwVG8obV9j
aGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSk7Ci0gICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0
b3IucmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1fc3RhY2tBbGxvY2F0b3IpOworICAgICAg
ICBnZW5lcmF0ZUVwaWxvZ3VlKGNhbGxzRnVuY3Rpb25zLCByZXNlcnZlZENhbGxlZVNhdmVkUmVn
aXN0ZXJzKTsKICAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CiAgICAgfQogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE2OTEyMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OCwzMSArNjgsNzkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3RhY2tSZWZlcmVuY2UobV9v
ZmZzZXRGcm9tVG9wKTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogQVJNNjQgbmVlZHMgYW4gQVBJ
IHRha2UgYSBsaXN0IG9mIHJlZ2lzdGVyIHRvIHB1c2ggYW5kIHBvcCB0byB1c2Ugc3RycCBhbmQg
bGRycCB3aGVuIHBvc3NpYmxlLgotICAgIFN0YWNrUmVmZXJlbmNlIHB1c2goSlNDOjpNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdpc3RlcklEKQorICAgIFZlY3RvcjxTdGFja1JlZmVyZW5j
ZT4gcHVzaChjb25zdCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJl
Z2lzdGVySURzKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25D
YWxsUGFkZGluZyk7CisgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdpc3RlcklE
cy5zaXplKCk7CisgICAgICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gc3RhY2tSZWZlcmVuY2Vz
OworICAgICAgICBzdGFja1JlZmVyZW5jZXMucmVzZXJ2ZUNhcGFjaXR5KHJlZ2lzdGVyQ291bnQp
OwogI2lmIENQVShBUk02NCkKLSAgICAgICAgbV9hc3NlbWJsZXIubV9hc3NlbWJsZXIuc3RyPDY0
PihyZWdpc3RlcklELCBKU0M6OkFSTTY0UmVnaXN0ZXJzOjpzcCwgSlNDOjpQcmVJbmRleCgtMTYp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lzdGVyQ291bnQgLSAxOyBp
ICs9IDIpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hQYWlyKHJlZ2lzdGVySURzW2ld
LCByZWdpc3RlcklEc1tpICsgMV0pOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0
YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNr
UmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCAtIHN0YWNrVW5pdEluQnl0ZXMgLyAyKSk7CisgICAg
ICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJv
bVRvcCkpOworICAgICAgICB9CisgICAgICAgIGlmIChyZWdpc3RlckNvdW50ICUgMikgeworICAg
ICAgICAgICAgbV9hc3NlbWJsZXIucHVzaFRvU2F2ZShyZWdpc3RlcklEc1tyZWdpc3RlckNvdW50
IC0gMV0pOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXM7
CisgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zm
c2V0RnJvbVRvcCkpOworICAgICAgICB9CiAjZWxzZQotICAgICAgICBtX2Fzc2VtYmxlci5wdXNo
KHJlZ2lzdGVySUQpOworICAgICAgICBmb3IgKGF1dG8gcmVnaXN0ZXJJRCA6IHJlZ2lzdGVySURz
KSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5wdXNoVG9TYXZlKHJlZ2lzdGVySUQpOworICAg
ICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAg
ICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkp
OworICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgcmV0dXJuIHN0YWNrUmVmZXJlbmNlczsKKyAg
ICB9CisKKyAgICBTdGFja1JlZmVyZW5jZSBwdXNoKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgcmVnaXN0ZXJJRCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX2hhc0Z1
bmN0aW9uQ2FsbFBhZGRpbmcpOworICAgICAgICBtX2Fzc2VtYmxlci5wdXNoVG9TYXZlKHJlZ2lz
dGVySUQpOwogICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0gc3RhY2tVbml0SW5CeXRlczsKICAg
ICAgICAgcmV0dXJuIFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCk7CiAgICAgfQogCi0g
ICAgdm9pZCBwb3AoU3RhY2tSZWZlcmVuY2Ugc3RhY2tSZWZlcmVuY2UsIEpTQzo6TWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJRCkKKyAgICB2b2lkIHBvcChjb25zdCBWZWN0b3I8
U3RhY2tSZWZlcmVuY2U+JiBzdGFja1JlZmVyZW5jZXMsIGNvbnN0IFZlY3RvcjxKU0M6Ok1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEPiYgcmVnaXN0ZXJJRHMpCiAgICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGFja1JlZmVyZW5jZSA9PSBtX29mZnNldEZyb21Ub3ApOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9oYXNGdW5jdGlvbkNhbGxQYWRkaW5nKTsKLSAgICAgICAgQVNTRVJU
KG1fb2Zmc2V0RnJvbVRvcCA+IDApOwotICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0gc3RhY2tV
bml0SW5CeXRlczsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBy
ZWdpc3RlcklEcy5zaXplKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNl
cy5zaXplKCkgPT0gcmVnaXN0ZXJDb3VudCk7CisgICAgICAgIEFTU0VSVChtX29mZnNldEZyb21U
b3AgPj0gc3RhY2tVbml0SW5CeXRlcyAqIHJlZ2lzdGVyQ291bnQpOwogI2lmIENQVShBUk02NCkK
LSAgICAgICAgbV9hc3NlbWJsZXIubV9hc3NlbWJsZXIubGRyPDY0PihyZWdpc3RlcklELCBKU0M6
OkFSTTY0UmVnaXN0ZXJzOjpzcCwgSlNDOjpQb3N0SW5kZXgoMTYpKTsKKyAgICAgICAgdW5zaWdu
ZWQgcmVnaXN0ZXJDb3VudE9kZCA9IHJlZ2lzdGVyQ291bnQgJSAyOworICAgICAgICBpZiAocmVn
aXN0ZXJDb3VudE9kZCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVu
Y2VzW3JlZ2lzdGVyQ291bnQgLSAxXSA9PSBtX29mZnNldEZyb21Ub3ApOworICAgICAgICAgICAg
bV9vZmZzZXRGcm9tVG9wIC09IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5wb3BUb1Jlc3RvcmUocmVnaXN0ZXJJRHNbcmVnaXN0ZXJDb3VudCAtIDFdKTsKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWdpc3RlckNvdW50IC0gcmVnaXN0ZXJD
b3VudE9kZDsgaSA+IDA7IGkgLT0gMikgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Rh
Y2tSZWZlcmVuY2VzW2kgLSAxXSA9PSBtX29mZnNldEZyb21Ub3ApOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW2kgLSAyXSA9PSBtX29mZnNldEZyb21Ub3AgLSBz
dGFja1VuaXRJbkJ5dGVzIC8gMik7CisgICAgICAgICAgICBtX29mZnNldEZyb21Ub3AgLT0gc3Rh
Y2tVbml0SW5CeXRlczsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnBvcFBhaXIocmVnaXN0ZXJJ
RHNbaSAtIDJdLCByZWdpc3RlcklEc1tpIC0gMV0pOworICAgICAgICB9CiAjZWxzZQotICAgICAg
ICBtX2Fzc2VtYmxlci5wb3AocmVnaXN0ZXJJRCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHJlZ2lzdGVyQ291bnQ7IGkgPiAwOyAtLWkpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHN0YWNrUmVmZXJlbmNlc1tpIC0gMV0gPT0gbV9vZmZzZXRGcm9tVG9wKTsKKyAgICAgICAgICAg
IG1fb2Zmc2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICAgICAgbV9hc3Nl
bWJsZXIucG9wVG9SZXN0b3JlKHJlZ2lzdGVySURzW2kgLSAxXSk7CisgICAgICAgIH0KICNlbmRp
ZgogICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcChTdGFja1JlZmVyZW5jZSBzdGFja1JlZmVyZW5j
ZSwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdpc3RlcklEKQorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2UgPT0gbV9vZmZzZXRGcm9tVG9wKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7CisgICAg
ICAgIEFTU0VSVChtX29mZnNldEZyb21Ub3AgPj0gc3RhY2tVbml0SW5CeXRlcyk7CisgICAgICAg
IG1fb2Zmc2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJbkJ5dGVzOworICAgICAgICBtX2Fzc2VtYmxl
ci5wb3BUb1Jlc3RvcmUocmVnaXN0ZXJJRCk7CisgICAgfQogCiAgICAgdm9pZCBwb3BBbmREaXNj
YXJkKFN0YWNrUmVmZXJlbmNlIHN0YWNrUmVmZXJlbmNlKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231989</attachid>
            <date>2014-05-23 14:33:25 -0700</date>
            <delta_ts>2014-05-23 17:49:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133156-20140523143307.patch</filename>
            <type>text/plain</type>
            <size>16821</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE0LTA1LTIzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTWFrZSBDU1Mg
SklUIHJ1biBvbiBBUk02NC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oOgorICAgICAgICAoV2ViQ29yZTo6RnVu
Y3Rpb25DYWxsOjpzYXZlQWxsb2NhdGVkUmVnaXN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZ1
bmN0aW9uQ2FsbDo6cmVzdG9yZUFsbG9jYXRlZFJlZ2lzdGVycyk6CisgICAgICAgIFVzZSBTdGFj
a0FsbG9jYXRvcidzIG5ldyBwdXNoIGFuZCBwb3AgZnVuY3Rpb25zIHRvIHB1c2ggYW5kIHBvcCBh
IHZlY3RvciBpbnN0ZWFkIG9mIGl0ZXJhdGluZyBpdC4KKyAgICAgICAgKiBjc3NqaXQvUmVnaXN0
ZXJBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlZ2lzdGVyQWxsb2NhdG9yOjpyZXNl
cnZlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVnaXN0ZXJBbGxv
Y2F0b3I6OnJlc3RvcmVDYWxsZWVTYXZlZFJlZ2lzdGVycyk6CisgICAgICAgIFJldHVybiBhIHZl
Y3RvciBvZiByZWdpc3RlcnMgdG8gYWxsb2NhdGUgaW5zdGVhZCBvZiBkb2luZyB0aGUgYWxsb2Nh
dGlvbiB0byBtYWtlIHRoZSBSZWdpc3RlckFsbG9jYXRvcgorICAgICAgICBub3QgbmVlZCB0byBr
bm93IGFib3V0IHRoZSBTdGFja0FsbG9jYXRvciBhbmQgdG8gdXNlIHRoZSBuZXcgdmVjdG9yIHB1
c2ggYW5kIHBvcCBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpSZWdpc3RlckFsbG9jYXRv
cjo6flJlZ2lzdGVyQWxsb2NhdG9yKToKKyAgICAgICAgU3RvcmUgUmVnaXN0ZXJJRHMgaW5zdGVh
ZCBvZiBTdGFja1JlZmVyZW5jZXMgdG8gYXZvaWQgbmVlZGluZyB0byBrbm93IGFib3V0IHRoZSBz
dGFjay4KKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmNvbXBpbGUp
OgorICAgICAgICBSZW1vdmVkIHRoZSByZXF1aXJlbWVudCBmb3IgYXNzZXJ0IHRvIGJlIGRpc2Fi
bGVkIHRvIHByaW50IGRpc2Fzc2VtYmx5IHdoZW4gZGVidWdnaW5nIGNzcyBqaXQuCisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlUHJvbG9ndWUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVwaWxvZ3VlKToKKyAgICAgICAgQWRkZWQgdG8gY29y
cmVjdGx5IHB1c2ggdGhlIGxpbmsgcmVnaXN0ZXIgYW5kIGZyYW1lIHBvaW50ZXIuCisgICAgICAg
IFRoaXMgaXMgcmVxdWlyZWQgaWYgdGhlIGppdCBjb2RlIGNhbGxzIGEgZnVuY3Rpb24gb24gYXJt
NjQgYW5kIGhlbHBmdWwgZm9yIGRlYnVnZ2luZyB0b29scyBvbiB4ODZfNjQuCisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
U2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgR2VuZXJhdGUgdGhlIHByb2xvZ3VlIGFuZCBlcGls
b2d1ZSB3aGljaCByZXNwZWN0aXZlbHkgcHVzaCBhbmQgcG9wCisgICAgICAgIHRoZSBsaW5rIHJl
Z2lzdGVyLCBmcmFtZSBwb2ludGVyLCBhbmQgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycyBpZiBuZWVk
ZWQuCisgICAgICAgICogY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTdGFja0FsbG9jYXRvcjo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpTdGFja0FsbG9jYXRv
cjo6cG9wKToKKyAgICAgICAgQWRkZWQgbmV3IHZlY3RvciBwdXNoIGFuZCBwb3AgZnVuY3Rpb25z
IHRvIHVzZSBzdHAgYW5kIGxkYiBpbnN0cnVjdGlvbnMgb24gYXJtNjQuCisKIDIwMTQtMDUtMjMg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBOYXZpZ2F0b3Igb2Jq
ZWN0IG5lZWRzIHRvIGhhdmUgcHJvcGVydGllcyBkaXJlY3RseSBvbiB0aGUgaW5zdGFuY2Ugb2Jq
ZWN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiAxNjkx
MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSwyMCArMTY1LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzYXZlQWxsb2NhdGVk
UmVnaXN0ZXJzKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3NhdmVkUmVnaXN0ZXJTdGFja1Jl
ZmVyZW5jZXMuaXNFbXB0eSgpKTsKLQotICAgICAgICB1bnNpZ25lZCBhbGxvY2F0ZWRSZWdpc3Rl
cnNDb3VudCA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKCkuc2l6ZSgp
OwotICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMucmVzZXJ2ZUNhcGFjaXR5
KGFsbG9jYXRlZFJlZ2lzdGVyc0NvdW50KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYWxsb2NhdGVkUmVnaXN0ZXJzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgSlNDOjpN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdpc3RlcklEID0gbV9yZWdpc3RlckFsbG9jYXRv
ci5hbGxvY2F0ZWRSZWdpc3RlcnMoKVtpXTsKLSAgICAgICAgICAgIG1fc2F2ZWRSZWdpc3RlclN0
YWNrUmVmZXJlbmNlcy5hcHBlbmQobV9zdGFja0FsbG9jYXRvci5wdXNoKHJlZ2lzdGVySUQpKTsK
LSAgICAgICAgfQorICAgICAgICBjb25zdCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCwgcmVnaXN0ZXJDb3VudD4mIGFsbG9jYXRlZFJlZ2lzdGVycyA9IG1fcmVnaXN0ZXJB
bGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKCk7CisgICAgICAgIFZlY3RvcjxTdGFja0FsbG9j
YXRvcjo6U3RhY2tSZWZlcmVuY2U+IHN0YWNrUmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3Iu
cHVzaChhbGxvY2F0ZWRSZWdpc3RlcnMpOworICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1Jl
ZmVyZW5jZXMuYXBwZW5kVmVjdG9yKHN0YWNrUmVmZXJlbmNlcyk7CiAgICAgfQogCiAgICAgdm9p
ZCByZXN0b3JlQWxsb2NhdGVkUmVnaXN0ZXJzKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKCkuc2l6ZSgpOyBp
ID4gMDsgLS1pKQotICAgICAgICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3AobV9zYXZlZFJlZ2lz
dGVyU3RhY2tSZWZlcmVuY2VzW2kgLSAxXSwgbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZWRS
ZWdpc3RlcnMoKVtpIC0gMV0pOworICAgICAgICBtX3N0YWNrQWxsb2NhdG9yLnBvcChtX3NhdmVk
UmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMsIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVn
aXN0ZXJzKCkpOwogICAgICAgICBtX3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMuY2xlYXIo
KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9SZWdpc3RlckFsbG9jYXRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9SZWdpc3RlckFsbG9jYXRv
ci5oCShyZXZpc2lvbiAxNjkxMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0ZXJB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShD
U1NfU0VMRUNUT1JfSklUKQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWFjcm9Bc3NlbWJs
ZXIuaD4KLSNpbmNsdWRlIDxTdGFja0FsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC03OCw3ICs3Nyw4IEBAIHN0YXRpYyBj
b25zdCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3QKICNlbHNlCiAjZXJyb3IgUmVnaXN0ZXJB
bGxvY2F0b3IgaGFzIG5vIGRlZmluZWQgcmVnaXN0ZXJzIGZvciB0aGUgYXJjaGl0ZWN0dXJlLgog
I2VuZGlmCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IFdURl9BUlJBWV9M
RU5HVEgoY2FsbGVyU2F2ZWRSZWdpc3RlcnMpICsgV1RGX0FSUkFZX0xFTkdUSChjYWxsZWVTYXZl
ZFJlZ2lzdGVycyk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FsbGVlU2F2ZWRSZWdpc3RlckNv
dW50ID0gV1RGX0FSUkFZX0xFTkdUSChjYWxsZWVTYXZlZFJlZ2lzdGVycyk7CitzdGF0aWMgY29u
c3QgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IGNhbGxlZVNhdmVkUmVnaXN0ZXJDb3VudCArIFdU
Rl9BUlJBWV9MRU5HVEgoY2FsbGVyU2F2ZWRSZWdpc3RlcnMpOwogCiBjbGFzcyBSZWdpc3RlckFs
bG9jYXRvciB7CiBwdWJsaWM6CkBAIC0xMTMsMjUgKzExMywyMyBAQCBwdWJsaWM6CiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzLmFkZChyZWdpc3RlcklEKS5pc05ld0VudHJ5KTsK
ICAgICB9CiAKLSAgICB2b2lkIHJlc2VydmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhTdGFja0FsbG9j
YXRvciYgc3RhY2ssIHVuc2lnbmVkIGNvdW50KQorICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklELCBjYWxsZWVTYXZlZFJlZ2lzdGVyQ291bnQ+IHJlc2VydmVDYWxsZWVT
YXZlZFJlZ2lzdGVycyh1bnNpZ25lZCBjb3VudCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGZp
bmFsU2l6ZSA9IG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMuc2l6ZSgpICsgY291bnQ7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGZpbmFsU2l6ZSA8PSBXVEZfQVJSQVlfTEVOR1RIKGNhbGxlZVNhdmVk
UmVnaXN0ZXJzKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fY2FsbGVlU2F2ZWRSZWdp
c3RlcnMuc2l6ZSgpOyBpIDwgZmluYWxTaXplOyArK2kpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoY291bnQgPD0gV1RGX0FSUkFZX0xFTkdUSChjYWxsZWVTYXZlZFJlZ2lzdGVycykpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzLnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgICAgICBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZ2lzdGVySWQgPSBjYWxs
ZWVTYXZlZFJlZ2lzdGVyc1tpXTsKLSAgICAgICAgICAgIG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMu
YXBwZW5kKHN0YWNrLnB1c2gocmVnaXN0ZXJJZCkpOworICAgICAgICAgICAgbV9yZXNlcnZlZENh
bGxlZVNhdmVkUmVnaXN0ZXJzLmFwcGVuZChyZWdpc3RlcklkKTsKICAgICAgICAgICAgIG1fcmVn
aXN0ZXJzLmFkZChyZWdpc3RlcklkKTsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gVmVjdG9y
PEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIGNhbGxlZVNhdmVkUmVnaXN0ZXJDb3Vu
dD4obV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzKTsKICAgICB9CiAKLSAgICB2b2lkIHJl
c3RvcmVDYWxsZWVTYXZlZFJlZ2lzdGVycyhTdGFja0FsbG9jYXRvciYgc3RhY2spCisgICAgVmVj
dG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIGNhbGxlZVNhdmVkUmVnaXN0ZXJD
b3VudD4gcmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKCkKICAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMuc2l6ZSgpOyBpID4gMCA7IC0taSkg
ewotICAgICAgICAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdpc3Rlcklk
ID0gY2FsbGVlU2F2ZWRSZWdpc3RlcnNbaSAtIDFdOwotICAgICAgICAgICAgc3RhY2sucG9wKG1f
Y2FsbGVlU2F2ZWRSZWdpc3RlcnNbaSAtIDFdLCByZWdpc3RlcklkKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fcmVnaXN0ZXJzLnJlbW92ZShyZWdpc3RlcklkKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9jYWxsZWVTYXZlZFJlZ2lzdGVycy5jbGVhcigpOworICAgICAgICBWZWN0b3I8
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50
PiByZWdpc3RlcnMobV9yZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzKTsKKyAgICAgICAgbV9y
ZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzLmNsZWFyKCk7CisgICAgICAgIHJldHVybiByZWdp
c3RlcnM7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQsIHJlZ2lzdGVyQ291bnQ+JiBhbGxvY2F0ZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJl
dHVybiBtX2FsbG9jYXRlZFJlZ2lzdGVyczsgfQpAQCAtMTUwLDcgKzE0OCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpI
YXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4gbV9yZWdp
c3RlcnM7CiAgICAgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQsIHJlZ2lz
dGVyQ291bnQ+IG1fYWxsb2NhdGVkUmVnaXN0ZXJzOwotICAgIFZlY3RvcjxTdGFja0FsbG9jYXRv
cjo6U3RhY2tSZWZlcmVuY2UsIFdURl9BUlJBWV9MRU5HVEgoY2FsbGVlU2F2ZWRSZWdpc3RlcnMp
PiBtX2NhbGxlZVNhdmVkUmVnaXN0ZXJzOworICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpSZWdpc3RlcklELCBjYWxsZWVTYXZlZFJlZ2lzdGVyQ291bnQ+IG1fcmVzZXJ2ZWRDYWxsZWVT
YXZlZFJlZ2lzdGVyczsKIH07CiAKIGNsYXNzIExvY2FsUmVnaXN0ZXIgewpAQCAtMTg0LDcgKzE4
Miw3IEBAIGlubGluZSBSZWdpc3RlckFsbG9jYXRvcjo6UmVnaXN0ZXJBbGxvY2EKIAogaW5saW5l
IFJlZ2lzdGVyQWxsb2NhdG9yOjp+UmVnaXN0ZXJBbGxvY2F0b3IoKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fY2FsbGVlU2F2ZWRSZWdpc3RlcnMuaXNFbXB0eSgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnMuaXNFbXB0eSgpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5MTIxKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDEwIEBA
IHByaXZhdGU6CiAgICAgQXNzZW1ibGVyOjpKdW1wIG1vZHVsbyhKU0M6Ok1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24sIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBpbnB1dERpdmlkZW5kLCBp
bnQgZGl2aXNvcik7CiAgICAgdm9pZCBtb2R1bG9Jc1plcm8oQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgaW5wdXREaXZpZGVuZCwgaW50IGRp
dmlzb3IpOwogCisgICAgYm9vbCBnZW5lcmF0ZVByb2xvZ3VlKCk7CisgICAgdm9pZCBnZW5lcmF0
ZUVwaWxvZ3VlKCk7CisgICAgVmVjdG9yPFN0YWNrQWxsb2NhdG9yOjpTdGFja1JlZmVyZW5jZT4g
bV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlczsKKyAgICAKICAgICBBc3NlbWJsZXIgbV9hc3NlbWJs
ZXI7CiAgICAgUmVnaXN0ZXJBbGxvY2F0b3IgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFj
a0FsbG9jYXRvciBtX3N0YWNrQWxsb2NhdG9yOwpAQCAtNTQyLDcgKzU0Niw3IEBAIGlubGluZSBT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzIFNlbGVjdG8KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9mdW5jdGlvbkNhbGxzLnNpemUoKTsgaSsrKQogICAgICAgICBsaW5rQnVmZmVyLmxp
bmsobV9mdW5jdGlvbkNhbGxzW2ldLmZpcnN0LCBtX2Z1bmN0aW9uQ2FsbHNbaV0uc2Vjb25kKTsK
IAotI2lmIENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HICYmIEFTU0VSVF9ESVNBQkxFRAorI2lm
IENTU19TRUxFQ1RPUl9KSVRfREVCVUdHSU5HCiAgICAgY29kZVJlZiA9IGxpbmtCdWZmZXIuZmlu
YWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KCJDU1MgU2VsZWN0b3IgSklUIGZvciBcIiVzXCIiLCBt
X29yaWdpbmFsU2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLnV0ZjgoKS5kYXRhKCkpOwogI2Vsc2UK
ICAgICBjb2RlUmVmID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkNTUyBTZWxlY3RvciBK
SVQiKSk7CkBAIC04NTgsMTQgKzg2Miw0OCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Y29tcHV0ZUJhY2t0CiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBTZWxlY3RvckNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlUHJvbG9ndWUoKQoreworI2lmIENQVShBUk02NCkKKyAgICBWZWN0b3I8SlND
OjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgMj4gcHJvbG9ndWVSZWdpc3RlcnM7CisgICAg
cHJvbG9ndWVSZWdpc3RlcnMuYXBwZW5kKEpTQzo6QVJNNjRSZWdpc3RlcnM6OmxyKTsKKyAgICBw
cm9sb2d1ZVJlZ2lzdGVycy5hcHBlbmQoSlNDOjpBUk02NFJlZ2lzdGVyczo6ZnApOworICAgIG1f
cHJvbG9ndWVTdGFja1JlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLnB1c2gocHJvbG9ndWVS
ZWdpc3RlcnMpOworICAgIHJldHVybiB0cnVlOworI2VsaWYgQ1BVKFg4Nl82NCkgJiYgQ1NTX1NF
TEVDVE9SX0pJVF9ERUJVR0dJTkcKKyAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCwgMT4gcHJvbG9ndWVSZWdpc3RlcjsKKyAgICBwcm9sb2d1ZVJlZ2lzdGVyLmFwcGVu
ZChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbV9wcm9sb2d1ZVN0YWNrUmVmZXJl
bmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChwcm9sb2d1ZVJlZ2lzdGVyKTsKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2lubGluZSB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFcGlsb2d1ZSgpCit7CisjaWYgQ1BVKEFS
TTY0KQorICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCAyPiBwcm9s
b2d1ZVJlZ2lzdGVyczsKKyAgICBwcm9sb2d1ZVJlZ2lzdGVycy5hcHBlbmQoSlNDOjpBUk02NFJl
Z2lzdGVyczo6bHIpOworICAgIHByb2xvZ3VlUmVnaXN0ZXJzLmFwcGVuZChKU0M6OkFSTTY0UmVn
aXN0ZXJzOjpmcCk7CisgICAgbV9zdGFja0FsbG9jYXRvci5wb3AobV9wcm9sb2d1ZVN0YWNrUmVm
ZXJlbmNlcywgcHJvbG9ndWVSZWdpc3RlcnMpOworI2VsaWYgQ1BVKFg4Nl82NCkgJiYgQ1NTX1NF
TEVDVE9SX0pJVF9ERUJVR0dJTkcKKyAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCwgMT4gcHJvbG9ndWVSZWdpc3RlcjsKKyAgICBwcm9sb2d1ZVJlZ2lzdGVyLmFwcGVu
ZChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgbV9zdGFja0FsbG9jYXRvci5wb3Ao
bV9wcm9sb2d1ZVN0YWNrUmVmZXJlbmNlcywgcHJvbG9ndWVSZWdpc3Rlcik7CisjZW5kaWYKK30K
KyAgICAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tl
cigpCiB7CisgICAgYm9vbCBuZWVkc0VwaWxvZ3VlID0gZ2VuZXJhdGVQcm9sb2d1ZSgpOworICAg
IAorICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2U+IGNhbGxlZVNhdmVk
UmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7CiAgICAgYm9vbCByZXNlcnZlZENhbGxlZVNhdmVkUmVn
aXN0ZXJzID0gZmFsc2U7CiAgICAgdW5zaWduZWQgYXZhaWxhYmxlUmVnaXN0ZXJDb3VudCA9IG1f
cmVnaXN0ZXJBbGxvY2F0b3IuYXZhaWxhYmxlUmVnaXN0ZXJDb3VudCgpOwogICAgIHVuc2lnbmVk
IG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcyA9IG1pbmltdW1SZWdpc3RlclJlcXVp
cmVtZW50cyhtX3NlbGVjdG9yRnJhZ21lbnRzKTsKICAgICBpZiAoYXZhaWxhYmxlUmVnaXN0ZXJD
b3VudCA8IG1pbmltdW1SZWdpc3RlckNvdW50Rm9yQXR0cmlidXRlcykgewogICAgICAgICByZXNl
cnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzID0gdHJ1ZTsKLSAgICAgICAgbV9yZWdpc3RlckFsbG9j
YXRvci5yZXNlcnZlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMobV9zdGFja0FsbG9jYXRvciwgbWluaW11
bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzIC0gYXZhaWxhYmxlUmVnaXN0ZXJDb3VudCk7Cisg
ICAgICAgIGNhbGxlZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2Nh
dG9yLnB1c2gobV9yZWdpc3RlckFsbG9jYXRvci5yZXNlcnZlQ2FsbGVlU2F2ZWRSZWdpc3RlcnMo
bWluaW11bVJlZ2lzdGVyQ291bnRGb3JBdHRyaWJ1dGVzIC0gYXZhaWxhYmxlUmVnaXN0ZXJDb3Vu
dCkpOwogICAgIH0KIAogICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVSZWdpc3Rlcihl
bGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKQEAgLTkwMyw3ICs5NDEsNyBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFs
bG9jYXRlUmVnaXN0ZXIoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAKICAgICBpZiAobV9mdW5j
dGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKLSAgICAg
ICAgaWYgKCFtX25lZWRzQWRqYWNlbnRCYWNrdHJhY2tpbmdTdGFydCAmJiAhcmVzZXJ2ZWRDYWxs
ZWVTYXZlZFJlZ2lzdGVycykgeworICAgICAgICBpZiAoIW1fbmVlZHNBZGphY2VudEJhY2t0cmFj
a2luZ1N0YXJ0ICYmICFyZXNlcnZlZENhbGxlZVNhdmVkUmVnaXN0ZXJzICYmICFuZWVkc0VwaWxv
Z3VlKSB7CiAgICAgICAgICAgICAvLyBTdWNjZXNzLgogICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmV0dXJuUmVnaXN0ZXIpOwogICAgICAg
ICAgICAgbV9hc3NlbWJsZXIucmV0KCk7CkBAIC05MjgsNyArOTY2LDEwIEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGUKIAogICAgICAgICAgICAgaWYgKG1fbmVlZHNB
ZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KQogICAgICAgICAgICAgICAgIG1fc3RhY2tBbGxvY2F0
b3IucG9wQW5kRGlzY2FyZFVwVG8obV9hZGphY2VudEJhY2t0cmFja2luZ1N0YXJ0KTsKLSAgICAg
ICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKG1f
c3RhY2tBbGxvY2F0b3IpOworICAgICAgICAgICAgaWYgKHJlc2VydmVkQ2FsbGVlU2F2ZWRSZWdp
c3RlcnMpCisgICAgICAgICAgICAgICAgbV9zdGFja0FsbG9jYXRvci5wb3AoY2FsbGVlU2F2ZWRS
ZWdpc3RlclN0YWNrUmVmZXJlbmNlcywgbV9yZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlQ2FsbGVl
U2F2ZWRSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBpZiAobmVlZHNFcGlsb2d1ZSkKKyAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUVwaWxvZ3VlKCk7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5y
ZXQoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC05NDYsNyArOTg3LDEwIEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGUKICAgICAgICAgfQogCiAgICAgICAg
IG1fc3RhY2tBbGxvY2F0b3IucG9wQW5kRGlzY2FyZFVwVG8obV9jaGVja2luZ0NvbnRleHRTdGFj
a1JlZmVyZW5jZSk7Ci0gICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZUNhbGxlZVNh
dmVkUmVnaXN0ZXJzKG1fc3RhY2tBbGxvY2F0b3IpOworICAgICAgICBpZiAocmVzZXJ2ZWRDYWxs
ZWVTYXZlZFJlZ2lzdGVycykKKyAgICAgICAgICAgIG1fc3RhY2tBbGxvY2F0b3IucG9wKGNhbGxl
ZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXMsIG1fcmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9y
ZUNhbGxlZVNhdmVkUmVnaXN0ZXJzKCkpOworICAgICAgICBpZiAobmVlZHNFcGlsb2d1ZSkKKyAg
ICAgICAgICAgIGdlbmVyYXRlRXBpbG9ndWUoKTsKICAgICAgICAgbV9hc3NlbWJsZXIucmV0KCk7
CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDE2OTEyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCwzMSArNjgsNzkgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wKTsKICAgICB9CiAKLSAgICAvLyBGSVhN
RTogQVJNNjQgbmVlZHMgYW4gQVBJIHRha2UgYSBsaXN0IG9mIHJlZ2lzdGVyIHRvIHB1c2ggYW5k
IHBvcCB0byB1c2Ugc3RycCBhbmQgbGRycCB3aGVuIHBvc3NpYmxlLgotICAgIFN0YWNrUmVmZXJl
bmNlIHB1c2goSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWdpc3RlcklEKQorICAg
IFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gcHVzaChjb25zdCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURzKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7CisgICAgICAgIHVuc2lnbmVkIHJlZ2lz
dGVyQ291bnQgPSByZWdpc3RlcklEcy5zaXplKCk7CisgICAgICAgIFZlY3RvcjxTdGFja1JlZmVy
ZW5jZT4gc3RhY2tSZWZlcmVuY2VzOworICAgICAgICBzdGFja1JlZmVyZW5jZXMucmVzZXJ2ZUNh
cGFjaXR5KHJlZ2lzdGVyQ291bnQpOwogI2lmIENQVShBUk02NCkKLSAgICAgICAgbV9hc3NlbWJs
ZXIubV9hc3NlbWJsZXIuc3RyPDY0PihyZWdpc3RlcklELCBKU0M6OkFSTTY0UmVnaXN0ZXJzOjpz
cCwgSlNDOjpQcmVJbmRleCgtMTYpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ2lzdGVyQ291bnQgLSAxOyBpICs9IDIpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnB1
c2hQYWlyKHJlZ2lzdGVySURzW2kgKyAxXSwgcmVnaXN0ZXJJRHNbaV0pOworICAgICAgICAgICAg
bV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAgICBzdGFja1Jl
ZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCAtIHN0YWNrVW5p
dEluQnl0ZXMgLyAyKSk7CisgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNr
UmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAgICAgICB9CisgICAgICAgIGlmIChyZWdp
c3RlckNvdW50ICUgMikgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIucHVzaFRvU2F2ZShyZWdp
c3RlcklEc1tyZWdpc3RlckNvdW50IC0gMV0pOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9w
ICs9IHN0YWNrVW5pdEluQnl0ZXM7CisgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5k
KFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAgICAgICB9CiAjZWxzZQotICAg
ICAgICBtX2Fzc2VtYmxlci5wdXNoKHJlZ2lzdGVySUQpOworICAgICAgICBmb3IgKGF1dG8gcmVn
aXN0ZXJJRCA6IHJlZ2lzdGVySURzKSB7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5wdXNoVG9T
YXZlKHJlZ2lzdGVySUQpOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wICs9IHN0YWNrVW5p
dEluQnl0ZXM7CisgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJl
bmNlKG1fb2Zmc2V0RnJvbVRvcCkpOworICAgICAgICB9CiAjZW5kaWYKKyAgICAgICAgcmV0dXJu
IHN0YWNrUmVmZXJlbmNlczsKKyAgICB9CisKKyAgICBTdGFja1JlZmVyZW5jZSBwdXNoKEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJRCkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX2hhc0Z1bmN0aW9uQ2FsbFBhZGRpbmcpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5wdXNoVG9TYXZlKHJlZ2lzdGVySUQpOwogICAgICAgICBtX29mZnNldEZyb21Ub3AgKz0g
c3RhY2tVbml0SW5CeXRlczsKICAgICAgICAgcmV0dXJuIFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0
RnJvbVRvcCk7CiAgICAgfQogCi0gICAgdm9pZCBwb3AoU3RhY2tSZWZlcmVuY2Ugc3RhY2tSZWZl
cmVuY2UsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcmVnaXN0ZXJJRCkKKyAgICB2
b2lkIHBvcChjb25zdCBWZWN0b3I8U3RhY2tSZWZlcmVuY2U+JiBzdGFja1JlZmVyZW5jZXMsIGNv
bnN0IFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPiYgcmVnaXN0ZXJJRHMp
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFja1JlZmVyZW5jZSA9PSBtX29mZnNl
dEZyb21Ub3ApOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9oYXNGdW5jdGlvbkNhbGxQYWRk
aW5nKTsKLSAgICAgICAgQVNTRVJUKG1fb2Zmc2V0RnJvbVRvcCA+IDApOwotICAgICAgICBtX29m
ZnNldEZyb21Ub3AgLT0gc3RhY2tVbml0SW5CeXRlczsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIHJlZ2lzdGVyQ291bnQgPSByZWdpc3RlcklEcy5zaXplKCk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHN0YWNrUmVmZXJlbmNlcy5zaXplKCkgPT0gcmVnaXN0ZXJDb3VudCk7CisgICAgICAg
IEFTU0VSVChtX29mZnNldEZyb21Ub3AgPj0gc3RhY2tVbml0SW5CeXRlcyAqIHJlZ2lzdGVyQ291
bnQpOwogI2lmIENQVShBUk02NCkKLSAgICAgICAgbV9hc3NlbWJsZXIubV9hc3NlbWJsZXIubGRy
PDY0PihyZWdpc3RlcklELCBKU0M6OkFSTTY0UmVnaXN0ZXJzOjpzcCwgSlNDOjpQb3N0SW5kZXgo
MTYpKTsKKyAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudE9kZCA9IHJlZ2lzdGVyQ291bnQg
JSAyOworICAgICAgICBpZiAocmVnaXN0ZXJDb3VudE9kZCkgeworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW3JlZ2lzdGVyQ291bnQgLSAxXSA9PSBtX29mZnNldEZy
b21Ub3ApOworICAgICAgICAgICAgbV9vZmZzZXRGcm9tVG9wIC09IHN0YWNrVW5pdEluQnl0ZXM7
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5wb3BUb1Jlc3RvcmUocmVnaXN0ZXJJRHNbcmVnaXN0
ZXJDb3VudCAtIDFdKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWdp
c3RlckNvdW50IC0gcmVnaXN0ZXJDb3VudE9kZDsgaSA+IDA7IGkgLT0gMikgeworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW2kgLSAxXSA9PSBtX29mZnNldEZyb21U
b3ApOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW2kgLSAyXSA9
PSBtX29mZnNldEZyb21Ub3AgLSBzdGFja1VuaXRJbkJ5dGVzIC8gMik7CisgICAgICAgICAgICBt
X29mZnNldEZyb21Ub3AgLT0gc3RhY2tVbml0SW5CeXRlczsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnBvcFBhaXIocmVnaXN0ZXJJRHNbaSAtIDFdLCByZWdpc3RlcklEc1tpIC0gMl0pOworICAg
ICAgICB9CiAjZWxzZQotICAgICAgICBtX2Fzc2VtYmxlci5wb3AocmVnaXN0ZXJJRCk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHJlZ2lzdGVyQ291bnQ7IGkgPiAwOyAtLWkpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YWNrUmVmZXJlbmNlc1tpIC0gMV0gPT0gbV9vZmZzZXRG
cm9tVG9wKTsKKyAgICAgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJbkJ5dGVz
OworICAgICAgICAgICAgbV9hc3NlbWJsZXIucG9wVG9SZXN0b3JlKHJlZ2lzdGVySURzW2kgLSAx
XSk7CisgICAgICAgIH0KICNlbmRpZgogICAgIH0KKyAgICAKKyAgICB2b2lkIHBvcChTdGFja1Jl
ZmVyZW5jZSBzdGFja1JlZmVyZW5jZSwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBy
ZWdpc3RlcklEKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2Ug
PT0gbV9vZmZzZXRGcm9tVG9wKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rp
b25DYWxsUGFkZGluZyk7CisgICAgICAgIEFTU0VSVChtX29mZnNldEZyb21Ub3AgPj0gc3RhY2tV
bml0SW5CeXRlcyk7CisgICAgICAgIG1fb2Zmc2V0RnJvbVRvcCAtPSBzdGFja1VuaXRJbkJ5dGVz
OworICAgICAgICBtX2Fzc2VtYmxlci5wb3BUb1Jlc3RvcmUocmVnaXN0ZXJJRCk7CisgICAgfQog
CiAgICAgdm9pZCBwb3BBbmREaXNjYXJkKFN0YWNrUmVmZXJlbmNlIHN0YWNrUmVmZXJlbmNlKQog
ICAgIHsK
</data>
<flag name="review"
          id="256461"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>