<?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>43515</bug_id>
          
          <creation_ts>2010-08-04 15:28:32 -0700</creation_ts>
          <short_desc>Fix small design issues with PageAllocation, split out PageReservation.</short_desc>
          <delta_ts>2011-01-27 10:16:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>51108</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>atwilson</cc>
    
    <cc>s.mathur</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>260244</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-04 15:28:32 -0700</bug_when>
    <thetext>The PageAllocation class has a number of issues.

* Changes in bug #43269 accidentally switched SYMBIAN over to use malloc/free to allocate blocks of memory for the GC heap, instead of allocating RChunks.  Revert this change in behaviour.
* In order for PageAllocation to work correctly on WinCE we should be decommitting memory before deallocating.  In order to simplify understanding the expected state at deallocate, split behaviour out into PageAllocation and PageReservation classes.  Require that all memory be decommitted before calling deallocate on a PageReservation, add asserts to enforce this.
* add many missing asserts.
* inline more functions.
* remove ability to create sub-PageAllocations from an existing PageAllocations object – this presented an interface that would allow sub regions to be deallocated, which would not have provided expected behaviour.
* remove writable/executable arguments to commit, this value can be cached at the point the memory is reserved.
* remove writable/executable arguments to allocateAligned, protection other than RW is not supported.
* add missing checks for overflow &amp; failed allocation to mmap path through allocateAligned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260250</commentid>
    <comment_count>1</comment_count>
      <attachid>63504</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-04 15:41:12 -0700</bug_when>
    <thetext>Created attachment 63504
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260254</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-04 15:43:26 -0700</bug_when>
    <thetext>Attachment 63504 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/wtf/PageAllocation.h:49:  Alphabetical sorting problem.  [build/include_order] [4]
JavaScriptCore/wtf/PageAllocation.h:319:  system_info is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/wtf/PageAllocation.h:348:  page_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/runtime/Collector.h:62:  BLOCK_SIZE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 16 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>260290</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-08-04 17:22:25 -0700</bug_when>
    <thetext>Fixed in r64695.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260304</commentid>
    <comment_count>4</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-08-04 17:44:57 -0700</bug_when>
    <thetext>Looks like this breaks the windows build:


1: c:\b\slave\webkit-rel-webkit-org\build\src\third_party\webkit\javascriptcore\wtf\PageReservation.h(220) : error C2597: illegal reference to non-static member &apos;WTF::PageReservation::m_protection&apos;



2: c:\b\slave\webkit-rel-webkit-org\build\src\third_party\webkit\javascriptcore\wtf\PageReservation.h(221) : error C2597: illegal reference to non-static member &apos;WTF::PageReservation::m_protection&apos;

I&apos;m going to roll this out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263049</commentid>
    <comment_count>5</comment_count>
      <attachid>63504</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-10 23:00:46 -0700</bug_when>
    <thetext>Comment on attachment 63504
The patch

Clearing sam&apos;s r+.  Looks like we&apos;ll need a new patch here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>322608</commentid>
    <comment_count>6</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2010-12-15 08:22:46 -0800</bug_when>
    <thetext>Gavin, Could you please let us know if you intend to revisit this patch (the Symbian change specifically), or should we do it as part of Bug 51108? Either way is fine. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>323982</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-12-17 14:09:21 -0800</bug_when>
    <thetext>Hi Siddharth,

I&apos;m afraid I&apos;m not going to have a chance to look at this again in the near future, I think Geoff has made some major changes to PageAllocation lately, so I doubt this patch can be merged up easily, I expect any fix will need a fresh implementation on ToT.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340909</commentid>
    <comment_count>8</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-01-27 10:16:52 -0800</bug_when>
    <thetext>Resolving based on comment #7</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63504</attachid>
            <date>2010-08-04 15:41:12 -0700</date>
            <delta_ts>2010-08-10 23:00:46 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>PageReservation.patch</filename>
            <type>text/plain</type>
            <size>62100</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY0Njg0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3OSBAQAogCiAyMDEwLTA4LTA0ICBHYXZp
biBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAorICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgNDM1MTUgLSBGaXggc21hbGwgZGVz
aWduIGlzc3VlcyB3aXRoIFBhZ2VBbGxvY2F0aW9uLCBzcGxpdCBvdXQgUGFnZVJlc2VydmF0aW9u
LgorCisgICAgICAgIFRoZSBQYWdlQWxsb2NhdGlvbiBjbGFzcyBoYXMgYSBudW1iZXIgb2YgaXNz
dWVzOgorICAgICAgICAqIENoYW5nZXMgaW4gYnVnICM0MzI2OSBhY2NpZGVudGFsbHkgc3dpdGNo
ZWQgU1lNQklBTiBvdmVyIHRvIHVzZSBtYWxsb2MvZnJlZSB0byBhbGxvY2F0ZQorICAgICAgICAg
IGJsb2NrcyBvZiBtZW1vcnkgZm9yIHRoZSBHQyBoZWFwLCBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcg
UkNodW5rcy4gIFJldmVydCB0aGlzIGNoYW5nZSBpbgorICAgICAgICAgIGJlaGF2aW91ci4KKyAg
ICAgICAgKiBJbiBvcmRlciBmb3IgUGFnZUFsbG9jYXRpb24gdG8gd29yayBjb3JyZWN0bHkgb24g
V2luQ0Ugd2Ugc2hvdWxkIGJlIGRlY29tbWl0dGluZyBtZW1vcnkKKyAgICAgICAgICBiZWZvcmUg
ZGVhbGxvY2F0aW5nLiAgSW4gb3JkZXIgdG8gc2ltcGxpZnkgdW5kZXJzdGFuZGluZyB0aGUgZXhw
ZWN0ZWQgc3RhdGUgYXQgZGVhbGxvY2F0ZSwKKyAgICAgICAgICBzcGxpdCBiZWhhdmlvdXIgb3V0
IGludG8gUGFnZUFsbG9jYXRpb24gYW5kIFBhZ2VSZXNlcnZhdGlvbiBjbGFzc2VzLiAgUmVxdWly
ZSB0aGF0IGFsbAorICAgICAgICAgIG1lbW9yeSBiZSBkZWNvbW1pdHRlZCBiZWZvcmUgY2FsbGlu
ZyBkZWFsbG9jYXRlIG9uIGEgUGFnZVJlc2VydmF0aW9uLCBhZGQgYXNzZXJ0cyB0bworICAgICAg
ICAgIGVuZm9yY2UgdGhpcy4KKyAgICAgICAgKiBhZGQgbWFueSBtaXNzaW5nIGFzc2VydHMuCisg
ICAgICAgICogaW5saW5lIG1vcmUgZnVuY3Rpb25zLgorICAgICAgICAqIHJlbW92ZSBhYmlsaXR5
IHRvIGNyZWF0ZSBzdWItUGFnZUFsbG9jYXRpb25zIGZyb20gYW4gZXhpc3RpbmcgUGFnZUFsbG9j
YXRpb25zIG9iamVjdCAtCisgICAgICAgICAgdGhpcyBwcmVzZW50ZWQgYW4gaW50ZXJmYWNlIHRo
YXQgd291bGQgYWxsb3cgc3ViIHJlZ2lvbnMgdG8gYmUgZGVhbGxvY2F0ZWQsIHdoaWNoIHdvdWxk
CisgICAgICAgICAgbm90IGhhdmUgcHJvdmlkZWQgZXhwZWN0ZWQgYmVoYXZpb3VyLgorICAgICAg
ICAqIHJlbW92ZSB3cml0YWJsZS9leGVjdXRhYmxlIGFyZ3VtZW50cyB0byBjb21taXQsIHRoaXMg
dmFsdWUgY2FuIGJlIGNhY2hlZCBhdCB0aGUgcG9pbnQKKyAgICAgICAgICB0aGUgbWVtb3J5IGlz
IHJlc2VydmVkLgorICAgICAgICAqIHJlbW92ZSB3cml0YWJsZS9leGVjdXRhYmxlIGFyZ3VtZW50
cyB0byBhbGxvY2F0ZUFsaWduZWQsIHByb3RlY3Rpb24gb3RoZXIgdGhhbiBSVyBpcyBub3QKKyAg
ICAgICAgICBzdXBwb3J0ZWQuCisgICAgICAgICogYWRkIG1pc3NpbmcgY2hlY2tzIGZvciBvdmVy
ZmxvdyAmIGZhaWxlZCBhbGxvY2F0aW9uIHRvIG1tYXAgcGF0aCB0aHJvdWdoIGFsbG9jYXRlQWxp
Z25lZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSk6CisgICAgICAgICogaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OkFs
bG9jYXRpb246OkFsbG9jYXRpb24pOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlUG9vbDo6QWxs
b2NhdGlvbjo6YmFzZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9u
OjpzaXplKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb246Om9wZXJh
dG9yISk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6
CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpyZXVzZSk6CisgICAgICAgIChK
U0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpjb2FsZXNjZUZyZWVTcGFjZSk6CisgICAgICAgIChK
U0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpGaXhlZFZNUG9vbEFsbG9jYXRvcik6CisgICAgICAg
IChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjphbGxvYyk6CisgICAgICAgIChKU0M6OkZpeGVk
Vk1Qb29sQWxsb2NhdG9yOjpmcmVlKToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0
b3I6OmFsbG9jSW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvQWxpZ25lZE1lbW9yeUFsbG9j
YXRvci5oOgorICAgICAgICAoSlNDOjo6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6OjpBbGln
bmVkTWVtb3J5QWxsb2NhdG9yKToKKyAgICAgICAgKiBydW50aW1lL0NvbGxlY3Rvci5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmFsbG9jYXRlQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvQ29s
bGVjdG9yLmg6CisgICAgICAgICogd3RmL1BhZ2VBbGxvY2F0aW9uLmNwcDoKKyAgICAgICAgKiB3
dGYvUGFnZUFsbG9jYXRpb24uaDoKKyAgICAgICAgKFdURjo6UGFnZUFsbG9jYXRpb246Om9wZXJh
dG9yISk6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZSk6CisgICAgICAg
IChXVEY6OlBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUF0KToKKyAgICAgICAgKFdURjo6UGFnZUFs
bG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZCk6CisgICAgICAgIChXVEY6OlBhZ2VBbGxvY2F0aW9u
OjpkZWFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6UGFnZUFsbG9jYXRpb246OnBhZ2VTaXplKToK
KyAgICAgICAgKFdURjo6UGFnZUFsbG9jYXRpb246OnN5c3RlbUFsbG9jYXRlKToKKyAgICAgICAg
KFdURjo6UGFnZUFsbG9jYXRpb246OnN5c3RlbUFsbG9jYXRlQXQpOgorICAgICAgICAoV1RGOjpQ
YWdlQWxsb2NhdGlvbjo6c3lzdGVtQWxsb2NhdGVBbGlnbmVkKToKKyAgICAgICAgKFdURjo6UGFn
ZUFsbG9jYXRpb246OnN5c3RlbURlYWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpQYWdlQWxsb2Nh
dGlvbjo6c3lzdGVtUGFnZVNpemUpOgorICAgICAgICAqIHd0Zi9QYWdlUmVzZXJ2YXRpb24uaDog
Q29waWVkIGZyb20gSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmguCisgICAgICAg
IChXVEY6OlBhZ2VSZXNlcnZhdGlvbjo6UGFnZVJlc2VydmF0aW9uKToKKyAgICAgICAgKFdURjo6
UGFnZVJlc2VydmF0aW9uOjpjb21taXQpOgorICAgICAgICAoV1RGOjpQYWdlUmVzZXJ2YXRpb246
OmRlY29tbWl0KToKKyAgICAgICAgKFdURjo6UGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKToKKyAg
ICAgICAgKFdURjo6UGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlQXQpOgorICAgICAgICAoV1RGOjpQ
YWdlUmVzZXJ2YXRpb246OmRlYWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpQYWdlUmVzZXJ2YXRp
b246OnN5c3RlbUNvbW1pdCk6CisgICAgICAgIChXVEY6OlBhZ2VSZXNlcnZhdGlvbjo6c3lzdGVt
RGVjb21taXQpOgorICAgICAgICAoV1RGOjpQYWdlUmVzZXJ2YXRpb246OnN5c3RlbVJlc2VydmUp
OgorICAgICAgICAoV1RGOjpQYWdlUmVzZXJ2YXRpb246OnN5c3RlbVJlc2VydmVBdCk6CisgICAg
ICAgICogd3RmL1BsYXRmb3JtLmg6CisKKzIwMTAtMDgtMDQgIEdhdmluIEJhcnJhY2xvdWdoICA8
YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCiAgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IFNhbSBX
ZWluaWcuCiAKICAgICAgICAgRW5hYmxlIEpTVkFMVUU2NCBmb3IgQ1BVKFBQQzY0KS4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNjQ2ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQs
NiArMjE0LDcgQEAKIAkJODY4QkZBMTcxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NjhCRkExNTEx
N0NGMTk5MDBCOTA4QjEgLyogV1RGU3RyaW5nLmNwcCAqLzsgfTsKIAkJODY4QkZBMTgxMTdDRjE5
OTAwQjkwOEIxIC8qIFdURlN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gODY4QkZBMTYxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTg2OEJGQTYw
MTE3RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2OEJGQTVGMTE3RDA0ODIwMEI5MDhCMSAv
KiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk4NjkwMjMxNTEyMDkyRDVDMDA2MzBBRjkgLyogUGFnZVJlc2VydmF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njkw
MjMxNDEyMDkyRDVDMDA2MzBBRjkgLyogUGFnZVJlc2VydmF0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY5OEI4NjkxMEQ0NEQ5NDAwRDhE
MDFCIC8qIFN0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2OThCODY4MTBENDREOTQwMEQ4RDAxQiAvKiBTdHJpbmdCdWlsZGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODY5OEJC
MzkxMEQ4NkJBRjAwRDhEMDFCIC8qIFVTdHJpbmdJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4Njk4QkIzNzEwRDg2QkFGMDBEOEQwMUIgLyogVVN0
cmluZ0ltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4NjlEMDRBRjExOTNCNTREMDA4MDM0NzUgLyogQ2FjaGVkVHJhbnNjZW5kZW50YWxGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODY5
RDA0QUUxMTkzQjU0RDAwODAzNDc1IC8qIENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzkzLDYg
Kzc5NCw3IEBACiAJCTg2OEJGQTE1MTE3Q0YxOTkwMEI5MDhCMSAvKiBXVEZTdHJpbmcuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV1RGU3RyaW5nLmNwcDsgcGF0aCA9
IHRleHQvV1RGU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY4QkZB
MTYxMTdDRjE5OTAwQjkwOEIxIC8qIFdURlN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXVEZTdHJpbmcuaDsgcGF0aCA9IHRleHQvV1RGU3RyaW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2OEJGQTVGMTE3RDA0ODIwMEI5MDhCMSAvKiBTdGF0aWND
b25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhdGljQ29u
c3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2OTAyMzE0MTIwOTJE
NUMwMDYzMEFGOSAvKiBQYWdlUmVzZXJ2YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFnZVJlc2VydmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2OThCODY4MTBENDREOTQwMEQ4RDAxQiAvKiBTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0J1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODY5OEJCMzcxMEQ4NkJBRjAwRDhEMDFCIC8qIFVTdHJpbmdJbXBsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVTdHJpbmdJbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2OUQwNEFFMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFu
c2NlbmRlbnRhbEZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENh
Y2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE0NjAsNiArMTQ2Miw3IEBACiAJCQkJNDQwQjdBRUQwRkFGN0ZDQjAwNzMzMjNFIC8qIE93
blB0ckNvbW1vbi5oICovLAogCQkJCTg2MjdFNUU5MTFGMTI4MTkwMEEzMTNCNSAvKiBQYWdlQWxs
b2NhdGlvbi5jcHAgKi8sCiAJCQkJODYyN0U1RUExMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxv
Y2F0aW9uLmggKi8sCisJCQkJODY5MDIzMTQxMjA5MkQ1QzAwNjMwQUY5IC8qIFBhZ2VSZXNlcnZh
dGlvbi5oICovLAogCQkJCTQ0REQ0ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmgg
Ki8sCiAJCQkJNjU4MEY3OTUwOTQwNzA1NjAwODJDMjE5IC8qIFBhc3NSZWZQdHIuaCAqLywKIAkJ
CQk2NUQ2RDg3RTA5QjVBMzJFMDAwMkU0RDcgLyogUGxhdGZvcm0uaCAqLywKQEAgLTIxMDMsNiAr
MjEwNiw3IEBACiAJCQkJQkMxOEM0NEEwRTE2RjVDRDAwQjM0NDYwIC8qIE93blB0ci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDQwOUQ4NDcwRkFGODBBMjAwNTIzQjg3IC8qIE93blB0ckNvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYyN0U1RUMxMUYxMjgxOTAwQTMxM0I1IC8qIFBhZ2VBbGxv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NjkwMjMxNTEyMDkyRDVDMDA2MzBBRjkgLyog
UGFnZVJlc2VydmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QjBFMTZGNUNEMDBC
MzQ0NjAgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA1MkMzNTBGQjc5MjE5MDA0
OEZEQzMgLyogUGFyc2VyQXJlbmEuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0REQ0ODUzMEZBRUE4
NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggaW4gSGVhZGVycyAqLywKQEAgLTIzMDMsNyArMjMw
Nyw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9
IDE0OUMyNzcxMDg5MDJBRkUwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWFByb2plY3QgIkphdmFTY3JpcHRDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9u
ID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNT
Y2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNo
LApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gNjQ2ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjppbnRpYWxpemVQYWdlUwogICAgIC8vIGZvciBtb3ZpbmcgbWVtb3J5IG1vZGVsIGxpbWl0
YXRpb24KICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpwYWdlU2l6ZSA9IDI1NiAqIDEwMjQ7CiAj
ZWxzZQotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplID0gUGFnZUFsbG9jYXRpb246
OnBhZ2VzaXplKCk7CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBQYWdlQWxs
b2NhdGlvbjo6cGFnZVNpemUoKTsKICNlbmRpZgogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDY0Njg0KQorKysgSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtODUsMTEgKzg1
LDI4IEBAIGlubGluZSBzaXplX3Qgcm91bmRVcEFsbG9jYXRpb25TaXplKHNpemUKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZDb3VudGVkPEV4ZWN1
dGFibGVQb29sPiB7Ci1wcml2YXRlOgorcHVibGljOgorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FM
TE9DQVRPUl9ERU1BTkQpCiAgICAgdHlwZWRlZiBQYWdlQWxsb2NhdGlvbiBBbGxvY2F0aW9uOwor
I2Vsc2UKKyAgICBjbGFzcyBBbGxvY2F0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFsbG9j
YXRpb24odm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCisgICAgICAgICAgICA6IG1fYmFzZShiYXNl
KQorICAgICAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIHZvaWQqIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0KKyAgICAgICAgc2l6ZV90IHNpemUo
KSB7IHJldHVybiBtX3NpemU7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9iYXNlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkKiBtX2Jhc2U7Cisg
ICAgICAgIHNpemVfdCBtX3NpemU7CisgICAgfTsKKyNlbmRpZgogICAgIHR5cGVkZWYgVmVjdG9y
PEFsbG9jYXRpb24sIDI+IEFsbG9jYXRpb25MaXN0OwogCi1wdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGNyZWF0ZShzaXplX3Qgbik7CiAKICAgICB2b2lkKiBh
bGxvYyhzaXplX3QgbikKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA2NDY4NCkKKysrIEphdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRl
IDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9QYWdl
UmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CiAKICNpZiBDUFUoWDg2XzY0
KQpAQCAtMTMxLDEyICsxMzIsMTIgQEAgY2xhc3MgRml4ZWRWTVBvb2xBbGxvY2F0b3IKIAogICAg
IHZvaWQgcmV1c2Uodm9pZCogcG9zaXRpb24sIHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAg
Ym9vbCBva2F5ID0gbV9hbGxvY2F0aW9uLmNvbW1pdChwb3NpdGlvbiwgc2l6ZSwgRVhFQ1VUQUJM
RV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgYm9vbCBva2F5ID0gbV9hbGxvY2F0aW9u
LmNvbW1pdChwb3NpdGlvbiwgc2l6ZSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2theSwgb2th
eSk7CiAgICAgfQogCiAgICAgLy8gQWxsIGFkZGl0aW9uIHRvIHRoZSBmcmVlIGxpc3Qgc2hvdWxk
IGdvIHRocm91Z2ggdGhpcyBtZXRob2QsIHJhdGhlciB0aGFuCi0gICAgLy8gY2FsbGluZyBpbnNl
cnQgZGlyZWN0bHksIHRvIGF2b2lkIG11bHRpcGxlIGVudHJpZXMgYmVnaW5nIGFkZGVkIHdpdGgg
dGhlCisgICAgLy8gY2FsbGluZyBpbnNlcnQgZGlyZWN0bHksIHRvIGF2b2lkIG11bHRpcGxlIGVu
dHJpZXMgYmVpbmcgYWRkZWQgd2l0aCB0aGUKICAgICAvLyBzYW1lIGtleS4gIEFsbCBub2RlcyBi
ZWluZyBhZGRlZCBzaG91bGQgYmUgc2luZ2xldG9ucywgdGhleSBzaG91bGQgbm90CiAgICAgLy8g
YWxyZWFkeSBiZSBhIHBhcnQgb2YgYSBjaGFpbi4KICAgICB2b2lkIGFkZFRvRnJlZUxpc3QoRnJl
ZUxpc3RFbnRyeSogZW50cnkpCkBAIC0xNTUsNyArMTU2LDcgQEAgY2xhc3MgRml4ZWRWTVBvb2xB
bGxvY2F0b3IKICAgICB9CiAKICAgICAvLyBXZSBkbyBub3QgYXR0ZW1wdCB0byBjb2FsZXNjZSBh
ZGRpdGlvbiwgd2hpY2ggbWF5IGxlYWQgdG8gZnJhZ21lbnRhdGlvbjsKLSAgICAvLyBpbnN0ZWFk
IHdlIHBlcmlvZGljYWxseSBwZXJmb3JtIGEgc3dlZXAgdG8gdHJ5IHRvIGNvYWxlc2NlIG5laWdi
b3JpbmcKKyAgICAvLyBpbnN0ZWFkIHdlIHBlcmlvZGljYWxseSBwZXJmb3JtIGEgc3dlZXAgdG8g
dHJ5IHRvIGNvYWxlc2NlIG5laWdoYm9yaW5nCiAgICAgLy8gZW50cmllcyBpbiBtX2ZyZWVMaXN0
LiAgUHJlc2VudGx5IHRoaXMgaXMgdHJpZ2dlcmVkIGF0IHRoZSBwb2ludCAxNk1CCiAgICAgLy8g
b2YgbWVtb3J5IGhhcyBiZWVuIHJlbGVhc2VkLgogICAgIHZvaWQgY29hbGVzY2VGcmVlU3BhY2Uo
KQpAQCAtMTY4LDcgKzE2OSw3IEBAIGNsYXNzIEZpeGVkVk1Qb29sQWxsb2NhdG9yCiAgICAgICAg
IGZvciAoRnJlZUxpc3RFbnRyeSogZW50cnk7IChlbnRyeSA9ICppdGVyKTsgKytpdGVyKSB7CiAg
ICAgICAgICAgICAvLyBFYWNoIGVudHJ5IGluIG1fZnJlZUxpc3QgbWlnaHQgY29ycmVzcG9uZCB0
byBtdWx0aXBsZQogICAgICAgICAgICAgLy8gZnJlZSBjaHVua3Mgb2YgbWVtb3J5IChvZiB0aGUg
c2FtZSBzaXplKS4gIFdhbGsgdGhlIGNoYWluCi0gICAgICAgICAgICAvLyAodGhpcyBpcyBsaWtl
bHkgb2YgY291c2Ugb25seSBiZSBvbmUgZW50cnkgbG9uZyEpIGFkZGluZworICAgICAgICAgICAg
Ly8gKHRoaXMgaXMgbGlrZWx5IG9mIGNvdXJzZSBvbmx5IGJlIG9uZSBlbnRyeSBsb25nISkgYWRk
aW5nCiAgICAgICAgICAgICAvLyBlYWNoIGVudHJ5IHRvIHRoZSBWZWN0b3IgKGF0IHJlc2V0aW5n
IHRoZSBuZXh0IGluIGNoYWluCiAgICAgICAgICAgICAvLyBwb2ludGVyIHRvIHNlcGFyYXRlIGVh
Y2ggbm9kZSBvdXQpLgogICAgICAgICAgICAgRnJlZUxpc3RFbnRyeSogbmV4dDsKQEAgLTI4Mywx
NiArMjg0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgLy8KICAgICAgICAgLy8gQnV0ISAtIGFzIGEg
dGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIHNvbWUgcGx1Z2luIHByb2JsZW1zIChyZGFyOi8vcHJv
YmxlbS82ODEyODU0KSwKICAgICAgICAgLy8gZm9yIG5vdyBpbnN0ZWFkIG9mIDJeMjYgYml0cyBv
ZiBBU0xSIGxldHMgc3RpY2sgd2l0aCAyNSBiaXRzIG9mIHJhbmRvbWl6YXRpb24gcGx1cwotICAg
ICAgICAvLyAyXjI0LCB3aGljaCBzaG91bGQgcHV0IHVwIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxl
IG9mIHVzZXNwYWNlIChpbiB0aGUgYWRkcmVzcyByYW5nZQorICAgICAgICAvLyAyXjI0LCB3aGlj
aCBzaG91bGQgcHV0IHVwIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHVzZXJzcGFjZSAoaW4g
dGhlIGFkZHJlc3MgcmFuZ2UKICAgICAgICAgLy8gMHgyMDAwMDAwMDAwMDAgLi4gMHg1ZmZmZmZm
ZmZmZmYpLgogI2lmIFZNX1BPT0xfQVNMUgogICAgICAgICBpbnRwdHJfdCByYW5kb21Mb2NhdGlv
biA9IDA7CiAgICAgICAgIHJhbmRvbUxvY2F0aW9uID0gYXJjNHJhbmRvbSgpICYgKCgxIDw8IDI1
KSAtIDEpOwogICAgICAgICByYW5kb21Mb2NhdGlvbiArPSAoMSA8PCAyNCk7CiAgICAgICAgIHJh
bmRvbUxvY2F0aW9uIDw8PSAyMTsKLSAgICAgICAgbV9hbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRp
b246OnJlc2VydmVBdChyZWludGVycHJldF9jYXN0PHZvaWQqPihyYW5kb21Mb2NhdGlvbiksIGZh
bHNlLCB0b3RhbEhlYXBTaXplLCBQYWdlQWxsb2NhdGlvbjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNV
VEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIG1fYWxsb2NhdGlvbiA9IFBhZ2VS
ZXNlcnZhdGlvbjo6cmVzZXJ2ZUF0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJhbmRvbUxvY2F0
aW9uKSwgZmFsc2UsIHRvdGFsSGVhcFNpemUsIFBhZ2VBbGxvY2F0aW9uOjpKU0pJVENvZGVQYWdl
cywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKICNlbHNlCi0gICAgICAgIG1fYWxs
b2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uOjpyZXNlcnZlKHRvdGFsSGVhcFNpemUsIFBhZ2VBbGxv
Y2F0aW9uOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsK
KyAgICAgICAgbV9hbGxvY2F0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKHRvdGFsSGVh
cFNpemUsIFBhZ2VBbGxvY2F0aW9uOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dS
SVRBQkxFLCB0cnVlKTsKICNlbmRpZgogCiAgICAgICAgIGlmICghIW1fYWxsb2NhdGlvbikKQEAg
LTMwMywxMiArMzA0LDEyIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIFBhZ2VBbGxv
Y2F0aW9uIGFsbG9jKHNpemVfdCBzaXplKQorICAgIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9u
IGFsbG9jKHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9u
KGFsbG9jSW50ZXJuYWwoc2l6ZSksIHNpemUsIG1fYWxsb2NhdGlvbik7CisgICAgICAgIHJldHVy
biBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbihhbGxvY0ludGVybmFsKHNpemUpLCBzaXplKTsK
ICAgICB9CiAKLSAgICB2b2lkIGZyZWUoUGFnZUFsbG9jYXRpb24gYWxsb2NhdGlvbikKKyAgICB2
b2lkIGZyZWUoRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2NhdGlvbikKICAgICB7CiAg
ICAgICAgIHZvaWQqIHBvaW50ZXIgPSBhbGxvY2F0aW9uLmJhc2UoKTsKICAgICAgICAgc2l6ZV90
IHNpemUgPSBhbGxvY2F0aW9uLnNpemUoKTsKQEAgLTM1NiwxMiArMzU3LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXN1bHQgPSBtX2NvbW1vblNpemVkQWxsb2NhdGlvbnMubGFzdCgpOwog
ICAgICAgICAgICAgbV9jb21tb25TaXplZEFsbG9jYXRpb25zLnJlbW92ZUxhc3QoKTsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFNlcmFjaCBtX2ZyZWVMaXN0IGZvciBhIHN1aXRh
YmxlIHNpemVkIGNodW5rIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tLgorICAgICAgICAgICAgLy8g
U2VhcmNoIG1fZnJlZUxpc3QgZm9yIGEgc3VpdGFibGUgc2l6ZWQgY2h1bmsgdG8gYWxsb2NhdGUg
bWVtb3J5IGZyb20uCiAgICAgICAgICAgICBGcmVlTGlzdEVudHJ5KiBlbnRyeSA9IG1fZnJlZUxp
c3Quc2VhcmNoKHNpemUsIG1fZnJlZUxpc3QuR1JFQVRFUl9FUVVBTCk7CiAKICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYmFkIG5ld3MuCiAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7Ci0gICAgICAg
ICAgICAgICAgLy8gRXJyayEgIExldHMgdGFrZSBhIGxhc3QtZGl0Y2ggZGVzcGFyYXRpb24gYXR0
ZW1wdCBhdCBkZWZyYWdtZW50YXRpb24uLi4KKyAgICAgICAgICAgICAgICAvLyBFcnJrISAgTGV0
cyB0YWtlIGEgbGFzdC1kaXRjaCBkZXNwZXJhdGlvbiBhdHRlbXB0IGF0IGRlZnJhZ21lbnRhdGlv
bi4uLgogICAgICAgICAgICAgICAgIGNvYWxlc2NlRnJlZVNwYWNlKCk7CiAgICAgICAgICAgICAg
ICAgLy8gRGlkIHRoYXQgZnJlZSB1cCBhIGxhcmdlIGVub3VnaCBjaHVuaz8KICAgICAgICAgICAg
ICAgICBlbnRyeSA9IG1fZnJlZUxpc3Quc2VhcmNoKHNpemUsIG1fZnJlZUxpc3QuR1JFQVRFUl9F
UVVBTCk7CkBAIC00MjMsNyArNDI0LDcgQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHVzZWQg
Zm9yIGhvdXNla2VlcGluZywgdG8gdHJpZ2dlciBkZWZyYWdtZW50YXRpb24gb2YgdGhlIGZyZWVk
IGxpc3RzLgogICAgIHNpemVfdCBtX2NvdW50RnJlZWRTaW5jZUxhc3RDb2FsZXNjZTsKIAotICAg
IFBhZ2VBbGxvY2F0aW9uIG1fYWxsb2NhdGlvbjsKKyAgICBQYWdlUmVzZXJ2YXRpb24gbV9hbGxv
Y2F0aW9uOwogfTsKIAogdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6
ZSgpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FsaWduZWRNZW1vcnlBbGxvY2F0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FsaWduZWRNZW1vcnlBbGxv
Y2F0b3IuaAkocmV2aXNpb24gNjQ2ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2Rl
ZmluZSBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yX2gKIAogI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4K
LSNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvUGFnZVJlc2Vy
dmF0aW9uLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBB
bGlnbmVkTWVtb3J5QWxsb2NhdG9yQ29uc3RhbnRzIHsKIHRlbXBsYXRlPHNpemVfdCBibG9ja1Np
emU+IGNsYXNzIEFsaWduZWRNZW1vcnk7CiB0ZW1wbGF0ZTxzaXplX3QgYmxvY2tTaXplPiBjbGFz
cyBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yOwogCi0jaWYgSEFWRShBTElHTkVEX0FMTE9DQVRFKQor
I2lmIEhBVkUoUEFHRV9BTExPQ0FURV9BTElHTkVEKQogCiB0ZW1wbGF0ZTxzaXplX3QgYmxvY2tT
aXplPgogY2xhc3MgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjsKQEAgLTc2LDcgKzc2LDcgQEAgaW5s
aW5lIHZvaWQgQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjxibG9jawogdGVtcGxhdGU8c2l6ZV90IGJs
b2NrU2l6ZT4KIGlubGluZSBBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT4gQWxpZ25lZE1lbW9yeUFs
bG9jYXRvcjxibG9ja1NpemU+OjphbGxvY2F0ZSgpCiB7Ci0gICAgcmV0dXJuIEFsaWduZWRNZW1v
cnk8YmxvY2tTaXplPihQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKGJsb2NrU2l6ZSkp
OworICAgIHJldHVybiBBbGlnbmVkTWVtb3J5PGJsb2NrU2l6ZT4oUGFnZUFsbG9jYXRpb246OmFs
bG9jYXRlQWxpZ25lZChibG9ja1NpemUsIFBhZ2VBbGxvY2F0aW9uOjpKU0dDSGVhcFBhZ2VzKSk7
CiB9CiAKIHRlbXBsYXRlPHNpemVfdCBibG9ja1NpemU+CkBAIC0xMjgsNyArMTI4LDcgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSA9IEFsaWduZWRN
ZW1vcnlBbGxvY2F0b3JDb25zdGFudHM6OnZpcnR1YWxNZW1vcnlSZXNlcnZhdGlvbjsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGJpdG1hcFNpemUgPSByZXNlcnZhdGlvblNpemUgLyBibG9ja1Np
emU7CiAKLSAgICBQYWdlQWxsb2NhdGlvbiBtX3Jlc2VydmF0aW9uOworICAgIFBhZ2VSZXNlcnZh
dGlvbiBtX3Jlc2VydmF0aW9uOwogICAgIHNpemVfdCBtX25leHRGcmVlOwogICAgIHVpbnRwdHJf
dCBtX3Jlc2VydmF0aW9uQmFzZTsKICAgICBXVEY6OkJpdG1hcDxiaXRtYXBTaXplPiBtX2JpdG1h
cDsKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogCiB0ZW1wbGF0ZTxzaXplX3QgYmxvY2tT
aXplPgogQWxpZ25lZE1lbW9yeUFsbG9jYXRvcjxibG9ja1NpemU+OjpBbGlnbmVkTWVtb3J5QWxs
b2NhdG9yKCkKLSAgICA6IG1fcmVzZXJ2YXRpb24oUGFnZUFsbG9jYXRpb246OnJlc2VydmUocmVz
ZXJ2YXRpb25TaXplICsgYmxvY2tTaXplKSkKKyAgICA6IG1fcmVzZXJ2YXRpb24oUGFnZVJlc2Vy
dmF0aW9uOjpyZXNlcnZlKHJlc2VydmF0aW9uU2l6ZSArIGJsb2NrU2l6ZSwgUGFnZUFsbG9jYXRp
b246OkpTR0NIZWFwUGFnZXMpKQogICAgICwgbV9uZXh0RnJlZSgwKQogewogICAgIC8vIGNoZWNr
IHRoYXQgYmxvY2tTaXplIGFuZCByZXNlcnZhdGlvblNpemUgYXJlIHBvd2VycyBvZiB0d28KQEAg
LTE0NSw3ICsxNDUsNyBAQCBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPGJsb2NrU2l6ZT46OkFsaWdu
CiAKICAgICAvLyBjaGVjayB0aGF0IGJsb2NrU2l6ZSBpcyBhIG11bHRpcGxlIG9mIHBhZ2VTaXpl
IGFuZCB0aGF0CiAgICAgLy8gcmVzZXJ2YXRpb25TaXplIGlzIGEgbXVsdGlwbGUgb2YgYmxvY2tT
aXplCi0gICAgQVNTRVJUKCEoYmxvY2tTaXplICYgKFBhZ2VBbGxvY2F0aW9uOjpwYWdlc2l6ZSgp
IC0gMSkpKTsKKyAgICBBU1NFUlQoIShibG9ja1NpemUgJiAoUGFnZUFsbG9jYXRpb246OnBhZ2VT
aXplKCkgLSAxKSkpOwogICAgIEFTU0VSVCghKHJlc2VydmF0aW9uU2l6ZSAmIChibG9ja1NpemUg
LSAxKSkpOwogCiAgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24pOwpJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2xsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29sbGVjdG9yLmNwcAkocmV2aXNpb24gNjQ2ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbGxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsxOTEsOCBAQCBO
RVZFUl9JTkxJTkUgQ29sbGVjdG9yQmxvY2sqIEhlYXA6OmFsbG9jCiB7CiAgICAgQWxpZ25lZEJs
b2NrIGFsbG9jYXRpb24gPSBtX2Jsb2NrYWxsb2NhdG9yLmFsbG9jYXRlKCk7CiAgICAgQ29sbGVj
dG9yQmxvY2sqIGJsb2NrID0gc3RhdGljX2Nhc3Q8Q29sbGVjdG9yQmxvY2sqPihhbGxvY2F0aW9u
LmJhc2UoKSk7CisgICAgaWYgKCFibG9jaykKKyAgICAgICAgQ1JBU0goKTsKIAogICAgIC8vIElu
aXRpYWxpemUgYmxvY2suCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29sbGVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2xsZWN0b3IuaAkocmV2
aXNpb24gNjQ2ODQpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIE9TKFdJTkNF
KSB8fCBPUyhTWU1CSUFOKQogICAgIGNvbnN0IHNpemVfdCBCTE9DS19TSVpFID0gNjQgKiAxMDI0
OyAvLyA2NGsKICNlbHNlCi0gICAgY29uc3Qgc2l6ZV90IEJMT0NLX1NJWkUgPSA2NCAqIDQwOTY7
IC8vIDI1NmsKKyAgICBjb25zdCBzaXplX3QgQkxPQ0tfU0laRSA9IDI1NiAqIDEwMjQ7IC8vIDI1
NmsKICNlbmRpZgogCiAgICAgdHlwZWRlZiBBbGlnbmVkTWVtb3J5QWxsb2NhdG9yPEJMT0NLX1NJ
WkU+IEFsaWduZWRBbGxvY2F0b3I7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZUFsbG9j
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlQWxsb2NhdGlv
bi5jcHAJKHJldmlzaW9uIDY0Njg0KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjA2ICsyNiwxMCBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUGFnZUFsbG9jYXRpb24uaCIKLQotI2lmIEhBVkUoRVJSTk9f
SCkKLSNpbmNsdWRlIDxlcnJuby5oPgotI2VuZGlmCi0KLSNpZiBIQVZFKE1NQVApCi0jaW5jbHVk
ZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotCi0jaWYgT1MoV0lO
RE9XUykKLSNpbmNsdWRlICJ3aW5kb3dzLmgiCi0jZW5kaWYKLQotI2lmIE9TKFNZTUJJQU4pCi0j
aW5jbHVkZSA8ZTMyaGFsLmg+Ci0jZW5kaWYKKyNpbmNsdWRlICJQYWdlUmVzZXJ2YXRpb24uaCIK
IAogbmFtZXNwYWNlIFdURiB7CiAKLSNpZiBIQVZFKE1NQVApCi0KLWJvb2wgUGFnZUFsbG9jYXRp
b246OmNvbW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUsIGJvb2wsIGJvb2wpIGNvbnN0Ci17
Ci0jaWYgSEFWRShNQURWX0ZSRUVfUkVVU0UpCi0gICAgd2hpbGUgKG1hZHZpc2Uoc3RhcnQsIHNp
emUsIE1BRFZfRlJFRV9SRVVTRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7IH0KLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHN0YXJ0KTsKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBQYWdlQWxsb2NhdGlvbjo6ZGVjb21taXQo
dm9pZCogc3RhcnQsIHNpemVfdCBzaXplKSBjb25zdAotewotI2lmIEhBVkUoTUFEVl9GUkVFX1JF
VVNFKQotICAgIHdoaWxlIChtYWR2aXNlKHN0YXJ0LCBzaXplLCBNQURWX0ZSRUVfUkVVU0FCTEUp
ID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9Ci0jZWxpZiBIQVZFKE1BRFZfRlJFRSkKLSAg
ICB3aGlsZSAobWFkdmlzZShzdGFydCwgc2l6ZSwgTUFEVl9GUkVFKSA9PSAtMSAmJiBlcnJubyA9
PSBFQUdBSU4pIHsgfQotI2VsaWYgSEFWRShNQURWX0RPTlRORUVEKQotICAgIHdoaWxlIChtYWR2
aXNlKHN0YXJ0LCBzaXplLCBNQURWX0RPTlRORUVEKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4p
IHsgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3RhcnQpOwotICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKLSNlbmRpZgotfQotCi1QYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2Nh
dGUoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFi
bGUpCi17Ci0gICAgcmV0dXJuIGFsbG9jYXRlQXQoMCwgZmFsc2UsIHNpemUsIHVzYWdlLCB3cml0
YWJsZSwgZXhlY3V0YWJsZSk7Ci19Ci0KLVBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpy
ZXNlcnZlKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVj
dXRhYmxlKQotewotICAgIHJldHVybiByZXNlcnZlQXQoMCwgZmFsc2UsIHNpemUsIHVzYWdlLCB3
cml0YWJsZSwgZXhlY3V0YWJsZSk7Ci19Ci0KLVBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9u
OjphbGxvY2F0ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCBzaXplLCBVc2Fn
ZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQotewotICAgIGludCBmbGFn
cyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT047Ci0gICAgaWYgKGZpeGVkKQotICAgICAgICBmbGFn
cyB8PSBNQVBfRklYRUQ7Ci0KLSAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKLSAgICBp
ZiAod3JpdGFibGUpCi0gICAgICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsKLSAgICBpZiAo
ZXhlY3V0YWJsZSkKLSAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7Ci0KLSAgICB2b2lk
KiBiYXNlID0gbW1hcChhZGRyZXNzLCBzaXplLCBwcm90ZWN0aW9uLCBmbGFncywgdXNhZ2UsIDAp
OwotICAgIGlmIChiYXNlID09IE1BUF9GQUlMRUQpCi0gICAgICAgIGJhc2UgPSAwOwotCi0gICAg
cmV0dXJuIFBhZ2VBbGxvY2F0aW9uKGJhc2UsIHNpemUpOwotfQotCi1QYWdlQWxsb2NhdGlvbiBQ
YWdlQWxsb2NhdGlvbjo6cmVzZXJ2ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVf
dCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQotewot
ICAgIFBhZ2VBbGxvY2F0aW9uIHJlc3VsdCA9IGFsbG9jYXRlQXQoYWRkcmVzcywgZml4ZWQsIHNp
emUsIHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7Ci0gICAgaWYgKCEhcmVzdWx0KQotICAg
ICAgICByZXN1bHQuZGVjb21taXQocmVzdWx0LmJhc2UoKSwgc2l6ZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdm9pZCBQYWdlQWxsb2NhdGlvbjo6ZGVhbGxvY2F0ZSgpCi17Ci0gICAgaW50
IHJlc3VsdCA9IG11bm1hcChtX2Jhc2UsIG1fc2l6ZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChyZXN1
bHQsICFyZXN1bHQpOwotICAgIG1fYmFzZSA9IDA7Ci19Ci0KLXNpemVfdCBQYWdlQWxsb2NhdGlv
bjo6cGFnZXNpemUoKQotewotICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSA9IDA7Ci0gICAgaWYgKCFz
aXplKQotICAgICAgICBzaXplID0gZ2V0cGFnZXNpemUoKTsKLSAgICByZXR1cm4gc2l6ZTsKLX0K
LQotI2VsaWYgSEFWRShWSVJUVUFMQUxMT0MpCi0KLXN0YXRpYyBEV09SRCBwcm90ZWN0aW9uKGJv
b2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKLXsKLSAgICBpZiAoZXhlY3V0YWJsZSkKLSAg
ICAgICAgcmV0dXJuIHdyaXRhYmxlID9QQUdFX0VYRUNVVEVfUkVBRFdSSVRFIDogUEFHRV9FWEVD
VVRFX1JFQUQ7Ci0gICAgcmV0dXJuIHdyaXRhYmxlID9QQUdFX1JFQURXUklURSA6IFBBR0VfUkVB
RE9OTFk7Ci19Ci0KLWJvb2wgUGFnZUFsbG9jYXRpb246OmNvbW1pdCh2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemUsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gVmlydHVhbEFsbG9jKHN0YXJ0LCBzaXplLCBNRU1fQ09NTUlULCBwcm90ZWN0aW9uKHdy
aXRhYmxlLCBleGVjdXRhYmxlKSkgPT0gc3RhcnQ7Ci19Ci0KLXZvaWQgUGFnZUFsbG9jYXRpb246
OmRlY29tbWl0KHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSkgY29uc3QKLXsKLSAgICBWaXJ0dWFs
RnJlZShzdGFydCwgc2l6ZSwgTUVNX0RFQ09NTUlUKTsKLX0KLQotUGFnZUFsbG9jYXRpb24gUGFn
ZUFsbG9jYXRpb246OmFsbG9jYXRlKHNpemVfdCBzaXplLCBVc2FnZSwgYm9vbCB3cml0YWJsZSwg
Ym9vbCBleGVjdXRhYmxlKQotewotICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihWaXJ0dWFsQWxs
b2MoMCwgc2l6ZSwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBwcm90ZWN0aW9uKHdyaXRhYmxl
LCBleGVjdXRhYmxlKSksIHNpemUpOwotfQotCi1QYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlv
bjo6cmVzZXJ2ZShzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wg
ZXhlY3V0YWJsZSkKLXsKLSAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oVmlydHVhbEFsbG9jKDAs
IHNpemUsIE1FTV9SRVNFUlZFLCBwcm90ZWN0aW9uKHdyaXRhYmxlLCBleGVjdXRhYmxlKSksIHNp
emUpOwotfQotCi12b2lkIFBhZ2VBbGxvY2F0aW9uOjpkZWFsbG9jYXRlKCkKLXsKLSAgICBWaXJ0
dWFsRnJlZShtX2Jhc2UsIDAsIE1FTV9SRUxFQVNFKTsgCi0gICAgbV9iYXNlID0gMDsKLX0KLQot
c2l6ZV90IFBhZ2VBbGxvY2F0aW9uOjpwYWdlc2l6ZSgpCi17Ci0gICAgc3RhdGljIHNpemVfdCBz
aXplID0gMDsKLSAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2lu
Zm87Ci0gICAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKLSAgICAgICAgc2l6ZSA9
IHN5c3RlbV9pbmZvLmR3UGFnZVNpemU7Ci0gICAgfQotICAgIHJldHVybiBzaXplOwotfQotCi0j
ZWxpZiBPUyhTWU1CSUFOKQotCi1ib29sIFBhZ2VBbGxvY2F0aW9uOjpjb21taXQodm9pZCogc3Rh
cnQsIHNpemVfdCBzaXplLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fY2h1bmspIHsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oYmFzZSgpKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0
YXJ0KTsKLSAgICAgICAgbV9jaHVuay0+Q29tbWl0KG9mZnNldCwgc2l6ZSk7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFBhZ2VBbGxvY2F0aW9uOjpkZWNvbW1pdCh2b2lkKiBz
dGFydCwgc2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY2h1bmspIHsKLSAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYmFzZSgpKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0YXJ0KTsKLSAgICAgICAgbV9jaHVuay0+RGVjb21t
aXQob2Zmc2V0LCBzaXplKTsKLSAgICB9Ci19Ci0KLVBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0
aW9uOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJv
b2wgZXhlY3V0YWJsZSkKLXsKLSAgICBpZiAoIWV4ZWN1dGFibGUpCi0gICAgICAgIHJldHVybiBQ
YWdlQWxsb2NhdGlvbihmYXN0TWFsbG9jKHNpemUpLCBzaXplLCAwKTsKLSAgICBSQ2h1bmsqIHJj
aHVuayA9IG5ldyBSQ2h1bmsoKTsKLSAgICBUSW50IGVycm9yQ29kZSA9IHJjaHVuay0+Q3JlYXRl
TG9jYWxDb2RlKHNpemUsIHNpemUpOwotICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihyY2h1bmst
PkJhc2UoKSwgc2l6ZSwgcmNodW5rKTsKLX0KLQotUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRp
b246OnJlc2VydmUoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29s
IGV4ZWN1dGFibGUpCi17Ci0gICAgaWYgKCFleGVjdXRhYmxlKQotICAgICAgICByZXR1cm4gUGFn
ZUFsbG9jYXRpb24oZmFzdE1hbGxvYyhzaXplKSwgc2l6ZSwgMCk7Ci0gICAgUkNodW5rKiByY2h1
bmsgPSBuZXcgUkNodW5rKCk7Ci0gICAgVEludCBlcnJvckNvZGUgPSByY2h1bmstPkNyZWF0ZUxv
Y2FsQ29kZSgwLCBzaXplKTsKLSAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24ocmNodW5rLT5CYXNl
KCksIHNpemUsIHJjaHVuayk7Ci19Ci0KLXZvaWQgUGFnZUFsbG9jYXRpb246OmRlYWxsb2NhdGUo
KQotewotICAgIGlmIChtX2NodW5rKSB7Ci0gICAgICAgIG1fY2h1bmstPkNsb3NlKCk7Ci0gICAg
ICAgIGRlbGV0ZSBtX2NodW5rOwotICAgIH0gZWxzZQotICAgICAgICBmYXN0RnJlZShtX2Jhc2Up
OwotICAgIG1fYmFzZSA9IDA7Ci19Ci0KLXNpemVfdCBQYWdlQWxsb2NhdGlvbjo6cGFnZXNpemUo
KQotewotICAgIHN0YXRpYyBUSW50IHBhZ2Vfc2l6ZSA9IDA7Ci0gICAgaWYgKCFwYWdlX3NpemUp
Ci0gICAgICAgIFVzZXJIYWw6OlBhZ2VTaXplSW5CeXRlcyhwYWdlX3NpemUpOwotICAgIHJldHVy
biBwYWdlX3NpemU7Ci19Ci0KLSNlbmRpZgorc2l6ZV90IFBhZ2VBbGxvY2F0aW9uOjpzX3BhZ2VT
aXplID0gMDsKIAogfQpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgJKHJldmlz
aW9uIDY0Njg0KQorKysgSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VBbGxvY2F0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYzICszMCw1OSBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIAotI2lmIE9TKFNZTUJJQU4pCi0jaW5jbHVkZSA8
ZTMyc3RkLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkUoTU1BUCkKLSNkZWZpbmUgUEFHRV9BTExPQ0FU
SU9OX0FMTE9DQVRFX0FUIDEKLSNlbHNlCi0jZGVmaW5lIFBBR0VfQUxMT0NBVElPTl9BTExPQ0FU
RV9BVCAwCi0jZW5kaWYKLQotI2lmIEhBVkUoTU1BUCkKLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgot
I2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KICNpZiBPUyhEQVJXSU4pCi0KICNpbmNsdWRl
IDxtYWNoL21hY2hfaW5pdC5oPgotI2luY2x1ZGUgPG1hY2gvbWFjaF9wb3J0Lmg+Ci0jaW5jbHVk
ZSA8bWFjaC90YXNrLmg+Ci0jaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CiAjaW5jbHVkZSA8
bWFjaC92bV9tYXAuaD4KKyNlbmRpZgogCi0jZWxpZiBPUyhXSU5ET1dTKQorI2lmIE9TKEhBSUtV
KQorI2luY2x1ZGUgPE9TLmg+CisjZW5kaWYKIAorI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8
bWFsbG9jLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgotCi0jZWxpZiBPUyhIQUlLVSkKLQotI2lu
Y2x1ZGUgPE9TLmg+Ci0KLSNlbGlmIE9TKFVOSVgpCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQot
I2lmIE9TKFNPTEFSSVMpCi0jaW5jbHVkZSA8dGhyZWFkLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHB0
aHJlYWQuaD4KICNlbmRpZgogCi0jaWYgSEFWRShQVEhSRUFEX05QX0gpCi0jaW5jbHVkZSA8cHRo
cmVhZF9ucC5oPgorI2lmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSA8ZTMyc3RkLmg+CisjaW5jbHVk
ZSA8ZTMyaGFsLmg+CiAjZW5kaWYKIAotI2lmIE9TKFFOWCkKKyNpZiBIQVZFKEVSUk5PX0gpCiAj
aW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+
Ci0jaW5jbHVkZSA8c3lzL3Byb2Nmcy5oPgogI2VuZGlmCiAKKyNpZiBIQVZFKE1NQVApCisjaW5j
bHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAorLyoKKyAgICBQYWdlQWxsb2NhdGlvbgorCisgICAgVGhlIFBhZ2VBbGxvY2F0
aW9uIGNsYXNzIHByb3ZpZGVzIGEgY3Jvc3MtcGxhdGZvcm0gbWVtb3J5IGFsbG9jYXRpb24gaW50
ZXJmYWNlCisgICAgd2l0aCBzaW1pbGFyIGNhcGFiaWxpdGllcyB0byBwb3NpeCBtbWFwL211bm1h
cC4gIE1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgY2FsbGluZworICAgIFBhZ2VBbGxvY2F0aW9uOjph
bGxvY2F0ZSwgYW5kIGRlYWxsb2NhdGVkIGJ5IGNhbGxpbmcgZGVhbGxvY2F0ZSBvbiB0aGUKKyAg
ICBQYWdlQWxsb2NhdGlvbiBvYmplY3QuICBUaGUgUGFnZUFsbG9jYXRpb24gaG9sZHMgdGhlIGFs
bG9jYXRpb24ncyBiYXNlIHBvaW50ZXIKKyAgICBhbmQgc2l6ZS4KKworICAgIFRoZSBhbGxvY2F0
ZSBtZXRob2QgaXMgcGFzc2VkIHRoZSBzaXplIHJlcXVpcmVkICh3aGljaCBtdXN0IGJlIGEgbXVs
dGlwbGUgb2YKKyAgICB0aGUgc3lzdGVtIHBhZ2Ugc2l6ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2Vk
IHVzaW5nIFBhZ2VBbGxvY2F0aW9uOjpwYWdlU2l6ZSkuCisgICAgQ2FsbGVycyBtYXkgYWxzbyBv
cHRpbmFsbHkgcHJvdmlkZSBhIGZsYWcgaW5kaWNhdGluZyB0aGUgdXNhZ2UgKGZvciB1c2UgYnkK
KyAgICBzeXN0ZW0gbWVtb3J5IHVzYWdlIHRyYWNraW5nIHRvb2xzLCB3aGVyZSBpbXBsZW1lbnRl
ZCksIGFuZCBib29sZWFuIHZhbHVlcworICAgIHNwZWNpZnlpbmcgdGhlIHJlcXVpcmVkIHByb3Rl
Y3Rpb24gKGRlZmF1bHRpbmcgdG8gd3JpdGFibGUsIG5vbi1leGVjdXRhYmxlKS4KKworICAgIFdo
ZXJlIEhBVkUoUEFHRV9BTExPQ0FURV9BVCkgYW5kIEhBVkUoUEFHRV9BTExPQ0FURV9BTElHTkVE
KSBhcmUgYXZhaWxhYmxlCisgICAgbWVtb3J5IG1heSBhbHNvIGJlIGFsbG9jYXRlZCBhdCBhIHNw
ZWNpZmllZCBhZGRyZXNzLCBvciB3aXRoIGEgc3BlY2lmaWVkCisgICAgYWxpZ25tZW50IHJlc3Bl
Y3RpdmVseS4gIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUF0IHRha2UgYW4gYWRkcmVzcyB0byB0
cnkKKyAgICB0byBhbGxvY2F0ZSBhdCwgYW5kIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIg
dGhpcyBiZWhhdmlvdXIgaXMgc3RyaWN0bHkKKyAgICByZXF1aXJlZCAoaWYgdGhpcyBhZGRyZXNz
IGlzIHVuYXZhaWxhYmxlLCBzaG91bGQgbWVtb3J5IGF0IGFub3RoZXIgYWRkcmVzcworICAgIGJl
IGFsbG9jYXRlZCBpbnN0ZWFkKS4gIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQgcmVx
dWlyZXMgdGhhdCB0aGUKKyAgICBzaXplIGlzIGEgcG93ZXIgb2YgdHdvIHRoYXQgaXMgPj0gc3lz
dGVtIHBhZ2Ugc2l6ZS4KKyovCiBjbGFzcyBQYWdlQWxsb2NhdGlvbiB7CiBwdWJsaWM6CiAgICAg
ZW51bSBVc2FnZSB7CkBAIC0xMDYsNTMgKzEwMiw1NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
IAotICAgIC8vIENyZWF0ZSBhIFBhZ2VBbGxvY2F0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgYSBz
dWItcmVnaW9uIG9mIGFuIGV4aXN0aW5nIGFsbG9jYXRpb247Ci0gICAgLy8gZGVhbGxvY2F0ZSBz
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGFuIG9iamVjdCByZXByZXNudGluZyBhIHN1YnJlZ2lv
biwgb25seSBvbiB0aGUKLSAgICAvLyBpbml0aWFsIGFsbG9jYXRpb24uCi0gICAgUGFnZUFsbG9j
YXRpb24odm9pZCogYmFzZSwgc2l6ZV90IHNpemUsIGNvbnN0IFBhZ2VBbGxvY2F0aW9uJiBwYXJl
bnQpCi0gICAgICAgIDogbV9iYXNlKGJhc2UpCi0gICAgICAgICwgbV9zaXplKHNpemUpCi0jaWYg
T1MoU1lNQklBTikKLSAgICAgICAgLCBtX2NodW5rKHBhcmVudC5tX2NodW5rKQotI2VuZGlmCi0g
ICAgewotI2lmIGRlZmluZWQoTkRFQlVHKSAmJiAhT1MoU1lNQklBTikKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHBhcmVudCk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKCFiYXNlIHx8IGJhc2UgPj0g
cGFyZW50Lm1fYmFzZSk7Ci0gICAgICAgIEFTU0VSVCghYmFzZSB8fCBzaXplIDw9IHBhcmVudC5t
X3NpemUpOwotICAgICAgICBBU1NFUlQoIWJhc2UgfHwgc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2Up
ICsgc2l6ZSA8PSBzdGF0aWNfY2FzdDxjaGFyKj4ocGFyZW50Lm1fYmFzZSkgKyBwYXJlbnQubV9z
aXplKTsKLSAgICB9Ci0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2Jh
c2U7IH0KICAgICB2b2lkKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CiAgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAotICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIW1fYmFzZTsgfQotI2lmIENPTVBJTEVSKFdJTlNDVykKLSAgICBv
cGVyYXRvciBib29sIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQotI2Vsc2UKLSAgICB0eXBlZGVm
IHZvaWQqIFBhZ2VBbGxvY2F0aW9uOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKLSAgICBvcGVyYXRv
ciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlID8gJlBhZ2VBbGxv
Y2F0aW9uOjptX2Jhc2UgOiAwOyB9Ci0jZW5kaWYKLQotICAgIGJvb2wgY29tbWl0KHZvaWQqLCBz
aXplX3QsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSkgY29u
c3Q7Ci0gICAgdm9pZCBkZWNvbW1pdCh2b2lkKiwgc2l6ZV90KSBjb25zdDsKLSAgICB2b2lkIGRl
YWxsb2NhdGUoKTsKKyAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxsb2NhdGUoc2l6ZV90IHNp
emUsIFVzYWdlIHVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9v
bCBleGVjdXRhYmxlID0gZmFsc2UpCisgICAgeworICAgICAgICAvLyBzaXplIG11c3QgYmUgYSBt
dWx0aXBsZSBvZiBwYWdlU2l6ZS4KKyAgICAgICAgQVNTRVJUKCEoc2l6ZSAmIChwYWdlU2l6ZSgp
IC0gMSkpKTsKKyAgICAgICAgcmV0dXJuIHN5c3RlbUFsbG9jYXRlKHNpemUsIHVzYWdlLCB3cml0
YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgfQogCi0gICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIGFs
bG9jYXRlKHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVl
LCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7Ci0gICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIHJl
c2VydmUoc2l6ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUs
IGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKLSNpZiBQQUdFX0FMTE9DQVRJT05fQUxMT0NBVEVf
QVQKLSAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxsb2NhdGVBdCh2b2lkKiBhZGRyZXNzLCBi
b29sIGZpeGVkLCBzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0g
dHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwotICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlv
biByZXNlcnZlQXQodm9pZCogYWRkcmVzcywgYm9vbCBmaXhlZCwgc2l6ZV90LCBVc2FnZSA9IFVu
a25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNl
KTsKKyNpZiBIQVZFKFBBR0VfQUxMT0NBVEVfQVQpCisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9u
IGFsbG9jYXRlQXQodm9pZCogYWRkcmVzcywgYm9vbCBmaXhlZCwgc2l6ZV90IHNpemUsIFVzYWdl
IHVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRh
YmxlID0gZmFsc2UpCisgICAgeworICAgICAgICAvLyBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBv
ZiBwYWdlU2l6ZS4KKyAgICAgICAgQVNTRVJUKCEoc2l6ZSAmIChwYWdlU2l6ZSgpIC0gMSkpKTsK
KyAgICAgICAgLy8gYWRkcmVzcyBtdXN0IGJlIGFsaWduZWQgdG8gcGFnZVNpemUuCisgICAgICAg
IEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGFkZHJlc3MpICYgKHBhZ2VTaXpl
KCkgLSAxKSkpOworICAgICAgICByZXR1cm4gc3lzdGVtQWxsb2NhdGVBdChhZGRyZXNzLCBmaXhl
ZCwgc2l6ZSwgdXNhZ2UsIHdyaXRhYmxlLCBleGVjdXRhYmxlKTsKKyAgICB9CiAjZW5kaWYKIAot
I2lmIEhBVkUoQUxJR05FRF9BTExPQ0FURSkKLSAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxs
b2NhdGVBbGlnbmVkKHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUg
PSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CisjaWYgSEFWRShQQUdFX0FMTE9DQVRF
X0FMSUdORUQpCisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRlQWxpZ25lZChzaXpl
X3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UgPSBVbmtub3duVXNhZ2UpCisgICAgeworICAgICAgICAvLyBz
aXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBwYWdlU2l6ZS4KKyAgICAgICAgQVNTRVJUKCEoc2l6
ZSAmIChwYWdlU2l6ZSgpIC0gMSkpKTsKKyAgICAgICAgLy8gc2l6ZSBtdXN0IGJlIGEgcG93ZXIg
b2YgdHdvLgorICAgICAgICBBU1NFUlQoIShzaXplICYgKHNpemUgLSAxKSkpOworICAgICAgICBy
ZXR1cm4gc3lzdGVtQWxsb2NhdGVBbGlnbmVkKHNpemUsIHVzYWdlKTsKKyAgICB9CiAjZW5kaWYK
IAotICAgIHN0YXRpYyBzaXplX3QgcGFnZXNpemUoKTsKKyAgICB2b2lkIGRlYWxsb2NhdGUoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFzZSk7CisgICAgICAgIHN5c3RlbURlYWxsb2NhdGUo
dHJ1ZSk7CisgICAgfQogCi1wcml2YXRlOgorICAgIHN0YXRpYyBzaXplX3QgcGFnZVNpemUoKQor
ICAgIHsKKyAgICAgICAgaWYgKCFzX3BhZ2VTaXplKSB7CisgICAgICAgICAgICBzX3BhZ2VTaXpl
ID0gc3lzdGVtUGFnZVNpemUoKTsKKyAgICAgICAgICAgIC8vIHN5c3RlbSBwYWdlIHNpemUgbXVz
dCBiZSBhIHBvd2VyIG9mIHR3by4KKyAgICAgICAgICAgIEFTU0VSVCghKHNfcGFnZVNpemUgJiAo
c19wYWdlU2l6ZSAtIDEpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNfcGFnZVNpemU7
CisgICAgfQorCitwcm90ZWN0ZWQ6CiAjaWYgT1MoU1lNQklBTikKICAgICBQYWdlQWxsb2NhdGlv
bih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgUkNodW5rKiBjaHVuaykKICAgICAgICAgOiBtX2Jh
c2UoYmFzZSkKQEAgLTE2OCw5NiArMTY3LDE5MyBAQCBwcml2YXRlOgogICAgIH0KICNlbmRpZgog
CisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIHN5c3RlbUFsbG9jYXRlKHNpemVfdCwgVXNhZ2Us
IGJvb2wsIGJvb2wpOworI2lmIEhBVkUoUEFHRV9BTExPQ0FURV9BVCkKKyAgICBzdGF0aWMgUGFn
ZUFsbG9jYXRpb24gc3lzdGVtQWxsb2NhdGVBdCh2b2lkKiwgYm9vbCwgc2l6ZV90LCBVc2FnZSwg
Ym9vbCwgYm9vbCk7CisjZW5kaWYKKyNpZiBIQVZFKFBBR0VfQUxMT0NBVEVfQUxJR05FRCkKKyAg
ICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gc3lzdGVtQWxsb2NhdGVBbGlnbmVkKHNpemVfdCwgVXNh
Z2UpOworI2VuZGlmCisgICAgLy8gc3lzdGVtRGVhbGxvY2F0ZSB0YWtlcyBhIHBhcmFtZXRlciBp
bmRpY2F0aW5nIHdoZXRoZXIgbWVtb3J5IGlzIGN1cnJlbnRseSBjb21taXR0ZWQKKyAgICAvLyAo
dGhpcyBzaG91bGQgYWx3YXlzIGJlIHRydWUgZm9yIFBhZ2VBbGxvY2F0aW9uLCBmYWxzZSBmb3Ig
UGFnZVJlc2VydmF0aW9uKS4KKyAgICB2b2lkIHN5c3RlbURlYWxsb2NhdGUoYm9vbCBjb21taXR0
ZWQpOworICAgIHN0YXRpYyBzaXplX3Qgc3lzdGVtUGFnZVNpemUoKTsKKwogICAgIHZvaWQqIG1f
YmFzZTsKICAgICBzaXplX3QgbV9zaXplOwogI2lmIE9TKFNZTUJJQU4pCiAgICAgUkNodW5rKiBt
X2NodW5rOwogI2VuZGlmCisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBzaXplX3Qgc19wYWdl
U2l6ZTsKIH07CiAKLSNpZiBIQVZFKEFMSUdORURfQUxMT0NBVEUpCiAKLSNpZiBPUyhEQVJXSU4p
CisjaWYgSEFWRShNTUFQKQogCi1pbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246
OmFsbG9jYXRlQWxpZ25lZChzaXplX3Qgc2l6ZSwgVXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wg
ZXhlY3V0YWJsZSkKKworaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpzeXN0
ZW1BbGxvY2F0ZShzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wg
ZXhlY3V0YWJsZSkKIHsKLSAgICBBU1NFUlQoIShzaXplICYgKHNpemUgLSAxKSkpOwotICAgIHZt
X2FkZHJlc3NfdCBhZGRyZXNzID0gMDsKLSAgICB2bV9wcm90X3QgcHJvdGVjdGlvbiA9IFZNX1BS
T1RfUkVBRDsKLSAgICBwcm90ZWN0aW9uIHw9IGV4ZWN1dGFibGUgPyBWTV9QUk9UX0VYRUNVVEUg
OiAwOwotICAgIHByb3RlY3Rpb24gfD0gd3JpdGFibGUgPyBWTV9QUk9UX1dSSVRFIDogMDsKLSAg
ICB2bV9tYXAoY3VycmVudF90YXNrKCksICZhZGRyZXNzLCBzaXplLCAoc2l6ZSAtIDEpLCBWTV9G
TEFHU19BTllXSEVSRSB8IFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9SWSwgTUVNT1JZX09CSkVD
VF9OVUxMLCAwLCBGQUxTRSwgcHJvdGVjdGlvbiwgcHJvdGVjdGlvbiwgVk1fSU5IRVJJVF9ERUZB
VUxUKTsKLSAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
YWRkcmVzcyksIHNpemUpOworICAgIHJldHVybiBzeXN0ZW1BbGxvY2F0ZUF0KDAsIGZhbHNlLCBz
aXplLCB1c2FnZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUpOwogfQogCi0jZWxpZiBPUyhXSU5ET1dT
KQotCi1pbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25l
ZChzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJs
ZSkKK2lubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6c3lzdGVtQWxsb2NhdGVB
dCh2b2lkKiBhZGRyZXNzLCBib29sIGZpeGVkLCBzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJv
b2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKIHsKLSAgICBBU1NFUlQod3JpdGFibGUgJiYg
IWV4ZWN1dGFibGUpOwotI2lmIENPTVBJTEVSKE1JTkdXKSAmJiAhQ09NUElMRVIoTUlOR1c2NCkK
LSAgICB2b2lkKiBhZGRyZXNzID0gX19taW5nd19hbGlnbmVkX21hbGxvYyhzaXplLCBzaXplKTsK
KyAgICBpbnQgcHJvdGVjdGlvbiA9IFBST1RfUkVBRDsKKyAgICBpZiAod3JpdGFibGUpCisgICAg
ICAgIHByb3RlY3Rpb24gfD0gUFJPVF9XUklURTsKKyAgICBpZiAoZXhlY3V0YWJsZSkKKyAgICAg
ICAgcHJvdGVjdGlvbiB8PSBQUk9UX0VYRUM7CisKKyAgICBpbnQgZmxhZ3MgPSBNQVBfUFJJVkFU
RSB8IE1BUF9BTk9OOworICAgIGlmIChmaXhlZCkKKyAgICAgICAgZmxhZ3MgfD0gTUFQX0ZJWEVE
OworCisjaWYgT1MoREFSV0lOKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKyAgICBp
bnQgZmQgPSB1c2FnZTsKICNlbHNlCi0gICAgdm9pZCogYWRkcmVzcyA9IF9hbGlnbmVkX21hbGxv
YyhzaXplLCBzaXplKTsKKyAgICBpbnQgZmQgPSAtMTsKICNlbmRpZgotICAgIG1lbXNldChhZGRy
ZXNzLCAwLCBzaXplKTsKLSAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oYWRkcmVzcywgc2l6ZSk7
Ci19CiAKLSNlbGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCisgICAgdm9pZCogYmFzZSA9IG1tYXAo
YWRkcmVzcywgc2l6ZSwgcHJvdGVjdGlvbiwgZmxhZ3MsIGZkLCAwKTsKKyAgICBpZiAoYmFzZSA9
PSBNQVBfRkFJTEVEKQorICAgICAgICBiYXNlID0gMDsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRp
b24oYmFzZSwgc2l6ZSk7Cit9CiAKLWlubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlv
bjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJs
ZSwgYm9vbCBleGVjdXRhYmxlKQoraW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9u
OjpzeXN0ZW1BbGxvY2F0ZUFsaWduZWQoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlKQogewotICAg
IEFTU0VSVCh3cml0YWJsZSAmJiAhZXhlY3V0YWJsZSk7Ci0KKyNpZiBPUyhEQVJXSU4pCisgICAg
dm1fYWRkcmVzc190IGFkZHJlc3MgPSAwOworICAgIGludCBmbGFncyA9IFZNX0ZMQUdTX0FOWVdI
RVJFOworICAgIGlmICh1c2FnZSAhPSAtMSkKKyAgICAgICAgZmxhZ3MgfD0gdXNhZ2U7CisgICAg
dm1fbWFwKGN1cnJlbnRfdGFzaygpLCAmYWRkcmVzcywgc2l6ZSwgKHNpemUgLSAxKSwgZmxhZ3Ms
IE1FTU9SWV9PQkpFQ1RfTlVMTCwgMCwgRkFMU0UsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIFBS
T1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsIFZNX0lOSEVSSVRfREVGQVVMVCk7Cisg
ICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3Mp
LCBzaXplKTsKKyNlbGlmIEhBVkUoUE9TSVhfTUVNQUxJR04pCiAgICAgdm9pZCogYWRkcmVzczsK
ICAgICBwb3NpeF9tZW1hbGlnbigmYWRkcmVzcywgc2l6ZSwgc2l6ZSk7CiAgICAgcmV0dXJuIFBh
Z2VBbGxvY2F0aW9uKGFkZHJlc3MsIHNpemUpOwotfQotCi0jZWxpZiBIQVZFKE1NQVApCi0KLWlu
bGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVf
dCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQotewot
ICAgIEFTU0VSVCghKHNpemUgJiAoc2l6ZSAtIDEpKSk7Ci0gICAgQVNTRVJUKHdyaXRhYmxlICYm
ICFleGVjdXRhYmxlKTsKLSAgICBzdGF0aWMgc2l6ZV90IHBhZ2VzaXplID0gZ2V0cGFnZXNpemUo
KTsKLQotICAgIHNpemVfdCBleHRyYSA9IDA7Ci0gICAgaWYgKHNpemUgPiBwYWdlc2l6ZSkKLSAg
ICAgICAgZXh0cmEgPSBzaXplIC0gcGFnZXNpemU7CisjZWxzZQorICAgIHNpemVfdCBleHRyYSA9
IHNpemUgLSBwYWdlU2l6ZSgpOwogCi0gICAgaW50IGZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBf
QU5PTjsKKyAgICAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCisgICAgaWYgKChzaXplICsgZXh0cmEp
IDwgc2l6ZSkKKyAgICAgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKDAsIHNpemUpOwogCi0gICAg
aW50IHByb3RlY3Rpb24gPSBQUk9UX1JFQUQ7Ci0gICAgaWYgKHdyaXRhYmxlKQotICAgICAgICBw
cm90ZWN0aW9uIHw9IFBST1RfV1JJVEU7Ci0gICAgaWYgKGV4ZWN1dGFibGUpCi0gICAgICAgIHBy
b3RlY3Rpb24gfD0gUFJPVF9FWEVDOwotCi0gICAgLy8gdXNlIHBhZ2UgYWxsb2NhdGlvbgotICAg
IHZvaWQqIG1tYXBSZXN1bHQgPSBtbWFwKDAsIHNpemUgKyBleHRyYSwgcHJvdGVjdGlvbiwgZmxh
Z3MsIHVzYWdlLCAwKTsKKyNpZiBPUyhEQVJXSU4pICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKQorICAgIGludCBmZCA9IHVzYWdlOworI2Vsc2UKKyAgICBpbnQgZmQgPSAtMTsKKyNlbmRp
ZgorICAgIHZvaWQqIG1tYXBSZXN1bHQgPSBtbWFwKDAsIHNpemUgKyBleHRyYSwgUFJPVF9SRUFE
IHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgZmQsIDApOworICAgIGlmICht
bWFwUmVzdWx0ID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbigw
LCBzaXplKTsKICAgICB1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihtbWFwUmVzdWx0KTsKIAogICAgIHNpemVfdCBhZGp1c3QgPSAwOwogICAgIGlmICgoYWRk
cmVzcyAmIChzaXplIC0gMSkpKQogICAgICAgICBhZGp1c3QgPSBzaXplIC0gKGFkZHJlc3MgJiAo
c2l6ZSAtIDEpKTsKLQogICAgIGlmIChhZGp1c3QgPiAwKQogICAgICAgICBtdW5tYXAocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oYWRkcmVzcyksIGFkanVzdCk7Ci0KICAgICBpZiAoYWRqdXN0IDwg
ZXh0cmEpCiAgICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIqPihhZGRyZXNzICsg
YWRqdXN0ICsgc2l6ZSksIGV4dHJhIC0gYWRqdXN0KTsKLQogICAgIGFkZHJlc3MgKz0gYWRqdXN0
OwogCiAgICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFk
ZHJlc3MpLCBzaXplKTsKKyNlbmRpZgogfQogCitpbmxpbmUgdm9pZCBQYWdlQWxsb2NhdGlvbjo6
c3lzdGVtRGVhbGxvY2F0ZShib29sKQoreworICAgIGludCByZXN1bHQgPSBtdW5tYXAobV9iYXNl
LCBtX3NpemUpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCAhcmVzdWx0KTsKKyAgICBtX2Jh
c2UgPSAwOworfQorCitpbmxpbmUgc2l6ZV90IFBhZ2VBbGxvY2F0aW9uOjpzeXN0ZW1QYWdlU2l6
ZSgpCit7CisgICAgcmV0dXJuIGdldHBhZ2VzaXplKCk7Cit9CisKKworI2VsaWYgSEFWRShWSVJU
VUFMQUxMT0MpCisKKworaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpzeXN0
ZW1BbGxvY2F0ZShzaXplX3Qgc2l6ZSwgVXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0
YWJsZSkKK3sKKyAgICBEV09SRCBwcm90ZWN0aW9uID0gZXhlY3V0YWJsZSA/CisgICAgICAgICh3
cml0YWJsZSA/IFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUgOiBQQUdFX0VYRUNVVEVfUkVBRCkgOgor
ICAgICAgICAod3JpdGFibGUgPyBQQUdFX1JFQURXUklURSA6IFBBR0VfUkVBRE9OTFkpOworICAg
IHJldHVybiBQYWdlQWxsb2NhdGlvbihWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX0NPTU1JVCB8
IE1FTV9SRVNFUlZFLCBwcm90ZWN0aW9uKSwgc2l6ZSk7Cit9CisKKyNpZiBIQVZFKEFMSUdORURf
TUFMTE9DKQoraW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjpzeXN0ZW1BbGxv
Y2F0ZUFsaWduZWQoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlKQoreworI2lmIENPTVBJTEVSKE1J
TkdXKSAmJiAhQ09NUElMRVIoTUlOR1c2NCkKKyAgICB2b2lkKiBhZGRyZXNzID0gX19taW5nd19h
bGlnbmVkX21hbGxvYyhzaXplLCBzaXplKTsKKyNlbHNlCisgICAgdm9pZCogYWRkcmVzcyA9IF9h
bGlnbmVkX21hbGxvYyhzaXplLCBzaXplKTsKICNlbmRpZgorICAgIG1lbXNldChhZGRyZXNzLCAw
LCBzaXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oYWRkcmVzcywgc2l6ZSk7Cit9Cisj
ZW5kaWYKKworaW5saW5lIHZvaWQgUGFnZUFsbG9jYXRpb246OnN5c3RlbURlYWxsb2NhdGUoYm9v
bCBjb21taXR0ZWQpCit7CisjaWYgT1MoV0lOQ0UpCisgICAgaWYgKGNvbW1pdHRlZCkKKyAgICAg
ICAgVmlydHVhbEZyZWUobV9iYXNlLCBtX3NpemUsIE1FTV9ERUNPTU1JVCk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShjb21taXR0ZWQpOworI2VuZGlmCisgICAgVmlydHVhbEZyZWUobV9iYXNl
LCAwLCBNRU1fUkVMRUFTRSk7IAorICAgIG1fYmFzZSA9IDA7Cit9CisKK2lubGluZSBzaXplX3Qg
UGFnZUFsbG9jYXRpb246OnN5c3RlbVBhZ2VTaXplKCkKK3sKKyAgICBzdGF0aWMgc2l6ZV90IHNp
emUgPSAwOworICAgIFNZU1RFTV9JTkZPIHN5c3RlbV9pbmZvOworICAgIEdldFN5c3RlbUluZm8o
JnN5c3RlbV9pbmZvKTsKKyAgICBzaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKKyAgICBy
ZXR1cm4gc2l6ZTsKK30KKworCisjZWxpZiBPUyhTWU1CSUFOKQorCisKK2lubGluZSBQYWdlQWxs
b2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6c3lzdGVtQWxsb2NhdGUoc2l6ZV90IHNpemUsIFVzYWdl
IHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgUkNodW5rKiBy
Y2h1bmsgPSBuZXcgUkNodW5rKCk7CisgICAgaWYgKGV4ZWN1dGFibGUpCisgICAgICAgIHJjaHVu
ay0+Q3JlYXRlTG9jYWxDb2RlKHNpemUsIHNpemUpOworICAgIGVsc2UKKyAgICAgICAgcmNodW5r
LT5DcmVhdGVMb2NhbChzaXplLCBzaXplKTsKKyAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24ocmNo
dW5rLT5CYXNlKCksIHNpemUsIHJjaHVuayk7Cit9CisKK2lubGluZSB2b2lkIFBhZ2VBbGxvY2F0
aW9uOjpzeXN0ZW1EZWFsbG9jYXRlKGJvb2wpCit7CisgICAgbV9jaHVuay0+Q2xvc2UoKTsKKyAg
ICBkZWxldGUgbV9jaHVuazsKKyAgICBtX2Jhc2UgPSAwOworfQorCitpbmxpbmUgc2l6ZV90IFBh
Z2VBbGxvY2F0aW9uOjpzeXN0ZW1QYWdlU2l6ZSgpCit7CisgICAgc3RhdGljIFRJbnQgcGFnZV9z
aXplID0gMDsKKyAgICBVc2VySGFsOjpQYWdlU2l6ZUluQnl0ZXMocGFnZV9zaXplKTsKKyAgICBy
ZXR1cm4gcGFnZV9zaXplOworfQorCiAKICNlbmRpZgogCisKIH0KIAogdXNpbmcgV1RGOjpQYWdl
QWxsb2NhdGlvbjsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlUmVzZXJ2YXRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZVJlc2VydmF0aW9uLmgJKHJldmlz
aW9uIDY0NjI2KQkoZnJvbSBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZUFsbG9jYXRpb24uaDo2NDYy
NikKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlUmVzZXJ2YXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFBhZ2VBbGxvY2F0aW9uX2gKKyNkZWZpbmUgUGFnZUFsbG9jYXRp
b25faAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisKKyNpZiBPUyhTWU1CSUFOKQorI2lu
Y2x1ZGUgPGUzMnN0ZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFKE1NQVApCisjZGVmaW5lIFBBR0Vf
QUxMT0NBVElPTl9BTExPQ0FURV9BVCAxCisjZWxzZQorI2RlZmluZSBQQUdFX0FMTE9DQVRJT05f
QUxMT0NBVEVfQVQgMAorI2VuZGlmCisKKyNpZiBIQVZFKE1NQVApCisjaW5jbHVkZSA8c3lzL21t
YW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWYgT1MoREFSV0lOKQorCisj
aW5jbHVkZSA8bWFjaC9tYWNoX2luaXQuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgor
I2luY2x1ZGUgPG1hY2gvdGFzay5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2lu
Y2x1ZGUgPG1hY2gvdm1fbWFwLmg+CisKKyNlbGlmIE9TKFdJTkRPV1MpCisKKyNpbmNsdWRlIDxt
YWxsb2MuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNlbGlmIE9TKEhBSUtVKQorCisjaW5j
bHVkZSA8T1MuaD4KKworI2VsaWYgT1MoVU5JWCkKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisj
aWYgT1MoU09MQVJJUykKKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNlbHNlCisjaW5jbHVkZSA8cHRo
cmVhZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFKFBUSFJFQURfTlBfSCkKKyNpbmNsdWRlIDxwdGhy
ZWFkX25wLmg+CisjZW5kaWYKKworI2lmIE9TKFFOWCkKKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvcHJvY2Zz
Lmg+CisjZW5kaWYKKworI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQYWdlQWxs
b2NhdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBVc2FnZSB7CisgICAgICAgIFVua25vd25Vc2Fn
ZSA9IC0xLAorICAgICAgICBGYXN0TWFsbG9jUGFnZXMgPSBWTV9UQUdfRk9SX1RDTUFMTE9DX01F
TU9SWSwKKyAgICAgICAgSlNHQ0hlYXBQYWdlcyA9IFZNX1RBR19GT1JfQ09MTEVDVE9SX01FTU9S
WSwKKyAgICAgICAgSlNWTVN0YWNrUGFnZXMgPSBWTV9UQUdfRk9SX1JFR0lTVEVSRklMRV9NRU1P
UlksCisgICAgICAgIEpTSklUQ29kZVBhZ2VzID0gVk1fVEFHX0ZPUl9FWEVDVVRBQkxFQUxMT0NB
VE9SX01FTU9SWSwKKyAgICB9OworCisgICAgUGFnZUFsbG9jYXRpb24oKQorICAgICAgICA6IG1f
YmFzZSgwKQorICAgICAgICAsIG1fc2l6ZSgwKQorI2lmIE9TKFNZTUJJQU4pCisgICAgICAgICwg
bV9jaHVuaygwKQorI2VuZGlmCisgICAgeworICAgIH0KKworICAgIC8vIENyZWF0ZSBhIFBhZ2VB
bGxvY2F0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgYSBzdWItcmVnaW9uIG9mIGFuIGV4aXN0aW5n
IGFsbG9jYXRpb247CisgICAgLy8gZGVhbGxvY2F0ZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9u
IGFuIG9iamVjdCByZXByZXNudGluZyBhIHN1YnJlZ2lvbiwgb25seSBvbiB0aGUKKyAgICAvLyBp
bml0aWFsIGFsbG9jYXRpb24uCisgICAgUGFnZUFsbG9jYXRpb24odm9pZCogYmFzZSwgc2l6ZV90
IHNpemUsIGNvbnN0IFBhZ2VBbGxvY2F0aW9uJiBwYXJlbnQpCisgICAgICAgIDogbV9iYXNlKGJh
c2UpCisgICAgICAgICwgbV9zaXplKHNpemUpCisjaWYgT1MoU1lNQklBTikKKyAgICAgICAgLCBt
X2NodW5rKHBhcmVudC5tX2NodW5rKQorI2VuZGlmCisgICAgeworI2lmIGRlZmluZWQoTkRFQlVH
KSAmJiAhT1MoU1lNQklBTikKKyAgICAgICAgVU5VU0VEX1BBUkFNKHBhcmVudCk7CisjZW5kaWYK
KyAgICAgICAgQVNTRVJUKCFiYXNlIHx8IGJhc2UgPj0gcGFyZW50Lm1fYmFzZSk7CisgICAgICAg
IEFTU0VSVCghYmFzZSB8fCBzaXplIDw9IHBhcmVudC5tX3NpemUpOworICAgICAgICBBU1NFUlQo
IWJhc2UgfHwgc3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2UpICsgc2l6ZSA8PSBzdGF0aWNfY2FzdDxj
aGFyKj4ocGFyZW50Lm1fYmFzZSkgKyBwYXJlbnQubV9zaXplKTsKKyAgICB9CisKKyAgICB2b2lk
KiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIW1fYmFzZTsgfQorI2lmIENPTVBJTEVSKFdJTlNDVykKKyAgICBvcGVyYXRvciBib29sIGNv
bnN0IHsgcmV0dXJuIG1fYmFzZTsgfQorI2Vsc2UKKyAgICB0eXBlZGVmIHZvaWQqIFBhZ2VBbGxv
Y2F0aW9uOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJv
b2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlID8gJlBhZ2VBbGxvY2F0aW9uOjptX2Jhc2Ug
OiAwOyB9CisjZW5kaWYKKworICAgIGJvb2wgY29tbWl0KHZvaWQqLCBzaXplX3QsIGJvb2wgd3Jp
dGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSkgY29uc3Q7CisgICAgdm9pZCBk
ZWNvbW1pdCh2b2lkKiwgc2l6ZV90KSBjb25zdDsKKyAgICB2b2lkIGRlYWxsb2NhdGUoKTsKKwor
ICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiBhbGxvY2F0ZShzaXplX3QsIFVzYWdlID0gVW5rbm93
blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwor
ICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiByZXNlcnZlKHNpemVfdCwgVXNhZ2UgPSBVbmtub3du
VXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7Cisj
aWYgUEFHRV9BTExPQ0FUSU9OX0FMTE9DQVRFX0FUCisgICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9u
IGFsbG9jYXRlQXQodm9pZCogYWRkcmVzcywgYm9vbCBmaXhlZCwgc2l6ZV90LCBVc2FnZSA9IFVu
a25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNl
KTsKKyAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gcmVzZXJ2ZUF0KHZvaWQqIGFkZHJlc3MsIGJv
b2wgZml4ZWQsIHNpemVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0
cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxzZSk7CisjZW5kaWYKKworI2lmIEhBVkUoQUxJR05F
RF9BTExPQ0FURSkKKyAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxsb2NhdGVBbGlnbmVkKHNp
emVfdCwgVXNhZ2UgPSBVbmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4
ZWN1dGFibGUgPSBmYWxzZSk7CisjZW5kaWYKKworICAgIHN0YXRpYyBzaXplX3QgcGFnZXNpemUo
KTsKKworcHJpdmF0ZToKKyNpZiBPUyhTWU1CSUFOKQorICAgIFBhZ2VBbGxvY2F0aW9uKHZvaWQq
IGJhc2UsIHNpemVfdCBzaXplLCBSQ2h1bmsqIGNodW5rKQorICAgICAgICA6IG1fYmFzZShiYXNl
KQorICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAgICAsIG1fY2h1bmsoY2h1bmspCisgICAg
eworICAgIH0KKyNlbHNlCisgICAgUGFnZUFsbG9jYXRpb24odm9pZCogYmFzZSwgc2l6ZV90IHNp
emUpCisgICAgICAgIDogbV9iYXNlKGJhc2UpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
eworICAgIH0KKyNlbmRpZgorCisgICAgdm9pZCogbV9iYXNlOworICAgIHNpemVfdCBtX3NpemU7
CisjaWYgT1MoU1lNQklBTikKKyAgICBSQ2h1bmsqIG1fY2h1bms7CisjZW5kaWYKK307CisKKyNp
ZiBIQVZFKEFMSUdORURfQUxMT0NBVEUpCisKKyNpZiBPUyhEQVJXSU4pCisKK2lubGluZSBQYWdl
QWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNpemVfdCBzaXplLCBV
c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIEFTU0VSVCghKHNp
emUgJiAoc2l6ZSAtIDEpKSk7CisgICAgdm1fYWRkcmVzc190IGFkZHJlc3MgPSAwOworICAgIHZt
X3Byb3RfdCBwcm90ZWN0aW9uID0gVk1fUFJPVF9SRUFEOworICAgIHByb3RlY3Rpb24gfD0gZXhl
Y3V0YWJsZSA/IFZNX1BST1RfRVhFQ1VURSA6IDA7CisgICAgcHJvdGVjdGlvbiB8PSB3cml0YWJs
ZSA/IFZNX1BST1RfV1JJVEUgOiAwOworICAgIHZtX21hcChjdXJyZW50X3Rhc2soKSwgJmFkZHJl
c3MsIHNpemUsIChzaXplIC0gMSksIFZNX0ZMQUdTX0FOWVdIRVJFIHwgVk1fVEFHX0ZPUl9DT0xM
RUNUT1JfTUVNT1JZLCBNRU1PUllfT0JKRUNUX05VTEwsIDAsIEZBTFNFLCBwcm90ZWN0aW9uLCBw
cm90ZWN0aW9uLCBWTV9JTkhFUklUX0RFRkFVTFQpOworICAgIHJldHVybiBQYWdlQWxsb2NhdGlv
bihyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSwgc2l6ZSk7Cit9CisKKyNlbGlmIE9T
KFdJTkRPV1MpCisKK2lubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2Nh
dGVBbGlnbmVkKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBl
eGVjdXRhYmxlKQoreworICAgIEFTU0VSVCh3cml0YWJsZSAmJiAhZXhlY3V0YWJsZSk7CisjaWYg
Q09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihNSU5HVzY0KQorICAgIHZvaWQqIGFkZHJlc3Mg
PSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKHNpemUsIHNpemUpOworI2Vsc2UKKyAgICB2b2lkKiBh
ZGRyZXNzID0gX2FsaWduZWRfbWFsbG9jKHNpemUsIHNpemUpOworI2VuZGlmCisgICAgbWVtc2V0
KGFkZHJlc3MsIDAsIHNpemUpOworICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihhZGRyZXNzLCBz
aXplKTsKK30KKworI2VsaWYgSEFWRShQT1NJWF9NRU1BTElHTikKKworaW5saW5lIFBhZ2VBbGxv
Y2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFsaWduZWQoc2l6ZV90IHNpemUsIFVzYWdl
IHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKHdy
aXRhYmxlICYmICFleGVjdXRhYmxlKTsKKworICAgIHZvaWQqIGFkZHJlc3M7CisgICAgcG9zaXhf
bWVtYWxpZ24oJmFkZHJlc3MsIHNpemUsIHNpemUpOworICAgIHJldHVybiBQYWdlQWxsb2NhdGlv
bihhZGRyZXNzLCBzaXplKTsKK30KKworI2VsaWYgSEFWRShNTUFQKQorCitpbmxpbmUgUGFnZUFs
bG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChzaXplX3Qgc2l6ZSwgVXNh
Z2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQo
IShzaXplICYgKHNpemUgLSAxKSkpOworICAgIEFTU0VSVCh3cml0YWJsZSAmJiAhZXhlY3V0YWJs
ZSk7CisgICAgc3RhdGljIHNpemVfdCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisKKyAgICBz
aXplX3QgZXh0cmEgPSAwOworICAgIGlmIChzaXplID4gcGFnZXNpemUpCisgICAgICAgIGV4dHJh
ID0gc2l6ZSAtIHBhZ2VzaXplOworCisgICAgaW50IGZsYWdzID0gTUFQX1BSSVZBVEUgfCBNQVBf
QU5PTjsKKworICAgIGludCBwcm90ZWN0aW9uID0gUFJPVF9SRUFEOworICAgIGlmICh3cml0YWJs
ZSkKKyAgICAgICAgcHJvdGVjdGlvbiB8PSBQUk9UX1dSSVRFOworICAgIGlmIChleGVjdXRhYmxl
KQorICAgICAgICBwcm90ZWN0aW9uIHw9IFBST1RfRVhFQzsKKworICAgIC8vIHVzZSBwYWdlIGFs
bG9jYXRpb24KKyAgICB2b2lkKiBtbWFwUmVzdWx0ID0gbW1hcCgwLCBzaXplICsgZXh0cmEsIHBy
b3RlY3Rpb24sIGZsYWdzLCB1c2FnZSwgMCk7CisgICAgdWludHB0cl90IGFkZHJlc3MgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obW1hcFJlc3VsdCk7CisKKyAgICBzaXplX3QgYWRqdXN0
ID0gMDsKKyAgICBpZiAoKGFkZHJlc3MgJiAoc2l6ZSAtIDEpKSkKKyAgICAgICAgYWRqdXN0ID0g
c2l6ZSAtIChhZGRyZXNzICYgKHNpemUgLSAxKSk7CisKKyAgICBpZiAoYWRqdXN0ID4gMCkKKyAg
ICAgICAgbXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MpLCBhZGp1c3QpOwor
CisgICAgaWYgKGFkanVzdCA8IGV4dHJhKQorICAgICAgICBtdW5tYXAocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYWRkcmVzcyArIGFkanVzdCArIHNpemUpLCBleHRyYSAtIGFkanVzdCk7CisKKyAg
ICBhZGRyZXNzICs9IGFkanVzdDsKKworICAgIHJldHVybiBQYWdlQWxsb2NhdGlvbihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSwgc2l6ZSk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYK
KworfQorCit1c2luZyBXVEY6OlBhZ2VBbGxvY2F0aW9uOworCisjZW5kaWYgLy8gUGFnZUFsbG9j
YXRpb25faApJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1BhZ2VSZXNlcnZhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QYWdlUmVzZXJ2YXRpb24uaAkocmV2aXNpb24g
NjQ2MjYpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvUGFnZVJlc2VydmF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDI0MyArMjMsMjQxIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZu
ZGVmIFBhZ2VBbGxvY2F0aW9uX2gKLSNkZWZpbmUgUGFnZUFsbG9jYXRpb25faAorI2lmbmRlZiBQ
YWdlUmVzZXJ2YXRpb25faAorI2RlZmluZSBQYWdlUmVzZXJ2YXRpb25faAogCi0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KLSNpbmNsdWRl
IDx3dGYvVk1UYWdzLmg+Ci0KLSNpZiBPUyhTWU1CSUFOKQotI2luY2x1ZGUgPGUzMnN0ZC5oPgot
I2VuZGlmCi0KLSNpZiBIQVZFKE1NQVApCi0jZGVmaW5lIFBBR0VfQUxMT0NBVElPTl9BTExPQ0FU
RV9BVCAxCi0jZWxzZQotI2RlZmluZSBQQUdFX0FMTE9DQVRJT05fQUxMT0NBVEVfQVQgMAotI2Vu
ZGlmCi0KLSNpZiBIQVZFKE1NQVApCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotCi0jaW5jbHVkZSA8bWFjaC9tYWNo
X2luaXQuaD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgotI2luY2x1ZGUgPG1hY2gvdGFz
ay5oPgotI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgotI2luY2x1ZGUgPG1hY2gvdm1fbWFw
Lmg+Ci0KLSNlbGlmIE9TKFdJTkRPV1MpCi0KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRl
IDx3aW5kb3dzLmg+Ci0KLSNlbGlmIE9TKEhBSUtVKQotCi0jaW5jbHVkZSA8T1MuaD4KLQotI2Vs
aWYgT1MoVU5JWCkKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaWYgT1MoU09MQVJJUykKLSNp
bmNsdWRlIDx0aHJlYWQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0K
LSNpZiBIQVZFKFBUSFJFQURfTlBfSCkKLSNpbmNsdWRlIDxwdGhyZWFkX25wLmg+Ci0jZW5kaWYK
LQotI2lmIE9TKFFOWCkKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0j
aW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+Ci0jZW5kaWYKLQotI2Vu
ZGlmCisjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uLmg+CiAKIG5hbWVzcGFjZSBXVEYgewog
Ci1jbGFzcyBQYWdlQWxsb2NhdGlvbiB7CisvKgorICAgIFBhZ2VSZXNlcnZhdGlvbgorCisgICAg
TGlrZSBQYWdlQWxsb2NhdGlvbiwgdGhlIFBhZ2VSZXNlcnZhdGlvbiBjbGFzcyBwcm92aWRlcyBh
IGNyb3NzLXBsYXRmb3JtIG1lbW9yeQorICAgIGFsbG9jYXRpb24gaW50ZXJmYWNlLCBidXQgd2l0
aCBhIHNldCBvZiBjYXBhYmlsaXRpZXMgbW9yZSBzaW1pbGFyIHRvIHRoYXQgb2YKKyAgICBWaXJ0
dWFsQWxsb2MgdGhhbiBwb3NpeCBtbWFwLiAgUGFnZVJlc2VydmF0aW9uIGNhbiBiZSB1c2VkIHRv
IGFsbG9jYXRlIHZpcnR1YWwKKyAgICBtZW1vcnkgd2l0aG91dCBjb21taXR0aW5nIHBoeXNpY2Fs
IG1lbW9yeSBwYWdlcyB1c2luZyBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUuCisgICAgRm9sbG93
aW5nIGEgY2FsbCB0byByZXNlcnZlIGFsbCBtZW1vcnkgaW4gdGhlIHJlZ2lvbiBpcyBpbiBhIGRl
Y29tbWl0ZWQgc3RhdGUsCisgICAgaW4gd2hpY2ggdGhlIG1lbW9yeSBzaG91bGQgbm90IGJlIHVz
ZWQgKGFjY2Vzc2luZyB0aGUgbWVtb3J5IG1heSBjYXVzZSBhIGZhdWx0KS4KKworICAgIEJlZm9y
ZSB1c2luZyBtZW1vcnkgaXQgbXVzdCBiZSBjb21taXR0ZWQgYnkgY2FsbGluZyBjb21taXQsIHdo
aWNoIGlzIHBhc3NlZCBzdGFydAorICAgIGFuZCBzaXplIHZhbHVlcyAoYm90aCBvZiB3aGljaCBy
ZXF1aXJlIHN5c3RlbSBwYWdlIHNpemUgZ3JhbnVsYXJpdHkpLiAgT25lIHRoZQorICAgIGNvbW1p
dHRlZCBtZW1vcnkgaXMgbm8gbG9uZ2VyIG5lZWRlZCAnZGVjb21taXQnIG1heSBiZSBjYWxsZWQg
dG8gcmV0dXJuIHRoZQorICAgIG1lbW9yeSB0byBpdHMgZGV2b21taXR0ZWQgc3RhdGUuICBDb21t
aXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG1lbW9yeSB0aGF0IGlzCisgICAgY3VycmVudGx5
IGRlY29tbWl0dGVkLCBhbmQgZGVjb21taXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIG1lbW9y
eSByZWdpb25zIHRoYXQKKyAgICBhcmUgY3VycmVudGx5IGNvbW1pdHRlZC4gIEFsbCBtZW1vcnkg
c2hvdWxkIGJlIGRlY29tbWl0ZWQgYmVmb3JlIHRoZSByZXNlcnZhdGlvbgorICAgIGlzIGRlYWxs
b2NhdGVkLiAgVmFsdWVzIGluIG1lbW9yeSBtYXkgbm90IGJlIHJldGFpbmVkIGFjY3Jvc3MgYSBw
YWlyIG9mIGNhbGxzIGlmCisgICAgdGhlIHJlZ2lvbiBvZiBtZW1vcnkgaXMgZGVjb21taXR0ZWQg
YW5kIHRoZW4gY29tbWl0dGVkIGFnYWluLgorCisgICAgV2hlcmUgSEFWRShQQUdFX0FMTE9DQVRF
X0FUKSBpcyBhdmFpbGFibGUgYSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVBdCBtZXRob2QKKyAg
ICBhbHNvIGV4aXN0cywgd2l0aCBiZWhhdmlvdXIgbWlycm9yaW5nIFBhZ2VBbGxvY2F0aW9uOjph
bGxvY2F0ZUF0LgorCisgICAgTWVtb3J5IHByb3RlY3Rpb24gc2hvdWxkIG5vdCBiZSBjaGFuZ2Vk
IG9uIGRlY29tbWl0dGVkIG1lbW9yeSwgYW5kIGlmIHByb3RlY3Rpb24KKyAgICBpcyBjaGFuZ2Vk
IG9uIG1lbW9yeSB3aGlsZSBpdCBpcyBjb21taXR0ZWQgaXQgc2hvdWxkIGJlIHJldHVybmVkIHRv
IHRoZSBvcmlnbmFsCisgICAgcHJvdGVjdGlvbiBiZWZvcmUgZGVjb21taXQgaXMgY2FsbGVkLgor
CisgICAgTm90ZTogSW5oZXJpdHMgZnJvbSBQYWdlQWxsb2NhdGlvbiBwcml2YXRlbHkgdG8gcHJl
dmVudCBjbGllbnRzIGFjY2lkZW50YWxseQorICAgIGNhbGxpbmcgUGFnZUFsbG9jYXRpb246OmRl
YWxsb2NhdGUgb24gYSBQYWdlUmVzZXJ2YXRpb24uCisqLworY2xhc3MgUGFnZVJlc2VydmF0aW9u
IDogcHJpdmF0ZSBQYWdlQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0gICAgZW51bSBVc2FnZSB7Ci0g
ICAgICAgIFVua25vd25Vc2FnZSA9IC0xLAotICAgICAgICBGYXN0TWFsbG9jUGFnZXMgPSBWTV9U
QUdfRk9SX1RDTUFMTE9DX01FTU9SWSwKLSAgICAgICAgSlNHQ0hlYXBQYWdlcyA9IFZNX1RBR19G
T1JfQ09MTEVDVE9SX01FTU9SWSwKLSAgICAgICAgSlNWTVN0YWNrUGFnZXMgPSBWTV9UQUdfRk9S
X1JFR0lTVEVSRklMRV9NRU1PUlksCi0gICAgICAgIEpTSklUQ29kZVBhZ2VzID0gVk1fVEFHX0ZP
Ul9FWEVDVVRBQkxFQUxMT0NBVE9SX01FTU9SWSwKLSAgICB9OwotCi0gICAgUGFnZUFsbG9jYXRp
b24oKQotICAgICAgICA6IG1fYmFzZSgwKQotICAgICAgICAsIG1fc2l6ZSgwKQotI2lmIE9TKFNZ
TUJJQU4pCi0gICAgICAgICwgbV9jaHVuaygwKQotI2VuZGlmCisgICAgUGFnZVJlc2VydmF0aW9u
KCkKICAgICB7CiAgICAgfQogCi0gICAgLy8gQ3JlYXRlIGEgUGFnZUFsbG9jYXRpb24gb2JqZWN0
IHJlcHJlc2VudGluZyBhIHN1Yi1yZWdpb24gb2YgYW4gZXhpc3RpbmcgYWxsb2NhdGlvbjsKLSAg
ICAvLyBkZWFsbG9jYXRlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYW4gb2JqZWN0IHJlcHJl
c250aW5nIGEgc3VicmVnaW9uLCBvbmx5IG9uIHRoZQotICAgIC8vIGluaXRpYWwgYWxsb2NhdGlv
bi4KLSAgICBQYWdlQWxsb2NhdGlvbih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSwgY29uc3QgUGFn
ZUFsbG9jYXRpb24mIHBhcmVudCkKLSAgICAgICAgOiBtX2Jhc2UoYmFzZSkKLSAgICAgICAgLCBt
X3NpemUoc2l6ZSkKLSNpZiBPUyhTWU1CSUFOKQotICAgICAgICAsIG1fY2h1bmsocGFyZW50Lm1f
Y2h1bmspCi0jZW5kaWYKKyAgICB1c2luZyBQYWdlQWxsb2NhdGlvbjo6b3BlcmF0b3IhOworICAg
IHVzaW5nIFBhZ2VBbGxvY2F0aW9uOjpiYXNlOworICAgIHVzaW5nIFBhZ2VBbGxvY2F0aW9uOjpz
aXplOworCisgICAgYm9vbCBjb21taXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQogICAgIHsK
LSNpZiBkZWZpbmVkKE5ERUJVRykgJiYgIU9TKFNZTUJJQU4pCi0gICAgICAgIFVOVVNFRF9QQVJB
TShwYXJlbnQpOworICAgICAgICBBU1NFUlQobV9iYXNlKTsKKyAgICAgICAgLy8gc2l6ZSBtdXN0
IGJlIGEgbXVsdGlwbGUgb2YgcGFnZVNpemUuCisgICAgICAgIEFTU0VSVCghKHNpemUgJiAocGFn
ZVNpemUoKSAtIDEpKSk7CisgICAgICAgIC8vIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkIHRvIHBh
Z2VTaXplLgorICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihzdGFy
dCkgJiAocGFnZVNpemUoKSAtIDEpKSk7CisKKyAgICAgICAgYm9vbCBjb21taXRlZCA9IHN5c3Rl
bUNvbW1pdChzdGFydCwgc2l6ZSk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBpZiAoY29tbWl0
ZWQpCisgICAgICAgICAgICBtX2NvbW1pdHRlZCArPSBzaXplOwogI2VuZGlmCi0gICAgICAgIEFT
U0VSVCghYmFzZSB8fCBiYXNlID49IHBhcmVudC5tX2Jhc2UpOwotICAgICAgICBBU1NFUlQoIWJh
c2UgfHwgc2l6ZSA8PSBwYXJlbnQubV9zaXplKTsKLSAgICAgICAgQVNTRVJUKCFiYXNlIHx8IHN0
YXRpY19jYXN0PGNoYXIqPihiYXNlKSArIHNpemUgPD0gc3RhdGljX2Nhc3Q8Y2hhcio+KHBhcmVu
dC5tX2Jhc2UpICsgcGFyZW50Lm1fc2l6ZSk7CisgICAgICAgIHJldHVybiBjb21taXRlZDsKICAg
ICB9CisgICAgdm9pZCBkZWNvbW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9iYXNlKTsKKyAgICAgICAgLy8gc2l6ZSBtdXN0IGJlIGEgbXVsdGlw
bGUgb2YgcGFnZVNpemUuCisgICAgICAgIEFTU0VSVCghKHNpemUgJiAocGFnZVNpemUoKSAtIDEp
KSk7CisgICAgICAgIC8vIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkIHRvIHBhZ2VTaXplLgorICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihzdGFydCkgJiAocGFnZVNp
emUoKSAtIDEpKSk7CiAKLSAgICB2b2lkKiBiYXNlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlOyB9
Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fYmFzZTsgfQotI2lmIENPTVBJTEVSKFdJTlND
VykKLSAgICBvcGVyYXRvciBib29sIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQotI2Vsc2UKLSAg
ICB0eXBlZGVmIHZvaWQqIFBhZ2VBbGxvY2F0aW9uOjoqVW5zcGVjaWZpZWRCb29sVHlwZTsKLSAg
ICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlID8g
JlBhZ2VBbGxvY2F0aW9uOjptX2Jhc2UgOiAwOyB9CisjaWZuZGVmIE5ERUJVRworICAgICAgICBt
X2NvbW1pdHRlZCAtPSBzaXplOwogI2VuZGlmCisgICAgICAgIHN5c3RlbURlY29tbWl0KHN0YXJ0
LCBzaXplKTsKKyAgICB9CiAKLSAgICBib29sIGNvbW1pdCh2b2lkKiwgc2l6ZV90LCBib29sIHdy
aXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpIGNvbnN0OwotICAgIHZvaWQg
ZGVjb21taXQodm9pZCosIHNpemVfdCkgY29uc3Q7Ci0gICAgdm9pZCBkZWFsbG9jYXRlKCk7Ci0K
LSAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gYWxsb2NhdGUoc2l6ZV90LCBVc2FnZSA9IFVua25v
d25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsK
LSAgICBzdGF0aWMgUGFnZUFsbG9jYXRpb24gcmVzZXJ2ZShzaXplX3QsIFVzYWdlID0gVW5rbm93
blVzYWdlLCBib29sIHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwot
I2lmIFBBR0VfQUxMT0NBVElPTl9BTExPQ0FURV9BVAotICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlv
biBhbGxvY2F0ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCwgVXNhZ2UgPSBV
bmtub3duVXNhZ2UsIGJvb2wgd3JpdGFibGUgPSB0cnVlLCBib29sIGV4ZWN1dGFibGUgPSBmYWxz
ZSk7Ci0gICAgc3RhdGljIFBhZ2VBbGxvY2F0aW9uIHJlc2VydmVBdCh2b2lkKiBhZGRyZXNzLCBi
b29sIGZpeGVkLCBzaXplX3QsIFVzYWdlID0gVW5rbm93blVzYWdlLCBib29sIHdyaXRhYmxlID0g
dHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpOwotI2VuZGlmCisgICAgc3RhdGljIFBhZ2VS
ZXNlcnZhdGlvbiByZXNlcnZlKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSA9IFVua25vd25Vc2Fn
ZSwgYm9vbCB3cml0YWJsZSA9IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKQorICAgIHsK
KyAgICAgICAgLy8gc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgcGFnZVNpemUuCisgICAgICAg
IEFTU0VSVCghKHNpemUgJiAocGFnZVNpemUoKSAtIDEpKSk7CisgICAgICAgIHJldHVybiBzeXN0
ZW1SZXNlcnZlKHNpemUsIHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0YWJsZSk7CisgICAgfQogCi0j
aWYgSEFWRShBTElHTkVEX0FMTE9DQVRFKQotICAgIHN0YXRpYyBQYWdlQWxsb2NhdGlvbiBhbGxv
Y2F0ZUFsaWduZWQoc2l6ZV90LCBVc2FnZSA9IFVua25vd25Vc2FnZSwgYm9vbCB3cml0YWJsZSA9
IHRydWUsIGJvb2wgZXhlY3V0YWJsZSA9IGZhbHNlKTsKKyNpZiBIQVZFKFBBR0VfQUxMT0NBVEVf
QVQpCisgICAgc3RhdGljIFBhZ2VSZXNlcnZhdGlvbiByZXNlcnZlQXQodm9pZCogYWRkcmVzcywg
Ym9vbCBmaXhlZCwgc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlID0gVW5rbm93blVzYWdlLCBib29s
IHdyaXRhYmxlID0gdHJ1ZSwgYm9vbCBleGVjdXRhYmxlID0gZmFsc2UpCisgICAgeworICAgICAg
ICAvLyBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBwYWdlU2l6ZS4KKyAgICAgICAgQVNTRVJU
KCEoc2l6ZSAmIChwYWdlU2l6ZSgpIC0gMSkpKTsKKyAgICAgICAgLy8gYWRkcmVzcyBtdXN0IGJl
IGFsaWduZWQgdG8gcGFnZVNpemUuCisgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGFkZHJlc3MpICYgKHBhZ2VTaXplKCkgLSAxKSkpOworICAgICAgICByZXR1cm4g
c3lzdGVtUmVzZXJ2ZUF0KGFkZHJlc3MsIGZpeGVkLCBzaXplLCB1c2FnZSwgd3JpdGFibGUsIGV4
ZWN1dGFibGUpOworICAgIH0KICNlbmRpZgogCi0gICAgc3RhdGljIHNpemVfdCBwYWdlc2l6ZSgp
OworICAgIHZvaWQgZGVhbGxvY2F0ZSgpCisgICAgeworICAgICAgICBBU1NFUlQobV9iYXNlKTsK
KyAgICAgICAgQVNTRVJUKCFtX2NvbW1pdHRlZCk7CisgICAgICAgIHN5c3RlbURlYWxsb2NhdGUo
ZmFsc2UpOworICAgIH0KIAogcHJpdmF0ZToKICNpZiBPUyhTWU1CSUFOKQotICAgIFBhZ2VBbGxv
Y2F0aW9uKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplLCBSQ2h1bmsqIGNodW5rKQotICAgICAgICA6
IG1fYmFzZShiYXNlKQotICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICAsIG1fY2h1bmso
Y2h1bmspCi0gICAgewotICAgIH0KKyAgICBQYWdlUmVzZXJ2YXRpb24odm9pZCogYmFzZSwgc2l6
ZV90IHNpemUsIFJDaHVuayogY2h1bmspCisgICAgICAgIDogUGFnZUFsbG9jYXRpb24oYmFzZSwg
c2l6ZSwgY2h1bmspCiAjZWxzZQotICAgIFBhZ2VBbGxvY2F0aW9uKHZvaWQqIGJhc2UsIHNpemVf
dCBzaXplKQotICAgICAgICA6IG1fYmFzZShiYXNlKQotICAgICAgICAsIG1fc2l6ZShzaXplKQor
ICAgIFBhZ2VSZXNlcnZhdGlvbih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgOiBQ
YWdlQWxsb2NhdGlvbihiYXNlLCBzaXplKQorI2VuZGlmCisjaWZuZGVmIE5ERUJVRworICAgICAg
ICAsIG1fY29tbWl0dGVkKDApCisjZW5kaWYKICAgICB7CiAgICAgfQorCisgICAgYm9vbCBzeXN0
ZW1Db21taXQodm9pZCosIHNpemVfdCk7CisgICAgdm9pZCBzeXN0ZW1EZWNvbW1pdCh2b2lkKiwg
c2l6ZV90KTsKKyAgICBzdGF0aWMgUGFnZVJlc2VydmF0aW9uIHN5c3RlbVJlc2VydmUoc2l6ZV90
LCBVc2FnZSwgYm9vbCwgYm9vbCk7CisjaWYgSEFWRShQQUdFX0FMTE9DQVRFX0FUKQorICAgIHN0
YXRpYyBQYWdlUmVzZXJ2YXRpb24gc3lzdGVtUmVzZXJ2ZUF0KHZvaWQqLCBib29sLCBzaXplX3Qs
IFVzYWdlLCBib29sLCBib29sKTsKICNlbmRpZgogCi0gICAgdm9pZCogbV9iYXNlOwotICAgIHNp
emVfdCBtX3NpemU7Ci0jaWYgT1MoU1lNQklBTikKLSAgICBSQ2h1bmsqIG1fY2h1bms7CisjaWYg
SEFWRShWSVJUVUFMQUxMT0MpCisgICAgRFdPUkQgbV9wcm90ZWN0aW9uOworI2VuZGlmCisjaWZu
ZGVmIE5ERUJVRworICAgIHNpemVfdCBtX2NvbW1pdHRlZDsKICNlbmRpZgogfTsKIAotI2lmIEhB
VkUoQUxJR05FRF9BTExPQ0FURSkKIAotI2lmIE9TKERBUldJTikKKyNpZiBIQVZFKE1NQVApCiAK
LWlubGluZSBQYWdlQWxsb2NhdGlvbiBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGVBbGlnbmVkKHNp
emVfdCBzaXplLCBVc2FnZSwgYm9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQorCitpbmxp
bmUgYm9vbCBQYWdlUmVzZXJ2YXRpb246OnN5c3RlbUNvbW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemUpCiB7Ci0gICAgQVNTRVJUKCEoc2l6ZSAmIChzaXplIC0gMSkpKTsKLSAgICB2bV9hZGRy
ZXNzX3QgYWRkcmVzcyA9IDA7Ci0gICAgdm1fcHJvdF90IHByb3RlY3Rpb24gPSBWTV9QUk9UX1JF
QUQ7Ci0gICAgcHJvdGVjdGlvbiB8PSBleGVjdXRhYmxlID8gVk1fUFJPVF9FWEVDVVRFIDogMDsK
LSAgICBwcm90ZWN0aW9uIHw9IHdyaXRhYmxlID8gVk1fUFJPVF9XUklURSA6IDA7Ci0gICAgdm1f
bWFwKGN1cnJlbnRfdGFzaygpLCAmYWRkcmVzcywgc2l6ZSwgKHNpemUgLSAxKSwgVk1fRkxBR1Nf
QU5ZV0hFUkUgfCBWTV9UQUdfRk9SX0NPTExFQ1RPUl9NRU1PUlksIE1FTU9SWV9PQkpFQ1RfTlVM
TCwgMCwgRkFMU0UsIHByb3RlY3Rpb24sIHByb3RlY3Rpb24sIFZNX0lOSEVSSVRfREVGQVVMVCk7
Ci0gICAgcmV0dXJuIFBhZ2VBbGxvY2F0aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJl
c3MpLCBzaXplKTsKKyNpZiBIQVZFKE1BRFZfRlJFRV9SRVVTRSkKKyAgICB3aGlsZSAobWFkdmlz
ZShzdGFydCwgc2l6ZSwgTUFEVl9GUkVFX1JFVVNFKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4p
IHsgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3RhcnQpOworICAgIFVOVVNFRF9QQVJBTShz
aXplKTsKKyNlbmRpZgorICAgIHJldHVybiB0cnVlOwogfQogCi0jZWxpZiBPUyhXSU5ET1dTKQot
Ci1pbmxpbmUgUGFnZUFsbG9jYXRpb24gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlQWxpZ25lZChz
aXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0YWJsZSkK
K2lubGluZSB2b2lkIFBhZ2VSZXNlcnZhdGlvbjo6c3lzdGVtRGVjb21taXQodm9pZCogc3RhcnQs
IHNpemVfdCBzaXplKQogewotICAgIEFTU0VSVCh3cml0YWJsZSAmJiAhZXhlY3V0YWJsZSk7Ci0j
aWYgQ09NUElMRVIoTUlOR1cpICYmICFDT01QSUxFUihNSU5HVzY0KQotICAgIHZvaWQqIGFkZHJl
c3MgPSBfX21pbmd3X2FsaWduZWRfbWFsbG9jKHNpemUsIHNpemUpOworI2lmIEhBVkUoTUFEVl9G
UkVFX1JFVVNFKQorICAgIHdoaWxlIChtYWR2aXNlKHN0YXJ0LCBzaXplLCBNQURWX0ZSRUVfUkVV
U0FCTEUpID09IC0xICYmIGVycm5vID09IEVBR0FJTikgeyB9CisjZWxpZiBIQVZFKE1BRFZfRlJF
RSkKKyAgICB3aGlsZSAobWFkdmlzZShzdGFydCwgc2l6ZSwgTUFEVl9GUkVFKSA9PSAtMSAmJiBl
cnJubyA9PSBFQUdBSU4pIHsgfQorI2VsaWYgSEFWRShNQURWX0RPTlRORUVEKQorICAgIHdoaWxl
IChtYWR2aXNlKHN0YXJ0LCBzaXplLCBNQURWX0RPTlRORUVEKSA9PSAtMSAmJiBlcnJubyA9PSBF
QUdBSU4pIHsgfQogI2Vsc2UKLSAgICB2b2lkKiBhZGRyZXNzID0gX2FsaWduZWRfbWFsbG9jKHNp
emUsIHNpemUpOworICAgIFVOVVNFRF9QQVJBTShzdGFydCk7CisgICAgVU5VU0VEX1BBUkFNKHNp
emUpOwogI2VuZGlmCi0gICAgbWVtc2V0KGFkZHJlc3MsIDAsIHNpemUpOwotICAgIHJldHVybiBQ
YWdlQWxsb2NhdGlvbihhZGRyZXNzLCBzaXplKTsKIH0KIAotI2VsaWYgSEFWRShQT1NJWF9NRU1B
TElHTikKLQotaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZUFs
aWduZWQoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1
dGFibGUpCitpbmxpbmUgUGFnZVJlc2VydmF0aW9uIFBhZ2VSZXNlcnZhdGlvbjo6c3lzdGVtUmVz
ZXJ2ZShzaXplX3Qgc2l6ZSwgVXNhZ2UgdXNhZ2UsIGJvb2wgd3JpdGFibGUsIGJvb2wgZXhlY3V0
YWJsZSkKIHsKLSAgICBBU1NFUlQod3JpdGFibGUgJiYgIWV4ZWN1dGFibGUpOworICAgIHJldHVy
biBzeXN0ZW1SZXNlcnZlQXQoMCwgZmFsc2UsIHNpemUsIHVzYWdlLCB3cml0YWJsZSwgZXhlY3V0
YWJsZSk7Cit9CiAKLSAgICB2b2lkKiBhZGRyZXNzOwotICAgIHBvc2l4X21lbWFsaWduKCZhZGRy
ZXNzLCBzaXplLCBzaXplKTsKLSAgICByZXR1cm4gUGFnZUFsbG9jYXRpb24oYWRkcmVzcywgc2l6
ZSk7CitpbmxpbmUgUGFnZVJlc2VydmF0aW9uIFBhZ2VSZXNlcnZhdGlvbjo6c3lzdGVtUmVzZXJ2
ZUF0KHZvaWQqIGFkZHJlc3MsIGJvb2wgZml4ZWQsIHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwg
Ym9vbCB3cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIHZvaWQqIGJhc2UgPSBzeXN0
ZW1BbGxvY2F0ZUF0KGFkZHJlc3MsIGZpeGVkLCBzaXplLCB1c2FnZSwgd3JpdGFibGUsIGV4ZWN1
dGFibGUpLmJhc2UoKTsKKyNpZiBIQVZFKE1BRFZfRlJFRV9SRVVTRSkKKyAgICAvLyBXaGVuIHVz
aW5nIE1BRFZfRlJFRV9SRVVTRSB3ZSBrZWVwIGFsbCBkZWNvbW1pdHRlZCBtZW1vcnkgbWFya2Vk
IGFzIFJFVVNBQkxFLgorICAgIC8vIFdlIGNhbGwgUkVVU0Ugb24gY29tbWl0LCBhbmQgUkVVU0FC
TEUgb24gZGVjb21taXQuCisgICAgaWYgKGJhc2UpCisgICAgICAgIHdoaWxlIChtYWR2aXNlKGJh
c2UsIHNpemUsIE1BRFZfRlJFRV9SRVVTQUJMRSkgPT0gLTEgJiYgZXJybm8gPT0gRUFHQUlOKSB7
IH0KKyNlbmRpZgorICAgIHJldHVybiBQYWdlUmVzZXJ2YXRpb24oYmFzZSwgc2l6ZSk7CiB9CiAK
LSNlbGlmIEhBVkUoTU1BUCkKIAotaW5saW5lIFBhZ2VBbGxvY2F0aW9uIFBhZ2VBbGxvY2F0aW9u
OjphbGxvY2F0ZUFsaWduZWQoc2l6ZV90IHNpemUsIFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxl
LCBib29sIGV4ZWN1dGFibGUpCi17Ci0gICAgQVNTRVJUKCEoc2l6ZSAmIChzaXplIC0gMSkpKTsK
LSAgICBBU1NFUlQod3JpdGFibGUgJiYgIWV4ZWN1dGFibGUpOwotICAgIHN0YXRpYyBzaXplX3Qg
cGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOworI2VsaWYgSEFWRShWSVJUVUFMQUxMT0MpCiAKLSAg
ICBzaXplX3QgZXh0cmEgPSAwOwotICAgIGlmIChzaXplID4gcGFnZXNpemUpCi0gICAgICAgIGV4
dHJhID0gc2l6ZSAtIHBhZ2VzaXplOwogCi0gICAgaW50IGZsYWdzID0gTUFQX1BSSVZBVEUgfCBN
QVBfQU5PTjsKK2lubGluZSBib29sIFBhZ2VSZXNlcnZhdGlvbjo6c3lzdGVtQ29tbWl0KHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gVmlydHVhbEFsbG9jKHN0YXJ0LCBz
aXplLCBNRU1fQ09NTUlULCBtX3Byb3RlY3Rpb24pID09IHN0YXJ0OworfQogCi0gICAgaW50IHBy
b3RlY3Rpb24gPSBQUk9UX1JFQUQ7Ci0gICAgaWYgKHdyaXRhYmxlKQotICAgICAgICBwcm90ZWN0
aW9uIHw9IFBST1RfV1JJVEU7Ci0gICAgaWYgKGV4ZWN1dGFibGUpCi0gICAgICAgIHByb3RlY3Rp
b24gfD0gUFJPVF9FWEVDOworaW5saW5lIHZvaWQgUGFnZVJlc2VydmF0aW9uOjpzeXN0ZW1EZWNv
bW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpCit7CisgICAgVmlydHVhbEZyZWUoc3RhcnQs
IHNpemUsIE1FTV9ERUNPTU1JVCk7Cit9CisKK2lubGluZSBQYWdlUmVzZXJ2YXRpb24gUGFnZVJl
c2VydmF0aW9uOjpzeXN0ZW1SZXNlcnZlKHNpemVfdCBzaXplLCBVc2FnZSB1c2FnZSwgYm9vbCB3
cml0YWJsZSwgYm9vbCBleGVjdXRhYmxlKQoreworICAgIC8vIFJlY29yZCB0aGUgcHJvdGVjdGlv
biBmb3IgdXNlIGR1cmluZyBjb21taXQuCisgICAgbV9wcm90ZWN0aW9uID0gZXhlY3V0YWJsZSA/
CisgICAgICAgICh3cml0YWJsZSA/IFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUgOiBQQUdFX0VYRUNV
VEVfUkVBRCkgOgorICAgICAgICAod3JpdGFibGUgPyBQQUdFX1JFQURXUklURSA6IFBBR0VfUkVB
RE9OTFkpOworICAgIHJldHVybiBQYWdlUmVzZXJ2YXRpb24oVmlydHVhbEFsbG9jKDAsIHNpemUs
IE1FTV9SRVNFUlZFLCBtX3Byb3RlY3Rpb24pLCBzaXplKTsKK30KIAotICAgIC8vIHVzZSBwYWdl
IGFsbG9jYXRpb24KLSAgICB2b2lkKiBtbWFwUmVzdWx0ID0gbW1hcCgwLCBzaXplICsgZXh0cmEs
IHByb3RlY3Rpb24sIGZsYWdzLCB1c2FnZSwgMCk7Ci0gICAgdWludHB0cl90IGFkZHJlc3MgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obW1hcFJlc3VsdCk7CiAKLSAgICBzaXplX3QgYWRq
dXN0ID0gMDsKLSAgICBpZiAoKGFkZHJlc3MgJiAoc2l6ZSAtIDEpKSkKLSAgICAgICAgYWRqdXN0
ID0gc2l6ZSAtIChhZGRyZXNzICYgKHNpemUgLSAxKSk7CisjZWxpZiBPUyhTWU1CSUFOKQogCi0g
ICAgaWYgKGFkanVzdCA+IDApCi0gICAgICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PGNoYXIq
PihhZGRyZXNzKSwgYWRqdXN0KTsKIAotICAgIGlmIChhZGp1c3QgPCBleHRyYSkKLSAgICAgICAg
bXVubWFwKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGFkZHJlc3MgKyBhZGp1c3QgKyBzaXplKSwg
ZXh0cmEgLSBhZGp1c3QpOworaW5saW5lIGJvb2wgUGFnZVJlc2VydmF0aW9uOjpzeXN0ZW1Db21t
aXQodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQoreworICAgIGlmIChtX2NodW5rKSB7CisgICAg
ICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGJhc2UoKSkg
LSByZWludGVycHJldF9jYXN0PGludHB0cl90PihzdGFydCk7CisgICAgICAgIG1fY2h1bmstPkNv
bW1pdChvZmZzZXQsIHNpemUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGFk
ZHJlc3MgKz0gYWRqdXN0OworaW5saW5lIHZvaWQgUGFnZVJlc2VydmF0aW9uOjpzeXN0ZW1EZWNv
bW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKG1fY2h1bmspIHsKKyAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYmFzZSgp
KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0YXJ0KTsKKyAgICAgICAgbV9jaHVuay0+
RGVjb21taXQob2Zmc2V0LCBzaXplKTsKKyAgICB9Cit9CiAKLSAgICByZXR1cm4gUGFnZUFsbG9j
YXRpb24ocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcyksIHNpemUpOworaW5saW5lIFBh
Z2VSZXNlcnZhdGlvbiBQYWdlUmVzZXJ2YXRpb246OnN5c3RlbVJlc2VydmUoc2l6ZV90IHNpemUs
IFVzYWdlIHVzYWdlLCBib29sIHdyaXRhYmxlLCBib29sIGV4ZWN1dGFibGUpCit7CisgICAgUkNo
dW5rKiByY2h1bmsgPSBuZXcgUkNodW5rKCk7CisgICAgaWYgKGV4ZWN1dGFibGUpCisgICAgICAg
IHJjaHVuay0+Q3JlYXRlTG9jYWxDb2RlKDAsIHNpemUpOworICAgIGVsc2UKKyAgICAgICAgcmNo
dW5rLT5DcmVhdGVEaXNjb25uZWN0ZWRMb2NhbCgwLCAwLCBzaXplKTsKKyAgICByZXR1cm4gUGFn
ZVJlc2VydmF0aW9uKHJjaHVuay0+QmFzZSgpLCBzaXplLCByY2h1bmspOwogfQogCi0jZW5kaWYK
IAogI2VuZGlmCiAKKwogfQogCi11c2luZyBXVEY6OlBhZ2VBbGxvY2F0aW9uOwordXNpbmcgV1RG
OjpQYWdlUmVzZXJ2YXRpb247CiAKLSNlbmRpZiAvLyBQYWdlQWxsb2NhdGlvbl9oCisjZW5kaWYg
Ly8gUGFnZVJlc2VydmF0aW9uX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA2
NDY4NCkKKysrIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MDgsNyArNzA4LDYgQEAKICNkZWZpbmUgSEFWRV9FUlJOT19IIDEKICNkZWZpbmUgSEFWRV9M
QU5HSU5GT19IIDEKICNkZWZpbmUgSEFWRV9NTUFQIDEKLSNkZWZpbmUgSEFWRV9BTElHTkVEX0FM
TE9DQVRFIDEKICNkZWZpbmUgSEFWRV9NRVJHRVNPUlQgMQogI2RlZmluZSBIQVZFX1NCUksgMQog
I2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCkBAIC03MzcsMTAgKzczNiw5IEBACiAKICNpZiBPUyhX
SU5DRSkKICNkZWZpbmUgSEFWRV9FUlJOT19IIDAKLSNkZWZpbmUgSEFWRV9BTElHTkVEX0FMTE9D
QVRFIDAKICNlbHNlCiAjZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0ggMQotI2RlZmluZSBIQVZFX0FM
SUdORURfQUxMT0NBVEUgMQorI2RlZmluZSBIQVZFX0FMSUdORURfTUFMTE9DIDEKICNlbmRpZgog
I2RlZmluZSBIQVZFX1ZJUlRVQUxBTExPQyAxCiAKQEAgLTc5NywxMiArNzk1LDExIEBACiAKICNl
bmRpZgogCi0jaWYgIWRlZmluZWQoSEFWRV9BTElHTkVEX0FMTE9DQVRFKQotI2lmIEhBVkUoUE9T
SVhfTUVNQUxJR04pCi0jZGVmaW5lIEhBVkVfQUxJR05FRF9BTExPQ0FURSAxCi0jZWxzZQotI2Rl
ZmluZSBIQVZFX0FMSUdORURfQUxMT0NBVEUgMAorI2lmIEhBVkUoTU1BUCkgfHwgKEhBVkUoVklS
VFVBTEFMTE9DKSAmJiBIQVZFKEFMSUdORURfTUFMTE9DKSkKKyNkZWZpbmUgSEFWRV9QQUdFX0FM
TE9DQVRFX0FMSUdORUQgMQogI2VuZGlmCisjaWYgSEFWRShNTUFQKQorI2RlZmluZSBIQVZFX1BB
R0VfQUxMT0NBVEVfQVQgMQogI2VuZGlmCiAKIC8qIEVOQUJMRSBtYWNybyBkZWZhdWx0cyAqLwpJ
bmRleDogSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRH
bHVlL0NoYW5nZUxvZwkocmV2aXNpb24gNjQ2ODQpCisrKyBKYXZhU2NyaXB0R2x1ZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOC0wNCAgR2F2aW4gQmFy
cmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQzNTE1IC0gRml4IHNtYWxsIGRlc2lnbiBp
c3N1ZXMgd2l0aCBQYWdlQWxsb2NhdGlvbiwgc3BsaXQgb3V0IFBhZ2VSZXNlcnZhdGlvbi4KKyAg
ICAgICAgKGFkZCBmb3J3YXJkaW5nIGhlYWRlcnMpCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVh
ZGVycy93dGYvQml0bWFwLmg6IEFkZGVkLgorICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9QYWdlUmVzZXJ2YXRpb24uaDogQWRkZWQuCisKIDIwMTAtMDgtMDQgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHI2NDY1NS4KSW5kZXg6IEphdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9QYWdlUmVzZXJ2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0R2x1ZS9Gb3J3YXJk
aW5nSGVhZGVycy93dGYvUGFnZVJlc2VydmF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBKYXZhU2Ny
aXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvUGFnZVJlc2VydmF0aW9uLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9QYWdlUmVzZXJ2YXRp
b24uaD4KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2NDY4NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMDQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFy
cmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEJ1ZyA0MzUxNSAtIEZpeCBzbWFsbCBkZXNpZ24gaXNzdWVzIHdpdGggUGFn
ZUFsbG9jYXRpb24sIHNwbGl0IG91dCBQYWdlUmVzZXJ2YXRpb24uCisgICAgICAgIChhZGQgZm9y
d2FyZGluZyBoZWFkZXJzKQorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL0JpdG1h
cC5oOiBBZGRlZC4KKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvUGFnZVJlc2VydmF0
aW9uLmg6IEFkZGVkLgorCiAyMDEwLTA4LTA0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CiAKICAgICAgICAgQnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvUGFnZVJlc2VydmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy93dGYvUGFnZVJlc2VydmF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3d0Zi9QYWdlUmVzZXJ2YXRpb24uaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1BhZ2VSZXNlcnZhdGlvbl9oCisjZGVmaW5l
IFdlYkNvcmVfRldEX1BhZ2VSZXNlcnZhdGlvbl9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
UGFnZVJlc2VydmF0aW9uLmg+CisjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>