<?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>150336</bug_id>
          
          <creation_ts>2015-10-19 11:55:31 -0700</creation_ts>
          <short_desc>REGRESSION (r191175): OSR Exit from an inlined tail callee trashes callee save registers</short_desc>
          <delta_ts>2015-10-20 15:03:15 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1134646</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-19 11:55:31 -0700</bug_when>
    <thetext>This is the cause for the crash described in &lt;https://bugs.webkit.org/show_bug.cgi?id=150251&gt; that was temporarily resolved by turning off tail calls.

Here is the relevant part of the backtrace:
* thread #1: tid = 0xb381ca, 0x000000011687b4be, queue = &apos;com.apple.main-thread, stop reason = EXC_BAD_ACCESS (code=EXC_I386)
    frame #0: 0x000000011687b4be JavaScriptCore`JSC::JITCode::execute(this=&lt;unavailable&gt;, vm=0xffff000000000000, protoCallFrame=0x00007fff50a830b8) + 158 at JITCode.cpp:81
    frame #1: 0x0000000116857dcf JavaScriptCore`JSC::Interpreter::executeCall(this=&lt;unavailable&gt;, callFrame=0x00007fff50a83220, function=0x000000011d836d70, callType=&lt;unavailable&gt;, callData=0x00007fff50a83180, thisValue=JSValue @ 0x00007fff50a83098, args=&lt;unavailable&gt;) + 447 at Interpreter.cpp:1024
    frame #2: 0x00000001164f99ce JavaScriptCore`JSC::call(exec=&lt;unavailable&gt;, functionObject=&lt;unavailable&gt;, callType=&lt;unavailable&gt;, callData=&lt;unavailable&gt;, thisValue=&lt;unavailable&gt;, args=&lt;unavailable&gt;) + 62 at CallData.cpp:39
    frame #3: 0x00000001168c409a JavaScriptCore`JSC::boundFunctionCall(exec=0x00007fff50a83220) + 618 at JSBoundFunction.cpp:54
    frame #4: 0x00003cff43e01028 0x3cff43e5c5a6
    frame #5: 0x00003cff43e5c5a6 shouldComponentUpdate#CiYug9 [Baseline](Cell[Object ID: 19284]: 0x1351bf340, Cell[Object ID: 17094]: 0x11ecfa9e0, Cell[Object ID: 19279]: 0x125946080, Cell[Object ID: 9671]: 0x13bd3c140)
    frame #6: 0x00003cff446f7c67 performUpdateIfNecessary#ADcVpe [DFG](Cell[Object ID: 19284]: 0x1351bf340, Cell[Object ID: 15608]: 0x11e863370)
    frame #7: 0x00003cff44219470 receiveComponent#D0omON [DFG](Cell[Object ID: 19284]: 0x1351bf340, Cell[Object ID: 15394]: 0x12e9ce200, Cell[Object ID: 15608]: 0x11e863370)
    frame #8: 0x00003cff4428f565 _updateChildren#D8I5sZ [DFG](Cell[Object ID: 15798]: 0x11dcf7400, Cell[Array ID: 184]: 0x12285a320, Cell[Object ID: 15608]: 0x11e863370)
    frame #9: 0x00003cff44294caf updateChildren#AAAS3a [DFG](Cell[Object ID: 15798]: 0x11dcf7400, Cell[Array ID: 184]: 0x12285a320, Cell[Object ID: 15608]: 0x11e863370)
...

The damage actually occurs before we get here.  The problem is that vm has a totally bad value (0xffff000000000000).  This happens to be the tagTypeNumber constant used by JSVALUE64 builds.  The top 4 frames of the stack show that we are calling a bound function.  The called function and its callee are:
hasFalkorPropChanged#CPIwPX: function(e) {
    &quot;use strict&quot;;
    if (this.customModelChangeDetector)
        return this.customModelChangeDetector.didChange();
    var t = e.getBoundValue(),
        r = t.__generation,
        n = t.__key;
    return this.state.prevGeneration !== r || this.state.prevKey !== n
}

didChange#Agw6xZ: function() {
    &quot;use strict&quot;;
    var e = this.model.getValueSync(&quot;length&quot;);
    return e !== this.prevModelLength ? !0 : this.isTransientRow() &amp;&amp; this.generateUniqueKey() !== this.prevUniqueKey ? !0 : !1
}

generateUniqueKey#As9POD: function() {
    &quot;use strict&quot;;
    for (var e, t = this.model.getValueSync(&quot;length&quot;), n = &quot;&quot;, i = 0; t &gt; i; i++)
        e = this.model.getValueSync([i, &quot;summary&quot;]), e &amp;&amp; e.id &amp;&amp; (n += e.id.toString().substr(-4));
    return n
}

During DFG compilation, didChange() and generateUniqueKey() get inlined into hasFalkorPropChanged(), with didChange() in tail position and therefore made a tail call.  We OSR exit from generateUniqueKey() due to a structure change.  It appears that the OSR exit handler does not properly restore the callee saves registers for didChange(), which should be the callee saves for hasFalkorPropChanged().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134648</commentid>
    <comment_count>1</comment_count>
      <attachid>263499</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-19 11:57:49 -0700</bug_when>
    <thetext>Created attachment 263499
Reduced test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134760</commentid>
    <comment_count>2</comment_count>
      <attachid>263533</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-19 17:13:35 -0700</bug_when>
    <thetext>Created attachment 263533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134774</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-19 18:19:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/22951399&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134929</commentid>
    <comment_count>4</comment_count>
      <attachid>263533</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-10-20 10:56:20 -0700</bug_when>
    <thetext>Comment on attachment 263533
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134943</commentid>
    <comment_count>5</comment_count>
      <attachid>263533</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-20 11:24:35 -0700</bug_when>
    <thetext>Comment on attachment 263533
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:218
&gt; +        // Restore the inline call frame&apos;s callee saves registers

