<?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>174921</bug_id>
          
          <creation_ts>2017-07-27 19:44:18 -0700</creation_ts>
          <short_desc>Put the ScopedArgumentsTable&apos;s ScopeOffset array in some gigacage</short_desc>
          <delta_ts>2017-08-14 11:34:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174917</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>buildbot</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1332840</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-07-27 19:44:18 -0700</bug_when>
    <thetext>There&apos;s an argument to be made in favor of any of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338211</commentid>
    <comment_count>1</comment_count>
      <attachid>318003</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-12 22:22:45 -0700</bug_when>
    <thetext>Created attachment 318003
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338213</commentid>
    <comment_count>2</comment_count>
      <attachid>318004</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-12 23:02:57 -0700</bug_when>
    <thetext>Created attachment 318004
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338215</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-12 23:06:12 -0700</bug_when>
    <thetext>Attachment 318004 did not pass style-queue:


ERROR: Source/WTF/wtf/CagedUniquePtr.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:135:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338248</commentid>
    <comment_count>4</comment_count>
      <attachid>318012</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-13 11:47:50 -0700</bug_when>
    <thetext>Created attachment 318012
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338249</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-13 11:50:31 -0700</bug_when>
    <thetext>Attachment 318012 did not pass style-queue:


ERROR: Source/WTF/wtf/CagedUniquePtr.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:135:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338260</commentid>
    <comment_count>6</comment_count>
      <attachid>318016</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-13 15:48:46 -0700</bug_when>
    <thetext>Created attachment 318016
the patch

Fix windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338261</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-13 15:51:12 -0700</bug_when>
    <thetext>Attachment 318016 did not pass style-queue:


ERROR: Source/WTF/wtf/CagedUniquePtr.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:135:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338366</commentid>
    <comment_count>8</comment_count>
      <attachid>318043</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-14 09:53:14 -0700</bug_when>
    <thetext>Created attachment 318043
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338368</commentid>
    <comment_count>9</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-14 09:56:03 -0700</bug_when>
    <thetext>Attachment 318043 did not pass style-queue:


ERROR: Source/WTF/wtf/CagedUniquePtr.h:84:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/CagedUniquePtr.h:135:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
Total errors found: 2 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338374</commentid>
    <comment_count>10</comment_count>
      <attachid>318043</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-08-14 10:09:22 -0700</bug_when>
    <thetext>Comment on attachment 318043
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338379</commentid>
    <comment_count>11</comment_count>
      <attachid>318043</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-08-14 10:13:51 -0700</bug_when>
    <thetext>Comment on attachment 318043
the patch

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

r=me

