<?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>28156</bug_id>
          
          <creation_ts>2009-08-10 10:48:47 -0700</creation_ts>
          <short_desc>[V8] Fix memory leak in node event listeners. See http://crbug.com/17400.</short_desc>
          <delta_ts>2009-08-10 13:37:42 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vitaly Repeshko">vitalyr</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>138717</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-08-10 10:48:47 -0700</bug_when>
    <thetext>[V8] Fix http://crbug.com/17400.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138722</commentid>
    <comment_count>1</comment_count>
      <attachid>34482</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-08-10 10:55:02 -0700</bug_when>
    <thetext>Created attachment 34482
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138739</commentid>
    <comment_count>2</comment_count>
      <attachid>34482</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-10 11:18:26 -0700</bug_when>
    <thetext>Comment on attachment 34482
patch

Just a few style nits, LG overall:

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index ded636d..0b05faa 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,32 @@
&gt; +2009-08-10  Vitaly Repeshko  &lt;vitalyr@quad.spb.corp.google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [V8] Fix memory leak in node event listeners. See http://crbug.com/17400.
&gt; +
&gt; +	https://bugs.webkit.org/show_bug.cgi?id=28156

Indent w/same spacing as summary, no need for an extra line break between URL and summary.

&gt; +        * bindings/scripts/CodeGeneratorV8.pm:
&gt; +        * bindings/v8/V8AbstractEventListener.h:
&gt; +        (WebCore::V8AbstractEventListener::isObjectListener):
&gt; +        * bindings/v8/V8DOMWrapper.cpp:
&gt; +        (WebCore::V8DOMWrapper::getTemplate):
&gt; +        * bindings/v8/V8ObjectEventListener.cpp:
&gt; +        * bindings/v8/V8ObjectEventListener.h:
&gt; +        (WebCore::V8ObjectEventListener::isObjectListener):
&gt; +        * bindings/v8/V8Utilities.cpp:
&gt; +        (WebCore::removeHiddenDependency):
&gt; +        * bindings/v8/custom/V8CustomBinding.h:
&gt; +        * bindings/v8/custom/V8ElementCustom.cpp:
&gt; +        * bindings/v8/custom/V8NodeCustom.cpp:
&gt; +        (WebCore::toEventType):
&gt; +        (WebCore::getEventListener):
&gt; +        (WebCore::ACCESSOR_SETTER):
&gt; +        (WebCore::ACCESSOR_GETTER):
&gt; +        (WebCore::CALLBACK_FUNC_DECL):
&gt; +        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
&gt; +        (WebCore::getEventListener):

Please provide brief explanation of what changes were made for each method (or file, if the methods aren&apos;t listed). For example:

* bindings/scripts/CodeGeneratorV8.pm: Changed event handler to live at Node, rather than Element.

&gt; +END
&gt; +    if (IsNodeSubType($dataNode)) {
&gt; +        push(@implContent, &lt;&lt;END);
&gt; +  instance-&gt;SetInternalFieldCount(V8Custom::kNodeMinimumInternalFieldCount);

Is spacing correct here?

&gt; +END
&gt; +    } else {
&gt; +        push(@implContent, &lt;&lt;END);
&gt; +  instance-&gt;SetInternalFieldCount(V8Custom::kDefaultWrapperInternalFieldCount);

Ditto.

&gt; +    return PassRefPtr&lt;EventListener&gt;();

return 0;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138793</commentid>
    <comment_count>3</comment_count>
      <attachid>34507</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-08-10 13:24:32 -0700</bug_when>
    <thetext>Created attachment 34507
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138796</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2009-08-10 13:25:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 34482 [details])
&gt; Just a few style nits, LG overall:
&gt; 
&gt; &gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; &gt; index ded636d..0b05faa 100644
&gt; &gt; --- a/WebCore/ChangeLog
&gt; &gt; +++ b/WebCore/ChangeLog
&gt; &gt; @@ -1,3 +1,32 @@
&gt; &gt; +2009-08-10  Vitaly Repeshko  &lt;vitalyr@quad.spb.corp.google.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        [V8] Fix memory leak in node event listeners. See http://crbug.com/17400.
&gt; &gt; +
&gt; &gt; +	https://bugs.webkit.org/show_bug.cgi?id=28156
&gt; 
&gt; Indent w/same spacing as summary, no need for an extra line break between URL
&gt; and summary.
&gt; 
&gt; &gt; +        * bindings/scripts/CodeGeneratorV8.pm:
&gt; &gt; +        * bindings/v8/V8AbstractEventListener.h:
&gt; &gt; +        (WebCore::V8AbstractEventListener::isObjectListener):
&gt; &gt; +        * bindings/v8/V8DOMWrapper.cpp:
&gt; &gt; +        (WebCore::V8DOMWrapper::getTemplate):
&gt; &gt; +        * bindings/v8/V8ObjectEventListener.cpp:
&gt; &gt; +        * bindings/v8/V8ObjectEventListener.h:
&gt; &gt; +        (WebCore::V8ObjectEventListener::isObjectListener):
&gt; &gt; +        * bindings/v8/V8Utilities.cpp:
&gt; &gt; +        (WebCore::removeHiddenDependency):
&gt; &gt; +        * bindings/v8/custom/V8CustomBinding.h:
&gt; &gt; +        * bindings/v8/custom/V8ElementCustom.cpp:
&gt; &gt; +        * bindings/v8/custom/V8NodeCustom.cpp:
&gt; &gt; +        (WebCore::toEventType):
&gt; &gt; +        (WebCore::getEventListener):
&gt; &gt; +        (WebCore::ACCESSOR_SETTER):
&gt; &gt; +        (WebCore::ACCESSOR_GETTER):
&gt; &gt; +        (WebCore::CALLBACK_FUNC_DECL):
&gt; &gt; +        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
&gt; &gt; +        (WebCore::getEventListener):
&gt; 
&gt; Please provide brief explanation of what changes were made for each method (or
&gt; file, if the methods aren&apos;t listed). For example:
&gt; 
&gt; * bindings/scripts/CodeGeneratorV8.pm: Changed event handler to live at Node,
&gt; rather than Element.

Done.

