<?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>46330</bug_id>
          
          <creation_ts>2010-09-22 18:28:08 -0700</creation_ts>
          <short_desc>Only copy captured variables into activation</short_desc>
          <delta_ts>2010-09-27 13:08:00 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>jennb</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>283436</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-22 18:28:08 -0700</bug_when>
    <thetext>Only copy captured variables into activation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283441</commentid>
    <comment_count>1</comment_count>
      <attachid>68489</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-22 18:32:00 -0700</bug_when>
    <thetext>Created attachment 68489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283544</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-23 00:48:06 -0700</bug_when>
    <thetext>Attachment 68489 did not build on win:
Build output: http://queues.webkit.org/results/4041105</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283766</commentid>
    <comment_count>3</comment_count>
      <attachid>68489</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-23 10:41:42 -0700</bug_when>
    <thetext>Comment on attachment 68489
Patch

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

Review comments by Geoff Garen.

&gt; JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:371
&gt; +        if (nonCapturedVarPass)
&gt; +            codeBlock-&gt;m_numCapturedVars = codeBlock-&gt;m_numVars;
&gt; +        for (size_t i = 0; i &lt; functionStack.size(); ++i) {
&gt; +            FunctionBodyNode* function = functionStack[i];
&gt; +            const Identifier&amp; ident = function-&gt;ident();
&gt; +            if (functionBody-&gt;captures(ident) != nonCapturedVarPass) {
&gt; +                m_functions.add(ident.impl());
&gt; +                emitNewFunction(addVar(ident, false), function);
&gt; +            }
&gt; +        }
&gt; +        for (size_t i = 0; i &lt; varStack.size(); ++i) {
&gt; +            const Identifier&amp; ident = *varStack[i].first;
&gt; +            if (functionBody-&gt;captures(ident) != nonCapturedVarPass)
&gt; +                addVar(ident, varStack[i].second &amp; DeclarationStacks::IsConstant);
&gt; +        }
&gt; +        if (!nonCapturedVarPass)
&gt; +            codeBlock-&gt;m_numCapturedVars = codeBlock-&gt;m_numVars;
&gt;      }

The meaning of &apos;nonCapturedVarPass&apos; in this loop is just too subtle. I think it would be better to unroll this loop instead.

&gt; JavaScriptCore/runtime/JSActivation.cpp:96
&gt; +inline bool JSActivation::symbolTableGet(const Identifier&amp; propertyName, PropertySlot&amp; slot)
&gt; +{
&gt; +    SymbolTableEntry entry = symbolTable().inlineGet(propertyName.impl());
&gt; +    // Cant&apos;t access variables that weren&apos;t captured
&gt; +    if (!entry.isNull() &amp;&amp; entry.getIndex() &lt; static_cast&lt;int&gt;(d()-&gt;functionExecutable-&gt;capturedVariableCount())) {
&gt; +        slot.setRegisterSlot(&amp;registerAt(entry.getIndex()));
&gt; +        return true;
&gt; +    }
&gt; +    return false;
&gt; +}
&gt; +
&gt; +inline bool JSActivation::symbolTablePut(const Identifier&amp; propertyName, JSValue value)
&gt; +{
&gt; +    ASSERT(!Heap::heap(value) || Heap::heap(value) == Heap::heap(this));
&gt; +    
&gt; +    SymbolTableEntry entry = symbolTable().inlineGet(propertyName.impl());
&gt; +    if (entry.isNull())
&gt; +        return false;
&gt; +    if (entry.isReadOnly())
&gt; +        return true;
&gt; +    // Can&apos;t access variables that weren&apos;t captured
&gt; +    if (entry.getIndex() &gt;= static_cast&lt;int&gt;(d()-&gt;functionExecutable-&gt;capturedVariableCount()))
&gt; +        return false;
&gt; +    registerAt(entry.getIndex()) = value;
&gt; +    return true;
&gt; +}

As discussed, it&apos;s not possible to get or put a non-captured in an activation. You can change the checks to ASSERTs.

&gt; JavaScriptCore/runtime/JSActivation.cpp:122
&gt; +        return false;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283807</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-23 11:50:50 -0700</bug_when>
    <thetext>Committed r68171</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284038</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-23 15:32:58 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/68171 might have broken GTK Linux 64-bit Debug
