<?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>79776</bug_id>
          
          <creation_ts>2012-02-28 03:46:39 -0800</creation_ts>
          <short_desc>Parser: Inline ScopeNodeData into ScopeNode</short_desc>
          <delta_ts>2012-03-07 02:19:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79112</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andy Wingo">wingo</reporter>
          <assigned_to name="Andy Wingo">wingo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>566566</commentid>
    <comment_count>0</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-28 03:46:39 -0800</bug_when>
    <thetext>The patch to be attached is a small refactor to the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566571</commentid>
    <comment_count>1</comment_count>
      <attachid>129227</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-28 04:00:06 -0800</bug_when>
    <thetext>Created attachment 129227
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566572</commentid>
    <comment_count>2</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-28 04:07:14 -0800</bug_when>
    <thetext>Sunspider:


TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           ??                156.3ms +/- 0.8%   157.0ms +/- 1.3%     not conclusive: might be *1.004x as slow*

=============================================================================

  3d:                  ??                 23.8ms +/- 3.9%    24.9ms +/- 5.8%     not conclusive: might be *1.044x as slow*
    cube:              ??                  6.9ms +/- 7.8%     8.0ms +/- 19.2%     not conclusive: might be *1.152x as slow*
    morph:             -                   8.8ms +/- 5.2%     8.7ms +/- 3.7% 
    raytrace:          ??                  8.0ms +/- 1.5%     8.1ms +/- 2.7%     not conclusive: might be *1.014x as slow*

  access:              1.038x as fast     14.5ms +/- 1.1%    13.9ms +/- 0.8%     significant
    binary-trees:      1.078x as fast      2.2ms +/- 5.4%     2.0ms +/- 3.3%     significant
    fannkuch:          1.023x as fast      6.2ms +/- 1.3%     6.0ms +/- 0.7%     significant
    nbody:             1.062x as fast      3.4ms +/- 4.4%     3.2ms +/- 2.1%     significant
    nsieve:            -                   2.7ms +/- 1.2%     2.7ms +/- 0.7% 

  bitops:              -                  11.9ms +/- 1.7%    11.8ms +/- 0.3% 
    3bit-bits-in-byte: -                   1.4ms +/- 7.8%     1.3ms +/- 0.7% 
    bits-in-byte:      ??                  2.2ms +/- 1.4%     2.3ms +/- 1.3%     not conclusive: might be *1.009x as slow*
    bitwise-and:       -                   3.2ms +/- 2.4%     3.2ms +/- 0.6% 
    nsieve-bits:       -                   5.1ms +/- 3.5%     5.0ms +/- 0.3% 

  controlflow:         ??                  1.9ms +/- 0.9%     1.9ms +/- 3.6%     not conclusive: might be *1.027x as slow*
    recursive:         ??                  1.9ms +/- 0.9%     1.9ms +/- 3.6%     not conclusive: might be *1.027x as slow*

  crypto:              *1.018x as slow*   12.1ms +/- 0.4%    12.3ms +/- 1.3%     significant
    aes:               *1.029x as slow*    7.4ms +/- 0.3%     7.6ms +/- 1.8%     significant
    md5:               ??                  2.5ms +/- 1.3%     2.5ms +/- 1.2%     not conclusive: might be *1.008x as slow*
    sha1:              -                   2.2ms +/- 2.2%     2.2ms +/- 1.4% 

  date:                ??                 19.0ms +/- 1.1%    19.1ms +/- 1.1%     not conclusive: might be *1.002x as slow*
    format-tofte:      ??                 10.2ms +/- 1.5%    10.2ms +/- 0.8%     not conclusive: might be *1.002x as slow*
    format-xparb:      ??                  8.9ms +/- 1.8%     8.9ms +/- 1.7%     not conclusive: might be *1.002x as slow*

  math:                ??                 16.9ms +/- 1.7%    17.1ms +/- 1.7%     not conclusive: might be *1.012x as slow*
    cordic:            ??                  6.1ms +/- 1.8%     6.2ms +/- 2.4%     not conclusive: might be *1.015x as slow*
    partial-sums:      ??                  8.5ms +/- 1.9%     8.5ms +/- 1.8%     not conclusive: might be *1.010x as slow*
    spectral-norm:     ??                  2.3ms +/- 2.1%     2.4ms +/- 4.1%     not conclusive: might be *1.013x as slow*

  regexp:              -                   8.3ms +/- 1.8%     8.3ms +/- 1.4% 
    dna:               -                   8.3ms +/- 1.8%     8.3ms +/- 1.4% 

  string:              -                  47.9ms +/- 0.9%    47.6ms +/- 0.3% 
    base64:            1.044x as fast      4.7ms +/- 3.3%     4.5ms +/- 0.8%     significant
    fasta:             -                   6.4ms +/- 3.0%     6.4ms +/- 1.1% 
    tagcloud:          ??                 11.2ms +/- 1.1%    11.3ms +/- 1.3%     not conclusive: might be *1.007x as slow*
    unpack-code:       ??                 19.7ms +/- 1.1%    19.7ms +/- 0.6%     not conclusive: might be *1.003x as slow*
    validate-input:    1.025x as fast      6.0ms +/- 1.7%     5.8ms +/- 0.5%     significant


Parsing:

From 0m6.214s to 0m6.286s (1.1% slowdown)

Tested by running the following program:
    for (var i=0; i&lt;1000; i++) checkSyntax(&quot;tests/parse-only/concat-jquery-mootools-prototype.js&quot;);
Taking a minimum of 10 run times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566580</commentid>
    <comment_count>3</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-28 04:25:15 -0800</bug_when>
    <thetext>So, regarding the remaining minor performance regression, I have a couple patches that can make it faster than the baseline case, but they are a bit iffy, so I&apos;d like some feedback.

If I apply this one:

diff --git a/Source/JavaScriptCore/wtf/Vector.h b/Source/JavaScriptCore/wtf/Vector.h
index 29bbd37..351d3e8 100644
--- a/Source/JavaScriptCore/wtf/Vector.h
+++ b/Source/JavaScriptCore/wtf/Vector.h
@@ -281,11 +281,13 @@ namespace WTF {
 
         void deallocateBuffer(T* bufferToDeallocate)
         {
-            if (m_buffer == bufferToDeallocate) {
-                m_buffer = 0;
-                m_capacity = 0;
+            if (bufferToDeallocate) {
+                if (m_buffer == bufferToDeallocate) {
+                    m_buffer = 0;
+                    m_capacity = 0;
+                }
+                fastFree(bufferToDeallocate);
             }
-            fastFree(bufferToDeallocate);
         }
 
         T* buffer() { return m_buffer; }

Then I reach a minimum parse time of 6.220s, which brings the speed to the same as trunk.  The idea is to do less if the vector&apos;s buffer was never allocated.

Secondly if I apply this one, on top of that:


diff --git a/Source/JavaScriptCore/wtf/HashTable.h b/Source/JavaScriptCore/wtf/HashTable.h
index cbcc098..a3afd9a 100644
--- a/Source/JavaScriptCore/wtf/HashTable.h
+++ b/Source/JavaScriptCore/wtf/HashTable.h
@@ -310,7 +310,8 @@ namespace WTF {
         ~HashTable() 
         {
             invalidateIterators(); 
-            deallocateTable(m_table, m_tableSize); 
+            if (m_table)
+                deallocateTable(m_table, m_tableSize);
 #if CHECK_HASHTABLE_USE_AFTER_DESTRUCTION
             m_table = (ValueType*)(uintptr_t)0xbbadbeef;
 #endif
@@ -979,11 +980,13 @@ namespace WTF {
     void HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::clear()
     {
         invalidateIterators();
-        deallocateTable(m_table, m_tableSize);
-        m_table = 0;
-        m_tableSize = 0;
-        m_tableSizeMask = 0;
-        m_keyCount = 0;
+        if (m_table) {
+            deallocateTable(m_table, m_tableSize);
+            m_table = 0;
+            m_tableSize = 0;
+            m_tableSizeMask = 0;
+            m_keyCount = 0;
+        }
     }
 
     template&lt;typename Key, typename Value, typename Extractor, typename HashFunctions, typename Traits, typename KeyTraits&gt;

then the minimum parse time goes down to 6.181s, which is a 0.5% speedup relative to trunk.  Again, same idea: make it cheaper to clean up hash tables whose buffers are never allocated.

I don&apos;t know what other impact this has.  JSC + attachment 129277 + these patches is neutral on sunspider, relative to trunk (within 0.1 ms).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566973</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-28 12:32:04 -0800</bug_when>
    <thetext>Optimizing the deletion of empty vectors and hash tables seems like a fine change. Maybe we could land that separately/first?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567573</commentid>
    <comment_count>5</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-29 07:02:07 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Optimizing the deletion of empty vectors and hash tables seems like a fine change. Maybe we could land that separately/first?

Sure.  See bug 79903.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567707</commentid>
    <comment_count>6</comment_count>
      <attachid>129227</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-29 10:25:08 -0800</bug_when>
    <thetext>Comment on attachment 129227
Patch

Looks like this needs to be refactored to account for the patch in bug 79903.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567773</commentid>
    <comment_count>7</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-02-29 11:31:53 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 129227 [details])
&gt; Looks like this needs to be refactored to account for the patch in bug 79903.

For what reason?  Attachment 129227 does not include the patches from comment 3 or bug 79903.

(Not trying to contradict, just seeking clarity :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567785</commentid>
    <comment_count>8</comment_count>
      <attachid>129227</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-29 11:45:10 -0800</bug_when>
    <thetext>Comment on attachment 129227
Patch

Oops! My mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570608</commentid>
    <comment_count>9</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-05 06:00:05 -0800</bug_when>
    <thetext>Anyone willing to review this one?  Geoffrey perhaps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571135</commentid>
    <comment_count>10</comment_count>
      <attachid>129227</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-05 16:12:39 -0800</bug_when>
    <thetext>Comment on attachment 129227
Patch

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

&gt; Source/JavaScriptCore/parser/Nodes.cpp:91
&gt; +    , m_numConstants(numConstants)
&gt; +    , m_statements(children)

Seems problematic to leave these data members uninitialized in the other ScopeNode constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571689</commentid>
    <comment_count>11</comment_count>
      <attachid>130345</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-06 02:46:24 -0800</bug_when>
    <thetext>Created attachment 130345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571694</commentid>
    <comment_count>12</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-06 02:53:06 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 129227 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129227&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/parser/Nodes.cpp:91
&gt; &gt; +    , m_numConstants(numConstants)
&gt; &gt; +    , m_statements(children)
&gt; 
&gt; Seems problematic to leave these data members uninitialized in the other ScopeNode constructor.

Good catch; fixed.

Relative to current trunk, this patch is performance-neutral:

$ cat test.js
for (var i = 0; i &lt; 1000; i++)
  checkSyntax(&quot;/home/wingo/src/WebKit/PerformanceTests/SunSpider/tests/parse-only/concat-jquery-mootools-prototype.js&quot;);

Trunk:
$ time ~/src/WebKit-trunk/WebKitBuild/Release/Programs/jsc test.js
real	0m6.075s
user	0m5.856s
sys	0m0.188s

This patch:
$ time ~/src/WebKit/WebKitBuild/Release/Programs/jsc test.js
real	0m6.046s
user	0m5.776s
sys	0m0.232s

Minimum over 10 runs each.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572314</commentid>
    <comment_count>13</comment_count>
      <attachid>130345</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-03-06 17:19:18 -0800</bug_when>
    <thetext>Comment on attachment 130345
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572699</commentid>
    <comment_count>14</comment_count>
      <attachid>130345</attachid>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-03-07 01:46:51 -0800</bug_when>
    <thetext>Comment on attachment 130345
Patch

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572713</commentid>
    <comment_count>15</comment_count>
      <attachid>130345</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 02:19:00 -0800</bug_when>
    <thetext>Comment on attachment 130345
Patch

Clearing flags on attachment: 130345

Committed r110039: &lt;http://trac.webkit.org/changeset/110039&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572714</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 02:19:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129227</attachid>
            <date>2012-02-28 04:00:06 -0800</date>
            <delta_ts>2012-03-06 02:46:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79776-20120228130004.patch</filename>
            <type>text/plain</type>
            <size>12946</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZDNjYzgyNzFmZjY3MTA0NWNhOGE2NjU2M2I3NjI5YjYwMWRiMDM2Li4wZWNiMzdjY2M2ZjU4YTQ2
MTNmZjI4MjQ0Y2QwOTk3N2Y0MDA0YzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxMi0wMi0yOCAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUGFyc2VyOiBJbmxpbmUgU2NvcGVOb2RlRGF0YSBpbnRvIFNjb3BlTm9kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3NzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCB1c2VkIHRvIGJl
IHRoYXQgc29tZSBTY29wZU5vZGUgbWVtYmVycyB3ZXJlIGtlcHQgaW4gYSBzZXBhcmF0ZQorICAg
ICAgICBzdHJ1Y3R1cmUgYmVjYXVzZSBzb21ldGltZXMgdGhleSB3b3VsZG4ndCBiZSBuZWVkZWQs
IGFuZAorICAgICAgICBhbGxvY2F0aW5nIGEgUGFyc2VyQXJlbmEgd2FzIGV4cGVuc2l2ZS4gIFRo
aXMgcGF0Y2ggbWFrZXMKKyAgICAgICAgUGFyc2VyQXJlbmEgbGF6aWx5IGFsbG9jYXRlIGl0cyBJ
ZGVudGlmaWVyQXJlbmEsIGFsbG93aW5nIHRoZQorICAgICAgICBtZW1iZXJzIHRvIGJlIGluY2x1
ZGVkIGRpcmVjdGx5LCB3aGljaCBpcyBzaW1wbGVyIGFuZCBlYXNpZXIgdG8KKyAgICAgICAgcmVh
c29uIGFib3V0LgorCisgICAgICAgICogcGFyc2VyL1BhcnNlckFyZW5hLmNwcDoKKyAgICAgICAg
KEpTQzo6UGFyc2VyQXJlbmE6OlBhcnNlckFyZW5hKToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJl
bmE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJlbmE6OmlzRW1wdHkpOgorICAgICAg
ICAqIHBhcnNlci9QYXJzZXJBcmVuYS5oOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYTo6aWRl
bnRpZmllckFyZW5hKTogTGF6aWx5IGFsbG9jYXRlIHRoZQorICAgICAgICBJZGVudGlmaWVyQXJl
bmEuCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZU5v
ZGU6OlNjb3BlTm9kZSk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2luZ2xlU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkV2
YWxOb2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUp
OgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OmRl
c3Ryb3lEYXRhKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpuZWVkc0FjdGl2YXRpb25Gb3JN
b3JlVGhhblZhcmlhYmxlcyk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6bmVlZHNBY3RpdmF0
aW9uKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpoYXNDYXB0dXJlZFZhcmlhYmxlcyk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6Y2FwdHVyZWRWYXJpYWJsZUNvdW50KToKKyAgICAgICAg
KEpTQzo6U2NvcGVOb2RlOjpjYXB0dXJlcyk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6dmFy
U3RhY2spOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OmZ1bmN0aW9uU3RhY2spOgorICAgICAg
ICAoSlNDOjpTY29wZU5vZGU6Om5lZWRlZENvbnN0YW50cyk6CisgICAgICAgIChTY29wZU5vZGUp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlND
OjpTY29wZU5vZGU6OmVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUpOiBJbmxpbmUgU2NvcGVOb2RlRGF0
YQorICAgICAgICBpbnRvIFNjb3BlTm9kZS4gIEFkYXB0IGFjY2Vzc29ycy4KKwogMjAxMi0wMi0y
NiAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3Zl
IENocm9tZUNsaWVudDo6c2hvd0NvbnRleHRNZW51KCkgdG8gQ29udGV4dE1lbnVDbGllbnQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cAppbmRleCAyZDQxODE5MTJjYTViOTEwMzkxOWJmOTA3MDMzYjZlYTVhZTBhZDk1Li4yNjFjMDQ1
NWQ0M2Q5MDgwYjMwMGY1ZTM4ZTYyMTE4ZGVmN2U5ZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMDA5LDggKzIw
MDksOCBAQCBSZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogCiBpbmxpbmUgdm9pZCBTY29wZU5vZGU6
OmVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewotICAgIGlmIChtX2RhdGEtPm1fc3RhdGVtZW50cykKLSAgICAgICAg
bV9kYXRhLT5tX3N0YXRlbWVudHMtPmVtaXRCeXRlY29kZShnZW5lcmF0b3IsIGRzdCk7CisgICAg
aWYgKG1fc3RhdGVtZW50cykKKyAgICAgICAgbV9zdGF0ZW1lbnRzLT5lbWl0Qnl0ZWNvZGUoZ2Vu
ZXJhdG9yLCBkc3QpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJv
Z3JhbU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5jcHAKaW5kZXggOGFkNDc0ZTU0MTUzODllN2UwNTgxMWVlZGFmZjA3YzY4
NjU5ODcxMC4uODFkMWY1MjQ5N2ZjZTM1MWI5MWNhMmJmY2QyYzFjMGUzYjcwYTgyNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKQEAgLTczLDIwICs3Myw2IEBAIFN0YXRl
bWVudE5vZGUqIFNvdXJjZUVsZW1lbnRzOjpzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdAogICAgIHJl
dHVybiBzaXplID09IDEgPyBtX3N0YXRlbWVudHNbMF0gOiAwOwogfQogCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVNjb3BlTm9kZURhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLVNjb3BlTm9kZURhdGE6OlNjb3BlTm9kZURhdGEoUGFyc2VyQXJlbmEmIGFyZW5hLCBT
b3VyY2VFbGVtZW50cyogc3RhdGVtZW50cywgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0
YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBpbnQgbnVt
Q29uc3RhbnRzKQotICAgIDogbV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQotICAgICwgbV9z
dGF0ZW1lbnRzKHN0YXRlbWVudHMpCi17Ci0gICAgbV9hcmVuYS5zd2FwKGFyZW5hKTsKLSAgICBp
ZiAodmFyU3RhY2spCi0gICAgICAgIG1fdmFyU3RhY2suc3dhcCgqdmFyU3RhY2spOwotICAgIGlm
IChmdW5jU3RhY2spCi0gICAgICAgIG1fZnVuY3Rpb25TdGFjay5zd2FwKCpmdW5jU3RhY2spOwot
ICAgIG1fY2FwdHVyZWRWYXJpYWJsZXMuc3dhcChjYXB0dXJlZFZhcmlhYmxlcyk7Ci19Ci0KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTY29wZU5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBpbnQgbGluZU51bWJlciwgYm9vbCBpblN0cmljdENvbnRleHQpCkBAIC05OSwxNSAr
ODUsMjIgQEAgU2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBp
bnQgbGluZU51bWJlciwgYm9vbCBpblN0cmljdENvbnQKIFNjb3BlTm9kZTo6U2NvcGVOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1
bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgSWRlbnRpZmllclNldCYgY2FwdHVyZWRWYXJpYWJsZXMs
IENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IG51bUNvbnN0YW50cykKICAgICA6IFN0YXRlbWVu
dE5vZGUobGluZU51bWJlcikKICAgICAsIFBhcnNlckFyZW5hUmVmQ291bnRlZChnbG9iYWxEYXRh
KQotICAgICwgbV9kYXRhKGFkb3B0UHRyKG5ldyBTY29wZU5vZGVEYXRhKCpnbG9iYWxEYXRhLT5w
YXJzZXJBcmVuYSwgY2hpbGRyZW4sIHZhclN0YWNrLCBmdW5jU3RhY2ssIGNhcHR1cmVkVmFyaWFi
bGVzLCBudW1Db25zdGFudHMpKSkKICAgICAsIG1fZmVhdHVyZXMoZmVhdHVyZXMpCiAgICAgLCBt
X3NvdXJjZShzb3VyY2UpCisgICAgLCBtX251bUNvbnN0YW50cyhudW1Db25zdGFudHMpCisgICAg
LCBtX3N0YXRlbWVudHMoY2hpbGRyZW4pCiB7CisgICAgbV9hcmVuYS5zd2FwKCpnbG9iYWxEYXRh
LT5wYXJzZXJBcmVuYSk7CisgICAgaWYgKHZhclN0YWNrKQorICAgICAgICBtX3ZhclN0YWNrLnN3
YXAoKnZhclN0YWNrKTsKKyAgICBpZiAoZnVuY1N0YWNrKQorICAgICAgICBtX2Z1bmN0aW9uU3Rh
Y2suc3dhcCgqZnVuY1N0YWNrKTsKKyAgICBtX2NhcHR1cmVkVmFyaWFibGVzLnN3YXAoY2FwdHVy
ZWRWYXJpYWJsZXMpOwogfQogCiBTdGF0ZW1lbnROb2RlKiBTY29wZU5vZGU6OnNpbmdsZVN0YXRl
bWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9zdGF0ZW1lbnRzID8gbV9kYXRh
LT5tX3N0YXRlbWVudHMtPnNpbmdsZVN0YXRlbWVudCgpIDogMDsKKyAgICByZXR1cm4gbV9zdGF0
ZW1lbnRzID8gbV9zdGF0ZW1lbnRzLT5zaW5nbGVTdGF0ZW1lbnQoKSA6IDA7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpAQCAtMTIxLDkgKzExNCw5IEBAIFBhc3NSZWZQdHI8UHJvZ3JhbU5vZGU+
IFByb2dyYW1Ob2RlOjpjcmVhdGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51
CiB7CiAgICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBub2RlID0gbmV3IFByb2dyYW1Ob2RlKGdsb2Jh
bERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCAgY2FwdHVy
ZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKLSAgICBBU1NF
UlQobm9kZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKLSAgICBub2RlLT5kYXRh
KCktPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwotICAgIEFTU0VSVCghbm9kZS0+ZGF0YSgpLT5tX2Fy
ZW5hLmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKKyAgICBBU1NFUlQobm9kZS0+bV9hcmVuYS5sYXN0
KCkgPT0gbm9kZSk7CisgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CisgICAgQVNTRVJU
KCFub2RlLT5tX2FyZW5hLmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKIAogICAgIHJldHVybiBub2Rl
LnJlbGVhc2UoKTsKIH0KQEAgLTEzOSw5ICsxMzIsOSBAQCBQYXNzUmVmUHRyPEV2YWxOb2RlPiBF
dmFsTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgaW50IGxpbmVOdW1iZXIs
CiB7CiAgICAgUmVmUHRyPEV2YWxOb2RlPiBub2RlID0gbmV3IEV2YWxOb2RlKGdsb2JhbERhdGEs
IGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0dXJlZFZhcmlh
Ymxlcywgc291cmNlLCBmZWF0dXJlcywgbnVtQ29uc3RhbnRzKTsKIAotICAgIEFTU0VSVChub2Rl
LT5kYXRhKCktPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOwotICAgIG5vZGUtPmRhdGEoKS0+bV9h
cmVuYS5yZW1vdmVMYXN0KCk7Ci0gICAgQVNTRVJUKCFub2RlLT5kYXRhKCktPm1fYXJlbmEuY29u
dGFpbnMobm9kZS5nZXQoKSkpOworICAgIEFTU0VSVChub2RlLT5tX2FyZW5hLmxhc3QoKSA9PSBu
b2RlKTsKKyAgICBub2RlLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKKyAgICBBU1NFUlQoIW5vZGUt
Pm1fYXJlbmEuY29udGFpbnMobm9kZS5nZXQoKSkpOwogCiAgICAgcmV0dXJuIG5vZGUucmVsZWFz
ZSgpOwogfQpAQCAtMTg2LDkgKzE3OSw5IEBAIFBhc3NSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4g
RnVuY3Rpb25Cb2R5Tm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwKIHsKICAg
ICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gbm9kZSA9IG5ldyBGdW5jdGlvbkJvZHlOb2RlKGds
b2JhbERhdGEsIGxpbmVOdW1iZXIsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVuY1N0YWNrLCBjYXB0
dXJlZFZhcmlhYmxlcywgc291cmNlQ29kZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50cyk7CiAKLSAg
ICBBU1NFUlQobm9kZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsKLSAgICBub2Rl
LT5kYXRhKCktPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwotICAgIEFTU0VSVCghbm9kZS0+ZGF0YSgp
LT5tX2FyZW5hLmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKKyAgICBBU1NFUlQobm9kZS0+bV9hcmVu
YS5sYXN0KCkgPT0gbm9kZSk7CisgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0KCk7CisgICAg
QVNTRVJUKCFub2RlLT5tX2FyZW5hLmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKIAogICAgIHJldHVy
biBub2RlLnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRl
eCAwMzczNzY2YjVkOGVkOTM5OGRiZmNkZDIzY2UxMDBiNTA5ZjBlZTgwLi5jMDgzNWIxYmZmMGIy
ZTlhOWE0NjcwMzJlNWNlZGY3MzQwMGJmNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9O
b2Rlcy5oCkBAIC0xMzY5LDIyICsxMzY5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFBh
cmFtZXRlck5vZGUqIG1fbmV4dDsKICAgICB9OwogCi0gICAgc3RydWN0IFNjb3BlTm9kZURhdGEg
ewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrIFZhclN0YWNrOwotICAgICAgICB0
eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrIEZ1bmN0aW9uU3RhY2s7Ci0K
LSAgICAgICAgU2NvcGVOb2RlRGF0YShQYXJzZXJBcmVuYSYsIFNvdXJjZUVsZW1lbnRzKiwgVmFy
U3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgSWRlbnRpZmllclNldCYsIGludCBudW1Db25zdGFudHMp
OwotCi0gICAgICAgIFBhcnNlckFyZW5hIG1fYXJlbmE7Ci0gICAgICAgIFZhclN0YWNrIG1fdmFy
U3RhY2s7Ci0gICAgICAgIEZ1bmN0aW9uU3RhY2sgbV9mdW5jdGlvblN0YWNrOwotICAgICAgICBp
bnQgbV9udW1Db25zdGFudHM7Ci0gICAgICAgIFNvdXJjZUVsZW1lbnRzKiBtX3N0YXRlbWVudHM7
Ci0gICAgICAgIElkZW50aWZpZXJTZXQgbV9jYXB0dXJlZFZhcmlhYmxlczsKLSAgICB9OwotCiAg
ICAgY2xhc3MgU2NvcGVOb2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUsIHB1YmxpYyBQYXJzZXJB
cmVuYVJlZkNvdW50ZWQgewogICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlv
blN0YWNrczo6VmFyU3RhY2sgVmFyU3RhY2s7CkBAIC0xMzk1LDggKzEzNzksMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdXNpbmcgUGFyc2VyQXJlbmFSZWZDb3VudGVkOjpvcGVyYXRv
ciBuZXc7CiAKLSAgICAgICAgU2NvcGVOb2RlRGF0YSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YS5nZXQoKTsgfQotICAgICAgICB2b2lkIGRlc3Ryb3lEYXRhKCkgeyBtX2RhdGEuY2xlYXIo
KTsgfQorICAgICAgICB2b2lkIGRlc3Ryb3lEYXRhKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9hcmVuYS5yZXNldCgpOworICAgICAgICAgICAgbV92YXJTdGFjay5jbGVhcigpOworICAgICAg
ICAgICAgbV9mdW5jdGlvblN0YWNrLmNsZWFyKCk7CisgICAgICAgICAgICBtX3N0YXRlbWVudHMg
PSAwOworICAgICAgICAgICAgbV9jYXB0dXJlZFZhcmlhYmxlcy5jbGVhcigpOworICAgICAgICB9
CiAKICAgICAgICAgY29uc3QgU291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9z
b3VyY2U7IH0KICAgICAgICAgY29uc3QgVVN0cmluZyYgc291cmNlVVJMKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2UucHJvdmlkZXIoKS0+dXJsKCk7IH0KQEAgLTE0MTAsMjEgKzE0MDAsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9mZWF0dXJlcyAmIFN0cmljdE1vZGVGZWF0dXJlOyB9CiAgICAgICAgIHZvaWQgc2V0VXNl
c0FyZ3VtZW50cygpIHsgbV9mZWF0dXJlcyB8PSBBcmd1bWVudHNGZWF0dXJlOyB9CiAgICAgICAg
IGJvb2wgdXNlc1RoaXMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgVGhpc0ZlYXR1cmU7
IH0KLSAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpIGNv
bnN0IHsgQVNTRVJUKG1fZGF0YSk7IHJldHVybiBtX2ZlYXR1cmVzICYgKEV2YWxGZWF0dXJlIHwg
V2l0aEZlYXR1cmUgfCBDYXRjaEZlYXR1cmUpOyB9Ci0gICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0
aW9uKCkgY29uc3QgeyBBU1NFUlQobV9kYXRhKTsgcmV0dXJuIChoYXNDYXB0dXJlZFZhcmlhYmxl
cygpKSB8fCAobV9mZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hG
ZWF0dXJlKSk7IH0KLSAgICAgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsg
cmV0dXJuICEhbV9kYXRhLT5tX2NhcHR1cmVkVmFyaWFibGVzLnNpemUoKTsgfQotICAgICAgICBz
aXplX3QgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLT5tX2Nh
cHR1cmVkVmFyaWFibGVzLnNpemUoKTsgfQotICAgICAgICBib29sIGNhcHR1cmVzKGNvbnN0IElk
ZW50aWZpZXImIGlkZW50KSB7IHJldHVybiBtX2RhdGEtPm1fY2FwdHVyZWRWYXJpYWJsZXMuY29u
dGFpbnMoaWRlbnQuaW1wbCgpKTsgfQorICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbkZvck1v
cmVUaGFuVmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIChFdmFsRmVhdHVy
ZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hGZWF0dXJlKTsgfQorICAgICAgICBib29sIG5lZWRzQWN0
aXZhdGlvbigpIGNvbnN0IHsgcmV0dXJuIChoYXNDYXB0dXJlZFZhcmlhYmxlcygpKSB8fCAobV9m
ZWF0dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hGZWF0dXJlKSk7IH0K
KyAgICAgICAgYm9vbCBoYXNDYXB0dXJlZFZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuICEhbV9j
YXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICAgICAgc2l6ZV90IGNhcHR1cmVkVmFyaWFi
bGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpOyB9Cisg
ICAgICAgIGJvb2wgY2FwdHVyZXMoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIHsgcmV0dXJuIG1f
Y2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnMoaWRlbnQuaW1wbCgpKTsgfQogCi0gICAgICAgIFZh
clN0YWNrJiB2YXJTdGFjaygpIHsgQVNTRVJUKG1fZGF0YSk7IHJldHVybiBtX2RhdGEtPm1fdmFy
U3RhY2s7IH0KLSAgICAgICAgRnVuY3Rpb25TdGFjayYgZnVuY3Rpb25TdGFjaygpIHsgQVNTRVJU
KG1fZGF0YSk7IHJldHVybiBtX2RhdGEtPm1fZnVuY3Rpb25TdGFjazsgfQorICAgICAgICBWYXJT
dGFjayYgdmFyU3RhY2soKSB7IHJldHVybiBtX3ZhclN0YWNrOyB9CisgICAgICAgIEZ1bmN0aW9u
U3RhY2smIGZ1bmN0aW9uU3RhY2soKSB7IHJldHVybiBtX2Z1bmN0aW9uU3RhY2s7IH0KIAogICAg
ICAgICBpbnQgbmVlZGVkQ29uc3RhbnRzKCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KG1fZGF0YSk7CiAgICAgICAgICAgICAvLyBXZSBtYXkgbmVlZCAyIG1vcmUgY29uc3RhbnRzIHRo
YW4gdGhlIGNvdW50IGdpdmVuIGJ5IHRoZSBwYXJzZXIsCiAgICAgICAgICAgICAvLyBiZWNhdXNl
IG9mIHRoZSB2YXJpb3VzIHVzZXMgb2YganNVbmRlZmluZWQoKSBhbmQganNOdWxsKCkuCi0gICAg
ICAgICAgICByZXR1cm4gbV9kYXRhLT5tX251bUNvbnN0YW50cyArIDI7CisgICAgICAgICAgICBy
ZXR1cm4gbV9udW1Db25zdGFudHMgKyAyOwogICAgICAgICB9CiAKICAgICAgICAgU3RhdGVtZW50
Tm9kZSogc2luZ2xlU3RhdGVtZW50KCkgY29uc3Q7CkBAIC0xNDMzLDExICsxNDIyLDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIHNldFNvdXJjZShj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpIHsgbV9zb3VyY2UgPSBzb3VyY2U7IH0KKyAgICAgICAg
UGFyc2VyQXJlbmEgbV9hcmVuYTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIE93blB0cjxTY29w
ZU5vZGVEYXRhPiBtX2RhdGE7CiAgICAgICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogICAg
ICAgICBTb3VyY2VDb2RlIG1fc291cmNlOworICAgICAgICBWYXJTdGFjayBtX3ZhclN0YWNrOwor
ICAgICAgICBGdW5jdGlvblN0YWNrIG1fZnVuY3Rpb25TdGFjazsKKyAgICAgICAgaW50IG1fbnVt
Q29uc3RhbnRzOworICAgICAgICBTb3VyY2VFbGVtZW50cyogbV9zdGF0ZW1lbnRzOworICAgICAg
ICBJZGVudGlmaWVyU2V0IG1fY2FwdHVyZWRWYXJpYWJsZXM7CiAgICAgfTsKIAogICAgIGNsYXNz
IFByb2dyYW1Ob2RlIDogcHVibGljIFNjb3BlTm9kZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCmluZGV4IDU2YzU4ZGFjZjE1ZWUxNjA0NGY0M2EyOGY3
NjlkMzA1OGVlNTQ5YWUuLmM1M2YzMDc1M2YyZjcxMmJmOWI3NTFjMDY4NGNkNmRlZTVhMjQwYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuY3BwCkBAIC0z
NCw3ICszNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogUGFyc2VyQXJlbmE6OlBhcnNlckFyZW5hKCkK
ICAgICA6IG1fZnJlZWFibGVNZW1vcnkoMCkKICAgICAsIG1fZnJlZWFibGVQb29sRW5kKDApCi0g
ICAgLCBtX2lkZW50aWZpZXJBcmVuYShhZG9wdFB0cihuZXcgSWRlbnRpZmllckFyZW5hKSkKIHsK
IH0KIApAQCAtODgsNyArODcsOCBAQCB2b2lkIFBhcnNlckFyZW5hOjpyZXNldCgpCiAKICAgICBt
X2ZyZWVhYmxlTWVtb3J5ID0gMDsKICAgICBtX2ZyZWVhYmxlUG9vbEVuZCA9IDA7Ci0gICAgbV9p
ZGVudGlmaWVyQXJlbmEtPmNsZWFyKCk7CisgICAgaWYgKG1faWRlbnRpZmllckFyZW5hKQorICAg
ICAgICBtX2lkZW50aWZpZXJBcmVuYS0+Y2xlYXIoKTsKICAgICBtX2ZyZWVhYmxlUG9vbHMuY2xl
YXIoKTsKICAgICBtX2RlbGV0YWJsZU9iamVjdHMuY2xlYXIoKTsKICAgICBtX3JlZkNvdW50ZWRP
YmplY3RzLmNsZWFyKCk7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBQYXJzZXJBcmVuYTo6YWxs
b2NhdGVGcmVlYWJsZVBvb2woKQogYm9vbCBQYXJzZXJBcmVuYTo6aXNFbXB0eSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuICFtX2ZyZWVhYmxlUG9vbEVuZAotICAgICAgICAmJiBtX2lkZW50aWZpZXJB
cmVuYS0+aXNFbXB0eSgpCisgICAgICAgICYmICghbV9pZGVudGlmaWVyQXJlbmEgfHwgbV9pZGVu
dGlmaWVyQXJlbmEtPmlzRW1wdHkoKSkKICAgICAgICAgJiYgbV9mcmVlYWJsZVBvb2xzLmlzRW1w
dHkoKQogICAgICAgICAmJiBtX2RlbGV0YWJsZU9iamVjdHMuaXNFbXB0eSgpCiAgICAgICAgICYm
IG1fcmVmQ291bnRlZE9iamVjdHMuaXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXJBcmVuYS5oCmluZGV4IDQ5ZjBhYjZiZjg0MjJiODkwNTc5YTBiODRkMDcyM2Fm
NjQ2MzA4NjguLjA2N2I4M2EyNjJmMTIwZWFhZWFkYTlmMWRlMmFkYTM1Nzc5MDA5Y2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgKQEAgLTE2MSw3ICsxNjEs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2V0KCk7CiAKLSAgICAgICAgSWRlbnRpZmll
ckFyZW5hJiBpZGVudGlmaWVyQXJlbmEoKSB7IHJldHVybiAqbV9pZGVudGlmaWVyQXJlbmE7IH0K
KyAgICAgICAgSWRlbnRpZmllckFyZW5hJiBpZGVudGlmaWVyQXJlbmEoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkgKCFtX2lkZW50aWZpZXJBcmVuYSkpCisgICAgICAgICAg
ICAgICAgbV9pZGVudGlmaWVyQXJlbmEgPSBhZG9wdFB0cihuZXcgSWRlbnRpZmllckFyZW5hKTsK
KyAgICAgICAgICAgIHJldHVybiAqbV9pZGVudGlmaWVyQXJlbmE7CisgICAgICAgIH0KIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZnJlZWFibGVQb29sU2l6ZSA9
IDgwMDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130345</attachid>
            <date>2012-03-06 02:46:24 -0800</date>
            <delta_ts>2012-03-07 02:19:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79776-20120306114622.patch</filename>
            <type>text/plain</type>
            <size>13025</size>
            <attacher name="Andy Wingo">wingo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA5ODgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
M2E5ZjBhZGRlMDc5YzU0ZmFlM2YxYzg3Njg1MGM1NTJlZjkxNmQxLi4xNWE5YTNkMjNiNmRhYmE4
ZTcyNzlkN2Y5NTVmOThmYjVkOWYxNDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxMi0wMy0wNiAgQW5keSBXaW5nbyAgPHdpbmdvQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUGFyc2VyOiBJbmxpbmUgU2NvcGVOb2RlRGF0YSBpbnRvIFNjb3BlTm9kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk3NzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCB1c2VkIHRvIGJl
IHRoYXQgc29tZSBTY29wZU5vZGUgbWVtYmVycyB3ZXJlIGtlcHQgaW4gYSBzZXBhcmF0ZQorICAg
ICAgICBzdHJ1Y3R1cmUgYmVjYXVzZSBzb21ldGltZXMgdGhleSB3b3VsZG4ndCBiZSBuZWVkZWQs
IGFuZAorICAgICAgICBhbGxvY2F0aW5nIGEgUGFyc2VyQXJlbmEgd2FzIGV4cGVuc2l2ZS4gIFRo
aXMgcGF0Y2ggbWFrZXMKKyAgICAgICAgUGFyc2VyQXJlbmEgbGF6aWx5IGFsbG9jYXRlIGl0cyBJ
ZGVudGlmaWVyQXJlbmEsIGFsbG93aW5nIHRoZQorICAgICAgICBtZW1iZXJzIHRvIGJlIGluY2x1
ZGVkIGRpcmVjdGx5LCB3aGljaCBpcyBzaW1wbGVyIGFuZCBlYXNpZXIgdG8KKyAgICAgICAgcmVh
c29uIGFib3V0LgorCisgICAgICAgICogcGFyc2VyL1BhcnNlckFyZW5hLmNwcDoKKyAgICAgICAg
KEpTQzo6UGFyc2VyQXJlbmE6OlBhcnNlckFyZW5hKToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJl
bmE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6UGFyc2VyQXJlbmE6OmlzRW1wdHkpOgorICAgICAg
ICAqIHBhcnNlci9QYXJzZXJBcmVuYS5oOgorICAgICAgICAoSlNDOjpQYXJzZXJBcmVuYTo6aWRl
bnRpZmllckFyZW5hKTogTGF6aWx5IGFsbG9jYXRlIHRoZQorICAgICAgICBJZGVudGlmaWVyQXJl
bmEuCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlNDOjpTY29wZU5v
ZGU6OlNjb3BlTm9kZSk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6c2luZ2xlU3RhdGVtZW50
KToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkV2
YWxOb2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkJvZHlOb2RlOjpjcmVhdGUp
OgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OmRl
c3Ryb3lEYXRhKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpuZWVkc0FjdGl2YXRpb25Gb3JN
b3JlVGhhblZhcmlhYmxlcyk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6bmVlZHNBY3RpdmF0
aW9uKToKKyAgICAgICAgKEpTQzo6U2NvcGVOb2RlOjpoYXNDYXB0dXJlZFZhcmlhYmxlcyk6Cisg
ICAgICAgIChKU0M6OlNjb3BlTm9kZTo6Y2FwdHVyZWRWYXJpYWJsZUNvdW50KToKKyAgICAgICAg
KEpTQzo6U2NvcGVOb2RlOjpjYXB0dXJlcyk6CisgICAgICAgIChKU0M6OlNjb3BlTm9kZTo6dmFy
U3RhY2spOgorICAgICAgICAoSlNDOjpTY29wZU5vZGU6OmZ1bmN0aW9uU3RhY2spOgorICAgICAg
ICAoSlNDOjpTY29wZU5vZGU6Om5lZWRlZENvbnN0YW50cyk6CisgICAgICAgIChTY29wZU5vZGUp
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlND
OjpTY29wZU5vZGU6OmVtaXRTdGF0ZW1lbnRzQnl0ZWNvZGUpOiBJbmxpbmUgU2NvcGVOb2RlRGF0
YQorICAgICAgICBpbnRvIFNjb3BlTm9kZS4gIEFkYXB0IGFjY2Vzc29ycy4KKwogMjAxMi0wMy0w
NSAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCB3aW5kb3dzIGJ1aWxkIGZpeCBwdCAyLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDczYzJjYWEzN2Qw
MDAwNmUzMWEzNWI5NGMyY2IxNzJjNGE3MTcwMDkuLmJiOTVjYWZiNjgyNjNhOWJmNTEwYWE0ZTQy
MjdmNWVhNDNhM2VlOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKQEAgLTIwMTcsOCArMjAxNyw4IEBAIFJlZ2lzdGVySUQq
IFRyeU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdp
c3RlcklEKiBkc3QpCiAKIGlubGluZSB2b2lkIFNjb3BlTm9kZTo6ZW1pdFN0YXRlbWVudHNCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Ci0g
ICAgaWYgKG1fZGF0YS0+bV9zdGF0ZW1lbnRzKQotICAgICAgICBtX2RhdGEtPm1fc3RhdGVtZW50
cy0+ZW1pdEJ5dGVjb2RlKGdlbmVyYXRvciwgZHN0KTsKKyAgICBpZiAobV9zdGF0ZW1lbnRzKQor
ICAgICAgICBtX3N0YXRlbWVudHMtPmVtaXRCeXRlY29kZShnZW5lcmF0b3IsIGRzdCk7CiB9CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQcm9ncmFtTm9kZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcApp
bmRleCA4YWQ0NzRlNTQxNTM4OWU3ZTA1ODExZWVkYWZmMDdjNjg2NTk4NzEwLi5jMzJlNGM3M2Ey
NGViZWIyMzNjZDVlMDFmZmZkNjNhNDg2ODVjODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmNwcApAQCAtNzMsNDEgKzczLDM2IEBAIFN0YXRlbWVudE5vZGUqIFNvdXJjZUVs
ZW1lbnRzOjpzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdAogICAgIHJldHVybiBzaXplID09IDEgPyBt
X3N0YXRlbWVudHNbMF0gOiAwOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVNjb3BlTm9kZURhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNjb3BlTm9kZURh
dGE6OlNjb3BlTm9kZURhdGEoUGFyc2VyQXJlbmEmIGFyZW5hLCBTb3VyY2VFbGVtZW50cyogc3Rh
dGVtZW50cywgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElk
ZW50aWZpZXJTZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBpbnQgbnVtQ29uc3RhbnRzKQotICAgIDog
bV9udW1Db25zdGFudHMobnVtQ29uc3RhbnRzKQotICAgICwgbV9zdGF0ZW1lbnRzKHN0YXRlbWVu
dHMpCi17Ci0gICAgbV9hcmVuYS5zd2FwKGFyZW5hKTsKLSAgICBpZiAodmFyU3RhY2spCi0gICAg
ICAgIG1fdmFyU3RhY2suc3dhcCgqdmFyU3RhY2spOwotICAgIGlmIChmdW5jU3RhY2spCi0gICAg
ICAgIG1fZnVuY3Rpb25TdGFjay5zd2FwKCpmdW5jU3RhY2spOwotICAgIG1fY2FwdHVyZWRWYXJp
YWJsZXMuc3dhcChjYXB0dXJlZFZhcmlhYmxlcyk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBTY29wZU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
U2NvcGVOb2RlOjpTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgbGluZU51
bWJlciwgYm9vbCBpblN0cmljdENvbnRleHQpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1i
ZXIpCiAgICAgLCBQYXJzZXJBcmVuYVJlZkNvdW50ZWQoZ2xvYmFsRGF0YSkKICAgICAsIG1fZmVh
dHVyZXMoaW5TdHJpY3RDb250ZXh0ID8gU3RyaWN0TW9kZUZlYXR1cmUgOiBOb0ZlYXR1cmVzKQor
ICAgICwgbV9udW1Db25zdGFudHMoMCkKKyAgICAsIG1fc3RhdGVtZW50cygwKQogewogfQogCiBT
Y29wZU5vZGU6OlNjb3BlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwg
VmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIElkZW50aWZpZXJT
ZXQmIGNhcHR1cmVkVmFyaWFibGVzLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBudW1Db25z
dGFudHMpCiAgICAgOiBTdGF0ZW1lbnROb2RlKGxpbmVOdW1iZXIpCiAgICAgLCBQYXJzZXJBcmVu
YVJlZkNvdW50ZWQoZ2xvYmFsRGF0YSkKLSAgICAsIG1fZGF0YShhZG9wdFB0cihuZXcgU2NvcGVO
b2RlRGF0YSgqZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEsIGNoaWxkcmVuLCB2YXJTdGFjaywgZnVu
Y1N0YWNrLCBjYXB0dXJlZFZhcmlhYmxlcywgbnVtQ29uc3RhbnRzKSkpCiAgICAgLCBtX2ZlYXR1
cmVzKGZlYXR1cmVzKQogICAgICwgbV9zb3VyY2Uoc291cmNlKQorICAgICwgbV9udW1Db25zdGFu
dHMobnVtQ29uc3RhbnRzKQorICAgICwgbV9zdGF0ZW1lbnRzKGNoaWxkcmVuKQogeworICAgIG1f
YXJlbmEuc3dhcCgqZ2xvYmFsRGF0YS0+cGFyc2VyQXJlbmEpOworICAgIGlmICh2YXJTdGFjaykK
KyAgICAgICAgbV92YXJTdGFjay5zd2FwKCp2YXJTdGFjayk7CisgICAgaWYgKGZ1bmNTdGFjaykK
KyAgICAgICAgbV9mdW5jdGlvblN0YWNrLnN3YXAoKmZ1bmNTdGFjayk7CisgICAgbV9jYXB0dXJl
ZFZhcmlhYmxlcy5zd2FwKGNhcHR1cmVkVmFyaWFibGVzKTsKIH0KIAogU3RhdGVtZW50Tm9kZSog
U2NvcGVOb2RlOjpzaW5nbGVTdGF0ZW1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEt
Pm1fc3RhdGVtZW50cyA/IG1fZGF0YS0+bV9zdGF0ZW1lbnRzLT5zaW5nbGVTdGF0ZW1lbnQoKSA6
IDA7CisgICAgcmV0dXJuIG1fc3RhdGVtZW50cyA/IG1fc3RhdGVtZW50cy0+c2luZ2xlU3RhdGVt
ZW50KCkgOiAwOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJvZ3Jh
bU5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMSw5ICsxMTYsOSBAQCBQ
YXNzUmVmUHRyPFByb2dyYW1Ob2RlPiBQcm9ncmFtTm9kZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgaW50IGxpbmVOdQogewogICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gbm9kZSA9
IG5ldyBQcm9ncmFtTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBjaGlsZHJlbiwgdmFyU3Rh
Y2ssIGZ1bmNTdGFjaywgIGNhcHR1cmVkVmFyaWFibGVzLCBzb3VyY2UsIGZlYXR1cmVzLCBudW1D
b25zdGFudHMpOwogCi0gICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5sYXN0KCkgPT0g
bm9kZSk7Ci0gICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKLSAgICBBU1NF
UlQoIW5vZGUtPmRhdGEoKS0+bV9hcmVuYS5jb250YWlucyhub2RlLmdldCgpKSk7CisgICAgQVNT
RVJUKG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOworICAgIG5vZGUtPm1fYXJlbmEucmVt
b3ZlTGFzdCgpOworICAgIEFTU0VSVCghbm9kZS0+bV9hcmVuYS5jb250YWlucyhub2RlLmdldCgp
KSk7CiAKICAgICByZXR1cm4gbm9kZS5yZWxlYXNlKCk7CiB9CkBAIC0xMzksOSArMTM0LDkgQEAg
UGFzc1JlZlB0cjxFdmFsTm9kZT4gRXZhbE5vZGU6OmNyZWF0ZShKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIGludCBsaW5lTnVtYmVyLAogewogICAgIFJlZlB0cjxFdmFsTm9kZT4gbm9kZSA9IG5l
dyBFdmFsTm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBjaGlsZHJlbiwgdmFyU3RhY2ssIGZ1
bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZSwgZmVhdHVyZXMsIG51bUNvbnN0YW50
cyk7CiAKLSAgICBBU1NFUlQobm9kZS0+ZGF0YSgpLT5tX2FyZW5hLmxhc3QoKSA9PSBub2RlKTsK
LSAgICBub2RlLT5kYXRhKCktPm1fYXJlbmEucmVtb3ZlTGFzdCgpOwotICAgIEFTU0VSVCghbm9k
ZS0+ZGF0YSgpLT5tX2FyZW5hLmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKKyAgICBBU1NFUlQobm9k
ZS0+bV9hcmVuYS5sYXN0KCkgPT0gbm9kZSk7CisgICAgbm9kZS0+bV9hcmVuYS5yZW1vdmVMYXN0
KCk7CisgICAgQVNTRVJUKCFub2RlLT5tX2FyZW5hLmNvbnRhaW5zKG5vZGUuZ2V0KCkpKTsKIAog
ICAgIHJldHVybiBub2RlLnJlbGVhc2UoKTsKIH0KQEAgLTE4Niw5ICsxODEsOSBAQCBQYXNzUmVm
UHRyPEZ1bmN0aW9uQm9keU5vZGU+IEZ1bmN0aW9uQm9keU5vZGU6OmNyZWF0ZShKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsCiB7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG5vZGUgPSBu
ZXcgRnVuY3Rpb25Cb2R5Tm9kZShnbG9iYWxEYXRhLCBsaW5lTnVtYmVyLCBjaGlsZHJlbiwgdmFy
U3RhY2ssIGZ1bmNTdGFjaywgY2FwdHVyZWRWYXJpYWJsZXMsIHNvdXJjZUNvZGUsIGZlYXR1cmVz
LCBudW1Db25zdGFudHMpOwogCi0gICAgQVNTRVJUKG5vZGUtPmRhdGEoKS0+bV9hcmVuYS5sYXN0
KCkgPT0gbm9kZSk7Ci0gICAgbm9kZS0+ZGF0YSgpLT5tX2FyZW5hLnJlbW92ZUxhc3QoKTsKLSAg
ICBBU1NFUlQoIW5vZGUtPmRhdGEoKS0+bV9hcmVuYS5jb250YWlucyhub2RlLmdldCgpKSk7Cisg
ICAgQVNTRVJUKG5vZGUtPm1fYXJlbmEubGFzdCgpID09IG5vZGUpOworICAgIG5vZGUtPm1fYXJl
bmEucmVtb3ZlTGFzdCgpOworICAgIEFTU0VSVCghbm9kZS0+bV9hcmVuYS5jb250YWlucyhub2Rl
LmdldCgpKSk7CiAKICAgICByZXR1cm4gbm9kZS5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmgKaW5kZXggZWE3MzlkNTA0ZGJlODI2Nzc5ODRhOTVkOGQ2Y2YxMmQ2
Y2UyY2U2MS4uMjZjODI5ZGE2ZjViOGUxYTFjZTUyNTA0MmRkOGU3NGIzYmMzMGIxNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMTM3OCwyMiArMTM3OCw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBQYXJhbWV0ZXJOb2RlKiBtX25leHQ7CiAgICAgfTsKIAotICAg
IHN0cnVjdCBTY29wZU5vZGVEYXRhIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci0gICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFj
ayBWYXJTdGFjazsKLSAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25T
dGFjayBGdW5jdGlvblN0YWNrOwotCi0gICAgICAgIFNjb3BlTm9kZURhdGEoUGFyc2VyQXJlbmEm
LCBTb3VyY2VFbGVtZW50cyosIFZhclN0YWNrKiwgRnVuY3Rpb25TdGFjayosIElkZW50aWZpZXJT
ZXQmLCBpbnQgbnVtQ29uc3RhbnRzKTsKLQotICAgICAgICBQYXJzZXJBcmVuYSBtX2FyZW5hOwot
ICAgICAgICBWYXJTdGFjayBtX3ZhclN0YWNrOwotICAgICAgICBGdW5jdGlvblN0YWNrIG1fZnVu
Y3Rpb25TdGFjazsKLSAgICAgICAgaW50IG1fbnVtQ29uc3RhbnRzOwotICAgICAgICBTb3VyY2VF
bGVtZW50cyogbV9zdGF0ZW1lbnRzOwotICAgICAgICBJZGVudGlmaWVyU2V0IG1fY2FwdHVyZWRW
YXJpYWJsZXM7Ci0gICAgfTsKLQogICAgIGNsYXNzIFNjb3BlTm9kZSA6IHB1YmxpYyBTdGF0ZW1l
bnROb2RlLCBwdWJsaWMgUGFyc2VyQXJlbmFSZWZDb3VudGVkIHsKICAgICBwdWJsaWM6CiAgICAg
ICAgIHR5cGVkZWYgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNrIFZhclN0YWNrOwpAQCAtMTQw
NCw4ICsxMzg4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHVzaW5nIFBhcnNlckFy
ZW5hUmVmQ291bnRlZDo6b3BlcmF0b3IgbmV3OwogCi0gICAgICAgIFNjb3BlTm9kZURhdGEqIGRh
dGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICAgICAgdm9pZCBkZXN0cm95
RGF0YSgpIHsgbV9kYXRhLmNsZWFyKCk7IH0KKyAgICAgICAgdm9pZCBkZXN0cm95RGF0YSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fYXJlbmEucmVzZXQoKTsKKyAgICAgICAgICAgIG1fdmFy
U3RhY2suY2xlYXIoKTsKKyAgICAgICAgICAgIG1fZnVuY3Rpb25TdGFjay5jbGVhcigpOworICAg
ICAgICAgICAgbV9zdGF0ZW1lbnRzID0gMDsKKyAgICAgICAgICAgIG1fY2FwdHVyZWRWYXJpYWJs
ZXMuY2xlYXIoKTsKKyAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIHNv
dXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVyKCktPnVybCgpOyB9CkBA
IC0xNDE5LDIxICsxNDA5LDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzU3Ry
aWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBTdHJpY3RNb2RlRmVhdHVyZTsg
fQogICAgICAgICB2b2lkIHNldFVzZXNBcmd1bWVudHMoKSB7IG1fZmVhdHVyZXMgfD0gQXJndW1l
bnRzRmVhdHVyZTsgfQogICAgICAgICBib29sIHVzZXNUaGlzKCkgY29uc3QgeyByZXR1cm4gbV9m
ZWF0dXJlcyAmIFRoaXNGZWF0dXJlOyB9Ci0gICAgICAgIGJvb2wgbmVlZHNBY3RpdmF0aW9uRm9y
TW9yZVRoYW5WYXJpYWJsZXMoKSBjb25zdCB7IEFTU0VSVChtX2RhdGEpOyByZXR1cm4gbV9mZWF0
dXJlcyAmIChFdmFsRmVhdHVyZSB8IFdpdGhGZWF0dXJlIHwgQ2F0Y2hGZWF0dXJlKTsgfQotICAg
ICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0IHsgQVNTRVJUKG1fZGF0YSk7IHJldHVy
biAoaGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSkgfHwgKG1fZmVhdHVyZXMgJiAoRXZhbEZlYXR1cmUg
fCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVyZSkpOyB9Ci0gICAgICAgIGJvb2wgaGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiAhIW1fZGF0YS0+bV9jYXB0dXJlZFZhcmlhYmxl
cy5zaXplKCk7IH0KLSAgICAgICAgc2l6ZV90IGNhcHR1cmVkVmFyaWFibGVDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YS0+bV9jYXB0dXJlZFZhcmlhYmxlcy5zaXplKCk7IH0KLSAgICAgICAg
Ym9vbCBjYXB0dXJlcyhjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgeyByZXR1cm4gbV9kYXRhLT5t
X2NhcHR1cmVkVmFyaWFibGVzLmNvbnRhaW5zKGlkZW50LmltcGwoKSk7IH0KKyAgICAgICAgYm9v
bCBuZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhhblZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZmVhdHVyZXMgJiAoRXZhbEZlYXR1cmUgfCBXaXRoRmVhdHVyZSB8IENhdGNoRmVhdHVyZSk7IH0K
KyAgICAgICAgYm9vbCBuZWVkc0FjdGl2YXRpb24oKSBjb25zdCB7IHJldHVybiAoaGFzQ2FwdHVy
ZWRWYXJpYWJsZXMoKSkgfHwgKG1fZmVhdHVyZXMgJiAoRXZhbEZlYXR1cmUgfCBXaXRoRmVhdHVy
ZSB8IENhdGNoRmVhdHVyZSkpOyB9CisgICAgICAgIGJvb2wgaGFzQ2FwdHVyZWRWYXJpYWJsZXMo
KSBjb25zdCB7IHJldHVybiAhIW1fY2FwdHVyZWRWYXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgICAg
IHNpemVfdCBjYXB0dXJlZFZhcmlhYmxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVk
VmFyaWFibGVzLnNpemUoKTsgfQorICAgICAgICBib29sIGNhcHR1cmVzKGNvbnN0IElkZW50aWZp
ZXImIGlkZW50KSB7IHJldHVybiBtX2NhcHR1cmVkVmFyaWFibGVzLmNvbnRhaW5zKGlkZW50Lmlt
cGwoKSk7IH0KIAotICAgICAgICBWYXJTdGFjayYgdmFyU3RhY2soKSB7IEFTU0VSVChtX2RhdGEp
OyByZXR1cm4gbV9kYXRhLT5tX3ZhclN0YWNrOyB9Ci0gICAgICAgIEZ1bmN0aW9uU3RhY2smIGZ1
bmN0aW9uU3RhY2soKSB7IEFTU0VSVChtX2RhdGEpOyByZXR1cm4gbV9kYXRhLT5tX2Z1bmN0aW9u
U3RhY2s7IH0KKyAgICAgICAgVmFyU3RhY2smIHZhclN0YWNrKCkgeyByZXR1cm4gbV92YXJTdGFj
azsgfQorICAgICAgICBGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrKCkgeyByZXR1cm4gbV9m
dW5jdGlvblN0YWNrOyB9CiAKICAgICAgICAgaW50IG5lZWRlZENvbnN0YW50cygpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChtX2RhdGEpOwogICAgICAgICAgICAgLy8gV2UgbWF5IG5l
ZWQgMiBtb3JlIGNvbnN0YW50cyB0aGFuIHRoZSBjb3VudCBnaXZlbiBieSB0aGUgcGFyc2VyLAog
ICAgICAgICAgICAgLy8gYmVjYXVzZSBvZiB0aGUgdmFyaW91cyB1c2VzIG9mIGpzVW5kZWZpbmVk
KCkgYW5kIGpzTnVsbCgpLgotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+bV9udW1Db25zdGFu
dHMgKyAyOworICAgICAgICAgICAgcmV0dXJuIG1fbnVtQ29uc3RhbnRzICsgMjsKICAgICAgICAg
fQogCiAgICAgICAgIFN0YXRlbWVudE5vZGUqIHNpbmdsZVN0YXRlbWVudCgpIGNvbnN0OwpAQCAt
MTQ0MiwxMSArMTQzMSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgdm9pZCBzZXRTb3VyY2UoY29uc3QgU291cmNlQ29kZSYgc291cmNlKSB7IG1fc291cmNl
ID0gc291cmNlOyB9CisgICAgICAgIFBhcnNlckFyZW5hIG1fYXJlbmE7CiAKICAgICBwcml2YXRl
OgotICAgICAgICBPd25QdHI8U2NvcGVOb2RlRGF0YT4gbV9kYXRhOwogICAgICAgICBDb2RlRmVh
dHVyZXMgbV9mZWF0dXJlczsKICAgICAgICAgU291cmNlQ29kZSBtX3NvdXJjZTsKKyAgICAgICAg
VmFyU3RhY2sgbV92YXJTdGFjazsKKyAgICAgICAgRnVuY3Rpb25TdGFjayBtX2Z1bmN0aW9uU3Rh
Y2s7CisgICAgICAgIGludCBtX251bUNvbnN0YW50czsKKyAgICAgICAgU291cmNlRWxlbWVudHMq
IG1fc3RhdGVtZW50czsKKyAgICAgICAgSWRlbnRpZmllclNldCBtX2NhcHR1cmVkVmFyaWFibGVz
OwogICAgIH07CiAKICAgICBjbGFzcyBQcm9ncmFtTm9kZSA6IHB1YmxpYyBTY29wZU5vZGUgewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmNwcAppbmRleCA1NmM1
OGRhY2YxNWVlMTYwNDRmNDNhMjhmNzY5ZDMwNThlZTU0OWFlLi5jNTNmMzA3NTNmMmY3MTJiZjli
NzUxYzA2ODRjZDZkZWU1YTI0MGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1BhcnNlckFyZW5hLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlckFyZW5hLmNwcApAQCAtMzQsNyArMzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIFBhcnNl
ckFyZW5hOjpQYXJzZXJBcmVuYSgpCiAgICAgOiBtX2ZyZWVhYmxlTWVtb3J5KDApCiAgICAgLCBt
X2ZyZWVhYmxlUG9vbEVuZCgwKQotICAgICwgbV9pZGVudGlmaWVyQXJlbmEoYWRvcHRQdHIobmV3
IElkZW50aWZpZXJBcmVuYSkpCiB7CiB9CiAKQEAgLTg4LDcgKzg3LDggQEAgdm9pZCBQYXJzZXJB
cmVuYTo6cmVzZXQoKQogCiAgICAgbV9mcmVlYWJsZU1lbW9yeSA9IDA7CiAgICAgbV9mcmVlYWJs
ZVBvb2xFbmQgPSAwOwotICAgIG1faWRlbnRpZmllckFyZW5hLT5jbGVhcigpOworICAgIGlmICht
X2lkZW50aWZpZXJBcmVuYSkKKyAgICAgICAgbV9pZGVudGlmaWVyQXJlbmEtPmNsZWFyKCk7CiAg
ICAgbV9mcmVlYWJsZVBvb2xzLmNsZWFyKCk7CiAgICAgbV9kZWxldGFibGVPYmplY3RzLmNsZWFy
KCk7CiAgICAgbV9yZWZDb3VudGVkT2JqZWN0cy5jbGVhcigpOwpAQCAtMTA4LDcgKzEwOCw3IEBA
IHZvaWQgUGFyc2VyQXJlbmE6OmFsbG9jYXRlRnJlZWFibGVQb29sKCkKIGJvb2wgUGFyc2VyQXJl
bmE6OmlzRW1wdHkoKSBjb25zdAogewogICAgIHJldHVybiAhbV9mcmVlYWJsZVBvb2xFbmQKLSAg
ICAgICAgJiYgbV9pZGVudGlmaWVyQXJlbmEtPmlzRW1wdHkoKQorICAgICAgICAmJiAoIW1faWRl
bnRpZmllckFyZW5hIHx8IG1faWRlbnRpZmllckFyZW5hLT5pc0VtcHR5KCkpCiAgICAgICAgICYm
IG1fZnJlZWFibGVQb29scy5pc0VtcHR5KCkKICAgICAgICAgJiYgbV9kZWxldGFibGVPYmplY3Rz
LmlzRW1wdHkoKQogICAgICAgICAmJiBtX3JlZkNvdW50ZWRPYmplY3RzLmlzRW1wdHkoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyQXJlbmEuaAppbmRleCA0OWYwYWI2YmY4
NDIyYjg5MDU3OWEwYjg0ZDA3MjNhZjY0NjMwODY4Li4wNjdiODNhMjYyZjEyMGVhYWVhZGE5ZjFk
ZTJhZGEzNTc3OTAwOWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlckFyZW5hLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJB
cmVuYS5oCkBAIC0xNjEsNyArMTYxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGlzRW1wdHkoKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNldCgp
OwogCi0gICAgICAgIElkZW50aWZpZXJBcmVuYSYgaWRlbnRpZmllckFyZW5hKCkgeyByZXR1cm4g
Km1faWRlbnRpZmllckFyZW5hOyB9CisgICAgICAgIElkZW50aWZpZXJBcmVuYSYgaWRlbnRpZmll
ckFyZW5hKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZICghbV9pZGVudGlm
aWVyQXJlbmEpKQorICAgICAgICAgICAgICAgIG1faWRlbnRpZmllckFyZW5hID0gYWRvcHRQdHIo
bmV3IElkZW50aWZpZXJBcmVuYSk7CisgICAgICAgICAgICByZXR1cm4gKm1faWRlbnRpZmllckFy
ZW5hOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGZyZWVhYmxlUG9vbFNpemUgPSA4MDAwOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>