callee save registers

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:229
&gt; +        for (unsigned i = 0; i &lt; registerCount; i++) {
&gt; +            RegisterAtOffset entry = calleeSaves-&gt;at(i);
&gt; +            if (dontSaveRegisters.get(entry.reg()))
&gt; +                continue;
&gt; +
&gt; +            GPRReg registerToWrite;

This function is very similar to emitSaveCalleeSavesFor, with the only difference being the inline offset adjustment and the !trueCaller special case.

You should either factor this into a helper function that lives next to emitSaveCalleeSavesFor or parameterize emitSaveCalleeSavesFor to handle both cases.

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:234
&gt; +            // If we need to restore a &quot;tag&quot; register for a tail callee that will be the top frame,
&gt; +            // get the value saved for the outermost frame instead of the actual register which
&gt; +            // has a tag constant.

This comment says what you did but not why. Why did you do this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134962</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-20 12:33:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 263533 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263533&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:218
&gt; &gt; +        // Restore the inline call frame&apos;s callee saves registers
&gt; 
&gt; callee save registers

Fixed.

&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:229
&gt; &gt; +        for (unsigned i = 0; i &lt; registerCount; i++) {
&gt; &gt; +            RegisterAtOffset entry = calleeSaves-&gt;at(i);
&gt; &gt; +            if (dontSaveRegisters.get(entry.reg()))
&gt; &gt; +                continue;
&gt; &gt; +
&gt; &gt; +            GPRReg registerToWrite;
&gt; 
&gt; This function is very similar to emitSaveCalleeSavesFor, with the only
&gt; difference being the inline offset adjustment and the !trueCaller special
&gt; case.
&gt; 
&gt; You should either factor this into a helper function that lives next to
&gt; emitSaveCalleeSavesFor or parameterize emitSaveCalleeSavesFor to handle both
&gt; cases.

I refactored and moved it to be next to emitSaveCalleeSavesFor().

&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:234
&gt; &gt; +            // If we need to restore a &quot;tag&quot; register for a tail callee that will be the top frame,
&gt; &gt; +            // get the value saved for the outermost frame instead of the actual register which
&gt; &gt; +            // has a tag constant.
&gt; 
&gt; This comment says what you did but not why. Why did you do this?
Changed the comment to:
    // If this inlined frame is a tail call that will return back to the original caller, we need to
    // copy the prior contents of the tag registers already saved for the outer frame to this frame.

With the refactoring, I now have in AssemblyHelpers.h:

enum RestoreTagRegisterMode { UseExistingTagRegisterContents, CopySavedTagRegistersFromBaseFrame };

void emitSaveOrCopyCalleeSavesFor(CodeBlock* codeBlock, VirtualRegister offsetVirtualRegister, RestoreTagRegisterMode tagRegisterMode, GPRReg temp)
{   
    ASSERT(codeBlock);
        
    RegisterAtOffsetList* calleeSaves = codeBlock-&gt;calleeSaveRegisters();
    RegisterSet dontSaveRegisters = RegisterSet(RegisterSet::stackRegisters(), RegisterSet::allFPRs());
    unsigned registerCount = calleeSaves-&gt;size();
        
    for (unsigned i = 0; i &lt; registerCount; i++) {
        RegisterAtOffset entry = calleeSaves-&gt;at(i);
        if (dontSaveRegisters.get(entry.reg()))
            continue;
            
        GPRReg registerToWrite;
            
#if USE(JSVALUE32_64)
        UNUSED_PARAM(tagRegisterMode);
        UNUSED_PARAM(temp);
#else
        if (tagRegisterMode == CopySavedTagRegistersFromBaseFrame
            &amp;&amp; (entry.reg() == GPRInfo::tagTypeNumberRegister || entry.reg() == GPRInfo::tagMaskRegister)) {
            registerToWrite = temp;
            loadPtr(AssemblyHelpers::Address(GPRInfo::callFrameRegister, entry.offset()), registerToWrite);
        } else
#endif
            registerToWrite = entry.reg().gpr();

        storePtr(registerToWrite, Address(framePointerRegister, offsetVirtualRegister.offsetInBytes() + entry.offset()));
    }   
}   

and a call site of:
        // Restore the inline call frame&apos;s callee save registers.
        // If this inlined frame is a tail call that will return back to the original caller, we need to
        // copy the prior contents of the tag registers already saved for the outer frame to this frame.
        jit.emitSaveOrCopyCalleeSavesFor(
            baselineCodeBlock,
            static_cast&lt;VirtualRegister&gt;(inlineCallFrame-&gt;stackOffset),
            trueCaller ? AssemblyHelpers::UseExistingTagRegisterContents : AssemblyHelpers::CopySavedTagRegistersFromBaseFrame,
            GPRInfo::regT2);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134966</commentid>
    <comment_count>7</comment_count>
      <attachid>263602</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-20 12:40:58 -0700</bug_when>
    <thetext>Created attachment 263602
Patch for Landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135015</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-20 15:03:15 -0700</bug_when>
    <thetext>Committed r191360: &lt;http://trac.webkit.org/changeset/191360&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>263499</attachid>
            <date>2015-10-19 11:57:49 -0700</date>
            <delta_ts>2015-10-19 11:57:49 -0700</delta_ts>
            <desc>Reduced test case</desc>
            <filename>regress-150336.js</filename>
            <type>application/x-javascript</type>
            <size>767</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">ZGVzY3JpcHRpb24oIlJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTUw
WFhYLiIpOwoKLy8gVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYW4gT1NSIGV4aXQgZnJvbSBhIGJv
dW5kIGZ1bmN0aW9uIHdpdGggYW4gaW5saW5lZCB0YWlsIGNhbGxlZQovLyBwcm9wZXJseSB0cmFu
c2l0aW9ucyB0byB0aGUgYmFzZWxpbmUgSklUIHdpdGhvdXQgY3Jhc2hpbmcuCgpteU9iaiA9IHsK
ICAgIHZhbDogMQp9CgpmdW5jdGlvbiBiYXIoYSwgaWR4KQp7CiAgICAidXNlIHN0cmljdCI7CiAg
ICBpZiAoaWR4ID09IDk5MDApCiAgICAgICAgbXlPYmoucyA9ICJUZXN0IjsKCiAgICByZXR1cm4g
bXlPYmoudmFsICsgYTsKfQoKZnVuY3Rpb24gZm9vKGEsIGlkeCkKewogICAgInVzZSBzdHJpY3Qi
OwogICAgcmV0dXJuIGJhcihhLCBpZHgpOwp9Cgpib3VuZEZvbyA9IGZvby5iaW5kKG51bGwsIDQx
KTsKCmZ1bmN0aW9uIHRlc3QoKQp7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKysp
IHsKICAgICAgICBnb3QgPSBib3VuZEZvbyhpKTsKICAgICAgICBpZiAoZ290ICE9IDQyKQogICAg
ICAgICAgICB0ZXN0RmFpbGVkKCJGdW5jdGlvbiByZXR1cm5lZCAiICsgZ290ICsgIiBidXQgZXhw
ZWN0ZWQgNDIhIik7CiAgICB9Cn0KCm5vSW5saW5lKHRlc3QpOwoKdGVzdCgpOwoKdGVzdFBhc3Nl
ZCgiUHJvcGVybHkgaGFuZGxlZCBPU1IgZXhpdCBmcm9tIGEgYm91bmQgZnVuY3Rpb24gd2l0aCBh
biBpbmxpbmVkIHRhaWwgY2FsbGVlLiIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263533</attachid>
            <date>2015-10-19 17:13:35 -0700</date>
            <delta_ts>2015-10-20 12:40:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>150336.patch</filename>
            <type>text/plain</type>
            <size>14101</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE1LTEwLTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFJFR1JFU1NJT04gKHIxOTExNzUpOiBPU1IgRXhpdCBmcm9tIGFuIGlubGluZWQgdGFpbCBj
YWxsZWUgdHJhc2hlcyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDMzNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgcmVpZnkgYW4gaW5saW5lZCBjYWxs
ZWUgYW5kIGl0IGlzIGEgdGFpbCBjYWxsZWUgd2hpY2ggd2Ugd2lsbCBiZSBjb250aW51aW5nIGZy
b20sCisgICAgICAgIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgY2FsbGVlIHNhdmUgcmVnaXN0ZXJz
IHVzZWQgZm9yIHRhZyBjb25zdGFudHMgd2l0aCB3aGF0IHdhcyBzYXZlZAorICAgICAgICBieSB0
aGUgaW5saW5pbmcgY2FsbGVyLgorCisgICAgICAgIFJlLWVuYWJsZWQgdGFpbCBjYWxscyBhbmQg
cmVzdG9yZWQgdGVzdHMgZm9yIHRhaWwgY2FsbHMuCisKKyAgICAgICAgKiBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxs
RnJhbWVzKTogU2VsZWN0IHdoZXRoZXIgb3Igbm90IHdlIHVzZSB0aGUgY2FsbGVlIHNhdmUgdGFn
IHJlZ2lzdGVyCisgICAgICAgIGNvbnRlbnRzIG9yIHdoYXQgd2FzIHNhdmVkIGJ5IHRoZSBpbmxp
bmluZyBjYWxsZXIgd2hlbiBwb3B1bGF0aW5nIGFuIGlubGluZWQgY2FsbGVlJ3MKKyAgICAgICAg
Y2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKTog
VGhpcyBmdW5jdGlvbiBubyBsb25nZXIgbmVlZHMgYSBzdGFjayBvZmZzZXQuCisgICAgICAgICog
cnVudGltZS9PcHRpb25zLmg6IFR1cm5lZCB0YWlsIGNhbGxzIGJhY2sgb24uCisgICAgICAgICog
dGVzdHMvZXM2LnlhbWw6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2RmZy10YWlsLWNhbGxzLmpz
OgorICAgICAgICAobm9uSW5saW5lZFRhaWxDYWxsLmNhbGxlZSk6CisgICAgICAgICogdGVzdHMv
c3RyZXNzL211dHVhbC10YWlsLWNhbGwtbm8tc3RhY2stb3ZlcmZsb3cuanM6CisgICAgICAgIChz
aG91bGRUaHJvdyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1pbi1pbmxpbmUt
Y2FjaGUuanM6CisgICAgICAgICh0YWlsKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdGFpbC1j
YWxsLW5vLXN0YWNrLW92ZXJmbG93LmpzOgorICAgICAgICAoc2hvdWxkVGhyb3cpOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpzOgorICAgICAgICAoY2FsbGVy
TXVzdEJlUnVuKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXZhcmFyZ3Mtbm8t
c3RhY2stb3ZlcmZsb3cuanM6CisgICAgICAgIChzaG91bGRUaHJvdyk6CisKIDIwMTUtMTAtMTkg
IFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIHNob3VsZCBn
ZW5lcmF0ZSBhIHVuaXF1ZSBPU1IgZXhpdCBmb3IgZWFjaCBkdXBsaWNhdGVkIE9TUiBleGl0IHN0
YWNrbWFwIGludHJpbnNpYy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE5MTIxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCwzNSBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHRydWVSZXR1cm5QQyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKS5vZmZzZXQoKSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7Ci0gICAgICAgIGppdC5lbWl0U2F2ZUNhbGxlZVNhdmVz
Rm9yKGJhc2VsaW5lQ29kZUJsb2NrLCBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpKTsKKworICAgICAgICAvLyBSZXN0b3JlIHRoZSBpbmxp
bmUgY2FsbCBmcmFtZSdzIGNhbGxlZSBzYXZlcyByZWdpc3RlcnMKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGlubGluZUZyYW1lT2Zmc2V0VmlydHVhbFJlZ2lzdGVyID0gc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKKyAgICAgICAgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVzID0gYmFzZWxpbmVDb2RlQmxvY2stPmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgZG9udFNhdmVSZWdpc3RlcnMg
PSBSZWdpc3RlclNldChSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSwgUmVnaXN0ZXJTZXQ6
OmFsbEZQUnMoKSk7CisgICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSBjYWxsZWVTYXZl
cy0+c2l6ZSgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNv
dW50OyBpKyspIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVT
YXZlcy0+YXQoaSk7CisgICAgICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5
LnJlZygpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgR1BSUmVn
IHJlZ2lzdGVyVG9Xcml0ZTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAvLyBJ
ZiB3ZSBuZWVkIHRvIHJlc3RvcmUgYSAidGFnIiByZWdpc3RlciBmb3IgYSB0YWlsIGNhbGxlZSB0
aGF0IHdpbGwgYmUgdGhlIHRvcCBmcmFtZSwKKyAgICAgICAgICAgIC8vIGdldCB0aGUgdmFsdWUg
c2F2ZWQgZm9yIHRoZSBvdXRlcm1vc3QgZnJhbWUgaW5zdGVhZCBvZiB0aGUgYWN0dWFsIHJlZ2lz
dGVyIHdoaWNoCisgICAgICAgICAgICAvLyBoYXMgYSB0YWcgY29uc3RhbnQuCisgICAgICAgICAg
ICBpZiAoIXRydWVDYWxsZXIKKyAgICAgICAgICAgICAgICAmJiAoZW50cnkucmVnKCkgPT0gR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyIHx8IGVudHJ5LnJlZygpID09IEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpIHsKKyAgICAgICAgICAgICAgICByZWdpc3RlclRvV3JpdGUgPSBHUFJJ
bmZvOjpyZWdUMjsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6
OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKSwgcmVn
aXN0ZXJUb1dyaXRlKTsKKyAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJUb1dyaXRlID0gZW50cnkucmVnKCkuZ3ByKCk7CisKKyAgICAgICAgICAgIGpp
dC5zdG9yZVB0cihyZWdpc3RlclRvV3JpdGUsIEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgaW5saW5lRnJhbWVPZmZzZXRWaXJ0dWFsUmVnaXN0ZXIu
b2Zmc2V0SW5CeXRlcygpICsgZW50cnkub2Zmc2V0KCkpKTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQogICAgICAgICAgICAg
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDE5MTIxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
OCw3ICsxNzgsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIGVtaXRTYXZl
Q2FsbGVlU2F2ZXNGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZz
ZXRWaXJ0dWFsUmVnaXN0ZXIgPSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KDApKQorICAg
IHZvaWQgZW1pdFNhdmVDYWxsZWVTYXZlc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7
CiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2spOwogCkBAIC0xOTAsNyArMTkwLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChp
KTsKICAgICAgICAgICAgIGlmIChkb250U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc3RvcmVQdHIoZW50cnkucmVn
KCkuZ3ByKCksIEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFZpcnR1YWxSZWdp
c3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgc3Rv
cmVQdHIoZW50cnkucmVnKCkuZ3ByKCksIEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGVu
dHJ5Lm9mZnNldCgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE5MTIxMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEz
MSw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZm9y
Y2VQcm9maWxlckJ5dGVjb2RlR2VuZXJhdGlvbiwgZmFsc2UsIG51bGxwdHIpIFwKICAgICBcCiAg
ICAgdihib29sLCB1c2VGdW5jdGlvbkRvdEFyZ3VtZW50cywgdHJ1ZSwgbnVsbHB0cikgXAotICAg
IHYoYm9vbCwgdXNlVGFpbENhbGxzLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgdXNl
VGFpbENhbGxzLCB0cnVlLCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIGR1bXBEaXNhc3NlbWJs
eSBpbXBsaWVzIGR1bXBERkdEaXNhc3NlbWJseS4gKi8gXAogICAgIHYoYm9vbCwgZHVtcERpc2Fz
c2VtYmx5LCBmYWxzZSwgImR1bXBzIGRpc2Fzc2VtYmx5IG9mIGFsbCBKSVQgY29tcGlsZWQgY29k
ZSB1cG9uIGNvbXBpbGF0aW9uIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L2VzNi55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9lczYu
eWFtbAkocmV2aXNpb24gMTkxMjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2Vz
Ni55YW1sCSh3b3JraW5nIGNvcHkpCkBAIC04NzcsOSArODc3LDkgQEAKIC0gcGF0aDogZXM2L1By
b21pc2VfUHJvbWlzZVtTeW1ib2wuc3BlY2llc10uanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0g
cGF0aDogZXM2L3Byb3Blcl90YWlsX2NhbGxzX3RhaWxfY2FsbF9vcHRpbWlzYXRpb25fZGlyZWN0
X3JlY3Vyc2lvbi5qcwotICBjbWQ6IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFs
CiAtIHBhdGg6IGVzNi9wcm9wZXJfdGFpbF9jYWxsc190YWlsX2NhbGxfb3B0aW1pc2F0aW9uX211
dHVhbF9yZWN1cnNpb24uanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAgY21kOiBydW5FUzYgOm5v
cm1hbAogLSBwYXRoOiBlczYvcHJvdG90eXBlX29mX2JvdW5kX2Z1bmN0aW9uc19hcnJvd19mdW5j
dGlvbnMuanMKICAgY21kOiBydW5FUzYgOmZhaWwKIC0gcGF0aDogZXM2L3Byb3RvdHlwZV9vZl9i
b3VuZF9mdW5jdGlvbnNfYmFzaWNfZnVuY3Rpb25zLmpzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2RmZy10YWlsLWNhbGxzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGZnLXRhaWwtY2FsbHMuanMJKHJldmlzaW9u
IDE5MTIxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGZnLXRhaWwt
Y2FsbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSwzIEBACi0vL0Agc2tpcAogKGZ1bmN0
aW9uIG5vbklubGluZWRUYWlsQ2FsbCgpIHsKICAgICBmdW5jdGlvbiBjYWxsZWUoKSB7IGlmIChj
YWxsZWUuY2FsbGVyICE9IG5vbklubGluZWRUYWlsQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCk7IH0K
ICAgICBub0lubGluZShjYWxsZWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9tdXR1YWwtdGFpbC1jYWxsLW5vLXN0YWNrLW92ZXJmbG93LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXV0dWFsLXRhaWwtY2FsbC1u
by1zdGFjay1vdmVyZmxvdy5qcwkocmV2aXNpb24gMTkxMjEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9tdXR1YWwtdGFpbC1jYWxsLW5vLXN0YWNrLW92ZXJmbG93Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotLy9AIHNraXAKIGZ1bmN0aW9uIHNob3Vs
ZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgewogICAgIHZhciBlcnJvclRocm93biA9IGZhbHNl
OwogICAgIHZhciBlcnJvciA9IG51bGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3RhaWwtY2FsbC1pbi1pbmxpbmUtY2FjaGUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtaW4taW5saW5lLWNhY2hl
LmpzCShyZXZpc2lvbiAxOTEyMTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3RhaWwtY2FsbC1pbi1pbmxpbmUtY2FjaGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSwzIEBACi0vL0Agc2tpcAogInVzZSBzdHJpY3QiOwogCiBmdW5jdGlvbiB0YWlsKCkgeyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1uby1zdGFj
ay1vdmVyZmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3RhaWwtY2FsbC1uby1zdGFjay1vdmVyZmxvdy5qcwkocmV2aXNpb24gMTkxMjEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtbm8tc3RhY2st
b3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSwzIEBACi0vL0Agc2tpcAogZnVu
Y3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CiAgICAgdmFyIGVycm9yVGhy
b3duID0gZmFsc2U7CiAgICAgdmFyIGVycm9yID0gbnVsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUu
anMJKHJldmlzaW9uIDE5MTIxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMgQEAK
LS8vQCBza2lwCiBmdW5jdGlvbiBjYWxsZXJNdXN0QmVSdW4oKSB7CiAgICAgaWYgKCFPYmplY3Qu
aXMoY2FsbGVyTXVzdEJlUnVuLmNhbGxlciwgcnVuVGVzdHMpKQogICAgICAgICB0aHJvdyBFcnJv
cigiV3JvbmcgY2FsbGVyLCBleHBlY3RlZCBydW4gYnV0IGdvdCAiLCBjYWxsZXJNdXN0QmVSdW4u
Y2FsbGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1j
YWxsLXZhcmFyZ3Mtbm8tc3RhY2stb3ZlcmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtdmFyYXJncy1uby1zdGFjay1vdmVy
Zmxvdy5qcwkocmV2aXNpb24gMTkxMjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy90YWlsLWNhbGwtdmFyYXJncy1uby1zdGFjay1vdmVyZmxvdy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDMgQEAKLS8vQCBza2lwCiBmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5j
LCBlcnJvck1lc3NhZ2UpIHsKICAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKICAgICB2YXIg
ZXJyb3IgPSBudWxsOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMjEwKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUtMTAtMTkgIE1p
Y2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTiAo
cjE5MTE3NSk6IE9TUiBFeGl0IGZyb20gYW4gaW5saW5lZCB0YWlsIGNhbGxlZSB0cmFzaGVzIGNh
bGxlZSBzYXZlIHJlZ2lzdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwMzM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgYSBuZXcgcmVncmVzc2lvbiB0ZXN0IGFuZCByZXN0b3JlZCB0YWls
IGNhbGwgdGVzdCByZXN1bHRzIGZvciBqcy9jYWxsZXItcHJvcGVydHkuCisKKyAgICAgICAgKiBq
cy9jYWxsZXItcHJvcGVydHktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpzL3JlZ3Jlc3MtMTUw
MzM2LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy0xNTAzMzYuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTUwMzM2LmpzOiBB
ZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisK
IDIwMTUtMTAtMTYgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUkVHUkVTU0lPTiAocjE5MTE3NSk6IFN0aWxsIGNyYXNoaW5nIHdoZW4gY2xpY2tpbmcgYmFj
ayBidXR0b24gb24gbmV0ZmxpeC5jb20KSW5kZXg6IExheW91dFRlc3RzL2pzL2NhbGxlci1wcm9w
ZXJ0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvY2FsbGVyLXBy
b3BlcnR5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTkxMjEwKQorKysgTGF5b3V0VGVzdHMvanMv
Y2FsbGVyLXByb3BlcnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTMgKzEw
LDEzIEBAIFBBU1Mgbm9uU3RyaWN0Q2FsbGVyKG5vblN0cmljdENhbGxlZSkgaXMKIFBBU1Mgbm9u
U3RyaWN0Q2FsbGVyKHN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlw
ZSBlcnJvci4KIFBBU1Mgc3RyaWN0Q2FsbGVyKG5vblN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNh
bGxlci4KIFBBU1Mgc3RyaWN0Q2FsbGVyKHN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogVHlwZSBlcnJvci4KLUZBSUwgc3RyaWN0VGFpbENhbGxlcihub25TdHJpY3RDYWxs
ZWUpIHNob3VsZCBiZSBudWxsLiBUaHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBGdW5jdGlvbi5j
YWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVyCitQQVNTIHN0cmljdFRhaWxDYWxs
ZXIobm9uU3RyaWN0Q2FsbGVlKSBpcyBudWxsCiBQQVNTIHN0cmljdFRhaWxDYWxsZXIoc3RyaWN0
Q2FsbGVlKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyBub25T
dHJpY3RDYWxsZXIoYm91bmROb25TdHJpY3RDYWxsZWUpIGlzIG5vblN0cmljdENhbGxlcgogUEFT
UyBub25TdHJpY3RDYWxsZXIoYm91bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIHN0cmljdENhbGxlcihib3VuZE5vblN0cmljdENhbGxl
ZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0
cmlldmUgc3RyaWN0IGNhbGxlci4KIFBBU1Mgc3RyaWN0Q2FsbGVyKGJvdW5kU3RyaWN0Q2FsbGVl
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgotRkFJTCBzdHJpY3RUYWls
Q2FsbGVyKGJvdW5kTm9uU3RyaWN0Q2FsbGVlKSBzaG91bGQgYmUgbnVsbC4gVGhyZXcgZXhjZXB0
aW9uIFR5cGVFcnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNh
bGxlcgorUEFTUyBzdHJpY3RUYWlsQ2FsbGVyKGJvdW5kTm9uU3RyaWN0Q2FsbGVlKSBpcyBudWxs
CiBQQVNTIHN0cmljdFRhaWxDYWxsZXIoYm91bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIG5vblN0cmljdEdldHRlcihub25TdHJpY3RB
Y2Nlc3NvcikgaXMgbm9uU3RyaWN0R2V0dGVyCiBQQVNTIG5vblN0cmljdFNldHRlcihub25TdHJp
Y3RBY2Nlc3NvcikgaXMgdHJ1ZQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy0xNTAzMzYt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUwMzM2
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUw
MzM2LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitSZWdyZXNz
aW9uIHRlc3QgZm9yIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MDMzNi4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgUHJvcGVybHkgaGFuZGxlZCBPU1IgZXhpdCBmcm9tIGEg
Ym91bmQgZnVuY3Rpb24gd2l0aCBhbiBpbmxpbmVkIHRhaWwgY2FsbGVlLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MtMTUwMzM2Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy0xNTAzMzYuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mt
MTUwMzM2Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTUwMzM2LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9y
ZWdyZXNzLTE1MDMzNi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvcmVncmVzcy0xNTAzMzYuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9zY3Jp
cHQtdGVzdHMvcmVncmVzcy0xNTAzMzYuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBA
QAorZGVzY3JpcHRpb24oIlJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly93ZWJraXQub3JnL2Iv
MTUwMzM2LiIpOworCisvLyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBhbiBPU1IgZXhpdCBmcm9t
IGEgYm91bmQgZnVuY3Rpb24gd2l0aCBhbiBpbmxpbmVkIHRhaWwgY2FsbGVlCisvLyBwcm9wZXJs
eSB0cmFuc2l0aW9ucyB0byB0aGUgYmFzZWxpbmUgSklUIHdpdGhvdXQgY3Jhc2hpbmcuCisKK215
T2JqID0geworICAgIHZhbDogMQorfQorCitmdW5jdGlvbiBiYXIoYSwgaWR4KQoreworICAgICJ1
c2Ugc3RyaWN0IjsKKworICAgIGlmIChpZHggPT0gOTkwMCkKKyAgICAgICAgbXlPYmouZGZnT1NS
ID0gIlRlc3QiOworCisgICAgaWYgKGlkeCA9PSAxOTk5MDApCisgICAgICAgIG15T2JqLmZ0bE9T
UiA9ICJUZXN0IjsKKworICAgIHJldHVybiBteU9iai52YWwgKyBhOworfQorCitmdW5jdGlvbiBm
b28oYSwgaWR4KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIHJldHVybiBiYXIoYSwgaWR4
KTsKK30KKworYm91bmRGb28gPSBmb28uYmluZChudWxsLCA0MSk7CisKK2Z1bmN0aW9uIHRlc3Qo
KQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDAwOyBpKyspIHsKKyAgICAgICAgZ290
ID0gYm91bmRGb28oaSk7CisgICAgICAgIGlmIChnb3QgIT0gNDIpCisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJGdW5jdGlvbiByZXR1cm5lZCAiICsgZ290ICsgIiBidXQgZXhwZWN0ZWQgNDIhIik7
CisgICAgfQorfQorCitub0lubGluZSh0ZXN0KTsKKwordGVzdCgpOworCit0ZXN0UGFzc2VkKCJQ
cm9wZXJseSBoYW5kbGVkIE9TUiBleGl0IGZyb20gYSBib3VuZCBmdW5jdGlvbiB3aXRoIGFuIGlu
bGluZWQgdGFpbCBjYWxsZWUuIik7Cg==
</data>
<flag name="review"
          id="288672"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263602</attachid>
            <date>2015-10-20 12:40:58 -0700</date>
            <delta_ts>2015-10-20 12:40:58 -0700</delta_ts>
            <desc>Patch for Landing</desc>
            <filename>150336-2.patch</filename>
            <type>text/plain</type>
            <size>15329</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMzUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE1LTEwLTIwICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIFJFR1JFU1NJT04gKHIxOTExNzUpOiBPU1IgRXhpdCBmcm9tIGFuIGlubGluZWQgdGFpbCBj
YWxsZWUgdHJhc2hlcyBjYWxsZWUgc2F2ZSByZWdpc3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDMzNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1cmluZyBPU1IgZXhpdCwgd2UgbmVlZCB0byBy
ZXN0b3JlIGFuZCB0cmFuc2Zvcm0gdGhlIGFjdGl2ZSBzdGFjayBpbnRvIHdoYXQgdGhlIGJhc2Vs
aW5lCisgICAgICAgIEpJVCBleHBlY3RzLiAgSW5saW5lZCBjYWxsIGZyYW1lcyBiZWNvbWUgdHJ1
ZSBjYWxsIGZyYW1lcy4gIFdoZW4gd2UgcmVpZnkgYW4gaW5saW5lZCBjYWxsCisgICAgICAgIGZy
YW1lIGFuZCBpdCBpcyBhIHRhaWwgY2FsbCB3aGljaCB3ZSB3aWxsIGJlIGNvbnRpbnVpbmcgZnJv
bSwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSB0YWcKKyAgICAgICAgY29uc3RhbnQgY2FsbGVlIHNh
dmUgcmVnaXN0ZXJzIHdpdGggd2hhdCB3YXMgc2F2ZWQgYnkgdGhlIG91dGVybW9zdCBjYWxsZXIu
CisKKyAgICAgICAgUmUtZW5hYmxlZCB0YWlsIGNhbGxzIGFuZCByZXN0b3JlZCB0ZXN0cyBmb3Ig
dGFpbCBjYWxscy4KKworICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOiBTZWxlY3Qgd2hl
dGhlciBvciBub3Qgd2UgdXNlIHRoZSBjYWxsZWUgc2F2ZSB0YWcgcmVnaXN0ZXIKKyAgICAgICAg
Y29udGVudHMgb3Igd2hhdCB3YXMgc2F2ZWQgYnkgdGhlIGlubGluaW5nIGNhbGxlciB3aGVuIHBv
cHVsYXRpbmcgYW4gaW5saW5lZCBjYWxsZWUncworICAgICAgICBjYWxsZWUgc2F2ZSByZWdpc3Rl
cnMuCisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3Nl
bWJseUhlbHBlcnM6OmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IpOiBUaGlzIGZ1bmN0aW9uIG5vIGxv
bmdlciBuZWVkcyBhIHN0YWNrIG9mZnNldC4KKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJz
OjplbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKTogTmV3IGhlbHBlci4KKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDogVHVybmVkIHRhaWwgY2FsbHMgYmFjayBvbi4KKyAgICAgICAgKiB0
ZXN0cy9lczYueWFtbDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZGZnLXRhaWwtY2FsbHMuanM6
CisgICAgICAgIChub25JbmxpbmVkVGFpbENhbGwuY2FsbGVlKToKKyAgICAgICAgKiB0ZXN0cy9z
dHJlc3MvbXV0dWFsLXRhaWwtY2FsbC1uby1zdGFjay1vdmVyZmxvdy5qczoKKyAgICAgICAgKHNo
b3VsZFRocm93KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLWluLWlubGluZS1j
YWNoZS5qczoKKyAgICAgICAgKHRhaWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy90YWlsLWNh
bGwtbm8tc3RhY2stb3ZlcmZsb3cuanM6CisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAg
ICogdGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanM6CisgICAgICAgIChjYWxsZXJN
dXN0QmVSdW4pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy90YWlsLWNhbGwtdmFyYXJncy1uby1z
dGFjay1vdmVyZmxvdy5qczoKKyAgICAgICAgKHNob3VsZFRocm93KToKKwogMjAxNS0xMC0yMCAg
U2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBHQ0F3YXJlSklUU3R1
YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlciBoYXMgYSBzdGFsZSBDb2RlQmxvY2sgcG9pbnRl
ciBpbiBpdHMgZGVzdHJ1Y3RvcgpAQCAtMTksNiArNTUsNyBAQAogICAgICAgICAoSlNDOjpHQ0F3
YXJlSklUU3R1YlJvdXRpbmVXaXRoRXhjZXB0aW9uSGFuZGxlcjo6fkdDQXdhcmVKSVRTdHViUm91
dGluZVdpdGhFeGNlcHRpb25IYW5kbGVyKTogRGVsZXRlZC4KICAgICAgICAgKiBqaXQvR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmg6CiAKKz4+Pj4+Pj4gLnIxOTEzNTEKIDIwMTUtMTAtMjAgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZpeCB0
aGUgYnVpbGQgYnkgZGlzYWJsaW5nIE1BQ19HRVNUVVJFX0VWRU5UUyBvbiAxMC45IGFuZCAxMC4x
MApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTkxMzUxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTQsNyArMjE0LDE2IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBl
cnMKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodHJ1ZVJldHVyblBDKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYmFzZWxpbmVDb2RlQmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVC
bG9jaykpKTsKLSAgICAgICAgaml0LmVtaXRTYXZlQ2FsbGVlU2F2ZXNGb3IoYmFzZWxpbmVDb2Rl
QmxvY2ssIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCkpOworCisgICAgICAgIC8vIFJlc3RvcmUgdGhlIGlubGluZSBjYWxsIGZyYW1lJ3Mg
Y2FsbGVlIHNhdmUgcmVnaXN0ZXJzLgorICAgICAgICAvLyBJZiB0aGlzIGlubGluZWQgZnJhbWUg
aXMgYSB0YWlsIGNhbGwgdGhhdCB3aWxsIHJldHVybiBiYWNrIHRvIHRoZSBvcmlnaW5hbCBjYWxs
ZXIsIHdlIG5lZWQgdG8KKyAgICAgICAgLy8gY29weSB0aGUgcHJpb3IgY29udGVudHMgb2YgdGhl
IHRhZyByZWdpc3RlcnMgYWxyZWFkeSBzYXZlZCBmb3IgdGhlIG91dGVyIGZyYW1lIHRvIHRoaXMg
ZnJhbWUuCisgICAgICAgIGppdC5lbWl0U2F2ZU9yQ29weUNhbGxlZVNhdmVzRm9yKAorICAgICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2ssCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQpLAorICAgICAgICAgICAgdHJ1
ZUNhbGxlciA/IEFzc2VtYmx5SGVscGVyczo6VXNlRXhpc3RpbmdUYWdSZWdpc3RlckNvbnRlbnRz
IDogQXNzZW1ibHlIZWxwZXJzOjpDb3B5U2F2ZWRUYWdSZWdpc3RlcnNGcm9tQmFzZUZyYW1lLAor
ICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDIpOworCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZy
YW1lLT5pc1ZhcmFyZ3MoKSkKICAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSksIEFzc2Vt
Ymx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICNpZiBVU0UoSlNWQUxV
RTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAxOTEzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgfQogCi0gICAgdm9pZCBlbWl0U2F2ZUNhbGxlZVNhdmVzRm9yKENvZGVCbG9jayog
Y29kZUJsb2NrLCBWaXJ0dWFsUmVnaXN0ZXIgb2Zmc2V0VmlydHVhbFJlZ2lzdGVyID0gc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPigwKSkKKyAgICB2b2lkIGVtaXRTYXZlQ2FsbGVlU2F2ZXNG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewogICAgICAgICBBU1NFUlQoY29kZUJsb2Nr
KTsKIApAQCAtMTkwLDEwICsxOTAsNDMgQEAgcHVibGljOgogICAgICAgICAgICAgUmVnaXN0ZXJB
dE9mZnNldCBlbnRyeSA9IGNhbGxlZVNhdmVzLT5hdChpKTsKICAgICAgICAgICAgIGlmIChkb250
U2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgc3RvcmVQdHIoZW50cnkucmVnKCkuZ3ByKCksIEFkZHJlc3MoZnJhbWVQ
b2ludGVyUmVnaXN0ZXIsIG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBl
bnRyeS5vZmZzZXQoKSkpOworICAgICAgICAgICAgc3RvcmVQdHIoZW50cnkucmVnKCkuZ3ByKCks
IEFkZHJlc3MoZnJhbWVQb2ludGVyUmVnaXN0ZXIsIGVudHJ5Lm9mZnNldCgpKSk7CiAgICAgICAg
IH0KICAgICB9CisgICAgCisgICAgZW51bSBSZXN0b3JlVGFnUmVnaXN0ZXJNb2RlIHsgVXNlRXhp
c3RpbmdUYWdSZWdpc3RlckNvbnRlbnRzLCBDb3B5U2F2ZWRUYWdSZWdpc3RlcnNGcm9tQmFzZUZy
YW1lIH07CiAKKyAgICB2b2lkIGVtaXRTYXZlT3JDb3B5Q2FsbGVlU2F2ZXNGb3IoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFZpcnR1YWxSZWdpc3RlciBvZmZzZXRWaXJ0dWFsUmVnaXN0ZXIsIFJlc3Rv
cmVUYWdSZWdpc3Rlck1vZGUgdGFnUmVnaXN0ZXJNb2RlLCBHUFJSZWcgdGVtcCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QqIGNhbGxlZVNhdmVzID0gY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgICAgIFJlZ2lzdGVyU2V0IGRvbnRTYXZlUmVnaXN0ZXJzID0gUmVnaXN0ZXJTZXQoUmVn
aXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCksIFJlZ2lzdGVyU2V0OjphbGxGUFJzKCkpOworICAg
ICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50ID0gY2FsbGVlU2F2ZXMtPnNpemUoKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50OyBpKysp
IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyQXRPZmZzZXQgZW50cnkgPSBjYWxsZWVTYXZlcy0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoZG9udFNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BS
UmVnIHJlZ2lzdGVyVG9Xcml0ZTsKKyAgICAgICAgICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgICAgICBVTlVTRURfUEFSQU0odGFnUmVnaXN0ZXJNb2RlKTsKKyAgICAgICAgICAg
IFVOVVNFRF9QQVJBTSh0ZW1wKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAodGFnUmVnaXN0ZXJN
b2RlID09IENvcHlTYXZlZFRhZ1JlZ2lzdGVyc0Zyb21CYXNlRnJhbWUKKyAgICAgICAgICAgICAg
ICAmJiAoZW50cnkucmVnKCkgPT0gR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyIHx8IGVu
dHJ5LnJlZygpID09IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpIHsKKyAgICAgICAgICAgICAg
ICByZWdpc3RlclRvV3JpdGUgPSB0ZW1wOworICAgICAgICAgICAgICAgIGxvYWRQdHIoQXNzZW1i
bHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBlbnRyeS5vZmZz
ZXQoKSksIHJlZ2lzdGVyVG9Xcml0ZSk7CisgICAgICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIHJlZ2lzdGVyVG9Xcml0ZSA9IGVudHJ5LnJlZygpLmdwcigpOworCisgICAg
ICAgICAgICBzdG9yZVB0cihyZWdpc3RlclRvV3JpdGUsIEFkZHJlc3MoZnJhbWVQb2ludGVyUmVn
aXN0ZXIsIG9mZnNldFZpcnR1YWxSZWdpc3Rlci5vZmZzZXRJbkJ5dGVzKCkgKyBlbnRyeS5vZmZz
ZXQoKSkpOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIHZvaWQgZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlc0ZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7CiAgICAgICAgIEFTU0VSVChj
b2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
cmV2aXNpb24gMTkxMzUxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgdHlwZWRlZiBjb25zdCBjaGFy
KiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBmb3JjZVByb2ZpbGVyQnl0ZWNvZGVHZW5lcmF0
aW9uLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIHVzZUZ1bmN0aW9uRG90
QXJndW1lbnRzLCB0cnVlLCBudWxscHRyKSBcCi0gICAgdihib29sLCB1c2VUYWlsQ2FsbHMsIGZh
bHNlLCBudWxscHRyKSBcCisgICAgdihib29sLCB1c2VUYWlsQ2FsbHMsIHRydWUsIG51bGxwdHIp
IFwKICAgICBcCiAgICAgLyogZHVtcERpc2Fzc2VtYmx5IGltcGxpZXMgZHVtcERGR0Rpc2Fzc2Vt
Ymx5LiAqLyBcCiAgICAgdihib29sLCBkdW1wRGlzYXNzZW1ibHksIGZhbHNlLCAiZHVtcHMgZGlz
YXNzZW1ibHkgb2YgYWxsIEpJVCBjb21waWxlZCBjb2RlIHVwb24gY29tcGlsYXRpb24iKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2VzNi55YW1sCShyZXZpc2lvbiAxOTEzNTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvZXM2LnlhbWwJKHdvcmtpbmcgY29weSkKQEAg
LTg3OSw5ICs4NzksOSBAQAogLSBwYXRoOiBlczYvUHJvbWlzZV9Qcm9taXNlW1N5bWJvbC5zcGVj
aWVzXS5qcwogICBjbWQ6IHJ1bkVTNiA6ZmFpbAogLSBwYXRoOiBlczYvcHJvcGVyX3RhaWxfY2Fs
bHNfdGFpbF9jYWxsX29wdGltaXNhdGlvbl9kaXJlY3RfcmVjdXJzaW9uLmpzCi0gIGNtZDogcnVu
RVM2IDpmYWlsCisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L3Byb3Blcl90YWls
X2NhbGxzX3RhaWxfY2FsbF9vcHRpbWlzYXRpb25fbXV0dWFsX3JlY3Vyc2lvbi5qcwotICBjbWQ6
IHJ1bkVTNiA6ZmFpbAorICBjbWQ6IHJ1bkVTNiA6bm9ybWFsCiAtIHBhdGg6IGVzNi9wcm90b3R5
cGVfb2ZfYm91bmRfZnVuY3Rpb25zX2Fycm93X2Z1bmN0aW9ucy5qcwogICBjbWQ6IHJ1bkVTNiA6
ZmFpbAogLSBwYXRoOiBlczYvcHJvdG90eXBlX29mX2JvdW5kX2Z1bmN0aW9uc19iYXNpY19mdW5j
dGlvbnMuanMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGZnLXRh
aWwtY2FsbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9kZmctdGFpbC1jYWxscy5qcwkocmV2aXNpb24gMTkxMzUxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZmctdGFpbC1jYWxscy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMSw0ICsxLDMgQEAKLS8vQCBza2lwCiAoZnVuY3Rpb24gbm9uSW5saW5lZFRhaWxDYWxsKCkg
ewogICAgIGZ1bmN0aW9uIGNhbGxlZSgpIHsgaWYgKGNhbGxlZS5jYWxsZXIgIT0gbm9uSW5saW5l
ZFRhaWxDYWxsKSB0aHJvdyBuZXcgRXJyb3IoKTsgfQogICAgIG5vSW5saW5lKGNhbGxlZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211dHVhbC10YWlsLWNhbGwt
bm8tc3RhY2stb3ZlcmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9tdXR1YWwtdGFpbC1jYWxsLW5vLXN0YWNrLW92ZXJmbG93LmpzCShyZXZp
c2lvbiAxOTEzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211dHVh
bC10YWlsLWNhbGwtbm8tc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSwzIEBACi0vL0Agc2tpcAogZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdl
KSB7CiAgICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7CiAgICAgdmFyIGVycm9yID0gbnVsbDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLWluLWlu
bGluZS1jYWNoZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3RhaWwtY2FsbC1pbi1pbmxpbmUtY2FjaGUuanMJKHJldmlzaW9uIDE5MTM1MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLWluLWlubGluZS1j
YWNoZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDMgQEAKLS8vQCBza2lwCiAidXNlIHN0
cmljdCI7CiAKIGZ1bmN0aW9uIHRhaWwoKSB7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLW5vLXN0YWNrLW92ZXJmbG93LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLW5vLXN0YWNr
LW92ZXJmbG93LmpzCShyZXZpc2lvbiAxOTEzNTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1uby1zdGFjay1vdmVyZmxvdy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMSw0ICsxLDMgQEAKLS8vQCBza2lwCiBmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBl
cnJvck1lc3NhZ2UpIHsKICAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKICAgICB2YXIgZXJy
b3IgPSBudWxsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWls
LWNhbGwtcmVjb2duaXplLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcwkocmV2aXNpb24gMTkxMzUxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtcmVjb2duaXplLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotLy9AIHNraXAKIGZ1bmN0aW9uIGNhbGxl
ck11c3RCZVJ1bigpIHsKICAgICBpZiAoIU9iamVjdC5pcyhjYWxsZXJNdXN0QmVSdW4uY2FsbGVy
LCBydW5UZXN0cykpCiAgICAgICAgIHRocm93IEVycm9yKCJXcm9uZyBjYWxsZXIsIGV4cGVjdGVk
IHJ1biBidXQgZ290ICIsIGNhbGxlck11c3RCZVJ1bi5jYWxsZXIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtdmFyYXJncy1uby1zdGFjay1vdmVy
Zmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3RhaWwtY2FsbC12YXJhcmdzLW5vLXN0YWNrLW92ZXJmbG93LmpzCShyZXZpc2lvbiAxOTEzNTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2FsbC12YXJhcmdz
LW5vLXN0YWNrLW92ZXJmbG93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsMyBAQAotLy9A
IHNraXAKIGZ1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgewogICAgIHZh
ciBlcnJvclRocm93biA9IGZhbHNlOwogICAgIHZhciBlcnJvciA9IG51bGw7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxOTEzNTEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMCBAQAorMjAxNS0xMC0yMCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFw
cGxlLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OIChyMTkxMTc1KTogT1NSIEV4aXQgZnJvbSBh
biBpbmxpbmVkIHRhaWwgY2FsbGVlIHRyYXNoZXMgY2FsbGVlIHNhdmUgcmVnaXN0ZXJzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAzMzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIG5ldyBy
ZWdyZXNzaW9uIHRlc3QgYW5kIHJlc3RvcmVkIHRhaWwgY2FsbCB0ZXN0IHJlc3VsdHMgZm9yIGpz
L2NhbGxlci1wcm9wZXJ0eS4KKworICAgICAgICAqIGpzL2NhbGxlci1wcm9wZXJ0eS1leHBlY3Rl
ZC50eHQ6CisgICAgICAgICoganMvcmVncmVzcy0xNTAzMzYtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzLTE1MDMzNi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9z
Y3JpcHQtdGVzdHMvcmVncmVzcy0xNTAzMzYuanM6IEFkZGVkLgorICAgICAgICAoYmFyKToKKyAg
ICAgICAgKGZvbyk6CisgICAgICAgICh0ZXN0KToKKwogMjAxNS0xMC0yMCAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE9ubHkgSFRNTCBzcGFjZXMgc2hvdWxkIGJl
IHN0cmlwcGVkIGZyb20gYSA8c2NyaXB0PidzICdmb3InIC8gJ2V2ZW50JyBhdHRyaWJ1dGVzCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9jYWxsZXItcHJvcGVydHktZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL2NhbGxlci1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDE5MTM1MSkKKysrIExheW91dFRlc3RzL2pzL2NhbGxlci1wcm9wZXJ0eS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDEzICsxMCwxMyBAQCBQQVNTIG5vblN0cmljdENhbGxl
cihub25TdHJpY3RDYWxsZWUpIGlzCiBQQVNTIG5vblN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIHN0cmljdENhbGxl
cihub25TdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZ1bmN0aW9uLmNh
bGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIuCiBQQVNTIHN0cmljdENhbGxlcihz
dHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCi1GQUlM
IHN0cmljdFRhaWxDYWxsZXIobm9uU3RyaWN0Q2FsbGVlKSBzaG91bGQgYmUgbnVsbC4gVGhyZXcg
ZXhjZXB0aW9uIFR5cGVFcnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3Ry
aWN0IGNhbGxlcgorUEFTUyBzdHJpY3RUYWlsQ2FsbGVyKG5vblN0cmljdENhbGxlZSkgaXMgbnVs
bAogUEFTUyBzdHJpY3RUYWlsQ2FsbGVyKHN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5
cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1Mgbm9uU3RyaWN0Q2FsbGVyKGJvdW5kTm9uU3RyaWN0
Q2FsbGVlKSBpcyBub25TdHJpY3RDYWxsZXIKIFBBU1Mgbm9uU3RyaWN0Q2FsbGVyKGJvdW5kU3Ry
aWN0Q2FsbGVlKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyBz
dHJpY3RDYWxsZXIoYm91bmROb25TdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IEZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIuCiBQQVNT
IHN0cmljdENhbGxlcihib3VuZFN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJv
cjogVHlwZSBlcnJvci4KLUZBSUwgc3RyaWN0VGFpbENhbGxlcihib3VuZE5vblN0cmljdENhbGxl
ZSkgc2hvdWxkIGJlIG51bGwuIFRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZ1bmN0aW9uLmNh
bGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIKK1BBU1Mgc3RyaWN0VGFpbENhbGxl
cihib3VuZE5vblN0cmljdENhbGxlZSkgaXMgbnVsbAogUEFTUyBzdHJpY3RUYWlsQ2FsbGVyKGJv
dW5kU3RyaWN0Q2FsbGVlKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgog
UEFTUyBub25TdHJpY3RHZXR0ZXIobm9uU3RyaWN0QWNjZXNzb3IpIGlzIG5vblN0cmljdEdldHRl
cgogUEFTUyBub25TdHJpY3RTZXR0ZXIobm9uU3RyaWN0QWNjZXNzb3IpIGlzIHRydWUKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUwMzM2LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTE1MDMzNi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTE1MDMzNi1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMCBAQAorUmVncmVzc2lvbiB0ZXN0IGZvciBodHRwczovL3dlYmtp
dC5vcmcvYi8xNTAzMzYuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFBy
b3Blcmx5IGhhbmRsZWQgT1NSIGV4aXQgZnJvbSBhIGJvdW5kIGZ1bmN0aW9uIHdpdGggYW4gaW5s
aW5lZCB0YWlsIGNhbGxlZS4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTE1MDMzNi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MtMTUwMzM2Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzLTE1MDMzNi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9yZWdyZXNzLTE1MDMzNi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvcmVncmVzcy0xNTAzMzYuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTUwMzM2LmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3JlZ3Jlc3MtMTUwMzM2Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKK2Rlc2NyaXB0aW9uKCJSZWdyZXNzaW9u
IHRlc3QgZm9yIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MDMzNi4iKTsKKworLy8gVGhpcyB0ZXN0
IHZlcmlmaWVzIHRoYXQgYW4gT1NSIGV4aXQgZnJvbSBhIGJvdW5kIGZ1bmN0aW9uIHdpdGggYW4g
aW5saW5lZCB0YWlsIGNhbGxlZQorLy8gcHJvcGVybHkgdHJhbnNpdGlvbnMgdG8gdGhlIGJhc2Vs
aW5lIEpJVCB3aXRob3V0IGNyYXNoaW5nLgorCitteU9iaiA9IHsKKyAgICB2YWw6IDEKK30KKwor
ZnVuY3Rpb24gYmFyKGEsIGlkeCkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoaWR4
ID09IDk5MDApCisgICAgICAgIG15T2JqLmRmZ09TUiA9ICJUZXN0IjsKKworICAgIGlmIChpZHgg
PT0gMTk5OTAwKQorICAgICAgICBteU9iai5mdGxPU1IgPSAiVGVzdCI7CisKKyAgICByZXR1cm4g
bXlPYmoudmFsICsgYTsKK30KKworZnVuY3Rpb24gZm9vKGEsIGlkeCkKK3sKKyAgICAidXNlIHN0
cmljdCI7CisKKyAgICByZXR1cm4gYmFyKGEsIGlkeCk7Cit9CisKK2JvdW5kRm9vID0gZm9vLmJp
bmQobnVsbCwgNDEpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDIwMDAwMDsgaSsrKSB7CisgICAgICAgIGdvdCA9IGJvdW5kRm9vKGkpOworICAgICAgICBp
ZiAoZ290ICE9IDQyKQorICAgICAgICAgICAgdGVzdEZhaWxlZCgiRnVuY3Rpb24gcmV0dXJuZWQg
IiArIGdvdCArICIgYnV0IGV4cGVjdGVkIDQyISIpOworICAgIH0KK30KKworbm9JbmxpbmUodGVz
dCk7CisKK3Rlc3QoKTsKKwordGVzdFBhc3NlZCgiUHJvcGVybHkgaGFuZGxlZCBPU1IgZXhpdCBm
cm9tIGEgYm91bmQgZnVuY3Rpb24gd2l0aCBhbiBpbmxpbmVkIHRhaWwgY2FsbGVlLiIpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>