<?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>54117</bug_id>
          
          <creation_ts>2011-02-09 10:20:40 -0800</creation_ts>
          <short_desc>Replace static_cast&lt;HTMLElement*&gt; with toHTMLElement</short_desc>
          <delta_ts>2011-02-09 15:28:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348347</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2011-02-09 10:20:40 -0800</bug_when>
    <thetext>r78073 added a new method toHTMLElement.
Take it into use in places that currently cast Node* to HTMLElement* .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348351</commentid>
    <comment_count>1</comment_count>
      <attachid>81829</attachid>
    <who name="Yael">yael</who>
    <bug_when>2011-02-09 10:24:35 -0800</bug_when>
    <thetext>Created attachment 81829
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348355</commentid>
    <comment_count>2</comment_count>
      <attachid>81829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-09 10:26:57 -0800</bug_when>
    <thetext>Comment on attachment 81829
Patch.

Did you run all the regression tests? Did any assertions fire?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348363</commentid>
    <comment_count>3</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2011-02-09 10:33:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 81829 [details])
&gt; Did you run all the regression tests? Did any assertions fire?

The tests are still running, but I just noticed a crash. 
I&apos;ll stop the commit queue, it will fail anyways.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348462</commentid>
    <comment_count>4</comment_count>
      <attachid>81851</attachid>
    <who name="Yael">yael</who>
    <bug_when>2011-02-09 12:24:12 -0800</bug_when>
    <thetext>Created attachment 81851
Patch.

Only one test hit the ASSERT. It is editing/execCommand/insert-list-nested-with-orphaned.html .
This test is really expecting the function enclosingListChild to return a node which is not an HTMLElement.
(The test fails if I skip nodes that are not HTMLElements.)
Once I modified enclosingListChild to return Node and not HTMLElement, all tests are passing. I updated the patch to  return a Node from enclosingListChild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348465</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-09 12:28:53 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This test is really expecting the function enclosingListChild to return a node which is not an HTMLElement.

Is it an Element? Element* would be better than Node*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348475</commentid>
    <comment_count>6</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2011-02-09 12:44:40 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; This test is really expecting the function enclosingListChild to return a node which is not an HTMLElement.
&gt; 
&gt; Is it an Element? Element* would be better than Node*.

This is a text node, not an element. It asserts when I use toElement().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348635</commentid>
    <comment_count>7</comment_count>
      <attachid>81851</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-09 15:20:23 -0800</bug_when>
    <thetext>Comment on attachment 81851
Patch.

Clearing flags on attachment: 81851

Committed r78150: &lt;http://trac.webkit.org/changeset/78150&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348636</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-02-09 15:20:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348647</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-09 15:28:03 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78150 might have broken Qt Windows 32-bit Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81829</attachid>
            <date>2011-02-09 10:24:35 -0800</date>
            <delta_ts>2011-02-09 12:24:12 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>54117.patch</filename>
            <type>text/plain</type>
            <size>43475</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MDc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTUgQEAKKzIwMTEtMDItMDkgIFlhZWwgQWhh