&gt; Source/WTF/wtf/CagedUniquePtr.h:82
&gt; +class CagedUniquePtr&lt;kind, T[], typename std::enable_if&lt;std::is_trivially_destructible&lt;T&gt;::value&gt;::type&gt; : public CagedPtr&lt;kind, T&gt; {

It&apos;s neat that you don&apos;t need the size here! :D

&gt; Source/WTF/wtf/CagedUniquePtr.h:104
&gt; +            new (result + count) T(std::forward&lt;Arguments&gt;(arguments)...);

I think you want to construct in increasing order. That&apos;s usually what C++ containers do, and it&apos;s observable by the values being constructed.

&gt; Source/WTF/wtf/CagedUniquePtr.h:133
&gt; +class CagedUniquePtr&lt;kind, T[], typename std::enable_if&lt;!std::is_trivially_destructible&lt;T&gt;::value&gt;::type&gt; : public CagedPtr&lt;kind, T&gt; {

This inherits CagedPtr&apos;s operator== but does the wrong with by not comparing m_count. That should never be an issue because you shouldn&apos;t be able to have to unique pointers to the same base, but different sizes. Right?

&gt; Source/WTF/wtf/CagedUniquePtr.h:157
&gt; +            new (result + count) T(std::forward&lt;Arguments&gt;(arguments)...);

Ditto, construct in increasing order.

&gt; Source/WTF/wtf/CagedUniquePtr.h:183
&gt; +            this-&gt;m_ptr[m_count].~T();

This reverse order destruction is good though.

&gt; Source/WTF/wtf/Gigacage.cpp:127
&gt; +    if (checkedSize.hasOverflowed())

UNLIKELY</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338414</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-14 11:29:17 -0700</bug_when>
    <thetext>(In reply to JF Bastien from comment #11)
&gt; Comment on attachment 318043 [details]
&gt; the patch
&gt; 
&gt; iew in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=318043&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WTF/wtf/CagedUniquePtr.h:82
&gt; &gt; +class CagedUniquePtr&lt;kind, T[], typename std::enable_if&lt;std::is_trivially_destructible&lt;T&gt;::value&gt;::type&gt; : public CagedPtr&lt;kind, T&gt; {
&gt; 
&gt; It&apos;s neat that you don&apos;t need the size here! :D
&gt; 
&gt; &gt; Source/WTF/wtf/CagedUniquePtr.h:104
&gt; &gt; +            new (result + count) T(std::forward&lt;Arguments&gt;(arguments)...);
&gt; 
&gt; I think you want to construct in increasing order. That&apos;s usually what C++
&gt; containers do, and it&apos;s observable by the values being constructed.

I&apos;ll leave it for now.  I already tested it this way, and I don&apos;t think that any of our code cares.

&gt; 
&gt; &gt; Source/WTF/wtf/CagedUniquePtr.h:133
&gt; &gt; +class CagedUniquePtr&lt;kind, T[], typename std::enable_if&lt;!std::is_trivially_destructible&lt;T&gt;::value&gt;::type&gt; : public CagedPtr&lt;kind, T&gt; {
&gt; 
&gt; This inherits CagedPtr&apos;s operator== but does the wrong with by not comparing
&gt; m_count. That should never be an issue because you shouldn&apos;t be able to have
&gt; to unique pointers to the same base, but different sizes. Right?

Right!

I think it&apos;s &quot;correct&quot; but I put in a FIXME and cited https://bugs.webkit.org/show_bug.cgi?id=175541

&gt; 
&gt; &gt; Source/WTF/wtf/CagedUniquePtr.h:157
&gt; &gt; +            new (result + count) T(std::forward&lt;Arguments&gt;(arguments)...);
&gt; 
&gt; Ditto, construct in increasing order.
&gt; 
&gt; &gt; Source/WTF/wtf/CagedUniquePtr.h:183
&gt; &gt; +            this-&gt;m_ptr[m_count].~T();
&gt; 
&gt; This reverse order destruction is good though.
&gt; 
&gt; &gt; Source/WTF/wtf/Gigacage.cpp:127
&gt; &gt; +    if (checkedSize.hasOverflowed())
&gt; 
&gt; UNLIKELY</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338417</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-14 11:33:31 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/220712/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1338418</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-14 11:34:45 -0700</bug_when>
    <thetext>&lt;rdar://problem/33879627&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318003</attachid>
            <date>2017-08-12 22:22:45 -0700</date>
            <delta_ts>2017-08-12 23:02:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22304</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGluIHNvbWUg
Z2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVXNlcyBDYWdlZFVuaXF1ZVB0cjw+IHRvIGNhZ2UgdGhlIFNjb3BlT2Zmc2V0IGFy
cmF5LgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50
c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OlNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaDoKKwogMjAxNy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZUTCdzIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9m
ZnNldCBuZWVkcyB0byBkbyBjYWdpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMwMiw2ICs2MzAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25TYwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwK
ICAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQuY2FnZShTY29wZWRBcmd1bWVudHNUYWJs
ZTo6QXJndW1lbnRzUHRyOjpraW5kLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLAogICAgICAgICBzY3JhdGNoUmVnKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0NSwxMCArMzU0NSwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuYW1lZENhc2Us
IG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9
IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOwotICAg
ICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMu
U2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBhcmd1
bWVudHMgPSBjYWdlZCgKKyAgICAgICAgICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZTo6QXJn
dW1lbnRzUHRyOjpraW5kLAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJIGd1ZXNzIHdlIG5lZWQgdG8gY2FnZSBTY29wZWRBcmd1bWVu
dHM/Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0OTIxCiAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1l
bnRzLCBhcmd1bWVudHMsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKICAgICAgICAgICAgIExW
YWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMihhZGRyZXNzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0NCw2ICsxNTQ0LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRTY29wZWRBcmd1bWVudHNHZQogICAgIEp1bXAgb3ZlcmZsb3dDYXNlID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJn
dW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBjYWdlKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpBcmd1
bWVudHNQdHI6OmtpbmQsIHNjcmF0Y2gpOwogICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9m
ZnNldCkpKTsKICAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1l
c0VpZ2h0LCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1Rh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5jcHAJKHJldmlzaW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MCw3ICs2MCw3IEBAIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBTY29wZWRBcmd1bWVudHNUYWIKIHsK
ICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKICAgICByZXN1
bHQtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIHJlc3VsdC0+bV9hcmd1bWVudHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNjb3BlT2Zmc2V0W10+KGxlbmd0aCk7CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50
cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKGxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNzUsNyArNzUsNyBAQCBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRz
VGFiCiBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFibGU6OnNldExlbmd0
aChWTSYgdm0sIHVpbnQzMl90IG5ld0xlbmd0aCkKIHsKICAgICBpZiAoTElLRUxZKCFtX2xvY2tl
ZCkpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0W10+IG5ld0FyZ3VtZW50
cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVPZmZzZXRbXT4obmV3TGVuZ3RoKTsKKyAgICAgICAg
QXJndW1lbnRzUHRyIG5ld0FyZ3VtZW50cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKG5ld0xlbmd0
aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKG1fbGVuZ3RoLCBuZXdMZW5n
dGgpOyBpLS07KQogICAgICAgICAgICAgbmV3QXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07
CiAgICAgICAgIG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJTY29wZU9mZnNldC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0NhZ2VkVW5pcXVlUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03
Nyw2ICs3OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3Ro
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2xlbmd0
aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2FyZ3VtZW50cyk7IH0KIAor
ICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgU2NvcGVPZmZz
ZXRbXT4gQXJndW1lbnRzUHRyOworCiBwcml2YXRlOgogICAgIFNjb3BlT2Zmc2V0JiBhdCh1aW50
MzJfdCBpKQogICAgIHsKQEAgLTg2LDkgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKICAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMg
dGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9u
ZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBt
ZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KLSAgICAv
LyBGSVhNRTogQWxsb2NhdGUgdGhpcyBpbiB0aGUgcHJpbWl0aXZlIGdpZ2FjYWdlCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkyMQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY29wZU9mZnNldFtdPiBtX2FyZ3VtZW50czsKKyAgICBBcmd1bWVudHNQdHIg
bV9hcmd1bWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDUxIEBACisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgUHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGlu
IHNvbWUgZ2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgSWYgeW91IHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgY2xhc3MgdGhh
dCBrbm93cyB0aGF0IGl0IHNob3VsZCBiZSBpbiB0aGUgR2lnYWNhZ2UsIHRoZW4gd2UKKyAgICAg
ICAgd291bGQgY3JlYXRlIHRoZSBHaWdhY2FnZSBlcXVpdmFsZW50IG9mIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEIGFuZCBpdCB3b3VsZCBqdXN0IHdvcmsuCisgICAgICAgIAorICAgICAgICBCdXQg
dGhpcyBkb2VzIG5vdCB3b3JrIGlmIHdlIHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgcHJpbWl0
aXZlIHR5cGUuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYQorICAgICAgICBzb2x1dGlvbiBmb3IgdGhp
cyBwcm9ibGVtOiBDYWdlZFVuaXF1ZVB0cjw+LiBUaGlzIHdpbGwgaGFuZGxlIGFsbG9jYXRpb24K
KyAgICAgICAgKENhZ2VkVW5pcXVlUHRyPD46OmNyZWF0ZSgpKSBhbmQgZGVhbGxvY2F0aW9uIChp
biB0aGUgc3R5bGUgb2Ygc3RkOjp1bmlxdWVfcHRyKS4gSXQgaGFzIHRocmVlCisgICAgICAgIHZh
cmlhbnRzOgorICAgICAgICAKKyAgICAgICAgLSBOb24tYXJyYXkgdHlwZXMuCisgICAgICAgIC0g
QXJyYXlzIHRoYXQgZG9uJ3QgaGF2ZSBkZXN0cnVjdG9ycy4KKyAgICAgICAgLSBBcnJheXMgdGhh
dCBoYXZlIGRlc3RydWN0b3JzLgorICAgICAgICAKKyAgICAgICAgQ2FnZWRVbmlxdWVQdHI8PiBt
YWtlcyBpdCBpbXBvc3NpYmxlIHRvIGxlYWsgdGhlIHBvaW50ZXIuIFRoaXMgaXMgc3RyaWN0ZXIg
dGhhbiB3aGF0CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0ciBkb2VzLCBhbmQgaXMgcHJvYmFibHkg
YXBwcm9wcmlhdGUgZm9yIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHdlIHdvdWxkIHVzZSB0aGlz
CisgICAgICAgIHR5cGUuCisgICAgICAgIAorICAgICAgICBTbyBmYXIsIHdlIG9ubHkgdXNlIGl0
IGZvciBTY29wZWRBcmd1bWVudHNUYWJsZTo6bV9hcmd1bWVudHMsIGJ1dCBJIHN1c3BlY3QgdGhh
dCBpdCB3aWxsIGJlCisgICAgICAgIHVzZWZ1bCBpbiBvdGhlciBwbGFjZXMuCisKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogd3RmL0NhZ2VkVW5pcXVlUHRyLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpDYWdlZFVuaXF1ZVB0cjo6Q2FnZWRVbmlxdWVQdHIpOgorICAgICAgICAoV1RGOjpDYWdl
ZFVuaXF1ZVB0cjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjp+Q2FnZWRVbmlxdWVQdHIpOgor
ICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6
Q2FnZWRVbmlxdWVQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2Vk
VW5pcXVlUHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQ
dHI6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6b3Bl
cmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRv
ciogY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6b3BlcmF0b3ItPiBjb25z
dCk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmRlc3Ryb3kpOgorICAgICAgICAqIHd0Zi9HaWdh
Y2FnZS5jcHA6CisgICAgICAgIChHaWdhY2FnZTo6dHJ5Q2FsbG9jKToKKyAgICAgICAgKEdpZ2Fj
YWdlOjptYWxsb2MpOgorICAgICAgICAoR2lnYWNhZ2U6OmNhbGxvYyk6CisgICAgICAgICogd3Rm
L0dpZ2FjYWdlLmg6CisKIDIwMTctMDgtMTEgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBz
b255LmNvbT4KIAogICAgICAgICBbV1RGXSBNb3ZlIFZhbHVlVG9TdHJpbmcgaW50byBXVEYKSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIw
NjI1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBACiAJCTBGNUJGMTY1MUYyMzE3ODMwMDI5RDkxRCAv
KiBOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0dXJhbExvb3BzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTc0MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2Fn
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHaWdhY2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNUJGMTc1MUYyM0Q0OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHaWdhY2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVG
M0Q2ODFGM0ZFQkE2MDBCMTE1QTIgLyogQ2FnZWRVbmlxdWVQdHIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FnZWRVbmlxdWVQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkQx
REZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2tlZFByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkUxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50
U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2tlZFByaW50U3Ry
ZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZCMjgwMURDOTdCQUIwMDRB
MUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc0OSw2ICs3
NTAsNyBAQAogCQkJCUE4QTQ3MjY3MTUxQTgyNUEwMDQxMjNGRiAvKiBCdW1wUG9pbnRlckFsbG9j
YXRvci5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAq
LywKIAkJCQkwRkVDM0M0RjFGMzIzQzY4MDBGNTlCNkMgLyogQ2FnZWRQdHIuaCAqLywKKwkJCQkw
RjVGM0Q2ODFGM0ZFQkE2MDBCMTE1QTIgLyogQ2FnZWRVbmlxdWVQdHIuaCAqLywKIAkJCQlBOEE0
NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLywKIAkJCQlBOEE0
NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCAqLywKIAkJCQkwRjY2QjI4
MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBC
eXRlT3JkZXIuaAogICAgIENQVVRpbWUuaAogICAgIENhZ2VkUHRyLmgKKyAgICBDYWdlZFVuaXF1
ZVB0ci5oCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxhdGlvblRocmVhZC5oCiAgICAgQ29t
cGlsZXIuaApJbmRleDogU291cmNlL1dURi93dGYvQ2FnZWRVbmlxdWVQdHIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DYWdlZFVuaXF1ZVB0ci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XVEYvd3RmL0NhZ2VkVW5pcXVlUHRyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9HaWdhY2Fn
ZS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIHBhc3NlZEtpbmQsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEVuYWJsZSA9IHZvaWQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0ciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKKyAgICAKKyAg
ICBDYWdlZFVuaXF1ZVB0cihUKiBwdHIgPSBudWxscHRyKQorICAgICAgICA6IG1fcHRyKHB0cikK
KyAgICB7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKENhZ2VkVW5pcXVlUHRyJiYg
cHRyKQorICAgICAgICA6IG1fcHRyKHB0ci5tX3B0cikKKyAgICB7CisgICAgICAgIHB0ci5tX3B0
ciA9IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKGNvbnN0IENhZ2Vk
VW5pcXVlUHRyJikgPSBkZWxldGU7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBjcmVhdGUoQXJndW1lbnRzJiYuLi4g
YXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KEdp
Z2FjYWdlOjptYWxsb2Moa2luZCwgc2l6ZW9mKFQpKSk7CisgICAgICAgIG5ldyAocmVzdWx0KSBU
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4g
Q2FnZWRVbmlxdWVQdHIocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIm
IG9wZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICB7CisgICAgICAgIGRlc3Ryb3ko
KTsKKyAgICAgICAgbV9wdHIgPSBwdHIubV9wdHI7CisgICAgICAgIHB0ci5tX3B0ciA9IG51bGxw
dHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQ
dHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAg
IH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorICAg
IAorICAgIFQqIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wdHIpOworICAg
ICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKGtpbmQsIG1fcHRyKTsKKyAgICB9CisgICAgCisg
ICAgVCogZ2V0TWF5QmVOdWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9wdHIpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGdldCgpOworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FnZWRVbmlxdWVQdHImIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgpID09IG90aGVyLmdldE1h
eUJlTnVsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ2FnZWRV
bmlxdWVQdHImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBDYWdlZFVuaXF1ZVB0cigpOworICAgIH0K
KyAgICAKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0KKyAgICBU
KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEluZGV4VHlwZT4KKyAgICBUJiBvcGVyYXRvcltdKEluZGV4VHlwZSBpbmRleCkgY29u
c3QgeyByZXR1cm4gZ2V0KClbaW5kZXhdOyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgZGVz
dHJveSgpCisgICAgeworICAgICAgICBpZiAoIW1fcHRyKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBtX3B0ci0+flQoKTsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwgbV9wdHIp
OworICAgIH0KKyAgICAKKyAgICBUKiBtX3B0ciB7IG51bGxwdHIgfTsKK307CisKK3RlbXBsYXRl
PEdpZ2FjYWdlOjpLaW5kIHBhc3NlZEtpbmQsIHR5cGVuYW1lIFQ+CitjbGFzcyBDYWdlZFVuaXF1
ZVB0cjxwYXNzZWRLaW5kLCBUW10sIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWU+Ojp0eXBlPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBHaWdhY2FnZTo6S2luZCBraW5kID0gcGFzc2VkS2luZDsKKyAgICAKKyAg
ICBDYWdlZFVuaXF1ZVB0cigpIHsgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKFQqIHB0cikK
KyAgICAgICAgOiBtX3B0cihwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDYWdlZFVuaXF1
ZVB0cihDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICAgICAgOiBtX3B0cihwdHIubV9wdHIpCisg
ICAgeworICAgICAgICBwdHIubV9wdHIgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBDYWdl
ZFVuaXF1ZVB0cihjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgQ2FnZWRVbmlxdWVQdHIg
Y3JlYXRlKHNpemVfdCBjb3VudCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjpjYWxsb2Moa2luZCwg
Y291bnQsIHNpemVvZihUKSkpOworICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAg
IG5ldyAocmVzdWx0ICsgY291bnQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRz
KS4uLik7CisgICAgICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQpOworICAgIH0KKyAg
ICAKKyAgICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KENhZ2VkVW5pcXVlUHRyJiYgcHRyKQor
ICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICBtX3B0ciA9IHB0ci5tX3B0cjsKKyAg
ICAgICAgcHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KGNvbnN0IENhZ2VkVW5pcXVlUHRy
JikgPSBkZWxldGU7CisgICAgCisgICAgfkNhZ2VkVW5pcXVlUHRyKCkKKyAgICB7CisgICAgICAg
IGRlc3Ryb3koKTsKKyAgICB9CisgICAgCisgICAgVCogZ2V0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX3B0cik7CisgICAgICAgIHJldHVybiBHaWdhY2FnZTo6Y2FnZWQoa2luZCwg
bV9wdHIpOworICAgIH0KKyAgICAKKyAgICBUKiBnZXRNYXlCZU51bGwoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFtX3B0cikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gZ2V0KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWdlZFVuaXF1ZVB0ciYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZ2V0TWF5
QmVOdWxsKCkgPT0gb3RoZXIuZ2V0TWF5QmVOdWxsKCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IENh
Z2VkVW5pcXVlUHRyKCk7CisgICAgfQorICAgIAorICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuICpnZXQoKTsgfQorICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQo
KTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlPgorICAgIFQmIG9wZXJhdG9y
W10oSW5kZXhUeXBlIGluZGV4KSBjb25zdCB7IHJldHVybiBnZXQoKVtpbmRleF07IH0KKyAgICAK
K3ByaXZhdGU6CisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGlmICghbV9wdHIp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdpZ2FjYWdlOjpmcmVlKGtpbmQsIG1fcHRy
KTsKKyAgICB9CisgICAgCisgICAgVCogbV9wdHIgeyBudWxscHRyIH07Cit9OworCit0ZW1wbGF0
ZTxHaWdhY2FnZTo6S2luZCBwYXNzZWRLaW5kLCB0eXBlbmFtZSBUPgorY2xhc3MgQ2FnZWRVbmlx
dWVQdHI8cGFzc2VkS2luZCwgVFtdLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZT46OnR5cGU+IHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3RleHByIEdpZ2FjYWdlOjpLaW5kIGtpbmQgPSBwYXNzZWRLaW5kOworICAgIAor
ICAgIENhZ2VkVW5pcXVlUHRyKCkgeyB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoVCogcHRy
LCBzaXplX3QgY291bnQpCisgICAgICAgIDogbV9wdHIocHRyKQorICAgICAgICAsIG1fY291bnQo
Y291bnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihDYWdlZFVuaXF1
ZVB0ciYmIHB0cikKKyAgICAgICAgOiBtX3B0cihwdHIubV9wdHIpCisgICAgICAgICwgbV9jb3Vu
dChwdHIubV9jb3VudCkKKyAgICB7CisgICAgICAgIHB0ci5jbGVhcigpOworICAgIH0KKyAgICAK
KyAgICBDYWdlZFVuaXF1ZVB0cihjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgQ2FnZWRV
bmlxdWVQdHIgY3JlYXRlKHNpemVfdCBjb3VudCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjpjYWxs
b2Moa2luZCwgY291bnQsIHNpemVvZihUKSkpOworICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAg
ICAgICAgICAgIG5ldyAocmVzdWx0ICsgY291bnQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLik7CisgICAgICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQsIGNv
dW50KTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShDYWdlZFVu
aXF1ZVB0ciYmIHB0cikKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgbV9wdHIg
PSBwdHIubV9wdHI7CisgICAgICAgIG1fY291bnQgPSBwdHIubV9jb3VudDsKKyAgICAgICAgcHRy
LmNsZWFyKCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRV
bmlxdWVQdHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAg
IAorICAgIH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAg
fQorICAgIAorICAgIFQqIGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9wdHIp
OworICAgICAgICByZXR1cm4gR2lnYWNhZ2U6OmNhZ2VkKGtpbmQsIG1fcHRyKTsKKyAgICB9Cisg
ICAgCisgICAgVCogZ2V0TWF5QmVOdWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9w
dHIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGdldCgpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FnZWRVbmlxdWVQdHImIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldE1heUJlTnVsbCgpID09IG90aGVy
LmdldE1heUJlTnVsbCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Q2FnZWRVbmlxdWVQdHImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBDYWdlZFVuaXF1ZVB0cigpOwor
ICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqZ2V0KCk7IH0K
KyAgICBUKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEluZGV4VHlwZT4KKyAgICBUJiBvcGVyYXRvcltdKEluZGV4VHlwZSBpbmRl
eCkgY29uc3QgeyByZXR1cm4gZ2V0KClbaW5kZXhdOyB9CisgICAgCitwcml2YXRlOgorICAgIHZv
aWQgZGVzdHJveSgpCisgICAgeworICAgICAgICBpZiAoIW1fcHRyKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB3aGlsZSAobV9jb3VudC0tKQorICAgICAgICAgICAgbV9wdHJbbV9jb3Vu
dF0uflQoKTsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwgbV9wdHIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fcHRyID0gbnVsbHB0cjsKKyAg
ICAgICAgbV9jb3VudCA9IDA7CisgICAgfQorICAgIAorICAgIFQqIG1fcHRyIHsgbnVsbHB0ciB9
OworICAgIHNpemVfdCBtX2NvdW50IHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6Q2FnZWRVbmlxdWVQdHI7CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2Fj
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAJKHJldmlz
aW9uIDIyMDYyNSkKKysrIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNiArNDcsMTUgQEAgdm9pZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCBzaXplKQog
ICAgIHJldHVybiBudWxscHRyOwogfQogCit2b2lkKiB0cnlDYWxsb2MoS2luZCwgc2l6ZV90IG51
bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpCit7CisgICAgYXV0byByZXN1bHQgPSB0cnlG
YXN0Q2FsbG9jKG51bUVsZW1lbnRzLCBlbGVtZW50U2l6ZSk7CisgICAgdm9pZCogcmVhbFJlc3Vs
dDsKKyAgICBpZiAocmVzdWx0LmdldFZhbHVlKHJlYWxSZXN1bHQpKQorICAgICAgICByZXR1cm4g
cmVhbFJlc3VsdDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogdm9pZCogdHJ5QWxsb2NhdGVW
aXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNpemUpCiB7CiAgICAgcmV0dXJuIE9TQWxsb2NhdG9y
OjpyZXNlcnZlVW5jb21taXR0ZWQoc2l6ZSk7CkBAIC05OSw2ICsxMDgsMTUgQEAgdm9pZCBmcmVl
KEtpbmQga2luZCwgdm9pZCogcCkKICAgICBXVEY6OmNvbXBpbGVyRmVuY2UoKTsKIH0KIAordm9p
ZCogdHJ5Q2FsbG9jKEtpbmQga2luZCwgc2l6ZV90IG51bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVu
dFNpemUpCit7CisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU2l6
ZSA9IGVsZW1lbnRTaXplOworICAgIGNoZWNrZWRTaXplICo9IG51bUVsZW1lbnRzOworICAgIGlm
IChjaGVja2VkU2l6ZS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiB0cnlNYWxsb2Moa2luZCwgY2hlY2tlZFNpemUudW5zYWZlR2V0KCkpOworfQor
CiB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQsIHNpemVfdCBzaXplKQog
ewogICAgIHZvaWQqIHJlc3VsdCA9IGJtYWxsb2M6OmFwaTo6dHJ5TGFyZ2VNZW1hbGlnblZpcnR1
YWwoV1RGOjpwYWdlU2l6ZSgpLCBzaXplLCBibWFsbG9jOjpoZWFwS2luZChraW5kKSk7CkBAIC0x
MTgsMyArMTM2LDIxIEBAIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQsIHZvaWQqIGIK
IH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZW5kaWYKIAorbmFtZXNwYWNlIEdpZ2FjYWdlIHsK
Kwordm9pZCogbWFsbG9jKEtpbmQga2luZCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCogcmVz
dWx0ID0gdHJ5TWFsbG9jKGtpbmQsIHNpemUpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogY2FsbG9jKEtpbmQga2luZCwgc2l6ZV90
IG51bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpCit7CisgICAgdm9pZCogcmVzdWx0ID0g
dHJ5Q2FsbG9jKGtpbmQsIG51bUVsZW1lbnRzLCBlbGVtZW50U2l6ZSk7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBH
aWdhY2FnZQorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgJKHJldmlzaW9uIDIyMDYyNSkKKysrIFNvdXJjZS9X
VEYvd3RmL0dpZ2FjYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAgaW5saW5l
IHZvaWQgYWxpZ25lZEZyZWUoS2luZCwgdm9pZCogcCkgewogV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3Qgc2l6ZSk7CiBpbmxpbmUgdm9pZCBmcmVlKEtpbmQs
IHZvaWQqIHApIHsgZmFzdEZyZWUocCk7IH0KIAorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRy
eUNhbGxvYyhLaW5kLCBzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisK
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBz
aXplX3Qgc2l6ZSk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtp
bmQsIHZvaWQqIGJhc2VQdHIsIHNpemVfdCBzaXplKTsKIApAQCAtOTYsOSArOTgsMTkgQEAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgYWxpZ25lZEZyZWUoS2luZAogV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQqIHRyeU1hbGxvYyhLaW5kLCBzaXplX3QpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZnJlZShLaW5kLCB2b2lkKik7CiAKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlDYWxsb2Mo
S2luZCwgc2l6ZV90IG51bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpOworCiBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNp
emUpOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lk
KiBiYXNlUHRyLCBzaXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZW5k
aWYKIAorbmFtZXNwYWNlIEdpZ2FjYWdlIHsKKworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIG1h
bGxvYyhLaW5kLCBzaXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIGNhbGxvYyhLaW5k
LCBzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisKK30gLy8gbmFtZXNw
YWNlIEdpZ2FjYWdlCisKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318004</attachid>
            <date>2017-08-12 23:02:57 -0700</date>
            <delta_ts>2017-08-13 11:47:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20818</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGluIHNvbWUg
Z2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVXNlcyBDYWdlZFVuaXF1ZVB0cjw+IHRvIGNhZ2UgdGhlIFNjb3BlT2Zmc2V0IGFy
cmF5LgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50
c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OlNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaDoKKwogMjAxNy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZUTCdzIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9m
ZnNldCBuZWVkcyB0byBkbyBjYWdpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMwMiw2ICs2MzAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25TYwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwK
ICAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQuY2FnZShTY29wZWRBcmd1bWVudHNUYWJs
ZTo6QXJndW1lbnRzUHRyOjpraW5kLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLAogICAgICAgICBzY3JhdGNoUmVnKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0NSwxMCArMzU0NSwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuYW1lZENhc2Us
IG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9
IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOwotICAg
ICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMu
U2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBhcmd1
bWVudHMgPSBjYWdlZCgKKyAgICAgICAgICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZTo6QXJn
dW1lbnRzUHRyOjpraW5kLAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJIGd1ZXNzIHdlIG5lZWQgdG8gY2FnZSBTY29wZWRBcmd1bWVu
dHM/Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0OTIxCiAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1l
bnRzLCBhcmd1bWVudHMsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKICAgICAgICAgICAgIExW
YWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMihhZGRyZXNzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0NCw2ICsxNTQ0LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRTY29wZWRBcmd1bWVudHNHZQogICAgIEp1bXAgb3ZlcmZsb3dDYXNlID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJn
dW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBjYWdlKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpBcmd1
bWVudHNQdHI6OmtpbmQsIHNjcmF0Y2gpOwogICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9m
ZnNldCkpKTsKICAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1l
c0VpZ2h0LCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1Rh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5jcHAJKHJldmlzaW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MCw3ICs2MCw3IEBAIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBTY29wZWRBcmd1bWVudHNUYWIKIHsK
ICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKICAgICByZXN1
bHQtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIHJlc3VsdC0+bV9hcmd1bWVudHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNjb3BlT2Zmc2V0W10+KGxlbmd0aCk7CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50
cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKGxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNzUsNyArNzUsNyBAQCBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRz
VGFiCiBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFibGU6OnNldExlbmd0
aChWTSYgdm0sIHVpbnQzMl90IG5ld0xlbmd0aCkKIHsKICAgICBpZiAoTElLRUxZKCFtX2xvY2tl
ZCkpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0W10+IG5ld0FyZ3VtZW50
cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVPZmZzZXRbXT4obmV3TGVuZ3RoKTsKKyAgICAgICAg
QXJndW1lbnRzUHRyIG5ld0FyZ3VtZW50cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKG5ld0xlbmd0
aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKG1fbGVuZ3RoLCBuZXdMZW5n
dGgpOyBpLS07KQogICAgICAgICAgICAgbmV3QXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07
CiAgICAgICAgIG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJTY29wZU9mZnNldC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0NhZ2VkVW5pcXVlUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03
Nyw2ICs3OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3Ro
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2xlbmd0
aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2FyZ3VtZW50cyk7IH0KIAor
ICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgU2NvcGVPZmZz
ZXRbXT4gQXJndW1lbnRzUHRyOworCiBwcml2YXRlOgogICAgIFNjb3BlT2Zmc2V0JiBhdCh1aW50
MzJfdCBpKQogICAgIHsKQEAgLTg2LDkgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKICAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMg
dGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9u
ZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBt
ZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KLSAgICAv
LyBGSVhNRTogQWxsb2NhdGUgdGhpcyBpbiB0aGUgcHJpbWl0aXZlIGdpZ2FjYWdlCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkyMQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY29wZU9mZnNldFtdPiBtX2FyZ3VtZW50czsKKyAgICBBcmd1bWVudHNQdHIg
bV9hcmd1bWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDU4IEBACisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgUHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGlu
IHNvbWUgZ2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgSWYgeW91IHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgY2xhc3MgdGhh
dCBrbm93cyB0aGF0IGl0IHNob3VsZCBiZSBpbiB0aGUgR2lnYWNhZ2UsIHRoZW4gd2UKKyAgICAg
ICAgd291bGQgY3JlYXRlIHRoZSBHaWdhY2FnZSBlcXVpdmFsZW50IG9mIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEIGFuZCBpdCB3b3VsZCBqdXN0IHdvcmsuCisgICAgICAgIAorICAgICAgICBCdXQg
dGhpcyBkb2VzIG5vdCB3b3JrIGlmIHdlIHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgcHJpbWl0
aXZlIHR5cGUuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYQorICAgICAgICBzb2x1dGlvbiBmb3IgdGhp
cyBwcm9ibGVtOiBDYWdlZFVuaXF1ZVB0cjw+LiBUaGlzIHdpbGwgaGFuZGxlIGFsbG9jYXRpb24K
KyAgICAgICAgKENhZ2VkVW5pcXVlUHRyPD46OmNyZWF0ZSgpKSBhbmQgZGVhbGxvY2F0aW9uIChp
biB0aGUgc3R5bGUgb2Ygc3RkOjp1bmlxdWVfcHRyKS4gSXQgaGFzIHRocmVlCisgICAgICAgIHZh
cmlhbnRzOgorICAgICAgICAKKyAgICAgICAgLSBOb24tYXJyYXkgdHlwZXMuCisgICAgICAgIC0g
QXJyYXlzIHRoYXQgZG9uJ3QgaGF2ZSBkZXN0cnVjdG9ycy4KKyAgICAgICAgLSBBcnJheXMgdGhh
dCBoYXZlIGRlc3RydWN0b3JzLgorICAgICAgICAKKyAgICAgICAgSnVzdCBsaWtlIHN0ZDo6dW5p
cXVlX3B0ciwgdGhlIGFycmF5IGNhc2UgaXMgdHJpZ2dlcmVkIGJ5IHNheWluZyAiW10iIGF0IHRo
ZSBlbmQgb2YgdGhlIHR5cGUuCisgICAgICAgIAorICAgICAgICBVbmxpa2Ugc3RkOjp1bmlxdWVf
cHRyIGFuZCBtb3N0IG90aGVyIHNtYXJ0IHBvaW50ZXJzLCB0aGUgd2hvbGUgcG9pbnQgb2YgdGhp
cyBzbWFydCBwb2ludGVyIGlzCisgICAgICAgIHRvIGRpY3RhdGUgd2hlcmUgdGhlIHRoaW5nIHlv
dSdyZSBwb2ludGluZyBhdCBpcyBhbGxvY2F0ZWQuIEZvciB0aGlzIHJlYXNvbiwgaXQgaGFzIHRv
IGtub3cgaG93CisgICAgICAgIHRvIGRvIHRoaW5ncyBsaWtlIHRoZSBhcnJheSBkZXN0cnVjdG9y
IHByb3RvY29sLiBTbyBpdCBjcmVhdGVzIGl0cyBvd246IHRoZSBDYWdlZFVuaXF1ZVB0ciBmb3IK
KyAgICAgICAgYXJyYXlzIHdpdGggZGVzdHJ1Y3RvcnMgaXMgYSBmYXQgcG9pbnRlciB0aGF0IHJl
bWVtYmVycyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4KKyAgICAgICAgCisgICAgICAgIENhZ2Vk
VW5pcXVlUHRyPD4gbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBsZWFrL3JlbGVhc2UgdGhlIHBvaW50
ZXIuIFRoaXMgaXMgc3RyaWN0ZXIgdGhhbiB3aGF0CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0ciBk
b2VzLCBhbmQgaXMgcHJvYmFibHkgYXBwcm9wcmlhdGUgZm9yIGFsbCBvZiB0aGUgcGxhY2VzIHdo
ZXJlIHdlIHdvdWxkIHVzZSB0aGlzCisgICAgICAgIHR5cGUuCisgICAgICAgIAorICAgICAgICBT
byBmYXIsIHdlIG9ubHkgdXNlIGl0IGZvciBTY29wZWRBcmd1bWVudHNUYWJsZTo6bV9hcmd1bWVu
dHMsIGJ1dCBJIHN1c3BlY3QgdGhhdCBpdCB3aWxsIGJlCisgICAgICAgIHVzZWZ1bCBpbiBvdGhl
ciBwbGFjZXMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0NhZ2VkVW5pcXVlUHRy
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Q2FnZWRVbmlxdWVQdHIp
OgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6
Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRy
Ojp+Q2FnZWRVbmlxdWVQdHIpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Z2V0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6
CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RG
OjpDYWdlZFVuaXF1ZVB0cjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNh
Z2VkVW5pcXVlUHRyOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1
ZVB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpv
cGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmRlc3Ryb3kp
OgorICAgICAgICAqIHd0Zi9HaWdhY2FnZS5jcHA6CisgICAgICAgIChHaWdhY2FnZTo6dHJ5Q2Fs
bG9jKToKKyAgICAgICAgKEdpZ2FjYWdlOjptYWxsb2MpOgorICAgICAgICAoR2lnYWNhZ2U6OmNh
bGxvYyk6CisgICAgICAgICogd3RmL0dpZ2FjYWdlLmg6CisKIDIwMTctMDgtMTEgIERvbiBPbG1z
dGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbV1RGXSBNb3ZlIFZhbHVl
VG9TdHJpbmcgaW50byBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjIwNjI1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBACiAJCTBGNUJG
MTY1MUYyMzE3ODMwMDI5RDkxRCAvKiBOYXR1cmFsTG9vcHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF0
dXJhbExvb3BzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTc0MUYyM0Q0
OUEwMDI5RDkxRCAvKiBHaWdhY2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHaWdhY2FnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTc1MUYyM0Q0OUEwMDI5RDkx
RCAvKiBHaWdhY2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHaWdhY2FnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjVGM0Q2ODFGM0ZFQkE2MDBCMTE1QTIgLyogQ2FnZWRVbmlxdWVQ
dHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FnZWRVbmlxdWVQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY2MEYzMkQxREZDQkQxQjAwNDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFt
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2tlZFByaW50U3Ry
ZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MEYzMkUxREZDQkQxQjAw
NDE2RDZDIC8qIExvY2tlZFByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IExvY2tlZFByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjZCMjgwMURDOTdCQUIwMDRBMUQzRiAvKiBDbG9ja1R5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvY2tUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTc0OSw2ICs3NTAsNyBAQAogCQkJCUE4QTQ3MjY3MTUxQTgyNUEwMDQxMjNG
RiAvKiBCdW1wUG9pbnRlckFsbG9jYXRvci5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5
QTJGNSAvKiBCeXRlT3JkZXIuaCAqLywKIAkJCQkwRkVDM0M0RjFGMzIzQzY4MDBGNTlCNkMgLyog
Q2FnZWRQdHIuaCAqLywKKwkJCQkwRjVGM0Q2ODFGM0ZFQkE2MDBCMTE1QTIgLyogQ2FnZWRVbmlx
dWVQdHIuaCAqLywKIAkJCQlBOEE0NzI2QTE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRo
bWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xl
YW4uaCAqLywKIAkJCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAq
LywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBCeXRlT3JkZXIuaAogICAgIENQVVRpbWUuaAogICAgIENhZ2Vk
UHRyLmgKKyAgICBDYWdlZFVuaXF1ZVB0ci5oCiAgICAgQ2xvY2tUeXBlLmgKICAgICBDb21waWxh
dGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaApJbmRleDogU291cmNlL1dURi93dGYvQ2FnZWRQ
dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Myw3ICs3Myw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbmRleFR5cGU+CiAg
ICAgVCYgb3BlcmF0b3JbXShJbmRleFR5cGUgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGdldCgpW2lu
ZGV4XTsgfQogICAgIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBUKiBtX3B0cjsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NhZ2VkVW5pcXVlUHRyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvQ2FnZWRVbmlxdWVQdHIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9DYWdlZFVuaXF1ZVB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQ2FnZWRQdHIuaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQsIHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEVuYWJsZSA9IHZvaWQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0ciA6IHB1Ymxp
YyBDYWdlZFB0cjxraW5kLCBUPiB7CitwdWJsaWM6CisgICAgQ2FnZWRVbmlxdWVQdHIoVCogcHRy
ID0gbnVsbHB0cikKKyAgICAgICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICAg
ICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIubV9wdHIpCisgICAgeworICAgICAgICBwdHIubV9w
dHIgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihjb25zdCBDYWdl
ZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICBzdGF0aWMgQ2FnZWRVbmlxdWVQdHIgY3JlYXRlKEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIFQqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQqPihH
aWdhY2FnZTo6bWFsbG9jKGtpbmQsIHNpemVvZihUKSkpOworICAgICAgICBuZXcgKHJlc3VsdCkg
VChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAgcmV0dXJu
IENhZ2VkVW5pcXVlUHRyKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRy
JiBvcGVyYXRvcj0oQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgeworICAgICAgICBkZXN0cm95
KCk7CisgICAgICAgIHRoaXMtPm1fcHRyID0gcHRyLm1fcHRyOworICAgICAgICBwdHIubV9wdHIg
PSBudWxscHRyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIENhZ2Vk
VW5pcXVlUHRyJiBvcGVyYXRvcj0oY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAg
ICAKKyAgICB+Q2FnZWRVbmlxdWVQdHIoKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGlm
ICghdGhpcy0+bV9wdHIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRoaXMtPm1fcHRy
LT5+VCgpOworICAgICAgICBHaWdhY2FnZTo6ZnJlZShraW5kLCB0aGlzLT5tX3B0cik7CisgICAg
fQorfTsKKwordGVtcGxhdGU8R2lnYWNhZ2U6OktpbmQga2luZCwgdHlwZW5hbWUgVD4KK2NsYXNz
IENhZ2VkVW5pcXVlUHRyPGtpbmQsIFRbXSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZT46OnR5cGU+IDogcHVibGljIENhZ2Vk
UHRyPGtpbmQsIFQ+IHsKK3B1YmxpYzoKKyAgICBDYWdlZFVuaXF1ZVB0cigpIDogQ2FnZWRQdHI8
a2luZCwgVD4oKSB7IH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihUKiBwdHIpCisgICAgICAg
IDogQ2FnZWRQdHI8a2luZCwgVD4ocHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FnZWRV
bmlxdWVQdHIoQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwg
VD4ocHRyLm1fcHRyKQorICAgIHsKKyAgICAgICAgcHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICB9
CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0
ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGlj
IENhZ2VkVW5pcXVlUHRyIGNyZWF0ZShzaXplX3QgY291bnQsIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIFQqIHJlc3VsdCA9IHN0YXRpY19jYXN0PFQqPihHaWdhY2Fn
ZTo6Y2FsbG9jKGtpbmQsIGNvdW50LCBzaXplb2YoVCkpKTsKKyAgICAgICAgd2hpbGUgKGNvdW50
LS0pCisgICAgICAgICAgICBuZXcgKHJlc3VsdCArIGNvdW50KSBUKHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4gQ2FnZWRVbmlxdWVQdHIocmVz
dWx0KTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShDYWdlZFVu
aXF1ZVB0ciYmIHB0cikKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgdGhpcy0+
bV9wdHIgPSBwdHIubV9wdHI7CisgICAgICAgIHB0ci5tX3B0ciA9IG51bGxwdHI7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9y
PShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAgIH5DYWdlZFVuaXF1
ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB2b2lkIGRlc3Ryb3koKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLT5tX3B0cikKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwgdGhpcy0+bV9w
dHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQsIHR5cGVuYW1l
IFQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0cjxraW5kLCBUW10sIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCFzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlPjo6dHlwZT4gOiBw
dWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENhZ2VkVW5pcXVlUHRyKCkg
OiBDYWdlZFB0cjxraW5kLCBUPigpIHsgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKFQqIHB0
ciwgc2l6ZV90IGNvdW50KQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0cikKKyAgICAg
ICAgLCBtX2NvdW50KGNvdW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQ
dHIoQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwgVD4ocHRy
Lm1fcHRyKQorICAgICAgICAsIG1fY291bnQocHRyLm1fY291bnQpCisgICAgeworICAgICAgICBw
dHIuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoY29uc3QgQ2FnZWRV
bmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNyZWF0ZShzaXplX3QgY291bnQsIEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIFQqIHJlc3VsdCA9IHN0YXRp
Y19jYXN0PFQqPihHaWdhY2FnZTo6Y2FsbG9jKGtpbmQsIGNvdW50LCBzaXplb2YoVCkpKTsKKyAg
ICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICBuZXcgKHJlc3VsdCArIGNvdW50KSBU
KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4g
Q2FnZWRVbmlxdWVQdHIocmVzdWx0LCBjb3VudCk7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5p
cXVlUHRyJiBvcGVyYXRvcj0oQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgeworICAgICAgICBk
ZXN0cm95KCk7CisgICAgICAgIHRoaXMtPm1fcHRyID0gcHRyLm1fcHRyOworICAgICAgICBtX2Nv
dW50ID0gcHRyLm1fY291bnQ7CisgICAgICAgIHB0ci5jbGVhcigpOworICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRvcj0oY29uc3Qg
Q2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB+Q2FnZWRVbmlxdWVQdHIoKQor
ICAgIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9p
ZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy0+bV9wdHIpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHdoaWxlIChtX2NvdW50LS0pCisgICAgICAgICAgICB0aGlzLT5t
X3B0clttX2NvdW50XS5+VCgpOworICAgICAgICBHaWdhY2FnZTo6ZnJlZShraW5kLCB0aGlzLT5t
X3B0cik7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgdGhp
cy0+bV9wdHIgPSBudWxscHRyOworICAgICAgICBtX2NvdW50ID0gMDsKKyAgICB9CisgICAgCisg
ICAgc2l6ZV90IG1fY291bnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNp
bmcgV1RGOjpDYWdlZFVuaXF1ZVB0cjsKKwpJbmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmNwcAkocmV2aXNpb24g
MjIwNjI1KQorKysgU291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw2ICs0NywxNSBAQCB2b2lkKiB0cnlNYWxsb2MoS2luZCwgc2l6ZV90IHNpemUpCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKK3ZvaWQqIHRyeUNhbGxvYyhLaW5kLCBzaXplX3QgbnVtRWxl
bWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHRyeUZhc3RD
YWxsb2MobnVtRWxlbWVudHMsIGVsZW1lbnRTaXplKTsKKyAgICB2b2lkKiByZWFsUmVzdWx0Owor
ICAgIGlmIChyZXN1bHQuZ2V0VmFsdWUocmVhbFJlc3VsdCkpCisgICAgICAgIHJldHVybiByZWFs
UmVzdWx0OworICAgIHJldHVybiBudWxscHRyOworfQorCiB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1
YWxQYWdlcyhLaW5kLCBzaXplX3Qgc2l6ZSkKIHsKICAgICByZXR1cm4gT1NBbGxvY2F0b3I6OnJl
c2VydmVVbmNvbW1pdHRlZChzaXplKTsKQEAgLTk5LDYgKzEwOCwxNSBAQCB2b2lkIGZyZWUoS2lu
ZCBraW5kLCB2b2lkKiBwKQogICAgIFdURjo6Y29tcGlsZXJGZW5jZSgpOwogfQogCit2b2lkKiB0
cnlDYWxsb2MoS2luZCBraW5kLCBzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6
ZSkKK3sKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTaXplID0g
ZWxlbWVudFNpemU7CisgICAgY2hlY2tlZFNpemUgKj0gbnVtRWxlbWVudHM7CisgICAgaWYgKGNo
ZWNrZWRTaXplLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIHRyeU1hbGxvYyhraW5kLCBjaGVja2VkU2l6ZS51bnNhZmVHZXQoKSk7Cit9CisKIHZv
aWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQga2luZCwgc2l6ZV90IHNpemUpCiB7CiAg
ICAgdm9pZCogcmVzdWx0ID0gYm1hbGxvYzo6YXBpOjp0cnlMYXJnZU1lbWFsaWduVmlydHVhbChX
VEY6OnBhZ2VTaXplKCksIHNpemUsIGJtYWxsb2M6OmhlYXBLaW5kKGtpbmQpKTsKQEAgLTExOCwz
ICsxMzYsMjEgQEAgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQga2luZCwgdm9pZCogYgogfSAv
LyBuYW1lc3BhY2UgR2lnYWNhZ2UKICNlbmRpZgogCituYW1lc3BhY2UgR2lnYWNhZ2UgeworCit2
b2lkKiBtYWxsb2MoS2luZCBraW5kLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkKiByZXN1bHQg
PSB0cnlNYWxsb2Moa2luZCwgc2l6ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBjYWxsb2MoS2luZCBraW5kLCBzaXplX3QgbnVt
RWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlD
YWxsb2Moa2luZCwgbnVtRWxlbWVudHMsIGVsZW1lbnRTaXplKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEdpZ2Fj
YWdlCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjIwNjI1KQorKysgU291cmNlL1dURi93
dGYvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBpbmxpbmUgdm9p
ZCBhbGlnbmVkRnJlZShLaW5kLCB2b2lkKiBwKSB7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCog
dHJ5TWFsbG9jKEtpbmQsIHNpemVfdCBzaXplKTsKIGlubGluZSB2b2lkIGZyZWUoS2luZCwgdm9p
ZCogcCkgeyBmYXN0RnJlZShwKTsgfQogCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5Q2Fs
bG9jKEtpbmQsIHNpemVfdCBudW1FbGVtZW50cywgc2l6ZV90IGVsZW1lbnRTaXplKTsKKwogV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUFsbG9jYXRlVmlydHVhbFBhZ2VzKEtpbmQsIHNpemVf
dCBzaXplKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMoS2luZCwg
dm9pZCogYmFzZVB0ciwgc2l6ZV90IHNpemUpOwogCkBAIC05Niw5ICs5OCwxOSBAQCBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhbGlnbmVkRnJlZShLaW5kCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCogdHJ5TWFsbG9jKEtpbmQsIHNpemVfdCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVl
KEtpbmQsIHZvaWQqKTsKIAorV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeUNhbGxvYyhLaW5k
LCBzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisKIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBzaXplX3Qgc2l6ZSk7
CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzKEtpbmQsIHZvaWQqIGJh
c2VQdHIsIHNpemVfdCBzaXplKTsKIAogfSAvLyBuYW1lc3BhY2UgR2lnYWNhZ2UKICNlbmRpZgog
CituYW1lc3BhY2UgR2lnYWNhZ2UgeworCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogbWFsbG9j
KEtpbmQsIHNpemVfdCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogY2FsbG9jKEtpbmQsIHNp
emVfdCBudW1FbGVtZW50cywgc2l6ZV90IGVsZW1lbnRTaXplKTsKKworfSAvLyBuYW1lc3BhY2Ug
R2lnYWNhZ2UKKworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318012</attachid>
            <date>2017-08-13 11:47:50 -0700</date>
            <delta_ts>2017-08-13 15:48:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20878</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGluIHNvbWUg
Z2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVXNlcyBDYWdlZFVuaXF1ZVB0cjw+IHRvIGNhZ2UgdGhlIFNjb3BlT2Zmc2V0IGFy
cmF5LgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50
c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OlNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaDoKKwogMjAxNy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZUTCdzIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9m
ZnNldCBuZWVkcyB0byBkbyBjYWdpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMwMiw2ICs2MzAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25TYwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwK
ICAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQuY2FnZShTY29wZWRBcmd1bWVudHNUYWJs
ZTo6QXJndW1lbnRzUHRyOjpraW5kLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLAogICAgICAgICBzY3JhdGNoUmVnKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0NSwxMCArMzU0NSwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuYW1lZENhc2Us
IG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9
IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOwotICAg
ICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMu
U2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBhcmd1
bWVudHMgPSBjYWdlZCgKKyAgICAgICAgICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZTo6QXJn
dW1lbnRzUHRyOjpraW5kLAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJIGd1ZXNzIHdlIG5lZWQgdG8gY2FnZSBTY29wZWRBcmd1bWVu
dHM/Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0OTIxCiAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1l
bnRzLCBhcmd1bWVudHMsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKICAgICAgICAgICAgIExW
YWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMihhZGRyZXNzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0NCw2ICsxNTQ0LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRTY29wZWRBcmd1bWVudHNHZQogICAgIEp1bXAgb3ZlcmZsb3dDYXNlID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJn
dW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBjYWdlKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpBcmd1
bWVudHNQdHI6OmtpbmQsIHNjcmF0Y2gpOwogICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9m
ZnNldCkpKTsKICAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1l
c0VpZ2h0LCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1Rh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5jcHAJKHJldmlzaW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MCw3ICs2MCw3IEBAIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBTY29wZWRBcmd1bWVudHNUYWIKIHsK
ICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKICAgICByZXN1
bHQtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIHJlc3VsdC0+bV9hcmd1bWVudHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNjb3BlT2Zmc2V0W10+KGxlbmd0aCk7CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50
cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKGxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNzUsNyArNzUsNyBAQCBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRz
VGFiCiBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFibGU6OnNldExlbmd0
aChWTSYgdm0sIHVpbnQzMl90IG5ld0xlbmd0aCkKIHsKICAgICBpZiAoTElLRUxZKCFtX2xvY2tl
ZCkpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0W10+IG5ld0FyZ3VtZW50
cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVPZmZzZXRbXT4obmV3TGVuZ3RoKTsKKyAgICAgICAg
QXJndW1lbnRzUHRyIG5ld0FyZ3VtZW50cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKG5ld0xlbmd0
aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKG1fbGVuZ3RoLCBuZXdMZW5n
dGgpOyBpLS07KQogICAgICAgICAgICAgbmV3QXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07
CiAgICAgICAgIG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJTY29wZU9mZnNldC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0NhZ2VkVW5pcXVlUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03
Nyw2ICs3OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3Ro
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2xlbmd0
aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2FyZ3VtZW50cyk7IH0KIAor
ICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgU2NvcGVPZmZz
ZXRbXT4gQXJndW1lbnRzUHRyOworCiBwcml2YXRlOgogICAgIFNjb3BlT2Zmc2V0JiBhdCh1aW50
MzJfdCBpKQogICAgIHsKQEAgLTg2LDkgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKICAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMg
dGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9u
ZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBt
ZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KLSAgICAv
LyBGSVhNRTogQWxsb2NhdGUgdGhpcyBpbiB0aGUgcHJpbWl0aXZlIGdpZ2FjYWdlCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkyMQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY29wZU9mZnNldFtdPiBtX2FyZ3VtZW50czsKKyAgICBBcmd1bWVudHNQdHIg
bV9hcmd1bWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDU4IEBACisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgUHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGlu
IHNvbWUgZ2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgSWYgeW91IHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgY2xhc3MgdGhh
dCBrbm93cyB0aGF0IGl0IHNob3VsZCBiZSBpbiB0aGUgR2lnYWNhZ2UsIHRoZW4gd2UKKyAgICAg
ICAgd291bGQgY3JlYXRlIHRoZSBHaWdhY2FnZSBlcXVpdmFsZW50IG9mIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEIGFuZCBpdCB3b3VsZCBqdXN0IHdvcmsuCisgICAgICAgIAorICAgICAgICBCdXQg
dGhpcyBkb2VzIG5vdCB3b3JrIGlmIHdlIHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgcHJpbWl0
aXZlIHR5cGUuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYQorICAgICAgICBzb2x1dGlvbiBmb3IgdGhp
cyBwcm9ibGVtOiBDYWdlZFVuaXF1ZVB0cjw+LiBUaGlzIHdpbGwgaGFuZGxlIGFsbG9jYXRpb24K
KyAgICAgICAgKENhZ2VkVW5pcXVlUHRyPD46OmNyZWF0ZSgpKSBhbmQgZGVhbGxvY2F0aW9uIChp
biB0aGUgc3R5bGUgb2Ygc3RkOjp1bmlxdWVfcHRyKS4gSXQgaGFzIHRocmVlCisgICAgICAgIHZh
cmlhbnRzOgorICAgICAgICAKKyAgICAgICAgLSBOb24tYXJyYXkgdHlwZXMuCisgICAgICAgIC0g
QXJyYXlzIHRoYXQgZG9uJ3QgaGF2ZSBkZXN0cnVjdG9ycy4KKyAgICAgICAgLSBBcnJheXMgdGhh
dCBoYXZlIGRlc3RydWN0b3JzLgorICAgICAgICAKKyAgICAgICAgSnVzdCBsaWtlIHN0ZDo6dW5p
cXVlX3B0ciwgdGhlIGFycmF5IGNhc2UgaXMgdHJpZ2dlcmVkIGJ5IHNheWluZyAiW10iIGF0IHRo
ZSBlbmQgb2YgdGhlIHR5cGUuCisgICAgICAgIAorICAgICAgICBVbmxpa2Ugc3RkOjp1bmlxdWVf
cHRyIGFuZCBtb3N0IG90aGVyIHNtYXJ0IHBvaW50ZXJzLCB0aGUgd2hvbGUgcG9pbnQgb2YgdGhp
cyBzbWFydCBwb2ludGVyIGlzCisgICAgICAgIHRvIGRpY3RhdGUgd2hlcmUgdGhlIHRoaW5nIHlv
dSdyZSBwb2ludGluZyBhdCBpcyBhbGxvY2F0ZWQuIEZvciB0aGlzIHJlYXNvbiwgaXQgaGFzIHRv
IGtub3cgaG93CisgICAgICAgIHRvIGRvIHRoaW5ncyBsaWtlIHRoZSBhcnJheSBkZXN0cnVjdG9y
IHByb3RvY29sLiBTbyBpdCBjcmVhdGVzIGl0cyBvd246IHRoZSBDYWdlZFVuaXF1ZVB0ciBmb3IK
KyAgICAgICAgYXJyYXlzIHdpdGggZGVzdHJ1Y3RvcnMgaXMgYSBmYXQgcG9pbnRlciB0aGF0IHJl
bWVtYmVycyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4KKyAgICAgICAgCisgICAgICAgIENhZ2Vk
VW5pcXVlUHRyPD4gbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBsZWFrL3JlbGVhc2UgdGhlIHBvaW50
ZXIuIFRoaXMgaXMgc3RyaWN0ZXIgdGhhbiB3aGF0CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0ciBk
b2VzLCBhbmQgaXMgcHJvYmFibHkgYXBwcm9wcmlhdGUgZm9yIGFsbCBvZiB0aGUgcGxhY2VzIHdo
ZXJlIHdlIHdvdWxkIHVzZSB0aGlzCisgICAgICAgIHR5cGUuCisgICAgICAgIAorICAgICAgICBT
byBmYXIsIHdlIG9ubHkgdXNlIGl0IGZvciBTY29wZWRBcmd1bWVudHNUYWJsZTo6bV9hcmd1bWVu
dHMsIGJ1dCBJIHN1c3BlY3QgdGhhdCBpdCB3aWxsIGJlCisgICAgICAgIHVzZWZ1bCBpbiBvdGhl
ciBwbGFjZXMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0NhZ2VkVW5pcXVlUHRy
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Q2FnZWRVbmlxdWVQdHIp
OgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6
Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRy
Ojp+Q2FnZWRVbmlxdWVQdHIpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Z2V0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6
CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RG
OjpDYWdlZFVuaXF1ZVB0cjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNh
Z2VkVW5pcXVlUHRyOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1
ZVB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpv
cGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmRlc3Ryb3kp
OgorICAgICAgICAqIHd0Zi9HaWdhY2FnZS5jcHA6CisgICAgICAgIChHaWdhY2FnZTo6dHJ5TWFs
bG9jQXJyYXkpOgorICAgICAgICAoR2lnYWNhZ2U6Om1hbGxvYyk6CisgICAgICAgIChHaWdhY2Fn
ZTo6bWFsbG9jQXJyYXkpOgorICAgICAgICAqIHd0Zi9HaWdhY2FnZS5oOgorCiAyMDE3LTA4LTEx
ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW1dURl0g
TW92ZSBWYWx1ZVRvU3RyaW5nIGludG8gV1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDYyNSkKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNyBA
QAogCQkwRjVCRjE2NTFGMjMxNzgzMDAyOUQ5MUQgLyogTmF0dXJhbExvb3BzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVC
RjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R2lnYWNhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCRjE3NTFGMjNE
NDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2lnYWNhZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1RjNENjgxRjNGRUJBNjAwQjExNUEyIC8qIENh
Z2VkVW5pcXVlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhZ2VkVW5pcXVlUHRyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQ
cmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2Nr
ZWRQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJF
MURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NrZWRQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDksNiArNzUwLDcgQEAKIAkJCQlBOEE0NzI2NzE1MUE4
MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlFQjk1RTFFRjE2
MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJMEZFQzNDNEYxRjMyM0M2ODAw
RjU5QjZDIC8qIENhZ2VkUHRyLmggKi8sCisJCQkJMEY1RjNENjgxRjNGRUJBNjAwQjExNUEyIC8q
IENhZ2VkVW5pcXVlUHRyLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZGIC8qIENo
ZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQThBNDcyNkIxNTFBODI1QTAwNDEyM0ZGIC8qIENo
ZWNrZWRCb29sZWFuLmggKi8sCiAJCQkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2Nr
VHlwZS5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjIwNjI1KQor
KysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYg
KzE0LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQnl0ZU9yZGVyLmgKICAgICBDUFVUaW1lLmgK
ICAgICBDYWdlZFB0ci5oCisgICAgQ2FnZWRVbmlxdWVQdHIuaAogICAgIENsb2NrVHlwZS5oCiAg
ICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0NhZ2VkUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAko
cmV2aXNpb24gMjIwNjI1KQorKysgU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5k
ZXhUeXBlPgogICAgIFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4KSBjb25zdCB7IHJldHVy
biBnZXQoKVtpbmRleF07IH0KICAgICAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgVCogbV9w
dHI7CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DYWdlZFVuaXF1ZVB0ci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NhZ2VkVW5pcXVlUHRyLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvQ2FnZWRVbmlxdWVQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0NhZ2Vk
UHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBraW5k
LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorY2xhc3MgQ2FnZWRVbmlxdWVQ
dHIgOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENhZ2VkVW5pcXVl
UHRyKFQqIHB0ciA9IG51bGxwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwgVD4ocHRyKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoQ2FnZWRVbmlxdWVQdHImJiBw
dHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwgVD4ocHRyLm1fcHRyKQorICAgIHsKKyAgICAg
ICAgcHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIo
Y29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNyZWF0ZShBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxUKj4oR2lnYWNhZ2U6Om1hbGxvYyhraW5kLCBzaXplb2YoVCkpKTsKKyAgICAgICAgbmV3
IChyZXN1bHQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBDYWdl
ZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KENhZ2VkVW5pcXVlUHRyJiYgcHRyKQorICAgIHsKKyAgICAg
ICAgZGVzdHJveSgpOworICAgICAgICB0aGlzLT5tX3B0ciA9IHB0ci5tX3B0cjsKKyAgICAgICAg
cHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAK
KyAgICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KGNvbnN0IENhZ2VkVW5pcXVlUHRyJikgPSBk
ZWxldGU7CisgICAgCisgICAgfkNhZ2VkVW5pcXVlUHRyKCkKKyAgICB7CisgICAgICAgIGRlc3Ry
b3koKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgZGVzdHJveSgpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMtPm1fcHRyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLT5tX3B0ci0+flQoKTsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwgdGhpcy0+bV9w
dHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQsIHR5cGVuYW1l
IFQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0cjxraW5kLCBUW10sIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWU+Ojp0eXBlPiA6IHB1
YmxpYyBDYWdlZFB0cjxraW5kLCBUPiB7CitwdWJsaWM6CisgICAgQ2FnZWRVbmlxdWVQdHIoKSA6
IENhZ2VkUHRyPGtpbmQsIFQ+KCkgeyB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoVCogcHRy
KQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0cikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIENhZ2VkVW5pcXVlUHRyKENhZ2VkVW5pcXVlUHRyJiYgcHRyKQorICAgICAgICA6IENhZ2Vk
UHRyPGtpbmQsIFQ+KHB0ci5tX3B0cikKKyAgICB7CisgICAgICAgIHB0ci5tX3B0ciA9IG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKGNvbnN0IENhZ2VkVW5pcXVlUHRy
JikgPSBkZWxldGU7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBjcmVhdGUoc2l6ZV90IGNvdW50LCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxU
Kj4oR2lnYWNhZ2U6Om1hbGxvY0FycmF5KGtpbmQsIGNvdW50LCBzaXplb2YoVCkpKTsKKyAgICAg
ICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICBuZXcgKHJlc3VsdCArIGNvdW50KSBUKHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4gQ2Fn
ZWRVbmlxdWVQdHIocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9w
ZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsK
KyAgICAgICAgdGhpcy0+bV9wdHIgPSBwdHIubV9wdHI7CisgICAgICAgIHB0ci5tX3B0ciA9IG51
bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlx
dWVQdHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAor
ICAgIH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3koKQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLT5tX3B0cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUo
a2luZCwgdGhpcy0+bV9wdHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5k
IGtpbmQsIHR5cGVuYW1lIFQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0cjxraW5kLCBUW10sIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZh
bHVlPjo6dHlwZT4gOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENh
Z2VkVW5pcXVlUHRyKCkgOiBDYWdlZFB0cjxraW5kLCBUPigpIHsgfQorICAgIAorICAgIENhZ2Vk
VW5pcXVlUHRyKFQqIHB0ciwgc2l6ZV90IGNvdW50KQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQs
IFQ+KHB0cikKKyAgICAgICAgLCBtX2NvdW50KGNvdW50KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgQ2FnZWRVbmlxdWVQdHIoQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgICAgIDogQ2FnZWRQ
dHI8a2luZCwgVD4ocHRyLm1fcHRyKQorICAgICAgICAsIG1fY291bnQocHRyLm1fY291bnQpCisg
ICAgeworICAgICAgICBwdHIuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQ
dHIoY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNyZWF0ZShz
aXplX3QgY291bnQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIFQq
IHJlc3VsdCA9IHN0YXRpY19jYXN0PFQqPihHaWdhY2FnZTo6bWFsbG9jQXJyYXkoa2luZCwgY291
bnQsIHNpemVvZihUKSkpOworICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgIG5l
dyAocmVzdWx0ICsgY291bnQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4u
Lik7CisgICAgICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQsIGNvdW50KTsKKyAgICB9
CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0
cikKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgdGhpcy0+bV9wdHIgPSBwdHIu
bV9wdHI7CisgICAgICAgIG1fY291bnQgPSBwdHIubV9jb3VudDsKKyAgICAgICAgcHRyLmNsZWFy
KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQ
dHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAg
IH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3koKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
LT5tX3B0cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2hpbGUgKG1fY291bnQtLSkK
KyAgICAgICAgICAgIHRoaXMtPm1fcHRyW21fY291bnRdLn5UKCk7CisgICAgICAgIEdpZ2FjYWdl
OjpmcmVlKGtpbmQsIHRoaXMtPm1fcHRyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigp
CisgICAgeworICAgICAgICB0aGlzLT5tX3B0ciA9IG51bGxwdHI7CisgICAgICAgIG1fY291bnQg
PSAwOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgbV9jb3VudCB7IDAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNhZ2VkVW5pcXVlUHRyOworCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvR2ln
YWNhZ2UuY3BwCShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDE1IEBAIHZvaWQqIHRyeU1hbGxvYyhLaW5k
LCBzaXplX3Qgc2l6ZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCogdHJ5TWFsbG9j
QXJyYXkoS2luZCwgc2l6ZV90IG51bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpCit7Cisg
ICAgYXV0byByZXN1bHQgPSB0cnlGYXN0TWFsbG9jQXJyYXkobnVtRWxlbWVudHMsIGVsZW1lbnRT
aXplKTsKKyAgICB2b2lkKiByZWFsUmVzdWx0OworICAgIGlmIChyZXN1bHQuZ2V0VmFsdWUocmVh
bFJlc3VsdCkpCisgICAgICAgIHJldHVybiByZWFsUmVzdWx0OworICAgIHJldHVybiBudWxscHRy
OworfQorCiB2b2lkKiB0cnlBbGxvY2F0ZVZpcnR1YWxQYWdlcyhLaW5kLCBzaXplX3Qgc2l6ZSkK
IHsKICAgICByZXR1cm4gT1NBbGxvY2F0b3I6OnJlc2VydmVVbmNvbW1pdHRlZChzaXplKTsKQEAg
LTk5LDYgKzEwOCwxNSBAQCB2b2lkIGZyZWUoS2luZCBraW5kLCB2b2lkKiBwKQogICAgIFdURjo6
Y29tcGlsZXJGZW5jZSgpOwogfQogCit2b2lkKiB0cnlNYWxsb2NBcnJheShLaW5kIGtpbmQsIHNp
emVfdCBudW1FbGVtZW50cywgc2l6ZV90IGVsZW1lbnRTaXplKQoreworICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFNpemUgPSBlbGVtZW50U2l6ZTsKKyAgICBjaGVj
a2VkU2l6ZSAqPSBudW1FbGVtZW50czsKKyAgICBpZiAoY2hlY2tlZFNpemUuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gdHJ5TWFsbG9jKGtpbmQs
IGNoZWNrZWRTaXplLnVuc2FmZUdldCgpKTsKK30KKwogdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFs
UGFnZXMoS2luZCBraW5kLCBzaXplX3Qgc2l6ZSkKIHsKICAgICB2b2lkKiByZXN1bHQgPSBibWFs
bG9jOjphcGk6OnRyeUxhcmdlTWVtYWxpZ25WaXJ0dWFsKFdURjo6cGFnZVNpemUoKSwgc2l6ZSwg
Ym1hbGxvYzo6aGVhcEtpbmQoa2luZCkpOwpAQCAtMTE4LDMgKzEzNiwyMSBAQCB2b2lkIGZyZWVW
aXJ0dWFsUGFnZXMoS2luZCBraW5kLCB2b2lkKiBiCiB9IC8vIG5hbWVzcGFjZSBHaWdhY2FnZQog
I2VuZGlmCiAKK25hbWVzcGFjZSBHaWdhY2FnZSB7CisKK3ZvaWQqIG1hbGxvYyhLaW5kIGtpbmQs
IHNpemVfdCBzaXplKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRyeU1hbGxvYyhraW5kLCBzaXpl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQqIG1hbGxvY0FycmF5KEtpbmQga2luZCwgc2l6ZV90IG51bUVsZW1lbnRzLCBzaXplX3Qg
ZWxlbWVudFNpemUpCit7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5TWFsbG9jQXJyYXkoa2luZCwg
bnVtRWxlbWVudHMsIGVsZW1lbnRTaXplKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
R2lnYWNhZ2UuaAkocmV2aXNpb24gMjIwNjI1KQorKysgU291cmNlL1dURi93dGYvR2lnYWNhZ2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsOCBAQCBpbmxpbmUgdm9pZCBhbGlnbmVkRnJl
ZShLaW5kLCB2b2lkKiBwKSB7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jKEtp
bmQsIHNpemVfdCBzaXplKTsKIGlubGluZSB2b2lkIGZyZWUoS2luZCwgdm9pZCogcCkgeyBmYXN0
RnJlZShwKTsgfQogCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jQXJyYXkoS2lu
ZCwgc2l6ZV90IG51bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpOworCiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNpemUp
OwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBi
YXNlUHRyLCBzaXplX3Qgc2l6ZSk7CiAKQEAgLTk2LDkgKzk4LDE5IEBAIFdURl9FWFBPUlRfUFJJ
VkFURSB2b2lkIGFsaWduZWRGcmVlKEtpbmQKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkKiB0cnlN
YWxsb2MoS2luZCwgc2l6ZV90KTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZyZWUoS2luZCwg
dm9pZCopOwogCitXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCogdHJ5TWFsbG9jQXJyYXkoS2luZCwg
c2l6ZV90IG51bUVsZW1lbnRzLCBzaXplX3QgZWxlbWVudFNpemUpOworCiBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCogdHJ5QWxsb2NhdGVWaXJ0dWFsUGFnZXMoS2luZCwgc2l6ZV90IHNpemUpOwog
V1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZnJlZVZpcnR1YWxQYWdlcyhLaW5kLCB2b2lkKiBiYXNl
UHRyLCBzaXplX3Qgc2l6ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZW5kaWYKIAor
bmFtZXNwYWNlIEdpZ2FjYWdlIHsKKworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIG1hbGxvYyhL
aW5kLCBzaXplX3QpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIG1hbGxvY0FycmF5KEtpbmQs
IHNpemVfdCBudW1FbGVtZW50cywgc2l6ZV90IGVsZW1lbnRTaXplKTsKKworfSAvLyBuYW1lc3Bh
Y2UgR2lnYWNhZ2UKKworCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318016</attachid>
            <date>2017-08-13 15:48:46 -0700</date>
            <delta_ts>2017-08-14 09:53:14 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19546</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwNjI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGluIHNvbWUg
Z2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVXNlcyBDYWdlZFVuaXF1ZVB0cjw+IHRvIGNhZ2UgdGhlIFNjb3BlT2Zmc2V0IGFy
cmF5LgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50
c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OlNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaDoKKwogMjAxNy0wOC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZUTCdzIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9m
ZnNldCBuZWVkcyB0byBkbyBjYWdpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMwMiw2ICs2MzAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25TYwogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwK
ICAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgbV9qaXQuY2FnZShTY29wZWRBcmd1bWVudHNUYWJs
ZTo6QXJndW1lbnRzUHRyOjpraW5kLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIpLAogICAgICAgICBzY3JhdGNoUmVnKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0NSwxMCArMzU0NSwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuYW1lZENhc2Us
IG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9
IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOwotICAg
ICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMu
U2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBhcmd1
bWVudHMgPSBjYWdlZCgKKyAgICAgICAgICAgICAgICBTY29wZWRBcmd1bWVudHNUYWJsZTo6QXJn
dW1lbnRzUHRyOjpraW5kLAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJIGd1ZXNzIHdlIG5lZWQgdG8gY2FnZSBTY29wZWRBcmd1bWVu
dHM/Ci0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc0OTIxCiAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJ
bmRleCgKICAgICAgICAgICAgICAgICBtX2hlYXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1l
bnRzLCBhcmd1bWVudHMsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKICAgICAgICAgICAgIExW
YWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMihhZGRyZXNzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0NCw2ICsxNTQ0LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRTY29wZWRBcmd1bWVudHNHZQogICAgIEp1bXAgb3ZlcmZsb3dDYXNlID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhi
YXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKICAgICBs
b2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJn
dW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBjYWdlKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpBcmd1
bWVudHNQdHI6OmtpbmQsIHNjcmF0Y2gpOwogICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9m
ZnNldCkpKTsKICAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1l
c0VpZ2h0LCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1Rh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5jcHAJKHJldmlzaW9uIDIyMDYyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
MCw3ICs2MCw3IEBAIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiBTY29wZWRBcmd1bWVudHNUYWIKIHsK
ICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSogcmVzdWx0ID0gY3JlYXRlKHZtKTsKICAgICByZXN1
bHQtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAgIHJlc3VsdC0+bV9hcmd1bWVudHMgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNjb3BlT2Zmc2V0W10+KGxlbmd0aCk7CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50
cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKGxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNzUsNyArNzUsNyBAQCBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRz
VGFiCiBTY29wZWRBcmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFibGU6OnNldExlbmd0
aChWTSYgdm0sIHVpbnQzMl90IG5ld0xlbmd0aCkKIHsKICAgICBpZiAoTElLRUxZKCFtX2xvY2tl
ZCkpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNjb3BlT2Zmc2V0W10+IG5ld0FyZ3VtZW50
cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVPZmZzZXRbXT4obmV3TGVuZ3RoKTsKKyAgICAgICAg
QXJndW1lbnRzUHRyIG5ld0FyZ3VtZW50cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKG5ld0xlbmd0
aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKG1fbGVuZ3RoLCBuZXdMZW5n
dGgpOyBpLS07KQogICAgICAgICAgICAgbmV3QXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07
CiAgICAgICAgIG1fbGVuZ3RoID0gbmV3TGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIK
ICNpbmNsdWRlICJTY29wZU9mZnNldC5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0NhZ2VkVW5pcXVlUHRyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03
Nyw2ICs3OCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3Ro
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2xlbmd0
aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQXJndW1lbnRzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2FyZ3VtZW50cyk7IH0KIAor
ICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8R2lnYWNhZ2U6OlByaW1pdGl2ZSwgU2NvcGVPZmZz
ZXRbXT4gQXJndW1lbnRzUHRyOworCiBwcml2YXRlOgogICAgIFNjb3BlT2Zmc2V0JiBhdCh1aW50
MzJfdCBpKQogICAgIHsKQEAgLTg2LDkgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1aW50
MzJfdCBtX2xlbmd0aDsKICAgICBib29sIG1fbG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMg
dGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9u
ZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhlIG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBt
ZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVlZCB0byBtYWtlIGEgY29weSBmaXJzdC4KLSAgICAv
LyBGSVhNRTogQWxsb2NhdGUgdGhpcyBpbiB0aGUgcHJpbWl0aXZlIGdpZ2FjYWdlCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkyMQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTY29wZU9mZnNldFtdPiBtX2FyZ3VtZW50czsKKyAgICBBcmd1bWVudHNQdHIg
bV9hcmd1bWVudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MjA2MjUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDU4IEBACisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgUHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGlu
IHNvbWUgZ2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgSWYgeW91IHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgY2xhc3MgdGhh
dCBrbm93cyB0aGF0IGl0IHNob3VsZCBiZSBpbiB0aGUgR2lnYWNhZ2UsIHRoZW4gd2UKKyAgICAg
ICAgd291bGQgY3JlYXRlIHRoZSBHaWdhY2FnZSBlcXVpdmFsZW50IG9mIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEIGFuZCBpdCB3b3VsZCBqdXN0IHdvcmsuCisgICAgICAgIAorICAgICAgICBCdXQg
dGhpcyBkb2VzIG5vdCB3b3JrIGlmIHdlIHdhbnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgcHJpbWl0
aXZlIHR5cGUuIFNvLCB0aGlzIHBhdGNoIGFkZHMgYQorICAgICAgICBzb2x1dGlvbiBmb3IgdGhp
cyBwcm9ibGVtOiBDYWdlZFVuaXF1ZVB0cjw+LiBUaGlzIHdpbGwgaGFuZGxlIGFsbG9jYXRpb24K
KyAgICAgICAgKENhZ2VkVW5pcXVlUHRyPD46OmNyZWF0ZSgpKSBhbmQgZGVhbGxvY2F0aW9uIChp
biB0aGUgc3R5bGUgb2Ygc3RkOjp1bmlxdWVfcHRyKS4gSXQgaGFzIHRocmVlCisgICAgICAgIHZh
cmlhbnRzOgorICAgICAgICAKKyAgICAgICAgLSBOb24tYXJyYXkgdHlwZXMuCisgICAgICAgIC0g
QXJyYXlzIHRoYXQgZG9uJ3QgaGF2ZSBkZXN0cnVjdG9ycy4KKyAgICAgICAgLSBBcnJheXMgdGhh
dCBoYXZlIGRlc3RydWN0b3JzLgorICAgICAgICAKKyAgICAgICAgSnVzdCBsaWtlIHN0ZDo6dW5p
cXVlX3B0ciwgdGhlIGFycmF5IGNhc2UgaXMgdHJpZ2dlcmVkIGJ5IHNheWluZyAiW10iIGF0IHRo
ZSBlbmQgb2YgdGhlIHR5cGUuCisgICAgICAgIAorICAgICAgICBVbmxpa2Ugc3RkOjp1bmlxdWVf
cHRyIGFuZCBtb3N0IG90aGVyIHNtYXJ0IHBvaW50ZXJzLCB0aGUgd2hvbGUgcG9pbnQgb2YgdGhp
cyBzbWFydCBwb2ludGVyIGlzCisgICAgICAgIHRvIGRpY3RhdGUgd2hlcmUgdGhlIHRoaW5nIHlv
dSdyZSBwb2ludGluZyBhdCBpcyBhbGxvY2F0ZWQuIEZvciB0aGlzIHJlYXNvbiwgaXQgaGFzIHRv
IGtub3cgaG93CisgICAgICAgIHRvIGRvIHRoaW5ncyBsaWtlIHRoZSBhcnJheSBkZXN0cnVjdG9y
IHByb3RvY29sLiBTbyBpdCBjcmVhdGVzIGl0cyBvd246IHRoZSBDYWdlZFVuaXF1ZVB0ciBmb3IK
KyAgICAgICAgYXJyYXlzIHdpdGggZGVzdHJ1Y3RvcnMgaXMgYSBmYXQgcG9pbnRlciB0aGF0IHJl
bWVtYmVycyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheS4KKyAgICAgICAgCisgICAgICAgIENhZ2Vk
VW5pcXVlUHRyPD4gbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBsZWFrL3JlbGVhc2UgdGhlIHBvaW50
ZXIuIFRoaXMgaXMgc3RyaWN0ZXIgdGhhbiB3aGF0CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0ciBk
b2VzLCBhbmQgaXMgcHJvYmFibHkgYXBwcm9wcmlhdGUgZm9yIGFsbCBvZiB0aGUgcGxhY2VzIHdo
ZXJlIHdlIHdvdWxkIHVzZSB0aGlzCisgICAgICAgIHR5cGUuCisgICAgICAgIAorICAgICAgICBT
byBmYXIsIHdlIG9ubHkgdXNlIGl0IGZvciBTY29wZWRBcmd1bWVudHNUYWJsZTo6bV9hcmd1bWVu
dHMsIGJ1dCBJIHN1c3BlY3QgdGhhdCBpdCB3aWxsIGJlCisgICAgICAgIHVzZWZ1bCBpbiBvdGhl
ciBwbGFjZXMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0NhZ2VkVW5pcXVlUHRy
Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Q2FnZWRVbmlxdWVQdHIp
OgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6
Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yPSk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRy
Ojp+Q2FnZWRVbmlxdWVQdHIpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Z2V0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6
CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RG
OjpDYWdlZFVuaXF1ZVB0cjo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNh
Z2VkVW5pcXVlUHRyOjpvcGVyYXRvciogY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1
ZVB0cjo6b3BlcmF0b3ItPiBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpv
cGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6OmRlc3Ryb3kp
OgorICAgICAgICAqIHd0Zi9HaWdhY2FnZS5jcHA6CisgICAgICAgIChHaWdhY2FnZTo6dHJ5TWFs
bG9jQXJyYXkpOgorICAgICAgICAoR2lnYWNhZ2U6Om1hbGxvYyk6CisgICAgICAgIChHaWdhY2Fn
ZTo6bWFsbG9jQXJyYXkpOgorICAgICAgICAqIHd0Zi9HaWdhY2FnZS5oOgorCiAyMDE3LTA4LTEx
ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW1dURl0g
TW92ZSBWYWx1ZVRvU3RyaW5nIGludG8gV1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDYyNSkKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsNyBA
QAogCQkwRjVCRjE2NTFGMjMxNzgzMDAyOUQ5MUQgLyogTmF0dXJhbExvb3BzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hdHVyYWxMb29wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVC
RjE3NDFGMjNENDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R2lnYWNhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCRjE3NTFGMjNE
NDlBMDAyOUQ5MUQgLyogR2lnYWNhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2lnYWNhZ2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY1RjNENjgxRjNGRUJBNjAwQjExNUEyIC8qIENh
Z2VkVW5pcXVlUHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhZ2VkVW5pcXVlUHRyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJEMURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQ
cmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2Nr
ZWRQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjBGMzJF
MURGQ0JEMUIwMDQxNkQ2QyAvKiBMb2NrZWRQcmludFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMb2NrZWRQcmludFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjY2QjI4MDFEQzk3QkFCMDA0QTFEM0YgLyogQ2xvY2tUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb2NrVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NDksNiArNzUwLDcgQEAKIAkJCQlBOEE0NzI2NzE1MUE4
MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywKIAkJCQlFQjk1RTFFRjE2
MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJMEZFQzNDNEYxRjMyM0M2ODAw
RjU5QjZDIC8qIENhZ2VkUHRyLmggKi8sCisJCQkJMEY1RjNENjgxRjNGRUJBNjAwQjExNUEyIC8q
IENhZ2VkVW5pcXVlUHRyLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZGIC8qIENo
ZWNrZWRBcml0aG1ldGljLmggKi8sCiAJCQkJQThBNDcyNkIxNTFBODI1QTAwNDEyM0ZGIC8qIENo
ZWNrZWRCb29sZWFuLmggKi8sCiAJCQkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2Nr
VHlwZS5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjIwNjI1KQor
KysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYg
KzE0LDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgQnl0ZU9yZGVyLmgKICAgICBDUFVUaW1lLmgK
ICAgICBDYWdlZFB0ci5oCisgICAgQ2FnZWRVbmlxdWVQdHIuaAogICAgIENsb2NrVHlwZS5oCiAg
ICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENvbXBpbGVyLmgKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0NhZ2VkUHRyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAko
cmV2aXNpb24gMjIwNjI1KQorKysgU291cmNlL1dURi93dGYvQ2FnZWRQdHIuaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5k
ZXhUeXBlPgogICAgIFQmIG9wZXJhdG9yW10oSW5kZXhUeXBlIGluZGV4KSBjb25zdCB7IHJldHVy
biBnZXQoKVtpbmRleF07IH0KICAgICAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgVCogbV9w
dHI7CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9DYWdlZFVuaXF1ZVB0ci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NhZ2VkVW5pcXVlUHRyLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvQ2FnZWRVbmlxdWVQdHIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0NhZ2Vk
UHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBraW5k
LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBFbmFibGUgPSB2b2lkPgorY2xhc3MgQ2FnZWRVbmlxdWVQ
dHIgOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENhZ2VkVW5pcXVl
UHRyKFQqIHB0ciA9IG51bGxwdHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwgVD4ocHRyKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoQ2FnZWRVbmlxdWVQdHImJiBw
dHIpCisgICAgICAgIDogQ2FnZWRQdHI8a2luZCwgVD4ocHRyLm1fcHRyKQorICAgIHsKKyAgICAg
ICAgcHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIo
Y29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNyZWF0ZShBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNf
Y2FzdDxUKj4oR2lnYWNhZ2U6Om1hbGxvYyhraW5kLCBzaXplb2YoVCkpKTsKKyAgICAgICAgbmV3
IChyZXN1bHQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLik7CisgICAg
ICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBDYWdl
ZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KENhZ2VkVW5pcXVlUHRyJiYgcHRyKQorICAgIHsKKyAgICAg
ICAgZGVzdHJveSgpOworICAgICAgICB0aGlzLT5tX3B0ciA9IHB0ci5tX3B0cjsKKyAgICAgICAg
cHRyLm1fcHRyID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICAK
KyAgICBDYWdlZFVuaXF1ZVB0ciYgb3BlcmF0b3I9KGNvbnN0IENhZ2VkVW5pcXVlUHRyJikgPSBk
ZWxldGU7CisgICAgCisgICAgfkNhZ2VkVW5pcXVlUHRyKCkKKyAgICB7CisgICAgICAgIGRlc3Ry
b3koKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgZGVzdHJveSgpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMtPm1fcHRyKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
aGlzLT5tX3B0ci0+flQoKTsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUoa2luZCwgdGhpcy0+bV9w
dHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5kIGtpbmQsIHR5cGVuYW1l
IFQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0cjxraW5kLCBUW10sIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWU+Ojp0eXBlPiA6IHB1
YmxpYyBDYWdlZFB0cjxraW5kLCBUPiB7CitwdWJsaWM6CisgICAgQ2FnZWRVbmlxdWVQdHIoKSA6
IENhZ2VkUHRyPGtpbmQsIFQ+KCkgeyB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHIoVCogcHRy
KQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0cikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIENhZ2VkVW5pcXVlUHRyKENhZ2VkVW5pcXVlUHRyJiYgcHRyKQorICAgICAgICA6IENhZ2Vk
UHRyPGtpbmQsIFQ+KHB0ci5tX3B0cikKKyAgICB7CisgICAgICAgIHB0ci5tX3B0ciA9IG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKGNvbnN0IENhZ2VkVW5pcXVlUHRy
JikgPSBkZWxldGU7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBjcmVhdGUoc2l6ZV90IGNvdW50LCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxU
Kj4oR2lnYWNhZ2U6Om1hbGxvY0FycmF5KGtpbmQsIGNvdW50LCBzaXplb2YoVCkpKTsKKyAgICAg
ICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICBuZXcgKHJlc3VsdCArIGNvdW50KSBUKHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4gQ2Fn
ZWRVbmlxdWVQdHIocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9w
ZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsK
KyAgICAgICAgdGhpcy0+bV9wdHIgPSBwdHIubV9wdHI7CisgICAgICAgIHB0ci5tX3B0ciA9IG51
bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlx
dWVQdHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAor
ICAgIH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3koKQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLT5tX3B0cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR2lnYWNhZ2U6OmZyZWUo
a2luZCwgdGhpcy0+bV9wdHIpOworICAgIH0KK307CisKK3RlbXBsYXRlPEdpZ2FjYWdlOjpLaW5k
IGtpbmQsIHR5cGVuYW1lIFQ+CitjbGFzcyBDYWdlZFVuaXF1ZVB0cjxraW5kLCBUW10sIHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZh
bHVlPjo6dHlwZT4gOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENh
Z2VkVW5pcXVlUHRyKCkgOiBDYWdlZFB0cjxraW5kLCBUPigpIHsgfQorICAgIAorICAgIENhZ2Vk
VW5pcXVlUHRyKFQqIHB0ciwgc2l6ZV90IGNvdW50KQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQs
IFQ+KHB0cikKKyAgICAgICAgLCBtX2NvdW50KGNvdW50KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgQ2FnZWRVbmlxdWVQdHIoQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgICAgIDogQ2FnZWRQ
dHI8a2luZCwgVD4ocHRyLm1fcHRyKQorICAgICAgICAsIG1fY291bnQocHRyLm1fY291bnQpCisg
ICAgeworICAgICAgICBwdHIuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQ
dHIoY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIENhZ2VkVW5pcXVlUHRyIGNyZWF0ZShz
aXplX3QgY291bnQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIFQq
IHJlc3VsdCA9IHN0YXRpY19jYXN0PFQqPihHaWdhY2FnZTo6bWFsbG9jQXJyYXkoa2luZCwgY291
bnQsIHNpemVvZihUKSkpOworICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgIG5l
dyAocmVzdWx0ICsgY291bnQpIFQoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4u
Lik7CisgICAgICAgIHJldHVybiBDYWdlZFVuaXF1ZVB0cihyZXN1bHQsIGNvdW50KTsKKyAgICB9
CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0
cikKKyAgICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgdGhpcy0+bV9wdHIgPSBwdHIu
bV9wdHI7CisgICAgICAgIG1fY291bnQgPSBwdHIubV9jb3VudDsKKyAgICAgICAgcHRyLmNsZWFy
KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQ
dHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAg
IH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3koKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
LT5tX3B0cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2hpbGUgKG1fY291bnQtLSkK
KyAgICAgICAgICAgIHRoaXMtPm1fcHRyW21fY291bnRdLn5UKCk7CisgICAgICAgIEdpZ2FjYWdl
OjpmcmVlKGtpbmQsIHRoaXMtPm1fcHRyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigp
CisgICAgeworICAgICAgICB0aGlzLT5tX3B0ciA9IG51bGxwdHI7CisgICAgICAgIG1fY291bnQg
PSAwOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgbV9jb3VudCB7IDAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkNhZ2VkVW5pcXVlUHRyOworCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9HaWdhY2FnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvR2ln
YWNhZ2UuY3BwCShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2FnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwzICsxMTgsMzAgQEAgdm9pZCBmcmVlVmlydHVhbFBh
Z2VzKEtpbmQga2luZCwgdm9pZCogYgogfSAvLyBuYW1lc3BhY2UgR2lnYWNhZ2UKICNlbmRpZgog
CituYW1lc3BhY2UgR2lnYWNhZ2UgeworCit2b2lkKiB0cnlNYWxsb2NBcnJheShLaW5kIGtpbmQs
IHNpemVfdCBudW1FbGVtZW50cywgc2l6ZV90IGVsZW1lbnRTaXplKQoreworICAgIENoZWNrZWQ8
c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFNpemUgPSBlbGVtZW50U2l6ZTsKKyAgICBj
aGVja2VkU2l6ZSAqPSBudW1FbGVtZW50czsKKyAgICBpZiAoY2hlY2tlZFNpemUuaGFzT3ZlcmZs
b3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gdHJ5TWFsbG9jKGtp
bmQsIGNoZWNrZWRTaXplLnVuc2FmZUdldCgpKTsKK30KKwordm9pZCogbWFsbG9jKEtpbmQga2lu
ZCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5TWFsbG9jKGtpbmQsIHNp
emUpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCogbWFsbG9jQXJyYXkoS2luZCBraW5kLCBzaXplX3QgbnVtRWxlbWVudHMsIHNpemVf
dCBlbGVtZW50U2l6ZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlNYWxsb2NBcnJheShraW5k
LCBudW1FbGVtZW50cywgZWxlbWVudFNpemUpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgR2lnYWNhZ2UKKwpJbmRl
eDogU291cmNlL1dURi93dGYvR2lnYWNhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9HaWdhY2FnZS5oCShyZXZpc2lvbiAyMjA2MjUpCisrKyBTb3VyY2UvV1RGL3d0Zi9HaWdhY2Fn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMyArMTAyLDEzIEBAIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGZyZWVWaXJ0dWFsUGFnZXMKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCiAjZW5kaWYK
IAorbmFtZXNwYWNlIEdpZ2FjYWdlIHsKKworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIHRyeU1h
bGxvY0FycmF5KEtpbmQsIHNpemVfdCBudW1FbGVtZW50cywgc2l6ZV90IGVsZW1lbnRTaXplKTsK
KworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQqIG1hbGxvYyhLaW5kLCBzaXplX3QpOworV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQqIG1hbGxvY0FycmF5KEtpbmQsIHNpemVfdCBudW1FbGVtZW50cywg
c2l6ZV90IGVsZW1lbnRTaXplKTsKKworfSAvLyBuYW1lc3BhY2UgR2lnYWNhZ2UKKworCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318043</attachid>
            <date>2017-08-14 09:53:14 -0700</date>
            <delta_ts>2017-08-14 10:09:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19556</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwNzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE3LTA4LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UHV0IHRoZSBTY29wZWRBcmd1bWVudHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGluIHNvbWUg
Z2lnYWNhZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NDkyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVXNlcyBDYWdlZFVuaXF1ZVB0cjw+IHRvIGNhZ2UgdGhlIFNjb3BlT2Zmc2V0IGFy
cmF5LgorCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50
c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcDoK
KyAgICAgICAgKEpTQzo6U2NvcGVkQXJndW1lbnRzVGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OlNjb3BlZEFyZ3VtZW50c1RhYmxlOjpzZXRMZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUv
U2NvcGVkQXJndW1lbnRzVGFibGUuaDoKKwogMjAxNy0wOC0xNCAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgR2FyZGVuaW5nOiBmaXggV2luZG93cyBidWlsZC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAyMjA3MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMwNCw2ICs2MzA0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TYwogICAgIG1faml0LmxvYWRQdHIoCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50
c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwKICAgICAgICAgc2NyYXRjaFJlZyk7CisgICAg
bV9qaXQuY2FnZShTY29wZWRBcmd1bWVudHNUYWJsZTo6QXJndW1lbnRzUHRyOjpraW5kLCBzY3Jh
dGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc2NyYXRjaFJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIp
LAogICAgICAgICBzY3JhdGNoUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIyMDcwMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0
NywxMCArMzU0NywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhuYW1lZENhc2UsIG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFw
cy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOwotICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9
IG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1l
bnRzKTsKKyAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudHMgPSBjYWdlZCgKKyAgICAgICAgICAg
ICAgICBTY29wZWRBcmd1bWVudHNUYWJsZTo6QXJndW1lbnRzUHRyOjpraW5kLAorICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVf
YXJndW1lbnRzKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJIGd1ZXNz
IHdlIG5lZWQgdG8gY2FnZSBTY29wZWRBcmd1bWVudHM/Ci0gICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0OTIxCiAgICAgICAgICAgICBUeXBl
ZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBtX2hl
YXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1lbnRzLCBhcmd1bWVudHMsIG1fb3V0Lnplcm9F
eHRQdHIoaW5kZXgpKTsKICAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0Lmxv
YWQzMihhZGRyZXNzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAyMjA3MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0NCw2
ICsxNTQ0LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZQogICAg
IEp1bXAgb3ZlcmZsb3dDYXNlID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgc2Ny
YXRjaDIpOwogICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNl
dE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKICAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgU2Nv
cGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLCBzY3JhdGNoKTsKKyAgICBj
YWdlKFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpBcmd1bWVudHNQdHI6OmtpbmQsIHNjcmF0Y2gpOwog
ICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0
Y2gpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0
ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKICAgICBsb2FkVmFsdWUoQmFz
ZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1lc0VpZ2h0LCBKU0Vudmlyb25tZW50UmVjb3Jk
OjpvZmZzZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50c1RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5jcHAJKHJldmlz
aW9uIDIyMDcwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3Vt
ZW50c1RhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02MCw3ICs2MCw3IEBAIFNjb3BlZEFyZ3VtZW50
c1RhYmxlKiBTY29wZWRBcmd1bWVudHNUYWIKIHsKICAgICBTY29wZWRBcmd1bWVudHNUYWJsZSog
cmVzdWx0ID0gY3JlYXRlKHZtKTsKICAgICByZXN1bHQtPm1fbGVuZ3RoID0gbGVuZ3RoOwotICAg
IHJlc3VsdC0+bV9hcmd1bWVudHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNjb3BlT2Zmc2V0W10+KGxl
bmd0aCk7CisgICAgcmVzdWx0LT5tX2FyZ3VtZW50cyA9IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKGxl
bmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNzUsNyArNzUsNyBAQCBTY29wZWRB
cmd1bWVudHNUYWJsZSogU2NvcGVkQXJndW1lbnRzVGFiCiBTY29wZWRBcmd1bWVudHNUYWJsZSog
U2NvcGVkQXJndW1lbnRzVGFibGU6OnNldExlbmd0aChWTSYgdm0sIHVpbnQzMl90IG5ld0xlbmd0
aCkKIHsKICAgICBpZiAoTElLRUxZKCFtX2xvY2tlZCkpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFNjb3BlT2Zmc2V0W10+IG5ld0FyZ3VtZW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVP
ZmZzZXRbXT4obmV3TGVuZ3RoKTsKKyAgICAgICAgQXJndW1lbnRzUHRyIG5ld0FyZ3VtZW50cyA9
IEFyZ3VtZW50c1B0cjo6Y3JlYXRlKG5ld0xlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHN0ZDo6bWluKG1fbGVuZ3RoLCBuZXdMZW5ndGgpOyBpLS07KQogICAgICAgICAgICAgbmV3
QXJndW1lbnRzW2ldID0gbV9hcmd1bWVudHNbaV07CiAgICAgICAgIG1fbGVuZ3RoID0gbmV3TGVu
Z3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29w
ZWRBcmd1bWVudHNUYWJsZS5oCShyZXZpc2lvbiAyMjA3MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHNUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTY29wZU9mZnNldC5oIgog
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0NhZ2VkVW5pcXVlUHRy
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC03Nyw2ICs3OCw4IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFNjb3BlZEFyZ3VtZW50c1RhYmxlLCBtX2xlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQXJndW1lbnRzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3Vt
ZW50c1RhYmxlLCBtX2FyZ3VtZW50cyk7IH0KIAorICAgIHR5cGVkZWYgQ2FnZWRVbmlxdWVQdHI8
R2lnYWNhZ2U6OlByaW1pdGl2ZSwgU2NvcGVPZmZzZXRbXT4gQXJndW1lbnRzUHRyOworCiBwcml2
YXRlOgogICAgIFNjb3BlT2Zmc2V0JiBhdCh1aW50MzJfdCBpKQogICAgIHsKQEAgLTg2LDkgKzg5
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB1aW50MzJfdCBtX2xlbmd0aDsKICAgICBib29sIG1f
bG9ja2VkOyAvLyBCZWluZyBsb2NrZWQgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbXVsdGlwbGUgcmVm
ZXJlbmNlcyB0byB0aGlzIG9iamVjdCBhbmQgbm9uZSBvZiB0aGVtIGV4cGVjdCB0byBzZWUgdGhl
IG90aGVycycgbW9kaWZpY2F0aW9ucy4gVGhpcyBtZWFucyB0aGF0IG1vZGlmaWNhdGlvbnMgbmVl
ZCB0byBtYWtlIGEgY29weSBmaXJzdC4KLSAgICAvLyBGSVhNRTogQWxsb2NhdGUgdGhpcyBpbiB0
aGUgcHJpbWl0aXZlIGdpZ2FjYWdlCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NDkyMQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTY29wZU9mZnNldFtdPiBt
X2FyZ3VtZW50czsKKyAgICBBcmd1bWVudHNQdHIgbV9hcmd1bWVudHM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA3MDEpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDE3LTA4LTEyICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgUHV0IHRoZSBTY29wZWRBcmd1bWVu
dHNUYWJsZSdzIFNjb3BlT2Zmc2V0IGFycmF5IGluIHNvbWUgZ2lnYWNhZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NDkyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSWYgeW91IHdhbnQg
dG8gc3RkOjp1bmlxdWVfcHRyIGEgY2xhc3MgdGhhdCBrbm93cyB0aGF0IGl0IHNob3VsZCBiZSBp
biB0aGUgR2lnYWNhZ2UsIHRoZW4gd2UKKyAgICAgICAgd291bGQgY3JlYXRlIHRoZSBHaWdhY2Fn
ZSBlcXVpdmFsZW50IG9mIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGFuZCBpdCB3b3VsZCBqdXN0
IHdvcmsuCisgICAgICAgIAorICAgICAgICBCdXQgdGhpcyBkb2VzIG5vdCB3b3JrIGlmIHdlIHdh
bnQgdG8gc3RkOjp1bmlxdWVfcHRyIGEgcHJpbWl0aXZlIHR5cGUuIFNvLCB0aGlzIHBhdGNoIGFk
ZHMgYQorICAgICAgICBzb2x1dGlvbiBmb3IgdGhpcyBwcm9ibGVtOiBDYWdlZFVuaXF1ZVB0cjw+
LiBUaGlzIHdpbGwgaGFuZGxlIGFsbG9jYXRpb24KKyAgICAgICAgKENhZ2VkVW5pcXVlUHRyPD46
OmNyZWF0ZSgpKSBhbmQgZGVhbGxvY2F0aW9uIChpbiB0aGUgc3R5bGUgb2Ygc3RkOjp1bmlxdWVf
cHRyKS4gSXQgaGFzIHRocmVlCisgICAgICAgIHZhcmlhbnRzOgorICAgICAgICAKKyAgICAgICAg
LSBOb24tYXJyYXkgdHlwZXMuCisgICAgICAgIC0gQXJyYXlzIHRoYXQgZG9uJ3QgaGF2ZSBkZXN0
cnVjdG9ycy4KKyAgICAgICAgLSBBcnJheXMgdGhhdCBoYXZlIGRlc3RydWN0b3JzLgorICAgICAg
ICAKKyAgICAgICAgSnVzdCBsaWtlIHN0ZDo6dW5pcXVlX3B0ciwgdGhlIGFycmF5IGNhc2UgaXMg
dHJpZ2dlcmVkIGJ5IHNheWluZyAiW10iIGF0IHRoZSBlbmQgb2YgdGhlIHR5cGUuCisgICAgICAg
IAorICAgICAgICBVbmxpa2Ugc3RkOjp1bmlxdWVfcHRyIGFuZCBtb3N0IG90aGVyIHNtYXJ0IHBv
aW50ZXJzLCB0aGUgd2hvbGUgcG9pbnQgb2YgdGhpcyBzbWFydCBwb2ludGVyIGlzCisgICAgICAg
IHRvIGRpY3RhdGUgd2hlcmUgdGhlIHRoaW5nIHlvdSdyZSBwb2ludGluZyBhdCBpcyBhbGxvY2F0
ZWQuIEZvciB0aGlzIHJlYXNvbiwgaXQgaGFzIHRvIGtub3cgaG93CisgICAgICAgIHRvIGRvIHRo
aW5ncyBsaWtlIHRoZSBhcnJheSBkZXN0cnVjdG9yIHByb3RvY29sLiBTbyBpdCBjcmVhdGVzIGl0
cyBvd246IHRoZSBDYWdlZFVuaXF1ZVB0ciBmb3IKKyAgICAgICAgYXJyYXlzIHdpdGggZGVzdHJ1
Y3RvcnMgaXMgYSBmYXQgcG9pbnRlciB0aGF0IHJlbWVtYmVycyB0aGUgbGVuZ3RoIG9mIHRoZSBh
cnJheS4KKyAgICAgICAgCisgICAgICAgIENhZ2VkVW5pcXVlUHRyPD4gbWFrZXMgaXQgaW1wb3Nz
aWJsZSB0byBsZWFrL3JlbGVhc2UgdGhlIHBvaW50ZXIuIFRoaXMgaXMgc3RyaWN0ZXIgdGhhbiB3
aGF0CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0ciBkb2VzLCBhbmQgaXMgcHJvYmFibHkgYXBwcm9w
cmlhdGUgZm9yIGFsbCBvZiB0aGUgcGxhY2VzIHdoZXJlIHdlIHdvdWxkIHVzZSB0aGlzCisgICAg
ICAgIHR5cGUuCisgICAgICAgIAorICAgICAgICBTbyBmYXIsIHdlIG9ubHkgdXNlIGl0IGZvciBT
Y29wZWRBcmd1bWVudHNUYWJsZTo6bV9hcmd1bWVudHMsIGJ1dCBJIHN1c3BlY3QgdGhhdCBpdCB3
aWxsIGJlCisgICAgICAgIHVzZWZ1bCBpbiBvdGhlciBwbGFjZXMuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogd3RmL0NhZ2VkVW5pcXVlUHRyLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpD
YWdlZFVuaXF1ZVB0cjo6Q2FnZWRVbmlxdWVQdHIpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1
ZVB0cjo6Y3JlYXRlKToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6Om9wZXJhdG9yPSk6
CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjp+Q2FnZWRVbmlxdWVQdHIpOgorICAgICAg
ICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRV
bmlxdWVQdHI6OmdldE1heUJlTnVsbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVl
UHRyOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6Q2FnZWRVbmlxdWVQdHI6Om9w
ZXJhdG9yIT0gY29uc3QpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6b3BlcmF0b3Ig
Ym9vbCBjb25zdCk6CisgICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRvciogY29u
c3QpOgorICAgICAgICAoV1RGOjpDYWdlZFVuaXF1ZVB0cjo6b3BlcmF0b3ItPiBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkNhZ2VkVW5pcXVlUHRyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAg
KFdURjo6Q2FnZWRVbmlxdWVQdHI6OmRlc3Ryb3kpOgorICAgICAgICAqIHd0Zi9HaWdhY2FnZS5j
cHA6CisgICAgICAgIChHaWdhY2FnZTo6dHJ5TWFsbG9jQXJyYXkpOgorICAgICAgICAoR2lnYWNh
Z2U6Om1hbGxvYyk6CisgICAgICAgIChHaWdhY2FnZTo6bWFsbG9jQXJyYXkpOgorICAgICAgICAq
IHd0Zi9HaWdhY2FnZS5oOgorCiAyMDE3LTA4LTExICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJlcGxhY2UgREFUQV9UUkFOU0ZFUl9JVEVNUyBieSBhIHJ1bnRp
bWUgZmxhZyBhbmQgYWRkIGEgc3R1YiBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA3MDEpCisrKyBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
NiArMTgzLDcgQEAKIAkJMEY1QkYxNjUxRjIzMTc4MzAwMjlEOTFEIC8qIE5hdHVyYWxMb29wcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBOYXR1cmFsTG9vcHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY1QkYxNzQxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEdpZ2FjYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1
QkYxNzUxRjIzRDQ5QTAwMjlEOTFEIC8qIEdpZ2FjYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdpZ2Fj
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNUYzRDY4MUYzRkVCQTYwMEIx
MTVBMiAvKiBDYWdlZFVuaXF1ZVB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWdlZFVuaXF1ZVB0ci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYwRjMyRDFERkNCRDFCMDA0MTZENkMg
LyogTG9ja2VkUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTG9ja2VkUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjYwRjMyRTFERkNCRDFCMDA0MTZENkMgLyogTG9ja2VkUHJpbnRTdHJlYW0uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9ja2VkUHJpbnRTdHJlYW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkIyODAxREM5N0JBQjAwNEExRDNGIC8qIENsb2NrVHlw
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9ja1R5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ5LDYgKzc1MCw3IEBACiAJCQkJQThB
NDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCiAJCQkJ
RUI5NUUxRUYxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovLAogCQkJCTBGRUMzQzRG
MUYzMjNDNjgwMEY1OUI2QyAvKiBDYWdlZFB0ci5oICovLAorCQkJCTBGNUYzRDY4MUYzRkVCQTYw
MEIxMTVBMiAvKiBDYWdlZFVuaXF1ZVB0ci5oICovLAogCQkJCUE4QTQ3MjZBMTUxQTgyNUEwMDQx
MjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLAogCQkJCUE4QTQ3MjZCMTUxQTgyNUEwMDQx
MjNGRiAvKiBDaGVja2VkQm9vbGVhbi5oICovLAogCQkJCTBGNjZCMjgwMURDOTdCQUIwMDRBMUQz
RiAvKiBDbG9ja1R5cGUuY3BwICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIyMDcwMSkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xNCw2ICsxNCw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEJ5dGVPcmRlci5oCiAgICAg
Q1BVVGltZS5oCiAgICAgQ2FnZWRQdHIuaAorICAgIENhZ2VkVW5pcXVlUHRyLmgKICAgICBDbG9j
a1R5cGUuaAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmgKICAgICBDb21waWxlci5oCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9DYWdlZFB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Nh
Z2VkUHRyLmgJKHJldmlzaW9uIDIyMDcwMSkKKysrIFNvdXJjZS9XVEYvd3RmL0NhZ2VkUHRyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEluZGV4VHlwZT4KICAgICBUJiBvcGVyYXRvcltdKEluZGV4VHlwZSBpbmRleCkgY29u
c3QgeyByZXR1cm4gZ2V0KClbaW5kZXhdOyB9CiAgICAgCi1wcml2YXRlOgorcHJvdGVjdGVkOgog
ICAgIFQqIG1fcHRyOwogfTsKIApJbmRleDogU291cmNlL1dURi93dGYvQ2FnZWRVbmlxdWVQdHIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DYWdlZFVuaXF1ZVB0ci5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XVEYvd3RmL0NhZ2VkVW5pcXVlUHRyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9DYWdlZFB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8R2lnYWNhZ2U6
OktpbmQga2luZCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRW5hYmxlID0gdm9pZD4KK2NsYXNzIENh
Z2VkVW5pcXVlUHRyIDogcHVibGljIENhZ2VkUHRyPGtpbmQsIFQ+IHsKK3B1YmxpYzoKKyAgICBD
YWdlZFVuaXF1ZVB0cihUKiBwdHIgPSBudWxscHRyKQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQs
IFQ+KHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKENhZ2VkVW5p
cXVlUHRyJiYgcHRyKQorICAgICAgICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0ci5tX3B0cikKKyAg
ICB7CisgICAgICAgIHB0ci5tX3B0ciA9IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIENhZ2Vk
VW5pcXVlUHRyKGNvbnN0IENhZ2VkVW5pcXVlUHRyJikgPSBkZWxldGU7CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0ciBj
cmVhdGUoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0
ID0gc3RhdGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjptYWxsb2Moa2luZCwgc2l6ZW9mKFQpKSk7Cisg
ICAgICAgIG5ldyAocmVzdWx0KSBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cyku
Li4pOworICAgICAgICByZXR1cm4gQ2FnZWRVbmlxdWVQdHIocmVzdWx0KTsKKyAgICB9CisgICAg
CisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAg
ICB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgdGhpcy0+bV9wdHIgPSBwdHIubV9wdHI7
CisgICAgICAgIHB0ci5tX3B0ciA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisgICAgCisgICAgQ2FnZWRVbmlxdWVQdHImIG9wZXJhdG9yPShjb25zdCBDYWdlZFVuaXF1
ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAgIH5DYWdlZFVuaXF1ZVB0cigpCisgICAgeworICAg
ICAgICBkZXN0cm95KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGRlc3Ryb3ko
KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLT5tX3B0cikKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy0+bV9wdHItPn5UKCk7CisgICAgICAgIEdpZ2FjYWdlOjpmcmVlKGtpbmQs
IHRoaXMtPm1fcHRyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxHaWdhY2FnZTo6S2luZCBraW5k
LCB0eXBlbmFtZSBUPgorY2xhc3MgQ2FnZWRVbmlxdWVQdHI8a2luZCwgVFtdLCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlPjo6
dHlwZT4gOiBwdWJsaWMgQ2FnZWRQdHI8a2luZCwgVD4geworcHVibGljOgorICAgIENhZ2VkVW5p
cXVlUHRyKCkgOiBDYWdlZFB0cjxraW5kLCBUPigpIHsgfQorICAgIAorICAgIENhZ2VkVW5pcXVl
UHRyKFQqIHB0cikKKyAgICAgICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihDYWdlZFVuaXF1ZVB0ciYmIHB0cikKKyAgICAg
ICAgOiBDYWdlZFB0cjxraW5kLCBUPihwdHIubV9wdHIpCisgICAgeworICAgICAgICBwdHIubV9w
dHIgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBDYWdlZFVuaXF1ZVB0cihjb25zdCBDYWdl
ZFVuaXF1ZVB0ciYpID0gZGVsZXRlOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICBzdGF0aWMgQ2FnZWRVbmlxdWVQdHIgY3JlYXRlKHNpemVfdCBjb3VudCwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8VCo+KEdpZ2FjYWdlOjptYWxsb2NBcnJheShraW5kLCBjb3VudCwgc2l6ZW9mKFQp
KSk7CisgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgbmV3IChyZXN1bHQgKyBj
b3VudCkgVChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKTsKKyAgICAgICAg
cmV0dXJuIENhZ2VkVW5pcXVlUHRyKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5p
cXVlUHRyJiBvcGVyYXRvcj0oQ2FnZWRVbmlxdWVQdHImJiBwdHIpCisgICAgeworICAgICAgICBk
ZXN0cm95KCk7CisgICAgICAgIHRoaXMtPm1fcHRyID0gcHRyLm1fcHRyOworICAgICAgICBwdHIu
bV9wdHIgPSBudWxscHRyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAg
IENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRvcj0oY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0
ZTsKKyAgICAKKyAgICB+Q2FnZWRVbmlxdWVQdHIoKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy0+bV9wdHIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdpZ2Fj
YWdlOjpmcmVlKGtpbmQsIHRoaXMtPm1fcHRyKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTxHaWdh
Y2FnZTo6S2luZCBraW5kLCB0eXBlbmFtZSBUPgorY2xhc3MgQ2FnZWRVbmlxdWVQdHI8a2luZCwg
VFtdLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3Rp
YmxlPFQ+Ojp2YWx1ZT46OnR5cGU+IDogcHVibGljIENhZ2VkUHRyPGtpbmQsIFQ+IHsKK3B1Ymxp
YzoKKyAgICBDYWdlZFVuaXF1ZVB0cigpIDogQ2FnZWRQdHI8a2luZCwgVD4oKSB7IH0KKyAgICAK
KyAgICBDYWdlZFVuaXF1ZVB0cihUKiBwdHIsIHNpemVfdCBjb3VudCkKKyAgICAgICAgOiBDYWdl
ZFB0cjxraW5kLCBUPihwdHIpCisgICAgICAgICwgbV9jb3VudChjb3VudCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyKENhZ2VkVW5pcXVlUHRyJiYgcHRyKQorICAgICAg
ICA6IENhZ2VkUHRyPGtpbmQsIFQ+KHB0ci5tX3B0cikKKyAgICAgICAgLCBtX2NvdW50KHB0ci5t
X2NvdW50KQorICAgIHsKKyAgICAgICAgcHRyLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIENh
Z2VkVW5pcXVlUHRyKGNvbnN0IENhZ2VkVW5pcXVlUHRyJikgPSBkZWxldGU7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBDYWdlZFVuaXF1ZVB0
ciBjcmVhdGUoc2l6ZV90IGNvdW50LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBUKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxUKj4oR2lnYWNhZ2U6Om1hbGxvY0FycmF5
KGtpbmQsIGNvdW50LCBzaXplb2YoVCkpKTsKKyAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAg
ICAgICAgICBuZXcgKHJlc3VsdCArIGNvdW50KSBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pOworICAgICAgICByZXR1cm4gQ2FnZWRVbmlxdWVQdHIocmVzdWx0LCBjb3Vu
dCk7CisgICAgfQorICAgIAorICAgIENhZ2VkVW5pcXVlUHRyJiBvcGVyYXRvcj0oQ2FnZWRVbmlx
dWVQdHImJiBwdHIpCisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHRoaXMtPm1f
cHRyID0gcHRyLm1fcHRyOworICAgICAgICBtX2NvdW50ID0gcHRyLm1fY291bnQ7CisgICAgICAg
IHB0ci5jbGVhcigpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIAorICAgIENh
Z2VkVW5pcXVlUHRyJiBvcGVyYXRvcj0oY29uc3QgQ2FnZWRVbmlxdWVQdHImKSA9IGRlbGV0ZTsK
KyAgICAKKyAgICB+Q2FnZWRVbmlxdWVQdHIoKQorICAgIHsKKyAgICAgICAgZGVzdHJveSgpOwor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBkZXN0cm95KCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy0+bV9wdHIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdoaWxlICht
X2NvdW50LS0pCisgICAgICAgICAgICB0aGlzLT5tX3B0clttX2NvdW50XS5+VCgpOworICAgICAg
ICBHaWdhY2FnZTo6ZnJlZShraW5kLCB0aGlzLT5tX3B0cik7CisgICAgfQorICAgIAorICAgIHZv
aWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgdGhpcy0+bV9wdHIgPSBudWxscHRyOworICAgICAg
ICBtX2NvdW50ID0gMDsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG1fY291bnQgeyAwIH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpDYWdlZFVuaXF1ZVB0cjsKKwpJ
bmRleDogU291cmNlL1dURi93dGYvR2lnYWNhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0dpZ2FjYWdlLmNwcAkocmV2aXNpb24gMjIwNzAxKQorKysgU291cmNlL1dURi93dGYv
R2lnYWNhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMyArMTE4LDMwIEBAIHZvaWQgZnJl
ZVZpcnR1YWxQYWdlcyhLaW5kIGtpbmQsIHZvaWQqIGIKIH0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdl
CiAjZW5kaWYKIAorbmFtZXNwYWNlIEdpZ2FjYWdlIHsKKwordm9pZCogdHJ5TWFsbG9jQXJyYXko
S2luZCBraW5kLCBzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSkKK3sKKyAg
ICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTaXplID0gZWxlbWVudFNp
emU7CisgICAgY2hlY2tlZFNpemUgKj0gbnVtRWxlbWVudHM7CisgICAgaWYgKGNoZWNrZWRTaXpl
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHRy
eU1hbGxvYyhraW5kLCBjaGVja2VkU2l6ZS51bnNhZmVHZXQoKSk7Cit9CisKK3ZvaWQqIG1hbGxv
YyhLaW5kIGtpbmQsIHNpemVfdCBzaXplKQoreworICAgIHZvaWQqIHJlc3VsdCA9IHRyeU1hbGxv
YyhraW5kLCBzaXplKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQqIG1hbGxvY0FycmF5KEtpbmQga2luZCwgc2l6ZV90IG51bUVsZW1l
bnRzLCBzaXplX3QgZWxlbWVudFNpemUpCit7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5TWFsbG9j
QXJyYXkoa2luZCwgbnVtRWxlbWVudHMsIGVsZW1lbnRTaXplKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEdpZ2Fj
YWdlCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0dpZ2FjYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvR2lnYWNhZ2UuaAkocmV2aXNpb24gMjIwNzAxKQorKysgU291cmNlL1dURi93
dGYvR2lnYWNhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDMgKzEwMiwxMyBAQCBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBmcmVlVmlydHVhbFBhZ2VzCiB9IC8vIG5hbWVzcGFjZSBHaWdhY2Fn
ZQogI2VuZGlmCiAKK25hbWVzcGFjZSBHaWdhY2FnZSB7CisKK1dURl9FWFBPUlRfUFJJVkFURSB2
b2lkKiB0cnlNYWxsb2NBcnJheShLaW5kLCBzaXplX3QgbnVtRWxlbWVudHMsIHNpemVfdCBlbGVt
ZW50U2l6ZSk7CisKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiBtYWxsb2MoS2luZCwgc2l6ZV90
KTsKK1dURl9FWFBPUlRfUFJJVkFURSB2b2lkKiBtYWxsb2NBcnJheShLaW5kLCBzaXplX3QgbnVt
RWxlbWVudHMsIHNpemVfdCBlbGVtZW50U2l6ZSk7CisKK30gLy8gbmFtZXNwYWNlIEdpZ2FjYWdl
CisKKwo=
</data>
<flag name="review"
          id="338509"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>