&gt; &gt; +END
&gt; &gt; +    if (IsNodeSubType($dataNode)) {
&gt; &gt; +        push(@implContent, &lt;&lt;END);
&gt; &gt; +  instance-&gt;SetInternalFieldCount(V8Custom::kNodeMinimumInternalFieldCount);
&gt; 
&gt; Is spacing correct here?
&gt; 
&gt; &gt; +END
&gt; &gt; +    } else {
&gt; &gt; +        push(@implContent, &lt;&lt;END);
&gt; &gt; +  instance-&gt;SetInternalFieldCount(V8Custom::kDefaultWrapperInternalFieldCount);
&gt; 
&gt; Ditto.

Seems okay to me. Here we have separate indentation for Perl and generated code.

&gt; &gt; +    return PassRefPtr&lt;EventListener&gt;();
&gt; 
&gt; return 0;

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138797</commentid>
    <comment_count>5</comment_count>
      <attachid>34507</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-10 13:27:51 -0700</bug_when>
    <thetext>Comment on attachment 34507
updated patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138801</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-08-10 13:37:42 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/47001.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34482</attachid>
            <date>2009-08-10 10:55:02 -0700</date>
            <delta_ts>2009-08-10 11:18:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>fix_leak.patch</filename>
            <type>text/plain</type>
            <size>17303</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGVkNjM2ZC4uMGIwNWZhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAwOS0wOC0xMCAgVml0YWx5IFJlcGVz
aGtvICA8dml0YWx5ckBxdWFkLnNwYi5jb3JwLmdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1Y4XSBGaXggbWVtb3J5IGxlYWsgaW4g
bm9kZSBldmVudCBsaXN0ZW5lcnMuIFNlZSBodHRwOi8vY3JidWcuY29tLzE3NDAwLgorCisJaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MTU2CisKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXI6OmlzT2JqZWN0TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmdldFRl
bXBsYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuY3Bw
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RFdmVudExpc3RlbmVyOjppc09iamVjdExpc3RlbmVyKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpy
ZW1vdmVIaWRkZW5EZXBlbmRlbmN5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjp0b0V2ZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAg
ICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJB
Q0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVx
dWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRFdmVudExpc3RlbmVyKToKKwog
MjAwOS0wOC0xMCAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0KaW5kZXggNjNiMWVlZS4uZjY5NmU5ZiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC05NjEsOCArOTYxLDggQEAgc3ViIEdl
bmVyYXRlQmF0Y2hlZEF0dHJpYnV0ZURhdGEKICAgICAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4
Q3VzdG9tOjp2OERPTVdpbmRvd0V2ZW50SGFuZGxlckFjY2Vzc29yR2V0dGVyIjsKICAgICAgICAg
ICAgICAgICAkc2V0dGVyID0gIlY4Q3VzdG9tOjp2OERPTVdpbmRvd0V2ZW50SGFuZGxlckFjY2Vz
c29yU2V0dGVyIjsKICAgICAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJFbGVt
ZW50IiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiRG9jdW1lbnQiIHx8ICRpbnRlcmZhY2VOYW1lIGVx
ICJIVE1MQm9keUVsZW1lbnQiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJTVkdFbGVtZW50SW5zdGFu
Y2UiIHx8ICRpbnRlcmZhY2VOYW1lIGVxICJIVE1MRnJhbWVTZXRFbGVtZW50IikgewotICAgICAg
ICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4RWxlbWVudEV2ZW50SGFuZGxlckFjY2Vz
c29yR2V0dGVyIjsKLSAgICAgICAgICAgICAgICAkc2V0dGVyID0gIlY4Q3VzdG9tOjp2OEVsZW1l
bnRFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7CisgICAgICAgICAgICAgICAgJGdldHRlciA9
ICJWOEN1c3RvbTo6djhOb2RlRXZlbnRIYW5kbGVyQWNjZXNzb3JHZXR0ZXIiOworICAgICAgICAg
ICAgICAgICRzZXR0ZXIgPSAiVjhDdXN0b206OnY4Tm9kZUV2ZW50SGFuZGxlckFjY2Vzc29yU2V0
dGVyIjsKICAgICAgICAgICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01BcHBsaWNh
dGlvbkNhY2hlIikgewogICAgICAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206OnY4RE9N
QXBwbGljYXRpb25DYWNoZUV2ZW50SGFuZGxlckFjY2Vzc29yR2V0dGVyIjsKICAgICAgICAgICAg
ICAgICAkc2V0dGVyID0gIlY4Q3VzdG9tOjp2OERPTUFwcGxpY2F0aW9uQ2FjaGVFdmVudEhhbmRs
ZXJBY2Nlc3NvclNldHRlciI7CkBAIC0xMjQzLDcgKzEyNDMsMTggQEAgRU5ECiAgICAgcHVzaChA
aW1wbENvbnRlbnQsICA8PEVORCk7CiBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IENvbmZpZ3VyZSR7Y2xhc3NOYW1lfVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBkZXNjKSB7CiAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxh
dGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpOwotICBpbnN0YW5jZS0+U2V0
SW50ZXJuYWxGaWVsZENvdW50KDIpOworRU5ECisgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFO
b2RlKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICBpbnN0YW5jZS0+
U2V0SW50ZXJuYWxGaWVsZENvdW50KFY4Q3VzdG9tOjprTm9kZU1pbmltdW1JbnRlcm5hbEZpZWxk
Q291bnQpOworRU5ECisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8
RU5EKTsKKyAgaW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a0RlZmF1
bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50KTsKK0VORAorICAgIH0KKworICAgIHB1c2goQGlt
cGxDb250ZW50LCAgPDxFTkQpOwogICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gZGVmYXVsdF9z
aWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYyk7CiAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0VGVtcGxhdGU+IHByb3RvID0gZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUoKTsKICAgJGFjY2Vz
c19jaGVjawpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRM
aXN0ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5o
CmluZGV4IGM3MGFmM2QuLjE1MjE5NDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJz
dHJhY3RFdmVudExpc3RlbmVyLmgKQEAgLTY5LDYgKzY5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNjb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiAh
bV9mcmFtZTsgfQogCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc09iamVjdExpc3RlbmVyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gbV9saXN0ZW5lcjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBw
ZXIuY3BwCmluZGV4IDM0MTg0NTcuLjMzZDExNDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3Jh
cHBlci5jcHAKQEAgLTI1OSw3ICsyNTksNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZShWOENsYXNzSW5kZXg6OlY4VwogICAg
ICAgICAvLyBkb2N1bWVudC5hbGwgaXMgbm90IHNoYWRvd2VkIGFuZCBzb21lIG90aGVyIHZhbHVl
IGlmCiAgICAgICAgIC8vIGRvY3VtZW50LmFsbCBpcyBzaGFkb3dlZC4KICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2VUZW1wbGF0ZSA9IGRlc2NyaXB0b3ItPklu
c3RhbmNlVGVtcGxhdGUoKTsKLSAgICAgICAgQVNTRVJUKGluc3RhbmNlVGVtcGxhdGUtPkludGVy
bmFsRmllbGRDb3VudCgpID09IFY4Q3VzdG9tOjprRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxk
Q291bnQpOworICAgICAgICBBU1NFUlQoaW5zdGFuY2VUZW1wbGF0ZS0+SW50ZXJuYWxGaWVsZENv
dW50KCkgPT0gVjhDdXN0b206OmtOb2RlTWluaW11bUludGVybmFsRmllbGRDb3VudCk7CiAgICAg
ICAgIGluc3RhbmNlVGVtcGxhdGUtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a0hU
TUxEb2N1bWVudEludGVybmFsRmllbGRDb3VudCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTI3MCw3ICsyNzAsNyBAQCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhE
T01XcmFwcGVyOjpnZXRUZW1wbGF0ZShWOENsYXNzSW5kZXg6OlY4VwogICAgICAgICAvLyBXZSBh
ZGQgYW4gZXh0cmEgaW50ZXJuYWwgZmllbGQgdG8gYWxsIERvY3VtZW50IHdyYXBwZXJzIGZvcgog
ICAgICAgICAvLyBzdG9yaW5nIGEgcGVyIGRvY3VtZW50IERPTUltcGxlbWVudGF0aW9uIHdyYXBw
ZXIuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlVGVtcGxh
dGUgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBsYXRlKCk7Ci0gICAgICAgIEFTU0VSVChpbnN0
YW5jZVRlbXBsYXRlLT5JbnRlcm5hbEZpZWxkQ291bnQoKSA9PSBWOEN1c3RvbTo6a0RlZmF1bHRX
cmFwcGVySW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgQVNTRVJUKGluc3RhbmNlVGVtcGxh
dGUtPkludGVybmFsRmllbGRDb3VudCgpID09IFY4Q3VzdG9tOjprTm9kZU1pbmltdW1JbnRlcm5h
bEZpZWxkQ291bnQpOwogICAgICAgICBpbnN0YW5jZVRlbXBsYXRlLT5TZXRJbnRlcm5hbEZpZWxk
Q291bnQoIFY4Q3VzdG9tOjprRG9jdW1lbnRNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9i
amVjdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50
TGlzdGVuZXIuY3BwCmluZGV4IDJkNzZmNTEuLmYxMDc2NmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTU0LDI0ICs1NCwyMiBAQCBzdGF0
aWMgdm9pZCB3ZWFrT2JqZWN0RXZlbnRMaXN0ZW5lckNhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4
OjpWYWx1ZT4sIHZvaWQqIHBhcgogICAgIGxpc3RlbmVyLT5kaXNwb3NlTGlzdGVuZXJPYmplY3Qo
KTsKIH0KIAotLy8gT2JqZWN0IGV2ZW50IGxpc3RlbmVycyAoc3VjaCBhcyBYbWxIdHRwUmVxdWVz
dCBhbmQgTWVzc2FnZVBvcnQpIGFyZQotLy8gZGlmZmVyZW50IGZyb20gbGlzdGVuZXJzIG9uIERP
TSBub2Rlcy4gQW4gb2JqZWN0IGV2ZW50IGxpc3RlbmVyIHdyYXBwZXIKLS8vIG9ubHkgaG9sZHMg
YSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUgSlMgZnVuY3Rpb24uIEEgc3Ryb25nIHJlZmVyZW5jZSBj
YW4KLS8vIGNyZWF0ZSBhIGN5Y2xlLgorLy8gQW4gb2JqZWN0IGV2ZW50IGxpc3RlbmVyIHdyYXBw
ZXIgb25seSBob2xkcyBhIHdlYWsgcmVmZXJlbmNlIHRvIHRoZQorLy8gSlMgZnVuY3Rpb24uIEEg
c3Ryb25nIHJlZmVyZW5jZSBjYW4gY3JlYXRlIGEgY3ljbGUuCiAvLwotLy8gVGhlIGxpZmV0aW1l
IG9mIHRoZXNlIG9iamVjdHMgaXMgYm91bmRlZCBieSB0aGUgbGlmZSB0aW1lIG9mIGl0cyBKUwot
Ly8gd3JhcHBlci4gU28gd2UgY2FuIGNyZWF0ZSBhIGhpZGRlbiByZWZlcmVuY2UgZnJvbSB0aGUg
SlMgd3JhcHBlciB0bwotLy8gdG8gaXRzIEpTIGZ1bmN0aW9uLgorLy8gVGhlIGxpZmV0aW1lIG9m
IHRoZXNlIG9iamVjdHMgaXMgYm91bmRlZCBieSB0aGUgbGlmZSB0aW1lIG9mIHRoZSBKUworLy8g
d3JhcHBlciBvZiBYSFIgb3IgTm9kZS4gU28gd2UgY2FuIGNyZWF0ZSBhIGhpZGRlbiByZWZlcmVu
Y2UgZnJvbQorLy8gdGhlIEpTIHdyYXBwZXIgdG8gdG8gaXRzIEpTIGZ1bmN0aW9uLgogLy8KIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwKQotLy8gICAgICAgICAgICAgIFhIUiAgICAg
IDwtLS0tLS0tLS0tICBKU193cmFwcGVyCisvLyAgICAgICAgICBYSFIgb3IgTm9kZSAgPC0tLS0t
LS0tLS0gIEpTX3dyYXBwZXIKIC8vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAoaGlkZGVu
KSA6ICBeCi0vLyAgICAgICAgICAgICAgIFYgICAgICAgICAgICAgICAgICAgICAgViAgOiAobWF5
IHJlYWNoYWJsZSBieSBjbG9zdXJlKQorLy8gICAgICAgICAgICAgICBWICAgICAgICAgICAgICAg
ICAgICAgIFYgIDogKG1heSBiZSByZWFjaGFibGUgYnkgY2xvc3VyZSkKIC8vICAgICAgICAgICBW
OF9saXN0ZW5lciAgLS0tLS0tLS0+IEpTX2Z1bmN0aW9uCiAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAod2VhaykgIDwtLSBtYXkgY3JlYXRlIGEgY3ljbGUgaWYgaXQgaXMgc3Ryb25nCiAvLwot
Ly8gVGhlIHBlcnNpc3RlbnQgcmVmZXJlbmNlIGlzIG1hZGUgd2VhayBpbiB0aGUgY29uc3RydWN0
b3IKLS8vIG9mIFY4T2JqZWN0RXZlbnRMaXN0ZW5lci4KKy8vIFRoZSBwZXJzaXN0ZW50IHJlZmVy
ZW5jZSBpcyBtYWRlIHdlYWsgaW4gdGhlIGNvbnN0cnVjdG9yIG9mCisvLyBWOE9iamVjdEV2ZW50
TGlzdGVuZXIuCiAKIFY4T2JqZWN0RXZlbnRMaXN0ZW5lcjo6VjhPYmplY3RFdmVudExpc3RlbmVy
KEZyYW1lKiBmcmFtZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlzSW5s
aW5lKQogICAgIDogVjhFdmVudExpc3RlbmVyKGZyYW1lLCBsaXN0ZW5lciwgaXNJbmxpbmUpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuaAppbmRleCA1MDFiZGFj
Li4zYzVhZTEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRM
aXN0ZW5lci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVy
LmgKQEAgLTQ3LDYgKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBWOE9iamVjdEV2ZW50TGlzdGVuZXIoZnJhbWUsIGxpc3RlbmVyLCBp
c0lubGluZSkpOwogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBib29sIGlzT2JqZWN0TGlz
dGVuZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBW
OE9iamVjdEV2ZW50TGlzdGVuZXIoRnJhbWUqLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVu
ZXIsIGJvb2wgaXNJbmxpbmUpOwogICAgICAgICB2aXJ0dWFsIH5WOE9iamVjdEV2ZW50TGlzdGVu
ZXIoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAKaW5kZXggMzk1YThkZi4uZjNiNWEx
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAKQEAgLTY3LDkgKzY3LDYgQEAgdm9p
ZCByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHYKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KLQotICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHdlIHRyeSB0byByZW1vdmUg
YW4gZXZlbnQgbGlzdGVuZXIgdGhhdCB3YXMgbmV2ZXIgYWRkZWQuCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiB9CiAKIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKaW5kZXggOGU3YWZhOC4uYjcyYTM0
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5n
LmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKQEAg
LTEwMCw4ICsxMDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQga05QT2JqZWN0SW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1bHRXcmFwcGVySW50
ZXJuYWxGaWVsZENvdW50ICsgMDsKIAotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEb2N1bWVu
dEltcGxlbWVudGF0aW9uSW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQg
KyAwOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEb2N1bWVudE1pbmltdW1JbnRlcm5hbEZp
ZWxkQ291bnQgPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGtOb2RlRXZlbnRMaXN0ZW5lckNhY2hlSW5kZXggPSBrRGVmYXVs
dFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtOb2RlTWluaW11bUludGVybmFsRmllbGRDb3VudCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFs
RmllbGRDb3VudCArIDE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRG9jdW1lbnRJbXBs
ZW1lbnRhdGlvbkluZGV4ID0ga05vZGVNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50ICsgMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBrRG9jdW1lbnRNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50
ID0ga05vZGVNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50ICsgMTsKIAogICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGtIVE1MRG9jdW1lbnRNYXJrZXJJbmRleCA9IGtEb2N1bWVudE1pbmltdW1JbnRl
cm5hbEZpZWxkQ291bnQgKyAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtIVE1MRG9jdW1l
bnRTaGFkb3dJbmRleCA9IGtEb2N1bWVudE1pbmltdW1JbnRlcm5hbEZpZWxkQ291bnQgKyAxOwpA
QCAtMjI4LDcgKzIzMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgREVDTEFSRV9Q
Uk9QRVJUWV9BQ0NFU1NPUl9HRVRURVIoRXZlbnRDbGlwYm9hcmREYXRhKTsKIAogICAgICAgICBE
RUNMQVJFX1BST1BFUlRZX0FDQ0VTU09SKERPTVdpbmRvd0V2ZW50SGFuZGxlcik7Ci0gICAgICAg
IERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoRWxlbWVudEV2ZW50SGFuZGxlcik7CisgICAgICAg
IERFQ0xBUkVfUFJPUEVSVFlfQUNDRVNTT1IoTm9kZUV2ZW50SGFuZGxlcik7CiAKICAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhIVE1MQ2FudmFzRWxlbWVudEdldENvbnRleHQpOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA5NjQzNTU5
Li5lMTdlMGE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1l
bnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1
c3RvbS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAi
Q1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVs
ZW1lbnRCYXNlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00Myw3ICs0Miw2IEBACiAj
aW5jbHVkZSAiVjhBdHRyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhD
dXN0b21CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiVjhQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTI3LDQyICsx
MjUsNCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5vZGVOUykKICAg
ICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVh
c2UoKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvRXZlbnRUeXBlKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiB2YWx1ZSkKLXsKLSAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKHZh
bHVlKTsKLSAgICBBU1NFUlQoa2V5LnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIHJldHVybiBrZXku
c3Vic3RyaW5nKDIpOwotfQotCi1BQ0NFU1NPUl9TRVRURVIoRWxlbWVudEV2ZW50SGFuZGxlcikK
LXsKLSAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTxOb2RlPihpbmZvLkhvbGRlcigpKTsKLQotICAgIFN0cmluZyBldmVudFR5cGUgPSB0b0V2ZW50
VHlwZShuYW1lKTsKLQotICAgIC8vIFNldCBoYW5kbGVyIGlmIHRoZSB2YWx1ZSBpcyBhIGZ1bmN0
aW9uLiAgT3RoZXJ3aXNlLCBjbGVhciB0aGUKLSAgICAvLyBldmVudCBoYW5kbGVyLgotICAgIGlm
ICh2YWx1ZS0+SXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7Ci0gICAgICAgIC8vIHRoZSBk
b2N1bWVudCBtaWdodCBiZSBjcmVhdGVkIHVzaW5nIGNyZWF0ZURvY3VtZW50LAotICAgICAgICAv
LyB3aGljaCBkb2VzIG5vdCBoYXZlIGEgZnJhbWUsIHVzZSB0aGUgYWN0aXZlIGZyYW1lCi0gICAg
ICAgIGlmICghcHJveHkpCi0gICAgICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKFY4
UHJveHk6OnJldHJpZXZlRnJhbWVGb3JFbnRlcmVkQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFw
cm94eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdy
YXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIHRydWUpKQotICAg
ICAgICAgICAgbm9kZS0+c2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3Rl
bmVyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbm9kZS0+Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3Rl
bmVyKGV2ZW50VHlwZSk7Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihFbGVtZW50RXZlbnRIYW5kbGVy
KQotewotICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPE5vZGU+KGluZm8uSG9sZGVyKCkpOwotCi0gICAgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBub2RlLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRvRXZlbnRUeXBlKG5hbWUpKTsKLSAg
ICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobGlz
dGVuZXIpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAppbmRleCAxMmMyMDI1Li4xMjQ2NDQyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKQEAgLTM0LDMwICszNCw4
NiBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgog
CisjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOE5vZGUuaCIKKyNpbmNsdWRlICJWOE9iamVjdEV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGljIGlubGluZSBTdHJpbmcgdG9F
dmVudFR5cGUodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHZhbHVlKQoreworICAgIFN0cmluZyBrZXkg
PSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworICAgIEFTU0VSVChrZXkuc3RhcnRzV2l0aCgib24i
KSk7CisgICAgcmV0dXJuIGtleS5zdWJzdHJpbmcoMik7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoTm9kZSogbm9kZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGJvb2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCit7CisgICAg
VjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShub2RlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOworICAgIC8vIFRoZSBkb2N1bWVudCBtaWdodCBiZSBjcmVhdGVkIHVzaW5nIGNy
ZWF0ZURvY3VtZW50LCB3aGljaCBkb2VzCisgICAgLy8gbm90IGhhdmUgYSBmcmFtZSwgdXNlIHRo
ZSBhY3RpdmUgZnJhbWUuCisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcHJveHkgPSBWOFByb3h5
OjpyZXRyaWV2ZShWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKSk7CisK
KyAgICBpZiAocHJveHkpIHsKKyAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCogbGlzdCA9IHBy
b3h5LT5vYmplY3RMaXN0ZW5lcnMoKTsKKyAgICAgICAgcmV0dXJuIGZpbmRPbmx5ID8gbGlzdC0+
ZmluZFdyYXBwZXIodmFsdWUsIGlzQXR0cmlidXRlKSA6IGxpc3QtPmZpbmRPckNyZWF0ZVdyYXBw
ZXI8VjhPYmplY3RFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGlzQXR0cmli
dXRlKTsKKyAgICB9CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPigpOwor
fQorCitBQ0NFU1NPUl9TRVRURVIoTm9kZUV2ZW50SGFuZGxlcikKK3sKKyAgICBOb2RlKiBub2Rl
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihpbmZvLkhvbGRl
cigpKTsKKyAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9FdmVudFR5cGUobmFtZSk7CisKKyAgICAv
LyBSZW1vdmUgaGlkZGVuIGRlcGVuZGVuY3kgb24gdGhlIG9sZCBldmVudCBoYW5kbGVyLgorICAg
IGlmIChFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IG5vZGUtPmdldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlKSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXIqPihsaXN0ZW5lciktPmlzT2JqZWN0TGlzdGVuZXIoKSkgeworICAgICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPihsaXN0ZW5lciktPmdldExpc3RlbmVyT2JqZWN0KCk7CisgICAgICAg
ICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGluZm8uSG9sZGVyKCksIHY4TGlzdGVuZXIsIFY4
Q3VzdG9tOjprTm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFNldCBoYW5kbGVyIGlmIHRoZSB2YWx1ZSBpcyBhIGZ1bmN0aW9uLgorICAgIGlm
ICh2YWx1ZS0+SXNGdW5jdGlvbigpKSB7CisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIobm9kZSwgdmFsdWUsIHRydWUsIGZhbHNlKTsKKyAg
ICAgICAgaWYgKGxpc3RlbmVyKSB7CisgICAgICAgICAgICBub2RlLT5zZXRBdHRyaWJ1dGVFdmVu
dExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIpOworICAgICAgICAgICAgY3JlYXRlSGlkZGVu
RGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2YWx1ZSwgVjhDdXN0b206OmtOb2RlRXZlbnRMaXN0
ZW5lckNhY2hlSW5kZXgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCBjbGVhciB0aGUgaGFuZGxlci4KKyAgICAgICAgbm9kZS0+Y2xlYXJBdHRyaWJ1dGVF
dmVudExpc3RlbmVyKGV2ZW50VHlwZSk7CisgICAgfQorfQorCitBQ0NFU1NPUl9HRVRURVIoTm9k
ZUV2ZW50SGFuZGxlcikKK3sKKyAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxOb2RlPihpbmZvLkhvbGRlcigpKTsKKworICAgIEV2ZW50TGlzdGVu
ZXIqIGxpc3RlbmVyID0gbm9kZS0+Z2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0b0V2ZW50VHlw
ZShuYW1lKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50TGlzdGVuZXJU
b1Y4T2JqZWN0KGxpc3RlbmVyKTsKK30KKwogQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVBZGRFdmVu
dExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLk5vZGUuYWRkRXZlbnRMaXN0ZW5lcigp
Iik7CiAgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8Tm9kZT4oYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6
OnJldHJpZXZlKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpOwotICAgIGlmICghcHJveHkpCi0g
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+ZmluZE9yQ3JlYXRlV3JhcHBl
cjxWOEV2ZW50TGlzdGVuZXI+KHByb3h5LT5mcmFtZSgpLCBhcmdzWzFdLCBmYWxzZSk7CisgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcihub2RlLCBh
cmdzWzFdLCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChsaXN0ZW5lcikgewogICAgICAgICBTdHJp
bmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0
dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7CiAgICAgICAgIG5vZGUtPmFkZEV2ZW50TGlz
dGVuZXIodHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOworICAgICAgICBjcmVhdGVIaWRkZW5E
ZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprTm9kZUV2ZW50TGlz
dGVuZXJDYWNoZUluZGV4KTsKICAgICB9CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0K
QEAgLTY3LDE4ICsxMjMsMTUgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVSZW1vdmVFdmVudExp
c3RlbmVyKQogICAgIElOQ19TVEFUUygiRE9NLk5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7
CiAgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJl
dHJpZXZlKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpOwogICAgIC8vIEl0IGlzIHBvc3NiaWxl
IHRoYXQgdGhlIG93bmVyIGRvY3VtZW50IG9mIHRoZSBub2RlIGlzIGRldGFjaGVkCi0gICAgLy8g
ZnJvbSB0aGUgZnJhbWUsIHJldHVybiBpbW1lZGlhdGVseSBpbiB0aGlzIGNhc2UuCisgICAgLy8g
ZnJvbSB0aGUgZnJhbWUuCiAgICAgLy8gU2VlIGlzc3VlIGh0dHA6Ly9iLzg3ODkwOQotICAgIGlm
ICghcHJveHkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBwcm94eS0+ZXZlbnRMaXN0ZW5lcnMoKS0+ZmluZFdy
YXBwZXIoYXJnc1sxXSwgZmFsc2UpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ciA9IGdldEV2ZW50TGlzdGVuZXIobm9kZSwgYXJnc1sxXSwgZmFsc2UsIHRydWUpOwogICAgIGlm
IChsaXN0ZW5lcikgewogICAgICAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdz
WzBdKTsKICAgICAgICAgYm9vbCB1c2VDYXB0dXJlID0gYXJnc1syXS0+Qm9vbGVhblZhbHVlKCk7
CiAgICAgICAgIG5vZGUtPnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIuZ2V0KCks
IHVzZUNhcHR1cmUpOworICAgICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVy
KCksIGFyZ3NbMV0sIFY4Q3VzdG9tOjprTm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKICAg
ICB9CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCAzNzA5MmYz
Li43MjA0YTYxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhN
TEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtNDQsNyArNDQsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihYTUxI
dHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sIGZpbmRPbmx5KQorc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRM
aXN0ZW5lcihYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHZhbHVlLCBib29sIGZpbmRPbmx5KQogewogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgIFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogd29ya2VyQ29udGV4dFByb3h5ID0gV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5OjpyZXRyaWV2ZSgpOwo=
</data>
<flag name="review"
          id="18639"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34507</attachid>
            <date>2009-08-10 13:24:32 -0700</date>
            <delta_ts>2009-08-10 13:27:50 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>fix_leak.patch</filename>
            <type>text/plain</type>
            <size>18057</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2Y0ZGM4YS4uZDMyMDFjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAwOS0wOC0xMCAgVml0YWx5IFJlcGVz
aGtvICA8dml0YWx5ckBxdWFkLnNwYi5jb3JwLmdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1Y4XSBGaXggbWVtb3J5IGxlYWsgaW4g
bm9kZSBldmVudCBsaXN0ZW5lcnMuIFNlZSBodHRwOi8vY3JidWcuY29tLzE3NDAwLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgxNTYKKworICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOiBDdXN0b20gZXZlbnQgaGFu
ZGxlciBhY2Nlc3NvcnMgbm93IGFwcGx5IHRvIGFsbCBOb2RlIGRlc2NlbmRhbnRzLgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmg6CisgICAgICAgIChXZWJD
b3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aXNPYmplY3RMaXN0ZW5lcik6IEFkZGVkIHZp
cnR1YWwgbWV0aG9kIHRvIGRldGVjdCBsaXN0ZW5lcnMgdGhhdCBoYXZlIHdlYWsgcmVmZXJlbmNl
cyB0byBKUyBvYmplY3RzLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmpl
Y3RFdmVudExpc3RlbmVyOjppc09iamVjdExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVIaWRkZW5EZXBlbmRl
bmN5KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHA6IE1vdmVkIGN1c3RvbSBhY2Nl
c3NvcnMgZnJvbSBWOEVsZW1lbnRDdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6dG9FdmVu
dFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VU
VEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0RXZlbnRMaXN0ZW5lcik6IE1hZGUgc3RhdGljLgorCiAyMDA5LTA4LTEwICBK
ZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtCmluZGV4IDYzYjFlZWUuLmY2OTZlOWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtOTYxLDggKzk2MSw4IEBAIHN1YiBHZW5lcmF0ZUJhdGNo
ZWRBdHRyaWJ1dGVEYXRhCiAgICAgICAgICAgICAgICAgJGdldHRlciA9ICJWOEN1c3RvbTo6djhE
T01XaW5kb3dFdmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7CiAgICAgICAgICAgICAgICAgJHNl
dHRlciA9ICJWOEN1c3RvbTo6djhET01XaW5kb3dFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7
CiAgICAgICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiRWxlbWVudCIgfHwgJGlu
dGVyZmFjZU5hbWUgZXEgIkRvY3VtZW50IiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiSFRNTEJvZHlF
bGVtZW50IiB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIiB8fCAkaW50
ZXJmYWNlTmFtZSBlcSAiSFRNTEZyYW1lU2V0RWxlbWVudCIpIHsKLSAgICAgICAgICAgICAgICAk
Z2V0dGVyID0gIlY4Q3VzdG9tOjp2OEVsZW1lbnRFdmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7
Ci0gICAgICAgICAgICAgICAgJHNldHRlciA9ICJWOEN1c3RvbTo6djhFbGVtZW50RXZlbnRIYW5k
bGVyQWNjZXNzb3JTZXR0ZXIiOworICAgICAgICAgICAgICAgICRnZXR0ZXIgPSAiVjhDdXN0b206
OnY4Tm9kZUV2ZW50SGFuZGxlckFjY2Vzc29yR2V0dGVyIjsKKyAgICAgICAgICAgICAgICAkc2V0
dGVyID0gIlY4Q3VzdG9tOjp2OE5vZGVFdmVudEhhbmRsZXJBY2Nlc3NvclNldHRlciI7CiAgICAg
ICAgICAgICB9IGVsc2lmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NQXBwbGljYXRpb25DYWNoZSIp
IHsKICAgICAgICAgICAgICAgICAkZ2V0dGVyID0gIlY4Q3VzdG9tOjp2OERPTUFwcGxpY2F0aW9u
Q2FjaGVFdmVudEhhbmRsZXJBY2Nlc3NvckdldHRlciI7CiAgICAgICAgICAgICAgICAgJHNldHRl
ciA9ICJWOEN1c3RvbTo6djhET01BcHBsaWNhdGlvbkNhY2hlRXZlbnRIYW5kbGVyQWNjZXNzb3JT
ZXR0ZXIiOwpAQCAtMTI0Myw3ICsxMjQzLDE4IEBAIEVORAogICAgIHB1c2goQGltcGxDb250ZW50
LCAgPDxFTkQpOwogc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBD
b25maWd1cmUke2NsYXNzTmFtZX1UZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gZGVzYykgewogICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5j
ZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKLSAgaW5zdGFuY2UtPlNldEludGVybmFsRmll
bGRDb3VudCgyKTsKK0VORAorICAgIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKKyAgaW5zdGFuY2UtPlNldEludGVybmFs
RmllbGRDb3VudChWOEN1c3RvbTo6a05vZGVNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50KTsKK0VO
RAorICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIGlu
c3RhbmNlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0b206OmtEZWZhdWx0V3JhcHBlcklu
dGVybmFsRmllbGRDb3VudCk7CitFTkQKKyAgICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwg
IDw8RU5EKTsKICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRfc2lnbmF0dXJlID0g
djg6OlNpZ25hdHVyZTo6TmV3KGRlc2MpOwogICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRl
PiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCk7CiAgICRhY2Nlc3NfY2hlY2sKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaAppbmRleCBjNzBh
ZjNkLi4xNTIxOTQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RF
dmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRM
aXN0ZW5lci5oCkBAIC02OSw2ICs2OSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgZGlzY29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZnJhbWU7IH0K
IAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNPYmplY3RMaXN0ZW5lcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+IG1fbGlzdGVuZXI7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XcmFwcGVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAppbmRl
eCAzNDE4NDU3Li4zM2QxMTQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V3JhcHBlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBA
IC0yNTksNyArMjU5LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4
RE9NV3JhcHBlcjo6Z2V0VGVtcGxhdGUoVjhDbGFzc0luZGV4OjpWOFcKICAgICAgICAgLy8gZG9j
dW1lbnQuYWxsIGlzIG5vdCBzaGFkb3dlZCBhbmQgc29tZSBvdGhlciB2YWx1ZSBpZgogICAgICAg
ICAvLyBkb2N1bWVudC5hbGwgaXMgc2hhZG93ZWQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0VGVtcGxhdGU+IGluc3RhbmNlVGVtcGxhdGUgPSBkZXNjcmlwdG9yLT5JbnN0YW5jZVRlbXBs
YXRlKCk7Ci0gICAgICAgIEFTU0VSVChpbnN0YW5jZVRlbXBsYXRlLT5JbnRlcm5hbEZpZWxkQ291
bnQoKSA9PSBWOEN1c3RvbTo6a0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50KTsKKyAg
ICAgICAgQVNTRVJUKGluc3RhbmNlVGVtcGxhdGUtPkludGVybmFsRmllbGRDb3VudCgpID09IFY4
Q3VzdG9tOjprTm9kZU1pbmltdW1JbnRlcm5hbEZpZWxkQ291bnQpOwogICAgICAgICBpbnN0YW5j
ZVRlbXBsYXRlLT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoVjhDdXN0b206OmtIVE1MRG9jdW1lbnRJ
bnRlcm5hbEZpZWxkQ291bnQpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yNzAsNyArMjcw
LDcgQEAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IFY4RE9NV3JhcHBlcjo6
Z2V0VGVtcGxhdGUoVjhDbGFzc0luZGV4OjpWOFcKICAgICAgICAgLy8gV2UgYWRkIGFuIGV4dHJh
IGludGVybmFsIGZpZWxkIHRvIGFsbCBEb2N1bWVudCB3cmFwcGVycyBmb3IKICAgICAgICAgLy8g
c3RvcmluZyBhIHBlciBkb2N1bWVudCBET01JbXBsZW1lbnRhdGlvbiB3cmFwcGVyLgogICAgICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZVRlbXBsYXRlID0gZGVzY3Jp
cHRvci0+SW5zdGFuY2VUZW1wbGF0ZSgpOwotICAgICAgICBBU1NFUlQoaW5zdGFuY2VUZW1wbGF0
ZS0+SW50ZXJuYWxGaWVsZENvdW50KCkgPT0gVjhDdXN0b206OmtEZWZhdWx0V3JhcHBlckludGVy
bmFsRmllbGRDb3VudCk7CisgICAgICAgIEFTU0VSVChpbnN0YW5jZVRlbXBsYXRlLT5JbnRlcm5h
bEZpZWxkQ291bnQoKSA9PSBWOEN1c3RvbTo6a05vZGVNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50
KTsKICAgICAgICAgaW5zdGFuY2VUZW1wbGF0ZS0+U2V0SW50ZXJuYWxGaWVsZENvdW50KCBWOEN1
c3RvbTo6a0RvY3VtZW50TWluaW11bUludGVybmFsRmllbGRDb3VudCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhPYmplY3RFdmVudExp
c3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVyLmNw
cAppbmRleCAyZDc2ZjUxLi5mMTA3NjZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9i
amVjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC01NCwyNCArNTQsMjIgQEAgc3RhdGljIHZvaWQgd2Vh
a09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2
b2lkKiBwYXIKICAgICBsaXN0ZW5lci0+ZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7CiB9CiAKLS8v
IE9iamVjdCBldmVudCBsaXN0ZW5lcnMgKHN1Y2ggYXMgWG1sSHR0cFJlcXVlc3QgYW5kIE1lc3Nh
Z2VQb3J0KSBhcmUKLS8vIGRpZmZlcmVudCBmcm9tIGxpc3RlbmVycyBvbiBET00gbm9kZXMuIEFu
IG9iamVjdCBldmVudCBsaXN0ZW5lciB3cmFwcGVyCi0vLyBvbmx5IGhvbGRzIGEgd2VhayByZWZl
cmVuY2UgdG8gdGhlIEpTIGZ1bmN0aW9uLiBBIHN0cm9uZyByZWZlcmVuY2UgY2FuCi0vLyBjcmVh
dGUgYSBjeWNsZS4KKy8vIEFuIG9iamVjdCBldmVudCBsaXN0ZW5lciB3cmFwcGVyIG9ubHkgaG9s
ZHMgYSB3ZWFrIHJlZmVyZW5jZSB0byB0aGUKKy8vIEpTIGZ1bmN0aW9uLiBBIHN0cm9uZyByZWZl
cmVuY2UgY2FuIGNyZWF0ZSBhIGN5Y2xlLgogLy8KLS8vIFRoZSBsaWZldGltZSBvZiB0aGVzZSBv
YmplY3RzIGlzIGJvdW5kZWQgYnkgdGhlIGxpZmUgdGltZSBvZiBpdHMgSlMKLS8vIHdyYXBwZXIu
IFNvIHdlIGNhbiBjcmVhdGUgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20gdGhlIEpTIHdyYXBwZXIg
dG8KLS8vIHRvIGl0cyBKUyBmdW5jdGlvbi4KKy8vIFRoZSBsaWZldGltZSBvZiB0aGVzZSBvYmpl
Y3RzIGlzIGJvdW5kZWQgYnkgdGhlIGxpZmUgdGltZSBvZiB0aGUgSlMKKy8vIHdyYXBwZXIgb2Yg
WEhSIG9yIE5vZGUuIFNvIHdlIGNhbiBjcmVhdGUgYSBoaWRkZW4gcmVmZXJlbmNlIGZyb20KKy8v
IHRoZSBKUyB3cmFwcGVyIHRvIHRvIGl0cyBKUyBmdW5jdGlvbi4KIC8vCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1hcCkKLS8vICAgICAgICAgICAgICBYSFIgICAgICA8LS0tLS0tLS0t
LSAgSlNfd3JhcHBlcgorLy8gICAgICAgICAgWEhSIG9yIE5vZGUgIDwtLS0tLS0tLS0tICBKU193
cmFwcGVyCiAvLyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgKGhpZGRlbikgOiAgXgotLy8g
ICAgICAgICAgICAgICBWICAgICAgICAgICAgICAgICAgICAgIFYgIDogKG1heSByZWFjaGFibGUg
YnkgY2xvc3VyZSkKKy8vICAgICAgICAgICAgICAgViAgICAgICAgICAgICAgICAgICAgICBWICA6
IChtYXkgYmUgcmVhY2hhYmxlIGJ5IGNsb3N1cmUpCiAvLyAgICAgICAgICAgVjhfbGlzdGVuZXIg
IC0tLS0tLS0tPiBKU19mdW5jdGlvbgogLy8gICAgICAgICAgICAgICAgICAgICAgICAgKHdlYWsp
ICA8LS0gbWF5IGNyZWF0ZSBhIGN5Y2xlIGlmIGl0IGlzIHN0cm9uZwogLy8KLS8vIFRoZSBwZXJz
aXN0ZW50IHJlZmVyZW5jZSBpcyBtYWRlIHdlYWsgaW4gdGhlIGNvbnN0cnVjdG9yCi0vLyBvZiBW
OE9iamVjdEV2ZW50TGlzdGVuZXIuCisvLyBUaGUgcGVyc2lzdGVudCByZWZlcmVuY2UgaXMgbWFk
ZSB3ZWFrIGluIHRoZSBjb25zdHJ1Y3RvciBvZgorLy8gVjhPYmplY3RFdmVudExpc3RlbmVyLgog
CiBWOE9iamVjdEV2ZW50TGlzdGVuZXI6OlY4T2JqZWN0RXZlbnRMaXN0ZW5lcihGcmFtZSogZnJh
bWUsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0lubGluZSkKICAgICA6
IFY4RXZlbnRMaXN0ZW5lcihmcmFtZSwgbGlzdGVuZXIsIGlzSW5saW5lKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhPYmplY3RFdmVudExpc3RlbmVyLmgKaW5kZXggNTAxYmRhYy4uM2M1YWUxMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuaAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oCkBAIC00Nyw2
ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgVjhPYmplY3RFdmVudExpc3RlbmVyKGZyYW1lLCBsaXN0ZW5lciwgaXNJbmxpbmUpKTsK
ICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc09iamVjdExpc3RlbmVyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKEZyYW1lKiwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBib29sIGlz
SW5saW5lKTsKICAgICAgICAgdmlydHVhbCB+VjhPYmplY3RFdmVudExpc3RlbmVyKCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCmluZGV4IDM5NWE4ZGYuLmMxYWM2ZDQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCkBAIC01OCw3ICs1OCw4IEBAIHZvaWQgY3JlYXRlSGlk
ZGVuRGVwZW5kZW5jeSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2CiB2b2lkIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3kodjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IG9iamVjdCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGludCBjYWNoZUluZGV4KQog
ewogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhY2hlID0gb2JqZWN0LT5HZXRJbnRlcm5hbEZp
ZWxkKGNhY2hlSW5kZXgpOwotICAgIEFTU0VSVChjYWNoZS0+SXNBcnJheSgpKTsKKyAgICBpZiAo
IWNhY2hlLT5Jc0FycmF5KCkpCisgICAgICAgIHJldHVybjsKICAgICB2ODo6TG9jYWw8djg6OkFy
cmF5PiBjYWNoZUFycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoY2FjaGUpOwogICAg
IGZvciAoaW50IGkgPSBjYWNoZUFycmF5LT5MZW5ndGgoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhY2hlZCA9IGNhY2hlQXJyYXktPkdldCh2ODo6
SW50ZWdlcjo6TmV3KGkpKTsKQEAgLTY3LDkgKzY4LDYgQEAgdm9pZCByZW1vdmVIaWRkZW5EZXBl
bmRlbmN5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHYKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLQotICAgIC8vIFdlIHNo
b3VsZCBvbmx5IGdldCBoZXJlIGlmIHdlIHRyeSB0byByZW1vdmUgYW4gZXZlbnQgbGlzdGVuZXIg
dGhhdCB3YXMgbmV2ZXIgYWRkZWQuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIGJv
b2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmgKaW5kZXggOGU3YWZhOC4uYjcyYTM0OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKQEAgLTEwMCw4ICsxMDAsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga05QT2JqZWN0
SW50ZXJuYWxGaWVsZENvdW50ID0ga0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsg
MDsKIAotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtEb2N1bWVudEltcGxlbWVudGF0aW9uSW5k
ZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwotICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGtEb2N1bWVudE1pbmltdW1JbnRlcm5hbEZpZWxkQ291bnQgPSBrRGVmYXVs
dFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAxOworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGtOb2RlRXZlbnRMaXN0ZW5lckNhY2hlSW5kZXggPSBrRGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZp
ZWxkQ291bnQgKyAwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtOb2RlTWluaW11bUludGVy
bmFsRmllbGRDb3VudCA9IGtEZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDE7CisK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrRG9jdW1lbnRJbXBsZW1lbnRhdGlvbkluZGV4ID0g
a05vZGVNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50ICsgMDsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBrRG9jdW1lbnRNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50ID0ga05vZGVNaW5pbXVtSW50
ZXJuYWxGaWVsZENvdW50ICsgMTsKIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtIVE1MRG9j
dW1lbnRNYXJrZXJJbmRleCA9IGtEb2N1bWVudE1pbmltdW1JbnRlcm5hbEZpZWxkQ291bnQgKyAw
OwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IGtIVE1MRG9jdW1lbnRTaGFkb3dJbmRleCA9IGtE
b2N1bWVudE1pbmltdW1JbnRlcm5hbEZpZWxkQ291bnQgKyAxOwpAQCAtMjI4LDcgKzIzMSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgREVDTEFSRV9QUk9QRVJUWV9BQ0NFU1NPUl9H
RVRURVIoRXZlbnRDbGlwYm9hcmREYXRhKTsKIAogICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FD
Q0VTU09SKERPTVdpbmRvd0V2ZW50SGFuZGxlcik7Ci0gICAgICAgIERFQ0xBUkVfUFJPUEVSVFlf
QUNDRVNTT1IoRWxlbWVudEV2ZW50SGFuZGxlcik7CisgICAgICAgIERFQ0xBUkVfUFJPUEVSVFlf
QUNDRVNTT1IoTm9kZUV2ZW50SGFuZGxlcik7CiAKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhI
VE1MQ2FudmFzRWxlbWVudEdldENvbnRleHQpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA5NjQzNTU5Li5lMTdlMGE5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAKQEAgLTM0LDcg
KzM0LDYgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00Myw3ICs0Miw2IEBACiAjaW5jbHVkZSAiVjhBdHRyLmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCi0j
aW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgog
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTI3LDQyICsxMjUsNCBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5vZGVOUykKICAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgU3RyaW5nIHRvRXZlbnRUeXBlKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2YWx1ZSkK
LXsKLSAgICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKLSAgICBBU1NFUlQo
a2V5LnN0YXJ0c1dpdGgoIm9uIikpOwotICAgIHJldHVybiBrZXkuc3Vic3RyaW5nKDIpOwotfQot
Ci1BQ0NFU1NPUl9TRVRURVIoRWxlbWVudEV2ZW50SGFuZGxlcikKLXsKLSAgICBOb2RlKiBub2Rl
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihpbmZvLkhvbGRl
cigpKTsKLQotICAgIFN0cmluZyBldmVudFR5cGUgPSB0b0V2ZW50VHlwZShuYW1lKTsKLQotICAg
IC8vIFNldCBoYW5kbGVyIGlmIHRoZSB2YWx1ZSBpcyBhIGZ1bmN0aW9uLiAgT3RoZXJ3aXNlLCBj
bGVhciB0aGUKLSAgICAvLyBldmVudCBoYW5kbGVyLgotICAgIGlmICh2YWx1ZS0+SXNGdW5jdGlv
bigpKSB7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobm9kZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7Ci0gICAgICAgIC8vIHRoZSBkb2N1bWVudCBtaWdodCBiZSBj
cmVhdGVkIHVzaW5nIGNyZWF0ZURvY3VtZW50LAotICAgICAgICAvLyB3aGljaCBkb2VzIG5vdCBo
YXZlIGEgZnJhbWUsIHVzZSB0aGUgYWN0aXZlIGZyYW1lCi0gICAgICAgIGlmICghcHJveHkpCi0g
ICAgICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKFY4UHJveHk6OnJldHJpZXZlRnJh
bWVGb3JFbnRlcmVkQ29udGV4dCgpKTsKLSAgICAgICAgaWYgKCFwcm94eSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0g
cHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3Rl
bmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIHRydWUpKQotICAgICAgICAgICAgbm9kZS0+c2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbm9kZS0+Y2xlYXJBdHRyaWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSk7Ci19
Ci0KLUFDQ0VTU09SX0dFVFRFUihFbGVtZW50RXZlbnRIYW5kbGVyKQotewotICAgIE5vZGUqIG5v
ZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGluZm8uSG9s
ZGVyKCkpOwotCi0gICAgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBub2RlLT5nZXRBdHRyaWJ1
dGVFdmVudExpc3RlbmVyKHRvRXZlbnRUeXBlKG5hbWUpKTsKLSAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobGlzdGVuZXIpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3Vz
dG9tLmNwcAppbmRleCAxMmMyMDI1Li42YjBkNzQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKQEAgLTM0LDMwICszNCw4NiBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogCisjaW5jbHVkZSAiVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKICNpbmNsdWRlICJW
OEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOEN1c3RvbUV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJWOE5vZGUuaCIKKyNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJWOFByb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorc3RhdGljIGlubGluZSBTdHJpbmcgdG9FdmVudFR5cGUodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IHZhbHVlKQoreworICAgIFN0cmluZyBrZXkgPSB0b1dlYkNvcmVTdHJpbmco
dmFsdWUpOworICAgIEFTU0VSVChrZXkuc3RhcnRzV2l0aCgib24iKSk7CisgICAgcmV0dXJuIGtl
eS5zdWJzdHJpbmcoMik7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdl
dEV2ZW50TGlzdGVuZXIoTm9kZSogbm9kZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGJv
b2wgaXNBdHRyaWJ1dGUsIGJvb2wgZmluZE9ubHkpCit7CisgICAgVjhQcm94eSogcHJveHkgPSBW
OFByb3h5OjpyZXRyaWV2ZShub2RlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIC8v
IFRoZSBkb2N1bWVudCBtaWdodCBiZSBjcmVhdGVkIHVzaW5nIGNyZWF0ZURvY3VtZW50LCB3aGlj
aCBkb2VzCisgICAgLy8gbm90IGhhdmUgYSBmcmFtZSwgdXNlIHRoZSBhY3RpdmUgZnJhbWUuCisg
ICAgaWYgKCFwcm94eSkKKyAgICAgICAgcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShWOFByb3h5
OjpyZXRyaWV2ZUZyYW1lRm9yRW50ZXJlZENvbnRleHQoKSk7CisKKyAgICBpZiAocHJveHkpIHsK
KyAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCogbGlzdCA9IHByb3h5LT5vYmplY3RMaXN0ZW5l
cnMoKTsKKyAgICAgICAgcmV0dXJuIGZpbmRPbmx5ID8gbGlzdC0+ZmluZFdyYXBwZXIodmFsdWUs
IGlzQXR0cmlidXRlKSA6IGxpc3QtPmZpbmRPckNyZWF0ZVdyYXBwZXI8VjhPYmplY3RFdmVudExp
c3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgdmFsdWUsIGlzQXR0cmlidXRlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKworQUNDRVNTT1JfU0VUVEVSKE5vZGVFdmVudEhhbmRsZXIpCit7Cisg
ICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9k
ZT4oaW5mby5Ib2xkZXIoKSk7CisgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvRXZlbnRUeXBlKG5h
bWUpOworCisgICAgLy8gUmVtb3ZlIGhpZGRlbiBkZXBlbmRlbmN5IG9uIHRoZSBvbGQgZXZlbnQg
aGFuZGxlci4KKyAgICBpZiAoRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBub2RlLT5nZXRBdHRy
aWJ1dGVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSkpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0
PFY4QWJzdHJhY3RFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpLT5pc09iamVjdExpc3RlbmVyKCkp
IHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4obGlzdGVuZXIpLT5nZXRMaXN0ZW5lck9iamVj
dCgpOworICAgICAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShpbmZvLkhvbGRlcigpLCB2
OExpc3RlbmVyLCBWOEN1c3RvbTo6a05vZGVFdmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBTZXQgaGFuZGxlciBpZiB0aGUgdmFsdWUgaXMgYSBmdW5j
dGlvbi4KKyAgICBpZiAodmFsdWUtPklzRnVuY3Rpb24oKSkgeworICAgICAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKG5vZGUsIHZhbHVlLCB0cnVl
LCBmYWxzZSk7CisgICAgICAgIGlmIChsaXN0ZW5lcikgeworICAgICAgICAgICAgbm9kZS0+c2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyKTsKKyAgICAgICAgICAg
IGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaW5mby5Ib2xkZXIoKSwgdmFsdWUsIFY4Q3VzdG9tOjpr
Tm9kZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIC8vIE90aGVyd2lzZSwgY2xlYXIgdGhlIGhhbmRsZXIuCisgICAgICAgIG5vZGUtPmNs
ZWFyQXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOworICAgIH0KK30KKworQUNDRVNT
T1JfR0VUVEVSKE5vZGVFdmVudEhhbmRsZXIpCit7CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaW5mby5Ib2xkZXIoKSk7CisKKyAg
ICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IG5vZGUtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVu
ZXIodG9FdmVudFR5cGUobmFtZSkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRF
dmVudExpc3RlbmVyVG9WOE9iamVjdChsaXN0ZW5lcik7Cit9CisKIENBTExCQUNLX0ZVTkNfREVD
TChOb2RlQWRkRXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLmFkZEV2
ZW50TGlzdGVuZXIoKSIpOwogICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgVjhQcm94eSogcHJv
eHkgPSBWOFByb3h5OjpyZXRyaWV2ZShub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKLSAgICBp
ZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVuZXJzKCktPmZpbmRP
ckNyZWF0ZVdyYXBwZXI8VjhFdmVudExpc3RlbmVyPihwcm94eS0+ZnJhbWUoKSwgYXJnc1sxXSwg
ZmFsc2UpOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlz
dGVuZXIobm9kZSwgYXJnc1sxXSwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsK
ICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAg
IGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJvb2xlYW5WYWx1ZSgpOwogICAgICAgICBub2Rl
LT5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKyAgICAgICAg
Y3JlYXRlSGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6
a05vZGVFdmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CiAgICAgfQogICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CiB9CkBAIC02NywxOCArMTIzLDE1IEBAIENBTExCQUNLX0ZVTkNfREVDTChOb2Rl
UmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLnJlbW92ZUV2ZW50
TGlzdGVuZXIoKSIpOwogICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgVjhQcm94eSogcHJveHkg
PSBWOFByb3h5OjpyZXRyaWV2ZShub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKICAgICAvLyBJ
dCBpcyBwb3NzYmlsZSB0aGF0IHRoZSBvd25lciBkb2N1bWVudCBvZiB0aGUgbm9kZSBpcyBkZXRh
Y2hlZAotICAgIC8vIGZyb20gdGhlIGZyYW1lLCByZXR1cm4gaW1tZWRpYXRlbHkgaW4gdGhpcyBj
YXNlLgorICAgIC8vIGZyb20gdGhlIGZyYW1lLgogICAgIC8vIFNlZSBpc3N1ZSBodHRwOi8vYi84
Nzg5MDkKLSAgICBpZiAoIXByb3h5KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
Ci0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gcHJveHktPmV2ZW50TGlzdGVu
ZXJzKCktPmZpbmRXcmFwcGVyKGFyZ3NbMV0sIGZhbHNlKTsKKyAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKG5vZGUsIGFyZ3NbMV0sIGZhbHNlLCB0
cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKICAgICAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNv
cmVTdHJpbmcoYXJnc1swXSk7CiAgICAgICAgIGJvb2wgdXNlQ2FwdHVyZSA9IGFyZ3NbMl0tPkJv
b2xlYW5WYWx1ZSgpOwogICAgICAgICBub2RlLT5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxp
c3RlbmVyLmdldCgpLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5j
eShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOEN1c3RvbTo6a05vZGVFdmVudExpc3RlbmVyQ2Fj
aGVJbmRleCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAK
aW5kZXggMzcwOTJmMy4uNzIwNGE2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGdldEV2ZW50
TGlzdGVuZXIoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0LCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKK3N0YXRpYyBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGdldEV2ZW50TGlzdGVuZXIoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0LCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCBmaW5kT25seSkKIHsKICNpZiBFTkFCTEUoV09S
S0VSUykKICAgICBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHdvcmtlckNvbnRleHRQcm94
eSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUoKTsK
</data>
<flag name="review"
          id="18663"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="18664"
          type_id="3"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>