cm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2Ugc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPiB3
aXRoIHRvSFRNTEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU0MTE3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIG5vIG5ldyBmdW5j
dGlvbmFsaXR5IHdhcyBpbnRyb2R1Y2VkLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlz
dEJveDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU1lbnVMaXN0UG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVM
aXN0UG9wdXA6OmFkZENoaWxkcmVuKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWNjZXNzaWJsZU5hbWVG
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFj
Y2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Via2l0X2FjY2Vzc2li
bGVfZ2V0X25hbWUpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X2Rlc2NyaXB0aW9u
KToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRnJhbWVT
ZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZyYW1lU2V0RWxl
bWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdyYXBwZXJJbmxpbmUpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9WOCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojpib2R5KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KToKKyAgICAg
ICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0
eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFu
Y2VzdG9yc1dpdGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QW5jZXN0b3JXaXRo
Q29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZk5lZWRl
ZCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVuY2xvc2luZ0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlv
bik6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyk6Cisg
ICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bmVnYXRlU3R5bGVSdWxlc1RoYXRBZmZl
Y3RBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpjb3B5U3R5bGVUb0NoaWxkcmVuKToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlv
bkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvckZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y3VycmVudEZvcm0pOgorICAgICAgICAq
IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdMaXN0Q2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW1iZWRkZWRTdWJsaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZGVkU3VibGlz
dCk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNoZWNr
Rm9yTmFtZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVO
YW1lQ2FjaGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEVsZW1lbnQ6OnNldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudDo6c2hhZG93QW5jZXN0b3JPd25lckZvcm0pOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVs
ZW1lbnRJbmRleCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRMZW5ndGgpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpzZXRPdXRlckhUTUwpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
ZXRlcjo6Y3JlYXRlUGFydCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVl
SWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpj
cmVhdGVTdWJ0cmVlSWZOZWVkZWQpOgorCiAyMDExLTAyLTA4ICBEaW1pdHJpIEdsYXprb3YgIDxk
Z2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlMaXN0Qm94LmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjphZGRDaGlsZHJlbigpCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8vIFRoZSBj
YXN0IHRvIEhUTUxFbGVtZW50IGJlbG93IGlzIHNhZmUgYmVjYXVzZSB0aGUgb25seSBvdGhlciBw
b3NzaWJsZSBsaXN0SXRlbSB0eXBlCiAgICAgICAgIC8vIHdvdWxkIGJlIGEgV01MRWxlbWVudCwg
YnV0IFdNTCBidWlsZHMgZG9uJ3QgdXNlIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMgYXQgYWxsLgot
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T3B0aW9uID0gbGlzdEJveE9wdGlvbkFj
Y2Vzc2liaWxpdHlPYmplY3Qoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihsaXN0SXRlbXNbaV0p
KTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hPcHRp
b25BY2Nlc3NpYmlsaXR5T2JqZWN0KHRvSFRNTEVsZW1lbnQobGlzdEl0ZW1zW2ldKSk7CiAgICAg
ICAgIGlmIChsaXN0T3B0aW9uICYmICFsaXN0T3B0aW9uLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkpCiAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChsaXN0T3B0aW9uKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBv
cHVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVw
OjphZGRDaGlsCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgIC8vIFRoZSBjYXN0IHRvIEhUTUxFbGVtZW50IGJlbG93IGlzIHNhZmUgYmVjYXVzZSB0
aGUgb25seSBvdGhlciBwb3NzaWJsZSBsaXN0SXRlbSB0eXBlCiAgICAgICAgIC8vIHdvdWxkIGJl
IGEgV01MRWxlbWVudCwgYnV0IFdNTCBidWlsZHMgZG9uJ3QgdXNlIGFjY2Vzc2JpbGl0eSBmZWF0
dXJlcyBhdCBhbGwuCi0gICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9u
ID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obGlzdEl0ZW1zW2ldKSk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlv
biogb3B0aW9uID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KHRvSFRNTEVsZW1l
bnQobGlzdEl0ZW1zW2ldKSk7CiAgICAgICAgIGlmIChvcHRpb24pIHsKICAgICAgICAgICAgIG9w
dGlvbi0+c2V0UGFyZW50KHRoaXMpOwogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob3B0
aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTY5LDcgKzExNjksNyBAQCBzdGF0aWMgU3RyaW5nIGFjY2Vzc2li
bGVOYW1lRm9yTm9kZShOb2RlCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4obm9kZSktPnZhbHVlKCk7CiAKICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgp
KSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGFsdCA9IHRvSFRNTEVsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShhbHRBdHRy
KTsKICAgICAgICAgaWYgKCFhbHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGFsdDsK
ICAgICB9CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWNjZXNzCiAgICAgaWYgKGlzSW1hZ2UoKSB8fCBpc0lucHV0SW1hZ2UoKSB8fCBpc05h
dGl2ZUltYWdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsK
ICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9k
ZSktPmdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYWx0ID0gdG9IVE1MRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAg
ICAgICAgICAgaWYgKGFsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogICAgICAgICAgICAgcmV0dXJuIGFsdDsKQEAgLTEzODQsMTEgKzEzODQsMTEgQEAgU3Ry
aW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2VzcwogICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG93bmVyKS0+Z2V0QXR0cmli
dXRlKG5hbWVBdHRyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvd25lci0+aXNI
VE1MRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KG93bmVyKS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9IVE1MRWxlbWVudChvd25lciktPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAg
ICAgIH0KICAgICAgICAgb3duZXIgPSBkb2N1bWVudC0+Ym9keSgpOwogICAgICAgICBpZiAob3du
ZXIgJiYgb3duZXItPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KG93bmVyKS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAg
ICAgICAgIHJldHVybiB0b0hUTUxFbGVtZW50KG93bmVyKS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRy
KTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2Fj
Y2Vzc2libGVfZ2UKICAgICAgICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC0+cmVuZGVyZXIo
KS0+bm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIGFsdFRleHQgU3Ry
aW5nIHNvIGFzIG5vdCB0byBmYWxsIGJhY2sgb24gdGl0bGUuCi0gICAgICAgICAgICBTdHJpbmcg
YWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6YWx0QXR0cik7CisgICAgICAgICAgICBTdHJpbmcgYWx0ID0gdG9IVE1MRWxlbWVudChu
b2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0cik7CiAgICAgICAgICAgICBpZiAo
IWFsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyhhbHQp
OwogICAgICAgICB9CkBAIC0yMTIsNyArMjEyLDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJr
aXRfYWNjZXNzaWJsZV9nZQogCiAgICAgLy8gVGhlIHRpdGxlIGF0dHJpYnV0ZSBzaG91bGQgYmUg
cmVsaWFibHkgYXZhaWxhYmxlIGFzIHRoZSBvYmplY3QncyBkZXNjcmlwdG9uLgogICAgIC8vIFdl
IGRvIG5vdCB3YW50IHRvIGZhbGwgYmFjayBvbiBvdGhlciBhdHRyaWJ1dGVzIGluIGl0cyBhYnNl
bmNlLiBTZWUgYnVnIDI1NTI0LgotICAgIFN0cmluZyB0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4obm9kZSktPnRpdGxlKCk7CisgICAgU3RyaW5nIHRpdGxlID0gdG9IVE1MRWxlbWVu
dChub2RlKS0+dGl0bGUoKTsKICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHJldHVyblN0cmluZyh0aXRsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcAkocmV2aXNpb24gNzgwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBncG9pbnRlciBjcmVhdGVX
cmFwcGVyKE5vZGUqIG5vZGUKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICBj
YXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkKLSAgICAgICAgICAgIHdyYXBwZWROb2RlID0gY3JlYXRlSFRNTEVsZW1lbnRXcmFwcGVyKHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgd3JhcHBlZE5vZGUg
PSBjcmVhdGVIVE1MRWxlbWVudFdyYXBwZXIodG9IVE1MRWxlbWVudChub2RlKSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHdyYXBwZWROb2RlID0gd3JhcEVsZW1lbnQoc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpKTsKICAgICAgICAgYnJlYWs7CkBAIC05Myw3ICs5Myw3IEBAIFdlYktp
dERPTUVsZW1lbnQqIGtpdChFbGVtZW50KiBlbGVtZW50KQogICAgIGdwb2ludGVyIHdyYXBwZWRF
bGVtZW50OwogCiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgd3Jh
cHBlZEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudFdyYXBwZXIoc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihlbGVtZW50KSk7CisgICAgICAgIHdyYXBwZWRFbGVtZW50ID0gY3JlYXRlSFRNTEVs
ZW1lbnRXcmFwcGVyKHRvSFRNTEVsZW1lbnQoZWxlbWVudCkpOwogICAgIGVsc2UKICAgICAgICAg
d3JhcHBlZEVsZW1lbnQgPSB3cmFwRWxlbWVudChlbGVtZW50KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA3ODA3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4
ZWNTdGF0ZSogZXhlYwogCiAgICAgSlNOb2RlKiB3cmFwcGVyOyAgICAgICAgCiAgICAgaWYgKGVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdy
YXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1l
bnQpKTsKKyAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBwZXIoZXhlYywgZ2xvYmFs
T2JqZWN0LCB0b0hUTUxFbGVtZW50KGVsZW1lbnQpKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGVs
c2UgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICB3cmFwcGVyID0gY3JlYXRl
SlNTVkdXcmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KGVsZW1lbnQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1l
U2V0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNzgwNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgSlNIVE1MRnJhbWVTZXRF
bGVtZW50OjpjYW5HZXRJdGVtc0YKIEpTVmFsdWUgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBIVE1MRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsK
KyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpc09iai0+aW1wbCgp
KTsKIAogICAgIE5vZGUqIGZyYW1lID0gZWxlbWVudC0+Y2hpbGRyZW4oKS0+bmFtZWRJdGVtKGlk
ZW50aWZpZXJUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKICAgICBpZiAoRG9jdW1lbnQq
IGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihmcmFtZSktPmNvbnRlbnREb2N1
bWVudCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHAKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVU
eXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CiAgICAgICAgICAgICBp
ZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBjcmVh
dGVKU0hUTUxXcmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnQqPihub2RlKSk7CisgICAgICAgICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBw
ZXIoZXhlYywgZ2xvYmFsT2JqZWN0LCB0b0hUTUxFbGVtZW50KG5vZGUpKTsKICNpZiBFTkFCTEUo
U1ZHKQogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTU1ZHV3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChFbGVtZW50KiBpbXBsCiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKICAgICBpZiAoaW1wbC0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVj
dCk7CisgICAgICAgIHJldHVybiB0b1Y4KHRvSFRNTEVsZW1lbnQoaW1wbCksIGZvcmNlTmV3T2Jq
ZWN0KTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChpbXBsLT5pc1NWR0VsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGltcGwpLCBmb3JjZU5l
d09iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDc4MDc0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2
NywxMiArMTk2NywxMiBAQCBIVE1MRWxlbWVudCogRG9jdW1lbnQ6OmJvZHkoKSBjb25zdAogICAg
IE5vZGUqIGJvZHkgPSAwOwogICAgIGZvciAoTm9kZSogaSA9IGRlLT5maXJzdENoaWxkKCk7IGk7
IGkgPSBpLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKGZyYW1l
c2V0VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGkp
OworICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQoaSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoaS0+aGFzVGFnTmFtZShib2R5VGFnKSAmJiAhYm9keSkKICAgICAgICAgICAgIGJvZHkg
PSBpOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihib2R5KTsK
KyAgICByZXR1cm4gdG9IVE1MRWxlbWVudChib2R5KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0
Qm9keShQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBuZXdCb2R5LCBFeGNlcHRpb25Db2RlJiBlYykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFbGVtZW50OjpkZQogICAgIGZvciAoUmVmUHRy
PE5vZGU+IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dE5v
ZGUpIHsKICAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4obm9kZS5nZXQoKSk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IHRvSFRNTEVsZW1lbnQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxk
ID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCiAg
ICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNzksNyArMTA3OSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gUmFuZ2U6OmNyZWEKICAgICAvLyBMb2dpYyBmcm9tIGRlcHJlY2F0ZWRDcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQgc2hvdWxkIGp1c3QgYmUgbW92ZWQgaW50bwogICAgIC8vIHRoaXMgZnVu
Y3Rpb24uICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IHNlbWFudGljcyBkbyBub3Qg
bWFrZQogICAgIC8vIHNlbnNlIGZvciB0aGUgcmVzdCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9u
IHRvIHVzZS4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpLT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
dG9IVE1MRWxlbWVudChlbGVtZW50KS0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChtYXJrdXApOwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAy
LDkgKzYwMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSgKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNIVE1MRWxlbWVudCgpKTsK
ICAgICAgICAgICAgIGlmIChibG9jay0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oYmxvY2su
Z2V0KCkpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVDU1NTdHlsZShzdHlsZSwgdG9IVE1MRWxl
bWVudChibG9jay5nZXQoKSkpOwogICAgICAgICAgICAgICAgIGlmICghbV9yZW1vdmVPbmx5KQot
ICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1N0eWxlKHN0eWxlQ2hhbmdlLCBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGJsb2NrLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEJs
b2NrU3R5bGUoc3R5bGVDaGFuZ2UsIHRvSFRNTEVsZW1lbnQoYmxvY2suZ2V0KCkpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5leHRQYXJhZ3JhcGhTdGFydC5pc09ycGhhbigp
KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRp
dmVGb24KICAgICAgICAgICAgIC8vIE9ubHkgd29yayBvbiBmdWxseSBzZWxlY3RlZCBub2Rlcy4K
ICAgICAgICAgICAgIGlmICghbm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0b0hUTUxFbGVt
ZW50KG5vZGUpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2Rl
LT5yZW5kZXJlcigpICYmIG5vZGUtPnBhcmVudE5vZGUoKSAhPSBsYXN0U3R5bGVkTm9kZSkgewog
ICAgICAgICAgICAgLy8gTGFzdCBzdHlsZWQgbm9kZSB3YXMgbm90IHBhcmVudCBub2RlIG9mIHRo
aXMgdGV4dCBub2RlLCBidXQgd2Ugd2lzaCB0byBzdHlsZSB0aGlzCiAgICAgICAgICAgICAvLyB0
ZXh0IG5vZGUuIFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgYWRkIGEgc3R5bGUgc3BhbiB0byBzdXJy
b3VuZCB0aGlzIHRleHQgbm9kZS4KQEAgLTc4NCw5ICs3ODQsOSBAQCBIVE1MRWxlbWVudCogQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jCiAgICAgICAgICYmIGdldElkZW50aWZpZXJWYWx1ZShj
b21wdXRlZFN0eWxlKGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkuZ2V0KCksIENTU1By
b3BlcnR5RGlyZWN0aW9uKSA9PSBhbGxvd2VkRGlyZWN0aW9uCiAgICAgICAgICYmIGhpZ2hlc3RB
bmNlc3RvcldpdGhVbmljb2RlQmlkaS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgIGlmICgh
bmV4dEhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSk7
CisgICAgICAgICAgICByZXR1cm4gdG9IVE1MRWxlbWVudChoaWdoZXN0QW5jZXN0b3JXaXRoVW5p
Y29kZUJpZGkpOwogCi0gICAgICAgIHVuc3BsaXRBbmNlc3RvciA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpKTsKKyAgICAgICAgdW5zcGxp
dEFuY2VzdG9yID0gdG9IVE1MRWxlbWVudChoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkp
OwogICAgICAgICBoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkgPSBuZXh0SGlnaGVzdEFu
Y2VzdG9yV2l0aFVuaWNvZGVCaWRpOwogICAgIH0KIApAQCAtMTA1NCw3ICsxMDU0LDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgaWYgKHBh
c3RFbmROb2RlICYmIHBhc3RFbmROb2RlLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIC8vIEFkZCB0byB0aGlzIGVsZW1lbnQncyBpbmxp
bmUgc3R5bGUgYW5kIHNraXAgb3ZlciBpdHMgY29udGVudHMuCi0gICAgICAgICAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CisgICAgICAg
ICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAg
ICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGlubGluZVN0eWxlID0gZWxl
bWVudC0+Z2V0SW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKICAgICAgICAgICAgIGlubGluZVN0
eWxlLT5tZXJnZShzdHlsZSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQs
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CkBAIC0xMTI0LDcgKzExMjQsNyBA
QCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SCiAgICAgICAgIFJlZlB0
cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAg
ICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAg
ICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICAgICAgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnQqPihub2RlLmdldCgpKSwgUmVtb3ZlQWx3YXlzKTsKKyAgICAgICAgcmVtb3ZlSW5s
aW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgdG9IVE1MRWxlbWVudChub2RlLmdldCgpKSwgUmVt
b3ZlQWx3YXlzKTsKICAgICAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhcnQgYW5kIHRoZSBl
bmQgb2YgY3VycmVudCBzZWxlY3Rpb24gaGVyZSBidXQgbmVlZCBhIHRlc3QuCiAgICAgICAgICAg
ICBpZiAocnVuU3RhcnQgPT0gbm9kZSkKQEAgLTEzNTAsOCArMTM1MCw4IEBAIEhUTUxFbGVtZW50
KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEEKICAgICBOb2RlKiB1bnNwbGl0dGFibGVFbGVt
ZW50ID0gdW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShub2RlKSk7CiAKICAgICBmb3IgKE5vZGUgKm4gPSBub2RlOyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc2hvdWxkUmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihuKSkpCi0gICAgICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4p
OworICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIHNob3VsZFJlbW92ZUlubGluZVN0
eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHRvSFRNTEVsZW1lbnQobikpKQorICAgICAgICAgICAgcmVz
dWx0ID0gdG9IVE1MRWxlbWVudChuKTsKICAgICAgICAgLy8gU2hvdWxkIHN0b3AgYXQgdGhlIGVk
aXRhYmxlIHJvb3QgKGNhbm5vdCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJ5KSBhbmQKICAgICAgICAg
Ly8gYWxzbyBzdG9wIGF0IHRoZSB1bnNwbGl0dGFibGUgZWxlbWVudCB0byBiZSBjb25zaXN0ZW50
IHdpdGggb3RoZXIgVUFzCiAgICAgICAgIGlmIChuID09IHVuc3BsaXR0YWJsZUVsZW1lbnQpCkBA
IC0xMzcwLDcgKzEzNzAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0
eWxlCiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5ld0lubGluZVN0
eWxlID0gc3R5bGU7CiAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7Cisg
ICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKICAgICAg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4aXN0aW5nSW5saW5lU3R5bGUgPSBlbGVt
ZW50LT5pbmxpbmVTdHlsZURlY2woKTsKIAogICAgICAgICAvLyBBdm9pZCBvdmVycmlkaW5nIGV4
aXN0aW5nIHN0eWxlcyBvZiBub2RlCkBAIC0xNDA2LDcgKzE0MDYsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gU2luY2UgYWRkSW5saW5lU3R5bGVJ
Zk5lZWRlZCBjYW4ndCBhZGQgc3R5bGVzIHRvIGJsb2NrLWZsb3cgcmVuZGVyIG9iamVjdHMsIGFk
ZCBzdHlsZSBhdHRyaWJ1dGUgaW5zdGVhZC4KICAgICAvLyBGSVhNRTogYXBwbHlJbmxpbmVTdHls
ZVRvUmFuZ2Ugc2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkLgogICAgIGlmICgobm9kZS0+cmVu
ZGVyZXIoKS0+aXNCbG9ja0Zsb3coKSB8fCBub2RlLT5jaGlsZE5vZGVDb3VudCgpKSAmJiBub2Rl
LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KG5vZGUpLCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5jc3NUZXh0
KCkpOworICAgICAgICBzZXROb2RlQXR0cmlidXRlKHRvSFRNTEVsZW1lbnQobm9kZSksIHN0eWxl
QXR0ciwgbmV3SW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTE0NDIsNyArMTQ0Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3du
SW5saW5lU3QKICAgICAgICAgICAgIGVsZW1lbnRzVG9QdXNoRG93bi5hcHBlbmQoc3R5bGVkRWxl
bWVudCk7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZVRvUHVzaERvd24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KCk7Ci0gICAgICAgIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCksIFJlbW92ZUlmTmVlZGVkLCBzdHlsZVRvUHVzaERv
d24uZ2V0KCkpOworICAgICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCB0
b0hUTUxFbGVtZW50KGN1cnJlbnQpLCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdl
dCgpKTsKIAogICAgICAgICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRy
ZW4gb24gZWFjaCBsZXZlbAogICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFnZ3JlZ2F0ZSBp
bmxpbmUgY2hpbGQgZWxlbWVudHMgdG9nZXRoZXIgc28gdGhhdCB3ZSBkb24ndCB3cmFwIGVhY2gg
Y2hpbGQgc2VwYXJhdGVseS4KQEAgLTE1MTQsNyArMTUxNCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgaWYgKG5v
ZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBub2RlRnVsbHlTZWxlY3RlZChub2RlLCBzdGFydCwgZW5k
KSkgewotICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxl
bSA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9
IGVsZW0tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKCk7CiAgICAgICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dCA9IGVsZW0tPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVUb1B1c2hEb3duOwpAQCAtMTYz
OCw3ICsxNjM4LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RQog
ICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxl
bWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KSk7CisgICAgcmV0
dXJuIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHRvSFRNTEVsZW1l
bnQoZWxlbWVudCkpOwogfQogCiBib29sIEFwcGx5U3R5bGVDb21tYW5kOjppc1ZhbGlkQ2FyZXRQ
b3NpdGlvbkluVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMTg0MSwxMCAr
MTg0MSwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAgICAg
SFRNTEVsZW1lbnQqIHN0eWxlQ29udGFpbmVyID0gMDsKICAgICBmb3IgKE5vZGUqIGNvbnRhaW5l
ciA9IHN0YXJ0Tm9kZS5nZXQoKTsgY29udGFpbmVyICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlOyBj
b250YWluZXIgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBpZiAoY29udGFp
bmVyLT5pc0hUTUxFbGVtZW50KCkgJiYgY29udGFpbmVyLT5oYXNUYWdOYW1lKGZvbnRUYWcpKQot
ICAgICAgICAgICAgZm9udENvbnRhaW5lciA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY29u
dGFpbmVyKTsKKyAgICAgICAgICAgIGZvbnRDb250YWluZXIgPSB0b0hUTUxFbGVtZW50KGNvbnRh
aW5lcik7CiAgICAgICAgIGJvb2wgc3R5bGVDb250YWluZXJJc05vdFNwYW4gPSAhc3R5bGVDb250
YWluZXIgfHwgIXN0eWxlQ29udGFpbmVyLT5oYXNUYWdOYW1lKHNwYW5UYWcpOwogICAgICAgICBp
ZiAoY29udGFpbmVyLT5pc0hUTUxFbGVtZW50KCkgJiYgKGNvbnRhaW5lci0+aGFzVGFnTmFtZShz
cGFuVGFnKSB8fCAoc3R5bGVDb250YWluZXJJc05vdFNwYW4gJiYgY29udGFpbmVyLT5jaGlsZE5v
ZGVDb3VudCgpKSkpCi0gICAgICAgICAgICBzdHlsZUNvbnRhaW5lciA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4oY29udGFpbmVyKTsKKyAgICAgICAgICAgIHN0eWxlQ29udGFpbmVyID0gdG9I
VE1MRWxlbWVudChjb250YWluZXIpOwogICAgICAgICBpZiAoIWNvbnRhaW5lci0+Zmlyc3RDaGls
ZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IGNvbnRhaW5lci0+
Zmlyc3RDaGlsZCgpOwpAQCAtMTg3NCw3ICsxODc0LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YWRkSW5saW5lU3R5bGVJZgogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkubGVu
Z3RoKCkpIHsKICAgICAgICAgaWYgKHN0eWxlQ29udGFpbmVyKSB7Ci0gICAgICAgICAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZXhpc3RpbmdTdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oc3R5bGVDb250YWluZXIpLT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBleGlzdGluZ1N0eWxlID0gdG9IVE1MRWxlbWVu
dChzdHlsZUNvbnRhaW5lciktPmlubGluZVN0eWxlRGVjbCgpOwogICAgICAgICAgICAgaWYgKGV4
aXN0aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRh
aW5lciwgc3R5bGVBdHRyLCBleGlzdGluZ1N0eWxlLT5jc3NUZXh0KCkgKyBzdHlsZUNoYW5nZS5j
c3NTdHlsZSgpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNzgwNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBlbmNsb3Np
bmdEZWxldGFibGVFbAogICAgICAgICByZXR1cm4gMDsKIAogICAgIEFTU0VSVChlbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVs
ZW1lbnQpOworICAgIHJldHVybiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpOwogfQogCiB2b2lkIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQpAQCAtMjYzLDcgKzI2Myw3IEBAIHZvaWQgRGVs
ZXRlQnV0dG9uQ29udHJvbGxlcjo6c2hvdyhIVE1MRWwKICAgICBpZiAoIWVuYWJsZWQoKSB8fCAh
ZWxlbWVudCB8fCAhZWxlbWVudC0+aW5Eb2N1bWVudCgpIHx8ICFpc0RlbGV0YWJsZUVsZW1lbnQo
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9mcmFtZS0+ZWRpdG9yKCkt
PnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2Uoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVt
ZW50KSkpCisgICAgaWYgKCFtX2ZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkU2hvd0RlbGV0ZUludGVy
ZmFjZSh0b0hUTUxFbGVtZW50KGVsZW1lbnQpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
d2UgcmVseSBvbiB0aGUgcmVuZGVyZXIgaGF2aW5nIGN1cnJlbnQgaW5mb3JtYXRpb24sIHNvIHdl
IHNob3VsZCB1cGRhdGUgdGhlIGxheW91dCBpZiBuZWVkZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU4LDcgKzE1NTgsNyBAQCB2b2lkIEVkaXRv
cjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpCiAgICAgaWYgKGZvY3VzZWROb2RlICYmIChm
b2N1c2VkTm9kZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykgfHwgKGZvY3VzZWROb2RlLT5oYXNU
YWdOYW1lKGlucHV0VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9jdXNl
ZE5vZGUpLT5pc1RleHRGaWVsZCgpKSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1
cmFsV3JpdGluZ0RpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQqPihmb2N1c2VkTm9kZSktPnNldEF0dHJpYnV0ZShkaXJBdHRyLCBk
aXJlY3Rpb24gPT0gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uID8gImx0ciIgOiAicnRsIik7
CisgICAgICAgIHRvSFRNTEVsZW1lbnQoZm9jdXNlZE5vZGUpLT5zZXRBdHRyaWJ1dGUoZGlyQXR0
ciwgZGlyZWN0aW9uID09IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA/ICJsdHIiIDogInJ0
bCIpOwogICAgICAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuCiAgICAgaWYg
KCFsaXN0IHx8ICFsaXN0LT5uZXh0RWxlbWVudFNpYmxpbmcoKSB8fCAhbGlzdC0+bmV4dEVsZW1l
bnRTaWJsaW5nKCktPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOwogCi0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBuZXh0TGlzdCA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4obGlzdC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpOworICAgIFJlZlB0cjxIVE1M
RWxlbWVudD4gbmV4dExpc3QgPSB0b0hUTUxFbGVtZW50KGxpc3QtPm5leHRFbGVtZW50U2libGlu
ZygpKTsKICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhsaXN0LmdldCgpLCBuZXh0TGlzdC5nZXQoKSkp
IHsKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhsaXN0LCBuZXh0TGlzdCk7CiAgICAg
ICAgIHJldHVybiBuZXh0TGlzdC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzgwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc2LDcgKzQ3Niw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Om5lZ2F0ZVN0eWwKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbV9maXJzdE5v
ZGVJbnNlcnRlZC5nZXQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkg
ewogICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzUzNzE1MzY+IFN0eWxlIHJ1bGVz
IHRoYXQgbWF0Y2ggcGFzdGVkIGNvbnRlbnQgY2FuIGNoYW5nZSBpdCdzIGFwcGVhcmFuY2UKICAg
ICAgICAgaWYgKGlzU3R5bGVTcGFuKG5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBIVE1MRWxl
bWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZS5nZXQoKSk7CisgICAgICAg
ICAgICBIVE1MRWxlbWVudCogZSA9IHRvSFRNTEVsZW1lbnQobm9kZS5nZXQoKSk7CiAgICAgICAg
ICAgICAvLyBUaGVyZSBhcmUgb3RoZXIgc3R5bGVzIHRoYXQgc3R5bGUgcnVsZXMgY2FuIGdpdmUg
dG8gc3R5bGUgc3BhbnMsCiAgICAgICAgICAgICAvLyBidXQgdGhlc2UgYXJlIHRoZSB0d28gaW1w
b3J0YW50IG9uZXMgYmVjYXVzZSB0aGV5J2xsIHByZXZlbnQKICAgICAgICAgICAgIC8vIGluc2Vy
dGVkIGNvbnRlbnQgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIHJpZ2h0IHBhcmFncmFwaC4KQEAgLTYy
MCw3ICs2MjAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAg
ICAgaWYgKCFzb3VyY2VEb2N1bWVudFN0eWxlU3BhbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gc291cmNlRG9jdW1lbnRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6
Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oc291cmNlRG9jdW1lbnRTdHlsZVNwYW4p
LT5nZXRJbmxpbmVTdHlsZURlY2woKSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc291cmNl
RG9jdW1lbnRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHRvSFRNTEVsZW1lbnQoc291cmNl
RG9jdW1lbnRTdHlsZVNwYW4pLT5nZXRJbmxpbmVTdHlsZURlY2woKSk7CiAgICAgQ29udGFpbmVy
Tm9kZSogY29udGV4dCA9IHNvdXJjZURvY3VtZW50U3R5bGVTcGFuLT5wYXJlbnROb2RlKCk7CiAK
ICAgICAvLyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0
aW9uIGJsb2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9u
LApAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRs
ZVN0eWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBjb3BpZWRSYW5nZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihjb3BpZWRSYW5nZVN0eWxlU3BhbiktPmdldElubGluZVN0eWxlRGVjbCgp
KTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBjb3BpZWRSYW5nZVN0eWxlID0gRWRpdGluZ1N0
eWxlOjpjcmVhdGUodG9IVE1MRWxlbWVudChjb3BpZWRSYW5nZVN0eWxlU3BhbiktPmdldElubGlu
ZVN0eWxlRGVjbCgpKTsKIAogICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHB1dCBzb3VyY2VEb2N1bWVu
dFN0eWxlU3BhbidzIG5vbi1yZWR1bmRhbnQgc3R5bGVzIG9udG8gY29waWVkUmFuZ2VTdHlsZVNw
YW4sCiAgICAgLy8gYXMgbG9uZyBhcyB0aGV5IGFyZW4ndCBvdmVycmlkZGVuIGJ5IG9uZXMgb24g
Y29waWVkUmFuZ2VTdHlsZVNwYW4uCkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Y29weVN0eWxlVAogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBw
dXQgYSBzcGFuIHRhZyBhcm91bmQgdGhlIGNoaWxkIG5vZGUuCiAgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gbmV3Tm9kZSA9IHBhcmVudE5vZGUtPmNsb25lTm9kZShmYWxzZSk7CiAgICAgICAgICAg
ICBBU1NFUlQobmV3Tm9kZS0+aGFzVGFnTmFtZShzcGFuVGFnKSk7Ci0gICAgICAgICAgICBIVE1M
RWxlbWVudCogbmV3U3BhbiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obmV3Tm9kZS5nZXQo
KSk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbiA9IHRvSFRNTEVsZW1lbnQobmV3
Tm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKG5ld1NwYW4sIHN0eWxl
QXR0ciwgcGFyZW50U3R5bGUtPmNzc1RleHQoKSk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0
ZXIobmV3U3BhbiwgY2hpbGROb2RlKTsKICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwpAQCAtNzA3LDcgKzcwNyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNvcHlT
dHlsZVQKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhbmQgbWVyZ2Ug
dGhlbSBpbnRvIHRoZSBjaGlsZCBub2RlLiAgV2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZQogICAg
ICAgICAgICAgLy8gZXhpc3Rpbmcgc3R5bGVzLCBzbyBkb24ndCBjbG9iYmVyIG9uIG1lcmdlLgog
ICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBuZXdTdHlsZSA9
IHBhcmVudFN0eWxlLT5jb3B5KCk7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogY2hpbGRFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjaGlsZE5vZGUpOworICAgICAgICAgICAg
SFRNTEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY2hpbGROb2RlKTsKICAg
ICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXhpc3RpbmdTdHls
ZXMgPSBjaGlsZEVsZW1lbnQtPmdldElubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CiAgICAgICAg
ICAgICBleGlzdGluZ1N0eWxlcy0+bWVyZ2UobmV3U3R5bGUuZ2V0KCksIGZhbHNlKTsKICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoY2hpbGRFbGVtZW50LCBzdHlsZUF0dHIsIGV4aXN0aW5n
U3R5bGVzLT5jc3NUZXh0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDAs
NyArMTcwMCw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKE5vZGUKICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBpZiAobm9kZS0+aXNIVE1M
RWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
KG5vZGUpLT5mb3JtKCk7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8
fCBub2RlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKICAgICAgICAgICAgIE5vZGUqIGNoaWxk
RG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG5vZGUpLT5jb250
ZW50RG9jdW1lbnQoKTsKQEAgLTE3MjQsNyArMTcyNCw3IEBAIEhUTUxGb3JtRWxlbWVudCogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y3UKICAgICBmb3IgKG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShmb3Jt
VGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihu
b2RlKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBpZiAo
bm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYyLDcgKzY2Miw3
IEBAIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdMaXN0KE5vZGUqIG5vZGUpCiAgICAgCiAgICAgZm9y
IChDb250YWluZXJOb2RlKiBuID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNUYWdO
YW1lKG9sVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG4pOworICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQobik7CiAgICAgICAgIGlmIChu
ID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC02ODEsNyArNjgxLDcg
QEAgSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3RDaGlsZChOb2RlICpubwogICAgIC8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIGlzIGluYXBwcm9wcmlhdGVseSBuYW1lZCBpZiBpdCBzdGFydHMgd2l0
aCBub2RlIGluc3RlYWQgb2Ygbm9kZS0+cGFyZW50Tm9kZSgpCiAgICAgZm9yIChOb2RlKiBuID0g
bm9kZTsgbiAmJiBuLT5wYXJlbnROb2RlKCk7IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKICAgICAg
ICAgaWYgKG4tPmhhc1RhZ05hbWUobGlUYWcpIHx8IGlzTGlzdEVsZW1lbnQobi0+cGFyZW50Tm9k
ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pOwor
ICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQobik7CiAgICAgICAgIGlmIChuID09IHJv
b3QgfHwgaXNUYWJsZUNlbGwobikpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC02
OTQsNyArNjk0LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBlbWJlZGRlZFN1Ymxpc3QoTm9kZQog
ICAgIC8vIENoZWNrIHRoZSBET00gc28gdGhhdCB3ZSdsbCBmaW5kIGNvbGxhcHNlZCBzdWJsaXN0
cyB3aXRob3V0IHJlbmRlcmVycy4KICAgICBmb3IgKE5vZGUqIG4gPSBsaXN0SXRlbS0+Zmlyc3RD
aGlsZCgpOyBuOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoaXNMaXN0RWxl
bWVudChuKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4p
OworICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQobik7CiAgICAgfQogICAgIAogICAg
IHJldHVybiAwOwpAQCAtNzA1LDcgKzcwNSw3IEBAIHN0YXRpYyBOb2RlKiBhcHBlbmRlZFN1Ymxp
c3QoTm9kZSogbGlzdEkKICAgICAvLyBDaGVjayB0aGUgRE9NIHNvIHRoYXQgd2UnbGwgZmluZCBj
b2xsYXBzZWQgc3VibGlzdHMgd2l0aG91dCByZW5kZXJlcnMuCiAgICAgZm9yIChOb2RlKiBuID0g
bGlzdEl0ZW0tPm5leHRTaWJsaW5nKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChpc0xpc3RFbGVtZW50KG4pKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4obik7CisgICAgICAgICAgICByZXR1cm4gdG9IVE1MRWxlbWVudChuKTsK
ICAgICAgICAgaWYgKGlzTGlzdEl0ZW0obGlzdEl0ZW0pKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gNzgwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2OCw3ICsyNjgsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
CiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5u
b3RhdGUoKSB8fCBhZGREaXNwbGF5SW5saW5lKSkgewotICAgICAgICBSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVt
ZW50KS0+Z2V0SW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKKyAgICAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IHRvSFRNTEVsZW1lbnQoZWxlbWVudCktPmdl
dElubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CiAgICAgICAgIGlmIChzaG91bGRBbm5vdGF0ZSgp
KSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
RnJvbU1hdGNoZWRSdWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoY29uc3Rf
Y2FzdDxFbGVtZW50Kj4oZWxlbWVudCkpOwogICAgICAgICAgICAgLy8gU3R5bGVzIGZyb20gdGhl
IGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbiwgaGVsZCBpbiB0aGUgdmFyaWFibGUgInN0eWxlIiwg
dGFrZSBwcmVjZWRlbmNlIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsNyBAQCBib29sIEhUTUxDb2xsZWN0
aW9uOjpjaGVja0Zvck5hbWVNYXRjaChFCiAgICAgaWYgKCFlbGVtZW50LT5pc0hUTUxFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBIVE1MRWxlbWVudCogZSA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgSFRNTEVsZW1lbnQqIGUgPSB0
b0hUTUxFbGVtZW50KGVsZW1lbnQpOwogICAgIGlmICghY2hlY2tOYW1lKQogICAgICAgICByZXR1
cm4gZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBuYW1lOwogCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9p
ZCBIVE1MQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlKCkgYwogICAgIGZvciAoRWxlbWVudCog
ZWxlbWVudCA9IGl0ZW1BZnRlcigwKTsgZWxlbWVudDsgZWxlbWVudCA9IGl0ZW1BZnRlcihlbGVt
ZW50KSkgewogICAgICAgICBpZiAoIWVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBIVE1MRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIEhUTUxFbGVtZW50KiBlID0gdG9IVE1MRWxlbWVu
dChlbGVtZW50KTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5n
ZXRJZEF0dHJpYnV0ZSgpOwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFs
ID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNF
bXB0eSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24g
NzgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldE91dGVySFRNTChj
b25zdCBTdHIKICAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgSFRNTEVsZW1lbnQqIHBhcmVudCA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50Kj4ocCk7CisgICAgSFRNTEVsZW1lbnQqIHBhcmVudCA9IHRvSFRNTEVsZW1l
bnQocCk7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21Tb3VyY2UoaHRtbCwgcGFyZW50LCBlYyk7CiAgICAgaWYgKGZyYWdtZW50KSB7
CkBAIC04NTIsNyArODUyLDcgQEAgSFRNTEZvcm1FbGVtZW50KiBIVE1MRWxlbWVudDo6c2hhZG93
QW5jZQogCiAgICAgaWYgKCFhbmNlc3Rvck5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgSFRNTEVsZW1lbnQqIGFuY2VzdG9ySFRNTCA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4oYW5jZXN0b3JOb2RlKTsKKyAgICBIVE1MRWxlbWVudCogYW5jZXN0b3JIVE1M
ID0gdG9IVE1MRWxlbWVudChhbmNlc3Rvck5vZGUpOwogICAgIGlmICghYW5jZXN0b3JIVE1MKQog
ICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gYW5jZXN0b3JIVE1MLT5mb3JtKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiA3ODA3NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDYyLDcgKzQ2Miw3IEBAIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1l
bnRJbmQKICAgICAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkKICAgICAgICAgICAg
ICAgICAgICAgJiYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShvYmpl
Y3RUYWcpKQotICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpLT5mb3JtKCkgPT0gdGhpcykKKyAgICAgICAgICAgICAgICAgICAgJiYgdG9IVE1MRWxl
bWVudChub2RlKS0+Zm9ybSgpID09IHRoaXMpCiAgICAgICAgICAgICAgICAgKytpOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NCw3ICs0NjQsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50OjpzZXRPcHRpb24odW5zaWduCiAgICAgICAgIHNldExlbmd0aChpbmRleCwgZWMp
OwogICAgICAgICAvLyByZXBsYWNlIGFuIGV4aXN0aW5nIGVudHJ5ID8KICAgICB9IGVsc2UgaWYg
KGRpZmYgPCAwKSB7Ci0gICAgICAgIGJlZm9yZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4o
b3B0aW9ucygpLT5pdGVtKGluZGV4KzEpKTsKKyAgICAgICAgYmVmb3JlID0gdG9IVE1MRWxlbWVu
dChvcHRpb25zKCktPml0ZW0oaW5kZXgrMSkpOwogICAgICAgICByZW1vdmUoaW5kZXgpOwogICAg
IH0KICAgICAvLyBmaW5hbGx5IGFkZCB0aGUgbmV3IGVsZW1lbnQKQEAgLTQ4Niw3ICs0ODYsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50OjpzZXRMZW5ndGgodW5zaWduCiAgICAgICAgIGRvIHsK
ICAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBvcHRpb24gPSBkb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KG9wdGlvblRhZywgZmFsc2UpOwogICAgICAgICAgICAgQVNTRVJUKG9wdGlvbik7Ci0g
ICAgICAgICAgICBhZGQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihvcHRpb24uZ2V0KCkpLCAw
LCBlYyk7CisgICAgICAgICAgICBhZGQodG9IVE1MRWxlbWVudChvcHRpb24uZ2V0KCkpLCAwLCBl
Yyk7CiAgICAgICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0gd2hpbGUgKCsrZGlmZik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM3LDcg
KzUzNyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTChsb24KICAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgKm91dGVySFRNTCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSktPm91dGVySFRN
TCgpOworICAgICpvdXRlckhUTUwgPSB0b0hUTUxFbGVtZW50KG5vZGUpLT5vdXRlckhUTUwoKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKGxvbmcgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIG91dGVySFRNTCwgbG9uZyogbmV3SWQpCkBAIC01NTIsNyArNTUyLDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKGxvbgogICAgIE5vZGUqIHByZXZp
b3VzU2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOwogICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAKLSAgICBIVE1MRWxlbWVudCogaHRt
bEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpOworICAgIEhUTUxFbGVt
ZW50KiBodG1sRWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgaHRtbEVsZW1lbnQtPnNldE91dGVySFRNTChvdXRlckhUTUwsIGVjKTsK
ICAgICBpZiAoZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZp
c2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlTW92ZUV2ZW50KAogICAgICAgICAgICAgICAgIC8vIGVmZmVjdCBvbiBwbHVnaW5zICh3
aGljaCBtYXRjaGVzIEZpcmVmb3gpLgogICAgICAgICAgICAgICAgIGJvb2wgb3ZlclBsdWdpbkVs
ZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAobWV2LnRhcmdldE5vZGUoKSAmJiBt
ZXYudGFyZ2V0Tm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
SFRNTEVsZW1lbnQqIGVsID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtZXYudGFyZ2V0Tm9k
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgSFRNTEVsZW1lbnQqIGVsID0gdG9IVE1MRWxlbWVu
dChtZXYudGFyZ2V0Tm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgb3ZlclBsdWdpbkVsZW1l
bnQgPSBlbC0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8IGVsLT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykgfHwgZWwtPmhhc1RhZ05hbWUoZW1iZWRUYWcpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoIW92ZXJQbHVnaW5FbGVtZW50KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcg
KzEwNyw3IEBAIFJlbmRlck1ldGVyOjp+UmVuZGVyTWV0ZXIoKQogCiBQYXNzUmVmUHRyPE1ldGVy
UGFydEVsZW1lbnQ+IFJlbmRlck1ldGVyOjpjcmVhdGVQYXJ0KFBzZXVkb0lkIHBzZXVkb0lkKQog
ewotICAgIFJlZlB0cjxNZXRlclBhcnRFbGVtZW50PiBlbGVtZW50ID0gTWV0ZXJQYXJ0RWxlbWVu
dDo6Y3JlYXRlRm9yUGFydChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUoKSksIHBzZXVk
b0lkKTsKKyAgICBSZWZQdHI8TWV0ZXJQYXJ0RWxlbWVudD4gZWxlbWVudCA9IE1ldGVyUGFydEVs
ZW1lbnQ6OmNyZWF0ZUZvclBhcnQodG9IVE1MRWxlbWVudChub2RlKCkpLCBwc2V1ZG9JZCk7CiAg
ICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkpCiAgICAgICAgIGFkZENoaWxkKGVsZW1lbnQtPnJl
bmRlcmVyKCkpOwogICAgIHJldHVybiBlbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0
cmVlSWZOCiAgICAgICAgIC8vIEZvciBub24tc2VhcmNoIGZpZWxkcywgdGhlcmUgaXMgbm8gaW50
ZXJtZWRpYXRlIGlubmVyQmxvY2sgYXMgdGhlIHNoYWRvdyBub2RlLgogICAgICAgICAvLyBtX2lu
bmVyVGV4dCB3aWxsIGJlIHRoZSBzaGFkb3cgbm9kZSBpbiB0aGF0IGNhc2UuICAgICAgICAKICAg
ICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gaW5uZXJCbG9jayA/IGlubmVyQmxvY2st
PnJlbmRlcmVyKCktPnN0eWxlKCkgOiBzdHlsZSgpOwotICAgICAgICBtX2lubmVyVGV4dCA9IFRl
eHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCksIGlubmVyQmxvY2sg
PyAwIDogc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICAgICAgbV9pbm5l
clRleHQgPSBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCBp
bm5lckJsb2NrID8gMCA6IHRvSFRNTEVsZW1lbnQobm9kZSgpKSk7CiAgICAgICAgIG1faW5uZXJU
ZXh0LT5hdHRhY2hJbm5lckVsZW1lbnQoaW5uZXJCbG9jayA/IGlubmVyQmxvY2sgOiBub2RlKCks
IGNyZWF0ZUlubmVyVGV4dFN0eWxlKHBhcmVudFN0eWxlKSwgcmVuZGVyQXJlbmEoKSk7CiAgICAg
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2lu
Z2xlTGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxMSwxNyArNjExLDE3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpjcmVhdGUKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgICAgICBpZiAoaW5wdXRF
bGVtZW50KCktPmlzU3BlZWNoRW5hYmxlZCgpICYmICFtX3NwZWVjaEJ1dHRvbikgewogICAgICAg
ICAgICAgLy8gQ3JlYXRlIHRoZSBzcGVlY2ggYnV0dG9uIGVsZW1lbnQuCi0gICAgICAgICAgICBt
X3NwZWVjaEJ1dHRvbiA9IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpjcmVhdGUoc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICAgICAgICAgIG1fc3BlZWNoQnV0
dG9uID0gSW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSh0b0hUTUxFbGVtZW50
KG5vZGUoKSkpOwogICAgICAgICAgICAgbV9zcGVlY2hCdXR0b24tPmF0dGFjaElubmVyRWxlbWVu
dChub2RlKCksIGNyZWF0ZVNwZWVjaEJ1dHRvblN0eWxlKCksIHJlbmRlckFyZW5hKCkpOwogICAg
ICAgICB9CiAjZW5kaWYKICAgICAgICAgYm9vbCBoYXNTcGluQnV0dG9uID0gaW5wdXRFbGVtZW50
KCktPmhhc1NwaW5CdXR0b24oKTsKICAgICAgICAgaWYgKGhhc1NwaW5CdXR0b24gJiYgIW1faW5u
ZXJTcGluQnV0dG9uKSB7Ci0gICAgICAgICAgICBtX2lubmVyU3BpbkJ1dHRvbiA9IFNwaW5CdXR0
b25FbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKCkpKTsKKyAg
ICAgICAgICAgIG1faW5uZXJTcGluQnV0dG9uID0gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZSh0
b0hUTUxFbGVtZW50KG5vZGUoKSkpOwogICAgICAgICAgICAgbV9pbm5lclNwaW5CdXR0b24tPmF0
dGFjaElubmVyRWxlbWVudChub2RlKCksIGNyZWF0ZUlubmVyU3BpbkJ1dHRvblN0eWxlKCksIHJl
bmRlckFyZW5hKCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChoYXNTcGluQnV0dG9uICYmICFt
X291dGVyU3BpbkJ1dHRvbikgewotICAgICAgICAgICAgbV9vdXRlclNwaW5CdXR0b24gPSBTcGlu
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSgpKSk7
CisgICAgICAgICAgICBtX291dGVyU3BpbkJ1dHRvbiA9IFNwaW5CdXR0b25FbGVtZW50OjpjcmVh
dGUodG9IVE1MRWxlbWVudChub2RlKCkpKTsKICAgICAgICAgICAgIG1fb3V0ZXJTcGluQnV0dG9u
LT5hdHRhY2hJbm5lckVsZW1lbnQobm9kZSgpLCBjcmVhdGVPdXRlclNwaW5CdXR0b25TdHlsZSgp
LCByZW5kZXJBcmVuYSgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC02MjksMTgg
KzYyOSwxOCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlCiAKICAg
ICBpZiAoIW1faW5uZXJCbG9jaykgewogICAgICAgICAvLyBDcmVhdGUgdGhlIGlubmVyIGJsb2Nr
IGVsZW1lbnQKLSAgICAgICAgbV9pbm5lckJsb2NrID0gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6
OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUoKSkpOworICAgICAgICBtX2lu
bmVyQmxvY2sgPSBUZXh0Q29udHJvbElubmVyRWxlbWVudDo6Y3JlYXRlKHRvSFRNTEVsZW1lbnQo
bm9kZSgpKSk7CiAgICAgICAgIG1faW5uZXJCbG9jay0+YXR0YWNoSW5uZXJFbGVtZW50KG5vZGUo
KSwgY3JlYXRlSW5uZXJCbG9ja1N0eWxlKHN0eWxlKCkpLCByZW5kZXJBcmVuYSgpKTsKICAgICB9
CiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICBpZiAoaW5wdXRFbGVtZW50KCktPmlzU3Bl
ZWNoRW5hYmxlZCgpICYmICFtX3NwZWVjaEJ1dHRvbikgewogICAgICAgICAvLyBDcmVhdGUgdGhl
IHNwZWVjaCBidXR0b24gZWxlbWVudC4KLSAgICAgICAgbV9zcGVlY2hCdXR0b24gPSBJbnB1dEZp
ZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4o
bm9kZSgpKSk7CisgICAgICAgIG1fc3BlZWNoQnV0dG9uID0gSW5wdXRGaWVsZFNwZWVjaEJ1dHRv
bkVsZW1lbnQ6OmNyZWF0ZSh0b0hUTUxFbGVtZW50KG5vZGUoKSkpOwogICAgICAgICBtX3NwZWVj
aEJ1dHRvbi0+YXR0YWNoSW5uZXJFbGVtZW50KG5vZGUoKSwgY3JlYXRlU3BlZWNoQnV0dG9uU3R5
bGUoKSwgcmVuZGVyQXJlbmEoKSk7CiAgICAgfQogI2VuZGlmCiAgICAgaWYgKGlucHV0RWxlbWVu
dCgpLT5oYXNTcGluQnV0dG9uKCkgJiYgIW1fb3V0ZXJTcGluQnV0dG9uKSB7Ci0gICAgICAgIG1f
b3V0ZXJTcGluQnV0dG9uID0gU3BpbkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG5vZGUoKSkpOworICAgICAgICBtX291dGVyU3BpbkJ1dHRvbiA9IFNwaW5C
dXR0b25FbGVtZW50OjpjcmVhdGUodG9IVE1MRWxlbWVudChub2RlKCkpKTsKICAgICAgICAgbV9v
dXRlclNwaW5CdXR0b24tPmF0dGFjaElubmVyRWxlbWVudChub2RlKCksIGNyZWF0ZU91dGVyU3Bp
bkJ1dHRvblN0eWxlKCksIHJlbmRlckFyZW5hKCkpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="73441"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="73442"
          type_id="3"
          status="-"
          setter="yael"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81851</attachid>
            <date>2011-02-09 12:24:12 -0800</date>
            <delta_ts>2011-02-09 15:20:23 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>54117.patch</filename>
            <type>text/plain</type>
            <size>44217</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc4MDgzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTUgQEAKKzIwMTEtMDItMDkgIFlhZWwgQWhh
