<?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>13115</bug_id>
          
          <creation_ts>2007-03-18 23:57:26 -0700</creation_ts>
          <short_desc>REGRESSION: 1000% performance regression in DOM access by index, which was already slow</short_desc>
          <delta_ts>2007-04-22 01:57:22 -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>DOM</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac (PowerPC)</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.hixie.ch/tests/adhoc/perf/dom/artificial/core/001.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon">jon</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>alice.barraclough</cc>
    
    <cc>ap</cc>
    
    <cc>catfish.man</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>18248</commentid>
    <comment_count>0</comment_count>
    <who name="Jon">jon</who>
    <bug_when>2007-03-18 23:57:26 -0700</bug_when>
    <thetext>As of r20309, WebKit&apos;s performance on the index portion of Hixie&apos;s DOM benchmark has regressed 1000%, from 1.4s to 14s (Quad G5, 10.4.9, 1GB RAM). I believe the relevant part of the test is this:

function testIndex(div) {
     for (var i = 0; i &lt; count; i += 1) {
       divs[i] = div.childNodes[count*2 - i*2 - 1];
     }
   }

In contrast Opera completes this part of the test in .09s and Firefox 2 in .4s. 

(Bizarrely, the first time I run the test in shipping Safari, it comes up at around 1.5 seconds. Then, the second and third times, the time doubles (3.5s, 7s). Relaunching Safari starts the process again.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18249</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-03-19 00:03:36 -0700</bug_when>
    <thetext>Profiling with Shark shows that WebCore::ChildNodeList::length and WebCore::ChildNodeList::item are the two hottest functions here.  WebCore::Node::notifyNodeListsChildrenChanged is not far behind, though I think that relates to the other tests rather than the testIndex case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>18282</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-03-19 11:52:11 -0700</bug_when>
    <thetext>&lt;rdar://problem/5072349&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17491</commentid>
    <comment_count>3</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-03-24 16:31:07 -0700</bug_when>
    <thetext>I have modified the testcase to show the effects of just the relevant test more clearly. I&apos;m seeing 95.3% in length, so I suspect item is a false result from one of the other tests.

The modified testcase can be found at http://dscoder.com/indexperf.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17473</commentid>
    <comment_count>4</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-03-24 16:34:56 -0700</bug_when>
    <thetext>In the version of Safari included in 10.4.9, 92.8% is spent in ChildNodeListImpl::item()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17467</commentid>
    <comment_count>5</comment_count>
    <who name="David Smith">catfish.man</who>
    <bug_when>2007-03-24 17:43:29 -0700</bug_when>
    <thetext>Some more things I&apos;ve noticed:

The length cache is not being used at all, due to a new ChildNodeList being returned each time. If you reuse the ChildNodeList it will speed things up dramatically.

I can&apos;t reproduce a 1000% regression, although there&apos;s definitely some regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>15636</commentid>
    <comment_count>6</comment_count>
    <who name="Alice Liu">alice.barraclough</who>
    <bug_when>2007-04-05 00:02:24 -0700</bug_when>
    <thetext>I&apos;ve found 3 ranges of regression, and 1 range of improvement.  I was using the test at http://dscoder.com/indexperf.html

2.0.4:  ~5400 ms
r13058: ~5400 ms
r13060: ~6300 ms

r15531: ~6300 ms
r15534: ~7000 ms

r15536: ~7000 ms
r15544: ~7500 ms

r16513: ~7000 ms
r17582: ~6700 ms
TOT:    ~6700 ms

I&apos;m not sure what to make of these findings.  I don&apos;t really see how r13059 could have had an impact on this test, and r13060 definitely couldn&apos;t.  For the second range, we can rule out r15533 and r15534 as causes of regression, so i guess that leaves 15532.  haven&apos;t really looked into the 3rd range yet, and i&apos;m not sure if it was actually resolved between 15544 and 15561 or if it was just a coincidental speedup. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13462</commentid>
    <comment_count>7</comment_count>
      <attachid>14123</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-04-21 10:06:02 -0700</bug_when>
    <thetext>Created attachment 14123
proposed fix

This patch makes NodeLists use a shared cache, similar to the one HTMLCollections use. With it, ChildNodeList::length() is no longer in Shark profiles.

Above comments indicate that different people get different timings on these tests. This is apparently due to them being entirely memory-bound - over 90% of time is spent on a single instruction, &quot;lwz r3,20(r3)&quot; (which is what Node::nextSibling() compiles to).

On my machine, the &quot;insert&quot; time on Hixie&apos;s test went down from 26 seconds to 7 seconds on TOT, while shipping Safari result is under 6 seconds. Believe it or not, David&apos;s reduction takes 64 seconds with shipping Safari, and 7 seconds on TOT with this patch (I haven&apos;t measured bare TOT). Go figure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13413</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-04-21 10:09:28 -0700</bug_when>
    <thetext>Cache sharing doesn&apos;t improve item() behavior, because the test iterates backwards, which isn&apos;t optimized by the cache. Obviously, that needs to be amended, but probably in a separate non-P1 bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13414</commentid>
    <comment_count>9</comment_count>
      <attachid>14123</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-21 10:14:21 -0700</bug_when>
    <thetext>Comment on attachment 14123
proposed fix

I&apos;m not a big fan of the word &quot;info&quot; in class names. Perhaps &quot;Caches&quot; is a better name? Also, if this struct is giong to be a member of the NodeList class, then its class name can just be Caches.

+            return m_info-&gt;lastItem;
+        } else if (index &gt; m_info-&gt;lastItemOffset) {

We normally don&apos;t do else after return.

     ChildNodeList(Node*);
+    ChildNodeList(Node*, NodeListInfo*);

Why are we retaining the old ChildNodeList constructor that does not take the pointer to the caches? I don&apos;t see any reason to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13349</commentid>
    <comment_count>10</comment_count>
      <attachid>14124</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-04-21 10:56:52 -0700</bug_when>
    <thetext>Created attachment 14124
proposed fix

(In reply to comment #9)
&gt; Also, if this struct is giong to be a member of the NodeList
&gt; class, then its class name can just be Caches.

  OK.

&gt; We normally don&apos;t do else after return.

  Fixed. I didn&apos;t really touch this code - only used global replace for Cache members.

&gt; Why are we retaining the old ChildNodeList constructor that does not take the
&gt; pointer to the caches? I don&apos;t see any reason to do so.

  Just an oversight; removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13350</commentid>
    <comment_count>11</comment_count>
      <attachid>14125</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-04-21 10:58:38 -0700</bug_when>
    <thetext>Created attachment 14125
proposed fix

Renamed Info to Caches in a couple more places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13368</commentid>
    <comment_count>12</comment_count>
      <attachid>14125</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-21 15:58:27 -0700</bug_when>
    <thetext>Comment on attachment 14125
proposed fix

m_ownsInfo needs to be renamed to m_ownsCaches.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13317</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-04-22 01:57:22 -0700</bug_when>
    <thetext>Committed revision 21003.

Filed bug 13445 for the remaining performance problem.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14123</attachid>
            <date>2007-04-21 10:06:02 -0700</date>
            <delta_ts>2007-04-21 10:56:52 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>13115r1_patch.txt</filename>
            <type>text/plain</type>
            <size>13762</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDctMDQtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTE1CisgICAgICAgIFJF
R1JFU1NJT046IDEwMDAlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gRE9NIGFjY2VzcyBieSBp
bmRleCwgd2hpY2ggd2FzIGFscmVhZHkgc2xvdworCisgICAgICAgICogZG9tL05vZGVMaXN0Lmg6
IE1vdmUgY2FjaGVkIGRhdGEgaW50byBhIHNlcGFyYXRlIGNsYXNzLCBzbyBpdCBjYW4gYmUgc2hh
cmVkLgorCisgICAgICAgICogZG9tL05vZGUuaDogUmVwbGFjZSB0aGUgc2V0IG9mIHJlZ2lzdGVy
ZWQgTm9kZUxpc3RzIHdpdGggYSBzdHJ1Y3QgdGhhdCBhbHNvCisgICAgICAgIGNvbnRhaW5zIGNh
Y2hlZCBOb2RlTGlzdEluZm8gKHNvIHRoZSBzaXplIG9mIE5vZGUgZG9lc24ndCBjaGFuZ2UpLgor
CisgICAgICAgICogZG9tL05vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0
OjpOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdDo6fk5vZGVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVMaXN0OjppdGVtQmFja3dhcmRzRnJvbUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Q6
Oml0ZW1XaXRoTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdDo6cm9vdE5vZGVDaGls
ZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Q6Ok5vZGVMaXN0SW5mbzo6
Tm9kZUxpc3RJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0OjpOb2RlTGlzdEluZm86
OnJlc2V0KToKKyAgICAgICAgKiBkb20vQ2hpbGROb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNo
aWxkTm9kZUxpc3Q6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojpp
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6Om5vZGVNYXRjaGVzKToKKyAg
ICAgICAgKiBkb20vQ2hpbGROb2RlTGlzdC5oOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNoaWxkTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9k
ZTo6cmVnaXN0ZXJOb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjp1bnJlZ2lzdGVy
Tm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHNB
dHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om5vdGlmeUxvY2FsTm9k
ZUxpc3RzQ2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgQWRqdXN0IGZvciB0aGUgYWJvdmUgY2hh
bmdlcy4KKwogMjAwNy0wNC0yMSAgTGFtYXIgR29kZGFyZCA8bGFtYXJnb2RkYXJkQGdtYWlsLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IFdlYkNvcmUvZG9tL0NoaWxk
Tm9kZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3Bw
CShyZXZpc2lvbiAyMDk5NSkKKysrIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwzOCArMzAsNDMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdCggTm9k
ZSAqbiApCitDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KE5vZGUqIG4pCiAgICAgOiBOb2Rl
TGlzdChuKQogewogfQogCitDaGlsZE5vZGVMaXN0OjpDaGlsZE5vZGVMaXN0KE5vZGUqIG4sIE5v
ZGVMaXN0SW5mbyogaW5mbykKKyAgICA6IE5vZGVMaXN0KG4sIGluZm8pCit7Cit9CisKIHVuc2ln
bmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzTGVuZ3RoQ2Fj
aGVWYWxpZCkKLSAgICAgICAgcmV0dXJuIGNhY2hlZExlbmd0aDsKKyAgICBpZiAobV9pbmZvLT5p
c0xlbmd0aENhY2hlVmFsaWQpCisgICAgICAgIHJldHVybiBtX2luZm8tPmNhY2hlZExlbmd0aDsK
IAogICAgIHVuc2lnbmVkIGxlbiA9IDA7CiAgICAgTm9kZSAqbjsKLSAgICBmb3IobiA9IHJvb3RO
b2RlLT5maXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCisgICAgZm9y
IChuID0gbV9yb290Tm9kZS0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGlu
ZygpKQogICAgICAgICBsZW4rKzsKIAotICAgIGNhY2hlZExlbmd0aCA9IGxlbjsKLSAgICBpc0xl
bmd0aENhY2hlVmFsaWQgPSB0cnVlOworICAgIG1faW5mby0+Y2FjaGVkTGVuZ3RoID0gbGVuOwor
ICAgIG1faW5mby0+aXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKIAogICAgIHJldHVybiBsZW47
CiB9CiAKLU5vZGUgKkNoaWxkTm9kZUxpc3Q6Oml0ZW0gKCB1bnNpZ25lZCBpbmRleCApIGNvbnN0
CitOb2RlICpDaGlsZE5vZGVMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAg
IHVuc2lnbmVkIGludCBwb3MgPSAwOwotICAgIE5vZGUgKm4gPSByb290Tm9kZS0+Zmlyc3RDaGls
ZCgpOworICAgIE5vZGUgKm4gPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7CiAKLSAgICBpZiAo
aXNJdGVtQ2FjaGVWYWxpZCkgewotICAgICAgICBpZiAoaW5kZXggPT0gbGFzdEl0ZW1PZmZzZXQp
IHsKLSAgICAgICAgICAgIHJldHVybiBsYXN0SXRlbTsKLSAgICAgICAgfSBlbHNlIGlmIChpbmRl
eCA+IGxhc3RJdGVtT2Zmc2V0KSB7Ci0gICAgICAgICAgICBuID0gbGFzdEl0ZW07Ci0gICAgICAg
ICAgICBwb3MgPSBsYXN0SXRlbU9mZnNldDsKKyAgICBpZiAobV9pbmZvLT5pc0l0ZW1DYWNoZVZh
bGlkKSB7CisgICAgICAgIGlmIChpbmRleCA9PSBtX2luZm8tPmxhc3RJdGVtT2Zmc2V0KSB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9pbmZvLT5sYXN0SXRlbTsKKyAgICAgICAgfSBlbHNlIGlmIChp
bmRleCA+IG1faW5mby0+bGFzdEl0ZW1PZmZzZXQpIHsKKyAgICAgICAgICAgIG4gPSBtX2luZm8t
Pmxhc3RJdGVtOworICAgICAgICAgICAgcG9zID0gbV9pbmZvLT5sYXN0SXRlbU9mZnNldDsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtNzEsOSArNzYsOSBAQCBOb2RlICpDaGlsZE5vZGVMaXN0Ojpp
dGVtICggdW5zaWduZWQgaW5kCiAgICAgfQogCiAgICAgaWYgKG4pIHsKLSAgICAgICAgbGFzdEl0
ZW0gPSBuOwotICAgICAgICBsYXN0SXRlbU9mZnNldCA9IHBvczsKLSAgICAgICAgaXNJdGVtQ2Fj
aGVWYWxpZCA9IHRydWU7CisgICAgICAgIG1faW5mby0+bGFzdEl0ZW0gPSBuOworICAgICAgICBt
X2luZm8tPmxhc3RJdGVtT2Zmc2V0ID0gcG9zOworICAgICAgICBtX2luZm8tPmlzSXRlbUNhY2hl
VmFsaWQgPSB0cnVlOwogICAgICAgICByZXR1cm4gbjsKICAgICB9CiAKQEAgLTgyLDcgKzg3LDcg
QEAgTm9kZSAqQ2hpbGROb2RlTGlzdDo6aXRlbSAoIHVuc2lnbmVkIGluZAogCiBib29sIENoaWxk
Tm9kZUxpc3Q6Om5vZGVNYXRjaGVzKE5vZGUgKnRlc3ROb2RlKSBjb25zdAogewotICAgIHJldHVy
biB0ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09IHJvb3ROb2RlOworICAgIHJldHVybiB0ZXN0Tm9k
ZS0+cGFyZW50Tm9kZSgpID09IG1fcm9vdE5vZGU7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9t
L0NoaWxkTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmgJKHJldmlzaW9uIDIwOTk1KQorKysgV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENo
aWxkTm9kZUxpc3QgOiBwdWJsaWMgTm9kZUxpc3QgewogcHVibGljOgogICAgIENoaWxkTm9kZUxp
c3QoTm9kZSopOworICAgIENoaWxkTm9kZUxpc3QoTm9kZSosIE5vZGVMaXN0SW5mbyopOwogCiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGUqIGl0
ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAordHlwZWRlZiBI
YXNoU2V0PE5vZGVMaXN0Kj4gTm9kZUxpc3RTZXQ7CitzdHJ1Y3QgTm9kZUxpc3RzTm9kZURhdGEg
eworICAgIE5vZGVMaXN0U2V0IG1fcmVnaXN0ZXJlZExpc3RzOworICAgIE5vZGVMaXN0OjpOb2Rl
TGlzdEluZm8gbV9jaGlsZE5vZGVzTGlzdEluZm87Cit9OworCisKIC8qKgogICogTm9kZUxpc3Qg
d2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgZG9jdW1lbnQgd2l0aCBhIGdpdmVuIHRhZyBuYW1l
CiAgKi8KQEAgLTIxNSw3ICsyMjIsMTAgQEAgdm9pZCBOb2RlOjpzZXROb2RlVmFsdWUoIGNvbnN0
IFN0cmluZyAmLwogCiBQYXNzUmVmUHRyPE5vZGVMaXN0PiBOb2RlOjpjaGlsZE5vZGVzKCkKIHsK
LSAgICByZXR1cm4gbmV3IENoaWxkTm9kZUxpc3QodGhpcyk7CisgICAgaWYgKCFtX25vZGVMaXN0
cykKKyAgICAgICAgbV9ub2RlTGlzdHMgPSBuZXcgTm9kZUxpc3RzTm9kZURhdGE7CisKKyAgICBy
ZXR1cm4gbmV3IENoaWxkTm9kZUxpc3QodGhpcywgJm1fbm9kZUxpc3RzLT5tX2NoaWxkTm9kZXNM
aXN0SW5mbyk7CiB9CiAKIE5vZGUgKk5vZGU6OmZpcnN0Q2hpbGQoKSBjb25zdApAQCAtNDMwLDE1
ICs0NDAsMTUgQEAgdW5zaWduZWQgTm9kZTo6bm9kZUluZGV4KCkgY29uc3QKIHZvaWQgTm9kZTo6
cmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCogbGlzdCkKIHsKICAgICBpZiAoIW1fbm9kZUxpc3Rz
KQotICAgICAgICBtX25vZGVMaXN0cyA9IG5ldyBOb2RlTGlzdFNldDsKLSAgICBtX25vZGVMaXN0
cy0+YWRkKGxpc3QpOworICAgICAgICBtX25vZGVMaXN0cyA9IG5ldyBOb2RlTGlzdHNOb2RlRGF0
YTsKKyAgICBtX25vZGVMaXN0cy0+bV9yZWdpc3RlcmVkTGlzdHMuYWRkKGxpc3QpOwogfQogCiB2
b2lkIE5vZGU6OnVucmVnaXN0ZXJOb2RlTGlzdChOb2RlTGlzdCogbGlzdCkKIHsKICAgICBpZiAo
IW1fbm9kZUxpc3RzKQogICAgICAgICByZXR1cm47Ci0gICAgbV9ub2RlTGlzdHMtPnJlbW92ZShs
aXN0KTsKKyAgICBtX25vZGVMaXN0cy0+bV9yZWdpc3RlcmVkTGlzdHMucmVtb3ZlKGxpc3QpOwog
fQogCiB2b2lkIE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlQ2hhbmdlZCgpCkBA
IC00NDYsOCArNDU2LDggQEAgdm9pZCBOb2RlOjpub3RpZnlMb2NhbE5vZGVMaXN0c0F0dHJpYnV0
ZQogICAgIGlmICghbV9ub2RlTGlzdHMpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGVMaXN0
U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+ZW5kKCk7Ci0gICAgZm9yIChOb2RlTGlz
dFNldDo6aXRlcmF0b3IgaSA9IG1fbm9kZUxpc3RzLT5iZWdpbigpOyBpICE9IGVuZDsgKytpKQor
ICAgIE5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+bV9yZWdpc3RlcmVk
TGlzdHMuZW5kKCk7CisgICAgZm9yIChOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IG1fbm9kZUxp
c3RzLT5tX3JlZ2lzdGVyZWRMaXN0cy5iZWdpbigpOyBpICE9IGVuZDsgKytpKQogICAgICAgICAo
KmkpLT5yb290Tm9kZUF0dHJpYnV0ZUNoYW5nZWQoKTsKIH0KIApAQCAtNDYyLDggKzQ3Miw4IEBA
IHZvaWQgTm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHNDaGlsZHJlbkMKICAgICBpZiAoIW1fbm9k
ZUxpc3RzKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlTGlzdFNldDo6aXRlcmF0b3IgZW5k
ID0gbV9ub2RlTGlzdHMtPmVuZCgpOwotICAgIGZvciAoTm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkg
PSBtX25vZGVMaXN0cy0+YmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICBOb2RlTGlzdFNldDo6
aXRlcmF0b3IgZW5kID0gbV9ub2RlTGlzdHMtPm1fcmVnaXN0ZXJlZExpc3RzLmVuZCgpOworICAg
IGZvciAoTm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkgPSBtX25vZGVMaXN0cy0+bV9yZWdpc3RlcmVk
TGlzdHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKICAgICAgICAgKCppKS0+cm9vdE5vZGVDaGls
ZHJlbkNoYW5nZWQoKTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjA5OTUpCisrKyBXZWJDb3JlL2RvbS9O
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgY2xhc3MgSW50UmVjdDsKIGNs
YXNzIEtleWJvYXJkRXZlbnQ7CiBjbGFzcyBOYW1lZEF0dHJNYXA7CiBjbGFzcyBOb2RlTGlzdDsK
K3N0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YTsKIGNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsK
IGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKQEAg
LTQ1Niw4ICs0NTcsNyBAQCBwcml2YXRlOiAvLyBtZW1iZXJzCiAgICAgUmVuZGVyT2JqZWN0KiBt
X3JlbmRlcmVyOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdHlwZWRlZiBIYXNoU2V0PE5vZGVMaXN0Kj4g
Tm9kZUxpc3RTZXQ7Ci0gICAgTm9kZUxpc3RTZXQqIG1fbm9kZUxpc3RzOworICAgIE5vZGVMaXN0
c05vZGVEYXRhKiBtX25vZGVMaXN0czsKIAogICAgIHNob3J0IG1fdGFiSW5kZXg7CiAKSW5kZXg6
IFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
TGlzdC5jcHAJKHJldmlzaW9uIDIwOTk1KQorKysgV2ViQ29yZS9kb20vTm9kZUxpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwyNiArMzAsMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1Ob2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0cjxOb2RlPiBfcm9vdE5vZGUpCi0gICAgOiBy
b290Tm9kZShfcm9vdE5vZGUpLAotICAgICAgaXNMZW5ndGhDYWNoZVZhbGlkKGZhbHNlKSwKLSAg
ICAgIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCitOb2RlTGlzdDo6Tm9kZUxpc3QoUGFzc1JlZlB0
cjxOb2RlPiByb290Tm9kZSkKKyAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCisgICAgLCBtX2lu
Zm8obmV3IE5vZGVMaXN0SW5mbykKKyAgICAsIG1fb3duc0luZm8odHJ1ZSkKIHsKLSAgICByb290
Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5v
ZGVMaXN0KHRoaXMpOworfSAgICAKKworTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9k
ZT4gcm9vdE5vZGUsIE5vZGVMaXN0SW5mbyogaW5mbykKKyAgICA6IG1fcm9vdE5vZGUocm9vdE5v
ZGUpCisgICAgLCBtX2luZm8oaW5mbykKKyAgICAsIG1fb3duc0luZm8oZmFsc2UpCit7CisgICAg
bV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKIH0gICAgCiAKIE5vZGVMaXN0Ojp+
Tm9kZUxpc3QoKQogewotICAgIHJvb3ROb2RlLT51bnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7Cisg
ICAgbV9yb290Tm9kZS0+dW5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAgIGlmIChtX293bnNJ
bmZvKQorICAgICAgICBkZWxldGUgbV9pbmZvOwogfQogCiB1bnNpZ25lZCBOb2RlTGlzdDo6cmVj
dXJzaXZlTGVuZ3RoKE5vZGUqIHN0YXJ0KSBjb25zdAogewogICAgIGlmICghc3RhcnQpCi0gICAg
ICAgIHN0YXJ0ID0gcm9vdE5vZGUuZ2V0KCk7CisgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5n
ZXQoKTsKIAotICAgIGlmIChpc0xlbmd0aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gcm9vdE5vZGUp
Ci0gICAgICAgIHJldHVybiBjYWNoZWRMZW5ndGg7CisgICAgaWYgKG1faW5mby0+aXNMZW5ndGhD
YWNoZVZhbGlkICYmIHN0YXJ0ID09IG1fcm9vdE5vZGUpCisgICAgICAgIHJldHVybiBtX2luZm8t
PmNhY2hlZExlbmd0aDsKIAogICAgIHVuc2lnbmVkIGxlbiA9IDA7CiAKQEAgLTYwLDkgKzcwLDkg
QEAgdW5zaWduZWQgTm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKgogICAgICAgICAgICAg
bGVuICs9IHJlY3Vyc2l2ZUxlbmd0aChuKTsKICAgICAgICAgfQogCi0gICAgaWYgKHN0YXJ0ID09
IHJvb3ROb2RlKSB7Ci0gICAgICAgIGNhY2hlZExlbmd0aCA9IGxlbjsKLSAgICAgICAgaXNMZW5n
dGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICBpZiAoc3RhcnQgPT0gbV9yb290Tm9kZSkgeworICAg
ICAgICBtX2luZm8tPmNhY2hlZExlbmd0aCA9IGxlbjsKKyAgICAgICAgbV9pbmZvLT5pc0xlbmd0
aENhY2hlVmFsaWQgPSB0cnVlOwogICAgIH0KIAogICAgIHJldHVybiBsZW47CkBAIC03MiwxMyAr
ODIsMTMgQEAgTm9kZSogTm9kZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KAogewogICAg
IEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPj0gMCk7CiAKLSAgICBmb3IgKE5vZGUgKm4gPSBzdGFy
dDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUuZ2V0KCkpKSB7CisgICAgZm9y
IChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG1fcm9vdE5vZGUu
Z2V0KCkpKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAg
IGlmIChub2RlTWF0Y2hlcyhuKSkgewogICAgICAgICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zm
c2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RJdGVtID0gbjsKLSAgICAgICAgICAgICAg
ICAgICAgbGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlzSXRl
bUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2luZm8tPmxhc3RJdGVt
ID0gbjsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmZvLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNl
dDsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmZvLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIHJlbWFpbmluZ09mZnNldC0tOwpAQCAtOTIsMTMgKzEwMiwxMyBAQCBOb2RlKiBO
b2RlTGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoCiBOb2RlKiBOb2RlTGlzdDo6aXRlbUJh
Y2t3YXJkc0Zyb21DdXJyZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1h
aW5pbmdPZmZzZXQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJlbWFpbmluZ09mZnNldCA8IDApOwot
ICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUo
cm9vdE5vZGUuZ2V0KCkpKSB7CisgICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50
cmF2ZXJzZVByZXZpb3VzTm9kZShtX3Jvb3ROb2RlLmdldCgpKSkgewogICAgICAgICBpZiAobi0+
aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobikpIHsKICAg
ICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewotICAgICAgICAgICAgICAgICAg
ICBsYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RJdGVtT2Zmc2V0ID0gb2Zm
c2V0OwotICAgICAgICAgICAgICAgICAgICBpc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmZvLT5sYXN0SXRlbSA9IG47CisgICAgICAgICAgICAgICAgICAg
IG1faW5mby0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG1f
aW5mby0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQr
KzsKQEAgLTExMywxMyArMTIzLDEzIEBAIE5vZGUqIE5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKHVu
c2lnbmVkIG8KIHsKICAgICBpbnQgcmVtYWluaW5nT2Zmc2V0ID0gb2Zmc2V0OwogICAgIGlmICgh
c3RhcnQpIHsKLSAgICAgICAgc3RhcnQgPSByb290Tm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAg
ICBpZiAoaXNJdGVtQ2FjaGVWYWxpZCkgewotICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBsYXN0
SXRlbU9mZnNldCkgewotICAgICAgICAgICAgICAgIHJldHVybiBsYXN0SXRlbTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgfHwgbGFzdEl0ZW1PZmZzZXQg
LSBvZmZzZXQgPCBvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICBzdGFydCA9IGxhc3RJdGVtOwot
ICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNldCAtPSBsYXN0SXRlbU9mZnNldDsKKyAgICAg
ICAgc3RhcnQgPSBtX3Jvb3ROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIGlmIChtX2luZm8t
PmlzSXRlbUNhY2hlVmFsaWQpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbV9pbmZvLT5s
YXN0SXRlbU9mZnNldCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZm8tPmxhc3RJdGVt
OworICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPiBtX2luZm8tPmxhc3RJdGVtT2Zmc2V0
IHx8IG1faW5mby0+bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQpIHsKKyAgICAgICAg
ICAgICAgICBzdGFydCA9IG1faW5mby0+bGFzdEl0ZW07CisgICAgICAgICAgICAgICAgcmVtYWlu
aW5nT2Zmc2V0IC09IG1faW5mby0+bGFzdEl0ZW1PZmZzZXQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xMzIsMTQgKzE0MiwxNCBAQCBOb2RlKiBOb2RlTGlzdDo6cmVjdXJz
aXZlSXRlbSh1bnNpZ25lZCBvCiAKIE5vZGUqIE5vZGVMaXN0OjppdGVtV2l0aE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CiB7Ci0gICAgaWYgKHJvb3ROb2RlLT5pc0Rv
Y3VtZW50Tm9kZSgpIHx8IHJvb3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKLSAgICAgICAgTm9kZSog
bm9kZSA9IHJvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwor
ICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IG1fcm9vdE5vZGUtPmluRG9j
dW1lbnQoKSkgeworICAgICAgICBOb2RlKiBub2RlID0gbV9yb290Tm9kZS0+ZG9jdW1lbnQoKS0+
Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKIAogICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGVN
YXRjaGVzKG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgZm9yIChOb2Rl
KiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFyZW50Tm9kZSgpKQotICAgICAg
ICAgICAgaWYgKHAgPT0gcm9vdE5vZGUpCisgICAgICAgICAgICBpZiAocCA9PSBtX3Jvb3ROb2Rl
KQogICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAt
MTU3LDkgKzE2NywyMiBAQCBOb2RlKiBOb2RlTGlzdDo6aXRlbVdpdGhOYW1lKGNvbnN0IEF0b21p
CiAKIHZvaWQgTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCkKIHsKKyAgICBtX2lu
Zm8tPnJlc2V0KCk7Cit9CisKKworTm9kZUxpc3Q6Ok5vZGVMaXN0SW5mbzo6Tm9kZUxpc3RJbmZv
KCkKKyAgICA6IGxhc3RJdGVtKDApCisgICAgLCBpc0xlbmd0aENhY2hlVmFsaWQoZmFsc2UpCisg
ICAgLCBpc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQoreworfQorCit2b2lkIE5vZGVMaXN0OjpOb2Rl
TGlzdEluZm86OnJlc2V0KCkKK3sKKyAgICBsYXN0SXRlbSA9IDA7CiAgICAgaXNMZW5ndGhDYWNo
ZVZhbGlkID0gZmFsc2U7CiAgICAgaXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOyAgICAgCi0gICAg
bGFzdEl0ZW0gPSAwOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmgJKHJldmlzaW9uIDIwOTk1KQorKysgV2Vi
Q29yZS9kb20vTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsMjAgQEAgY2xh
c3MgTm9kZTsKIAogY2xhc3MgTm9kZUxpc3QgOiBwdWJsaWMgU2hhcmVkPE5vZGVMaXN0PiB7CiBw
dWJsaWM6CisKKyAgICBzdHJ1Y3QgTm9kZUxpc3RJbmZvIHsKKyAgICAgICAgTm9kZUxpc3RJbmZv
KCk7CisgICAgICAgIHZvaWQgcmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIGludCBjYWNoZWRM
ZW5ndGg7CisgICAgICAgIE5vZGUqIGxhc3RJdGVtOworICAgICAgICB1bnNpZ25lZCBsYXN0SXRl
bU9mZnNldDsKKyAgICAgICAgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQgOiAxOworICAgICAgICBi
b29sIGlzSXRlbUNhY2hlVmFsaWQgOiAxOworICAgIH07CisKICAgICBOb2RlTGlzdChQYXNzUmVm
UHRyPE5vZGU+IHJvb3ROb2RlKTsKKyAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3RO
b2RlLCBOb2RlTGlzdEluZm8qKTsKICAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpOwogCiAgICAgLy8g
RE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlTGlzdApAQCAtNTUsMTIgKzY4LDkgQEAg
cHJvdGVjdGVkOgogICAgIE5vZGUqIHJlY3Vyc2l2ZUl0ZW0gKHVuc2lnbmVkIG9mZnNldCwgTm9k
ZSogc3RhcnQgPSAwKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSog
dGVzdE5vZGUpIGNvbnN0ID0gMDsKIAotICAgIFJlZlB0cjxOb2RlPiByb290Tm9kZTsKLSAgICBt
dXRhYmxlIGludCBjYWNoZWRMZW5ndGg7Ci0gICAgbXV0YWJsZSBOb2RlKiBsYXN0SXRlbTsKLSAg
ICBtdXRhYmxlIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0OwotICAgIG11dGFibGUgYm9vbCBpc0xl
bmd0aENhY2hlVmFsaWQgOiAxOwotICAgIG11dGFibGUgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDog
MTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9yb290Tm9kZTsKKyAgICBtdXRhYmxlIE5vZGVMaXN0SW5m
byogbV9pbmZvOworICAgIGJvb2wgbV9vd25zSW5mbzsKIAogIHByaXZhdGU6CiAgICAgTm9kZSog
aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50
IHJlbWFpbmluZ09mZnNldCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14124</attachid>
            <date>2007-04-21 10:56:52 -0700</date>
            <delta_ts>2007-04-21 10:58:38 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>13115r2_patch.txt</filename>
            <type>text/plain</type>
            <size>13740</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDctMDQtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTE1CisgICAgICAgIFJF
R1JFU1NJT046IDEwMDAlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gRE9NIGFjY2VzcyBieSBp
bmRleCwgd2hpY2ggd2FzIGFscmVhZHkgc2xvdworCisgICAgICAgICogZG9tL05vZGVMaXN0Lmg6
IE1vdmUgY2FjaGVkIGRhdGEgaW50byBhIHNlcGFyYXRlIGNsYXNzLCBzbyBpdCBjYW4gYmUgc2hh
cmVkLgorCisgICAgICAgICogZG9tL05vZGUuaDogUmVwbGFjZSB0aGUgc2V0IG9mIHJlZ2lzdGVy
ZWQgTm9kZUxpc3RzIHdpdGggYSBzdHJ1Y3QgdGhhdCBhbHNvCisgICAgICAgIGNvbnRhaW5zIGNh
Y2hlZCBOb2RlTGlzdDo6Q2FjaGVzIChzbyB0aGUgc2l6ZSBvZiBOb2RlIGRvZXNuJ3QgY2hhbmdl
KS4KKworICAgICAgICAqIGRvbS9Ob2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
TGlzdDo6Tm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Q6On5Ob2RlTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVM
aXN0OjppdGVtV2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Q6OnJvb3ROb2Rl
Q2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0OjpOb2RlTGlzdElu
Zm86Ok5vZGVMaXN0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdDo6Tm9kZUxpc3RJ
bmZvOjpyZXNldCk6CisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaGlsZE5vZGVMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlz
dDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6
CisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjaGlsZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dW5yZWdp
c3Rlck5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om5vdGlmeUxvY2FsTm9kZUxp
c3RzQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlMb2Nh
bE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIEFkanVzdCBmb3IgdGhlIGFib3Zl
IGNoYW5nZXMuCisKIDIwMDctMDQtMjEgIExhbWFyIEdvZGRhcmQgPGxhbWFyZ29kZGFyZEBnbWFp
bC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJDb3JlL2RvbS9D
aGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmNwcAkocmV2aXNpb24gMjA5OTUpCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMzggKzMwLDM4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3Qo
IE5vZGUgKm4gKQotICAgIDogTm9kZUxpc3QobikKK0NoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxp
c3QoTm9kZSogbiwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbykKKyAgICA6IE5vZGVMaXN0KG4sIGlu
Zm8pCiB7CiB9CiAKIHVuc2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuIGNhY2hlZExlbmd0aDsK
KyAgICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCkKKyAgICAgICAgcmV0dXJuIG1f
Y2FjaGVzLT5jYWNoZWRMZW5ndGg7CiAKICAgICB1bnNpZ25lZCBsZW4gPSAwOwogICAgIE5vZGUg
Km47Ci0gICAgZm9yKG4gPSByb290Tm9kZS0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5u
ZXh0U2libGluZygpKQorICAgIGZvciAobiA9IG1fcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsgbiAh
PSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbGVuKys7CiAKLSAgICBjYWNoZWRM
ZW5ndGggPSBsZW47Ci0gICAgaXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICBtX2NhY2hl
cy0+Y2FjaGVkTGVuZ3RoID0gbGVuOworICAgIG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQg
PSB0cnVlOwogCiAgICAgcmV0dXJuIGxlbjsKIH0KIAotTm9kZSAqQ2hpbGROb2RlTGlzdDo6aXRl
bSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3QKK05vZGUgKkNoaWxkTm9kZUxpc3Q6Oml0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0gICAgTm9k
ZSAqbiA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7CisgICAgTm9kZSAqbiA9IG1fcm9vdE5vZGUt
PmZpcnN0Q2hpbGQoKTsKIAotICAgIGlmIChpc0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAgICAgIGlm
IChpbmRleCA9PSBsYXN0SXRlbU9mZnNldCkgewotICAgICAgICAgICAgcmV0dXJuIGxhc3RJdGVt
OwotICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gbGFzdEl0ZW1PZmZzZXQpIHsKLSAgICAgICAg
ICAgIG4gPSBsYXN0SXRlbTsKLSAgICAgICAgICAgIHBvcyA9IGxhc3RJdGVtT2Zmc2V0OworICAg
IGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgeworICAgICAgICBpZiAoaW5kZXggPT0g
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5s
YXN0SXRlbTsKKyAgICAgICAgaWYgKGluZGV4ID4gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KSB7
CisgICAgICAgICAgICBuID0gbV9jYWNoZXMtPmxhc3RJdGVtOworICAgICAgICAgICAgcG9zID0g
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OwogICAgICAgICB9CiAgICAgfQogCkBAIC03MSw5ICs3
MSw5IEBAIE5vZGUgKkNoaWxkTm9kZUxpc3Q6Oml0ZW0gKCB1bnNpZ25lZCBpbmQKICAgICB9CiAK
ICAgICBpZiAobikgewotICAgICAgICBsYXN0SXRlbSA9IG47Ci0gICAgICAgIGxhc3RJdGVtT2Zm
c2V0ID0gcG9zOwotICAgICAgICBpc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgbV9j
YWNoZXMtPmxhc3RJdGVtID0gbjsKKyAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0g
cG9zOworICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CiAgICAgICAg
IHJldHVybiBuOwogICAgIH0KIApAQCAtODIsNyArODIsNyBAQCBOb2RlICpDaGlsZE5vZGVMaXN0
OjppdGVtICggdW5zaWduZWQgaW5kCiAKIGJvb2wgQ2hpbGROb2RlTGlzdDo6bm9kZU1hdGNoZXMo
Tm9kZSAqdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRlc3ROb2RlLT5wYXJlbnROb2Rl
KCkgPT0gcm9vdE5vZGU7CisgICAgcmV0dXJuIHRlc3ROb2RlLT5wYXJlbnROb2RlKCkgPT0gbV9y
b290Tm9kZTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24gMjA5OTUpCisr
KyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDaGlsZE5vZGVMaXN0IDogcHVibGlj
IE5vZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBDaGlsZE5vZGVMaXN0KE5vZGUqKTsKKyAgICBDaGls
ZE5vZGVMaXN0KE5vZGUqLCBOb2RlTGlzdDo6Q2FjaGVzKik7CiAKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCit0eXBlZGVmIEhhc2hTZXQ8Tm9kZUxpc3Qq
PiBOb2RlTGlzdFNldDsKK3N0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSB7CisgICAgTm9kZUxpc3RT
ZXQgbV9yZWdpc3RlcmVkTGlzdHM7CisgICAgTm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZXNM
aXN0SW5mbzsKK307CisKKwogLyoqCiAgKiBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMg
aW4gYSBkb2N1bWVudCB3aXRoIGEgZ2l2ZW4gdGFnIG5hbWUKICAqLwpAQCAtMjE1LDcgKzIyMiwx
MCBAQCB2b2lkIE5vZGU6OnNldE5vZGVWYWx1ZSggY29uc3QgU3RyaW5nICYvCiAKIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IE5vZGU6OmNoaWxkTm9kZXMoKQogewotICAgIHJldHVybiBuZXcgQ2hpbGRO
b2RlTGlzdCh0aGlzKTsKKyAgICBpZiAoIW1fbm9kZUxpc3RzKQorICAgICAgICBtX25vZGVMaXN0
cyA9IG5ldyBOb2RlTGlzdHNOb2RlRGF0YTsKKworICAgIHJldHVybiBuZXcgQ2hpbGROb2RlTGlz
dCh0aGlzLCAmbV9ub2RlTGlzdHMtPm1fY2hpbGROb2Rlc0xpc3RJbmZvKTsKIH0KIAogTm9kZSAq
Tm9kZTo6Zmlyc3RDaGlsZCgpIGNvbnN0CkBAIC00MzAsMTUgKzQ0MCwxNSBAQCB1bnNpZ25lZCBO
b2RlOjpub2RlSW5kZXgoKSBjb25zdAogdm9pZCBOb2RlOjpyZWdpc3Rlck5vZGVMaXN0KE5vZGVM
aXN0KiBsaXN0KQogewogICAgIGlmICghbV9ub2RlTGlzdHMpCi0gICAgICAgIG1fbm9kZUxpc3Rz
ID0gbmV3IE5vZGVMaXN0U2V0OwotICAgIG1fbm9kZUxpc3RzLT5hZGQobGlzdCk7CisgICAgICAg
IG1fbm9kZUxpc3RzID0gbmV3IE5vZGVMaXN0c05vZGVEYXRhOworICAgIG1fbm9kZUxpc3RzLT5t
X3JlZ2lzdGVyZWRMaXN0cy5hZGQobGlzdCk7CiB9CiAKIHZvaWQgTm9kZTo6dW5yZWdpc3Rlck5v
ZGVMaXN0KE5vZGVMaXN0KiBsaXN0KQogewogICAgIGlmICghbV9ub2RlTGlzdHMpCiAgICAgICAg
IHJldHVybjsKLSAgICBtX25vZGVMaXN0cy0+cmVtb3ZlKGxpc3QpOworICAgIG1fbm9kZUxpc3Rz
LT5tX3JlZ2lzdGVyZWRMaXN0cy5yZW1vdmUobGlzdCk7CiB9CiAKIHZvaWQgTm9kZTo6bm90aWZ5
TG9jYWxOb2RlTGlzdHNBdHRyaWJ1dGVDaGFuZ2VkKCkKQEAgLTQ0Niw4ICs0NTYsOCBAQCB2b2lk
IE5vZGU6Om5vdGlmeUxvY2FsTm9kZUxpc3RzQXR0cmlidXRlCiAgICAgaWYgKCFtX25vZGVMaXN0
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1f
bm9kZUxpc3RzLT5lbmQoKTsKLSAgICBmb3IgKE5vZGVMaXN0U2V0OjppdGVyYXRvciBpID0gbV9u
b2RlTGlzdHMtPmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCisgICAgTm9kZUxpc3RTZXQ6Oml0ZXJh
dG9yIGVuZCA9IG1fbm9kZUxpc3RzLT5tX3JlZ2lzdGVyZWRMaXN0cy5lbmQoKTsKKyAgICBmb3Ig
KE5vZGVMaXN0U2V0OjppdGVyYXRvciBpID0gbV9ub2RlTGlzdHMtPm1fcmVnaXN0ZXJlZExpc3Rz
LmJlZ2luKCk7IGkgIT0gZW5kOyArK2kpCiAgICAgICAgICgqaSktPnJvb3ROb2RlQXR0cmlidXRl
Q2hhbmdlZCgpOwogfQogCkBAIC00NjIsOCArNDcyLDggQEAgdm9pZCBOb2RlOjpub3RpZnlMb2Nh
bE5vZGVMaXN0c0NoaWxkcmVuQwogICAgIGlmICghbV9ub2RlTGlzdHMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVMaXN0cy0+ZW5kKCk7
Ci0gICAgZm9yIChOb2RlTGlzdFNldDo6aXRlcmF0b3IgaSA9IG1fbm9kZUxpc3RzLT5iZWdpbigp
OyBpICE9IGVuZDsgKytpKQorICAgIE5vZGVMaXN0U2V0OjppdGVyYXRvciBlbmQgPSBtX25vZGVM
aXN0cy0+bV9yZWdpc3RlcmVkTGlzdHMuZW5kKCk7CisgICAgZm9yIChOb2RlTGlzdFNldDo6aXRl
cmF0b3IgaSA9IG1fbm9kZUxpc3RzLT5tX3JlZ2lzdGVyZWRMaXN0cy5iZWdpbigpOyBpICE9IGVu
ZDsgKytpKQogICAgICAgICAoKmkpLT5yb290Tm9kZUNoaWxkcmVuQ2hhbmdlZCgpOwogfQogCklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5o
CShyZXZpc2lvbiAyMDk5NSkKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNiArNDUsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKIGNs
YXNzIE5hbWVkQXR0ck1hcDsKIGNsYXNzIE5vZGVMaXN0Oworc3RydWN0IE5vZGVMaXN0c05vZGVE
YXRhOwogY2xhc3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2
ZW50OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwpAQCAtNDU2LDggKzQ1Nyw3IEBAIHByaXZh
dGU6IC8vIG1lbWJlcnMKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CiAKIHByb3RlY3Rl
ZDoKLSAgICB0eXBlZGVmIEhhc2hTZXQ8Tm9kZUxpc3QqPiBOb2RlTGlzdFNldDsKLSAgICBOb2Rl
TGlzdFNldCogbV9ub2RlTGlzdHM7CisgICAgTm9kZUxpc3RzTm9kZURhdGEqIG1fbm9kZUxpc3Rz
OwogCiAgICAgc2hvcnQgbV90YWJJbmRleDsKIApJbmRleDogV2ViQ29yZS9kb20vTm9kZUxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcAkocmV2aXNpb24gMjA5
OTUpCisrKyBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI2
ICszMCwzNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU5vZGVMaXN0OjpOb2RlTGlzdChQ
YXNzUmVmUHRyPE5vZGU+IF9yb290Tm9kZSkKLSAgICA6IHJvb3ROb2RlKF9yb290Tm9kZSksCi0g
ICAgICBpc0xlbmd0aENhY2hlVmFsaWQoZmFsc2UpLAotICAgICAgaXNJdGVtQ2FjaGVWYWxpZChm
YWxzZSkKK05vZGVMaXN0OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlKQorICAg
IDogbV9yb290Tm9kZShyb290Tm9kZSkKKyAgICAsIG1fY2FjaGVzKG5ldyBDYWNoZXMpCisgICAg
LCBtX293bnNJbmZvKHRydWUpCiB7Ci0gICAgcm9vdE5vZGUtPnJlZ2lzdGVyTm9kZUxpc3QodGhp
cyk7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsKK30gICAgCisKK05v
ZGVMaXN0OjpOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBOb2RlTGlzdDo6Q2Fj
aGVzKiBpbmZvKQorICAgIDogbV9yb290Tm9kZShyb290Tm9kZSkKKyAgICAsIG1fY2FjaGVzKGlu
Zm8pCisgICAgLCBtX293bnNJbmZvKGZhbHNlKQoreworICAgIG1fcm9vdE5vZGUtPnJlZ2lzdGVy
Tm9kZUxpc3QodGhpcyk7CiB9ICAgIAogCiBOb2RlTGlzdDo6fk5vZGVMaXN0KCkKIHsKLSAgICBy
b290Tm9kZS0+dW5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAgIG1fcm9vdE5vZGUtPnVucmVn
aXN0ZXJOb2RlTGlzdCh0aGlzKTsKKyAgICBpZiAobV9vd25zSW5mbykKKyAgICAgICAgZGVsZXRl
IG1fY2FjaGVzOwogfQogCiB1bnNpZ25lZCBOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKE5vZGUq
IHN0YXJ0KSBjb25zdAogewogICAgIGlmICghc3RhcnQpCi0gICAgICAgIHN0YXJ0ID0gcm9vdE5v
ZGUuZ2V0KCk7CisgICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS5nZXQoKTsKIAotICAgIGlmIChp
c0xlbmd0aENhY2hlVmFsaWQgJiYgc3RhcnQgPT0gcm9vdE5vZGUpCi0gICAgICAgIHJldHVybiBj
YWNoZWRMZW5ndGg7CisgICAgaWYgKG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQgJiYgc3Rh
cnQgPT0gbV9yb290Tm9kZSkKKyAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5jYWNoZWRMZW5ndGg7
CiAKICAgICB1bnNpZ25lZCBsZW4gPSAwOwogCkBAIC02MCw5ICs3MCw5IEBAIHVuc2lnbmVkIE5v
ZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9kZSoKICAgICAgICAgICAgIGxlbiArPSByZWN1cnNp
dmVMZW5ndGgobik7CiAgICAgICAgIH0KIAotICAgIGlmIChzdGFydCA9PSByb290Tm9kZSkgewot
ICAgICAgICBjYWNoZWRMZW5ndGggPSBsZW47Ci0gICAgICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZCA9
IHRydWU7CisgICAgaWYgKHN0YXJ0ID09IG1fcm9vdE5vZGUpIHsKKyAgICAgICAgbV9jYWNoZXMt
PmNhY2hlZExlbmd0aCA9IGxlbjsKKyAgICAgICAgbV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxp
ZCA9IHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGxlbjsKQEAgLTcyLDEzICs4MiwxMyBAQCBO
b2RlKiBOb2RlTGlzdDo6aXRlbUZvcndhcmRzRnJvbUN1cnJlbnQoCiB7CiAgICAgQVNTRVJUKHJl
bWFpbmluZ09mZnNldCA+PSAwKTsKIAotICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZS5nZXQoKSkpIHsKKyAgICBmb3IgKE5vZGUgKm4g
PSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsK
ICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKG5vZGVN
YXRjaGVzKG4pKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgICAgICBsYXN0
SXRlbU9mZnNldCA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgaXNJdGVtQ2FjaGVWYWxp
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47Cisg
ICAgICAgICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKKyAg
ICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgcmVtYWluaW5nT2Zmc2V0LS07CkBAIC05MiwxMyArMTAyLDEzIEBAIE5vZGUqIE5vZGVM
aXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCgKIE5vZGUqIE5vZGVMaXN0OjppdGVtQmFja3dh
cmRzRnJvbUN1cnJlbnQoTm9kZSogc3RhcnQsIHVuc2lnbmVkIG9mZnNldCwgaW50IHJlbWFpbmlu
Z09mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQocmVtYWluaW5nT2Zmc2V0IDwgMCk7Ci0gICAg
Zm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZShyb290
Tm9kZS5nZXQoKSkpIHsKKyAgICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZl
cnNlUHJldmlvdXNOb2RlKG1fcm9vdE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChuLT5pc0Vs
ZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuKSkgewogICAgICAg
ICAgICAgICAgIGlmICghcmVtYWluaW5nT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGxh
c3RJdGVtID0gbjsKLSAgICAgICAgICAgICAgICAgICAgbGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7
Ci0gICAgICAgICAgICAgICAgICAgIGlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBtX2NhY2hlcy0+bGFzdEl0ZW0gPSBuOworICAgICAgICAgICAgICAgICAgICBt
X2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIG1f
Y2FjaGVzLT5pc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlbWFpbmluZ09mZnNl
dCsrOwpAQCAtMTEzLDEzICsxMjMsMTMgQEAgTm9kZSogTm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0o
dW5zaWduZWQgbwogewogICAgIGludCByZW1haW5pbmdPZmZzZXQgPSBvZmZzZXQ7CiAgICAgaWYg
KCFzdGFydCkgewotICAgICAgICBzdGFydCA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7Ci0gICAg
ICAgIGlmIChpc0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0ID09IGxh
c3RJdGVtT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RJdGVtOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPiBsYXN0SXRlbU9mZnNldCB8fCBsYXN0SXRlbU9mZnNl
dCAtIG9mZnNldCA8IG9mZnNldCkgewotICAgICAgICAgICAgICAgIHN0YXJ0ID0gbGFzdEl0ZW07
Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zmc2V0IC09IGxhc3RJdGVtT2Zmc2V0OworICAg
ICAgICBzdGFydCA9IG1fcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgaWYgKG1fY2Fj
aGVzLT5pc0l0ZW1DYWNoZVZhbGlkKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09IG1fY2Fj
aGVzLT5sYXN0SXRlbU9mZnNldCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NhY2hlcy0+
bGFzdEl0ZW07CisgICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA+IG1fY2FjaGVzLT5sYXN0
SXRlbU9mZnNldCB8fCBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQgLSBvZmZzZXQgPCBvZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICBzdGFydCA9IG1fY2FjaGVzLT5sYXN0SXRlbTsKKyAgICAgICAg
ICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTMyLDE0ICsxNDIsMTQgQEAgTm9kZSog
Tm9kZUxpc3Q6OnJlY3Vyc2l2ZUl0ZW0odW5zaWduZWQgbwogCiBOb2RlKiBOb2RlTGlzdDo6aXRl
bVdpdGhOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElkKSBjb25zdAogewotICAgIGlm
IChyb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCByb290Tm9kZS0+aW5Eb2N1bWVudCgpKSB7
Ci0gICAgICAgIE5vZGUqIG5vZGUgPSByb290Tm9kZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5
SWQoZWxlbWVudElkKTsKKyAgICBpZiAobV9yb290Tm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8fCBt
X3Jvb3ROb2RlLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fcm9vdE5v
ZGUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7CiAKICAgICAgICAgaWYg
KCFub2RlIHx8ICFub2RlTWF0Y2hlcyhub2RlKSkKICAgICAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgICAgIGZvciAoTm9kZSogcCA9IG5vZGUtPnBhcmVudE5vZGUoKTsgcDsgcCA9IHAtPnBhcmVu
dE5vZGUoKSkKLSAgICAgICAgICAgIGlmIChwID09IHJvb3ROb2RlKQorICAgICAgICAgICAgaWYg
KHAgPT0gbV9yb290Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKIAogICAgICAg
ICByZXR1cm4gMDsKQEAgLTE1Nyw5ICsxNjcsMjIgQEAgTm9kZSogTm9kZUxpc3Q6Oml0ZW1XaXRo
TmFtZShjb25zdCBBdG9taQogCiB2b2lkIE5vZGVMaXN0Ojpyb290Tm9kZUNoaWxkcmVuQ2hhbmdl
ZCgpCiB7CisgICAgbV9jYWNoZXMtPnJlc2V0KCk7Cit9CisKKworTm9kZUxpc3Q6OkNhY2hlczo6
Q2FjaGVzKCkKKyAgICA6IGxhc3RJdGVtKDApCisgICAgLCBpc0xlbmd0aENhY2hlVmFsaWQoZmFs
c2UpCisgICAgLCBpc0l0ZW1DYWNoZVZhbGlkKGZhbHNlKQoreworfQorCit2b2lkIE5vZGVMaXN0
OjpDYWNoZXM6OnJlc2V0KCkKK3sKKyAgICBsYXN0SXRlbSA9IDA7CiAgICAgaXNMZW5ndGhDYWNo
ZVZhbGlkID0gZmFsc2U7CiAgICAgaXNJdGVtQ2FjaGVWYWxpZCA9IGZhbHNlOyAgICAgCi0gICAg
bGFzdEl0ZW0gPSAwOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGVMaXN0LmgJKHJldmlzaW9uIDIwOTk1KQorKysgV2Vi
Q29yZS9kb20vTm9kZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsMjAgQEAgY2xh
c3MgTm9kZTsKIAogY2xhc3MgTm9kZUxpc3QgOiBwdWJsaWMgU2hhcmVkPE5vZGVMaXN0PiB7CiBw
dWJsaWM6CisKKyAgICBzdHJ1Y3QgQ2FjaGVzIHsKKyAgICAgICAgQ2FjaGVzKCk7CisgICAgICAg
IHZvaWQgcmVzZXQoKTsKKyAgICAgICAgCisgICAgICAgIGludCBjYWNoZWRMZW5ndGg7CisgICAg
ICAgIE5vZGUqIGxhc3RJdGVtOworICAgICAgICB1bnNpZ25lZCBsYXN0SXRlbU9mZnNldDsKKyAg
ICAgICAgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQgOiAxOworICAgICAgICBib29sIGlzSXRlbUNh
Y2hlVmFsaWQgOiAxOworICAgIH07CisKICAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJv
b3ROb2RlKTsKKyAgICBOb2RlTGlzdChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDYWNoZXMq
KTsKICAgICB2aXJ0dWFsIH5Ob2RlTGlzdCgpOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRy
aWJ1dGVzIGZvciBOb2RlTGlzdApAQCAtNTUsMTIgKzY4LDkgQEAgcHJvdGVjdGVkOgogICAgIE5v
ZGUqIHJlY3Vyc2l2ZUl0ZW0gKHVuc2lnbmVkIG9mZnNldCwgTm9kZSogc3RhcnQgPSAwKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZSogdGVzdE5vZGUpIGNvbnN0ID0g
MDsKIAotICAgIFJlZlB0cjxOb2RlPiByb290Tm9kZTsKLSAgICBtdXRhYmxlIGludCBjYWNoZWRM
ZW5ndGg7Ci0gICAgbXV0YWJsZSBOb2RlKiBsYXN0SXRlbTsKLSAgICBtdXRhYmxlIHVuc2lnbmVk
IGxhc3RJdGVtT2Zmc2V0OwotICAgIG11dGFibGUgYm9vbCBpc0xlbmd0aENhY2hlVmFsaWQgOiAx
OwotICAgIG11dGFibGUgYm9vbCBpc0l0ZW1DYWNoZVZhbGlkIDogMTsKKyAgICBSZWZQdHI8Tm9k
ZT4gbV9yb290Tm9kZTsKKyAgICBtdXRhYmxlIENhY2hlcyogbV9jYWNoZXM7CisgICAgYm9vbCBt
X293bnNJbmZvOwogCiAgcHJpdmF0ZToKICAgICBOb2RlKiBpdGVtRm9yd2FyZHNGcm9tQ3VycmVu
dChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWluaW5nT2Zmc2V0KSBjb25z
dDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14125</attachid>
            <date>2007-04-21 10:58:38 -0700</date>
            <delta_ts>2007-04-21 15:58:27 -0700</delta_ts>
            <desc>proposed fix</desc>
            <filename>13115r2_patch.txt</filename>
            <type>text/plain</type>
            <size>13742</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk5NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMDctMDQtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTE1CisgICAgICAgIFJF
R1JFU1NJT046IDEwMDAlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gRE9NIGFjY2VzcyBieSBp
bmRleCwgd2hpY2ggd2FzIGFscmVhZHkgc2xvdworCisgICAgICAgICogZG9tL05vZGVMaXN0Lmg6
IE1vdmUgY2FjaGVkIGRhdGEgaW50byBhIHNlcGFyYXRlIGNsYXNzLCBzbyBpdCBjYW4gYmUgc2hh
cmVkLgorCisgICAgICAgICogZG9tL05vZGUuaDogUmVwbGFjZSB0aGUgc2V0IG9mIHJlZ2lzdGVy
ZWQgTm9kZUxpc3RzIHdpdGggYSBzdHJ1Y3QgdGhhdCBhbHNvCisgICAgICAgIGNvbnRhaW5zIGNh
Y2hlZCBOb2RlTGlzdDo6Q2FjaGVzIChzbyB0aGUgc2l6ZSBvZiBOb2RlIGRvZXNuJ3QgY2hhbmdl
KS4KKworICAgICAgICAqIGRvbS9Ob2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
TGlzdDo6Tm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Q6On5Ob2RlTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdDo6cmVjdXJzaXZlTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlTGlzdDo6aXRlbUJhY2t3YXJkc0Zyb21DdXJyZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGVMaXN0OjpyZWN1cnNpdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVM
aXN0OjppdGVtV2l0aE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3Q6OnJvb3ROb2Rl
Q2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0OjpOb2RlTGlzdElu
Zm86Ok5vZGVMaXN0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlTGlzdDo6Tm9kZUxpc3RJ
bmZvOjpyZXNldCk6CisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2hpbGROb2RlTGlzdDo6Q2hpbGROb2RlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDaGlsZE5vZGVMaXN0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGROb2RlTGlz
dDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojpub2RlTWF0Y2hlcyk6
CisgICAgICAgICogZG9tL0NoaWxkTm9kZUxpc3QuaDoKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjaGlsZE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6dW5yZWdp
c3Rlck5vZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om5vdGlmeUxvY2FsTm9kZUxp
c3RzQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpub3RpZnlMb2Nh
bE5vZGVMaXN0c0NoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIEFkanVzdCBmb3IgdGhlIGFib3Zl
IGNoYW5nZXMuCisKIDIwMDctMDQtMjEgIExhbWFyIEdvZGRhcmQgPGxhbWFyZ29kZGFyZEBnbWFp
bC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBXZWJDb3JlL2RvbS9D
aGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0
LmNwcAkocmV2aXNpb24gMjA5OTUpCisrKyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsMzggKzMwLDM4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxpc3Qo
IE5vZGUgKm4gKQotICAgIDogTm9kZUxpc3QobikKK0NoaWxkTm9kZUxpc3Q6OkNoaWxkTm9kZUxp
c3QoTm9kZSogbiwgTm9kZUxpc3Q6OkNhY2hlcyogaW5mbykKKyAgICA6IE5vZGVMaXN0KG4sIGlu
Zm8pCiB7CiB9CiAKIHVuc2lnbmVkIENoaWxkTm9kZUxpc3Q6Omxlbmd0aCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzTGVuZ3RoQ2FjaGVWYWxpZCkKLSAgICAgICAgcmV0dXJuIGNhY2hlZExlbmd0aDsK
KyAgICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCkKKyAgICAgICAgcmV0dXJuIG1f
Y2FjaGVzLT5jYWNoZWRMZW5ndGg7CiAKICAgICB1bnNpZ25lZCBsZW4gPSAwOwogICAgIE5vZGUg
Km47Ci0gICAgZm9yKG4gPSByb290Tm9kZS0+Zmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5u
ZXh0U2libGluZygpKQorICAgIGZvciAobiA9IG1fcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsgbiAh
PSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbGVuKys7CiAKLSAgICBjYWNoZWRM
ZW5ndGggPSBsZW47Ci0gICAgaXNMZW5ndGhDYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICBtX2NhY2hl
cy0+Y2FjaGVkTGVuZ3RoID0gbGVuOworICAgIG1fY2FjaGVzLT5pc0xlbmd0aENhY2hlVmFsaWQg
PSB0cnVlOwogCiAgICAgcmV0dXJuIGxlbjsKIH0KIAotTm9kZSAqQ2hpbGROb2RlTGlzdDo6aXRl
bSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3QKK05vZGUgKkNoaWxkTm9kZUxpc3Q6Oml0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0gICAgTm9k
ZSAqbiA9IHJvb3ROb2RlLT5maXJzdENoaWxkKCk7CisgICAgTm9kZSAqbiA9IG1fcm9vdE5vZGUt
PmZpcnN0Q2hpbGQoKTsKIAotICAgIGlmIChpc0l0ZW1DYWNoZVZhbGlkKSB7Ci0gICAgICAgIGlm
IChpbmRleCA9PSBsYXN0SXRlbU9mZnNldCkgewotICAgICAgICAgICAgcmV0dXJuIGxhc3RJdGVt
OwotICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gbGFzdEl0ZW1PZmZzZXQpIHsKLSAgICAgICAg
ICAgIG4gPSBsYXN0SXRlbTsKLSAgICAgICAgICAgIHBvcyA9IGxhc3RJdGVtT2Zmc2V0OworICAg
IGlmIChtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCkgeworICAgICAgICBpZiAoaW5kZXggPT0g
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVzLT5s
YXN0SXRlbTsKKyAgICAgICAgaWYgKGluZGV4ID4gbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0KSB7
CisgICAgICAgICAgICBuID0gbV9jYWNoZXMtPmxhc3RJdGVtOworICAgICAgICAgICAgcG9zID0g
bV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0OwogICAgICAgICB9CiAgICAgfQogCkBAIC03MSw5ICs3
MSw5IEBAIE5vZGUgKkNoaWxkTm9kZUxpc3Q6Oml0ZW0gKCB1bnNpZ25lZCBpbmQKICAgICB9CiAK
ICAgICBpZiAobikgewotICAgICAgICBsYXN0SXRlbSA9IG47Ci0gICAgICAgIGxhc3RJdGVtT2Zm
c2V0ID0gcG9zOwotICAgICAgICBpc0l0ZW1DYWNoZVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgbV9j
YWNoZXMtPmxhc3RJdGVtID0gbjsKKyAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0g
cG9zOworICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CiAgICAgICAg
IHJldHVybiBuOwogICAgIH0KIApAQCAtODIsNyArODIsNyBAQCBOb2RlICpDaGlsZE5vZGVMaXN0
OjppdGVtICggdW5zaWduZWQgaW5kCiAKIGJvb2wgQ2hpbGROb2RlTGlzdDo6bm9kZU1hdGNoZXMo
Tm9kZSAqdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRlc3ROb2RlLT5wYXJlbnROb2Rl
KCkgPT0gcm9vdE5vZGU7CisgICAgcmV0dXJuIHRlc3ROb2RlLT5wYXJlbnROb2RlKCkgPT0gbV9y
b290Tm9kZTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NoaWxkTm9kZUxpc3QuaAkocmV2aXNpb24gMjA5OTUpCisr
KyBXZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDaGlsZE5vZGVMaXN0IDogcHVibGlj
IE5vZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBDaGlsZE5vZGVMaXN0KE5vZGUqKTsKKyAgICBDaGls
ZE5vZGVMaXN0KE5vZGUqLCBOb2RlTGlzdDo6Q2FjaGVzKik7CiAKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogaXRlbSh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCit0eXBlZGVmIEhhc2hTZXQ8Tm9kZUxpc3Qq
PiBOb2RlTGlzdFNldDsKK3N0cnVjdCBOb2RlTGlzdHNOb2RlRGF0YSB7CisgICAgTm9kZUxpc3RT
ZXQgbV9yZWdpc3RlcmVkTGlzdHM7CisgICAgTm9kZUxpc3Q6OkNhY2hlcyBtX2NoaWxkTm9kZUxp
c3RDYWNoZXM7Cit9OworCisKIC8qKgogICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVz
IGluIGEgZG9jdW1lbnQgd2l0aCBhIGdpdmVuIHRhZyBuYW1lCiAgKi8KQEAgLTIxNSw3ICsyMjIs
MTAgQEAgdm9pZCBOb2RlOjpzZXROb2RlVmFsdWUoIGNvbnN0IFN0cmluZyAmLwogCiBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBOb2RlOjpjaGlsZE5vZGVzKCkKIHsKLSAgICByZXR1cm4gbmV3IENoaWxk
Tm9kZUxpc3QodGhpcyk7CisgICAgaWYgKCFtX25vZGVMaXN0cykKKyAgICAgICAgbV9ub2RlTGlz
dHMgPSBuZXcgTm9kZUxpc3RzTm9kZURhdGE7CisKKyAgICByZXR1cm4gbmV3IENoaWxkTm9kZUxp
c3QodGhpcywgJm1fbm9kZUxpc3RzLT5tX2NoaWxkTm9kZUxpc3RDYWNoZXMpOwogfQogCiBOb2Rl
ICpOb2RlOjpmaXJzdENoaWxkKCkgY29uc3QKQEAgLTQzMCwxNSArNDQwLDE1IEBAIHVuc2lnbmVk
IE5vZGU6Om5vZGVJbmRleCgpIGNvbnN0CiB2b2lkIE5vZGU6OnJlZ2lzdGVyTm9kZUxpc3QoTm9k
ZUxpc3QqIGxpc3QpCiB7CiAgICAgaWYgKCFtX25vZGVMaXN0cykKLSAgICAgICAgbV9ub2RlTGlz
dHMgPSBuZXcgTm9kZUxpc3RTZXQ7Ci0gICAgbV9ub2RlTGlzdHMtPmFkZChsaXN0KTsKKyAgICAg
ICAgbV9ub2RlTGlzdHMgPSBuZXcgTm9kZUxpc3RzTm9kZURhdGE7CisgICAgbV9ub2RlTGlzdHMt
Pm1fcmVnaXN0ZXJlZExpc3RzLmFkZChsaXN0KTsKIH0KIAogdm9pZCBOb2RlOjp1bnJlZ2lzdGVy
Tm9kZUxpc3QoTm9kZUxpc3QqIGxpc3QpCiB7CiAgICAgaWYgKCFtX25vZGVMaXN0cykKICAgICAg
ICAgcmV0dXJuOwotICAgIG1fbm9kZUxpc3RzLT5yZW1vdmUobGlzdCk7CisgICAgbV9ub2RlTGlz
dHMtPm1fcmVnaXN0ZXJlZExpc3RzLnJlbW92ZShsaXN0KTsKIH0KIAogdm9pZCBOb2RlOjpub3Rp
ZnlMb2NhbE5vZGVMaXN0c0F0dHJpYnV0ZUNoYW5nZWQoKQpAQCAtNDQ2LDggKzQ1Niw4IEBAIHZv
aWQgTm9kZTo6bm90aWZ5TG9jYWxOb2RlTGlzdHNBdHRyaWJ1dGUKICAgICBpZiAoIW1fbm9kZUxp
c3RzKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlTGlzdFNldDo6aXRlcmF0b3IgZW5kID0g
bV9ub2RlTGlzdHMtPmVuZCgpOwotICAgIGZvciAoTm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkgPSBt
X25vZGVMaXN0cy0+YmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICBOb2RlTGlzdFNldDo6aXRl
cmF0b3IgZW5kID0gbV9ub2RlTGlzdHMtPm1fcmVnaXN0ZXJlZExpc3RzLmVuZCgpOworICAgIGZv
ciAoTm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGkgPSBtX25vZGVMaXN0cy0+bV9yZWdpc3RlcmVkTGlz
dHMuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKICAgICAgICAgKCppKS0+cm9vdE5vZGVBdHRyaWJ1
dGVDaGFuZ2VkKCk7CiB9CiAKQEAgLTQ2Miw4ICs0NzIsOCBAQCB2b2lkIE5vZGU6Om5vdGlmeUxv
Y2FsTm9kZUxpc3RzQ2hpbGRyZW5DCiAgICAgaWYgKCFtX25vZGVMaXN0cykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgTm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fbm9kZUxpc3RzLT5lbmQo
KTsKLSAgICBmb3IgKE5vZGVMaXN0U2V0OjppdGVyYXRvciBpID0gbV9ub2RlTGlzdHMtPmJlZ2lu
KCk7IGkgIT0gZW5kOyArK2kpCisgICAgTm9kZUxpc3RTZXQ6Oml0ZXJhdG9yIGVuZCA9IG1fbm9k
ZUxpc3RzLT5tX3JlZ2lzdGVyZWRMaXN0cy5lbmQoKTsKKyAgICBmb3IgKE5vZGVMaXN0U2V0Ojpp
dGVyYXRvciBpID0gbV9ub2RlTGlzdHMtPm1fcmVnaXN0ZXJlZExpc3RzLmJlZ2luKCk7IGkgIT0g
ZW5kOyArK2kpCiAgICAgICAgICgqaSktPnJvb3ROb2RlQ2hpbGRyZW5DaGFuZ2VkKCk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2Rl
LmgJKHJldmlzaW9uIDIwOTk1KQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw2ICs0NSw3IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50Owog
Y2xhc3MgTmFtZWRBdHRyTWFwOwogY2xhc3MgTm9kZUxpc3Q7CitzdHJ1Y3QgTm9kZUxpc3RzTm9k
ZURhdGE7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNl
RXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CkBAIC00NTYsOCArNDU3LDcgQEAgcHJp
dmF0ZTogLy8gbWVtYmVycwogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKIAogcHJvdGVj
dGVkOgotICAgIHR5cGVkZWYgSGFzaFNldDxOb2RlTGlzdCo+IE5vZGVMaXN0U2V0OwotICAgIE5v
ZGVMaXN0U2V0KiBtX25vZGVMaXN0czsKKyAgICBOb2RlTGlzdHNOb2RlRGF0YSogbV9ub2RlTGlz
dHM7CiAKICAgICBzaG9ydCBtX3RhYkluZGV4OwogCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlTGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUxpc3QuY3BwCShyZXZpc2lvbiAy
MDk5NSkKKysrIFdlYkNvcmUvZG9tL05vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MjYgKzMwLDM2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTm9kZUxpc3Q6Ok5vZGVMaXN0
KFBhc3NSZWZQdHI8Tm9kZT4gX3Jvb3ROb2RlKQotICAgIDogcm9vdE5vZGUoX3Jvb3ROb2RlKSwK
LSAgICAgIGlzTGVuZ3RoQ2FjaGVWYWxpZChmYWxzZSksCi0gICAgICBpc0l0ZW1DYWNoZVZhbGlk
KGZhbHNlKQorTm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUpCisg
ICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQorICAgICwgbV9jYWNoZXMobmV3IENhY2hlcykKKyAg
ICAsIG1fb3duc0luZm8odHJ1ZSkKIHsKLSAgICByb290Tm9kZS0+cmVnaXN0ZXJOb2RlTGlzdCh0
aGlzKTsKKyAgICBtX3Jvb3ROb2RlLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworfSAgICAKKwor
Tm9kZUxpc3Q6Ok5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIE5vZGVMaXN0OjpD
YWNoZXMqIGluZm8pCisgICAgOiBtX3Jvb3ROb2RlKHJvb3ROb2RlKQorICAgICwgbV9jYWNoZXMo
aW5mbykKKyAgICAsIG1fb3duc0luZm8oZmFsc2UpCit7CisgICAgbV9yb290Tm9kZS0+cmVnaXN0
ZXJOb2RlTGlzdCh0aGlzKTsKIH0gICAgCiAKIE5vZGVMaXN0Ojp+Tm9kZUxpc3QoKQogewotICAg
IHJvb3ROb2RlLT51bnJlZ2lzdGVyTm9kZUxpc3QodGhpcyk7CisgICAgbV9yb290Tm9kZS0+dW5y
ZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAgIGlmIChtX293bnNJbmZvKQorICAgICAgICBkZWxl
dGUgbV9jYWNoZXM7CiB9CiAKIHVuc2lnbmVkIE5vZGVMaXN0OjpyZWN1cnNpdmVMZW5ndGgoTm9k
ZSogc3RhcnQpIGNvbnN0CiB7CiAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgc3RhcnQgPSByb290
Tm9kZS5nZXQoKTsKKyAgICAgICAgc3RhcnQgPSBtX3Jvb3ROb2RlLmdldCgpOwogCi0gICAgaWYg
KGlzTGVuZ3RoQ2FjaGVWYWxpZCAmJiBzdGFydCA9PSByb290Tm9kZSkKLSAgICAgICAgcmV0dXJu
IGNhY2hlZExlbmd0aDsKKyAgICBpZiAobV9jYWNoZXMtPmlzTGVuZ3RoQ2FjaGVWYWxpZCAmJiBz
dGFydCA9PSBtX3Jvb3ROb2RlKQorICAgICAgICByZXR1cm4gbV9jYWNoZXMtPmNhY2hlZExlbmd0
aDsKIAogICAgIHVuc2lnbmVkIGxlbiA9IDA7CiAKQEAgLTYwLDkgKzcwLDkgQEAgdW5zaWduZWQg
Tm9kZUxpc3Q6OnJlY3Vyc2l2ZUxlbmd0aChOb2RlKgogICAgICAgICAgICAgbGVuICs9IHJlY3Vy
c2l2ZUxlbmd0aChuKTsKICAgICAgICAgfQogCi0gICAgaWYgKHN0YXJ0ID09IHJvb3ROb2RlKSB7
Ci0gICAgICAgIGNhY2hlZExlbmd0aCA9IGxlbjsKLSAgICAgICAgaXNMZW5ndGhDYWNoZVZhbGlk
ID0gdHJ1ZTsKKyAgICBpZiAoc3RhcnQgPT0gbV9yb290Tm9kZSkgeworICAgICAgICBtX2NhY2hl
cy0+Y2FjaGVkTGVuZ3RoID0gbGVuOworICAgICAgICBtX2NhY2hlcy0+aXNMZW5ndGhDYWNoZVZh
bGlkID0gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gbGVuOwpAQCAtNzIsMTMgKzgyLDEzIEBA
IE5vZGUqIE5vZGVMaXN0OjppdGVtRm9yd2FyZHNGcm9tQ3VycmVudCgKIHsKICAgICBBU1NFUlQo
cmVtYWluaW5nT2Zmc2V0ID49IDApOwogCi0gICAgZm9yIChOb2RlICpuID0gc3RhcnQ7IG47IG4g
PSBuLT50cmF2ZXJzZU5leHROb2RlKHJvb3ROb2RlLmdldCgpKSkgeworICAgIGZvciAoTm9kZSAq
biA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShtX3Jvb3ROb2RlLmdldCgpKSkg
ewogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMobikpIHsKICAgICAgICAgICAgICAgICBpZiAoIXJlbWFpbmluZ09mZnNldCkgewot
ICAgICAgICAgICAgICAgICAgICBsYXN0SXRlbSA9IG47Ci0gICAgICAgICAgICAgICAgICAgIGxh
c3RJdGVtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpc0l0ZW1DYWNoZVZh
bGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtID0gbjsK
KyAgICAgICAgICAgICAgICAgICAgbV9jYWNoZXMtPmxhc3RJdGVtT2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICAgICAgICAgICAgICBtX2NhY2hlcy0+aXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICByZW1haW5pbmdPZmZzZXQtLTsKQEAgLTkyLDEzICsxMDIsMTMgQEAgTm9kZSogTm9k
ZUxpc3Q6Oml0ZW1Gb3J3YXJkc0Zyb21DdXJyZW50KAogTm9kZSogTm9kZUxpc3Q6Oml0ZW1CYWNr
d2FyZHNGcm9tQ3VycmVudChOb2RlKiBzdGFydCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgcmVtYWlu
aW5nT2Zmc2V0KSBjb25zdAogewogICAgIEFTU0VSVChyZW1haW5pbmdPZmZzZXQgPCAwKTsKLSAg
ICBmb3IgKE5vZGUgKm4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJv
b3ROb2RlLmdldCgpKSkgeworICAgIGZvciAoTm9kZSAqbiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJh
dmVyc2VQcmV2aW91c05vZGUobV9yb290Tm9kZS5nZXQoKSkpIHsKICAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4pKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAg
bGFzdEl0ZW0gPSBuOwotICAgICAgICAgICAgICAgICAgICBsYXN0SXRlbU9mZnNldCA9IG9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgaXNJdGVtQ2FjaGVWYWxpZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2FjaGVzLT5sYXN0SXRlbSA9IG47CisgICAgICAgICAgICAgICAgICAg
IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAg
bV9jYWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmVtYWluaW5nT2Zm
c2V0Kys7CkBAIC0xMTMsMTMgKzEyMywxMyBAQCBOb2RlKiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRl
bSh1bnNpZ25lZCBvCiB7CiAgICAgaW50IHJlbWFpbmluZ09mZnNldCA9IG9mZnNldDsKICAgICBp
ZiAoIXN0YXJ0KSB7Ci0gICAgICAgIHN0YXJ0ID0gcm9vdE5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAg
ICAgICAgaWYgKGlzSXRlbUNhY2hlVmFsaWQpIHsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPT0g
bGFzdEl0ZW1PZmZzZXQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFzdEl0ZW07Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA+IGxhc3RJdGVtT2Zmc2V0IHx8IGxhc3RJdGVtT2Zm
c2V0IC0gb2Zmc2V0IDwgb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgc3RhcnQgPSBsYXN0SXRl
bTsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdPZmZzZXQgLT0gbGFzdEl0ZW1PZmZzZXQ7Cisg
ICAgICAgIHN0YXJ0ID0gbV9yb290Tm9kZS0+Zmlyc3RDaGlsZCgpOworICAgICAgICBpZiAobV9j
YWNoZXMtPmlzSXRlbUNhY2hlVmFsaWQpIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPT0gbV9j
YWNoZXMtPmxhc3RJdGVtT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVz
LT5sYXN0SXRlbTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0ID4gbV9jYWNoZXMtPmxh
c3RJdGVtT2Zmc2V0IHx8IG1fY2FjaGVzLT5sYXN0SXRlbU9mZnNldCAtIG9mZnNldCA8IG9mZnNl
dCkgeworICAgICAgICAgICAgICAgIHN0YXJ0ID0gbV9jYWNoZXMtPmxhc3RJdGVtOworICAgICAg
ICAgICAgICAgIHJlbWFpbmluZ09mZnNldCAtPSBtX2NhY2hlcy0+bGFzdEl0ZW1PZmZzZXQ7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzIsMTQgKzE0MiwxNCBAQCBOb2Rl
KiBOb2RlTGlzdDo6cmVjdXJzaXZlSXRlbSh1bnNpZ25lZCBvCiAKIE5vZGUqIE5vZGVMaXN0Ojpp
dGVtV2l0aE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBlbGVtZW50SWQpIGNvbnN0CiB7Ci0gICAg
aWYgKHJvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IHJvb3ROb2RlLT5pbkRvY3VtZW50KCkp
IHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJvb3ROb2RlLT5kb2N1bWVudCgpLT5nZXRFbGVtZW50
QnlJZChlbGVtZW50SWQpOworICAgIGlmIChtX3Jvb3ROb2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8
IG1fcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkgeworICAgICAgICBOb2RlKiBub2RlID0gbV9yb290
Tm9kZS0+ZG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsKIAogICAgICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGVNYXRjaGVzKG5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICAgICAgZm9yIChOb2RlKiBwID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBwOyBwID0gcC0+cGFy
ZW50Tm9kZSgpKQotICAgICAgICAgICAgaWYgKHAgPT0gcm9vdE5vZGUpCisgICAgICAgICAgICBp
ZiAocCA9PSBtX3Jvb3ROb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwogCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMTU3LDkgKzE2NywyMiBAQCBOb2RlKiBOb2RlTGlzdDo6aXRlbVdp
dGhOYW1lKGNvbnN0IEF0b21pCiAKIHZvaWQgTm9kZUxpc3Q6OnJvb3ROb2RlQ2hpbGRyZW5DaGFu
Z2VkKCkKIHsKKyAgICBtX2NhY2hlcy0+cmVzZXQoKTsKK30KKworCitOb2RlTGlzdDo6Q2FjaGVz
OjpDYWNoZXMoKQorICAgIDogbGFzdEl0ZW0oMCkKKyAgICAsIGlzTGVuZ3RoQ2FjaGVWYWxpZChm
YWxzZSkKKyAgICAsIGlzSXRlbUNhY2hlVmFsaWQoZmFsc2UpCit7Cit9CisKK3ZvaWQgTm9kZUxp
c3Q6OkNhY2hlczo6cmVzZXQoKQoreworICAgIGxhc3RJdGVtID0gMDsKICAgICBpc0xlbmd0aENh
Y2hlVmFsaWQgPSBmYWxzZTsKICAgICBpc0l0ZW1DYWNoZVZhbGlkID0gZmFsc2U7ICAgICAKLSAg
ICBsYXN0SXRlbSA9IDA7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05vZGVMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZUxpc3QuaAkocmV2aXNpb24gMjA5OTUpCisrKyBX
ZWJDb3JlL2RvbS9Ob2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNywyMCBAQCBj
bGFzcyBOb2RlOwogCiBjbGFzcyBOb2RlTGlzdCA6IHB1YmxpYyBTaGFyZWQ8Tm9kZUxpc3Q+IHsK
IHB1YmxpYzoKKworICAgIHN0cnVjdCBDYWNoZXMgeworICAgICAgICBDYWNoZXMoKTsKKyAgICAg
ICAgdm9pZCByZXNldCgpOworICAgICAgICAKKyAgICAgICAgaW50IGNhY2hlZExlbmd0aDsKKyAg
ICAgICAgTm9kZSogbGFzdEl0ZW07CisgICAgICAgIHVuc2lnbmVkIGxhc3RJdGVtT2Zmc2V0Owor
ICAgICAgICBib29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCA6IDE7CisgICAgICAgIGJvb2wgaXNJdGVt
Q2FjaGVWYWxpZCA6IDE7CisgICAgfTsKKwogICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4g
cm9vdE5vZGUpOworICAgIE5vZGVMaXN0KFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIENhY2hl
cyopOwogICAgIHZpcnR1YWwgfk5vZGVMaXN0KCk7CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0
dHJpYnV0ZXMgZm9yIE5vZGVMaXN0CkBAIC01NSwxMiArNjgsOSBAQCBwcm90ZWN0ZWQ6CiAgICAg
Tm9kZSogcmVjdXJzaXZlSXRlbSAodW5zaWduZWQgb2Zmc2V0LCBOb2RlKiBzdGFydCA9IDApIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlKiB0ZXN0Tm9kZSkgY29uc3Qg
PSAwOwogCi0gICAgUmVmUHRyPE5vZGU+IHJvb3ROb2RlOwotICAgIG11dGFibGUgaW50IGNhY2hl
ZExlbmd0aDsKLSAgICBtdXRhYmxlIE5vZGUqIGxhc3RJdGVtOwotICAgIG11dGFibGUgdW5zaWdu
ZWQgbGFzdEl0ZW1PZmZzZXQ7Ci0gICAgbXV0YWJsZSBib29sIGlzTGVuZ3RoQ2FjaGVWYWxpZCA6
IDE7Ci0gICAgbXV0YWJsZSBib29sIGlzSXRlbUNhY2hlVmFsaWQgOiAxOworICAgIFJlZlB0cjxO
b2RlPiBtX3Jvb3ROb2RlOworICAgIG11dGFibGUgQ2FjaGVzKiBtX2NhY2hlczsKKyAgICBib29s
IG1fb3duc0luZm87CiAKICBwcml2YXRlOgogICAgIE5vZGUqIGl0ZW1Gb3J3YXJkc0Zyb21DdXJy
ZW50KE5vZGUqIHN0YXJ0LCB1bnNpZ25lZCBvZmZzZXQsIGludCByZW1haW5pbmdPZmZzZXQpIGNv
bnN0Owo=
</data>
<flag name="review"
          id="5722"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>