The following changes are on the blame list:
http://trac.webkit.org/changeset/68171
http://trac.webkit.org/changeset/68172</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284812</commentid>
    <comment_count>6</comment_count>
    <who name="Jenn Braithwaite">jennb</who>
    <bug_when>2010-09-24 16:13:03 -0700</bug_when>
    <thetext>This change may have broken these layout tests. They all fail the newly added assert:

ASSERTION FAILED: entry.getIndex() &lt; static_cast&lt;int&gt;(d()-&gt;functionExecutable-&gt;capturedVariableCount())
(/work/WebKit/JavaScriptCore/runtime/JSActivation.cpp:75 bool JSC::JSActivation::symbolTableGet(const JSC::Identifier&amp;, JSC::PropertySlot&amp;))

fast/xmlhttprequest/xmlhttprequest-no-file-access.html
ietestcenter/Javascript/12.14-3.html
ietestcenter/Javascript/12.14-4.html
ietestcenter/Javascript/12.14-5.html
ietestcenter/Javascript/12.14-6.html
ietestcenter/Javascript/12.14-7.html
ietestcenter/Javascript/12.14-8.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284832</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-24 16:25:28 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; This change may have broken these layout tests. They all fail the newly added assert:
&gt; 
&gt; ASSERTION FAILED: entry.getIndex() &lt; static_cast&lt;int&gt;(d()-&gt;functionExecutable-&gt;capturedVariableCount())
&gt; (/work/WebKit/JavaScriptCore/runtime/JSActivation.cpp:75 bool JSC::JSActivation::symbolTableGet(const JSC::Identifier&amp;, JSC::PropertySlot&amp;))
&gt; 
&gt; fast/xmlhttprequest/xmlhttprequest-no-file-access.html
&gt; ietestcenter/Javascript/12.14-3.html
&gt; ietestcenter/Javascript/12.14-4.html
&gt; ietestcenter/Javascript/12.14-5.html
&gt; ietestcenter/Javascript/12.14-6.html
&gt; ietestcenter/Javascript/12.14-7.html
&gt; ietestcenter/Javascript/12.14-8.html

what revision?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285594</commentid>
    <comment_count>8</comment_count>
    <who name="Jenn Braithwaite">jennb</who>
    <bug_when>2010-09-27 11:14:05 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; This change may have broken these layout tests. They all fail the newly added assert:
&gt; &gt; 
&gt; &gt; ASSERTION FAILED: entry.getIndex() &lt; static_cast&lt;int&gt;(d()-&gt;functionExecutable-&gt;capturedVariableCount())
&gt; &gt; (/work/WebKit/JavaScriptCore/runtime/JSActivation.cpp:75 bool JSC::JSActivation::symbolTableGet(const JSC::Identifier&amp;, JSC::PropertySlot&amp;))
&gt; &gt; 
&gt; &gt; fast/xmlhttprequest/xmlhttprequest-no-file-access.html
&gt; &gt; ietestcenter/Javascript/12.14-3.html
&gt; &gt; ietestcenter/Javascript/12.14-4.html
&gt; &gt; ietestcenter/Javascript/12.14-5.html
&gt; &gt; ietestcenter/Javascript/12.14-6.html
&gt; &gt; ietestcenter/Javascript/12.14-7.html
&gt; &gt; ietestcenter/Javascript/12.14-8.html
&gt; 
&gt; what revision?

I was on r68285. Snow Leopard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285602</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-27 11:17:20 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; This change may have broken these layout tests. They all fail the newly added assert:
&gt; &gt; &gt; 
&gt; &gt; &gt; ASSERTION FAILED: entry.getIndex() &lt; static_cast&lt;int&gt;(d()-&gt;functionExecutable-&gt;capturedVariableCount())
&gt; &gt; &gt; (/work/WebKit/JavaScriptCore/runtime/JSActivation.cpp:75 bool JSC::JSActivation::symbolTableGet(const JSC::Identifier&amp;, JSC::PropertySlot&amp;))
&gt; &gt; &gt; 
&gt; &gt; &gt; fast/xmlhttprequest/xmlhttprequest-no-file-access.html
&gt; &gt; &gt; ietestcenter/Javascript/12.14-3.html
&gt; &gt; &gt; ietestcenter/Javascript/12.14-4.html
&gt; &gt; &gt; ietestcenter/Javascript/12.14-5.html
&gt; &gt; &gt; ietestcenter/Javascript/12.14-6.html
&gt; &gt; &gt; ietestcenter/Javascript/12.14-7.html
&gt; &gt; &gt; ietestcenter/Javascript/12.14-8.html
&gt; &gt; 
&gt; &gt; what revision?
&gt; 
&gt; I was on r68285. Snow Leopard.