cm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2Ugc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPiB3
aXRoIHRvSFRNTEVsZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU0MTE3CisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHNpbmNlIG5vIG5ldyBmdW5j
dGlvbmFsaXR5IHdhcyBpbnRyb2R1Y2VkLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlz
dEJveDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU1lbnVMaXN0UG9wdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lbnVM
aXN0UG9wdXA6OmFkZENoaWxkcmVuKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWNjZXNzaWJsZU5hbWVG
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFj
Y2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAod2Via2l0X2FjY2Vzc2li
bGVfZ2V0X25hbWUpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X2Rlc2NyaXB0aW9u
KToKKyAgICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KU05ld2x5Q3JlYXRlZCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MRnJhbWVT
ZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTSFRNTEZyYW1lU2V0RWxl
bWVudDo6bmFtZUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdyYXBwZXJJbmxpbmUpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
dG9WOCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojpib2R5KToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpkZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KToKKyAgICAg
ICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudCk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlCbG9ja1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0
eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFu
Y2VzdG9yc1dpdGhVbmljb2RlQmlkaSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpoaWdoZXN0QW5jZXN0b3JXaXRo
Q29uZmxpY3RpbmdJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24pOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZk5lZWRl
ZCk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmVuY2xvc2luZ0RlbGV0YWJsZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6c2hvdyk6CisgICAgICAgICogZWRpdGluZy9FZGl0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRCYXNlV3JpdGluZ0RpcmVjdGlv
bik6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyk6Cisg
ICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bmVnYXRlU3R5bGVSdWxlc1RoYXRBZmZl
Y3RBcHBlYXJhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTdHlsZVNwYW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpjb3B5U3R5bGVUb0NoaWxkcmVuKToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlv
bkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvckZvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29udHJvbGxlcjo6Y3VycmVudEZvcm0pOgorICAgICAgICAq
IGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5jbG9zaW5nTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjplbmNsb3NpbmdMaXN0Q2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW1iZWRkZWRTdWJsaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZGVkU3VibGlz
dCk6CisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNoZWNr
Rm9yTmFtZU1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVO
YW1lQ2FjaGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEVsZW1lbnQ6OnNldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudDo6c2hhZG93QW5jZXN0b3JPd25lckZvcm0pOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVs
ZW1lbnRJbmRleCk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudDo6c2V0T3B0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpzZXRMZW5ndGgpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6Z2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpzZXRPdXRlckhUTUwpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNZXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
ZXRlcjo6Y3JlYXRlUGFydCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpjcmVhdGVTdWJ0cmVl
SWZOZWVkZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpj
cmVhdGVTdWJ0cmVlSWZOZWVkZWQpOgorCiAyMDExLTAyLTA4ICBEaW1pdHJpIEdsYXprb3YgIDxk
Z2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlMaXN0Qm94LmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
NyArNzksNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjphZGRDaGlsZHJlbigpCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8vIFRoZSBj
YXN0IHRvIEhUTUxFbGVtZW50IGJlbG93IGlzIHNhZmUgYmVjYXVzZSB0aGUgb25seSBvdGhlciBw
b3NzaWJsZSBsaXN0SXRlbSB0eXBlCiAgICAgICAgIC8vIHdvdWxkIGJlIGEgV01MRWxlbWVudCwg
YnV0IFdNTCBidWlsZHMgZG9uJ3QgdXNlIGFjY2Vzc2liaWxpdHkgZmVhdHVyZXMgYXQgYWxsLgot
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T3B0aW9uID0gbGlzdEJveE9wdGlvbkFj
Y2Vzc2liaWxpdHlPYmplY3Qoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihsaXN0SXRlbXNbaV0p
KTsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbGlzdE9wdGlvbiA9IGxpc3RCb3hPcHRp
b25BY2Nlc3NpYmlsaXR5T2JqZWN0KHRvSFRNTEVsZW1lbnQobGlzdEl0ZW1zW2ldKSk7CiAgICAg
ICAgIGlmIChsaXN0T3B0aW9uICYmICFsaXN0T3B0aW9uLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkpCiAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChsaXN0T3B0aW9uKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBv
cHVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVw
OjphZGRDaGlsCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAg
ICAgICAgIC8vIFRoZSBjYXN0IHRvIEhUTUxFbGVtZW50IGJlbG93IGlzIHNhZmUgYmVjYXVzZSB0
aGUgb25seSBvdGhlciBwb3NzaWJsZSBsaXN0SXRlbSB0eXBlCiAgICAgICAgIC8vIHdvdWxkIGJl
IGEgV01MRWxlbWVudCwgYnV0IFdNTCBidWlsZHMgZG9uJ3QgdXNlIGFjY2Vzc2JpbGl0eSBmZWF0
dXJlcyBhdCBhbGwuCi0gICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbiogb3B0aW9u
ID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50Kj4obGlzdEl0ZW1zW2ldKSk7CisgICAgICAgIEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlv
biogb3B0aW9uID0gbWVudUxpc3RPcHRpb25BY2Nlc3NpYmlsaXR5T2JqZWN0KHRvSFRNTEVsZW1l
bnQobGlzdEl0ZW1zW2ldKSk7CiAgICAgICAgIGlmIChvcHRpb24pIHsKICAgICAgICAgICAgIG9w
dGlvbi0+c2V0UGFyZW50KHRoaXMpOwogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob3B0
aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTY5LDcgKzExNjksNyBAQCBzdGF0aWMgU3RyaW5nIGFjY2Vzc2li
bGVOYW1lRm9yTm9kZShOb2RlCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50Kj4obm9kZSktPnZhbHVlKCk7CiAKICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgp
KSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGFsdCA9IHRvSFRNTEVsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShhbHRBdHRy
KTsKICAgICAgICAgaWYgKCFhbHQuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGFsdDsK
ICAgICB9CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWNjZXNzCiAgICAgaWYgKGlzSW1hZ2UoKSB8fCBpc0lucHV0SW1hZ2UoKSB8fCBpc05h
dGl2ZUltYWdlKCkpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKTsK
ICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9k
ZSktPmdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYWx0ID0gdG9IVE1MRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAg
ICAgICAgICAgaWYgKGFsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogICAgICAgICAgICAgcmV0dXJuIGFsdDsKQEAgLTEzODQsMTEgKzEzODQsMTEgQEAgU3Ry
aW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFjY2VzcwogICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG93bmVyKS0+Z2V0QXR0cmli
dXRlKG5hbWVBdHRyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvd25lci0+aXNI
VE1MRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCo+KG93bmVyKS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdG9IVE1MRWxlbWVudChvd25lciktPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAg
ICAgIH0KICAgICAgICAgb3duZXIgPSBkb2N1bWVudC0+Ym9keSgpOwogICAgICAgICBpZiAob3du
ZXIgJiYgb3duZXItPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KG93bmVyKS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAg
ICAgICAgIHJldHVybiB0b0hUTUxFbGVtZW50KG93bmVyKS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRy
KTsKICAgICB9CiAKICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIHN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0X2Fj
Y2Vzc2libGVfZ2UKICAgICAgICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC0+cmVuZGVyZXIo
KS0+bm9kZSgpOwogICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRlIHJhdGhlciB0aGFuIGFsdFRleHQgU3Ry
aW5nIHNvIGFzIG5vdCB0byBmYWxsIGJhY2sgb24gdGl0bGUuCi0gICAgICAgICAgICBTdHJpbmcg
YWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6YWx0QXR0cik7CisgICAgICAgICAgICBTdHJpbmcgYWx0ID0gdG9IVE1MRWxlbWVudChu
b2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0cik7CiAgICAgICAgICAgICBpZiAo
IWFsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblN0cmluZyhhbHQp
OwogICAgICAgICB9CkBAIC0yMTIsNyArMjEyLDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJr
aXRfYWNjZXNzaWJsZV9nZQogCiAgICAgLy8gVGhlIHRpdGxlIGF0dHJpYnV0ZSBzaG91bGQgYmUg
cmVsaWFibHkgYXZhaWxhYmxlIGFzIHRoZSBvYmplY3QncyBkZXNjcmlwdG9uLgogICAgIC8vIFdl
IGRvIG5vdCB3YW50IHRvIGZhbGwgYmFjayBvbiBvdGhlciBhdHRyaWJ1dGVzIGluIGl0cyBhYnNl
bmNlLiBTZWUgYnVnIDI1NTI0LgotICAgIFN0cmluZyB0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4obm9kZSktPnRpdGxlKCk7CisgICAgU3RyaW5nIHRpdGxlID0gdG9IVE1MRWxlbWVu
dChub2RlKS0+dGl0bGUoKTsKICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHJldHVyblN0cmluZyh0aXRsZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NQmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01CaW5kaW5nLmNwcAkocmV2aXNpb24gNzgwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUJpbmRpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBncG9pbnRlciBjcmVhdGVX
cmFwcGVyKE5vZGUqIG5vZGUKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICBj
YXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkKLSAgICAgICAgICAgIHdyYXBwZWROb2RlID0gY3JlYXRlSFRNTEVsZW1lbnRXcmFwcGVyKHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSkpOworICAgICAgICAgICAgd3JhcHBlZE5vZGUg
PSBjcmVhdGVIVE1MRWxlbWVudFdyYXBwZXIodG9IVE1MRWxlbWVudChub2RlKSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHdyYXBwZWROb2RlID0gd3JhcEVsZW1lbnQoc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpKTsKICAgICAgICAgYnJlYWs7CkBAIC05Myw3ICs5Myw3IEBAIFdlYktp
dERPTUVsZW1lbnQqIGtpdChFbGVtZW50KiBlbGVtZW50KQogICAgIGdwb2ludGVyIHdyYXBwZWRF
bGVtZW50OwogCiAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgd3Jh
cHBlZEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxlbWVudFdyYXBwZXIoc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnQqPihlbGVtZW50KSk7CisgICAgICAgIHdyYXBwZWRFbGVtZW50ID0gY3JlYXRlSFRNTEVs
ZW1lbnRXcmFwcGVyKHRvSFRNTEVsZW1lbnQoZWxlbWVudCkpOwogICAgIGVsc2UKICAgICAgICAg
d3JhcHBlZEVsZW1lbnQgPSB3cmFwRWxlbWVudChlbGVtZW50KTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA3ODA3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgSlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEV4
ZWNTdGF0ZSogZXhlYwogCiAgICAgSlNOb2RlKiB3cmFwcGVyOyAgICAgICAgCiAgICAgaWYgKGVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdy
YXBwZXIoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1l
bnQpKTsKKyAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBwZXIoZXhlYywgZ2xvYmFs
T2JqZWN0LCB0b0hUTUxFbGVtZW50KGVsZW1lbnQpKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGVs
c2UgaWYgKGVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQogICAgICAgICB3cmFwcGVyID0gY3JlYXRl
SlNTVkdXcmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+
KGVsZW1lbnQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEZyYW1l
U2V0RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNzgwNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIGJvb2wgSlNIVE1MRnJhbWVTZXRF
bGVtZW50OjpjYW5HZXRJdGVtc0YKIEpTVmFsdWUgSlNIVE1MRnJhbWVTZXRFbGVtZW50OjpuYW1l
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lKQogewogICAgIEpTSFRNTEVsZW1lbnQqIHRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxKU0hUTUxFbGVtZW50Kj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKLSAgICBIVE1MRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4odGhpc09iai0+aW1wbCgpKTsK
KyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQodGhpc09iai0+aW1wbCgp
KTsKIAogICAgIE5vZGUqIGZyYW1lID0gZWxlbWVudC0+Y2hpbGRyZW4oKS0+bmFtZWRJdGVtKGlk
ZW50aWZpZXJUb0F0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUpKTsKICAgICBpZiAoRG9jdW1lbnQq
IGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihmcmFtZSktPmNvbnRlbnREb2N1
bWVudCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNO
b2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgY3JlYXRlV3JhcHAKICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVU
eXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CiAgICAgICAgICAgICBp
ZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHdyYXBwZXIgPSBjcmVh
dGVKU0hUTUxXcmFwcGVyKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnQqPihub2RlKSk7CisgICAgICAgICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTSFRNTFdyYXBw
ZXIoZXhlYywgZ2xvYmFsT2JqZWN0LCB0b0hUTUxFbGVtZW50KG5vZGUpKTsKICNpZiBFTkFCTEUo
U1ZHKQogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgd3JhcHBlciA9IGNyZWF0ZUpTU1ZHV3JhcHBlcihleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChFbGVtZW50KiBpbXBsCiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKICAgICBpZiAoaW1wbC0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGltcGwpLCBmb3JjZU5ld09iamVj
dCk7CisgICAgICAgIHJldHVybiB0b1Y4KHRvSFRNTEVsZW1lbnQoaW1wbCksIGZvcmNlTmV3T2Jq
ZWN0KTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChpbXBsLT5pc1NWR0VsZW1lbnQoKSkKICAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGltcGwpLCBmb3JjZU5l
d09iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDc4MDc0KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2
NywxMiArMTk2NywxMiBAQCBIVE1MRWxlbWVudCogRG9jdW1lbnQ6OmJvZHkoKSBjb25zdAogICAg
IE5vZGUqIGJvZHkgPSAwOwogICAgIGZvciAoTm9kZSogaSA9IGRlLT5maXJzdENoaWxkKCk7IGk7
IGkgPSBpLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKGZyYW1l
c2V0VGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGkp
OworICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQoaSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoaS0+aGFzVGFnTmFtZShib2R5VGFnKSAmJiAhYm9keSkKICAgICAgICAgICAgIGJvZHkg
PSBpOwogICAgIH0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihib2R5KTsK
KyAgICByZXR1cm4gdG9IVE1MRWxlbWVudChib2R5KTsKIH0KIAogdm9pZCBEb2N1bWVudDo6c2V0
Qm9keShQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBuZXdCb2R5LCBFeGNlcHRpb25Db2RlJiBlYykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFbGVtZW50OjpkZQogICAgIGZvciAoUmVmUHRy
PE5vZGU+IG5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dE5v
ZGUpIHsKICAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShodG1sVGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcp
KSB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4obm9kZS5nZXQoKSk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9
IHRvSFRNTEVsZW1lbnQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBOb2RlKiBmaXJzdENoaWxk
ID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgaWYgKGZpcnN0Q2hpbGQpCiAg
ICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNzksNyArMTA3OSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gUmFuZ2U6OmNyZWEKICAgICAvLyBMb2dpYyBmcm9tIGRlcHJlY2F0ZWRDcmVhdGVDb250
ZXh0dWFsRnJhZ21lbnQgc2hvdWxkIGp1c3QgYmUgbW92ZWQgaW50bwogICAgIC8vIHRoaXMgZnVu
Y3Rpb24uICBSYW5nZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IHNlbWFudGljcyBkbyBub3Qg
bWFrZQogICAgIC8vIHNlbnNlIGZvciB0aGUgcmVzdCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9u
IHRvIHVzZS4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpLT5kZXByZWNhdGVkQ3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KG1hcmt1cCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0g
dG9IVE1MRWxlbWVudChlbGVtZW50KS0+ZGVwcmVjYXRlZENyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChtYXJrdXApOwogICAgIGlmICghZnJhZ21lbnQpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9S
VEVEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAy
LDkgKzYwMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSgKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChibG9jay0+aXNIVE1MRWxlbWVudCgpKTsK
ICAgICAgICAgICAgIGlmIChibG9jay0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oYmxvY2su
Z2V0KCkpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVDU1NTdHlsZShzdHlsZSwgdG9IVE1MRWxl
bWVudChibG9jay5nZXQoKSkpOwogICAgICAgICAgICAgICAgIGlmICghbV9yZW1vdmVPbmx5KQot
ICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1N0eWxlKHN0eWxlQ2hhbmdlLCBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGJsb2NrLmdldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEJs
b2NrU3R5bGUoc3R5bGVDaGFuZ2UsIHRvSFRNTEVsZW1lbnQoYmxvY2suZ2V0KCkpKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5leHRQYXJhZ3JhcGhTdGFydC5pc09ycGhhbigp
KQpAQCAtNjkxLDcgKzY5MSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRp
dmVGb24KICAgICAgICAgICAgIC8vIE9ubHkgd29yayBvbiBmdWxseSBzZWxlY3RlZCBub2Rlcy4K
ICAgICAgICAgICAgIGlmICghbm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIGVsZW1lbnQgPSB0b0hUTUxFbGVt
ZW50KG5vZGUpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2Rl
LT5yZW5kZXJlcigpICYmIG5vZGUtPnBhcmVudE5vZGUoKSAhPSBsYXN0U3R5bGVkTm9kZSkgewog
ICAgICAgICAgICAgLy8gTGFzdCBzdHlsZWQgbm9kZSB3YXMgbm90IHBhcmVudCBub2RlIG9mIHRo
aXMgdGV4dCBub2RlLCBidXQgd2Ugd2lzaCB0byBzdHlsZSB0aGlzCiAgICAgICAgICAgICAvLyB0
ZXh0IG5vZGUuIFRvIG1ha2UgdGhpcyBwb3NzaWJsZSwgYWRkIGEgc3R5bGUgc3BhbiB0byBzdXJy
b3VuZCB0aGlzIHRleHQgbm9kZS4KQEAgLTc4NCw5ICs3ODQsOSBAQCBIVE1MRWxlbWVudCogQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jCiAgICAgICAgICYmIGdldElkZW50aWZpZXJWYWx1ZShj
b21wdXRlZFN0eWxlKGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkuZ2V0KCksIENTU1By
b3BlcnR5RGlyZWN0aW9uKSA9PSBhbGxvd2VkRGlyZWN0aW9uCiAgICAgICAgICYmIGhpZ2hlc3RB
bmNlc3RvcldpdGhVbmljb2RlQmlkaS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgIGlmICgh
bmV4dEhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSk7
CisgICAgICAgICAgICByZXR1cm4gdG9IVE1MRWxlbWVudChoaWdoZXN0QW5jZXN0b3JXaXRoVW5p
Y29kZUJpZGkpOwogCi0gICAgICAgIHVuc3BsaXRBbmNlc3RvciA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oaGlnaGVzdEFuY2VzdG9yV2l0aFVuaWNvZGVCaWRpKTsKKyAgICAgICAgdW5zcGxp
dEFuY2VzdG9yID0gdG9IVE1MRWxlbWVudChoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkp
OwogICAgICAgICBoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkgPSBuZXh0SGlnaGVzdEFu
Y2VzdG9yV2l0aFVuaWNvZGVCaWRpOwogICAgIH0KIApAQCAtMTA1NCw3ICsxMDU0LDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgaWYgKHBh
c3RFbmROb2RlICYmIHBhc3RFbmROb2RlLT5pc0Rlc2NlbmRhbnRPZihub2RlKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIC8vIEFkZCB0byB0aGlzIGVsZW1lbnQncyBpbmxp
bmUgc3R5bGUgYW5kIHNraXAgb3ZlciBpdHMgY29udGVudHMuCi0gICAgICAgICAgICBIVE1MRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7CisgICAgICAg
ICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAg
ICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGlubGluZVN0eWxlID0gZWxl
bWVudC0+Z2V0SW5saW5lU3R5bGVEZWNsKCktPmNvcHkoKTsKICAgICAgICAgICAgIGlubGluZVN0
eWxlLT5tZXJnZShzdHlsZSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQs
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CkBAIC0xMTI0LDcgKzExMjQsNyBA
QCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SCiAgICAgICAgIFJlZlB0
cjxOb2RlPiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAg
ICAgUmVmUHRyPE5vZGU+IG5leHRTaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAg
ICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICAgICAgcmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnQqPihub2RlLmdldCgpKSwgUmVtb3ZlQWx3YXlzKTsKKyAgICAgICAgcmVtb3ZlSW5s
aW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgdG9IVE1MRWxlbWVudChub2RlLmdldCgpKSwgUmVt
b3ZlQWx3YXlzKTsKICAgICAgICAgaWYgKCFub2RlLT5pbkRvY3VtZW50KCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBtaWdodCBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhcnQgYW5kIHRoZSBl
bmQgb2YgY3VycmVudCBzZWxlY3Rpb24gaGVyZSBidXQgbmVlZCBhIHRlc3QuCiAgICAgICAgICAg
ICBpZiAocnVuU3RhcnQgPT0gbm9kZSkKQEAgLTEzNTAsOCArMTM1MCw4IEBAIEhUTUxFbGVtZW50
KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEEKICAgICBOb2RlKiB1bnNwbGl0dGFibGVFbGVt
ZW50ID0gdW5zcGxpdHRhYmxlRWxlbWVudEZvclBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk9yQmVm
b3JlTm9kZShub2RlKSk7CiAKICAgICBmb3IgKE5vZGUgKm4gPSBub2RlOyBuOyBuID0gbi0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc2hvdWxkUmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihuKSkpCi0gICAgICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4p
OworICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIHNob3VsZFJlbW92ZUlubGluZVN0
eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHRvSFRNTEVsZW1lbnQobikpKQorICAgICAgICAgICAgcmVz
dWx0ID0gdG9IVE1MRWxlbWVudChuKTsKICAgICAgICAgLy8gU2hvdWxkIHN0b3AgYXQgdGhlIGVk
aXRhYmxlIHJvb3QgKGNhbm5vdCBjcm9zcyBlZGl0aW5nIGJvdW5kYXJ5KSBhbmQKICAgICAgICAg
Ly8gYWxzbyBzdG9wIGF0IHRoZSB1bnNwbGl0dGFibGUgZWxlbWVudCB0byBiZSBjb25zaXN0ZW50
IHdpdGggb3RoZXIgVUFzCiAgICAgICAgIGlmIChuID09IHVuc3BsaXR0YWJsZUVsZW1lbnQpCkBA
IC0xMzcwLDcgKzEzNzAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0
eWxlCiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG5ld0lubGluZVN0
eWxlID0gc3R5bGU7CiAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICBI
VE1MRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSk7Cisg
ICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKICAgICAg
ICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGV4aXN0aW5nSW5saW5lU3R5bGUgPSBlbGVt
ZW50LT5pbmxpbmVTdHlsZURlY2woKTsKIAogICAgICAgICAvLyBBdm9pZCBvdmVycmlkaW5nIGV4
aXN0aW5nIHN0eWxlcyBvZiBub2RlCkBAIC0xNDA2LDcgKzE0MDYsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgLy8gU2luY2UgYWRkSW5saW5lU3R5bGVJ
Zk5lZWRlZCBjYW4ndCBhZGQgc3R5bGVzIHRvIGJsb2NrLWZsb3cgcmVuZGVyIG9iamVjdHMsIGFk
ZCBzdHlsZSBhdHRyaWJ1dGUgaW5zdGVhZC4KICAgICAvLyBGSVhNRTogYXBwbHlJbmxpbmVTdHls
ZVRvUmFuZ2Ugc2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkLgogICAgIGlmICgobm9kZS0+cmVu
ZGVyZXIoKS0+aXNCbG9ja0Zsb3coKSB8fCBub2RlLT5jaGlsZE5vZGVDb3VudCgpKSAmJiBub2Rl
LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KG5vZGUpLCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5jc3NUZXh0
KCkpOworICAgICAgICBzZXROb2RlQXR0cmlidXRlKHRvSFRNTEVsZW1lbnQobm9kZSksIHN0eWxl
QXR0ciwgbmV3SW5saW5lU3R5bGUtPmNzc1RleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTE0NDIsNyArMTQ0Miw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnB1c2hEb3du
SW5saW5lU3QKICAgICAgICAgICAgIGVsZW1lbnRzVG9QdXNoRG93bi5hcHBlbmQoc3R5bGVkRWxl
bWVudCk7CiAgICAgICAgIH0KICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZVRvUHVzaERvd24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KCk7Ci0gICAgICAgIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50Kj4oY3VycmVudCksIFJlbW92ZUlmTmVlZGVkLCBzdHlsZVRvUHVzaERv
d24uZ2V0KCkpOworICAgICAgICByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCB0
b0hUTUxFbGVtZW50KGN1cnJlbnQpLCBSZW1vdmVJZk5lZWRlZCwgc3R5bGVUb1B1c2hEb3duLmdl
dCgpKTsKIAogICAgICAgICAvLyBUaGUgaW5uZXIgbG9vcCB3aWxsIGdvIHRocm91Z2ggY2hpbGRy
ZW4gb24gZWFjaCBsZXZlbAogICAgICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFnZ3JlZ2F0ZSBp
bmxpbmUgY2hpbGQgZWxlbWVudHMgdG9nZXRoZXIgc28gdGhhdCB3ZSBkb24ndCB3cmFwIGVhY2gg
Y2hpbGQgc2VwYXJhdGVseS4KQEAgLTE1MTQsNyArMTUxNCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgaWYgKG5v
ZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBub2RlRnVsbHlTZWxlY3RlZChub2RlLCBzdGFydCwgZW5k
KSkgewotICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxl
bSA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9
IGVsZW0tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKCk7CiAgICAgICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dCA9IGVsZW0tPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGVUb1B1c2hEb3duOwpAQCAtMTYz
OCw3ICsxNjM4LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkU3BsaXRUZXh0RQog
ICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkUmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxl
bWVudChzdHlsZSwgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVtZW50KSk7CisgICAgcmV0
dXJuIHNob3VsZFJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoc3R5bGUsIHRvSFRNTEVsZW1l
bnQoZWxlbWVudCkpOwogfQogCiBib29sIEFwcGx5U3R5bGVDb21tYW5kOjppc1ZhbGlkQ2FyZXRQ
b3NpdGlvbkluVGV4dE5vZGUoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQpAQCAtMTg0MSwxMCAr
MTg0MSwxMCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAgICAg
SFRNTEVsZW1lbnQqIHN0eWxlQ29udGFpbmVyID0gMDsKICAgICBmb3IgKE5vZGUqIGNvbnRhaW5l
ciA9IHN0YXJ0Tm9kZS5nZXQoKTsgY29udGFpbmVyICYmIHN0YXJ0Tm9kZSA9PSBlbmROb2RlOyBj
b250YWluZXIgPSBjb250YWluZXItPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICBpZiAoY29udGFp
bmVyLT5pc0hUTUxFbGVtZW50KCkgJiYgY29udGFpbmVyLT5oYXNUYWdOYW1lKGZvbnRUYWcpKQot
ICAgICAgICAgICAgZm9udENvbnRhaW5lciA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oY29u
dGFpbmVyKTsKKyAgICAgICAgICAgIGZvbnRDb250YWluZXIgPSB0b0hUTUxFbGVtZW50KGNvbnRh
aW5lcik7CiAgICAgICAgIGJvb2wgc3R5bGVDb250YWluZXJJc05vdFNwYW4gPSAhc3R5bGVDb250
YWluZXIgfHwgIXN0eWxlQ29udGFpbmVyLT5oYXNUYWdOYW1lKHNwYW5UYWcpOwogICAgICAgICBp
ZiAoY29udGFpbmVyLT5pc0hUTUxFbGVtZW50KCkgJiYgKGNvbnRhaW5lci0+aGFzVGFnTmFtZShz
cGFuVGFnKSB8fCAoc3R5bGVDb250YWluZXJJc05vdFNwYW4gJiYgY29udGFpbmVyLT5jaGlsZE5v
ZGVDb3VudCgpKSkpCi0gICAgICAgICAgICBzdHlsZUNvbnRhaW5lciA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4oY29udGFpbmVyKTsKKyAgICAgICAgICAgIHN0eWxlQ29udGFpbmVyID0gdG9I
VE1MRWxlbWVudChjb250YWluZXIpOwogICAgICAgICBpZiAoIWNvbnRhaW5lci0+Zmlyc3RDaGls
ZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IGNvbnRhaW5lci0+
Zmlyc3RDaGlsZCgpOwpAQCAtMTg3NCw3ICsxODc0LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6YWRkSW5saW5lU3R5bGVJZgogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmNzc1N0eWxlKCkubGVu
Z3RoKCkpIHsKICAgICAgICAgaWYgKHN0eWxlQ29udGFpbmVyKSB7Ci0gICAgICAgICAgICBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZXhpc3RpbmdTdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50Kj4oc3R5bGVDb250YWluZXIpLT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAg
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBleGlzdGluZ1N0eWxlID0gdG9IVE1MRWxlbWVu
dChzdHlsZUNvbnRhaW5lciktPmlubGluZVN0eWxlRGVjbCgpOwogICAgICAgICAgICAgaWYgKGV4
aXN0aW5nU3R5bGUpCiAgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNvbnRh
aW5lciwgc3R5bGVBdHRyLCBleGlzdGluZ1N0eWxlLT5jc3NUZXh0KCkgKyBzdHlsZUNoYW5nZS5j
c3NTdHlsZSgpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gNzgwNzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgc3RhdGljIEhUTUxFbGVtZW50KiBlbmNsb3Np
bmdEZWxldGFibGVFbAogICAgICAgICByZXR1cm4gMDsKIAogICAgIEFTU0VSVChlbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVs
ZW1lbnQpOworICAgIHJldHVybiB0b0hUTUxFbGVtZW50KGVsZW1lbnQpOwogfQogCiB2b2lkIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQpAQCAtMjYzLDcgKzI2Myw3IEBAIHZvaWQgRGVs
ZXRlQnV0dG9uQ29udHJvbGxlcjo6c2hvdyhIVE1MRWwKICAgICBpZiAoIWVuYWJsZWQoKSB8fCAh
ZWxlbWVudCB8fCAhZWxlbWVudC0+aW5Eb2N1bWVudCgpIHx8ICFpc0RlbGV0YWJsZUVsZW1lbnQo
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9mcmFtZS0+ZWRpdG9yKCkt
PnNob3VsZFNob3dEZWxldGVJbnRlcmZhY2Uoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihlbGVt
ZW50KSkpCisgICAgaWYgKCFtX2ZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkU2hvd0RlbGV0ZUludGVy
ZmFjZSh0b0hUTUxFbGVtZW50KGVsZW1lbnQpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
d2UgcmVseSBvbiB0aGUgcmVuZGVyZXIgaGF2aW5nIGN1cnJlbnQgaW5mb3JtYXRpb24sIHNvIHdl
IHNob3VsZCB1cGRhdGUgdGhlIGxheW91dCBpZiBuZWVkZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAJKHJldmlzaW9uIDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTU4LDcgKzE1NTgsNyBAQCB2b2lkIEVkaXRv
cjo6c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpCiAgICAgaWYgKGZvY3VzZWROb2RlICYmIChm
b2N1c2VkTm9kZS0+aGFzVGFnTmFtZSh0ZXh0YXJlYVRhZykgfHwgKGZvY3VzZWROb2RlLT5oYXNU
YWdOYW1lKGlucHV0VGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZm9jdXNl
ZE5vZGUpLT5pc1RleHRGaWVsZCgpKSkpIHsKICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBOYXR1
cmFsV3JpdGluZ0RpcmVjdGlvbikKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQqPihmb2N1c2VkTm9kZSktPnNldEF0dHJpYnV0ZShkaXJBdHRyLCBk
aXJlY3Rpb24gPT0gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uID8gImx0ciIgOiAicnRsIik7
CisgICAgICAgIHRvSFRNTEVsZW1lbnQoZm9jdXNlZE5vZGUpLT5zZXRBdHRyaWJ1dGUoZGlyQXR0
ciwgZGlyZWN0aW9uID09IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA/ICJsdHIiIDogInJ0
bCIpOwogICAgICAgICBmcmFtZSgpLT5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuCiAgICAgaWYg
KCFsaXN0IHx8ICFsaXN0LT5uZXh0RWxlbWVudFNpYmxpbmcoKSB8fCAhbGlzdC0+bmV4dEVsZW1l
bnRTaWJsaW5nKCktPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOwogCi0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBuZXh0TGlzdCA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4obGlzdC0+bmV4dEVsZW1lbnRTaWJsaW5nKCkpOworICAgIFJlZlB0cjxIVE1M
RWxlbWVudD4gbmV4dExpc3QgPSB0b0hUTUxFbGVtZW50KGxpc3QtPm5leHRFbGVtZW50U2libGlu
ZygpKTsKICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhsaXN0LmdldCgpLCBuZXh0TGlzdC5nZXQoKSkp
IHsKICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhsaXN0LCBuZXh0TGlzdCk7CiAgICAg
ICAgIHJldHVybiBuZXh0TGlzdC5yZWxlYXNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzgwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDc2LDcgKzQ3Niw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Om5lZ2F0ZVN0eWwKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbV9maXJzdE5v
ZGVJbnNlcnRlZC5nZXQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkg
ewogICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzUzNzE1MzY+IFN0eWxlIHJ1bGVz
IHRoYXQgbWF0Y2ggcGFzdGVkIGNvbnRlbnQgY2FuIGNoYW5nZSBpdCdzIGFwcGVhcmFuY2UKICAg
ICAgICAgaWYgKGlzU3R5bGVTcGFuKG5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICBIVE1MRWxl
bWVudCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZS5nZXQoKSk7CisgICAgICAg
ICAgICBIVE1MRWxlbWVudCogZSA9IHRvSFRNTEVsZW1lbnQobm9kZS5nZXQoKSk7CiAgICAgICAg
ICAgICAvLyBUaGVyZSBhcmUgb3RoZXIgc3R5bGVzIHRoYXQgc3R5bGUgcnVsZXMgY2FuIGdpdmUg
dG8gc3R5bGUgc3BhbnMsCiAgICAgICAgICAgICAvLyBidXQgdGhlc2UgYXJlIHRoZSB0d28gaW1w
b3J0YW50IG9uZXMgYmVjYXVzZSB0aGV5J2xsIHByZXZlbnQKICAgICAgICAgICAgIC8vIGluc2Vy
dGVkIGNvbnRlbnQgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIHJpZ2h0IHBhcmFncmFwaC4KQEAgLTYy
MCw3ICs2MjAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAg
ICAgaWYgKCFzb3VyY2VEb2N1bWVudFN0eWxlU3BhbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gc291cmNlRG9jdW1lbnRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6
Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oc291cmNlRG9jdW1lbnRTdHlsZVNwYW4p
LT5nZXRJbmxpbmVTdHlsZURlY2woKSk7CisgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc291cmNl
RG9jdW1lbnRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHRvSFRNTEVsZW1lbnQoc291cmNl
RG9jdW1lbnRTdHlsZVNwYW4pLT5nZXRJbmxpbmVTdHlsZURlY2woKSk7CiAgICAgQ29udGFpbmVy
Tm9kZSogY29udGV4dCA9IHNvdXJjZURvY3VtZW50U3R5bGVTcGFuLT5wYXJlbnROb2RlKCk7CiAK
ICAgICAvLyBJZiBNYWlsIHdyYXBzIHRoZSBmcmFnbWVudCB3aXRoIGEgUGFzdGUgYXMgUXVvdGF0
aW9uIGJsb2NrcXVvdGUsIG9yIGlmIHlvdSdyZSBwYXN0aW5nIGludG8gYSBxdW90ZWQgcmVnaW9u
LApAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRs
ZVN0eWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBjb3BpZWRSYW5nZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihjb3BpZWRSYW5nZVN0eWxlU3BhbiktPmdldElubGluZVN0eWxlRGVjbCgp
KTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBjb3BpZWRSYW5nZVN0eWxlID0gRWRpdGluZ1N0
eWxlOjpjcmVhdGUodG9IVE1MRWxlbWVudChjb3BpZWRSYW5nZVN0eWxlU3BhbiktPmdldElubGlu
ZVN0eWxlRGVjbCgpKTsKIAogICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHB1dCBzb3VyY2VEb2N1bWVu
dFN0eWxlU3BhbidzIG5vbi1yZWR1bmRhbnQgc3R5bGVzIG9udG8gY29waWVkUmFuZ2VTdHlsZVNw
YW4sCiAgICAgLy8gYXMgbG9uZyBhcyB0aGV5IGFyZW4ndCBvdmVycmlkZGVuIGJ5IG9uZXMgb24g
Y29waWVkUmFuZ2VTdHlsZVNwYW4uCkBAIC02OTYsNyArNjk2LDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Y29weVN0eWxlVAogICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBw
dXQgYSBzcGFuIHRhZyBhcm91bmQgdGhlIGNoaWxkIG5vZGUuCiAgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gbmV3Tm9kZSA9IHBhcmVudE5vZGUtPmNsb25lTm9kZShmYWxzZSk7CiAgICAgICAgICAg
ICBBU1NFUlQobmV3Tm9kZS0+aGFzVGFnTmFtZShzcGFuVGFnKSk7Ci0gICAgICAgICAgICBIVE1M
RWxlbWVudCogbmV3U3BhbiA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obmV3Tm9kZS5nZXQo
KSk7CisgICAgICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbiA9IHRvSFRNTEVsZW1lbnQobmV3
Tm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKG5ld1NwYW4sIHN0eWxl
QXR0ciwgcGFyZW50U3R5bGUtPmNzc1RleHQoKSk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0
ZXIobmV3U3BhbiwgY2hpbGROb2RlKTsKICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwpAQCAtNzA3LDcgKzcwNyw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNvcHlT
dHlsZVQKICAgICAgICAgICAgIC8vIENvcHkgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhbmQgbWVyZ2Ug
dGhlbSBpbnRvIHRoZSBjaGlsZCBub2RlLiAgV2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZQogICAg
ICAgICAgICAgLy8gZXhpc3Rpbmcgc3R5bGVzLCBzbyBkb24ndCBjbG9iYmVyIG9uIG1lcmdlLgog
ICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBuZXdTdHlsZSA9
IHBhcmVudFN0eWxlLT5jb3B5KCk7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudCogY2hpbGRFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihjaGlsZE5vZGUpOworICAgICAgICAgICAg
SFRNTEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY2hpbGROb2RlKTsKICAg
ICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gZXhpc3RpbmdTdHls
ZXMgPSBjaGlsZEVsZW1lbnQtPmdldElubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CiAgICAgICAg
ICAgICBleGlzdGluZ1N0eWxlcy0+bWVyZ2UobmV3U3R5bGUuZ2V0KCksIGZhbHNlKTsKICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoY2hpbGRFbGVtZW50LCBzdHlsZUF0dHIsIGV4aXN0aW5n
U3R5bGVzLT5jc3NUZXh0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rp
b25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MDAs
NyArMTcwMCw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKE5vZGUKICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihub2RlKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBpZiAobm9kZS0+aXNIVE1M
RWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkp
CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
KG5vZGUpLT5mb3JtKCk7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZyYW1lVGFnKSB8
fCBub2RlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpIHsKICAgICAgICAgICAgIE5vZGUqIGNoaWxk
RG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KG5vZGUpLT5jb250
ZW50RG9jdW1lbnQoKTsKQEAgLTE3MjQsNyArMTcyNCw3IEBAIEhUTUxGb3JtRWxlbWVudCogU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6Y3UKICAgICBmb3IgKG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShmb3Jt
VGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihu
b2RlKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICBpZiAo
bm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRy
b2xFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250
cm9sRWxlbWVudCo+KG5vZGUpLT5mb3JtKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYyLDcgKzY2Miw3
IEBAIEhUTUxFbGVtZW50KiBlbmNsb3NpbmdMaXN0KE5vZGUqIG5vZGUpCiAgICAgCiAgICAgZm9y
IChDb250YWluZXJOb2RlKiBuID0gbm9kZS0+cGFyZW50Tm9kZSgpOyBuOyBuID0gbi0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKHVsVGFnKSB8fCBuLT5oYXNUYWdO
YW1lKG9sVGFnKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG4pOworICAgICAgICAgICAgcmV0dXJuIHRvSFRNTEVsZW1lbnQobik7CiAgICAgICAgIGlmIChu
ID09IHJvb3QpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC02NzAsNyArNjcwLDcg
QEAgSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3QoTm9kZSogbm9kZSkKICAgICByZXR1cm4gMDsK
IH0KIAotSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3RDaGlsZChOb2RlICpub2RlKQorTm9kZSog
ZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUgKm5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTY4MSw3ICs2ODEsNyBAQCBIVE1MRWxlbWVudCogZW5jbG9zaW5nTGlz
dENoaWxkKE5vZGUgKm5vCiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgaW5hcHByb3By
aWF0ZWx5IG5hbWVkIGlmIGl0IHN0YXJ0cyB3aXRoIG5vZGUgaW5zdGVhZCBvZiBub2RlLT5wYXJl
bnROb2RlKCkKICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4tPnBhcmVudE5vZGUoKTsg
biA9IG4tPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShsaVRhZykg
fHwgaXNMaXN0RWxlbWVudChuLT5wYXJlbnROb2RlKCkpKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obik7CisgICAgICAgICAgICByZXR1cm4gbjsKICAgICAg
ICAgaWYgKG4gPT0gcm9vdCB8fCBpc1RhYmxlQ2VsbChuKSkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgIH0KQEAgLTY5NCw3ICs2OTQsNyBAQCBzdGF0aWMgSFRNTEVsZW1lbnQqIGVtYmVkZGVk
U3VibGlzdChOb2RlCiAgICAgLy8gQ2hlY2sgdGhlIERPTSBzbyB0aGF0IHdlJ2xsIGZpbmQgY29s
bGFwc2VkIHN1Ymxpc3RzIHdpdGhvdXQgcmVuZGVyZXJzLgogICAgIGZvciAoTm9kZSogbiA9IGxp
c3RJdGVtLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAgICAg
IGlmIChpc0xpc3RFbGVtZW50KG4pKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50Kj4obik7CisgICAgICAgICAgICByZXR1cm4gdG9IVE1MRWxlbWVudChuKTsKICAg
ICB9CiAgICAgCiAgICAgcmV0dXJuIDA7CkBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIE5vZGUq
IGFwcGVuZGVkU3VibGlzdChOb2RlKiBsaXN0SQogICAgIC8vIENoZWNrIHRoZSBET00gc28gdGhh
dCB3ZSdsbCBmaW5kIGNvbGxhcHNlZCBzdWJsaXN0cyB3aXRob3V0IHJlbmRlcmVycy4KICAgICBm
b3IgKE5vZGUqIG4gPSBsaXN0SXRlbS0+bmV4dFNpYmxpbmcoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgaWYgKGlzTGlzdEVsZW1lbnQobikpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihuKTsKKyAgICAgICAgICAgIHJldHVybiB0b0hU
TUxFbGVtZW50KG4pOwogICAgICAgICBpZiAoaXNMaXN0SXRlbShsaXN0SXRlbSkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5oCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW4KIAogSFRNTEVsZW1lbnQqIGVuY2xvc2luZ0xpc3QoTm9k
ZSopOwogSFRNTEVsZW1lbnQqIG91dGVybW9zdEVuY2xvc2luZ0xpc3QoTm9kZSosIE5vZGUqIHJv
b3RMaXN0ID0gMCk7Ci1IVE1MRWxlbWVudCogZW5jbG9zaW5nTGlzdENoaWxkKE5vZGUqKTsKK05v
ZGUqIGVuY2xvc2luZ0xpc3RDaGlsZChOb2RlKik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8v
IEVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDc4MDc0
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjgsNyArMjY4LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxl
bQogICAgIH0KIAogICAgIGlmIChlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgKHNob3VsZEFu
bm90YXRlKCkgfHwgYWRkRGlzcGxheUlubGluZSkpIHsKLSAgICAgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4oZWxl
bWVudCktPmdldElubGluZVN0eWxlRGVjbCgpLT5jb3B5KCk7CisgICAgICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSB0b0hUTUxFbGVtZW50KGVsZW1lbnQpLT5n
ZXRJbmxpbmVTdHlsZURlY2woKS0+Y29weSgpOwogICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUo
KSkgewogICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHls
ZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGNvbnN0
X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpKTsKICAgICAgICAgICAgIC8vIFN0eWxlcyBmcm9tIHRo
ZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24sIGhlbGQgaW4gdGhlIHZhcmlhYmxlICJzdHlsZSIs
IHRha2UgcHJlY2VkZW5jZSAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24u
Y3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNyArMjY0LDcgQEAgYm9vbCBIVE1MQ29sbGVj
dGlvbjo6Y2hlY2tGb3JOYW1lTWF0Y2goRQogICAgIGlmICghZWxlbWVudC0+aXNIVE1MRWxlbWVu
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgSFRNTEVsZW1lbnQqIGUgPSBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpOworICAgIEhUTUxFbGVtZW50KiBlID0g
dG9IVE1MRWxlbWVudChlbGVtZW50KTsKICAgICBpZiAoIWNoZWNrTmFtZSkKICAgICAgICAgcmV0
dXJuIGUtPmdldElkQXR0cmlidXRlKCkgPT0gbmFtZTsKIApAQCAtMzE4LDcgKzMxOCw3IEBAIHZv
aWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSgpIGMKICAgICBmb3IgKEVsZW1lbnQq
IGVsZW1lbnQgPSBpdGVtQWZ0ZXIoMCk7IGVsZW1lbnQ7IGVsZW1lbnQgPSBpdGVtQWZ0ZXIoZWxl
bWVudCkpIHsKICAgICAgICAgaWYgKCFlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICBIVE1MRWxlbWVudCogZSA9IHRvSFRNTEVsZW1l
bnQoZWxlbWVudCk7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+
Z2V0SWRBdHRyaWJ1dGUoKTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZh
bCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlz
RW1wdHkoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9u
IDc4MDc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpzZXRPdXRlckhUTUwo
Y29uc3QgU3RyCiAgICAgICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIEhUTUxFbGVtZW50KiBwYXJlbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KHApOworICAgIEhUTUxFbGVtZW50KiBwYXJlbnQgPSB0b0hUTUxFbGVt
ZW50KHApOwogCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tU291cmNlKGh0bWwsIHBhcmVudCwgZWMpOwogICAgIGlmIChmcmFnbWVudCkg
ewpAQCAtODUyLDcgKzg1Miw3IEBAIEhUTUxGb3JtRWxlbWVudCogSFRNTEVsZW1lbnQ6OnNoYWRv
d0FuY2UKIAogICAgIGlmICghYW5jZXN0b3JOb2RlLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIEhUTUxFbGVtZW50KiBhbmNlc3RvckhUTUwgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudCo+KGFuY2VzdG9yTm9kZSk7CisgICAgSFRNTEVsZW1lbnQqIGFuY2VzdG9ySFRN
TCA9IHRvSFRNTEVsZW1lbnQoYW5jZXN0b3JOb2RlKTsKICAgICBpZiAoIWFuY2VzdG9ySFRNTCkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGFuY2VzdG9ySFRNTC0+Zm9ybSgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gNzgwNzQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2Miw3ICs0NjIsNyBAQCB1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVt
ZW50SW5kCiAgICAgICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAg
ICAgICAgICAgICYmIChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRm9ybUNvbnRyb2xF
bGVtZW50KCkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUob2Jq
ZWN0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
Pihub2RlKS0+Zm9ybSgpID09IHRoaXMpCisgICAgICAgICAgICAgICAgICAgICYmIHRvSFRNTEVs
ZW1lbnQobm9kZSktPmZvcm0oKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgICsraTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsNyArNDY0LDcgQEAgdm9pZCBIVE1MU2Vs
ZWN0RWxlbWVudDo6c2V0T3B0aW9uKHVuc2lnbgogICAgICAgICBzZXRMZW5ndGgoaW5kZXgsIGVj
KTsKICAgICAgICAgLy8gcmVwbGFjZSBhbiBleGlzdGluZyBlbnRyeSA/CiAgICAgfSBlbHNlIGlm
IChkaWZmIDwgMCkgewotICAgICAgICBiZWZvcmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG9wdGlvbnMoKS0+aXRlbShpbmRleCsxKSk7CisgICAgICAgIGJlZm9yZSA9IHRvSFRNTEVsZW1l
bnQob3B0aW9ucygpLT5pdGVtKGluZGV4KzEpKTsKICAgICAgICAgcmVtb3ZlKGluZGV4KTsKICAg
ICB9CiAgICAgLy8gZmluYWxseSBhZGQgdGhlIG5ldyBlbGVtZW50CkBAIC00ODYsNyArNDg2LDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0TGVuZ3RoKHVuc2lnbgogICAgICAgICBkbyB7
CiAgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gb3B0aW9uID0gZG9jdW1lbnQoKS0+Y3JlYXRl
RWxlbWVudChvcHRpb25UYWcsIGZhbHNlKTsKICAgICAgICAgICAgIEFTU0VSVChvcHRpb24pOwot
ICAgICAgICAgICAgYWRkKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4ob3B0aW9uLmdldCgpKSwg
MCwgZWMpOworICAgICAgICAgICAgYWRkKHRvSFRNTEVsZW1lbnQob3B0aW9uLmdldCgpKSwgMCwg
ZWMpOwogICAgICAgICAgICAgaWYgKGVjKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9IHdoaWxlICgrK2RpZmYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzNyw3
ICs1MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwobG9uCiAgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgICpvdXRlckhUTUwgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpLT5vdXRlckhU
TUwoKTsKKyAgICAqb3V0ZXJIVE1MID0gdG9IVE1MRWxlbWVudChub2RlKS0+b3V0ZXJIVE1MKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChsb25nIG5vZGVJZCwg
Y29uc3QgU3RyaW5nJiBvdXRlckhUTUwsIGxvbmcqIG5ld0lkKQpAQCAtNTUyLDcgKzU1Miw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChsb24KICAgICBOb2RlKiBwcmV2
aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogCi0gICAgSFRNTEVsZW1lbnQqIGh0
bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKKyAgICBIVE1MRWxl
bWVudCogaHRtbEVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIGh0bWxFbGVtZW50LT5zZXRPdXRlckhUTUwob3V0ZXJIVE1MLCBlYyk7
CiAgICAgaWYgKGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2
aXNpb24gNzgwNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NDgsNyArMTU0OCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVNb3VzZU1vdmVFdmVudCgKICAgICAgICAgICAgICAgICAvLyBlZmZlY3Qgb24gcGx1Z2lucyAo
d2hpY2ggbWF0Y2hlcyBGaXJlZm94KS4KICAgICAgICAgICAgICAgICBib29sIG92ZXJQbHVnaW5F
bGVtZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKG1ldi50YXJnZXROb2RlKCkgJiYg
bWV2LnRhcmdldE5vZGUoKS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEhUTUxFbGVtZW50KiBlbCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obWV2LnRhcmdldE5v
ZGUoKSk7CisgICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbCA9IHRvSFRNTEVsZW1l
bnQobWV2LnRhcmdldE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIG92ZXJQbHVnaW5FbGVt
ZW50ID0gZWwtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fCBlbC0+aGFzVGFnTmFtZShvYmplY3RU
YWcpIHx8IGVsLT5oYXNUYWdOYW1lKGVtYmVkVGFnKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKCFvdmVyUGx1Z2luRWxlbWVudCkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1ldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTWV0ZXIuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3
ICsxMDcsNyBAQCBSZW5kZXJNZXRlcjo6flJlbmRlck1ldGVyKCkKIAogUGFzc1JlZlB0cjxNZXRl
clBhcnRFbGVtZW50PiBSZW5kZXJNZXRlcjo6Y3JlYXRlUGFydChQc2V1ZG9JZCBwc2V1ZG9JZCkK
IHsKLSAgICBSZWZQdHI8TWV0ZXJQYXJ0RWxlbWVudD4gZWxlbWVudCA9IE1ldGVyUGFydEVsZW1l
bnQ6OmNyZWF0ZUZvclBhcnQoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKCkpLCBwc2V1
ZG9JZCk7CisgICAgUmVmUHRyPE1ldGVyUGFydEVsZW1lbnQ+IGVsZW1lbnQgPSBNZXRlclBhcnRF
bGVtZW50OjpjcmVhdGVGb3JQYXJ0KHRvSFRNTEVsZW1lbnQobm9kZSgpKSwgcHNldWRvSWQpOwog
ICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICBhZGRDaGlsZChlbGVtZW50LT5y
ZW5kZXJlcigpKTsKICAgICByZXR1cm4gZWxlbWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNzgwNzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y3JlYXRlU3Vi
dHJlZUlmTgogICAgICAgICAvLyBGb3Igbm9uLXNlYXJjaCBmaWVsZHMsIHRoZXJlIGlzIG5vIGlu
dGVybWVkaWF0ZSBpbm5lckJsb2NrIGFzIHRoZSBzaGFkb3cgbm9kZS4KICAgICAgICAgLy8gbV9p
bm5lclRleHQgd2lsbCBiZSB0aGUgc2hhZG93IG5vZGUgaW4gdGhhdCBjYXNlLiAgICAgICAgCiAg
ICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IGlubmVyQmxvY2sgPyBpbm5lckJsb2Nr
LT5yZW5kZXJlcigpLT5zdHlsZSgpIDogc3R5bGUoKTsKLSAgICAgICAgbV9pbm5lclRleHQgPSBU
ZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCBpbm5lckJsb2Nr
ID8gMCA6IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgICAgIG1faW5u
ZXJUZXh0ID0gVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwg
aW5uZXJCbG9jayA/IDAgOiB0b0hUTUxFbGVtZW50KG5vZGUoKSkpOwogICAgICAgICBtX2lubmVy
VGV4dC0+YXR0YWNoSW5uZXJFbGVtZW50KGlubmVyQmxvY2sgPyBpbm5lckJsb2NrIDogbm9kZSgp
LCBjcmVhdGVJbm5lclRleHRTdHlsZShwYXJlbnRTdHlsZSksIHJlbmRlckFyZW5hKCkpOwogICAg
IH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA3ODA3NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MTEsMTcgKzYxMSwxNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6Y3JlYXRlCiAjaWYgRU5BQkxFKElOUFVUX1NQRUVDSCkKICAgICAgICAgaWYgKGlucHV0
RWxlbWVudCgpLT5pc1NwZWVjaEVuYWJsZWQoKSAmJiAhbV9zcGVlY2hCdXR0b24pIHsKICAgICAg
ICAgICAgIC8vIENyZWF0ZSB0aGUgc3BlZWNoIGJ1dHRvbiBlbGVtZW50LgotICAgICAgICAgICAg
bV9zcGVlY2hCdXR0b24gPSBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6Y3JlYXRlKHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSgpKSk7CisgICAgICAgICAgICBtX3NwZWVjaEJ1
dHRvbiA9IElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpjcmVhdGUodG9IVE1MRWxlbWVu
dChub2RlKCkpKTsKICAgICAgICAgICAgIG1fc3BlZWNoQnV0dG9uLT5hdHRhY2hJbm5lckVsZW1l
bnQobm9kZSgpLCBjcmVhdGVTcGVlY2hCdXR0b25TdHlsZSgpLCByZW5kZXJBcmVuYSgpKTsKICAg
ICAgICAgfQogI2VuZGlmCiAgICAgICAgIGJvb2wgaGFzU3BpbkJ1dHRvbiA9IGlucHV0RWxlbWVu
dCgpLT5oYXNTcGluQnV0dG9uKCk7CiAgICAgICAgIGlmIChoYXNTcGluQnV0dG9uICYmICFtX2lu
bmVyU3BpbkJ1dHRvbikgewotICAgICAgICAgICAgbV9pbm5lclNwaW5CdXR0b24gPSBTcGluQnV0
dG9uRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obm9kZSgpKSk7Cisg
ICAgICAgICAgICBtX2lubmVyU3BpbkJ1dHRvbiA9IFNwaW5CdXR0b25FbGVtZW50OjpjcmVhdGUo
dG9IVE1MRWxlbWVudChub2RlKCkpKTsKICAgICAgICAgICAgIG1faW5uZXJTcGluQnV0dG9uLT5h
dHRhY2hJbm5lckVsZW1lbnQobm9kZSgpLCBjcmVhdGVJbm5lclNwaW5CdXR0b25TdHlsZSgpLCBy
ZW5kZXJBcmVuYSgpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaGFzU3BpbkJ1dHRvbiAmJiAh
bV9vdXRlclNwaW5CdXR0b24pIHsKLSAgICAgICAgICAgIG1fb3V0ZXJTcGluQnV0dG9uID0gU3Bp
bkJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUoKSkp
OworICAgICAgICAgICAgbV9vdXRlclNwaW5CdXR0b24gPSBTcGluQnV0dG9uRWxlbWVudDo6Y3Jl
YXRlKHRvSFRNTEVsZW1lbnQobm9kZSgpKSk7CiAgICAgICAgICAgICBtX291dGVyU3BpbkJ1dHRv
bi0+YXR0YWNoSW5uZXJFbGVtZW50KG5vZGUoKSwgY3JlYXRlT3V0ZXJTcGluQnV0dG9uU3R5bGUo
KSwgcmVuZGVyQXJlbmEoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtNjI5LDE4
ICs2MjksMTggQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZQogCiAg
ICAgaWYgKCFtX2lubmVyQmxvY2spIHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBpbm5lciBibG9j
ayBlbGVtZW50Ci0gICAgICAgIG1faW5uZXJCbG9jayA9IFRleHRDb250cm9sSW5uZXJFbGVtZW50
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICAgICAgbV9p
bm5lckJsb2NrID0gVGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OmNyZWF0ZSh0b0hUTUxFbGVtZW50
KG5vZGUoKSkpOwogICAgICAgICBtX2lubmVyQmxvY2stPmF0dGFjaElubmVyRWxlbWVudChub2Rl
KCksIGNyZWF0ZUlubmVyQmxvY2tTdHlsZShzdHlsZSgpKSwgcmVuZGVyQXJlbmEoKSk7CiAgICAg
fQogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgaWYgKGlucHV0RWxlbWVudCgpLT5pc1Nw
ZWVjaEVuYWJsZWQoKSAmJiAhbV9zcGVlY2hCdXR0b24pIHsKICAgICAgICAgLy8gQ3JlYXRlIHRo
ZSBzcGVlY2ggYnV0dG9uIGVsZW1lbnQuCi0gICAgICAgIG1fc3BlZWNoQnV0dG9uID0gSW5wdXRG
aWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+
KG5vZGUoKSkpOworICAgICAgICBtX3NwZWVjaEJ1dHRvbiA9IElucHV0RmllbGRTcGVlY2hCdXR0
b25FbGVtZW50OjpjcmVhdGUodG9IVE1MRWxlbWVudChub2RlKCkpKTsKICAgICAgICAgbV9zcGVl
Y2hCdXR0b24tPmF0dGFjaElubmVyRWxlbWVudChub2RlKCksIGNyZWF0ZVNwZWVjaEJ1dHRvblN0
eWxlKCksIHJlbmRlckFyZW5hKCkpOwogICAgIH0KICNlbmRpZgogICAgIGlmIChpbnB1dEVsZW1l
bnQoKS0+aGFzU3BpbkJ1dHRvbigpICYmICFtX291dGVyU3BpbkJ1dHRvbikgewotICAgICAgICBt
X291dGVyU3BpbkJ1dHRvbiA9IFNwaW5CdXR0b25FbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnQqPihub2RlKCkpKTsKKyAgICAgICAgbV9vdXRlclNwaW5CdXR0b24gPSBTcGlu
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKHRvSFRNTEVsZW1lbnQobm9kZSgpKSk7CiAgICAgICAgIG1f
b3V0ZXJTcGluQnV0dG9uLT5hdHRhY2hJbm5lckVsZW1lbnQobm9kZSgpLCBjcmVhdGVPdXRlclNw
aW5CdXR0b25TdHlsZSgpLCByZW5kZXJBcmVuYSgpKTsKICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>