<?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>142647</bug_id>
          
          <creation_ts>2015-03-12 16:04:15 -0700</creation_ts>
          <short_desc>Bytecode liveness analysis should have more lambdas and fewer sets</short_desc>
          <delta_ts>2015-03-12 19:03:05 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>141174</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076776</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 16:04:15 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076781</commentid>
    <comment_count>1</comment_count>
      <attachid>248552</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 16:27:55 -0700</bug_when>
    <thetext>Created attachment 248552
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076782</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-12 16:30:16 -0700</bug_when>
    <thetext>Attachment 248552 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:121:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:127:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:145:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:149:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076789</commentid>
    <comment_count>3</comment_count>
      <attachid>248552</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-12 16:54:04 -0700</bug_when>
    <thetext>Comment on attachment 248552
the patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:130
&gt; +    computeDefsForBytecodeOffset(
&gt; +        codeBlock, bytecodeOffset,
&gt; +        [&amp;] (CodeBlock* codeBlock, Instruction*, OpcodeID, int operand) {
&gt; +            if (isValidRegisterForLiveness(codeBlock, operand))
&gt; +                def(indexForOperand(codeBlock, operand));
&gt; +        });
&gt; +    computeUsesForBytecodeOffset(
&gt; +        codeBlock, bytecodeOffset,
&gt; +        [&amp;] (CodeBlock* codeBlock, Instruction*, OpcodeID, int operand) {
&gt; +            if (isValidRegisterForLiveness(codeBlock, operand))
&gt; +                use(indexForOperand(codeBlock, operand));
&gt; +        });

nit: Everywhere else, we deal with the use case before the def case (including the original code, the template parameters. and the order the functions are defined in the caller).  Swapping these 2 calls will make it easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076791</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 16:57:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 248552 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248552&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:130
&gt; &gt; +    computeDefsForBytecodeOffset(
&gt; &gt; +        codeBlock, bytecodeOffset,
&gt; &gt; +        [&amp;] (CodeBlock* codeBlock, Instruction*, OpcodeID, int operand) {
&gt; &gt; +            if (isValidRegisterForLiveness(codeBlock, operand))
&gt; &gt; +                def(indexForOperand(codeBlock, operand));
&gt; &gt; +        });
&gt; &gt; +    computeUsesForBytecodeOffset(
&gt; &gt; +        codeBlock, bytecodeOffset,
&gt; &gt; +        [&amp;] (CodeBlock* codeBlock, Instruction*, OpcodeID, int operand) {
&gt; &gt; +            if (isValidRegisterForLiveness(codeBlock, operand))
&gt; &gt; +                use(indexForOperand(codeBlock, operand));
&gt; &gt; +        });
&gt; 
&gt; nit: Everywhere else, we deal with the use case before the def case
&gt; (including the original code, the template parameters. and the order the
&gt; functions are defined in the caller).  Swapping these 2 calls will make it
&gt; easier to read.

It&apos;s true that we do that everywhere else; whenever the ordering doesn&apos;t matter we say &quot;use&quot; before we say &quot;def&quot;.  But here the ordering does matter.  We must process defs before we process uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076822</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-12 19:03:05 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/181467</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248552</attachid>
            <date>2015-03-12 16:27:55 -0700</date>
            <delta_ts>2015-03-12 16:54:04 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11724</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDE1LTAzLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Qnl0ZWNvZGUgbGl2ZW5lc3MgYW5hbHlzaXMgc2hvdWxkIGhhdmUgbW9yZSBsYW1iZGFzIGFuZCBm
ZXdlciBzZXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDI2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIEluIGJ1ZyAxNDExNzQgSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFsbCBvZiB0aGUg
Ynl0ZWNvZGUga2lsbCBzaXRlcy4gVGhpcyByZXF1aXJlcyBob29raW5nIGludG8KKyAgICAgICAg
dGhlIGJ5dGVjb2RlIGFuYWx5c2lzJyBzdGVwT3ZlckZ1bmN0aW9uIG1ldGhvZCwgZXhjZXB0IGlu
IHN1Y2ggYSB3YXkgdGhhdCB3ZSBvYnNlcnZlIHVzZXMgdGhhdAorICAgICAgICBhcmUgbm90IGlu
IG91dHMuIFRoaXMgcmVmYWN0b3JzIHN0ZXBPdmVyRnVuY3Rpb24gc28gdGhhdCB5b3UgY2FuIHBh
c3MgaXQgdXNlL2RlZiBmdW5jdG9ycyB0aGF0CisgICAgICAgIGNhbiBlaXRoZXIgYmUgdXNlZCB0
byBwcm9wYWdhdGUgb3V0cyAoYXMgd2UgZG8gcmlnaHQgbm93KSBvciB0byBhZGRpdGlvbmFsbHkg
ZGV0ZWN0IGtpbGxzIG9yCisgICAgICAgIHdoYXRldmVyIGVsc2UuCisgICAgICAgIAorICAgICAg
ICBJbiBvcmRlciB0byBhY2hpZXZlIHRoaXMsIHRoZSBsaXZlbmVzcyBhbmFseXNpcyB3YXMgbW92
ZWQgb2ZmIG9mIG1haW50YWluaW5nIHVzZXMvZGVmcworICAgICAgICBiaXR2ZWN0b3JzLiBUaGlz
IHdhc24ndCBoZWxwaW5nIHRoZSBhYnN0cmFjdGlvbiBhbmQgd2FzIHByb2JhYmx5IGluZWZmaWNp
ZW50LiBUaGUgbmV3IGNvZGUKKyAgICAgICAgc2hvdWxkIGJlIGEgYml0IGZhc3RlciBzaW5jZSB3
ZSBkb24ndCBoYXZlIHRvIGNsZWFyIHVzZXMvZGVmcyBiaXR2ZWN0b3JzIG9uIGVhY2ggaW5zdHJ1
Y3Rpb24uIE9uCisgICAgICAgIHRoZSBvdGhlciBoYW5kLCBiZWluZyBhYmxlIHRvIGludGVyY2Vw
dCBlYWNoIHVzZSBtZWFucyB0aGF0IG91ciBjb2RlIGZvciBleGNlcHRpb24gaGFuZGxlcnMgaXMK
KyAgICAgICAgbm8gbG9uZ2VyIGEgYml0d2lzZS1tZXJnZTsgaXQgcmVxdWlyZXMgZmluZGluZyBz
ZXQgYml0cy4gRm9ydHVuYXRlbHksIHRoaXMgY29kZSBvbmx5IGtpY2tzIGluCisgICAgICAgIGZv
ciBpbnN0cnVjdGlvbnMgaW5zaWRlIGEgdHJ5LCBhbmQgaXRzIHBlcmZvcm1hbmNlIGlzIE8obGl2
ZSBhdCBjYXRjaCksIHNvIHRoYXQncyBwcm9iYWJseSBub3QKKyAgICAgICAgYmFkLgorCisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpT
Qzo6aW5kZXhGb3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6c3RlcE92ZXJJbnN0cnVjdGlvbik6
CisgICAgICAgIChKU0M6OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdWxsTGl2ZW5l
c3MpOgorICAgICAgICAoSlNDOjpzZXRGb3JPcGVyYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKwogMjAxNS0wMy0xMiAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBJbnRlZ3JhdGUg
TWFwRGF0YSBpbnRvIEpTTWFwIGFuZCBKU1NldApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJ
KHJldmlzaW9uIDE4MTQ1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01OCwzNyArNTgsMTUgQEAg
c3RhdGljIGJvb2wgaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoQwogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgdm9pZCBzZXRGb3JPcGVyYW5kKENvZGVCbG9jayogY29kZUJsb2NrLCBG
YXN0Qml0VmVjdG9yJiBiaXRzLCBpbnQgb3BlcmFuZCkKK3N0YXRpYyB1bnNpZ25lZCBpbmRleEZv
ck9wZXJhbmQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCBvcGVyYW5kKQogewogICAgIEFTU0VS
VChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIG9wZXJhbmQpKTsKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKICAgICBpZiAodmlydHVhbFJlZy5v
ZmZzZXQoKSA+IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkpCi0gICAgICAgIGJpdHMuc2V0KHZp
cnR1YWxSZWcudG9Mb2NhbCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGJpdHMuc2V0KHZpcnR1YWxS
ZWcudG9Mb2NhbCgpIC0gY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSk7CisgICAgICAgIHJldHVy
biB2aXJ0dWFsUmVnLnRvTG9jYWwoKTsKKyAgICByZXR1cm4gdmlydHVhbFJlZy50b0xvY2FsKCkg
LSBjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpOwogfQogCi1uYW1lc3BhY2UgewotCi1jbGFzcyBT
ZXRCaXQgewotcHVibGljOgotICAgIFNldEJpdChGYXN0Qml0VmVjdG9yJiBiaXRzKQotICAgICAg
ICA6IG1fYml0cyhiaXRzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBvcGVyYXRvcigp
KENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiosIE9wY29kZUlELCBpbnQgb3BlcmFu
ZCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxv
Y2ssIG9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIG1fYml0
cywgb3BlcmFuZCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBGYXN0Qml0VmVjdG9yJiBt
X2JpdHM7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQogc3RhdGljIHVuc2lnbmVk
IGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4q
IGJhc2ljQmxvY2spCiB7CiAgICAgcmV0dXJuICgqYmFzaWNCbG9jayktPmxlYWRlckJ5dGVjb2Rl
T2Zmc2V0KCk7CkBAIC0xMzMsMjggKzExMSw0NyBAQCBzdGF0aWMgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBmaW5kQmFzaWNCbG9jCiAgICAgcmV0dXJuIGJhc2ljQmxvY2tbMV0uZ2V0KCk7CiB9CiAKLXN0
YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFZlY3Rv
cjxSZWZQdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPj4mIGJhc2ljQmxvY2tzLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcywgRmFzdEJpdFZlY3RvciYgZGVmcywgRmFz
dEJpdFZlY3RvciYgb3V0KQotewotICAgIHVzZXMuY2xlYXJBbGwoKTsKLSAgICBkZWZzLmNsZWFy
QWxsKCk7Ci0gICAgCi0gICAgU2V0Qml0IHNldFVzZXModXNlcyk7Ci0gICAgU2V0Qml0IHNldERl
ZnMoZGVmcyk7Ci0gICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5
dGVjb2RlT2Zmc2V0LCBzZXRVc2VzKTsKLSAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0
KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHNldERlZnMpOwotICAgIAotICAgIG91dC5leGNs
dWRlKGRlZnMpOwotICAgIG91dC5tZXJnZSh1c2VzKTsKLSAgICAKKy8vIFNpbXBsaWZpZWQgaW50
ZXJmYWNlIHRvIGJ5dGVjb2RlIHVzZS9kZWYsIHdoaWNoIGRldGVybWluZXMgZGVmcyBmaXJzdCBh
bmQgdGhlbiB1c2VzLCBhbmQgaW5jbHVkZXMKKy8vIGV4Y2VwdGlvbiBoYW5kbGVycyBpbiB0aGUg
dXNlcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+
CitzdGF0aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBW
ZWN0b3I8UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQg
Ynl0ZWNvZGVPZmZzZXQsIGNvbnN0IFVzZUZ1bmN0b3ImIHVzZSwgY29uc3QgRGVmRnVuY3RvciYg
ZGVmKQoreworICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoCisgICAgICAgIGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgIFsmXSAoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEluc3RydWN0aW9uKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKSB7CisgICAgICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBvcGVyYW5kKSkKKyAgICAgICAg
ICAgICAgICBkZWYoaW5kZXhGb3JPcGVyYW5kKGNvZGVCbG9jaywgb3BlcmFuZCkpOworICAgICAg
ICB9KTsKKyAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAorICAgICAgICBjb2RlQmxv
Y2ssIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBbJl0gKENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bnN0cnVjdGlvbiosIE9wY29kZUlELCBpbnQgb3BlcmFuZCkgeworICAgICAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpCisgICAgICAgICAg
ICAgICAgdXNlKGluZGV4Rm9yT3BlcmFuZChjb2RlQmxvY2ssIG9wZXJhbmQpKTsKKyAgICAgICAg
fSk7CisgICAgICAgIAogICAgIC8vIElmIHdlIGhhdmUgYW4gZXhjZXB0aW9uIGhhbmRsZXIsIHdl
IHdhbnQgdGhlIGxpdmUtaW4gdmFyaWFibGVzIG9mIHRoZSAKICAgICAvLyBleGNlcHRpb24gaGFu
ZGxlciBibG9jayB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbGl2ZS1pbiBvZiB0aGlzIHBhcnRpY3Vs
YXIgYnl0ZWNvZGUuCiAgICAgaWYgKEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gY29kZUJsb2NrLT5o
YW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSB7CiAgICAgICAgIEJ5dGVj
b2RlQmFzaWNCbG9jayogaGFuZGxlckJsb2NrID0gZmluZEJhc2ljQmxvY2tXaXRoTGVhZGVyT2Zm
c2V0KGJhc2ljQmxvY2tzLCBoYW5kbGVyLT50YXJnZXQpOwogICAgICAgICBBU1NFUlQoaGFuZGxl
ckJsb2NrKTsKLSAgICAgICAgb3V0Lm1lcmdlKGhhbmRsZXJCbG9jay0+aW4oKSk7CisgICAgICAg
IGhhbmRsZXJCbG9jay0+aW4oKS5mb3JFYWNoU2V0Qml0KHVzZSk7CiAgICAgfQogfQogCitzdGF0
aWMgdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9jayogY29kZUJsb2NrLCBWZWN0b3I8
UmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKK3sKKyAgICBzdGVwT3Zlckluc3RydWN0aW9u
KAorICAgICAgICBjb2RlQmxvY2ssIGJhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwKKyAgICAg
ICAgWyZdICh1bnNpZ25lZCBiaXRJbmRleCkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUg
dXNlIGZ1bmN0b3IsIHNvIHdlIHNldCB0aGUgYml0LgorICAgICAgICAgICAgb3V0LnNldChiaXRJ
bmRleCk7CisgICAgICAgIH0sCisgICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5kZXgpIHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRlZiBmdW5jdG9yLCBzbyB3ZSBjbGVhciB0aGUgYml0
LgorICAgICAgICAgICAgb3V0LmNsZWFyKGJpdEluZGV4KTsKKyAgICAgICAgfSk7Cit9CisKIHN0
YXRpYyB2b2lkIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxSZWZQdHI8Qnl0
ZWNvZGVCYXNpY0Jsb2NrPiA+JiBiYXNpY0Jsb2NrcywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBG
YXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2so
KSk7CkBAIC0xNjIsMTcgKzE1OSwxMiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlTG9jYWxMaXZlbmVz
c0ZvckJ5dGVjCiAKICAgICBGYXN0Qml0VmVjdG9yIG91dCA9IGJsb2NrLT5vdXQoKTsKIAotICAg
IEZhc3RCaXRWZWN0b3IgdXNlczsKLSAgICBGYXN0Qml0VmVjdG9yIGRlZnM7Ci0gICAgdXNlcy5y
ZXNpemUob3V0Lm51bUJpdHMoKSk7Ci0gICAgZGVmcy5yZXNpemUob3V0Lm51bUJpdHMoKSk7Ci0K
ICAgICBmb3IgKGludCBpID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpLnNpemUoKSAtIDE7IGkg
Pj0gMDsgaS0tKSB7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPmJ5
dGVjb2RlT2Zmc2V0cygpW2ldOwogICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVP
ZmZzZXQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIHN0ZXBPdmVySW5z
dHJ1Y3Rpb24oY29kZUJsb2NrLCBiYXNpY0Jsb2NrcywgYnl0ZWNvZGVPZmZzZXQsIHVzZXMsIGRl
ZnMsIG91dCk7CisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBiYXNpY0Js
b2NrcywgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CiAgICAgfQogCiAgICAgcmVzdWx0LnNldChvdXQp
OwpAQCAtMjc3LDggKzI2OSw2IEBAIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOjoKIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNz
KEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpCiB7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7
Ci0gICAgRmFzdEJpdFZlY3RvciB1c2VzOwotICAgIEZhc3RCaXRWZWN0b3IgZGVmczsKICAgICAK
ICAgICByZXN1bHQubV9jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKICAgICByZXN1bHQubV9tYXAu
Y2xlYXIoKTsKQEAgLTI4OSwxMiArMjc5LDEwIEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzOjpjb21wdXRlRnUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAg
b3V0ID0gYmxvY2stPm91dCgpOwotICAgICAgICB1c2VzLnJlc2l6ZShvdXQubnVtQml0cygpKTsK
LSAgICAgICAgZGVmcy5yZXNpemUob3V0Lm51bUJpdHMoKSk7CiAgICAgICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5ieXRlY29kZU9m
ZnNldHMoKVtpXTsKLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24obV9jb2RlQmxvY2ss
IG1fYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zmc2V0LCB1c2VzLCBkZWZzLCBvdXQpOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihtX2NvZGVCbG9jaywgbV9iYXNpY0Jsb2NrcywgYnl0
ZWNvZGVPZmZzZXQsIG91dCk7CiAgICAgICAgICAgICByZXN1bHQubV9tYXAuYWRkKGJ5dGVjb2Rl
T2Zmc2V0LCBvdXQpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE4MTQ1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgogdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAotICAgIENvZGVC
bG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0g
Y29kZUJsb2NrLT52bSgpLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC0yMzQsNyAr
MjM0LDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRnVuY3RvciYgZnVu
Y3RvcikKK3ZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7
CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT52bSgpLT5pbnRlcnBy
ZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgxNDU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NzYsNyAr
Mzg3Niw3IEBAIFN0cmluZyBDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWEKIG5hbWVz
cGFjZSB7CiAKIHN0cnVjdCBWZXJpZnlDYXB0dXJlZERlZiB7Ci0gICAgdm9pZCBvcGVyYXRvcigp
KENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIE9wY29kZUlE
IG9wY29kZUlELCBpbnQgb3BlcmFuZCkKKyAgICB2b2lkIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgT3Bjb2RlSUQgb3Bjb2RlSUQsIGlu
dCBvcGVyYW5kKSBjb25zdAogICAgIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQg
PSBpbnN0cnVjdGlvbiAtIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMTgxNDU4KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNS0wMy0xMiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEJ5dGVjb2RlIGxpdmVuZXNzIGFuYWx5c2lzIHNo
b3VsZCBoYXZlIG1vcmUgbGFtYmRhcyBhbmQgZmV3ZXIgc2V0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNjQ3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgYSBtZXRob2QgZm9yIGl0
ZXJhdGluZyBlYWNoIHNldCBiaXQgaW4gYSBGYXN0Qml0VmVjdG9yLiBVc2VzIGEgZnVuY3RvciBh
cyBhIGNhbGxiYWNrIHNpbmNlCisgICAgICAgIHRoaXMgYWxsb3dzIGZvciBhIG1vcmUgZWZmaWNp
ZW50IGFsZ29yaXRobS4KKworICAgICAgICAqIHd0Zi9GYXN0Qml0VmVjdG9yLmg6CisgICAgICAg
IChXVEY6OkZhc3RCaXRWZWN0b3I6OmZvckVhY2hTZXRCaXQpOgorCiAyMDE1LTAzLTEyICBDc2Fi
YSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0FSTV1bTGludXhd
IEdDIHNvbWV0aW1lcyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wIGlmIHBhcmFsbGVsIEdDIGlz
IGVuYWJsZWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9GYXN0Qml0VmVjdG9yLmgJKHJldmlzaW9uIDE4MTQ1NykKKysr
IFNvdXJjZS9XVEYvd3RmL0Zhc3RCaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDYg
KzE3NywyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoU2V0Qml0KGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICB1bnNpZ25lZCBuID0gYXJyYXlM
ZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSkgeworICAg
ICAgICAgICAgdWludDMyX3Qgd29yZCA9IG1fYXJyYXlbaV07CisgICAgICAgICAgICB1bnNpZ25l
ZCBqID0gaSA8PCA1OworICAgICAgICAgICAgd2hpbGUgKHdvcmQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAod29yZCAmIDEpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Ioaik7CisgICAgICAg
ICAgICAgICAgd29yZCA+Pj0gMTsKKyAgICAgICAgICAgICAgICBqKys7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToK
</data>
<flag name="review"
          id="273432"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>