Check with a revision &gt;= 68288</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285691</commentid>
    <comment_count>10</comment_count>
    <who name="Jenn Braithwaite">jennb</who>
    <bug_when>2010-09-27 13:08:00 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; This change may have broken these layout tests. They all fail the newly added assert:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; ASSERTION FAILED: entry.getIndex() &lt; static_cast&lt;int&gt;(d()-&gt;functionExecutable-&gt;capturedVariableCount())
&gt; &gt; &gt; &gt; (/work/WebKit/JavaScriptCore/runtime/JSActivation.cpp:75 bool JSC::JSActivation::symbolTableGet(const JSC::Identifier&amp;, JSC::PropertySlot&amp;))
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; fast/xmlhttprequest/xmlhttprequest-no-file-access.html
&gt; &gt; &gt; &gt; ietestcenter/Javascript/12.14-3.html
&gt; &gt; &gt; &gt; ietestcenter/Javascript/12.14-4.html
&gt; &gt; &gt; &gt; ietestcenter/Javascript/12.14-5.html
&gt; &gt; &gt; &gt; ietestcenter/Javascript/12.14-6.html
&gt; &gt; &gt; &gt; ietestcenter/Javascript/12.14-7.html
&gt; &gt; &gt; &gt; ietestcenter/Javascript/12.14-8.html
&gt; &gt; &gt; 
&gt; &gt; &gt; what revision?
&gt; &gt; 
&gt; &gt; I was on r68285. Snow Leopard.
&gt; 
&gt; Check with a revision &gt;= 68288

All happy at r68401.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68489</attachid>
            <date>2010-09-22 18:32:00 -0700</date>
            <delta_ts>2010-09-23 10:41:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46330-20100922183159.patch</filename>
            <type>text/plain</type>
            <size>15554</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzZTQ1MjNhMjIzZGIwZWMyNzIzMjZlY2NmMmQxNDJlMmFiY2Q4MTNkLi45
MGVmMzk3N2YyMzBkNjQ5NjQ3MDNmNjJiMDZiYzkxMDVkMWQzYmQxIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDEgQEAKKzIwMTAtMDktMjIgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbmx5IGNv
cHkgY2FwdHVyZWQgdmFyaWFibGVzIGludG8gYWN0aXZhdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYzMzAKKworICAgICAgICBXZSBub3cgdHJh
Y2sgZnJlZSB2YXJpYWJsZSBpbmZvcm1hdGlvbiB3aGljaCBtZWFucyB0aGF0CisgICAgICAgIHdl
IG5vIGxvbmdlciBuZWVkIHRvIGNvcHkgZXZlcnkgdmFyaWFibGUgZGVmaW5lZCBpbiBhCisgICAg
ICAgIGZ1bmN0aW9uLiAgV2l0aCB0aGlzIHBhdGNoIGFjdGl2YXRpb25zIG9ubHkgcmV0YWluIHRo
b3NlCisgICAgICAgIHZhcmlhYmxlcyBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzLiAgSW4gb3JkZXIg
dG8gaW50ZXJhY3QKKyAgICAgICAgc2FmZWx5IHdpdGggdGhlIGluc3BlY3RvciB0aGlzIG1lYW5z
IHRoYXQgSlNBY3RpdmF0aW9uCisgICAgICAgIG5vdyBwcm92aWRlcyBpdHMgb3duIGxvb2t1cCBm
dW5jdGlvbnMgc28gaXQgY2FuIGF2b2lkIAorICAgICAgICB0cnlpbmcgdG8gcmVhZCBvciB3cml0
ZSB0byB2YXJpYWJsZXMgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgb3B0aW1pc2VkIG91dC4KKwor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpC
eXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisgICAgICAgIChK
U0M6OlNjb3BlTm9kZTo6Y2FwdHVyZWRWYXJpYWJsZUNvdW50KToKKyAgICAgICAgKEpTQzo6U2Nv
cGVOb2RlOjpjYXB0dXJlcyk6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuaDoKKyAgICAg
ICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjb3B5UmVnaXN0ZXJzKToKKyAgICAgICAgKiBydW50aW1l
L0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0
aW9uRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
aDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjYXB0dXJlZFZhcmlhYmxlQ291
bnQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6
SlNBY3RpdmF0aW9uOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246
OnN5bWJvbFRhYmxlR2V0KToKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJs
ZVB1dCk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6Z2V0T3duUHJvcGVydHlOYW1lcyk6
CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRl
cyk6CisgICAgICAgICogcnVudGltZS9KU0FjdGl2YXRpb24uaDoKKwogMjAxMC0wOS0yMiAgTWlj
aGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
YXZpbiBCYXJyYWNsb3VnaC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY3NWQyNmRkNmNiNmRlMDAxODY1
NGU5OGYzYTViODc2MmFiNGU0NTkuLjhlNzhiYmM2ZTg2NWJjMjk3Y2Y2N2FkNDkwM2NlMWJiZmI0
YjhhMzUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjQwNyw2ICsyNDA3LDcgQEAKIAkJCWlzYSA9IFBC
WFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI3NzEwODkwMkFGRTAw
OEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiSmF2YVNj
cmlwdENvcmUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKKwkJ
CWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3Mg
PSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCmluZGV4IDc2NmFkMmE1NTIwZDU4MWYwZjI2Njc1Mzg3ZGM1OWM3NDZlZjc0
MTAuLmNkYTQ1MzBkM2ExNzk3MGNjYTU4MTRmY2Y5MDMyYjJhYTkwNGViOWUgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC01MTQsNiArNTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgaW50IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgICAgICBpbnQgbV9udW1W
YXJzOworICAgICAgICBpbnQgbV9udW1DYXB0dXJlZFZhcnM7CiAgICAgICAgIGludCBtX251bVBh
cmFtZXRlcnM7CiAgICAgICAgIGJvb2wgbV9pc0NvbnN0cnVjdG9yOwogCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCBhYjI1OWE2
MzZiYjYzOTc2NDNlOGRjMTYzYzg0NDM5NTI1YjRhY2NkLi4xMmI0MDk3OTVlODMxMzY4MWI2Mjkw
NTZlZmQ3NDYwYTQzMWEyOTk2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTI4Nyw2ICsyODcsNyBAQCBCeXRlY29kZUdlbmVy
YXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBjb25zdCBE
ZWJ1Z2dlciogZAogCiAgICAgICAgIHByZXNlcnZlTGFzdFZhcigpOwogICAgIH0KKyAgICBjb2Rl
QmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2NrLT5tX251bVZhcnM7CiB9CiAKIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBmdW5j
dGlvbkJvZHksIGNvbnN0IERlYnVnZ2VyKiBkZWJ1Z2dlciwgY29uc3QgU2NvcGVDaGFpbiYgc2Nv
cGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
QEAgLTM0NywxNiArMzQ4LDMxIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihGdW5jdGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHksIGNvbnN0IERlYnVnCiAgICAgfQogCiAg
ICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sg
PSBmdW5jdGlvbkJvZHktPmZ1bmN0aW9uU3RhY2soKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZ1bmN0aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRnVuY3Rpb25Cb2R5Tm9k
ZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0YWNrW2ldOwotICAgICAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudCA9IGZ1bmN0aW9uLT5pZGVudCgpOwotICAgICAgICBtX2Z1bmN0aW9ucy5hZGQoaWRl
bnQuaW1wbCgpKTsKLSAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2Up
LCBmdW5jdGlvbik7CisgICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrJiB2YXJT
dGFjayA9IGZ1bmN0aW9uQm9keS0+dmFyU3RhY2soKTsKKworICAgIGZvciAoaW50IG5vbkNhcHR1
cmVkVmFyUGFzcyA9ICFmdW5jdGlvbkJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCk7IG5vbkNh
cHR1cmVkVmFyUGFzcyA8IDI7IG5vbkNhcHR1cmVkVmFyUGFzcysrKSB7CisgICAgICAgIGlmIChu
b25DYXB0dXJlZFZhclBhc3MpCisgICAgICAgICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRW
YXJzID0gY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgRnVuY3Rpb25Cb2R5
Tm9kZSogZnVuY3Rpb24gPSBmdW5jdGlvblN0YWNrW2ldOworICAgICAgICAgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKKyAgICAgICAgICAgIGlmIChmdW5j
dGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSAhPSBub25DYXB0dXJlZFZhclBhc3MpIHsKKyAgICAg
ICAgICAgICAgICBtX2Z1bmN0aW9ucy5hZGQoaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50LCBmYWxzZSksIGZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0
YWNrLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
ICp2YXJTdGFja1tpXS5maXJzdDsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkJvZHktPmNhcHR1
cmVzKGlkZW50KSAhPSBub25DYXB0dXJlZFZhclBhc3MpCisgICAgICAgICAgICAgICAgYWRkVmFy
KGlkZW50LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFu
dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub25DYXB0dXJlZFZhclBhc3MpCisgICAgICAg
ICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0gY29kZUJsb2NrLT5tX251bVZhcnM7
CiAgICAgfQogCi0gICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrJiB2YXJTdGFj
ayA9IGZ1bmN0aW9uQm9keS0+dmFyU3RhY2soKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhclN0YWNrLnNpemUoKTsgKytpKQotICAgICAgICBhZGRWYXIoKnZhclN0YWNrW2ldLmZpcnN0
LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCk7Cisg
ICAgaWYgKGRlYnVnZ2VyKQorICAgICAgICBjb2RlQmxvY2stPm1fbnVtQ2FwdHVyZWRWYXJzID0g
Y29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgICAgIAogCiAgICAgRnVuY3Rpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzID0gKmZ1bmN0aW9uQm9keS0+cGFyYW1ldGVycygpOwogICAgIHNpemVfdCBw
YXJhbWV0ZXJDb3VudCA9IHBhcmFtZXRlcnMuc2l6ZSgpOwpAQCAtNDMwLDcgKzQ0Niw3IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihFdmFsTm9kZSogZXZhbE5vZGUsIGNv
bnN0IERlYnVnZ2VyKiBkZWJ1Z2dlCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1WYXJp
YWJsZXM7ICsraSkKICAgICAgICAgdmFyaWFibGVzLmFwcGVuZCgqdmFyU3RhY2tbaV0uZmlyc3Qp
OwogICAgIGNvZGVCbG9jay0+YWRvcHRWYXJpYWJsZXModmFyaWFibGVzKTsKLQorICAgIGNvZGVC
bG9jay0+bV9udW1DYXB0dXJlZFZhcnMgPSBjb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBwcmVz
ZXJ2ZUxhc3RWYXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05v
ZGVzLmggYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCAyZDg0NDhjM2Y0MjJl
ZmYyNGM0NTI2OWMwN2Q3ODljMDQ2OTYxNDhjLi41MTkzZmRkZWUwN2QyZWI2OGZhMGJkYWVjZjE4
YjE5ODg2YWVmYzI5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMTQxNCw2ICsxNDE0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgdXNlc1RoaXMoKSBjb25zdCB7IHJldHVybiBt
X2ZlYXR1cmVzICYgVGhpc0ZlYXR1cmU7IH0KICAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24o
KSBjb25zdCB7IEFTU0VSVChtX2RhdGEpOyByZXR1cm4gKGhhc0NhcHR1cmVkVmFyaWFibGVzKCkp
IHx8IChtX2ZlYXR1cmVzICYgKEV2YWxGZWF0dXJlIHwgV2l0aEZlYXR1cmUgfCBDYXRjaEZlYXR1
cmUpKTsgfQogICAgICAgICBib29sIGhhc0NhcHR1cmVkVmFyaWFibGVzKCkgY29uc3QgeyByZXR1
cm4gISFtX2RhdGEtPm1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgICAgIHNpemVf
dCBjYXB0dXJlZFZhcmlhYmxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEtPm1fY2FwdHVy
ZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQpIHsgcmV0dXJuIG1fZGF0YS0+bV9jYXB0dXJlZFZhcmlhYmxlcy5jb250YWlu
cyhpZGVudC5pbXBsKCkpOyB9CiAKICAgICAgICAgVmFyU3RhY2smIHZhclN0YWNrKCkgeyBBU1NF
UlQobV9kYXRhKTsgcmV0dXJuIG1fZGF0YS0+bV92YXJTdGFjazsgfQogICAgICAgICBGdW5jdGlv
blN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyBBU1NFUlQobV9kYXRhKTsgcmV0dXJuIG1fZGF0YS0+
bV9mdW5jdGlvblN0YWNrOyB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
Z3VtZW50cy5oIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuaAppbmRleCBkODky
ZGUwZjI2MWE1OWI4MWZjMTNhMmM0ZGFmNWVlNmQ2ODhjMjk0Li40OWM4YjNiNThhZTM4NTU0NWVk
MzkzN2E2MmI5Mjc1ZWY2ZDhmZTU4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FyZ3VtZW50cy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzLmgKQEAg
LTIyNSw3ICsyMjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQVNTRVJUKCFkKCktPnJl
Z2lzdGVyQXJyYXkpOwogCiAgICAgICAgIHNpemVfdCBudW1QYXJhbWV0ZXJzTWludXNUaGlzID0g
ZCgpLT5mdW5jdGlvbkV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCk7Ci0gICAgICAgIHNpemVf
dCBudW1WYXJzID0gZCgpLT5mdW5jdGlvbkV4ZWN1dGFibGUtPnZhcmlhYmxlQ291bnQoKTsKKyAg
ICAgICAgc2l6ZV90IG51bVZhcnMgPSBkKCktPmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRW
YXJpYWJsZUNvdW50KCk7CiAgICAgICAgIHNpemVfdCBudW1Mb2NhbHMgPSBudW1WYXJzICsgbnVt
UGFyYW1ldGVyc01pbnVzVGhpczsKIAogICAgICAgICBpZiAoIW51bUxvY2FscykKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCmluZGV4IGUxNDk1NWNhM2IyYTUzNThiNDhjYmVkM2Rh
ZGM3MjViMTBmYTcwMjUuLjg3MWYzZTIwNDBkODFlZDcyODQwNTBhMGY5NWVmZTg0YTBhYTQ1ZWQg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKKysrIGIv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtNjUsNyArNjUsNyBAQCBQ
cm9ncmFtRXhlY3V0YWJsZTo6flByb2dyYW1FeGVjdXRhYmxlKCkKIAogRnVuY3Rpb25FeGVjdXRh
YmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBJ
ZGVudGlmaWVyJiBuYW1lLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgZm9yY2VVc2Vz
QXJndW1lbnRzLCBGdW5jdGlvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMsIGludCBmaXJzdExpbmUs
IGludCBsYXN0TGluZSkKICAgICA6IFNjcmlwdEV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgc291cmNl
KQotICAgICwgbV9udW1WYXJpYWJsZXMoMCkKKyAgICAsIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMo
MCkKICAgICAsIG1fZm9yY2VVc2VzQXJndW1lbnRzKGZvcmNlVXNlc0FyZ3VtZW50cykKICAgICAs
IG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQogICAgICwgbV9uYW1lKG5hbWUpCkBAIC03Nyw3ICs3
Nyw3IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllCiAKIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVu
Y3Rpb25FeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGZvcmNlVXNlc0FyZ3VtZW50cywgRnVuY3Rp
b25QYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzLCBpbnQgZmlyc3RMaW5lLCBpbnQgbGFzdExpbmUpCiAg
ICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMsIHNvdXJjZSkKLSAgICAsIG1fbnVtVmFyaWFibGVz
KDApCisgICAgLCBtX251bUNhcHR1cmVkVmFyaWFibGVzKDApCiAgICAgLCBtX2ZvcmNlVXNlc0Fy
Z3VtZW50cyhmb3JjZVVzZXNBcmd1bWVudHMpCiAgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVy
cykKICAgICAsIG1fbmFtZShuYW1lKQpAQCAtMTk3LDcgKzE5Nyw3IEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBT
Y29wZUNoYWluCiAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpOwogICAgIG1fbnVtUGFyYW1ldGVy
c0ZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPm1fbnVtUGFyYW1ldGVyczsKICAgICBBU1NF
UlQobV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCk7Ci0gICAgbV9udW1WYXJpYWJsZXMgPSBtX2NvZGVC
bG9ja0ZvckNhbGwtPm1fbnVtVmFyczsKKyAgICBtX251bUNhcHR1cmVkVmFyaWFibGVzID0gbV9j
b2RlQmxvY2tGb3JDYWxsLT5tX251bUNhcHR1cmVkVmFyczsKICAgICBtX3N5bWJvbFRhYmxlID0g
bV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogCiAgICAgYm9keS0+ZGVz
dHJveURhdGEoKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBTY29wZQog
ICAgIGdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1
Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+bV9udW1QYXJhbWV0ZXJzOwogICAgIEFTU0VS
VChtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QpOwotICAgIG1fbnVtVmFyaWFibGVzID0gbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPm1fbnVtVmFyczsKKyAgICBtX251bUNhcHR1cmVkVmFyaWFi
bGVzID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPm1fbnVtQ2FwdHVyZWRWYXJzOwogICAgIG1f
c3ltYm9sVGFibGUgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2hhcmVkU3ltYm9sVGFibGUo
KTsKIAogICAgIGJvZHktPmRlc3Ryb3lEYXRhKCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaCBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCmluZGV4IGJlOGM0M2NjMzVkNzc1MTlkNGJkMTdhMjE1MDA2NmMwMzBkMWZhMzQuLmZlYWI3
ZWY5MDcxMDIxOGRmZjRlMjk5YzZlNjdiN2IwZjViMmI3NGEgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCkBAIC0zNDksNyArMzQ5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBz
aXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMtPnNpemUo
KTsgfQotICAgICAgICB1bnNpZ25lZCB2YXJpYWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9u
dW1WYXJpYWJsZXM7IH0KKyAgICAgICAgdW5zaWduZWQgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9udW1DYXB0dXJlZFZhcmlhYmxlczsgfQogICAgICAgICBVU3RyaW5n
IHBhcmFtU3RyaW5nKCkgY29uc3Q7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGU7IH0KIApAQCAtMzY2LDcgKzM2Niw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgUGFzc093blB0cjxFeGNlcHRp
b25JbmZvPiByZXBhcnNlRXhjZXB0aW9uSW5mbyhKU0dsb2JhbERhdGEqLCBTY29wZUNoYWluTm9k
ZSosIENvZGVCbG9jayopOwogCi0gICAgICAgIHVuc2lnbmVkIG1fbnVtVmFyaWFibGVzIDogMzE7
CisgICAgICAgIHVuc2lnbmVkIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKICAgICAgICAg
Ym9vbCBtX2ZvcmNlVXNlc0FyZ3VtZW50cyA6IDE7CiAKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9u
UGFyYW1ldGVycz4gbV9wYXJhbWV0ZXJzOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCmluZGV4IDhjZjcxZDBlMDJhOGVkNjgxMDY4NzFiMTg5MWE2ZGVjZTkwMDFiYWUuLmMz
NWZjYTgwNDcxOWVlNzI5NjcwM2Y0NDhkNWUxY2I1NWQyN2IzYTQgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKQEAgLTYyLDEyICs2Miw2OSBAQCB2b2lkIEpTQWN0aXZh
dGlvbjo6bWFya0NoaWxkcmVuKE1hcmtTdGFjayYgbWFya1N0YWNrKQogICAgIHNpemVfdCBjb3Vu
dCA9IG51bVBhcmFtZXRlcnNNaW51c1RoaXM7CiAgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhy
ZWdpc3RlckFycmF5LCBjb3VudCk7CiAKLSAgICBzaXplX3QgbnVtVmFycyA9IGQoKS0+ZnVuY3Rp
b25FeGVjdXRhYmxlLT52YXJpYWJsZUNvdW50KCk7CisgICAgc2l6ZV90IG51bVZhcnMgPSBkKCkt
PmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRWYXJpYWJsZUNvdW50KCk7CiAKICAgICAvLyBT
a2lwIHRoZSBjYWxsIGZyYW1lLCB3aGljaCBzaXRzIGJldHdlZW4gdGhlIHBhcmFtZXRlcnMgYW5k
IHZhcnMuCiAgICAgbWFya1N0YWNrLmFwcGVuZFZhbHVlcyhyZWdpc3RlckFycmF5ICsgY291bnQg
KyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUsIG51bVZhcnMsIE1heUNvbnRhaW5O
dWxsVmFsdWVzKTsKIH0KIAoraW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJsZUdl
dChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
KyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9sVGFibGUoKS5pbmxpbmVHZXQocHJv
cGVydHlOYW1lLmltcGwoKSk7CisgICAgLy8gQ2FudCd0IGFjY2VzcyB2YXJpYWJsZXMgdGhhdCB3
ZXJlbid0IGNhcHR1cmVkCisgICAgaWYgKCFlbnRyeS5pc051bGwoKSAmJiBlbnRyeS5nZXRJbmRl
eCgpIDwgc3RhdGljX2Nhc3Q8aW50PihkKCktPmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRW
YXJpYWJsZUNvdW50KCkpKSB7CisgICAgICAgIHNsb3Quc2V0UmVnaXN0ZXJTbG90KCZyZWdpc3Rl
ckF0KGVudHJ5LmdldEluZGV4KCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSlNBY3RpdmF0aW9uOjpzeW1ib2xUYWJs
ZVB1dChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFw
OjpoZWFwKHRoaXMpKTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gc3ltYm9s
VGFibGUoKS5pbmxpbmVHZXQocHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgaWYgKGVudHJ5Lmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2FuJ3QgYWNjZXNzIHZhcmlhYmxlcyB0
aGF0IHdlcmVuJ3QgY2FwdHVyZWQKKyAgICBpZiAoZW50cnkuZ2V0SW5kZXgoKSA+PSBzdGF0aWNf
Y2FzdDxpbnQ+KGQoKS0+ZnVuY3Rpb25FeGVjdXRhYmxlLT5jYXB0dXJlZFZhcmlhYmxlQ291bnQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4
KCkpID0gdmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSlNBY3RpdmF0aW9uOjpn
ZXRPd25Qcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHBy
b3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQoreworICAgIFN5bWJvbFRhYmxlOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBzeW1ib2xUYWJsZSgpLmVuZCgpOworICAgIGZvciAoU3ltYm9s
VGFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3ltYm9sVGFibGUoKS5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgLy8gQ2FudCd0IGFjY2VzcyB2YXJpYWJsZXMgdGhhdCB3ZXJl
bid0IGNhcHR1cmVkCisgICAgICAgIGlmIChpdC0+c2Vjb25kLmdldEluZGV4KCkgPj0gc3RhdGlj
X2Nhc3Q8aW50PihkKCktPmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRWYXJpYWJsZUNvdW50
KCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghKGl0LT5zZWNvbmQuZ2V0
QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3Bl
cnRpZXMpKQorICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBp
dC0+Zmlyc3QuZ2V0KCkpKTsKKyAgICB9CisgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVj
dCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Qcm9wZXJ0eU5hbWVzCisgICAgSlNPYmplY3Q6Omdl
dE93blByb3BlcnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7Cit9CisKK2lubGlu
ZSBib29sIEpTQWN0aXZhdGlvbjo6c3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyhjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCit7CisgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVl
KSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKKyAgICAKKyAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3Ig
aXRlciA9IHN5bWJvbFRhYmxlKCkuZmluZChwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBpZiAo
aXRlciA9PSBzeW1ib2xUYWJsZSgpLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
U3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT5zZWNvbmQ7CisgICAgQVNTRVJUKCFlbnRy
eS5pc051bGwoKSk7CisgICAgaWYgKGVudHJ5LmdldEluZGV4KCkgPj0gc3RhdGljX2Nhc3Q8aW50
PihkKCktPmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y2FwdHVyZWRWYXJpYWJsZUNvdW50KCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsK
KyAgICByZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpID0gdmFsdWU7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIGJvb2wgSlNBY3RpdmF0aW9uOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1
bWVudHMpIHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmggYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCmluZGV4IGQ1ZTc5OTE2
ZGZjYzkzMTk0MTlhN2YzNTU2MTY4Yzg4NDVmYzY0MWEuLjlmZjkxNjg1ZGRkZTJhMTQxZGRjZjRi
MjczZjA5NjE5YzY4M2UzN2MgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNB
Y3RpdmF0aW9uLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaApA
QCAtNTIsNiArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlz
QWN0aXZhdGlvbk9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXIm
LCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdldE93blByb3BlcnR5TmFt
ZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwdXQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpT
VmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogCkBAIC04Nyw3ICs4OCwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uRXhlY3V0YWJsZT4gZnVuY3Rpb25F
eGVjdXRhYmxlOwogICAgICAgICB9OwotICAgICAgICAKKworICAgICAgICBib29sIHN5bWJvbFRh
YmxlR2V0KGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmKTsKKyAgICAgICAgYm9vbCBz
eW1ib2xUYWJsZUdldChjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7Cisg
ICAgICAgIGJvb2wgc3ltYm9sVGFibGVHZXQoY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xv
dCYsIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSk7CisgICAgICAgIGJvb2wgc3ltYm9sVGFibGVQdXQo
Y29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUpOworICAgICAgICBib29sIHN5bWJvbFRhYmxlUHV0
V2l0aEF0dHJpYnV0ZXMoY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOworCiAgICAgICAgIHN0YXRpYyBKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3Rh
dGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIE5FVkVSX0lOTElORSBQ
cm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYyBnZXRBcmd1bWVudHNHZXR0ZXIoKTsKIAo=
</data>
<flag name="review"
          id="58015"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>