<?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>154365</bug_id>
          
          <creation_ts>2016-02-17 16:30:51 -0800</creation_ts>
          <short_desc>Rename FTLB3Blah to FTLBlah</short_desc>
          <delta_ts>2016-04-29 19:08:52 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165793</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 16:30:51 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165794</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 16:31:18 -0800</bug_when>
    <thetext>RS=ggaren, benjamin, and awesomekling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165795</commentid>
    <comment_count>2</comment_count>
      <attachid>271604</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 16:32:26 -0800</bug_when>
    <thetext>Created attachment 271604
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165796</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 16:34:04 -0800</bug_when>
    <thetext>Attachment 271604 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:27:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:141:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:219:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:26:  #ifndef header guard has wrong style, please use: FTLOutput_h  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:222:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:222:  The parameter name &quot;pointer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:223:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:223:  The parameter name &quot;pointer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:529:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLCompile.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLCompile.cpp:130:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 12 in 6 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>1165797</commentid>
    <comment_count>4</comment_count>
      <attachid>271605</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 16:37:23 -0800</bug_when>
    <thetext>Created attachment 271605
the pqtch

fix buidl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165802</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 16:38:56 -0800</bug_when>
    <thetext>Attachment 271605 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:141:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.cpp:219:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:222:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:222:  The parameter name &quot;pointer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:223:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:223:  The parameter name &quot;pointer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLOutput.h:529:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLCompile.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLCompile.cpp:130:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 10 in 8 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>1188956</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-04-29 19:08:52 -0700</bug_when>
    <thetext>This landed: &lt;https://trac.webkit.org/changeset/196731&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271604</attachid>
            <date>2016-02-17 16:32:26 -0800</date>
            <delta_ts>2016-02-17 16:37:23 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>98099</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE2LTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVuYW1lIEZUTEIzQmxhaCB0byBGVExCbGFoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzNjUKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJl
eSBHYXJlbiwgQmVuamFtaW4gUG91bGFpbiwgYW5kIEF3ZXNvbWUgS2xpbmcuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGZ0bC9GVExCM0NvbXBpbGUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGZ0bC9GVExCM091dHB1dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZU
TEIzT3V0cHV0Lmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAuCisgICAg
ICAgICogZnRsL0ZUTE91dHB1dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNPdXRwdXQuY3BwLgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oLgorCiAyMDE2LTAy
LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIExM
Vk0gZGVwZW5kZW5jaWVzIGZyb20gV2ViS2l0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxOTY3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMDAsMTAgKzEwMDAsOSBAQCBpZiAoRU5B
QkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExBYnN0cmFjdEhlYXAuY3BwCiAgICAgICAgIGZ0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAogICAgICAgICBmdGwvRlRMQXZhaWxhYmxl
UmVjb3ZlcnkuY3BwCi0gICAgICAgIGZ0bC9GVExCM0NvbXBpbGUuY3BwCi0gICAgICAgIGZ0bC9G
VExCM091dHB1dC5jcHAKICAgICAgICAgZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKICAgICAgICAg
ZnRsL0ZUTENvbW1vblZhbHVlcy5jcHAKKyAgICAgICAgZnRsL0ZUTENvbXBpbGUuY3BwCiAgICAg
ICAgIGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1l
bnQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcApAQCAtMTAy
Myw2ICsxMDIyLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKICAgICAgICAg
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisgICAgICAgIGZ0bC9GVExPdXRwdXQuY3BwCiAgICAgICAg
IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAogICAgICAgICBmdGwvRlRMUmVj
b3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0bC9GVExTYXZlUmVzdG9yZS5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTY3MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCTBGOTc4QjNCMUFBRUE3MUQwMDdDNzM2
OSAvKiBDb25zdGFudE1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NzhCM0ExQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAg
Ki87IH07CiAJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5ODIw
NUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi87IH07CiAJCTBG
OTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTgyMDVFMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjlCMURCNDFDMEU0MkE1MDBFNUJGRDIgLyogRlRMQjNP
dXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTEIzT3V0cHV0LmNwcCAqLzsgfTsKKwkJMEY5
QjFEQjQxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlCMURCMzFDMEU0MkE1MDBFNUJGRDIgLyog
RlRMT3V0cHV0LmNwcCAqLzsgfTsKIAkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9T
UkV4aXRIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5QjFEQjUxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuY3BwICov
OyB9OwogCQkwRjlCMURCODFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QjFEQjYxQzBF
NDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLzsgfTsKIAkJMEY5RDMzNzAxNjVE
QkI5MDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNz
ZW1ibGVyLmNwcCAqLzsgfTsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCQkwRkIzODc4RTFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2Nr
V29ya2xpc3QuaCAqLzsgfTsKIAkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGlt
aXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkIzODc4QzFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVy
LmNwcCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxv
Y2tPcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9
OwotCQkwRkIzODc5MjFCRkQzMUExMDBFM0FCMUUgLyogRlRMQjNDb21waWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzkxMUJGRDMxQTEw
MEUzQUIxRSAvKiBGVExCM0NvbXBpbGUuY3BwICovOyB9OworCQkwRkIzODc5MjFCRkQzMUExMDBF
M0FCMUUgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQ29tcGlsZS5jcHAg
Ki87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDM4QTIxOTI3
MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CiAJCTBGQjRGQjczMUJDODQz
MTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzAxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aC5jcHAgKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExM
YXp5U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLzsgfTsK
QEAgLTExMTYsNyArMTExNiw3IEBACiAJCTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwICovOyB9OwogCQkyNjcxOEJBNTFCRTk5Rjc4MDA1MjAx
N0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBB
aXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovOyB9OwogCQkyNjg0RDQzODFDMDAxNjFD
MDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5o
ICovOyB9OwotCQkyNjlENjM2RTFCRkJFNUQxMDAxMDFCMUQgLyogRlRMQjNPdXRwdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OUQ2MzZEMUJGQkU1
RDAwMDEwMUIxRCAvKiBGVExCM091dHB1dC5oICovOyB9OworCQkyNjlENjM2RTFCRkJFNUQxMDAx
MDFCMUQgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggKi87IH07
CiAJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFC
RDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi87IH07
CiAJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMDVBQkQ0
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgfTsKIAkJ
MkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTExMTI0MzE5MkZDRTc5
MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcCAqLzsgfTsKQEAgLTI2NzksNyArMjY3
OSw3IEBACiAJCTBGOTc4QjNBMUFBRUE3MUQwMDdDNzM2OSAvKiBDb25zdGFudE1vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRNb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcmVjaXNlSnVtcFRhcmdldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZWNpc2VKdW1wVGFyZ2V0cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjlCMURCMzFDMEU0MkE1MDBFNUJGRDIgLyogRlRMQjNPdXRw
dXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQjNPdXRwdXQu
Y3BwOyBwYXRoID0gZnRsL0ZUTEIzT3V0cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTE91dHB1dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPdXRwdXQuY3BwOyBwYXRoID0gZnRsL0ZU
TE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUIxREI1MUMwRTQy
QkQwMEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTE9TUkV4aXRIYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTE9TUkV4
aXRIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlCMURCNjFDMEU0
MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExPU1JFeGl0SGFuZGxlLmg7IHBhdGggPSBmdGwvRlRMT1NSRXhpdEhhbmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM2RTE2NURCQjhEMDA1QUQz
ODcgLyogRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MjMsNyArMjcyMyw3IEBACiAJCTBG
QjM4NzhCMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL2Fpci9B
aXJCbG9ja1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjM4NzhD
MUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkIzODc4RDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09y
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpck9wdGltaXplQmxvY2tP
cmRlci5oOyBwYXRoID0gYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQjNDb21w
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEIzQ29tcGls
ZS5jcHA7IHBhdGggPSBmdGwvRlRMQjNDb21waWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzg3OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBm
dGwvRlRMQ29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQzOEEy
MTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZn
L0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkx
NkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyMjUsNyArMzIyNSw3IEBACiAJCTI2NzE4QkEy
MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZy5jcHA7IHBhdGggPSBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjcxOEJBMzFCRTk5Rjc4MDA1MjAx
N0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaDsgcGF0aCA9IGIz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNjlENjM2RDFC
RkJFNUQwMDAxMDFCMUQgLyogRlRMQjNPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMQjNPdXRwdXQuaDsgcGF0aCA9IGZ0bC9GVExCM091dHB1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMT3V0
cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE91dHB1dC5oOyBwYXRo
ID0gZnRsL0ZUTE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTA1QUJE
MzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1
MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJBMTExMjQzMTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1MjAsMTMgKzQ1MjAsMTEg
QEAKIAkJCQkwRkVBMEExQTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oICovLAogCQkJCTBGNDg1MzIzMTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVS
ZWNvdmVyeS5jcHAgKi8sCiAJCQkJMEY0ODUzMjQxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWls
YWJsZVJlY292ZXJ5LmggKi8sCi0JCQkJMEZCMzg3OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTEIz
Q29tcGlsZS5jcHAgKi8sCi0JCQkJMEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTEIzT3V0
cHV0LmNwcCAqLywKLQkJCQkyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMQjNPdXRwdXQu
aCAqLywKIAkJCQkwRkVBMDlGRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNw
cCAqLywKIAkJCQkwRkVBMDlGRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmgg
Ki8sCiAJCQkJMEZFQTBBMjUxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5jcHAg
Ki8sCiAJCQkJMEZFQTBBMjExNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5oICov
LAorCQkJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLywKIAkJ
CQkwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICovLAogCQkJCTBGOUQ0
QzBBMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwICovLAogCQkJCTBG
OUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLywKQEAgLTQ1
NzAsNiArNDU2OCw4IEBACiAJCQkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4
aXRDb21waWxlci5oICovLAogCQkJCTBGOUIxREI1MUMwRTQyQkQwMEU1QkZEMiAvKiBGVExPU1JF
eGl0SGFuZGxlLmNwcCAqLywKIAkJCQkwRjlCMURCNjFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NS
RXhpdEhhbmRsZS5oICovLAorCQkJCTBGOUIxREIzMUMwRTQyQTUwMEU1QkZEMiAvKiBGVExPdXRw
dXQuY3BwICovLAorCQkJCTI2OUQ2MzZEMUJGQkU1RDAwMDEwMUIxRCAvKiBGVExPdXRwdXQuaCAq
LywKIAkJCQkwRjlENEMwRTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHAgKi8sCiAJCQkJMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuaCAqLywKIAkJCQkwRjQ4NTMyNTE4N0RGREVDMDA4M0I2ODcg
LyogRlRMUmVjb3ZlcnlPcGNvZGUuY3BwICovLApAQCAtNjk3NCw3ICs2OTc0LDcgQEAKIAkJCQkw
RjQ1NzA0MTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTI2OUQ2MzZFMUJGQkU1RDEwMDEwMUIxRCAvKiBGVExCM091dHB1dC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMjY5RDYzNkUxQkZCRTVEMTAwMTAxQjFEIC8qIEZUTE91dHB1dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyog
QjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTg4MTgsNyArODgxOCw3IEBACiAJ
CQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDhBMzJCMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGOUIxREI0MUMwRTQy
QTUwMEU1QkZEMiAvKiBGVExCM091dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjlCMURC
NDFDMEU0MkE1MDBFNUJGRDIgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAvKiBE
RkdVbmlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA0Niw3ICs5MDQ2LDcg
QEAKIAkJCQlFM0QyMzlDODFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzE4Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3
QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQjM4
NzkyMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExCM0NvbXBpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZCMzg3OTIxQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90
QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4
IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQjNDb21waWxlLmNwcAkocmV2aXNpb24gMTk2NzI5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTENvbXBpbGUuaCIKLQotI2lm
IEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiQWlyQ29kZS5oIgotI2luY2x1ZGUgIkIzR2Vu
ZXJhdGUuaCIKLSNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKLSNpbmNsdWRlICJCM1N0
YWNrU2xvdC5oIgotI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCi0jaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiREZHQ29tbW9uLmgiCi0jaW5jbHVkZSAiREZHR3Jh
cGhTYWZlcG9pbnQuaCIKLSNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRGF0
YVZpZXcuaCIKLSNpbmNsdWRlICJEaXNhc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJGVExKSVRDb2Rl
LmgiCi0jaW5jbHVkZSAiRlRMVGh1bmtzLmgiCi0jaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
Ci0jaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNlIERGRzsKLQotdm9pZCBjb21waWxl
KFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZXN1bHQmIHNhZmVwb2ludFJlc3VsdCkKLXsKLSAg
ICBHcmFwaCYgZ3JhcGggPSBzdGF0ZS5ncmFwaDsKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGdyYXBoLm1fY29kZUJsb2NrOwotICAgIFZNJiB2bSA9IGdyYXBoLm1fdm07Ci0KLSAgICB7Ci0g
ICAgICAgIEdyYXBoU2FmZXBvaW50IHNhZmVwb2ludChzdGF0ZS5ncmFwaCwgc2FmZXBvaW50UmVz
dWx0KTsKLQotICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24oKnN0YXRlLnByb2MpOwot
ICAgIH0KLQotICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2VsbGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBSRUxFQVNFX0FTU0VSVCghc3RhdGUuZ3JhcGgubV92bS5oZWFwLmlz
Q29sbGVjdGluZygpKTsKLSAgICAKLSAgICBpZiAoc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWdpc3RlckF0T2Zmc2V0
TGlzdD4gcmVnaXN0ZXJPZmZzZXRzID0KLSAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxSZWdpc3Rl
ckF0T2Zmc2V0TGlzdD4oc3RhdGUucHJvYy0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICBp
ZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGF0YUxvZygiVW53aW5kIGlu
Zm8gZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBK
SVRDb2RlOjpGVExKSVQpLCAiOlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICAiLCAqcmVnaXN0
ZXJPZmZzZXRzLCAiXG4iKTsKLSAgICB9Ci0gICAgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2stPnNl
dENhbGxlZVNhdmVSZWdpc3RlcnMoV1RGTW92ZShyZWdpc3Rlck9mZnNldHMpKTsKLSAgICBBU1NF
UlQoIShzdGF0ZS5wcm9jLT5mcmFtZVNpemUoKSAlIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsK
LSAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uZnJhbWVSZWdpc3RlckNvdW50ID0gc3RhdGUucHJv
Yy0+ZnJhbWVTaXplKCkgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotCi0gICAgaW50IGxvY2Fs
c09mZnNldCA9Ci0gICAgICAgIHN0YXRlLmNhcHR1cmVkVmFsdWUtPm9mZnNldEZyb21GUCgpIC8g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIGdyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKLSAgICBp
ZiAoc2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkpIHsKLSAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICJsb2NhbHNPZmZzZXQgPSAiLCBsb2NhbHNPZmZzZXQsICIgZm9yIHN0YWNrIHNsb3Q6ICIs
Ci0gICAgICAgICAgICBwb2ludGVyRHVtcChzdGF0ZS5jYXB0dXJlZFZhbHVlKSwgIiBhdCAiLCBS
YXdQb2ludGVyKHN0YXRlLmNhcHR1cmVkVmFsdWUpLCAiXG4iKTsKLSAgICB9Ci0gICAgCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZ3JhcGgubV9p
bmxpbmVWYXJpYWJsZURhdGFbaV0uaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICAKLSAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyICs9IGxvY2Fs
c09mZnNldDsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGFyZ3VtZW50LS0gPiAxOykgewotICAgICAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbYXJndW1lbnRdID0KLSAgICAgICAgICAg
ICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1thcmd1bWVudF0ud2l0aExvY2Fsc09mZnNl
dChsb2NhbHNPZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZVJlY292ZXJ5ID0KLSAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ZVJlY292ZXJ5LndpdGhMb2NhbHNPZmZzZXQobG9jYWxzT2Zmc2V0KTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChncmFwaC5oYXNEZWJ1Z2dlckVuYWJsZWQoKSkKLSAgICAgICAgICAgIGNvZGVC
bG9jay0+c2V0U2NvcGVSZWdpc3Rlcihjb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKSArIGxvY2Fs
c09mZnNldCk7Ci0gICAgfQotICAgIGZvciAoT1NSRXhpdERlc2NyaXB0b3ImIGRlc2NyaXB0b3Ig
OiBzdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMpIHsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gZGVzY3JpcHRvci5tX3ZhbHVlcy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBk
ZXNjcmlwdG9yLm1fdmFsdWVzW2ldID0gZGVzY3JpcHRvci5tX3ZhbHVlc1tpXS53aXRoTG9jYWxz
T2Zmc2V0KGxvY2Fsc09mZnNldCk7Ci0gICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGRlc2NyaXB0b3IubV9tYXRlcmlhbGl6YXRpb25z
KQotICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hY2NvdW50Rm9yTG9jYWxzT2Zmc2V0KGxv
Y2Fsc09mZnNldCk7Ci0gICAgfQotCi0gICAgLy8gV2Ugd2lsbCBhZGQgZXhjZXB0aW9uIGhhbmRs
ZXJzIHdoaWxlIGdlbmVyYXRpbmcuCi0gICAgY29kZUJsb2NrLT5jbGVhckV4Y2VwdGlvbkhhbmRs
ZXJzKCk7Ci0KLSAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKLSAgICBCMzo6
Z2VuZXJhdGUoKnN0YXRlLnByb2MsIGppdCk7Ci0KLSAgICAvLyBFbWl0IHRoZSBleGNlcHRpb24g
aGFuZGxlci4KLSAgICAqc3RhdGUuZXhjZXB0aW9uSGFuZGxlciA9IGppdC5sYWJlbCgpOwotICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKLSAgICBqaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7Ci0gICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOwotICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0gICAgaml0LmFkZExpbmtU
YXNrKAotICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAg
IGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVy
KSk7Ci0gICAgICAgIH0pOwotCi0gICAgc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVy
ID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKLSAgICAgICAgdm0sIGppdCwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotICAgIGlmIChzdGF0ZS5maW5hbGl6ZXItPmIz
Q29kZUxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKLSAgICAgICAgc3RhdGUuYWxs
b2NhdGlvbkZhaWxlZCA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
QjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVsZWFzZVBDVG9Pcmln
aW5NYXAoKTsKLSAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygp
KQotICAgICAgICBjb2RlQmxvY2stPnNldFBDVG9Db2RlT3JpZ2luTWFwKHN0ZDo6bWFrZV91bmlx
dWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92
ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcikpOwotCi0g
ICAgc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24gPSBiaXR3aXNlX2Nhc3Q8R2VuZXJhdGVkRnVuY3Rp
b24+KAotICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmVudHJ5cG9p
bnQoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXpl
QjNCeXByb2R1Y3RzKHN0YXRlLnByb2MtPnJlbGVhc2VCeXByb2R1Y3RzKCkpOwotfQotCi19IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAJKHJldmlzaW9uIDE5
NjcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZU
TEIzT3V0cHV0LmgiCi0KLSNpZiBFTkFCTEUoRlRMX0pJVCkKLQotI2luY2x1ZGUgIkIzTWF0aEV4
dHJhcy5oIgotI2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCi0KLW5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNpbmcgbmFtZXNwYWNlIEIzOwotCi1PdXRw
dXQ6Ok91dHB1dChTdGF0ZSYgc3RhdGUpCi0gICAgOiBtX3Byb2MoKnN0YXRlLnByb2MpCi17Ci19
Ci0KLU91dHB1dDo6fk91dHB1dCgpCi17Ci19Ci0KLXZvaWQgT3V0cHV0Ojppbml0aWFsaXplKEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkmIGhlYXBzKQotewotICAgIG1faGVhcHMgPSAmaGVhcHM7Ci19
Ci0KLUxCYXNpY0Jsb2NrIE91dHB1dDo6bmV3QmxvY2soY29uc3QgY2hhciopCi17Ci0gICAgTEJh
c2ljQmxvY2sgcmVzdWx0ID0gbV9wcm9jLmFkZEJsb2NrKG1fZnJlcXVlbmN5KTsKLQotICAgIGlm
ICghbV9uZXh0QmxvY2spCi0gICAgICAgIG1fYmxvY2tPcmRlci5hcHBlbmQocmVzdWx0KTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmxvY2tPcmRlci5pbnNlcnRCZWZvcmUobV9uZXh0QmxvY2ssIHJl
c3VsdCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIE91dHB1dDo6YXBwbHlCbG9j
a09yZGVyKCkKLXsKLSAgICBtX3Byb2Muc2V0QmxvY2tPcmRlcihtX2Jsb2NrT3JkZXIpOwotfQot
Ci1MQmFzaWNCbG9jayBPdXRwdXQ6OmFwcGVuZFRvKExCYXNpY0Jsb2NrIGJsb2NrLCBMQmFzaWNC
bG9jayBuZXh0QmxvY2spCi17Ci0gICAgYXBwZW5kVG8oYmxvY2spOwotICAgIHJldHVybiBpbnNl
cnROZXdCbG9ja3NCZWZvcmUobmV4dEJsb2NrKTsKLX0KLQotdm9pZCBPdXRwdXQ6OmFwcGVuZFRv
KExCYXNpY0Jsb2NrIGJsb2NrKQotewotICAgIG1fYmxvY2sgPSBibG9jazsKLX0KLQotU2xvdEJh
c2VWYWx1ZSogT3V0cHV0Ojpsb2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKQotewotICAgIHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
bV9wcm9jLmFkZFN0YWNrU2xvdChieXRlcykpOwotfQotCi1MVmFsdWUgT3V0cHV0OjpuZWcoTFZh
bHVlIHZhbHVlKQotewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgQjM6Ok5lZywgb3JpZ2luKCksIHZhbHVlKTsKLX0KLQotTFZhbHVlIE91dHB1dDo6Yml0Tm90
KExWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6Qml0WG9yLCBvcmlnaW4oKSwKLSAgICAgICAgdmFsdWUsCi0gICAgICAg
IG1fYmxvY2stPmFwcGVuZEludENvbnN0YW50KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlLT50eXBl
KCksIC0xKSk7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmxvZ2ljYWxOb3QoTFZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpF
cXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOwotfQotCi1MVmFsdWUgT3V0cHV0Ojps
b2FkKFR5cGVkUG9pbnRlciBwb2ludGVyLCBMVHlwZSB0eXBlKQotewotICAgIExWYWx1ZSBsb2Fk
ID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHR5cGUsIG9y
aWdpbigpLCBwb2ludGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5z
dHJ1Y3Rpb24obG9hZCwgKm1faGVhcHMpOwotICAgIHJldHVybiBsb2FkOwotfQotCi1MVmFsdWUg
T3V0cHV0Ojpkb3VibGVQb3dpKExWYWx1ZSB4LCBMVmFsdWUgeSkKLXsKLSAgICAvLyBGSVhNRTog
cG93RG91YmxlSW50MzIoKSBzaG91bGQgYmUgaW5saW5lZCBoZXJlIHNpbmNlIE91dHB1dCBrbm93
cyBhYm91dCBibG9jayBsYXlvdXQgYW5kCi0gICAgLy8gc2hvdWxkIGJlIGludm9sdmVkIGluIGFu
eSBvcGVyYXRpb24gdGhhdCBjcmVhdGVzIGJsb2Nrcy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMjIzCi0gICAgYXV0byByZXN1bHQgPSBwb3dEb3Vi
bGVJbnQzMihtX3Byb2MsIG1fYmxvY2ssIG9yaWdpbigpLCB4LCB5KTsKLSAgICBtX2Jsb2NrID0g
cmVzdWx0LmZpcnN0OwotICAgIHJldHVybiByZXN1bHQuc2Vjb25kOwotfQotCi1ib29sIE91dHB1
dDo6aGFzU2Vuc2libGVEb3VibGVUb0ludCgpCi17Ci0gICAgcmV0dXJuIG9wdGltaXplRm9yWDg2
KCk7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmRvdWJsZVRvSW50KExWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBQYXRjaHBvaW50VmFsdWUqIHJlc3VsdCA9IHBhdGNocG9pbnQoSW50MzIpOwotICAgIHJlc3Vs
dC0+YXBwZW5kKHZhbHVlLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKLSAgICByZXN1bHQtPnNl
dEdlbmVyYXRvcigKLSAgICAgICAgW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgaml0LnRydW5jYXRlRG91
YmxlVG9JbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAgIH0p
OwotICAgIHJlc3VsdC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1MVmFsdWUgT3V0cHV0Ojpkb3VibGVUb1VJbnQoTFZhbHVlIHZhbHVlKQotewot
ICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gcGF0Y2hwb2ludChJbnQzMik7Ci0gICAgcmVz
dWx0LT5hcHBlbmQodmFsdWUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgIHJlc3VsdC0+
c2V0R2VuZXJhdG9yKAotICAgICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBqaXQudHJ1bmNhdGVE
b3VibGVUb1VpbnQzMihwYXJhbXNbMV0uZnByKCksIHBhcmFtc1swXS5ncHIoKSk7Ci0gICAgICAg
IH0pOwotICAgIHJlc3VsdC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1MVmFsdWUgT3V0cHV0Ojp1bnNpZ25lZFRvRG91YmxlKExWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gaW50VG9Eb3VibGUoemVyb0V4dCh2YWx1ZSwgSW50NjQpKTsKLX0K
LQotTFZhbHVlIE91dHB1dDo6bG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyIHBvaW50ZXIpCi17
Ci0gICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZDhTLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7Ci0gICAgcG9pbnRl
ci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7Ci0gICAgcmV0dXJu
IGxvYWQ7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9pbnRlciBw
b2ludGVyKQotewotICAgIExWYWx1ZSBsb2FkID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPihtX3Byb2MsIExvYWQ4WiwgSW50MzIsIG9yaWdpbigpLCBwb2ludGVyLnZhbHVlKCkpOwot
ICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24obG9hZCwgKm1faGVhcHMpOwot
ICAgIHJldHVybiBsb2FkOwotfQotCi1MVmFsdWUgT3V0cHV0Ojpsb2FkMTZTaWduRXh0MzIoVHlw
ZWRQb2ludGVyIHBvaW50ZXIpCi17Ci0gICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2UywgSW50MzIsIG9yaWdpbigpLCBwb2ludGVy
LnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24obG9hZCwg
Km1faGVhcHMpOwotICAgIHJldHVybiBsb2FkOwotfQotCi1MVmFsdWUgT3V0cHV0Ojpsb2FkMTZa
ZXJvRXh0MzIoVHlwZWRQb2ludGVyIHBvaW50ZXIpCi17Ci0gICAgTFZhbHVlIGxvYWQgPSBtX2Js
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDE2WiwgSW50MzIsIG9yaWdp
bigpLCBwb2ludGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1
Y3Rpb24obG9hZCwgKm1faGVhcHMpOwotICAgIHJldHVybiBsb2FkOwotfQotCi12b2lkIE91dHB1
dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKLXsKLSAgICBMVmFs
dWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUs
IG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlci52YWx1ZSgpKTsKLSAgICBwb2ludGVyLmhlYXAoKS5k
ZWNvcmF0ZUluc3RydWN0aW9uKHN0b3JlLCAqbV9oZWFwcyk7Ci19Ci0KLXZvaWQgT3V0cHV0Ojpz
dG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCi17Ci0gICAgTFZh
bHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3Jl
OCwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgp
LmRlY29yYXRlSW5zdHJ1Y3Rpb24oc3RvcmUsICptX2hlYXBzKTsKLX0KLQotdm9pZCBPdXRwdXQ6
OnN0b3JlMzJBczE2KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCi17Ci0gICAg
TFZhbHVlIHN0b3JlID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0
b3JlMTYsIG9yaWdpbigpLCB2YWx1ZSwgcG9pbnRlci52YWx1ZSgpKTsKLSAgICBwb2ludGVyLmhl
YXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHN0b3JlLCAqbV9oZWFwcyk7Ci19Ci0KLUxWYWx1ZSBP
dXRwdXQ6OmJhc2VJbmRleChMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSBzY2FsZSwg
cHRyZGlmZl90IG9mZnNldCkKLXsKLSAgICBMVmFsdWUgYWNjdW11bGF0ZWRPZmZzZXQ7Ci0gICAg
ICAgIAotICAgIHN3aXRjaCAoc2NhbGUpIHsKLSAgICBjYXNlIFNjYWxlT25lOgotICAgICAgICBh
Y2N1bXVsYXRlZE9mZnNldCA9IGluZGV4OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNjYWxl
VHdvOgotICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IHNobChpbmRleCwgaW50UHRyT25lKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTY2FsZUZvdXI6Ci0gICAgICAgIGFjY3VtdWxhdGVk
T2Zmc2V0ID0gc2hsKGluZGV4LCBpbnRQdHJUd28pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFNjYWxlRWlnaHQ6Ci0gICAgY2FzZSBTY2FsZVB0cjoKLSAgICAgICAgYWNjdW11bGF0ZWRPZmZz
ZXQgPSBzaGwoaW5kZXgsIGludFB0clRocmVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
ICAgICAKLSAgICBpZiAob2Zmc2V0KQotICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IGFkZChh
Y2N1bXVsYXRlZE9mZnNldCwgY29uc3RJbnRQdHIob2Zmc2V0KSk7Ci0gICAgICAgIAotICAgIHJl
dHVybiBhZGQoYmFzZSwgYWNjdW11bGF0ZWRPZmZzZXQpOwotfQotCi12b2lkIE91dHB1dDo6YnJh
bmNoKExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBXZWlnaHQgdGFrZW5XZWln
aHQsIExCYXNpY0Jsb2NrIG5vdFRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpCi17Ci0gICAg
bV9ibG9jay0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCi0gICAgICAgIG1fcHJvYywgQjM6OkJy
YW5jaCwgb3JpZ2luKCksIGNvbmRpdGlvbiwKLSAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRha2Vu
LCB0YWtlbldlaWdodC5mcmVxdWVuY3lDbGFzcygpKSwKLSAgICAgICAgRnJlcXVlbnRlZEJsb2Nr
KG5vdFRha2VuLCBub3RUYWtlbldlaWdodC5mcmVxdWVuY3lDbGFzcygpKSk7Ci19Ci0KLXZvaWQg
T3V0cHV0OjpjaGVjayhMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtlbiwgV2Vp
Z2h0IG5vdFRha2VuV2VpZ2h0KQotewotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0soKnRoaXMsICgiT3V0cHV0OjpjaGVjayBjb250aW51YXRpb24iKSk7Ci0gICAg
YnJhbmNoKGNvbmRpdGlvbiwgdGFrZW4sIFdlaWdodGVkVGFyZ2V0KGNvbnRpbnVhdGlvbiwgbm90
VGFrZW5XZWlnaHQpKTsKLSAgICBhcHBlbmRUbyhjb250aW51YXRpb24pOwotfQotCi12b2lkIE91
dHB1dDo6Y2hlY2soTFZhbHVlIGNvbmRpdGlvbiwgV2VpZ2h0ZWRUYXJnZXQgdGFrZW4pCi17Ci0g
ICAgY2hlY2soY29uZGl0aW9uLCB0YWtlbiwgdGFrZW4ud2VpZ2h0KCkuaW52ZXJzZSgpKTsKLX0K
LQotTFZhbHVlIE91dHB1dDo6bG9hZChUeXBlZFBvaW50ZXIgcG9pbnRlciwgTG9hZFR5cGUgdHlw
ZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIExvYWQ4U2lnbkV4dDMyOgotICAg
ICAgICByZXR1cm4gbG9hZDhTaWduRXh0MzIocG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkOFplcm9F
eHQzMjoKLSAgICAgICAgcmV0dXJuIGxvYWQ4WmVyb0V4dDMyKHBvaW50ZXIpOwotICAgIGNhc2Ug
TG9hZDE2U2lnbkV4dDMyOgotICAgICAgICByZXR1cm4gbG9hZDhTaWduRXh0MzIocG9pbnRlcik7
Ci0gICAgY2FzZSBMb2FkMTZaZXJvRXh0MzI6Ci0gICAgICAgIHJldHVybiBsb2FkOFplcm9FeHQz
Mihwb2ludGVyKTsKLSAgICBjYXNlIExvYWQzMjoKLSAgICAgICAgcmV0dXJuIGxvYWQzMihwb2lu
dGVyKTsKLSAgICBjYXNlIExvYWQ2NDoKLSAgICAgICAgcmV0dXJuIGxvYWQ2NChwb2ludGVyKTsK
LSAgICBjYXNlIExvYWRQdHI6Ci0gICAgICAgIHJldHVybiBsb2FkUHRyKHBvaW50ZXIpOwotICAg
IGNhc2UgTG9hZEZsb2F0OgotICAgICAgICByZXR1cm4gbG9hZEZsb2F0KHBvaW50ZXIpOwotICAg
IGNhc2UgTG9hZERvdWJsZToKLSAgICAgICAgcmV0dXJuIGxvYWREb3VibGUocG9pbnRlcik7Ci0g
ICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLXZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBw
b2ludGVyLCBTdG9yZVR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl
IFN0b3JlMzJBczg6Ci0gICAgICAgIHN0b3JlMzJBczgodmFsdWUsIHBvaW50ZXIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBTdG9yZTMyQXMxNjoKLSAgICAgICAgc3RvcmUzMkFzMTYodmFs
dWUsIHBvaW50ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdG9yZTMyOgotICAgICAg
ICBzdG9yZTMyKHZhbHVlLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3Rv
cmU2NDoKLSAgICAgICAgc3RvcmU2NCh2YWx1ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIFN0b3JlUHRyOgotICAgICAgICBzdG9yZVB0cih2YWx1ZSwgcG9pbnRlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0b3JlRmxvYXQ6Ci0gICAgICAgIHN0b3JlRmxvYXQo
dmFsdWUsIHBvaW50ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdG9yZURvdWJsZToK
LSAgICAgICAgc3RvcmVEb3VibGUodmFsdWUsIHBvaW50ZXIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oCShyZXZpc2lvbiAxOTY3MjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgRlRMQjNPdXRwdXRfaAotI2RlZmluZSBGVExCM091dHB1dF9oCi0K
LSNpbmNsdWRlICJERkdDb21tb24uaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVk
ZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCi0jaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5o
IgotI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgotI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIK
LSNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgotI2luY2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5o
IgotI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCi0jaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5o
IgotI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCi0jaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgi
Ci0jaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgotI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgi
Ci0jaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5
cGVzLmgiCi0jaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgotI2luY2x1ZGUg
IkZUTENvbW1vblZhbHVlcy5oIgotI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0jaW5jbHVkZSAiRlRM
U3dpdGNoQ2FzZS5oIgotI2luY2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgotI2luY2x1ZGUgIkZU
TFZhbHVlRnJvbUJsb2NrLmgiCi0jaW5jbHVkZSAiRlRMV2VpZ2h0LmgiCi0jaW5jbHVkZSAiRlRM
V2VpZ2h0ZWRUYXJnZXQuaCIKLSNpbmNsdWRlIDx3dGYvT3JkZXJNYWtlci5oPgotI2luY2x1ZGUg
PHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi0vLyBGSVhNRTogcmVtb3ZlIHRoaXMgb25jZSBl
dmVyeXRoaW5nIGNhbiBiZSBnZW5lcmF0ZWQgdGhyb3VnaCBCMy4KLSNpZiBDT01QSUxFUihHQ0Nf
T1JfQ0xBTkcpCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgotI3ByYWdtYSBHQ0MgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV3VudXNlZC1wYXJhbWV0ZXIiCi0jZW5kaWYgLy8gQ09NUElMRVIoR0NDX09S
X0NMQU5HKQotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIERGRyB7IHN0cnVjdCBOb2Rl
OyB9Ci0KLW5hbWVzcGFjZSBGVEwgewotCi1lbnVtIFNjYWxlIHsgU2NhbGVPbmUsIFNjYWxlVHdv
LCBTY2FsZUZvdXIsIFNjYWxlRWlnaHQsIFNjYWxlUHRyIH07Ci0KLWNsYXNzIE91dHB1dCA6IHB1
YmxpYyBDb21tb25WYWx1ZXMgewotcHVibGljOgotICAgIE91dHB1dChTdGF0ZSYpOwotICAgIH5P
dXRwdXQoKTsKLQotICAgIHZvaWQgaW5pdGlhbGl6ZShBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Jik7
Ci0KLSAgICB2b2lkIHNldEZyZXF1ZW5jeShkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICBt
X2ZyZXF1ZW5jeSA9IHZhbHVlOwotICAgIH0KLQotICAgIExCYXNpY0Jsb2NrIG5ld0Jsb2NrKGNv
bnN0IGNoYXIqIG5hbWUgPSAiIik7Ci0KLSAgICBMQmFzaWNCbG9jayBpbnNlcnROZXdCbG9ja3NC
ZWZvcmUoTEJhc2ljQmxvY2sgbmV4dEJsb2NrKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHRCbG9jayA9IG1fbmV4dEJsb2NrOwotICAgICAgICBtX25leHRCbG9jayA9IG5leHRC
bG9jazsKLSAgICAgICAgcmV0dXJuIGxhc3ROZXh0QmxvY2s7Ci0gICAgfQotCi0gICAgdm9pZCBh
cHBseUJsb2NrT3JkZXIoKTsKLQotICAgIExCYXNpY0Jsb2NrIGFwcGVuZFRvKExCYXNpY0Jsb2Nr
LCBMQmFzaWNCbG9jayBuZXh0QmxvY2spOwotICAgIHZvaWQgYXBwZW5kVG8oTEJhc2ljQmxvY2sp
OwotCi0gICAgdm9pZCBzZXRPcmlnaW4oREZHOjpOb2RlKiBub2RlKSB7IG1fb3JpZ2luID0gbm9k
ZTsgfQotICAgIEIzOjpPcmlnaW4gb3JpZ2luKCkgeyByZXR1cm4gQjM6Ok9yaWdpbihtX29yaWdp
bik7IH0KLQotICAgIExWYWx1ZSBmcmFtZVBvaW50ZXIoKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbigpKTsgfQot
Ci0gICAgQjM6OlNsb3RCYXNlVmFsdWUqIGxvY2tlZFN0YWNrU2xvdChzaXplX3QgYnl0ZXMpOwot
Ci0gICAgTFZhbHVlIGNvbnN0Qm9vbChib29sIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OkNvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9Ci0gICAg
TFZhbHVlIGNvbnN0SW50MzIoaW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlKTsgfQotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgTFZhbHVlIGNvbnN0SW50UHRyKFQqIHZhbHVlKSB7IHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2lu
KCksIHZhbHVlKTsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgTFZhbHVlIGNvbnN0
SW50UHRyKFQgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3RQdHJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9Ci0gICAgTFZhbHVlIGNvbnN0SW50NjQo
aW50NjRfdCB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDY0VmFs
dWU+KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlKTsgfQotICAgIExWYWx1ZSBjb25zdERvdWJsZShk
b3VibGUgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3REb3VibGVW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9Ci0KLSAgICBMVmFsdWUgcGhpKExUeXBl
IHR5cGUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OlBoaSwgdHlwZSwgb3JpZ2luKCkpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1z
PgotICAgIExWYWx1ZSBwaGkoTFR5cGUsIFZhbHVlRnJvbUJsb2NrLCBQYXJhbXMuLi4gdGhlUmVz
dCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLSAgICBMVmFsdWUgcGhpKExU
eXBlLCBjb25zdCBWZWN0b3JUeXBlJik7Ci0gICAgdm9pZCBhZGRJbmNvbWluZ1RvUGhpKExWYWx1
ZSBwaGksIFZhbHVlRnJvbUJsb2NrKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+
Ci0gICAgdm9pZCBhZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGksIFZhbHVlRnJvbUJsb2NrLCBQ
YXJhbXMuLi4gdGhlUmVzdCk7Ci0KLSAgICBMVmFsdWUgYWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkFkZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBzdWIoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6U3ViLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIG11
bChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpNdWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAg
ICBMVmFsdWUgZGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkRpdiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsgfQotICAgIExWYWx1ZSBjaGlsbERpdihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpDaGlsbERp
diwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBtb2QoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9w
cm9jLCBCMzo6TW9kLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGNoaWxs
TW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkNoaWxsTW9kLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OyB9Ci0gICAgTFZhbHVlIG5lZyhMVmFsdWUpOwotCi0gICAgTFZhbHVlIGRvdWJsZUFkZChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFs
dWUgZG91YmxlU3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlN1Yiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVNdWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TXVsLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZURpdihMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpEaXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91
YmxlTW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok1vZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsg
fQotICAgIExWYWx1ZSBkb3VibGVOZWcoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBuZWcodmFsdWUp
OyB9Ci0KLSAgICBMVmFsdWUgYml0QW5kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdEFuZCwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBiaXRPcihMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2Ms
IEIzOjpCaXRPciwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBiaXRYb3Io
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6Qml0WG9yLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0g
ICAgTFZhbHVlIHNobChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTaGwsIG9yaWdpbigpLCBsZWZ0LCBj
YXN0VG9JbnQzMihyaWdodCkpOyB9Ci0gICAgTFZhbHVlIGFTaHIoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6U1Nociwgb3JpZ2luKCksIGxlZnQsIGNhc3RUb0ludDMyKHJpZ2h0KSk7IH0KLSAgICBMVmFs
dWUgbFNocihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpaU2hyLCBvcmlnaW4oKSwgbGVmdCwgY2FzdFRv
SW50MzIocmlnaHQpKTsgfQotICAgIExWYWx1ZSBiaXROb3QoTFZhbHVlKTsKLSAgICBMVmFsdWUg
bG9naWNhbE5vdChMVmFsdWUpOwotCi0gICAgTFZhbHVlIGN0bHozMihMVmFsdWUgb3BlcmFuZCkg
eyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Q2x6LCBv
cmlnaW4oKSwgb3BlcmFuZCk7IH0KLSAgICBMVmFsdWUgYWRkV2l0aE92ZXJmbG93MzIoTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCkgeyBDUkFTSCgpOyB9Ci0gICAgTFZhbHVlIHN1YldpdGhPdmVy
ZmxvdzMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgQ1JBU0goKTsgfQotICAgIExWYWx1
ZSBtdWxXaXRoT3ZlcmZsb3czMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IENSQVNIKCk7
IH0KLSAgICBMVmFsdWUgYWRkV2l0aE92ZXJmbG93NjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyBDUkFTSCgpOyB9Ci0gICAgTFZhbHVlIHN1YldpdGhPdmVyZmxvdzY0KExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpIHsgQ1JBU0goKTsgfQotICAgIExWYWx1ZSBtdWxXaXRoT3ZlcmZsb3c2
NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IENSQVNIKCk7IH0KLSAgICBMVmFsdWUgZG91
YmxlQWJzKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6QWJzLCBvcmlnaW4oKSwgdmFsdWUpOyB9Ci0gICAgTFZhbHVlIGRvdWJs
ZUNlaWwoTFZhbHVlIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFs
dWU+KG1fcHJvYywgQjM6OkNlaWwsIG9yaWdpbigpLCBvcGVyYW5kKTsgfQotCi0gICAgTFZhbHVl
IGRvdWJsZVNpbihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBkb3VibGUgKCpzaW5Eb3Vi
bGUpKGRvdWJsZSkgPSBzaW47Ci0gICAgICAgIHJldHVybiBjYWxsV2l0aG91dFNpZGVFZmZlY3Rz
KEIzOjpEb3VibGUsIHNpbkRvdWJsZSwgdmFsdWUpOwotICAgIH0KLSAgICBMVmFsdWUgZG91Ymxl
Q29zKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSAoKmNvc0RvdWJsZSkoZG91
YmxlKSA9IGNvczsKLSAgICAgICAgcmV0dXJuIGNhbGxXaXRob3V0U2lkZUVmZmVjdHMoQjM6OkRv
dWJsZSwgY29zRG91YmxlLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGRvdWJsZVBvdyhM
VmFsdWUgeE9wZXJhbmQsIExWYWx1ZSB5T3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSAo
KnBvd0RvdWJsZSkoZG91YmxlLCBkb3VibGUpID0gcG93OwotICAgICAgICByZXR1cm4gY2FsbFdp
dGhvdXRTaWRlRWZmZWN0cyhCMzo6RG91YmxlLCBwb3dEb3VibGUsIHhPcGVyYW5kLCB5T3BlcmFu
ZCk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGRvdWJsZVBvd2koTFZhbHVlIHhPcGVyYW5kLCBMVmFs
dWUgeU9wZXJhbmQpOwotCi0gICAgTFZhbHVlIGRvdWJsZVNxcnQoTFZhbHVlIHZhbHVlKSB7IHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTcXJ0LCBvcmln
aW4oKSwgdmFsdWUpOyB9Ci0KLSAgICBMVmFsdWUgZG91YmxlTG9nKExWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGRvdWJsZSAoKmxvZ0RvdWJsZSkoZG91YmxlKSA9IGxvZzsKLSAgICAgICAg
cmV0dXJuIGNhbGxXaXRob3V0U2lkZUVmZmVjdHMoQjM6OkRvdWJsZSwgbG9nRG91YmxlLCB2YWx1
ZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgaGFzU2Vuc2libGVEb3VibGVUb0ludCgpOwot
ICAgIExWYWx1ZSBkb3VibGVUb0ludChMVmFsdWUpOwotICAgIExWYWx1ZSBkb3VibGVUb1VJbnQo
TFZhbHVlKTsKLQotICAgIExWYWx1ZSBzaWduRXh0MzJUbzY0KExWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U0V4dDMyLCBvcmln
aW4oKSwgdmFsdWUpOyB9Ci0gICAgTFZhbHVlIHplcm9FeHQoTFZhbHVlIHZhbHVlLCBMVHlwZSB0
eXBlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gdHlwZSkKLSAgICAgICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OlpFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsKLSAgICB9Ci0gICAg
TFZhbHVlIHplcm9FeHRQdHIoTFZhbHVlIHZhbHVlKSB7IHJldHVybiB6ZXJvRXh0KHZhbHVlLCBC
Mzo6SW50NjQpOyB9Ci0gICAgTFZhbHVlIGludFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6SVRvRCwgb3JpZ2lu
KCksIHZhbHVlKTsgfQotICAgIExWYWx1ZSB1bnNpZ25lZFRvRG91YmxlKExWYWx1ZSk7Ci0gICAg
TFZhbHVlIGNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZS0+dHlwZSgpID09IEIzOjpJbnQzMiA/IHZhbHVlIDoKLSAgICAgICAgICAgIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlRydW5jLCBvcmlnaW4oKSwgdmFsdWUp
OwotICAgIH0KLSAgICBMVmFsdWUgZG91YmxlVG9GbG9hdChMVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkRvdWJsZVRvRmxvYXQs
IG9yaWdpbigpLCB2YWx1ZSk7IH0KLSAgICBMVmFsdWUgZmxvYXRUb0RvdWJsZShMVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZs
b2F0VG9Eb3VibGUsIG9yaWdpbigpLCB2YWx1ZSk7IH0KLSAgICBMVmFsdWUgYml0Q2FzdChMVmFs
dWUsIExUeXBlKTsKLSAgICBMVmFsdWUgZnJvdW5kKExWYWx1ZSBkb3VibGVWYWx1ZSk7Ci0KLSAg
ICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIsIExUeXBlKTsKLSAgICB2b2lkIHN0b3JlKExWYWx1
ZSwgVHlwZWRQb2ludGVyKTsKLQotICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihUeXBlZFBvaW50
ZXIpOwotICAgIExWYWx1ZSBsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIpOwotICAgIExWYWx1
ZSBsb2FkMTZTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKLSAgICBMVmFsdWUgbG9hZDE2WmVyb0V4
dDMyKFR5cGVkUG9pbnRlcik7Ci0gICAgTFZhbHVlIGxvYWQzMihUeXBlZFBvaW50ZXIgcG9pbnRl
cikgeyByZXR1cm4gbG9hZChwb2ludGVyLCBCMzo6SW50MzIpOyB9Ci0gICAgTFZhbHVlIGxvYWQ2
NChUeXBlZFBvaW50ZXIgcG9pbnRlcikgeyByZXR1cm4gbG9hZChwb2ludGVyLCBCMzo6SW50NjQp
OyB9Ci0gICAgTFZhbHVlIGxvYWRQdHIoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxv
YWQocG9pbnRlciwgQjM6OnBvaW50ZXJUeXBlKCkpOyB9Ci0gICAgTFZhbHVlIGxvYWRGbG9hdChU
eXBlZFBvaW50ZXIgcG9pbnRlcikgeyByZXR1cm4gbG9hZChwb2ludGVyLCBCMzo6RmxvYXQpOyB9
Ci0gICAgTFZhbHVlIGxvYWREb3VibGUoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxv
YWQocG9pbnRlciwgQjM6OkRvdWJsZSk7IH0KLSAgICB2b2lkIHN0b3JlMzJBczgoTFZhbHVlIHZh
bHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcik7Ci0gICAgdm9pZCBzdG9yZTMyQXMxNihMVmFsdWUg
dmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKTsKLSAgICB2b2lkIHN0b3JlMzIoTFZhbHVlIHZh
bHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZS0+
dHlwZSgpID09IEIzOjpJbnQzMik7Ci0gICAgICAgIHN0b3JlKHZhbHVlLCBwb2ludGVyKTsKLSAg
ICB9Ci0gICAgdm9pZCBzdG9yZTY0KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIp
Ci0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBCMzo6SW50NjQpOwotICAg
ICAgICBzdG9yZSh2YWx1ZSwgcG9pbnRlcik7Ci0gICAgfQotICAgIHZvaWQgc3RvcmVQdHIoTFZh
bHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2
YWx1ZS0+dHlwZSgpID09IEIzOjpwb2ludGVyVHlwZSgpKTsKLSAgICAgICAgc3RvcmUodmFsdWUs
IHBvaW50ZXIpOwotICAgIH0KLSAgICB2b2lkIHN0b3JlRmxvYXQoTFZhbHVlIHZhbHVlLCBUeXBl
ZFBvaW50ZXIgcG9pbnRlcikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09
IEIzOjpGbG9hdCk7Ci0gICAgICAgIHN0b3JlKHZhbHVlLCBwb2ludGVyKTsKLSAgICB9Ci0gICAg
dm9pZCBzdG9yZURvdWJsZShMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gQjM6OkRvdWJsZSk7Ci0gICAgICAg
IHN0b3JlKHZhbHVlLCBwb2ludGVyKTsKLSAgICB9Ci0KLSAgICBlbnVtIExvYWRUeXBlIHsKLSAg
ICAgICAgTG9hZDhTaWduRXh0MzIsCi0gICAgICAgIExvYWQ4WmVyb0V4dDMyLAotICAgICAgICBM
b2FkMTZTaWduRXh0MzIsCi0gICAgICAgIExvYWQxNlplcm9FeHQzMiwKLSAgICAgICAgTG9hZDMy
LAotICAgICAgICBMb2FkNjQsCi0gICAgICAgIExvYWRQdHIsCi0gICAgICAgIExvYWRGbG9hdCwK
LSAgICAgICAgTG9hZERvdWJsZQotICAgIH07Ci0KLSAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50
ZXIsIExvYWRUeXBlKTsKLSAgICAKLSAgICBlbnVtIFN0b3JlVHlwZSB7Ci0gICAgICAgIFN0b3Jl
MzJBczgsCi0gICAgICAgIFN0b3JlMzJBczE2LAotICAgICAgICBTdG9yZTMyLAotICAgICAgICBT
dG9yZTY0LAotICAgICAgICBTdG9yZVB0ciwKLSAgICAgICAgU3RvcmVGbG9hdCwKLSAgICAgICAg
U3RvcmVEb3VibGUKLSAgICB9OwotCi0gICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRl
ciwgU3RvcmVUeXBlKTsKLQotICAgIExWYWx1ZSBhZGRQdHIoTFZhbHVlIHZhbHVlLCBwdHJkaWZm
X3QgaW1tZWRpYXRlID0gMCkKLSAgICB7Ci0gICAgICAgIGlmICghaW1tZWRpYXRlKQotICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgICByZXR1cm4gYWRkKHZhbHVlLCBjb25zdEludFB0
cihpbW1lZGlhdGUpKTsKLSAgICB9Ci0KLSAgICAvLyBDb25zdHJ1Y3QgYW4gYWRkcmVzcyBieSBv
ZmZzZXR0aW5nIGJhc2UgYnkgdGhlIHJlcXVlc3RlZCBhbW91bnQgYW5kIGFzY3JpYmluZwotICAg
IC8vIHRoZSByZXF1ZXN0ZWQgYWJzdHJhY3QgaGVhcCB0byBpdC4KLSAgICBUeXBlZFBvaW50ZXIg
YWRkcmVzcyhjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBiYXNlLCBwdHJkaWZmX3Qg
b2Zmc2V0ID0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlZFBvaW50ZXIoaGVhcCwgYWRk
UHRyKGJhc2UsIG9mZnNldCkpOwotICAgIH0KLSAgICAvLyBDb25zdHJ1Y3QgYW4gYWRkcmVzcyBi
eSBvZmZzZXR0aW5nIGJhc2UgYnkgdGhlIGFtb3VudCBzcGVjaWZpZWQgYnkgdGhlIGZpZWxkLAot
ICAgIC8vIGFuZCBvcHRpb25hbGx5IGFuIGFkZGl0aW9uYWwgYW1vdW50ICh1c2UgdGhpcyB3aXRo
IGNhcmUpLCBhbmQgdGhlbiBjcmVhdGluZwotICAgIC8vIGEgVHlwZWRQb2ludGVyIHdpdGggdGhl
IGdpdmVuIGZpZWxkIGFzIHRoZSBoZWFwLgotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzKExWYWx1
ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCwgcHRyZGlmZl90IG9mZnNldCA9IDAp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRkcmVzcyhmaWVsZCwgYmFzZSwgb2Zmc2V0ICsgZmll
bGQub2Zmc2V0KCkpOwotICAgIH0KLQotICAgIExWYWx1ZSBiYXNlSW5kZXgoTFZhbHVlIGJhc2Us
IExWYWx1ZSBpbmRleCwgU2NhbGUsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKTsKLQotICAgIFR5cGVk
UG9pbnRlciBiYXNlSW5kZXgoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgYmFzZSwg
TFZhbHVlIGluZGV4LCBTY2FsZSBzY2FsZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gVHlwZWRQb2ludGVyKGhlYXAsIGJhc2VJbmRleChiYXNlLCBpbmRleCwg
c2NhbGUsIG9mZnNldCkpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KEluZGV4
ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIEpTVmFsdWUg
aW5kZXhBc0NvbnN0YW50ID0gSlNWYWx1ZSgpLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBoZWFwLmJhc2VJbmRleCgqdGhpcywgYmFzZSwgaW5kZXgsIGluZGV4
QXNDb25zdGFudCwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBUeXBlZFBvaW50ZXIgYWJzb2x1dGUo
dm9pZCogYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBUeXBlZFBvaW50ZXIobV9oZWFw
cy0+YWJzb2x1dGVbYWRkcmVzc10sIGNvbnN0SW50UHRyKGFkZHJlc3MpKTsKLSAgICB9Ci0KLSAg
ICBMVmFsdWUgbG9hZDhTaWduRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQm
IGZpZWxkKSB7IHJldHVybiBsb2FkOFNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
LSAgICBMVmFsdWUgbG9hZDhaZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0Rmll
bGQmIGZpZWxkKSB7IHJldHVybiBsb2FkOFplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7
IH0KLSAgICBMVmFsdWUgbG9hZDE2U2lnbkV4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFj
dEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDE2U2lnbkV4dDMyKGFkZHJlc3MoYmFzZSwgZmll
bGQpKTsgfQotICAgIExWYWx1ZSBsb2FkMTZaZXJvRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFi
c3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkMTZaZXJvRXh0MzIoYWRkcmVzcyhiYXNl
LCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxvYWQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0K
LSAgICBMVmFsdWUgbG9hZDY0KExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVs
ZCkgeyByZXR1cm4gbG9hZDY0KGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIExWYWx1ZSBs
b2FkUHRyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4g
bG9hZFB0cihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICBMVmFsdWUgbG9hZERvdWJsZShM
VmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWREb3Vi
bGUoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9yZTMyKExWYWx1ZSB2YWx1
ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHN0b3JlMzIodmFs
dWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIHZvaWQgc3RvcmU2NChMVmFsdWUgdmFs
dWUsIExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZTY0KHZh
bHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2
YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHN0b3JlUHRy
KHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0b3JlRG91YmxlKExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHN0
b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLQotICAgIC8vIEZJWE1F
OiBFeHBsb3JlIGFkZGluZyBzdXBwb3J0IGZvciB2YWx1ZSByYW5nZSBjb25zdHJhaW50cyB0byBC
My4gTWF5YmUgaXQgY291bGQgYmUgYXMgc2ltcGxlIGFzIGhhdmluZwotICAgIC8vIGEgbG9hZCBp
bnN0cnVjdGlvbiB0aGF0IGd1YXJhbnRlZXMgdGhhdCBpdHMgcmVzdWx0IGlzIG5vbi1uZWdhdGl2
ZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDU4
Ci0gICAgdm9pZCBhc2NyaWJlUmFuZ2UoTFZhbHVlLCBjb25zdCBWYWx1ZVJhbmdlJikgeyB9Ci0g
ICAgTFZhbHVlIG5vbk5lZ2F0aXZlMzIoTFZhbHVlIGxvYWRJbnN0cnVjdGlvbikgeyByZXR1cm4g
bG9hZEluc3RydWN0aW9uOyB9Ci0gICAgTFZhbHVlIGxvYWQzMk5vbk5lZ2F0aXZlKFR5cGVkUG9p
bnRlciBwb2ludGVyKSB7IHJldHVybiBsb2FkMzIocG9pbnRlcik7IH0KLSAgICBMVmFsdWUgbG9h
ZDMyTm9uTmVnYXRpdmUoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7
IHJldHVybiBsb2FkMzIoYmFzZSwgZmllbGQpOyB9Ci0KLSAgICBMVmFsdWUgZXF1YWwoTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFs
dWUgbm90RXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7IH0KLSAgICBMVmFsdWUgYWJvdmUoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWJvdmUs
IG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgYWJvdmVPckVxdWFsKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFs
dWU+KG1fcHJvYywgQjM6OkFib3ZlRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAg
ICBMVmFsdWUgYmVsb3coTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QmVsb3csIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7IH0KLSAgICBMVmFsdWUgYmVsb3dPckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkJlbG93RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZ3JlYXRl
clRoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlclRoYW4sIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7IH0KLSAgICBMVmFsdWUgZ3JlYXRlclRoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywg
QjM6OkdyZWF0ZXJFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBs
ZXNzVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsgfQotICAgIExWYWx1ZSBsZXNzVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6
TGVzc0VxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0KLSAgICBMVmFsdWUgZG91Ymxl
RXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
IH0KLSAgICBMVmFsdWUgZG91YmxlRXF1YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpFcXVhbE9yVW5vcmRlcmVkLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVl
IGRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWws
IG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTGVzc1RoYW4oTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6TGVzc1RoYW4sIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAg
ICBMVmFsdWUgZG91YmxlTGVzc1RoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NF
cXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVHcmVhdGVy
VGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9w
cm9jLCBCMzo6R3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZh
bHVlIGRvdWJsZU5vdEVxdWFsQW5kT3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBsb2dpY2FsTm90KGRvdWJsZUVxdWFsT3JVbm9yZGVyZWQobGVmdCwgcmlnaHQpKTsg
fQotICAgIExWYWx1ZSBkb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpIHsgcmV0dXJuIGxvZ2ljYWxOb3QoZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKGxl
ZnQsIHJpZ2h0KSk7IH0KLSAgICBMVmFsdWUgZG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVy
ZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbG9naWNhbE5vdChkb3VibGVH
cmVhdGVyVGhhbihsZWZ0LCByaWdodCkpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZUdyZWF0ZXJUaGFu
T3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbG9naWNhbE5v
dChkb3VibGVMZXNzVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpKTsgfQotICAgIExWYWx1ZSBkb3Vi
bGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KSB7IHJldHVybiBsb2dpY2FsTm90KGRvdWJsZUxlc3NUaGFuKGxlZnQsIHJpZ2h0KSk7IH0KLQot
ICAgIExWYWx1ZSBpc1plcm8zMihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMy
WmVybyk7IH0KLSAgICBMVmFsdWUgbm90WmVybzMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Tm90RXF1YWwsIG9yaWdpbigp
LCB2YWx1ZSwgaW50MzJaZXJvKTsgfQotICAgIExWYWx1ZSBpc1plcm82NChMVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFs
LCBvcmlnaW4oKSwgdmFsdWUsIGludDY0WmVybyk7IH0KLSAgICBMVmFsdWUgbm90WmVybzY0KExW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6Tm90RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRaZXJvKTsgfQotICAgIExWYWx1
ZSBpc051bGwoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBpc1plcm82NCh2YWx1ZSk7IH0KLSAgICBM
VmFsdWUgbm90TnVsbChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG5vdFplcm82NCh2YWx1ZSk7IH0K
LQotICAgIExWYWx1ZSB0ZXN0SXNaZXJvMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyBy
ZXR1cm4gaXNaZXJvMzIoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KLSAgICBMVmFsdWUgdGVzdE5v
blplcm8zMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvMzIoYml0
QW5kKHZhbHVlLCBtYXNrKSk7IH0KLSAgICBMVmFsdWUgdGVzdElzWmVybzY0KExWYWx1ZSB2YWx1
ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzWmVybzY0KGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9
Ci0gICAgTFZhbHVlIHRlc3ROb25aZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyBy
ZXR1cm4gbm90WmVybzY0KGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9Ci0gICAgTFZhbHVlIHRlc3RJ
c1plcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNOdWxsKGJpdEFu
ZCh2YWx1ZSwgbWFzaykpOyB9Ci0gICAgTFZhbHVlIHRlc3ROb25aZXJvUHRyKExWYWx1ZSB2YWx1
ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdE51bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0K
LQotICAgIExWYWx1ZSBzZWxlY3QoTFZhbHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBu
b3RUYWtlbikgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6U2VsZWN0LCBvcmlnaW4oKSwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KLSAgICBMVmFs
dWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IENSQVNIKCk7
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci0gICAgTFZhbHVlIGNhbGwo
TFR5cGUgdHlwZSwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCi0g
ICAgewotICAgICAgICBCMzo6Q0NhbGxWYWx1ZSogcmVzdWx0ID0gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpDQ2FsbFZhbHVlPihtX3Byb2MsIHR5cGUsIG9yaWdpbigpLCBmdW5jdGlvbik7Ci0gICAg
ICAgIHJlc3VsdC0+Y2hpbGRyZW4oKS5hcHBlbmRWZWN0b3IodmVjdG9yKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgTFZhbHVlIGNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1
bmN0aW9uKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNDYWxsVmFsdWU+KG1fcHJv
YywgdHlwZSwgb3JpZ2luKCksIGZ1bmN0aW9uKTsgfQotICAgIExWYWx1ZSBjYWxsKExUeXBlIHR5
cGUsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6Q0NhbGxWYWx1ZT4obV9wcm9jLCB0eXBlLCBvcmlnaW4oKSwgZnVuY3Rpb24sIGFy
ZzEpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KLSAgICBMVmFsdWUgY2FsbChM
VHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpIHsg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q0NhbGxWYWx1ZT4obV9wcm9jLCB0eXBlLCBv
cmlnaW4oKSwgZnVuY3Rpb24sIGFyZzEsIGFyZ3MuLi4pOyB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdGlvblR5cGU+Ci0gICAgTFZhbHVlIG9wZXJhdGlvbihGdW5jdGlvblR5cGUgZnVu
Y3Rpb24pIHsgcmV0dXJuIGNvbnN0SW50UHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnVuY3Rpb24p
KTsgfQotCi0gICAgdm9pZCBqdW1wKExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6Q29udHJvbFZhbHVlPihtX3Byb2MsIEIzOjpKdW1wLCBvcmlnaW4oKSwg
QjM6OkZyZXF1ZW50ZWRCbG9jayhkZXN0aW5hdGlvbikpOyB9Ci0gICAgdm9pZCBicmFuY2goTFZh
bHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIFdlaWdodCB0YWtlbldlaWdodCwgTEJh
c2ljQmxvY2sgbm90VGFrZW4sIFdlaWdodCBub3RUYWtlbldlaWdodCk7Ci0gICAgdm9pZCBicmFu
Y2goTFZhbHVlIGNvbmRpdGlvbiwgV2VpZ2h0ZWRUYXJnZXQgdGFrZW4sIFdlaWdodGVkVGFyZ2V0
IG5vdFRha2VuKQotICAgIHsKLSAgICAgICAgYnJhbmNoKGNvbmRpdGlvbiwgdGFrZW4udGFyZ2V0
KCksIHRha2VuLndlaWdodCgpLCBub3RUYWtlbi50YXJnZXQoKSwgbm90VGFrZW4ud2VpZ2h0KCkp
OwotICAgIH0KLQotICAgIC8vIEJyYW5jaGVzIHRvIGFuIGFscmVhZHktY3JlYXRlZCBoYW5kbGVy
IGlmIHRydWUsICJmYWxscyB0aHJvdWdoIiBpZiBmYWxzZS4gRmFsbC10aHJvdWdoIGlzCi0gICAg
Ly8gc2ltdWxhdGVkIGJ5IGNyZWF0aW5nIGEgY29udGludWF0aW9uIGZvciB5b3UuCi0gICAgdm9p
ZCBjaGVjayhMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtlbiwgV2VpZ2h0IG5v
dFRha2VuV2VpZ2h0KTsKLSAgICAKLSAgICAvLyBTYW1lIGFzIGNoZWNrKCksIGJ1dCB1c2VzIFdl
aWdodDo6aW52ZXJzZSgpIHRvIGNvbXB1dGUgdGhlIG5vdFRha2VuV2VpZ2h0LgotICAgIHZvaWQg
Y2hlY2soTFZhbHVlIGNvbmRpdGlvbiwgV2VpZ2h0ZWRUYXJnZXQgdGFrZW4pOwotICAgIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Ci0gICAgdm9pZCBzd2l0Y2hJbnN0cnVjdGlv
bihMVmFsdWUgdmFsdWUsIGNvbnN0IFZlY3RvclR5cGUmIGNhc2VzLCBMQmFzaWNCbG9jayBmYWxs
VGhyb3VnaCwgV2VpZ2h0IGZhbGxUaHJvdWdoV2VpZ2h0KQotICAgIHsKLSAgICAgICAgQjM6OlN3
aXRjaFZhbHVlKiBzd2l0Y2hWYWx1ZSA9IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6U3dpdGNoVmFs
dWU+KAotICAgICAgICAgICAgbV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUsIEIzOjpGcmVxdWVudGVk
QmxvY2soZmFsbFRocm91Z2gpKTsKLSAgICAgICAgZm9yIChjb25zdCBTd2l0Y2hDYXNlJiBzd2l0
Y2hDYXNlIDogY2FzZXMpIHsKLSAgICAgICAgICAgIGludDY0X3QgdmFsdWUgPSBzd2l0Y2hDYXNl
LnZhbHVlKCktPmFzSW50KCk7Ci0gICAgICAgICAgICBCMzo6RnJlcXVlbnRlZEJsb2NrIHRhcmdl
dChzd2l0Y2hDYXNlLnRhcmdldCgpLCBzd2l0Y2hDYXNlLndlaWdodCgpLmZyZXF1ZW5jeUNsYXNz
KCkpOwotICAgICAgICAgICAgc3dpdGNoVmFsdWUtPmFwcGVuZENhc2UoQjM6OlN3aXRjaENhc2Uo
dmFsdWUsIHRhcmdldCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCByZXQoTFZhbHVl
IHZhbHVlKSB7IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29udHJvbFZhbHVlPihtX3Byb2MsIEIz
OjpSZXR1cm4sIG9yaWdpbigpLCB2YWx1ZSk7IH0KLQotICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29udHJvbFZhbHVlPihtX3Byb2MsIEIzOjpPb3BzLCBv
cmlnaW4oKSk7IH0KLQotICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGUoTFZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q2hlY2tWYWx1
ZT4obV9wcm9jLCBCMzo6Q2hlY2ssIG9yaWdpbigpLCB2YWx1ZSk7Ci0gICAgfQotCi0gICAgQjM6
OkNoZWNrVmFsdWUqIHNwZWN1bGF0ZUFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q2hlY2tWYWx1ZT4obV9w
cm9jLCBCMzo6Q2hlY2tBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Ci0gICAgfQotCi0gICAg
QjM6OkNoZWNrVmFsdWUqIHNwZWN1bGF0ZVN1YihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBCMzo6Q2hlY2tTdWIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Ci0gICAgfQotCi0g
ICAgQjM6OkNoZWNrVmFsdWUqIHNwZWN1bGF0ZU11bChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q2hlY2tWYWx1
ZT4obV9wcm9jLCBCMzo6Q2hlY2tNdWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7Ci0gICAgfQot
Ci0gICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludChMVHlwZSB0eXBlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPiht
X3Byb2MsIHR5cGUsIG9yaWdpbigpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHRyYXAoKQotICAgIHsK
LSAgICAgICAgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb250cm9sVmFsdWU+KG1fcHJvYywgQjM6
Ok9vcHMsIG9yaWdpbigpKTsKLSAgICB9Ci0KLSAgICBWYWx1ZUZyb21CbG9jayBhbmNob3IoTFZh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgQjM6OlVwc2lsb25WYWx1ZSogdXBzaWxvbiA9IG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VXBzaWxvblZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBWYWx1ZUZyb21CbG9jayh1cHNpbG9uLCBtX2Jsb2NrKTsKLSAg
ICB9Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNwcmFnbWEgbWFyayAtIFN0YXRlcwotI2VuZGlm
Ci0gICAgQjM6OlByb2NlZHVyZSYgbV9wcm9jOwotCi0gICAgREZHOjpOb2RlKiBtX29yaWdpbiB7
IG51bGxwdHIgfTsKLSAgICBMQmFzaWNCbG9jayBtX2Jsb2NrIHsgbnVsbHB0ciB9OwotICAgIExC
YXNpY0Jsb2NrIG1fbmV4dEJsb2NrIHsgbnVsbHB0ciB9OwotCi0gICAgQWJzdHJhY3RIZWFwUmVw
b3NpdG9yeSogbV9oZWFwczsKLQotICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeSB7IDEgfTsKLQotcHJp
dmF0ZToKLSAgICBPcmRlck1ha2VyPExCYXNpY0Jsb2NrPiBtX2Jsb2NrT3JkZXI7Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb24sIHR5cGVuYW1lLi4uIEFyZ3M+Ci0gICAgTFZh
bHVlIGNhbGxXaXRob3V0U2lkZUVmZmVjdHMoQjM6OlR5cGUgdHlwZSwgRnVuY3Rpb24gZnVuY3Rp
b24sIExWYWx1ZSBhcmcxLCBBcmdzLi4uIGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpDQ2FsbFZhbHVlPihtX3Byb2MsIHR5cGUsIG9yaWdpbigpLCBC
Mzo6RWZmZWN0czo6bm9uZSgpLAotICAgICAgICAgICAgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpD
b25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0
aW9uKSksCi0gICAgICAgICAgICBhcmcxLCBhcmdzLi4uKTsKLSAgICB9Ci0KLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KLWlubGluZSBMVmFsdWUgT3V0cHV0OjpwaGkoTFR5cGUg
dHlwZSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUsIFBhcmFtcy4uLiB0aGVSZXN0KQotewotICAgIExW
YWx1ZSBwaGlOb2RlID0gcGhpKHR5cGUpOwotICAgIGFkZEluY29taW5nVG9QaGkocGhpTm9kZSwg
dmFsdWUsIHRoZVJlc3QuLi4pOwotICAgIHJldHVybiBwaGlOb2RlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBWZWN0b3JUeXBlPgotaW5saW5lIExWYWx1ZSBPdXRwdXQ6OnBoaShMVHlwZSB0eXBl
LCBjb25zdCBWZWN0b3JUeXBlJiB2ZWN0b3IpCi17Ci0gICAgTFZhbHVlIHBoaU5vZGUgPSBwaGko
dHlwZSk7Ci0gICAgZm9yIChjb25zdCBWYWx1ZUZyb21CbG9jayYgdmFsdWVGcm9tQmxvY2sgOiB2
ZWN0b3IpCi0gICAgICAgIGFkZEluY29taW5nVG9QaGkocGhpTm9kZSwgdmFsdWVGcm9tQmxvY2sp
OwotICAgIHJldHVybiBwaGlOb2RlOwotfQotCi1pbmxpbmUgdm9pZCBPdXRwdXQ6OmFkZEluY29t
aW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2sgdmFsdWUpCi17Ci0gICAgdmFsdWUu
dmFsdWUoKS0+YXM8QjM6OlVwc2lsb25WYWx1ZT4oKS0+c2V0UGhpKHBoaSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KLWlubGluZSB2b2lkIE91dHB1dDo6YWRkSW5jb21pbmdU
b1BoaShMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jayB2YWx1ZSwgUGFyYW1zLi4uIHRoZVJlc3Qp
Ci17Ci0gICAgYWRkSW5jb21pbmdUb1BoaShwaGksIHZhbHVlKTsKLSAgICBhZGRJbmNvbWluZ1Rv
UGhpKHBoaSwgdGhlUmVzdC4uLik7Ci19Ci0KLWlubGluZSBMVmFsdWUgT3V0cHV0OjpiaXRDYXN0
KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIHR5
cGUgPT0gaW50NjQgfHwgdHlwZSA9PSBkb3VibGVUeXBlKTsKLSAgICByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Qml0d2lzZUNhc3QsIG9yaWdpbigpLCB2
YWx1ZSk7Ci19Ci0KLWlubGluZSBMVmFsdWUgT3V0cHV0Ojpmcm91bmQoTFZhbHVlIGRvdWJsZVZh
bHVlKQotewotICAgIHJldHVybiBmbG9hdFRvRG91YmxlKGRvdWJsZVRvRmxvYXQoZG91YmxlVmFs
dWUpKTsKLX0KLQotI2lmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgcG9wCi0jZW5kaWYgLy8gQ09NUElMRVIoR0NDX09SX0NMQU5HKQotCi0jZGVmaW5lIEZU
TF9ORVdfQkxPQ0sob3V0cHV0LCBuYW1lQXJndW1lbnRzKSBcCi0gICAgKExJS0VMWSghdmVyYm9z
ZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSBcCi0gICAgPyAob3V0cHV0KS5uZXdCbG9jaygpIFwKLSAg
ICA6IChvdXRwdXQpLm5ld0Jsb2NrKCh0b0NTdHJpbmcgbmFtZUFyZ3VtZW50cykuZGF0YSgpKSkK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
Ci0KLSNlbmRpZiAvLyBGVExCM091dHB1dF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE5NjcyOSkJKGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExCM0NvbXBpbGUuY3BwOjE5NjcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMQ29tcGlsZS5oIgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90Lmgi
CisjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdHcmFwaFNhZmVwb2lu
dC5oIgorI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJEYXRhVmlldy5oIgor
I2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNs
dWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJKSVRTdWJHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKKyNpbmNsdWRl
ICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCit2b2lkIGNvbXBpbGUoU3RhdGUmIHN0
YXRlLCBTYWZlcG9pbnQ6OlJlc3VsdCYgc2FmZXBvaW50UmVzdWx0KQoreworICAgIEdyYXBoJiBn
cmFwaCA9IHN0YXRlLmdyYXBoOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGgubV9j
b2RlQmxvY2s7CisgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKKworICAgIHsKKyAgICAgICAgR3Jh
cGhTYWZlcG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOworCisg
ICAgICAgIEIzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbigqc3RhdGUucHJvYyk7CisgICAgfQorCisg
ICAgaWYgKHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAuaXNDb2xsZWN0aW5n
KCkpOworICAgIAorICAgIGlmIChzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdp
c3Rlck9mZnNldHMgPQorICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyQXRPZmZzZXRM
aXN0PihzdGF0ZS5wcm9jLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworICAgIGlmIChzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKCJVbndpbmQgaW5mbyBmb3IgIiwg
Q29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZU
TEpJVCksICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZygiICAgICIsICpyZWdpc3Rlck9mZnNldHMs
ICJcbiIpOworICAgIH0KKyAgICBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+c2V0Q2FsbGVlU2F2
ZVJlZ2lzdGVycyhXVEZNb3ZlKHJlZ2lzdGVyT2Zmc2V0cykpOworICAgIEFTU0VSVCghKHN0YXRl
LnByb2MtPmZyYW1lU2l6ZSgpICUgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgIHN0YXRl
LmppdENvZGUtPmNvbW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQgPSBzdGF0ZS5wcm9jLT5mcmFtZVNp
emUoKSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisKKyAgICBpbnQgbG9jYWxzT2Zmc2V0ID0K
KyAgICAgICAgc3RhdGUuY2FwdHVyZWRWYWx1ZS0+b2Zmc2V0RnJvbUZQKCkgLyBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgIGlmIChzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSkgeworICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgImxvY2Fs
c09mZnNldCA9ICIsIGxvY2Fsc09mZnNldCwgIiBmb3Igc3RhY2sgc2xvdDogIiwKKyAgICAgICAg
ICAgIHBvaW50ZXJEdW1wKHN0YXRlLmNhcHR1cmVkVmFsdWUpLCAiIGF0ICIsIFJhd1BvaW50ZXIo
c3RhdGUuY2FwdHVyZWRWYWx1ZSksICJcbiIpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBncmFwaC5tX2lubGluZVZhcmlh
YmxlRGF0YVtpXS5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIAorICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQorICAgICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgKz0gbG9jYWxzT2Zmc2V0Owor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+IDE7KSB7CisgICAgICAgICAgICBpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50c1thcmd1bWVudF0gPQorICAgICAgICAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzW2FyZ3VtZW50XS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fsc09m
ZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVj
b3ZlcnkgPQorICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnku
d2l0aExvY2Fsc09mZnNldChsb2NhbHNPZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGdyYXBoLmhhc0RlYnVnZ2VyRW5hYmxlZCgpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRT
Y29wZVJlZ2lzdGVyKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpICsgbG9jYWxzT2Zmc2V0KTsK
KyAgICB9CisgICAgZm9yIChPU1JFeGl0RGVzY3JpcHRvciYgZGVzY3JpcHRvciA6IHN0YXRlLmpp
dENvZGUtPm9zckV4aXREZXNjcmlwdG9ycykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBk
ZXNjcmlwdG9yLm1fdmFsdWVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGRlc2NyaXB0b3Iu
bV92YWx1ZXNbaV0gPSBkZXNjcmlwdG9yLm1fdmFsdWVzW2ldLndpdGhMb2NhbHNPZmZzZXQobG9j
YWxzT2Zmc2V0KTsKKyAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiog
bWF0ZXJpYWxpemF0aW9uIDogZGVzY3JpcHRvci5tX21hdGVyaWFsaXphdGlvbnMpCisgICAgICAg
ICAgICBtYXRlcmlhbGl6YXRpb24tPmFjY291bnRGb3JMb2NhbHNPZmZzZXQobG9jYWxzT2Zmc2V0
KTsKKyAgICB9CisKKyAgICAvLyBXZSB3aWxsIGFkZCBleGNlcHRpb24gaGFuZGxlcnMgd2hpbGUg
Z2VuZXJhdGluZy4KKyAgICBjb2RlQmxvY2stPmNsZWFyRXhjZXB0aW9uSGFuZGxlcnMoKTsKKwor
ICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIEIzOjpnZW5lcmF0ZSgq
c3RhdGUucHJvYywgaml0KTsKKworICAgIC8vIEVtaXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgor
ICAgICpzdGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7CisgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1DYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIGppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGppdC52bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAg
aml0Lmp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKyAgICBqaXQuYWRkTGlua1Rhc2soCisgICAg
ICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAg
ICAgfSk7CisKKyAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPExpbmtCdWZmZXI+KAorICAgICAgICB2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1
ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFp
bGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBCMzo6UENUb09y
aWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwor
ICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCisgICAgICAg
IGNvZGVCbG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29k
ZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1h
cCkpLCAqc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7CisKKyAgICBzdGF0ZS5n
ZW5lcmF0ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxHZW5lcmF0ZWRGdW5jdGlvbj4oCisgICAg
ICAgIHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVCM0J5cHJvZHVj
dHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCShyZXZpc2lvbiAxOTY3MjkpCShmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwOjE5NjcyOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExCM091dHB1dC5oIgorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJCM01hdGhFeHRyYXMuaCIKKyNpbmNsdWRl
ICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzsKKworT3V0cHV0OjpPdXRwdXQoU3RhdGUm
IHN0YXRlKQorICAgIDogbV9wcm9jKCpzdGF0ZS5wcm9jKQoreworfQorCitPdXRwdXQ6On5PdXRw
dXQoKQoreworfQorCit2b2lkIE91dHB1dDo6aW5pdGlhbGl6ZShBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5JiBoZWFwcykKK3sKKyAgICBtX2hlYXBzID0gJmhlYXBzOworfQorCitMQmFzaWNCbG9jayBP
dXRwdXQ6Om5ld0Jsb2NrKGNvbnN0IGNoYXIqKQoreworICAgIExCYXNpY0Jsb2NrIHJlc3VsdCA9
IG1fcHJvYy5hZGRCbG9jayhtX2ZyZXF1ZW5jeSk7CisKKyAgICBpZiAoIW1fbmV4dEJsb2NrKQor
ICAgICAgICBtX2Jsb2NrT3JkZXIuYXBwZW5kKHJlc3VsdCk7CisgICAgZWxzZQorICAgICAgICBt
X2Jsb2NrT3JkZXIuaW5zZXJ0QmVmb3JlKG1fbmV4dEJsb2NrLCByZXN1bHQpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBPdXRwdXQ6OmFwcGx5QmxvY2tPcmRlcigpCit7CisgICAg
bV9wcm9jLnNldEJsb2NrT3JkZXIobV9ibG9ja09yZGVyKTsKK30KKworTEJhc2ljQmxvY2sgT3V0
cHV0OjphcHBlbmRUbyhMQmFzaWNCbG9jayBibG9jaywgTEJhc2ljQmxvY2sgbmV4dEJsb2NrKQor
eworICAgIGFwcGVuZFRvKGJsb2NrKTsKKyAgICByZXR1cm4gaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KG5leHRCbG9jayk7Cit9CisKK3ZvaWQgT3V0cHV0OjphcHBlbmRUbyhMQmFzaWNCbG9jayBibG9j
aykKK3sKKyAgICBtX2Jsb2NrID0gYmxvY2s7Cit9CisKK1Nsb3RCYXNlVmFsdWUqIE91dHB1dDo6
bG9ja2VkU3RhY2tTbG90KHNpemVfdCBieXRlcykKK3sKKyAgICByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PFNsb3RCYXNlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG1fcHJvYy5hZGRTdGFja1Ns
b3QoYnl0ZXMpKTsKK30KKworTFZhbHVlIE91dHB1dDo6bmVnKExWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEIzOjpOZWcsIG9yaWdp
bigpLCB2YWx1ZSk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6OmJpdE5vdChMVmFsdWUgdmFsdWUpCit7
CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJp
dFhvciwgb3JpZ2luKCksCisgICAgICAgIHZhbHVlLAorICAgICAgICBtX2Jsb2NrLT5hcHBlbmRJ
bnRDb25zdGFudChtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZS0+dHlwZSgpLCAtMSkpOworfQorCitM
VmFsdWUgT3V0cHV0Ojpsb2dpY2FsTm90KExWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2
YWx1ZSwgaW50MzJaZXJvKTsKK30KKworTFZhbHVlIE91dHB1dDo6bG9hZChUeXBlZFBvaW50ZXIg
cG9pbnRlciwgTFR5cGUgdHlwZSkKK3sKKyAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCB0eXBlLCBvcmlnaW4oKSwgcG9pbnRlci52
YWx1ZSgpKTsKKyAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKGxvYWQsICpt
X2hlYXBzKTsKKyAgICByZXR1cm4gbG9hZDsKK30KKworTFZhbHVlIE91dHB1dDo6ZG91YmxlUG93
aShMVmFsdWUgeCwgTFZhbHVlIHkpCit7CisgICAgLy8gRklYTUU6IHBvd0RvdWJsZUludDMyKCkg
c2hvdWxkIGJlIGlubGluZWQgaGVyZSBzaW5jZSBPdXRwdXQga25vd3MgYWJvdXQgYmxvY2sgbGF5
b3V0IGFuZAorICAgIC8vIHNob3VsZCBiZSBpbnZvbHZlZCBpbiBhbnkgb3BlcmF0aW9uIHRoYXQg
Y3JlYXRlcyBibG9ja3MuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MjIyMworICAgIGF1dG8gcmVzdWx0ID0gcG93RG91YmxlSW50MzIobV9wcm9jLCBt
X2Jsb2NrLCBvcmlnaW4oKSwgeCwgeSk7CisgICAgbV9ibG9jayA9IHJlc3VsdC5maXJzdDsKKyAg
ICByZXR1cm4gcmVzdWx0LnNlY29uZDsKK30KKworYm9vbCBPdXRwdXQ6Omhhc1NlbnNpYmxlRG91
YmxlVG9JbnQoKQoreworICAgIHJldHVybiBvcHRpbWl6ZUZvclg4NigpOworfQorCitMVmFsdWUg
T3V0cHV0Ojpkb3VibGVUb0ludChMVmFsdWUgdmFsdWUpCit7CisgICAgUGF0Y2hwb2ludFZhbHVl
KiByZXN1bHQgPSBwYXRjaHBvaW50KEludDMyKTsKKyAgICByZXN1bHQtPmFwcGVuZCh2YWx1ZSwg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoCisgICAg
ICAgIFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvSW50MzIocGFyYW1z
WzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICByZXN1bHQtPmVm
ZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTFZhbHVl
IE91dHB1dDo6ZG91YmxlVG9VSW50KExWYWx1ZSB2YWx1ZSkKK3sKKyAgICBQYXRjaHBvaW50VmFs
dWUqIHJlc3VsdCA9IHBhdGNocG9pbnQoSW50MzIpOworICAgIHJlc3VsdC0+YXBwZW5kKHZhbHVl
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICByZXN1bHQtPnNldEdlbmVyYXRvcigKKyAg
ICAgICAgW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LnRydW5jYXRlRG91YmxlVG9VaW50MzIocGFy
YW1zWzFdLmZwcigpLCBwYXJhbXNbMF0uZ3ByKCkpOworICAgICAgICB9KTsKKyAgICByZXN1bHQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworTFZh
bHVlIE91dHB1dDo6dW5zaWduZWRUb0RvdWJsZShMVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IGludFRvRG91YmxlKHplcm9FeHQodmFsdWUsIEludDY0KSk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6
OmxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlciBwb2ludGVyKQoreworICAgIExWYWx1ZSBsb2Fk
ID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQ4UywgSW50MzIs
IG9yaWdpbigpLCBwb2ludGVyLnZhbHVlKCkpOworICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRl
SW5zdHJ1Y3Rpb24obG9hZCwgKm1faGVhcHMpOworICAgIHJldHVybiBsb2FkOworfQorCitMVmFs
dWUgT3V0cHV0Ojpsb2FkOFplcm9FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRlcikKK3sKKyAgICBM
VmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2Fk
OFosIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlci52YWx1ZSgpKTsKKyAgICBwb2ludGVyLmhlYXAo
KS5kZWNvcmF0ZUluc3RydWN0aW9uKGxvYWQsICptX2hlYXBzKTsKKyAgICByZXR1cm4gbG9hZDsK
K30KKworTFZhbHVlIE91dHB1dDo6bG9hZDE2U2lnbkV4dDMyKFR5cGVkUG9pbnRlciBwb2ludGVy
KQoreworICAgIExWYWx1ZSBsb2FkID0gbV9ibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQxNlMsIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlci52YWx1ZSgpKTsKKyAgICBw
b2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKGxvYWQsICptX2hlYXBzKTsKKyAgICBy
ZXR1cm4gbG9hZDsKK30KKworTFZhbHVlIE91dHB1dDo6bG9hZDE2WmVyb0V4dDMyKFR5cGVkUG9p
bnRlciBwb2ludGVyKQoreworICAgIExWYWx1ZSBsb2FkID0gbV9ibG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQxNlosIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlci52YWx1
ZSgpKTsKKyAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKGxvYWQsICptX2hl
YXBzKTsKKyAgICByZXR1cm4gbG9hZDsKK30KKwordm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2
YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCit7CisgICAgTFZhbHVlIHN0b3JlID0gbV9ibG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIFN0b3JlLCBvcmlnaW4oKSwgdmFsdWUs
IHBvaW50ZXIudmFsdWUoKSk7CisgICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlv
bihzdG9yZSwgKm1faGVhcHMpOworfQorCit2b2lkIE91dHB1dDo6c3RvcmUzMkFzOChMVmFsdWUg
dmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQoreworICAgIExWYWx1ZSBzdG9yZSA9IG1fYmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTgsIG9yaWdpbigpLCB2YWx1
ZSwgcG9pbnRlci52YWx1ZSgpKTsKKyAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0
aW9uKHN0b3JlLCAqbV9oZWFwcyk7Cit9CisKK3ZvaWQgT3V0cHV0OjpzdG9yZTMyQXMxNihMVmFs
dWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQoreworICAgIExWYWx1ZSBzdG9yZSA9IG1f
YmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZTE2LCBvcmlnaW4oKSwg
dmFsdWUsIHBvaW50ZXIudmFsdWUoKSk7CisgICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0
cnVjdGlvbihzdG9yZSwgKm1faGVhcHMpOworfQorCitMVmFsdWUgT3V0cHV0OjpiYXNlSW5kZXgo
TFZhbHVlIGJhc2UsIExWYWx1ZSBpbmRleCwgU2NhbGUgc2NhbGUsIHB0cmRpZmZfdCBvZmZzZXQp
Cit7CisgICAgTFZhbHVlIGFjY3VtdWxhdGVkT2Zmc2V0OworICAgICAgICAKKyAgICBzd2l0Y2gg
KHNjYWxlKSB7CisgICAgY2FzZSBTY2FsZU9uZToKKyAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQg
PSBpbmRleDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY2FsZVR3bzoKKyAgICAgICAgYWNj
dW11bGF0ZWRPZmZzZXQgPSBzaGwoaW5kZXgsIGludFB0ck9uZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2NhbGVGb3VyOgorICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IHNobChpbmRl
eCwgaW50UHRyVHdvKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY2FsZUVpZ2h0OgorICAg
IGNhc2UgU2NhbGVQdHI6CisgICAgICAgIGFjY3VtdWxhdGVkT2Zmc2V0ID0gc2hsKGluZGV4LCBp
bnRQdHJUaHJlZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKG9m
ZnNldCkKKyAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgPSBhZGQoYWNjdW11bGF0ZWRPZmZzZXQs
IGNvbnN0SW50UHRyKG9mZnNldCkpOworICAgICAgICAKKyAgICByZXR1cm4gYWRkKGJhc2UsIGFj
Y3VtdWxhdGVkT2Zmc2V0KTsKK30KKwordm9pZCBPdXRwdXQ6OmJyYW5jaChMVmFsdWUgY29uZGl0
aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgV2VpZ2h0IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBu
b3RUYWtlbiwgV2VpZ2h0IG5vdFRha2VuV2VpZ2h0KQoreworICAgIG1fYmxvY2stPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICBtX3Byb2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLCBj
b25kaXRpb24sCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayh0YWtlbiwgdGFrZW5XZWlnaHQuZnJl
cXVlbmN5Q2xhc3MoKSksCisgICAgICAgIEZyZXF1ZW50ZWRCbG9jayhub3RUYWtlbiwgbm90VGFr
ZW5XZWlnaHQuZnJlcXVlbmN5Q2xhc3MoKSkpOworfQorCit2b2lkIE91dHB1dDo6Y2hlY2soTFZh
bHVlIGNvbmRpdGlvbiwgV2VpZ2h0ZWRUYXJnZXQgdGFrZW4sIFdlaWdodCBub3RUYWtlbldlaWdo
dCkKK3sKKyAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKCp0aGlz
LCAoIk91dHB1dDo6Y2hlY2sgY29udGludWF0aW9uIikpOworICAgIGJyYW5jaChjb25kaXRpb24s
IHRha2VuLCBXZWlnaHRlZFRhcmdldChjb250aW51YXRpb24sIG5vdFRha2VuV2VpZ2h0KSk7Cisg
ICAgYXBwZW5kVG8oY29udGludWF0aW9uKTsKK30KKwordm9pZCBPdXRwdXQ6OmNoZWNrKExWYWx1
ZSBjb25kaXRpb24sIFdlaWdodGVkVGFyZ2V0IHRha2VuKQoreworICAgIGNoZWNrKGNvbmRpdGlv
biwgdGFrZW4sIHRha2VuLndlaWdodCgpLmludmVyc2UoKSk7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6
OmxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExvYWRUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBMb2FkOFNpZ25FeHQzMjoKKyAgICAgICAgcmV0dXJuIGxvYWQ4
U2lnbkV4dDMyKHBvaW50ZXIpOworICAgIGNhc2UgTG9hZDhaZXJvRXh0MzI6CisgICAgICAgIHJl
dHVybiBsb2FkOFplcm9FeHQzMihwb2ludGVyKTsKKyAgICBjYXNlIExvYWQxNlNpZ25FeHQzMjoK
KyAgICAgICAgcmV0dXJuIGxvYWQ4U2lnbkV4dDMyKHBvaW50ZXIpOworICAgIGNhc2UgTG9hZDE2
WmVyb0V4dDMyOgorICAgICAgICByZXR1cm4gbG9hZDhaZXJvRXh0MzIocG9pbnRlcik7CisgICAg
Y2FzZSBMb2FkMzI6CisgICAgICAgIHJldHVybiBsb2FkMzIocG9pbnRlcik7CisgICAgY2FzZSBM
b2FkNjQ6CisgICAgICAgIHJldHVybiBsb2FkNjQocG9pbnRlcik7CisgICAgY2FzZSBMb2FkUHRy
OgorICAgICAgICByZXR1cm4gbG9hZFB0cihwb2ludGVyKTsKKyAgICBjYXNlIExvYWRGbG9hdDoK
KyAgICAgICAgcmV0dXJuIGxvYWRGbG9hdChwb2ludGVyKTsKKyAgICBjYXNlIExvYWREb3VibGU6
CisgICAgICAgIHJldHVybiBsb2FkRG91YmxlKHBvaW50ZXIpOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIE91
dHB1dDo6c3RvcmUoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlciwgU3RvcmVUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBTdG9yZTMyQXM4OgorICAg
ICAgICBzdG9yZTMyQXM4KHZhbHVlLCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RvcmUzMkFzMTY6CisgICAgICAgIHN0b3JlMzJBczE2KHZhbHVlLCBwb2ludGVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUzMjoKKyAgICAgICAgc3RvcmUzMih2YWx1ZSwg
cG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlNjQ6CisgICAgICAgIHN0
b3JlNjQodmFsdWUsIHBvaW50ZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZVB0
cjoKKyAgICAgICAgc3RvcmVQdHIodmFsdWUsIHBvaW50ZXIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBzdG9yZUZsb2F0KHZhbHVlLCBwb2ludGVyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVEb3VibGU6CisgICAgICAgIHN0b3JlRG91
YmxlKHZhbHVlLCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxOTY3MjkpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNPdXRwdXQuaDoxOTY3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZUTEIzT3V0
cHV0X2gKKyNkZWZpbmUgRlRMQjNPdXRwdXRfaAorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NDYWxsVmFsdWUu
aCIKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUu
aCIKKyNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5o
IgorI2luY2x1ZGUgIkIzU2xvdEJhc2VWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgorI2luY2x1ZGUgIkZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKKyNpbmNs
dWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIkZUTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJG
VExUeXBlZFBvaW50ZXIuaCIKKyNpbmNsdWRlICJGVExWYWx1ZUZyb21CbG9jay5oIgorI2luY2x1
ZGUgIkZUTFdlaWdodC5oIgorI2luY2x1ZGUgIkZUTFdlaWdodGVkVGFyZ2V0LmgiCisjaW5jbHVk
ZSA8d3RmL09yZGVyTWFrZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
KworLy8gRklYTUU6IHJlbW92ZSB0aGlzIG9uY2UgZXZlcnl0aGluZyBjYW4gYmUgZ2VuZXJhdGVk
IHRocm91Z2ggQjMuCisjaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQorI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1u
b3JldHVybiIKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtcGFyYW1l
dGVyIgorI2VuZGlmIC8vIENPTVBJTEVSKEdDQ19PUl9DTEFORykKKworbmFtZXNwYWNlIEpTQyB7
CisKK25hbWVzcGFjZSBERkcgeyBzdHJ1Y3QgTm9kZTsgfQorCituYW1lc3BhY2UgRlRMIHsKKwor
ZW51bSBTY2FsZSB7IFNjYWxlT25lLCBTY2FsZVR3bywgU2NhbGVGb3VyLCBTY2FsZUVpZ2h0LCBT
Y2FsZVB0ciB9OworCitjbGFzcyBPdXRwdXQgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsKK3B1Ymxp
YzoKKyAgICBPdXRwdXQoU3RhdGUmKTsKKyAgICB+T3V0cHV0KCk7CisKKyAgICB2b2lkIGluaXRp
YWxpemUoQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYpOworCisgICAgdm9pZCBzZXRGcmVxdWVuY3ko
ZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9mcmVxdWVuY3kgPSB2YWx1ZTsKKyAgICB9
CisKKyAgICBMQmFzaWNCbG9jayBuZXdCbG9jayhjb25zdCBjaGFyKiBuYW1lID0gIiIpOworCisg
ICAgTEJhc2ljQmxvY2sgaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKExCYXNpY0Jsb2NrIG5leHRCbG9j
aykKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0QmxvY2sgPSBtX25leHRCbG9j
azsKKyAgICAgICAgbV9uZXh0QmxvY2sgPSBuZXh0QmxvY2s7CisgICAgICAgIHJldHVybiBsYXN0
TmV4dEJsb2NrOworICAgIH0KKworICAgIHZvaWQgYXBwbHlCbG9ja09yZGVyKCk7CisKKyAgICBM
QmFzaWNCbG9jayBhcHBlbmRUbyhMQmFzaWNCbG9jaywgTEJhc2ljQmxvY2sgbmV4dEJsb2NrKTsK
KyAgICB2b2lkIGFwcGVuZFRvKExCYXNpY0Jsb2NrKTsKKworICAgIHZvaWQgc2V0T3JpZ2luKERG
Rzo6Tm9kZSogbm9kZSkgeyBtX29yaWdpbiA9IG5vZGU7IH0KKyAgICBCMzo6T3JpZ2luIG9yaWdp
bigpIHsgcmV0dXJuIEIzOjpPcmlnaW4obV9vcmlnaW4pOyB9CisKKyAgICBMVmFsdWUgZnJhbWVQ
b2ludGVyKCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6RnJhbWVQb2ludGVyLCBvcmlnaW4oKSk7IH0KKworICAgIEIzOjpTbG90QmFzZVZhbHVlKiBs
b2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKTsKKworICAgIExWYWx1ZSBjb25zdEJvb2woYm9v
bCB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdDMyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIHZhbHVlKTsgfQorICAgIExWYWx1ZSBjb25zdEludDMyKGludDMyX3Qg
dmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCB2YWx1ZSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIExW
YWx1ZSBjb25zdEludFB0cihUKiB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZSk7IH0KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIExWYWx1ZSBjb25zdEludFB0cihUIHZhbHVlKSB7IHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZh
bHVlKTsgfQorICAgIExWYWx1ZSBjb25zdEludDY0KGludDY0X3QgdmFsdWUpIHsgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Q2NFZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1
ZSk7IH0KKyAgICBMVmFsdWUgY29uc3REb3VibGUoZG91YmxlIHZhbHVlKSB7IHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0RG91YmxlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZh
bHVlKTsgfQorCisgICAgTFZhbHVlIHBoaShMVHlwZSB0eXBlKSB7IHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpQaGksIHR5cGUsIG9yaWdpbigpKTsgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KKyAgICBMVmFsdWUgcGhpKExUeXBlLCBW
YWx1ZUZyb21CbG9jaywgUGFyYW1zLi4uIHRoZVJlc3QpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFZlY3RvclR5cGU+CisgICAgTFZhbHVlIHBoaShMVHlwZSwgY29uc3QgVmVjdG9yVHlwZSYpOwor
ICAgIHZvaWQgYWRkSW5jb21pbmdUb1BoaShMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jayk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgorICAgIHZvaWQgYWRkSW5jb21pbmdUb1Bo
aShMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jaywgUGFyYW1zLi4uIHRoZVJlc3QpOworCisgICAg
TFZhbHVlIGFkZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBZGQsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7IH0KKyAgICBMVmFsdWUgc3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlN1Yiwgb3JpZ2luKCks
IGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBtdWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TXVs
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRpdihMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpEaXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgY2hpbGxE
aXYoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Q2hpbGxEaXYsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
IH0KKyAgICBMVmFsdWUgbW9kKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok1vZCwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBjaGlsbE1vZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpD
aGlsbE1vZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBuZWcoTFZhbHVl
KTsKKworICAgIExWYWx1ZSBkb3VibGVBZGQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRvdWJsZVN1YihMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpTdWIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgZG91Ymxl
TXVsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok11bCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQor
ICAgIExWYWx1ZSBkb3VibGVEaXYoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RGl2LCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRvdWJsZU1vZChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpNb2QsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgZG91YmxlTmVnKExW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gbmVnKHZhbHVlKTsgfQorCisgICAgTFZhbHVlIGJpdEFuZChM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRBbmQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKyAg
ICBMVmFsdWUgYml0T3IoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Qml0T3IsIG9yaWdpbigpLCBsZWZ0
LCByaWdodCk7IH0KKyAgICBMVmFsdWUgYml0WG9yKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdFhv
ciwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBzaGwoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9w
cm9jLCBCMzo6U2hsLCBvcmlnaW4oKSwgbGVmdCwgY2FzdFRvSW50MzIocmlnaHQpKTsgfQorICAg
IExWYWx1ZSBhU2hyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNTaHIsIG9yaWdpbigpLCBsZWZ0LCBj
YXN0VG9JbnQzMihyaWdodCkpOyB9CisgICAgTFZhbHVlIGxTaHIoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6WlNociwgb3JpZ2luKCksIGxlZnQsIGNhc3RUb0ludDMyKHJpZ2h0KSk7IH0KKyAgICBMVmFs
dWUgYml0Tm90KExWYWx1ZSk7CisgICAgTFZhbHVlIGxvZ2ljYWxOb3QoTFZhbHVlKTsKKworICAg
IExWYWx1ZSBjdGx6MzIoTFZhbHVlIG9wZXJhbmQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkNseiwgb3JpZ2luKCksIG9wZXJhbmQpOyB9CisgICAg
TFZhbHVlIGFkZFdpdGhPdmVyZmxvdzMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgQ1JB
U0goKTsgfQorICAgIExWYWx1ZSBzdWJXaXRoT3ZlcmZsb3czMihMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7IENSQVNIKCk7IH0KKyAgICBMVmFsdWUgbXVsV2l0aE92ZXJmbG93MzIoTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCkgeyBDUkFTSCgpOyB9CisgICAgTFZhbHVlIGFkZFdpdGhPdmVy
ZmxvdzY0KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgQ1JBU0goKTsgfQorICAgIExWYWx1
ZSBzdWJXaXRoT3ZlcmZsb3c2NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IENSQVNIKCk7
IH0KKyAgICBMVmFsdWUgbXVsV2l0aE92ZXJmbG93NjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyBDUkFTSCgpOyB9CisgICAgTFZhbHVlIGRvdWJsZUFicyhMVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFicywgb3JpZ2lu
KCksIHZhbHVlKTsgfQorICAgIExWYWx1ZSBkb3VibGVDZWlsKExWYWx1ZSBvcGVyYW5kKSB7IHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpDZWlsLCBvcmln
aW4oKSwgb3BlcmFuZCk7IH0KKworICAgIExWYWx1ZSBkb3VibGVTaW4oTFZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgZG91YmxlICgqc2luRG91YmxlKShkb3VibGUpID0gc2luOworICAgICAg
ICByZXR1cm4gY2FsbFdpdGhvdXRTaWRlRWZmZWN0cyhCMzo6RG91YmxlLCBzaW5Eb3VibGUsIHZh
bHVlKTsKKyAgICB9CisgICAgTFZhbHVlIGRvdWJsZUNvcyhMVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBkb3VibGUgKCpjb3NEb3VibGUpKGRvdWJsZSkgPSBjb3M7CisgICAgICAgIHJldHVy
biBjYWxsV2l0aG91dFNpZGVFZmZlY3RzKEIzOjpEb3VibGUsIGNvc0RvdWJsZSwgdmFsdWUpOwor
ICAgIH0KKworICAgIExWYWx1ZSBkb3VibGVQb3coTFZhbHVlIHhPcGVyYW5kLCBMVmFsdWUgeU9w
ZXJhbmQpCisgICAgeworICAgICAgICBkb3VibGUgKCpwb3dEb3VibGUpKGRvdWJsZSwgZG91Ymxl
KSA9IHBvdzsKKyAgICAgICAgcmV0dXJuIGNhbGxXaXRob3V0U2lkZUVmZmVjdHMoQjM6OkRvdWJs
ZSwgcG93RG91YmxlLCB4T3BlcmFuZCwgeU9wZXJhbmQpOworICAgIH0KKworICAgIExWYWx1ZSBk
b3VibGVQb3dpKExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKTsKKworICAgIExWYWx1
ZSBkb3VibGVTcXJ0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6U3FydCwgb3JpZ2luKCksIHZhbHVlKTsgfQorCisgICAgTFZh
bHVlIGRvdWJsZUxvZyhMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBkb3VibGUgKCpsb2dE
b3VibGUpKGRvdWJsZSkgPSBsb2c7CisgICAgICAgIHJldHVybiBjYWxsV2l0aG91dFNpZGVFZmZl
Y3RzKEIzOjpEb3VibGUsIGxvZ0RvdWJsZSwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKTsKKyAgICBMVmFsdWUgZG91YmxlVG9JbnQoTFZh
bHVlKTsKKyAgICBMVmFsdWUgZG91YmxlVG9VSW50KExWYWx1ZSk7CisKKyAgICBMVmFsdWUgc2ln
bkV4dDMyVG82NChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OlNFeHQzMiwgb3JpZ2luKCksIHZhbHVlKTsgfQorICAgIExWYWx1
ZSB6ZXJvRXh0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS0+dHlwZSgpID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpaRXh0MzIs
IG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQorICAgIExWYWx1ZSB6ZXJvRXh0UHRyKExWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gemVyb0V4dCh2YWx1ZSwgQjM6OkludDY0KTsgfQorICAgIExWYWx1ZSBp
bnRUb0RvdWJsZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OklUb0QsIG9yaWdpbigpLCB2YWx1ZSk7IH0KKyAgICBMVmFsdWUg
dW5zaWduZWRUb0RvdWJsZShMVmFsdWUpOworICAgIExWYWx1ZSBjYXN0VG9JbnQzMihMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUtPnR5cGUoKSA9PSBCMzo6SW50MzIg
PyB2YWx1ZSA6CisgICAgICAgICAgICBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpUcnVuYywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICB9CisgICAgTFZhbHVlIGRvdWJs
ZVRvRmxvYXQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpEb3VibGVUb0Zsb2F0LCBvcmlnaW4oKSwgdmFsdWUpOyB9CisgICAg
TFZhbHVlIGZsb2F0VG9Eb3VibGUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpGbG9hdFRvRG91YmxlLCBvcmlnaW4oKSwgdmFs
dWUpOyB9CisgICAgTFZhbHVlIGJpdENhc3QoTFZhbHVlLCBMVHlwZSk7CisgICAgTFZhbHVlIGZy
b3VuZChMVmFsdWUgZG91YmxlVmFsdWUpOworCisgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVy
LCBMVHlwZSk7CisgICAgdm9pZCBzdG9yZShMVmFsdWUsIFR5cGVkUG9pbnRlcik7CisKKyAgICBM
VmFsdWUgbG9hZDhTaWduRXh0MzIoVHlwZWRQb2ludGVyKTsKKyAgICBMVmFsdWUgbG9hZDhaZXJv
RXh0MzIoVHlwZWRQb2ludGVyKTsKKyAgICBMVmFsdWUgbG9hZDE2U2lnbkV4dDMyKFR5cGVkUG9p
bnRlcik7CisgICAgTFZhbHVlIGxvYWQxNlplcm9FeHQzMihUeXBlZFBvaW50ZXIpOworICAgIExW
YWx1ZSBsb2FkMzIoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQocG9pbnRlciwg
QjM6OkludDMyKTsgfQorICAgIExWYWx1ZSBsb2FkNjQoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsg
cmV0dXJuIGxvYWQocG9pbnRlciwgQjM6OkludDY0KTsgfQorICAgIExWYWx1ZSBsb2FkUHRyKFR5
cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIEIzOjpwb2ludGVyVHlw
ZSgpKTsgfQorICAgIExWYWx1ZSBsb2FkRmxvYXQoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0
dXJuIGxvYWQocG9pbnRlciwgQjM6OkZsb2F0KTsgfQorICAgIExWYWx1ZSBsb2FkRG91YmxlKFR5
cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIEIzOjpEb3VibGUpOyB9
CisgICAgdm9pZCBzdG9yZTMyQXM4KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIp
OworICAgIHZvaWQgc3RvcmUzMkFzMTYoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRl
cik7CisgICAgdm9pZCBzdG9yZTMyKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIp
CisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBCMzo6SW50MzIpOworICAg
ICAgICBzdG9yZSh2YWx1ZSwgcG9pbnRlcik7CisgICAgfQorICAgIHZvaWQgc3RvcmU2NChMVmFs
dWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZh
bHVlLT50eXBlKCkgPT0gQjM6OkludDY0KTsKKyAgICAgICAgc3RvcmUodmFsdWUsIHBvaW50ZXIp
OworICAgIH0KKyAgICB2b2lkIHN0b3JlUHRyKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBv
aW50ZXIpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBCMzo6cG9pbnRl
clR5cGUoKSk7CisgICAgICAgIHN0b3JlKHZhbHVlLCBwb2ludGVyKTsKKyAgICB9CisgICAgdm9p
ZCBzdG9yZUZsb2F0KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCisgICAgewor
ICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBCMzo6RmxvYXQpOworICAgICAgICBzdG9y
ZSh2YWx1ZSwgcG9pbnRlcik7CisgICAgfQorICAgIHZvaWQgc3RvcmVEb3VibGUoTFZhbHVlIHZh
bHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+
dHlwZSgpID09IEIzOjpEb3VibGUpOworICAgICAgICBzdG9yZSh2YWx1ZSwgcG9pbnRlcik7Cisg
ICAgfQorCisgICAgZW51bSBMb2FkVHlwZSB7CisgICAgICAgIExvYWQ4U2lnbkV4dDMyLAorICAg
ICAgICBMb2FkOFplcm9FeHQzMiwKKyAgICAgICAgTG9hZDE2U2lnbkV4dDMyLAorICAgICAgICBM
b2FkMTZaZXJvRXh0MzIsCisgICAgICAgIExvYWQzMiwKKyAgICAgICAgTG9hZDY0LAorICAgICAg
ICBMb2FkUHRyLAorICAgICAgICBMb2FkRmxvYXQsCisgICAgICAgIExvYWREb3VibGUKKyAgICB9
OworCisgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyLCBMb2FkVHlwZSk7CisgICAgCisgICAg
ZW51bSBTdG9yZVR5cGUgeworICAgICAgICBTdG9yZTMyQXM4LAorICAgICAgICBTdG9yZTMyQXMx
NiwKKyAgICAgICAgU3RvcmUzMiwKKyAgICAgICAgU3RvcmU2NCwKKyAgICAgICAgU3RvcmVQdHIs
CisgICAgICAgIFN0b3JlRmxvYXQsCisgICAgICAgIFN0b3JlRG91YmxlCisgICAgfTsKKworICAg
IHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIsIFN0b3JlVHlwZSk7CisKKyAgICBMVmFs
dWUgYWRkUHRyKExWYWx1ZSB2YWx1ZSwgcHRyZGlmZl90IGltbWVkaWF0ZSA9IDApCisgICAgewor
ICAgICAgICBpZiAoIWltbWVkaWF0ZSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICAg
ICAgcmV0dXJuIGFkZCh2YWx1ZSwgY29uc3RJbnRQdHIoaW1tZWRpYXRlKSk7CisgICAgfQorCisg
ICAgLy8gQ29uc3RydWN0IGFuIGFkZHJlc3MgYnkgb2Zmc2V0dGluZyBiYXNlIGJ5IHRoZSByZXF1
ZXN0ZWQgYW1vdW50IGFuZCBhc2NyaWJpbmcKKyAgICAvLyB0aGUgcmVxdWVzdGVkIGFic3RyYWN0
IGhlYXAgdG8gaXQuCisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MoY29uc3QgQWJzdHJhY3RIZWFw
JiBoZWFwLCBMVmFsdWUgYmFzZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgeworICAgICAg
ICByZXR1cm4gVHlwZWRQb2ludGVyKGhlYXAsIGFkZFB0cihiYXNlLCBvZmZzZXQpKTsKKyAgICB9
CisgICAgLy8gQ29uc3RydWN0IGFuIGFkZHJlc3MgYnkgb2Zmc2V0dGluZyBiYXNlIGJ5IHRoZSBh
bW91bnQgc3BlY2lmaWVkIGJ5IHRoZSBmaWVsZCwKKyAgICAvLyBhbmQgb3B0aW9uYWxseSBhbiBh
ZGRpdGlvbmFsIGFtb3VudCAodXNlIHRoaXMgd2l0aCBjYXJlKSwgYW5kIHRoZW4gY3JlYXRpbmcK
KyAgICAvLyBhIFR5cGVkUG9pbnRlciB3aXRoIHRoZSBnaXZlbiBmaWVsZCBhcyB0aGUgaGVhcC4K
KyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyhMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVs
ZCYgZmllbGQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
ZHJlc3MoZmllbGQsIGJhc2UsIG9mZnNldCArIGZpZWxkLm9mZnNldCgpKTsKKyAgICB9CisKKyAg
ICBMVmFsdWUgYmFzZUluZGV4KExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIFNjYWxlLCBwdHJk
aWZmX3Qgb2Zmc2V0ID0gMCk7CisKKyAgICBUeXBlZFBvaW50ZXIgYmFzZUluZGV4KGNvbnN0IEFi
c3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIGJhc2UsIExWYWx1ZSBpbmRleCwgU2NhbGUgc2NhbGUs
IHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVkUG9pbnRl
cihoZWFwLCBiYXNlSW5kZXgoYmFzZSwgaW5kZXgsIHNjYWxlLCBvZmZzZXQpKTsKKyAgICB9Cisg
ICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFs
dWUgYmFzZSwgTFZhbHVlIGluZGV4LCBKU1ZhbHVlIGluZGV4QXNDb25zdGFudCA9IEpTVmFsdWUo
KSwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICByZXR1cm4gaGVhcC5iYXNl
SW5kZXgoKnRoaXMsIGJhc2UsIGluZGV4LCBpbmRleEFzQ29uc3RhbnQsIG9mZnNldCk7CisgICAg
fQorCisgICAgVHlwZWRQb2ludGVyIGFic29sdXRlKHZvaWQqIGFkZHJlc3MpCisgICAgeworICAg
ICAgICByZXR1cm4gVHlwZWRQb2ludGVyKG1faGVhcHMtPmFic29sdXRlW2FkZHJlc3NdLCBjb25z
dEludFB0cihhZGRyZXNzKSk7CisgICAgfQorCisgICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKExW
YWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDhTaWdu
RXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMy
KExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDha
ZXJvRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQxNlNpZ25F
eHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxv
YWQxNlNpZ25FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZDE2
WmVyb0V4dDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1
cm4gbG9hZDE2WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBs
b2FkMzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBs
b2FkMzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQ2NChMVmFsdWUg
YmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ2NChhZGRyZXNz
KGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZFB0cihMVmFsdWUgYmFzZSwgY29uc3Qg
QWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWRQdHIoYWRkcmVzcyhiYXNlLCBmaWVs
ZCkpOyB9CisgICAgTFZhbHVlIGxvYWREb3VibGUoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0
RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkRG91YmxlKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsg
fQorICAgIHZvaWQgc3RvcmUzMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0
cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZTMyKHZhbHVlLCBhZGRyZXNzKGJhc2UsIGZpZWxkKSk7
IH0KKyAgICB2b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJz
dHJhY3RGaWVsZCYgZmllbGQpIHsgc3RvcmU2NCh2YWx1ZSwgYWRkcmVzcyhiYXNlLCBmaWVsZCkp
OyB9CisgICAgdm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNlLCBjb25zdCBB
YnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZVB0cih2YWx1ZSwgYWRkcmVzcyhiYXNlLCBmaWVs
ZCkpOyB9CisgICAgdm9pZCBzdG9yZURvdWJsZShMVmFsdWUgdmFsdWUsIExWYWx1ZSBiYXNlLCBj
b25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyBzdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzcyhi
YXNlLCBmaWVsZCkpOyB9CisKKyAgICAvLyBGSVhNRTogRXhwbG9yZSBhZGRpbmcgc3VwcG9ydCBm
b3IgdmFsdWUgcmFuZ2UgY29uc3RyYWludHMgdG8gQjMuIE1heWJlIGl0IGNvdWxkIGJlIGFzIHNp
bXBsZSBhcyBoYXZpbmcKKyAgICAvLyBhIGxvYWQgaW5zdHJ1Y3Rpb24gdGhhdCBndWFyYW50ZWVz
IHRoYXQgaXRzIHJlc3VsdCBpcyBub24tbmVnYXRpdmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTQ1OAorICAgIHZvaWQgYXNjcmliZVJhbmdlKExW
YWx1ZSwgY29uc3QgVmFsdWVSYW5nZSYpIHsgfQorICAgIExWYWx1ZSBub25OZWdhdGl2ZTMyKExW
YWx1ZSBsb2FkSW5zdHJ1Y3Rpb24pIHsgcmV0dXJuIGxvYWRJbnN0cnVjdGlvbjsgfQorICAgIExW
YWx1ZSBsb2FkMzJOb25OZWdhdGl2ZShUeXBlZFBvaW50ZXIgcG9pbnRlcikgeyByZXR1cm4gbG9h
ZDMyKHBvaW50ZXIpOyB9CisgICAgTFZhbHVlIGxvYWQzMk5vbk5lZ2F0aXZlKExWYWx1ZSBiYXNl
LCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDMyKGJhc2UsIGZpZWxk
KTsgfQorCisgICAgTFZhbHVlIGVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIG5vdEVxdWFsKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGFi
b3ZlKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFib3ZlLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9
CisgICAgTFZhbHVlIGFib3ZlT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBYm92ZUVxdWFs
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGJlbG93KExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkJlbG93LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGJl
bG93T3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCZWxvd0VxdWFsLCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGdyZWF0ZXJUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGdyZWF0
ZXJUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpHcmVhdGVyRXF1YWwsIG9yaWdpbigp
LCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgbGVzc1RoYW4oTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6TGVzc1RoYW4sIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgbGVzc1Ro
YW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NFcXVhbCwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsgfQorCisgICAgTFZhbHVlIGRvdWJsZUVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRvdWJsZUVxdWFs
T3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWxPclVub3JkZXJlZCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBkb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9
CisgICAgTFZhbHVlIGRvdWJsZUxlc3NUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsg
cmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NUaGFu
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRvdWJsZUxlc3NUaGFuT3JF
cXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7IH0KKyAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW4oTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6
R3JlYXRlclRoYW4sIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgZG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0ZXJFcXVhbCwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBkb3VibGVOb3RFcXVhbEFuZE9yZGVy
ZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbG9naWNhbE5vdChkb3VibGVF
cXVhbE9yVW5vcmRlcmVkKGxlZnQsIHJpZ2h0KSk7IH0KKyAgICBMVmFsdWUgZG91YmxlTGVzc1Ro
YW5PclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsb2dpY2Fs
Tm90KGRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCkpOyB9CisgICAgTFZhbHVl
IGRvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQpIHsgcmV0dXJuIGxvZ2ljYWxOb3QoZG91YmxlR3JlYXRlclRoYW4obGVmdCwgcmlnaHQpKTsg
fQorICAgIExWYWx1ZSBkb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxvZ2ljYWxOb3QoZG91YmxlTGVzc1RoYW5PckVxdWFsKGxl
ZnQsIHJpZ2h0KSk7IH0KKyAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbG9naWNhbE5vdChkb3Vi
bGVMZXNzVGhhbihsZWZ0LCByaWdodCkpOyB9CisKKyAgICBMVmFsdWUgaXNaZXJvMzIoTFZhbHVl
IHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOyB9CisgICAgTFZhbHVlIG5vdFpl
cm8zMihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7IH0KKyAg
ICBMVmFsdWUgaXNaZXJvNjQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFpl
cm8pOyB9CisgICAgTFZhbHVlIG5vdFplcm82NChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fYmxv
Y2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok5vdEVxdWFsLCBvcmlnaW4oKSwg
dmFsdWUsIGludDY0WmVybyk7IH0KKyAgICBMVmFsdWUgaXNOdWxsKExWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gaXNaZXJvNjQodmFsdWUpOyB9CisgICAgTFZhbHVlIG5vdE51bGwoTFZhbHVlIHZhbHVl
KSB7IHJldHVybiBub3RaZXJvNjQodmFsdWUpOyB9CisKKyAgICBMVmFsdWUgdGVzdElzWmVybzMy
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIGlzWmVybzMyKGJpdEFuZCh2YWx1
ZSwgbWFzaykpOyB9CisgICAgTFZhbHVlIHRlc3ROb25aZXJvMzIoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgbWFzaykgeyByZXR1cm4gbm90WmVybzMyKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CisgICAg
TFZhbHVlIHRlc3RJc1plcm82NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBp
c1plcm82NChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQorICAgIExWYWx1ZSB0ZXN0Tm9uWmVybzY0
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdFplcm82NChiaXRBbmQodmFs
dWUsIG1hc2spKTsgfQorICAgIExWYWx1ZSB0ZXN0SXNaZXJvUHRyKExWYWx1ZSB2YWx1ZSwgTFZh
bHVlIG1hc2spIHsgcmV0dXJuIGlzTnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQorICAgIExW
YWx1ZSB0ZXN0Tm9uWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBu
b3ROdWxsKGJpdEFuZCh2YWx1ZSwgbWFzaykpOyB9CisKKyAgICBMVmFsdWUgc2VsZWN0KExWYWx1
ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNlbGVjdCwgb3JpZ2luKCksIHZhbHVl
LCB0YWtlbiwgbm90VGFrZW4pOyB9CisgICAgTFZhbHVlIGV4dHJhY3RWYWx1ZShMVmFsdWUgYWdn
VmFsLCB1bnNpZ25lZCBpbmRleCkgeyBDUkFTSCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWZWN0b3JUeXBlPgorICAgIExWYWx1ZSBjYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlv
biwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQorICAgIHsKKyAgICAgICAgQjM6OkNDYWxsVmFs
dWUqIHJlc3VsdCA9IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q0NhbGxWYWx1ZT4obV9wcm9jLCB0
eXBlLCBvcmlnaW4oKSwgZnVuY3Rpb24pOworICAgICAgICByZXN1bHQtPmNoaWxkcmVuKCkuYXBw
ZW5kVmVjdG9yKHZlY3Rvcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIExW
YWx1ZSBjYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlvbikgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpDQ2FsbFZhbHVlPihtX3Byb2MsIHR5cGUsIG9yaWdpbigpLCBmdW5jdGlv
bik7IH0KKyAgICBMVmFsdWUgY2FsbChMVHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1
ZSBhcmcxKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNDYWxsVmFsdWU+KG1fcHJv
YywgdHlwZSwgb3JpZ2luKCksIGZ1bmN0aW9uLCBhcmcxKTsgfQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIGNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1bmN0aW9u
LCBMVmFsdWUgYXJnMSwgQXJncy4uLiBhcmdzKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OkNDYWxsVmFsdWU+KG1fcHJvYywgdHlwZSwgb3JpZ2luKCksIGZ1bmN0aW9uLCBhcmcxLCBh
cmdzLi4uKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgorICAgIExW
YWx1ZSBvcGVyYXRpb24oRnVuY3Rpb25UeXBlIGZ1bmN0aW9uKSB7IHJldHVybiBjb25zdEludFB0
cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSk7IH0KKworICAgIHZvaWQganVtcChMQmFz
aWNCbG9jayBkZXN0aW5hdGlvbikgeyBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnRyb2xWYWx1
ZT4obV9wcm9jLCBCMzo6SnVtcCwgb3JpZ2luKCksIEIzOjpGcmVxdWVudGVkQmxvY2soZGVzdGlu
YXRpb24pKTsgfQorICAgIHZvaWQgYnJhbmNoKExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2Nr
IHRha2VuLCBXZWlnaHQgdGFrZW5XZWlnaHQsIExCYXNpY0Jsb2NrIG5vdFRha2VuLCBXZWlnaHQg
bm90VGFrZW5XZWlnaHQpOworICAgIHZvaWQgYnJhbmNoKExWYWx1ZSBjb25kaXRpb24sIFdlaWdo
dGVkVGFyZ2V0IHRha2VuLCBXZWlnaHRlZFRhcmdldCBub3RUYWtlbikKKyAgICB7CisgICAgICAg
IGJyYW5jaChjb25kaXRpb24sIHRha2VuLnRhcmdldCgpLCB0YWtlbi53ZWlnaHQoKSwgbm90VGFr
ZW4udGFyZ2V0KCksIG5vdFRha2VuLndlaWdodCgpKTsKKyAgICB9CisKKyAgICAvLyBCcmFuY2hl
cyB0byBhbiBhbHJlYWR5LWNyZWF0ZWQgaGFuZGxlciBpZiB0cnVlLCAiZmFsbHMgdGhyb3VnaCIg
aWYgZmFsc2UuIEZhbGwtdGhyb3VnaCBpcworICAgIC8vIHNpbXVsYXRlZCBieSBjcmVhdGluZyBh
IGNvbnRpbnVhdGlvbiBmb3IgeW91LgorICAgIHZvaWQgY2hlY2soTFZhbHVlIGNvbmRpdGlvbiwg
V2VpZ2h0ZWRUYXJnZXQgdGFrZW4sIFdlaWdodCBub3RUYWtlbldlaWdodCk7CisgICAgCisgICAg
Ly8gU2FtZSBhcyBjaGVjaygpLCBidXQgdXNlcyBXZWlnaHQ6OmludmVyc2UoKSB0byBjb21wdXRl
IHRoZSBub3RUYWtlbldlaWdodC4KKyAgICB2b2lkIGNoZWNrKExWYWx1ZSBjb25kaXRpb24sIFdl
aWdodGVkVGFyZ2V0IHRha2VuKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JU
eXBlPgorICAgIHZvaWQgc3dpdGNoSW5zdHJ1Y3Rpb24oTFZhbHVlIHZhbHVlLCBjb25zdCBWZWN0
b3JUeXBlJiBjYXNlcywgTEJhc2ljQmxvY2sgZmFsbFRocm91Z2gsIFdlaWdodCBmYWxsVGhyb3Vn
aFdlaWdodCkKKyAgICB7CisgICAgICAgIEIzOjpTd2l0Y2hWYWx1ZSogc3dpdGNoVmFsdWUgPSBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OlN3aXRjaFZhbHVlPigKKyAgICAgICAgICAgIG1fcHJvYywg
b3JpZ2luKCksIHZhbHVlLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGZhbGxUaHJvdWdoKSk7CisgICAg
ICAgIGZvciAoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSA6IGNhc2VzKSB7CisgICAgICAg
ICAgICBpbnQ2NF90IHZhbHVlID0gc3dpdGNoQ2FzZS52YWx1ZSgpLT5hc0ludCgpOworICAgICAg
ICAgICAgQjM6OkZyZXF1ZW50ZWRCbG9jayB0YXJnZXQoc3dpdGNoQ2FzZS50YXJnZXQoKSwgc3dp
dGNoQ2FzZS53ZWlnaHQoKS5mcmVxdWVuY3lDbGFzcygpKTsKKyAgICAgICAgICAgIHN3aXRjaFZh
bHVlLT5hcHBlbmRDYXNlKEIzOjpTd2l0Y2hDYXNlKHZhbHVlLCB0YXJnZXQpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgcmV0KExWYWx1ZSB2YWx1ZSkgeyBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OkNvbnRyb2xWYWx1ZT4obV9wcm9jLCBCMzo6UmV0dXJuLCBvcmlnaW4oKSwgdmFsdWUp
OyB9CisKKyAgICB2b2lkIHVucmVhY2hhYmxlKCkgeyBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNv
bnRyb2xWYWx1ZT4obV9wcm9jLCBCMzo6T29wcywgb3JpZ2luKCkpOyB9CisKKyAgICBCMzo6Q2hl
Y2tWYWx1ZSogc3BlY3VsYXRlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNoZWNrVmFsdWU+KG1fcHJvYywgQjM6OkNoZWNrLCBvcmln
aW4oKSwgdmFsdWUpOworICAgIH0KKworICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGVBZGQo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OkNoZWNrVmFsdWU+KG1fcHJvYywgQjM6OkNoZWNrQWRkLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOworICAgIH0KKworICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxhdGVT
dWIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8QjM6OkNoZWNrVmFsdWU+KG1fcHJvYywgQjM6OkNoZWNrU3ViLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOworICAgIH0KKworICAgIEIzOjpDaGVja1ZhbHVlKiBzcGVjdWxh
dGVNdWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNoZWNrVmFsdWU+KG1fcHJvYywgQjM6OkNoZWNrTXVsLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOworICAgIH0KKworICAgIEIzOjpQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQoTFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCB0eXBlLCBvcmlnaW4oKSk7Cisg
ICAgfQorCisgICAgdm9pZCB0cmFwKCkKKyAgICB7CisgICAgICAgIG1fYmxvY2stPmFwcGVuZE5l
dzxCMzo6Q29udHJvbFZhbHVlPihtX3Byb2MsIEIzOjpPb3BzLCBvcmlnaW4oKSk7CisgICAgfQor
CisgICAgVmFsdWVGcm9tQmxvY2sgYW5jaG9yKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEIzOjpVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlVwc2ls
b25WYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOworICAgICAgICByZXR1cm4gVmFsdWVG
cm9tQmxvY2sodXBzaWxvbiwgbV9ibG9jayk7CisgICAgfQorCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisjcHJhZ21hIG1hcmsgLSBTdGF0ZXMKKyNlbmRpZgorICAgIEIzOjpQcm9jZWR1cmUmIG1fcHJv
YzsKKworICAgIERGRzo6Tm9kZSogbV9vcmlnaW4geyBudWxscHRyIH07CisgICAgTEJhc2ljQmxv
Y2sgbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICBMQmFzaWNCbG9jayBtX25leHRCbG9jayB7IG51
bGxwdHIgfTsKKworICAgIEFic3RyYWN0SGVhcFJlcG9zaXRvcnkqIG1faGVhcHM7CisKKyAgICBk
b3VibGUgbV9mcmVxdWVuY3kgeyAxIH07CisKK3ByaXZhdGU6CisgICAgT3JkZXJNYWtlcjxMQmFz
aWNCbG9jaz4gbV9ibG9ja09yZGVyOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSBjYWxsV2l0aG91dFNpZGVFZmZlY3Rz
KEIzOjpUeXBlIHR5cGUsIEZ1bmN0aW9uIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgQXJncy4uLiBh
cmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q0NhbGxW
YWx1ZT4obV9wcm9jLCB0eXBlLCBvcmlnaW4oKSwgQjM6OkVmZmVjdHM6Om5vbmUoKSwKKyAgICAg
ICAgICAgIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgYml0d2lzZV9jYXN0PHZvaWQqPihmdW5jdGlvbikpLAorICAgICAgICAgICAgYXJnMSwg
YXJncy4uLik7CisgICAgfQorCit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+Citp
bmxpbmUgTFZhbHVlIE91dHB1dDo6cGhpKExUeXBlIHR5cGUsIFZhbHVlRnJvbUJsb2NrIHZhbHVl
LCBQYXJhbXMuLi4gdGhlUmVzdCkKK3sKKyAgICBMVmFsdWUgcGhpTm9kZSA9IHBoaSh0eXBlKTsK
KyAgICBhZGRJbmNvbWluZ1RvUGhpKHBoaU5vZGUsIHZhbHVlLCB0aGVSZXN0Li4uKTsKKyAgICBy
ZXR1cm4gcGhpTm9kZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGlu
ZSBMVmFsdWUgT3V0cHV0OjpwaGkoTFR5cGUgdHlwZSwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
KQoreworICAgIExWYWx1ZSBwaGlOb2RlID0gcGhpKHR5cGUpOworICAgIGZvciAoY29uc3QgVmFs
dWVGcm9tQmxvY2smIHZhbHVlRnJvbUJsb2NrIDogdmVjdG9yKQorICAgICAgICBhZGRJbmNvbWlu
Z1RvUGhpKHBoaU5vZGUsIHZhbHVlRnJvbUJsb2NrKTsKKyAgICByZXR1cm4gcGhpTm9kZTsKK30K
KworaW5saW5lIHZvaWQgT3V0cHV0OjphZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGksIFZhbHVl
RnJvbUJsb2NrIHZhbHVlKQoreworICAgIHZhbHVlLnZhbHVlKCktPmFzPEIzOjpVcHNpbG9uVmFs
dWU+KCktPnNldFBoaShwaGkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+Citp
bmxpbmUgdm9pZCBPdXRwdXQ6OmFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9t
QmxvY2sgdmFsdWUsIFBhcmFtcy4uLiB0aGVSZXN0KQoreworICAgIGFkZEluY29taW5nVG9QaGko
cGhpLCB2YWx1ZSk7CisgICAgYWRkSW5jb21pbmdUb1BoaShwaGksIHRoZVJlc3QuLi4pOworfQor
CitpbmxpbmUgTFZhbHVlIE91dHB1dDo6Yml0Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUp
Cit7CisgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IGludDY0IHx8IHR5cGUgPT0gZG91
YmxlVHlwZSk7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OkJpdHdpc2VDYXN0LCBvcmlnaW4oKSwgdmFsdWUpOworfQorCitpbmxpbmUgTFZhbHVl
IE91dHB1dDo6ZnJvdW5kKExWYWx1ZSBkb3VibGVWYWx1ZSkKK3sKKyAgICByZXR1cm4gZmxvYXRU
b0RvdWJsZShkb3VibGVUb0Zsb2F0KGRvdWJsZVZhbHVlKSk7Cit9CisKKyNpZiBDT01QSUxFUihH
Q0NfT1JfQ0xBTkcpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorI2VuZGlmIC8vIENPTVBJ
TEVSKEdDQ19PUl9DTEFORykKKworI2RlZmluZSBGVExfTkVXX0JMT0NLKG91dHB1dCwgbmFtZUFy
Z3VtZW50cykgXAorICAgIChMSUtFTFkoIXZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgXAor
ICAgID8gKG91dHB1dCkubmV3QmxvY2soKSBcCisgICAgOiAob3V0cHV0KS5uZXdCbG9jaygodG9D
U3RyaW5nIG5hbWVBcmd1bWVudHMpLmRhdGEoKSkpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQjNPdXRwdXRf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271605</attachid>
            <date>2016-02-17 16:37:23 -0800</date>
            <delta_ts>2016-02-17 16:37:23 -0800</delta_ts>
            <desc>the pqtch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100262</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE2LTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVuYW1lIEZUTEIzQmxhaCB0byBGVExCbGFoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzNjUKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJl
eSBHYXJlbiwgQmVuamFtaW4gUG91bGFpbiwgYW5kIEF3ZXNvbWUgS2xpbmcuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGZ0bC9GVExCM0NvbXBpbGUuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGZ0bC9GVExCM091dHB1dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZU
TEIzT3V0cHV0Lmg6IFJlbW92ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29tcGlsZS5jcHAuCisgICAg
ICAgICogZnRsL0ZUTE91dHB1dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNPdXRwdXQuY3BwLgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDogQ29waWVk
IGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5oLgorCiAyMDE2LTAy
LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIExM
Vk0gZGVwZW5kZW5jaWVzIGZyb20gV2ViS2l0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxOTY3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwMDAsMTAgKzEwMDAsOSBAQCBpZiAoRU5B
QkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExBYnN0cmFjdEhlYXAuY3BwCiAgICAgICAgIGZ0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcAogICAgICAgICBmdGwvRlRMQXZhaWxhYmxl
UmVjb3ZlcnkuY3BwCi0gICAgICAgIGZ0bC9GVExCM0NvbXBpbGUuY3BwCi0gICAgICAgIGZ0bC9G
VExCM091dHB1dC5jcHAKICAgICAgICAgZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKICAgICAgICAg
ZnRsL0ZUTENvbW1vblZhbHVlcy5jcHAKKyAgICAgICAgZnRsL0ZUTENvbXBpbGUuY3BwCiAgICAg
ICAgIGZ0bC9GVExFeGNlcHRpb25UYXJnZXQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1l
bnQuY3BwCiAgICAgICAgIGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcApAQCAtMTAy
Myw2ICsxMDIyLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAgICAgICBmdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAogICAgICAgICBmdGwvRlRMT1NSRXhpdEhhbmRsZS5jcHAKICAgICAgICAg
ZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCisgICAgICAgIGZ0bC9GVExPdXRwdXQuY3BwCiAgICAgICAg
IGZ0bC9GVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmNwcAogICAgICAgICBmdGwvRlRMUmVj
b3ZlcnlPcGNvZGUuY3BwCiAgICAgICAgIGZ0bC9GVExTYXZlUmVzdG9yZS5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTY3MjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTQwLDcgKzU0MCw3IEBACiAJCTBGOTc4QjNCMUFBRUE3MUQwMDdDNzM2
OSAvKiBDb25zdGFudE1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NzhCM0ExQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAg
Ki87IH07CiAJCTBGOTgyMDYwMTZCRkUzODEwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5ODIw
NUQxNkJGRTM3RjAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi87IH07CiAJCTBG
OTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTgyMDVFMTZCRkUzN0YwMDI0
MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjlCMURCNDFDMEU0MkE1MDBFNUJGRDIgLyogRlRMQjNP
dXRwdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTEIzT3V0cHV0LmNwcCAqLzsgfTsKKwkJMEY5
QjFEQjQxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlCMURCMzFDMEU0MkE1MDBFNUJGRDIgLyog
RlRMT3V0cHV0LmNwcCAqLzsgfTsKIAkJMEY5QjFEQjcxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9T
UkV4aXRIYW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5QjFEQjUxQzBFNDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuY3BwICov
OyB9OwogCQkwRjlCMURCODFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5QjFEQjYxQzBF
NDJCRDAwRTVCRkQyIC8qIEZUTE9TUkV4aXRIYW5kbGUuaCAqLzsgfTsKIAkJMEY5RDMzNzAxNjVE
QkI5MDAwNUFEMzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM2RTE2NURCQjhEMDA1QUQzODcgLyogRGlzYXNz
ZW1ibGVyLmNwcCAqLzsgfTsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCQkwRkIzODc4RTFCRkJDNDRE
MDBFM0FCMUUgLyogQWlyQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMzg3OEIxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpckJsb2Nr
V29ya2xpc3QuaCAqLzsgfTsKIAkJMEZCMzg3OEYxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGlt
aXplQmxvY2tPcmRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkIzODc4QzFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09yZGVy
LmNwcCAqLzsgfTsKIAkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxv
Y2tPcmRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCMzg3OEQxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oICovOyB9
OwotCQkwRkIzODc5MjFCRkQzMUExMDBFM0FCMUUgLyogRlRMQjNDb21waWxlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjM4NzkxMUJGRDMxQTEw
MEUzQUIxRSAvKiBGVExCM0NvbXBpbGUuY3BwICovOyB9OworCQkwRkIzODc5MjFCRkQzMUExMDBF
M0FCMUUgLyogRlRMQ29tcGlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQ29tcGlsZS5jcHAg
Ki87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDM4QTIxOTI3
MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CiAJCTBGQjRGQjczMUJDODQz
MTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzAxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aC5jcHAgKi87IH07CiAJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExM
YXp5U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLzsgfTsK
QEAgLTExMTYsNyArMTExNiw3IEBACiAJCTI2NzE4QkE0MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJ
dGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNjcxOEJBMjFCRTk5Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0
ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwICovOyB9OwogCQkyNjcxOEJBNTFCRTk5Rjc4MDA1MjAx
N0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2NzE4QkEzMUJFOTlGNzgwMDUyMDE3QiAvKiBB
aXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oICovOyB9OwogCQkyNjg0RDQzODFDMDAxNjFD
MDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI2ODRENDM3MUMwMDE2MUMwMDgxRDY2MyAvKiBBaXJMaXZlbmVzcy5o
ICovOyB9OwotCQkyNjlENjM2RTFCRkJFNUQxMDAxMDFCMUQgLyogRlRMQjNPdXRwdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2OUQ2MzZEMUJGQkU1
RDAwMDEwMUIxRCAvKiBGVExCM091dHB1dC5oICovOyB9OworCQkyNjlENjM2RTFCRkJFNUQxMDAx
MDFCMUQgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMT3V0cHV0LmggKi87IH07
CiAJCTJBMDVBQkQ1MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEwNUFC
RDMxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgKi87IH07
CiAJCTJBMDVBQkQ2MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBMDVBQkQ0
MTk2MURGMjQwMDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLzsgfTsKIAkJ
MkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTExMTI0MzE5MkZDRTc5
MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmNwcCAqLzsgfTsKQEAgLTI2NzksNyArMjY3
OSw3IEBACiAJCTBGOTc4QjNBMUFBRUE3MUQwMDdDNzM2OSAvKiBDb25zdGFudE1vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRNb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5ODIwNUQxNkJGRTM3RjAwMjQwRDAyIC8qIFBy
ZWNpc2VKdW1wVGFyZ2V0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcmVjaXNlSnVtcFRhcmdldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk4MjA1RTE2QkZFMzdGMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZWNpc2VKdW1wVGFyZ2V0cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjlCMURCMzFDMEU0MkE1MDBFNUJGRDIgLyogRlRMQjNPdXRw
dXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQjNPdXRwdXQu
Y3BwOyBwYXRoID0gZnRsL0ZUTEIzT3V0cHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTE91dHB1dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPdXRwdXQuY3BwOyBwYXRoID0gZnRsL0ZU
TE91dHB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUIxREI1MUMwRTQy
QkQwMEU1QkZEMiAvKiBGVExPU1JFeGl0SGFuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTE9TUkV4aXRIYW5kbGUuY3BwOyBwYXRoID0gZnRsL0ZUTE9TUkV4
aXRIYW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlCMURCNjFDMEU0
MkJEMDBFNUJGRDIgLyogRlRMT1NSRXhpdEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExPU1JFeGl0SGFuZGxlLmg7IHBhdGggPSBmdGwvRlRMT1NSRXhpdEhhbmRs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM2RTE2NURCQjhEMDA1QUQz
ODcgLyogRGlzYXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERpc2Fzc2VtYmxlci5jcHA7IHBhdGggPSBkaXNhc3NlbWJsZXIvRGlzYXNzZW1ibGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3MjMsNyArMjcyMyw3IEBACiAJCTBG
QjM4NzhCMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL2Fpci9B
aXJCbG9ja1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjM4NzhD
MUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkIzODc4RDFCRkJDNDREMDBFM0FCMUUgLyogQWlyT3B0aW1pemVCbG9ja09y
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpck9wdGltaXplQmxvY2tP
cmRlci5oOyBwYXRoID0gYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkIzODc5MTFCRkQzMUExMDBFM0FCMUUgLyogRlRMQjNDb21w
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEIzQ29tcGls
ZS5jcHA7IHBhdGggPSBmdGwvRlRMQjNDb21waWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZCMzg3OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMQ29tcGlsZS5jcHA7IHBhdGggPSBm
dGwvRlRMQ29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjQzOEEy
MTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRJRC5oOyBwYXRoID0gZGZn
L0RGR01pbmlmaWVkSUQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNEI1MTkx
NkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyMjUsNyArMzIyNSw3IEBACiAJCTI2NzE4QkEy
MUJFOTlGNzgwMDUyMDE3QiAvKiBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZy5jcHA7IHBhdGggPSBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNjcxOEJBMzFCRTk5Rjc4MDA1MjAx
N0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaDsgcGF0aCA9IGIz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyNjlENjM2RDFC
RkJFNUQwMDAxMDFCMUQgLyogRlRMQjNPdXRwdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMQjNPdXRwdXQuaDsgcGF0aCA9IGZ0bC9GVExCM091dHB1dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMT3V0
cHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE91dHB1dC5oOyBwYXRo
ID0gZnRsL0ZUTE91dHB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTA1QUJE
MzE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMDVBQkQ0MTk2MURGMjQwMDM0MTc1
MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJBMTExMjQzMTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3VzdG9tR2V0dGVyU2V0
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1MjAsMTMgKzQ1MjAsMTEg
QEAKIAkJCQkwRkVBMEExQTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oICovLAogCQkJCTBGNDg1MzIzMTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVS
ZWNvdmVyeS5jcHAgKi8sCiAJCQkJMEY0ODUzMjQxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWls
YWJsZVJlY292ZXJ5LmggKi8sCi0JCQkJMEZCMzg3OTExQkZEMzFBMTAwRTNBQjFFIC8qIEZUTEIz
Q29tcGlsZS5jcHAgKi8sCi0JCQkJMEY5QjFEQjMxQzBFNDJBNTAwRTVCRkQyIC8qIEZUTEIzT3V0
cHV0LmNwcCAqLywKLQkJCQkyNjlENjM2RDFCRkJFNUQwMDAxMDFCMUQgLyogRlRMQjNPdXRwdXQu
aCAqLywKIAkJCQkwRkVBMDlGRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmNw
cCAqLywKIAkJCQkwRkVBMDlGRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmgg
Ki8sCiAJCQkJMEZFQTBBMjUxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5jcHAg
Ki8sCiAJCQkJMEZFQTBBMjExNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5oICov
LAorCQkJCTBGQjM4NzkxMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExDb21waWxlLmNwcCAqLywKIAkJ
CQkwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICovLAogCQkJCTBGOUQ0
QzBBMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuY3BwICovLAogCQkJCTBG
OUQ0QzBCMUMzRTFDMTEwMDZDRDk4NCAvKiBGVExFeGNlcHRpb25UYXJnZXQuaCAqLywKQEAgLTQ1
NzAsNiArNDU2OCw4IEBACiAJCQkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4
aXRDb21waWxlci5oICovLAogCQkJCTBGOUIxREI1MUMwRTQyQkQwMEU1QkZEMiAvKiBGVExPU1JF
eGl0SGFuZGxlLmNwcCAqLywKIAkJCQkwRjlCMURCNjFDMEU0MkJEMDBFNUJGRDIgLyogRlRMT1NS
RXhpdEhhbmRsZS5oICovLAorCQkJCTBGOUIxREIzMUMwRTQyQTUwMEU1QkZEMiAvKiBGVExPdXRw
dXQuY3BwICovLAorCQkJCTI2OUQ2MzZEMUJGQkU1RDAwMDEwMUIxRCAvKiBGVExPdXRwdXQuaCAq
LywKIAkJCQkwRjlENEMwRTFDM0UyQzc0MDA2Q0Q5ODQgLyogRlRMUGF0Y2hwb2ludEV4Y2VwdGlv
bkhhbmRsZS5jcHAgKi8sCiAJCQkJMEY5RDRDMEYxQzNFMkM3NDAwNkNEOTg0IC8qIEZUTFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGUuaCAqLywKIAkJCQkwRjQ4NTMyNTE4N0RGREVDMDA4M0I2ODcg
LyogRlRMUmVjb3ZlcnlPcGNvZGUuY3BwICovLApAQCAtNjk3NCw3ICs2OTc0LDcgQEAKIAkJCQkw
RjQ1NzA0MTFCRTU4NENBMDA2MkE2MjkgLyogQjNUaW1pbmdTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYzMzhFMUUxQkYyODZFQTAwMTNDODhGIC8qIEIzTG93ZXJNYWNyb3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFk
ZXJzICovLAotCQkJCTI2OUQ2MzZFMUJGQkU1RDEwMDEwMUIxRCAvKiBGVExCM091dHB1dC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMjY5RDYzNkUxQkZCRTVEMTAwMTAxQjFEIC8qIEZUTE91dHB1dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyog
QjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTg4MTgsNyArODgxOCw3IEBACiAJ
CQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDhBMzJCMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGOUIxREI0MUMwRTQy
QTUwMEU1QkZEMiAvKiBGVExCM091dHB1dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjlCMURC
NDFDMEU0MkE1MDBFNUJGRDIgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAvKiBE
RkdVbmlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA0Niw3ICs5MDQ2LDcg
QEAKIAkJCQlFM0QyMzlDODFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzE4Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3
QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQjM4
NzkyMUJGRDMxQTEwMEUzQUIxRSAvKiBGVExCM0NvbXBpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZCMzg3OTIxQkZEMzFBMTAwRTNBQjFFIC8qIEZUTENvbXBpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90
QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4
IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcAkocmV2aXNpb24gMTk2NzI5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiRlRM
QWJicmV2aWF0ZWRUeXBlcy5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aCIKLSNpbmNsdWRlICJGVExCM091dHB1dC5oIgorI2luY2x1ZGUgIkZUTE91dHB1dC5oIgogI2lu
Y2x1ZGUgIkZUTFR5cGVkUG9pbnRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJPcHRpb25zLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzQ29t
cGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM0Nv
bXBpbGUuY3BwCShyZXZpc2lvbiAxOTY3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEIzQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMQ29tcGlsZS5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQp
Ci0KLSNpbmNsdWRlICJBaXJDb2RlLmgiCi0jaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgotI2luY2x1
ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCi0jaW5j
bHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
LSNpbmNsdWRlICJERkdDb21tb24uaCIKLSNpbmNsdWRlICJERkdHcmFwaFNhZmVwb2ludC5oIgot
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJEYXRhVmlldy5oIgotI2luY2x1
ZGUgIkRpc2Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKLSNpbmNsdWRlICJG
VExUaHVua3MuaCIKLSNpbmNsdWRlICJKSVRTdWJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCi0jaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKLSNpbmNsdWRlICJTY3Jh
dGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewotCi11c2luZyBuYW1lc3BhY2UgREZHOwotCi12b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBT
YWZlcG9pbnQ6OlJlc3VsdCYgc2FmZXBvaW50UmVzdWx0KQotewotICAgIEdyYXBoJiBncmFwaCA9
IHN0YXRlLmdyYXBoOwotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGgubV9jb2RlQmxv
Y2s7Ci0gICAgVk0mIHZtID0gZ3JhcGgubV92bTsKLQotICAgIHsKLSAgICAgICAgR3JhcGhTYWZl
cG9pbnQgc2FmZXBvaW50KHN0YXRlLmdyYXBoLCBzYWZlcG9pbnRSZXN1bHQpOwotCi0gICAgICAg
IEIzOjpwcmVwYXJlRm9yR2VuZXJhdGlvbigqc3RhdGUucHJvYyk7Ci0gICAgfQotCi0gICAgaWYg
KHNhZmVwb2ludFJlc3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IFJFTEVBU0VfQVNTRVJUKCFzdGF0ZS5ncmFwaC5tX3ZtLmhlYXAuaXNDb2xsZWN0aW5nKCkpOwot
ICAgIAotICAgIGlmIChzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiByZWdpc3Rlck9m
ZnNldHMgPQotICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFJlZ2lzdGVyQXRPZmZzZXRMaXN0Pihz
dGF0ZS5wcm9jLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgIGlmIChzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkgewotICAgICAgICBkYXRhTG9nKCJVbndpbmQgaW5mbyBmb3IgIiwgQ29kZUJs
b2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCks
ICI6XG4iKTsKLSAgICAgICAgZGF0YUxvZygiICAgICIsICpyZWdpc3Rlck9mZnNldHMsICJcbiIp
OwotICAgIH0KLSAgICBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jay0+c2V0Q2FsbGVlU2F2ZVJlZ2lz
dGVycyhXVEZNb3ZlKHJlZ2lzdGVyT2Zmc2V0cykpOwotICAgIEFTU0VSVCghKHN0YXRlLnByb2Mt
PmZyYW1lU2l6ZSgpICUgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwotICAgIHN0YXRlLmppdENv
ZGUtPmNvbW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQgPSBzdGF0ZS5wcm9jLT5mcmFtZVNpemUoKSAv
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0KLSAgICBpbnQgbG9jYWxzT2Zmc2V0ID0KLSAgICAg
ICAgc3RhdGUuY2FwdHVyZWRWYWx1ZS0+b2Zmc2V0RnJvbUZQKCkgLyBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwotICAgIGlmIChzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgImxvY2Fsc09mZnNl
dCA9ICIsIGxvY2Fsc09mZnNldCwgIiBmb3Igc3RhY2sgc2xvdDogIiwKLSAgICAgICAgICAgIHBv
aW50ZXJEdW1wKHN0YXRlLmNhcHR1cmVkVmFsdWUpLCAiIGF0ICIsIFJhd1BvaW50ZXIoc3RhdGUu
Y2FwdHVyZWRWYWx1ZSksICJcbiIpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0YS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0
YVtpXS5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXIgKz0gbG9jYWxzT2Zmc2V0OwotICAgICAg
ICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsgYXJndW1lbnQtLSA+IDE7KSB7Ci0gICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50c1thcmd1bWVudF0gPQotICAgICAgICAgICAgICAgIGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzW2FyZ3VtZW50XS53aXRoTG9jYWxzT2Zmc2V0KGxvY2Fsc09mZnNldCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xv
c3VyZUNhbGwpIHsKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnkg
PQotICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3Zlcnkud2l0aExv
Y2Fsc09mZnNldChsb2NhbHNPZmZzZXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdyYXBo
Lmhhc0RlYnVnZ2VyRW5hYmxlZCgpKQotICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRTY29wZVJl
Z2lzdGVyKGNvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpICsgbG9jYWxzT2Zmc2V0KTsKLSAgICB9
Ci0gICAgZm9yIChPU1JFeGl0RGVzY3JpcHRvciYgZGVzY3JpcHRvciA6IHN0YXRlLmppdENvZGUt
Pm9zckV4aXREZXNjcmlwdG9ycykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkZXNjcmlw
dG9yLm1fdmFsdWVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIGRlc2NyaXB0b3IubV92YWx1
ZXNbaV0gPSBkZXNjcmlwdG9yLm1fdmFsdWVzW2ldLndpdGhMb2NhbHNPZmZzZXQobG9jYWxzT2Zm
c2V0KTsKLSAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJp
YWxpemF0aW9uIDogZGVzY3JpcHRvci5tX21hdGVyaWFsaXphdGlvbnMpCi0gICAgICAgICAgICBt
YXRlcmlhbGl6YXRpb24tPmFjY291bnRGb3JMb2NhbHNPZmZzZXQobG9jYWxzT2Zmc2V0KTsKLSAg
ICB9Ci0KLSAgICAvLyBXZSB3aWxsIGFkZCBleGNlcHRpb24gaGFuZGxlcnMgd2hpbGUgZ2VuZXJh
dGluZy4KLSAgICBjb2RlQmxvY2stPmNsZWFyRXhjZXB0aW9uSGFuZGxlcnMoKTsKLQotICAgIEND
YWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOwotICAgIEIzOjpnZW5lcmF0ZSgqc3RhdGUu
cHJvYywgaml0KTsKLQotICAgIC8vIEVtaXQgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAgICpz
dGF0ZS5leGNlcHRpb25IYW5kbGVyID0gaml0LmxhYmVsKCk7Ci0gICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvVk1DYWxsZWVTYXZlc0J1ZmZlcigpOwotICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGppdC52bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KTsKLSAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7Ci0gICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKLSAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIpKTsKLSAgICAgICAgfSk7
Ci0KLSAgICBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5p
cXVlPExpbmtCdWZmZXI+KAotICAgICAgICB2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0
aW9uQ2FuRmFpbCk7Ci0gICAgaWYgKHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+
ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewotICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkID0g
dHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBCMzo6UENUb09yaWdpbk1h
cCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgIGlm
ICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCi0gICAgICAgIGNvZGVC
bG9jay0+c2V0UENUb0NvZGVPcmlnaW5NYXAoc3RkOjptYWtlX3VuaXF1ZTxQQ1RvQ29kZU9yaWdp
bk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAq
c3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKSk7Ci0KLSAgICBzdGF0ZS5nZW5lcmF0
ZWRGdW5jdGlvbiA9IGJpdHdpc2VfY2FzdDxHZW5lcmF0ZWRGdW5jdGlvbj4oCi0gICAgICAgIHN0
YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwotICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVCM0J5cHJvZHVjdHMoc3Rh
dGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7Ci19Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmNwcAkocmV2aXNpb24gMTk2NzI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MzAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMQjNPdXRwdXQuaCIKLQot
I2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiQjNNYXRoRXh0cmFzLmgiCi0jaW5jbHVk
ZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewotCi11c2luZyBuYW1lc3BhY2UgQjM7Ci0KLU91dHB1dDo6T3V0cHV0KFN0YXRl
JiBzdGF0ZSkKLSAgICA6IG1fcHJvYygqc3RhdGUucHJvYykKLXsKLX0KLQotT3V0cHV0Ojp+T3V0
cHV0KCkKLXsKLX0KLQotdm9pZCBPdXRwdXQ6OmluaXRpYWxpemUoQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeSYgaGVhcHMpCi17Ci0gICAgbV9oZWFwcyA9ICZoZWFwczsKLX0KLQotTEJhc2ljQmxvY2sg
T3V0cHV0OjpuZXdCbG9jayhjb25zdCBjaGFyKikKLXsKLSAgICBMQmFzaWNCbG9jayByZXN1bHQg
PSBtX3Byb2MuYWRkQmxvY2sobV9mcmVxdWVuY3kpOwotCi0gICAgaWYgKCFtX25leHRCbG9jaykK
LSAgICAgICAgbV9ibG9ja09yZGVyLmFwcGVuZChyZXN1bHQpOwotICAgIGVsc2UKLSAgICAgICAg
bV9ibG9ja09yZGVyLmluc2VydEJlZm9yZShtX25leHRCbG9jaywgcmVzdWx0KTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgT3V0cHV0OjphcHBseUJsb2NrT3JkZXIoKQotewotICAg
IG1fcHJvYy5zZXRCbG9ja09yZGVyKG1fYmxvY2tPcmRlcik7Ci19Ci0KLUxCYXNpY0Jsb2NrIE91
dHB1dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2ssIExCYXNpY0Jsb2NrIG5leHRCbG9jaykK
LXsKLSAgICBhcHBlbmRUbyhibG9jayk7Ci0gICAgcmV0dXJuIGluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShuZXh0QmxvY2spOwotfQotCi12b2lkIE91dHB1dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxv
Y2spCi17Ci0gICAgbV9ibG9jayA9IGJsb2NrOwotfQotCi1TbG90QmFzZVZhbHVlKiBPdXRwdXQ6
OmxvY2tlZFN0YWNrU2xvdChzaXplX3QgYnl0ZXMpCi17Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxTbG90QmFzZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBtX3Byb2MuYWRkU3RhY2tT
bG90KGJ5dGVzKSk7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6Om5lZyhMVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBCMzo6TmVnLCBvcmln
aW4oKSwgdmFsdWUpOwotfQotCi1MVmFsdWUgT3V0cHV0OjpiaXROb3QoTFZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpC
aXRYb3IsIG9yaWdpbigpLAotICAgICAgICB2YWx1ZSwKLSAgICAgICAgbV9ibG9jay0+YXBwZW5k
SW50Q29uc3RhbnQobV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUtPnR5cGUoKSwgLTEpKTsKLX0KLQot
TFZhbHVlIE91dHB1dDo6bG9naWNhbE5vdChMVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwg
dmFsdWUsIGludDMyWmVybyk7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmxvYWQoVHlwZWRQb2ludGVy
IHBvaW50ZXIsIExUeXBlIHR5cGUpCi17Ci0gICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdHlwZSwgb3JpZ2luKCksIHBvaW50ZXIu
dmFsdWUoKSk7Ci0gICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAq
bV9oZWFwcyk7Ci0gICAgcmV0dXJuIGxvYWQ7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmRvdWJsZVBv
d2koTFZhbHVlIHgsIExWYWx1ZSB5KQotewotICAgIC8vIEZJWE1FOiBwb3dEb3VibGVJbnQzMigp
IHNob3VsZCBiZSBpbmxpbmVkIGhlcmUgc2luY2UgT3V0cHV0IGtub3dzIGFib3V0IGJsb2NrIGxh
eW91dCBhbmQKLSAgICAvLyBzaG91bGQgYmUgaW52b2x2ZWQgaW4gYW55IG9wZXJhdGlvbiB0aGF0
IGNyZWF0ZXMgYmxvY2tzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTIyMjMKLSAgICBhdXRvIHJlc3VsdCA9IHBvd0RvdWJsZUludDMyKG1fcHJvYywg
bV9ibG9jaywgb3JpZ2luKCksIHgsIHkpOwotICAgIG1fYmxvY2sgPSByZXN1bHQuZmlyc3Q7Ci0g
ICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7Ci19Ci0KLWJvb2wgT3V0cHV0OjpoYXNTZW5zaWJsZURv
dWJsZVRvSW50KCkKLXsKLSAgICByZXR1cm4gb3B0aW1pemVGb3JYODYoKTsKLX0KLQotTFZhbHVl
IE91dHB1dDo6ZG91YmxlVG9JbnQoTFZhbHVlIHZhbHVlKQotewotICAgIFBhdGNocG9pbnRWYWx1
ZSogcmVzdWx0ID0gcGF0Y2hwb2ludChJbnQzMik7Ci0gICAgcmVzdWx0LT5hcHBlbmQodmFsdWUs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwotICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKAotICAg
ICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBqaXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBhcmFt
c1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKLSAgICAgICAgfSk7Ci0gICAgcmVzdWx0LT5l
ZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUxWYWx1
ZSBPdXRwdXQ6OmRvdWJsZVRvVUludChMVmFsdWUgdmFsdWUpCi17Ci0gICAgUGF0Y2hwb2ludFZh
bHVlKiByZXN1bHQgPSBwYXRjaHBvaW50KEludDMyKTsKLSAgICByZXN1bHQtPmFwcGVuZCh2YWx1
ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7Ci0gICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoCi0g
ICAgICAgIFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgIGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBh
cmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigpKTsKLSAgICAgICAgfSk7Ci0gICAgcmVzdWx0
LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUxW
YWx1ZSBPdXRwdXQ6OnVuc2lnbmVkVG9Eb3VibGUoTFZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biBpbnRUb0RvdWJsZSh6ZXJvRXh0KHZhbHVlLCBJbnQ2NCkpOwotfQotCi1MVmFsdWUgT3V0cHV0
Ojpsb2FkOFNpZ25FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRlcikKLXsKLSAgICBMVmFsdWUgbG9h
ZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIEludDMy
LCBvcmlnaW4oKSwgcG9pbnRlci52YWx1ZSgpKTsKLSAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0
ZUluc3RydWN0aW9uKGxvYWQsICptX2hlYXBzKTsKLSAgICByZXR1cm4gbG9hZDsKLX0KLQotTFZh
bHVlIE91dHB1dDo6bG9hZDhaZXJvRXh0MzIoVHlwZWRQb2ludGVyIHBvaW50ZXIpCi17Ci0gICAg
TFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZDhaLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7Ci0gICAgcG9pbnRlci5oZWFw
KCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7Ci0gICAgcmV0dXJuIGxvYWQ7
Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmxvYWQxNlNpZ25FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRl
cikKLXsKLSAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkMTZTLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7Ci0gICAg
cG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7Ci0gICAg
cmV0dXJuIGxvYWQ7Ci19Ci0KLUxWYWx1ZSBPdXRwdXQ6OmxvYWQxNlplcm9FeHQzMihUeXBlZFBv
aW50ZXIgcG9pbnRlcikKLXsKLSAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZaLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFs
dWUoKSk7Ci0gICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9o
ZWFwcyk7Ci0gICAgcmV0dXJuIGxvYWQ7Ci19Ci0KLXZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUg
dmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQotewotICAgIExWYWx1ZSBzdG9yZSA9IG1fYmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVl
LCBwb2ludGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rp
b24oc3RvcmUsICptX2hlYXBzKTsKLX0KLQotdm9pZCBPdXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVl
IHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKLXsKLSAgICBMVmFsdWUgc3RvcmUgPSBtX2Js
b2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmU4LCBvcmlnaW4oKSwgdmFs
dWUsIHBvaW50ZXIudmFsdWUoKSk7Ci0gICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVj
dGlvbihzdG9yZSwgKm1faGVhcHMpOwotfQotCi12b2lkIE91dHB1dDo6c3RvcmUzMkFzMTYoTFZh
bHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKLXsKLSAgICBMVmFsdWUgc3RvcmUgPSBt
X2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgU3RvcmUxNiwgb3JpZ2luKCks
IHZhbHVlLCBwb2ludGVyLnZhbHVlKCkpOwotICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5z
dHJ1Y3Rpb24oc3RvcmUsICptX2hlYXBzKTsKLX0KLQotTFZhbHVlIE91dHB1dDo6YmFzZUluZGV4
KExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIFNjYWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zmc2V0
KQotewotICAgIExWYWx1ZSBhY2N1bXVsYXRlZE9mZnNldDsKLSAgICAgICAgCi0gICAgc3dpdGNo
IChzY2FsZSkgewotICAgIGNhc2UgU2NhbGVPbmU6Ci0gICAgICAgIGFjY3VtdWxhdGVkT2Zmc2V0
ID0gaW5kZXg7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2NhbGVUd286Ci0gICAgICAgIGFj
Y3VtdWxhdGVkT2Zmc2V0ID0gc2hsKGluZGV4LCBpbnRQdHJPbmUpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFNjYWxlRm91cjoKLSAgICAgICAgYWNjdW11bGF0ZWRPZmZzZXQgPSBzaGwoaW5k
ZXgsIGludFB0clR3byk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2NhbGVFaWdodDoKLSAg
ICBjYXNlIFNjYWxlUHRyOgotICAgICAgICBhY2N1bXVsYXRlZE9mZnNldCA9IHNobChpbmRleCwg
aW50UHRyVGhyZWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChv
ZmZzZXQpCi0gICAgICAgIGFjY3VtdWxhdGVkT2Zmc2V0ID0gYWRkKGFjY3VtdWxhdGVkT2Zmc2V0
LCBjb25zdEludFB0cihvZmZzZXQpKTsKLSAgICAgICAgCi0gICAgcmV0dXJuIGFkZChiYXNlLCBh
Y2N1bXVsYXRlZE9mZnNldCk7Ci19Ci0KLXZvaWQgT3V0cHV0OjpicmFuY2goTFZhbHVlIGNvbmRp
dGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIFdlaWdodCB0YWtlbldlaWdodCwgTEJhc2ljQmxvY2sg
bm90VGFrZW4sIFdlaWdodCBub3RUYWtlbldlaWdodCkKLXsKLSAgICBtX2Jsb2NrLT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKLSAgICAgICAgbV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwg
Y29uZGl0aW9uLAotICAgICAgICBGcmVxdWVudGVkQmxvY2sodGFrZW4sIHRha2VuV2VpZ2h0LmZy
ZXF1ZW5jeUNsYXNzKCkpLAotICAgICAgICBGcmVxdWVudGVkQmxvY2sobm90VGFrZW4sIG5vdFRh
a2VuV2VpZ2h0LmZyZXF1ZW5jeUNsYXNzKCkpKTsKLX0KLQotdm9pZCBPdXRwdXQ6OmNoZWNrKExW
YWx1ZSBjb25kaXRpb24sIFdlaWdodGVkVGFyZ2V0IHRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWln
aHQpCi17Ci0gICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSygqdGhp
cywgKCJPdXRwdXQ6OmNoZWNrIGNvbnRpbnVhdGlvbiIpKTsKLSAgICBicmFuY2goY29uZGl0aW9u
LCB0YWtlbiwgV2VpZ2h0ZWRUYXJnZXQoY29udGludWF0aW9uLCBub3RUYWtlbldlaWdodCkpOwot
ICAgIGFwcGVuZFRvKGNvbnRpbnVhdGlvbik7Ci19Ci0KLXZvaWQgT3V0cHV0OjpjaGVjayhMVmFs
dWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtlbikKLXsKLSAgICBjaGVjayhjb25kaXRp
b24sIHRha2VuLCB0YWtlbi53ZWlnaHQoKS5pbnZlcnNlKCkpOwotfQotCi1MVmFsdWUgT3V0cHV0
Ojpsb2FkKFR5cGVkUG9pbnRlciBwb2ludGVyLCBMb2FkVHlwZSB0eXBlKQotewotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgTG9hZDhTaWduRXh0MzI6Ci0gICAgICAgIHJldHVybiBsb2Fk
OFNpZ25FeHQzMihwb2ludGVyKTsKLSAgICBjYXNlIExvYWQ4WmVyb0V4dDMyOgotICAgICAgICBy
ZXR1cm4gbG9hZDhaZXJvRXh0MzIocG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkMTZTaWduRXh0MzI6
Ci0gICAgICAgIHJldHVybiBsb2FkOFNpZ25FeHQzMihwb2ludGVyKTsKLSAgICBjYXNlIExvYWQx
Nlplcm9FeHQzMjoKLSAgICAgICAgcmV0dXJuIGxvYWQ4WmVyb0V4dDMyKHBvaW50ZXIpOwotICAg
IGNhc2UgTG9hZDMyOgotICAgICAgICByZXR1cm4gbG9hZDMyKHBvaW50ZXIpOwotICAgIGNhc2Ug
TG9hZDY0OgotICAgICAgICByZXR1cm4gbG9hZDY0KHBvaW50ZXIpOwotICAgIGNhc2UgTG9hZFB0
cjoKLSAgICAgICAgcmV0dXJuIGxvYWRQdHIocG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkRmxvYXQ6
Ci0gICAgICAgIHJldHVybiBsb2FkRmxvYXQocG9pbnRlcik7Ci0gICAgY2FzZSBMb2FkRG91Ymxl
OgotICAgICAgICByZXR1cm4gbG9hZERvdWJsZShwb2ludGVyKTsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBP
dXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIFN0b3JlVHlw
ZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgU3RvcmUzMkFzODoKLSAg
ICAgICAgc3RvcmUzMkFzOCh2YWx1ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFN0b3JlMzJBczE2OgotICAgICAgICBzdG9yZTMyQXMxNih2YWx1ZSwgcG9pbnRlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0b3JlMzI6Ci0gICAgICAgIHN0b3JlMzIodmFsdWUs
IHBvaW50ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdG9yZTY0OgotICAgICAgICBz
dG9yZTY0KHZhbHVlLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3RvcmVQ
dHI6Ci0gICAgICAgIHN0b3JlUHRyKHZhbHVlLCBwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgU3RvcmVGbG9hdDoKLSAgICAgICAgc3RvcmVGbG9hdCh2YWx1ZSwgcG9pbnRlcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0b3JlRG91YmxlOgotICAgICAgICBzdG9yZURv
dWJsZSh2YWx1ZSwgcG9pbnRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAot
Ci0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQjNPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEIzT3V0cHV0LmgJKHJldmlzaW9uIDE5NjcyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQjNPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MzUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBGVExCM091dHB1dF9oCi0jZGVmaW5lIEZUTEIzT3V0cHV0X2gKLQotI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0KLSNpbmNsdWRlICJCM0FyZ3VtZW50UmVn
VmFsdWUuaCIKLSNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQjND
Q2FsbFZhbHVlLmgiCi0jaW5jbHVkZSAiQjNDb21waWxhdGlvbi5oIgotI2luY2x1ZGUgIkIzQ29u
c3QzMlZhbHVlLmgiCi0jaW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCi0jaW5jbHVkZSAiQjND
b250cm9sVmFsdWUuaCIKLSNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCi0jaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKLSNpbmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKLSNpbmNsdWRlICJCM1N3
aXRjaFZhbHVlLmgiCi0jaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKLSNpbmNsdWRlICJCM1Zh
bHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKLSNpbmNsdWRl
ICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCi0jaW5jbHVkZSAiRlRMQ29tbW9uVmFsdWVz
LmgiCi0jaW5jbHVkZSAiRlRMU3RhdGUuaCIKLSNpbmNsdWRlICJGVExTd2l0Y2hDYXNlLmgiCi0j
aW5jbHVkZSAiRlRMVHlwZWRQb2ludGVyLmgiCi0jaW5jbHVkZSAiRlRMVmFsdWVGcm9tQmxvY2su
aCIKLSNpbmNsdWRlICJGVExXZWlnaHQuaCIKLSNpbmNsdWRlICJGVExXZWlnaHRlZFRhcmdldC5o
IgotI2luY2x1ZGUgPHd0Zi9PcmRlck1ha2VyLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+Ci0KLS8vIEZJWE1FOiByZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5dGhpbmcgY2FuIGJl
IGdlbmVyYXRlZCB0aHJvdWdoIEIzLgotI2lmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKLSNwcmFn
bWEgR0NDIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V21pc3Npbmctbm9yZXR1cm4iCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51
c2VkLXBhcmFtZXRlciIKLSNlbmRpZiAvLyBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1uYW1lc3BhY2UgREZHIHsgc3RydWN0IE5vZGU7IH0KLQotbmFtZXNwYWNl
IEZUTCB7Ci0KLWVudW0gU2NhbGUgeyBTY2FsZU9uZSwgU2NhbGVUd28sIFNjYWxlRm91ciwgU2Nh
bGVFaWdodCwgU2NhbGVQdHIgfTsKLQotY2xhc3MgT3V0cHV0IDogcHVibGljIENvbW1vblZhbHVl
cyB7Ci1wdWJsaWM6Ci0gICAgT3V0cHV0KFN0YXRlJik7Ci0gICAgfk91dHB1dCgpOwotCi0gICAg
dm9pZCBpbml0aWFsaXplKEFic3RyYWN0SGVhcFJlcG9zaXRvcnkmKTsKLQotICAgIHZvaWQgc2V0
RnJlcXVlbmN5KGRvdWJsZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fZnJlcXVlbmN5ID0gdmFs
dWU7Ci0gICAgfQotCi0gICAgTEJhc2ljQmxvY2sgbmV3QmxvY2soY29uc3QgY2hhciogbmFtZSA9
ICIiKTsKLQotICAgIExCYXNpY0Jsb2NrIGluc2VydE5ld0Jsb2Nrc0JlZm9yZShMQmFzaWNCbG9j
ayBuZXh0QmxvY2spCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dEJsb2NrID0g
bV9uZXh0QmxvY2s7Ci0gICAgICAgIG1fbmV4dEJsb2NrID0gbmV4dEJsb2NrOwotICAgICAgICBy
ZXR1cm4gbGFzdE5leHRCbG9jazsKLSAgICB9Ci0KLSAgICB2b2lkIGFwcGx5QmxvY2tPcmRlcigp
OwotCi0gICAgTEJhc2ljQmxvY2sgYXBwZW5kVG8oTEJhc2ljQmxvY2ssIExCYXNpY0Jsb2NrIG5l
eHRCbG9jayk7Ci0gICAgdm9pZCBhcHBlbmRUbyhMQmFzaWNCbG9jayk7Ci0KLSAgICB2b2lkIHNl
dE9yaWdpbihERkc6Ok5vZGUqIG5vZGUpIHsgbV9vcmlnaW4gPSBub2RlOyB9Ci0gICAgQjM6Ok9y
aWdpbiBvcmlnaW4oKSB7IHJldHVybiBCMzo6T3JpZ2luKG1fb3JpZ2luKTsgfQotCi0gICAgTFZh
bHVlIGZyYW1lUG9pbnRlcigpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRlciwgb3JpZ2luKCkpOyB9Ci0KLSAgICBCMzo6U2xvdEJh
c2VWYWx1ZSogbG9ja2VkU3RhY2tTbG90KHNpemVfdCBieXRlcyk7Ci0KLSAgICBMVmFsdWUgY29u
c3RCb29sKGJvb2wgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3Qz
MlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZSk7IH0KLSAgICBMVmFsdWUgY29uc3RJbnQz
MihpbnQzMl90IHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0MzJW
YWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICBMVmFsdWUgY29uc3RJbnRQdHIoVCogdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBMVmFsdWUgY29uc3RJbnRQdHIoVCB2YWx1ZSkg
eyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdFB0clZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCB2YWx1ZSk7IH0KLSAgICBMVmFsdWUgY29uc3RJbnQ2NChpbnQ2NF90IHZhbHVlKSB7
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmln
aW4oKSwgdmFsdWUpOyB9Ci0gICAgTFZhbHVlIGNvbnN0RG91YmxlKGRvdWJsZSB2YWx1ZSkgeyBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCB2YWx1ZSk7IH0KLQotICAgIExWYWx1ZSBwaGkoTFR5cGUgdHlwZSkgeyByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6UGhpLCB0eXBlLCBvcmln
aW4oKSk7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+Ci0gICAgTFZhbHVlIHBo
aShMVHlwZSwgVmFsdWVGcm9tQmxvY2ssIFBhcmFtcy4uLiB0aGVSZXN0KTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgotICAgIExWYWx1ZSBwaGkoTFR5cGUsIGNvbnN0IFZlY3Rv
clR5cGUmKTsKLSAgICB2b2lkIGFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9t
QmxvY2spOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KLSAgICB2b2lkIGFkZElu
Y29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2ssIFBhcmFtcy4uLiB0aGVSZXN0
KTsKLQotICAgIExWYWx1ZSBhZGQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIHN1YihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTdWIs
IG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgbXVsKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6Ok11bCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkaXYoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6RGl2LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZh
bHVlIGNoaWxsRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkNoaWxsRGl2LCBvcmlnaW4oKSwgbGVm
dCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIG1vZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpNb2QsIG9y
aWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgY2hpbGxNb2QoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9w
cm9jLCBCMzo6Q2hpbGxNb2QsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUg
bmVnKExWYWx1ZSk7Ci0KLSAgICBMVmFsdWUgZG91YmxlQWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6
OkFkZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVTdWIoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6U3ViLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZh
bHVlIGRvdWJsZU11bChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpNdWwsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkRpdiwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVNb2QoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6TW9kLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRv
dWJsZU5lZyhMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG5lZyh2YWx1ZSk7IH0KLQotICAgIExWYWx1
ZSBiaXRBbmQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBw
ZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Qml0QW5kLCBvcmlnaW4oKSwgbGVmdCwgcmln
aHQpOyB9Ci0gICAgTFZhbHVlIGJpdE9yKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdE9yLCBvcmln
aW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGJpdFhvcihMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2Ms
IEIzOjpCaXRYb3IsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgc2hsKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OlNobCwgb3JpZ2luKCksIGxlZnQsIGNhc3RUb0ludDMyKHJpZ2h0
KSk7IH0KLSAgICBMVmFsdWUgYVNocihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTU2hyLCBvcmlnaW4o
KSwgbGVmdCwgY2FzdFRvSW50MzIocmlnaHQpKTsgfQotICAgIExWYWx1ZSBsU2hyKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6OlpTaHIsIG9yaWdpbigpLCBsZWZ0LCBjYXN0VG9JbnQzMihyaWdodCkpOyB9
Ci0gICAgTFZhbHVlIGJpdE5vdChMVmFsdWUpOwotICAgIExWYWx1ZSBsb2dpY2FsTm90KExWYWx1
ZSk7Ci0KLSAgICBMVmFsdWUgY3RsejMyKExWYWx1ZSBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpDbHosIG9yaWdpbigpLCBvcGVyYW5k
KTsgfQotICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZsb3czMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IENSQVNIKCk7IH0KLSAgICBMVmFsdWUgc3ViV2l0aE92ZXJmbG93MzIoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyBDUkFTSCgpOyB9Ci0gICAgTFZhbHVlIG11bFdpdGhPdmVyZmxv
dzMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgQ1JBU0goKTsgfQotICAgIExWYWx1ZSBh
ZGRXaXRoT3ZlcmZsb3c2NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IENSQVNIKCk7IH0K
LSAgICBMVmFsdWUgc3ViV2l0aE92ZXJmbG93NjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyBDUkFTSCgpOyB9Ci0gICAgTFZhbHVlIG11bFdpdGhPdmVyZmxvdzY0KExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgQ1JBU0goKTsgfQotICAgIExWYWx1ZSBkb3VibGVBYnMoTFZhbHVlIHZh
bHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpB
YnMsIG9yaWdpbigpLCB2YWx1ZSk7IH0KLSAgICBMVmFsdWUgZG91YmxlQ2VpbChMVmFsdWUgb3Bl
cmFuZCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6
Q2VpbCwgb3JpZ2luKCksIG9wZXJhbmQpOyB9Ci0KLSAgICBMVmFsdWUgZG91YmxlU2luKExWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSAoKnNpbkRvdWJsZSkoZG91YmxlKSA9IHNp
bjsKLSAgICAgICAgcmV0dXJuIGNhbGxXaXRob3V0U2lkZUVmZmVjdHMoQjM6OkRvdWJsZSwgc2lu
RG91YmxlLCB2YWx1ZSk7Ci0gICAgfQotICAgIExWYWx1ZSBkb3VibGVDb3MoTFZhbHVlIHZhbHVl
KQotICAgIHsKLSAgICAgICAgZG91YmxlICgqY29zRG91YmxlKShkb3VibGUpID0gY29zOwotICAg
ICAgICByZXR1cm4gY2FsbFdpdGhvdXRTaWRlRWZmZWN0cyhCMzo6RG91YmxlLCBjb3NEb3VibGUs
IHZhbHVlKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgZG91YmxlUG93KExWYWx1ZSB4T3BlcmFuZCwg
TFZhbHVlIHlPcGVyYW5kKQotICAgIHsKLSAgICAgICAgZG91YmxlICgqcG93RG91YmxlKShkb3Vi
bGUsIGRvdWJsZSkgPSBwb3c7Ci0gICAgICAgIHJldHVybiBjYWxsV2l0aG91dFNpZGVFZmZlY3Rz
KEIzOjpEb3VibGUsIHBvd0RvdWJsZSwgeE9wZXJhbmQsIHlPcGVyYW5kKTsKLSAgICB9Ci0KLSAg
ICBMVmFsdWUgZG91YmxlUG93aShMVmFsdWUgeE9wZXJhbmQsIExWYWx1ZSB5T3BlcmFuZCk7Ci0K
LSAgICBMVmFsdWUgZG91YmxlU3FydChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNxcnQsIG9yaWdpbigpLCB2YWx1ZSk7IH0K
LQotICAgIExWYWx1ZSBkb3VibGVMb2coTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgZG91
YmxlICgqbG9nRG91YmxlKShkb3VibGUpID0gbG9nOwotICAgICAgICByZXR1cm4gY2FsbFdpdGhv
dXRTaWRlRWZmZWN0cyhCMzo6RG91YmxlLCBsb2dEb3VibGUsIHZhbHVlKTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgYm9vbCBoYXNTZW5zaWJsZURvdWJsZVRvSW50KCk7Ci0gICAgTFZhbHVlIGRvdWJs
ZVRvSW50KExWYWx1ZSk7Ci0gICAgTFZhbHVlIGRvdWJsZVRvVUludChMVmFsdWUpOwotCi0gICAg
TFZhbHVlIHNpZ25FeHQzMlRvNjQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7IH0K
LSAgICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpCi0gICAgewotICAg
ICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSB0eXBlKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6WkV4dDMyLCBvcmlnaW4oKSwgdmFsdWUpOwotICAgIH0KLSAgICBMVmFsdWUgemVyb0V4dFB0
cihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIHplcm9FeHQodmFsdWUsIEIzOjpJbnQ2NCk7IH0KLSAg
ICBMVmFsdWUgaW50VG9Eb3VibGUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpJVG9ELCBvcmlnaW4oKSwgdmFsdWUpOyB9Ci0g
ICAgTFZhbHVlIHVuc2lnbmVkVG9Eb3VibGUoTFZhbHVlKTsKLSAgICBMVmFsdWUgY2FzdFRvSW50
MzIoTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT50eXBlKCkgPT0g
QjM6OkludDMyID8gdmFsdWUgOgotICAgICAgICAgICAgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6VHJ1bmMsIG9yaWdpbigpLCB2YWx1ZSk7Ci0gICAgfQotICAgIExW
YWx1ZSBkb3VibGVUb0Zsb2F0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RG91YmxlVG9GbG9hdCwgb3JpZ2luKCksIHZhbHVl
KTsgfQotICAgIExWYWx1ZSBmbG9hdFRvRG91YmxlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9i
bG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RmxvYXRUb0RvdWJsZSwgb3Jp
Z2luKCksIHZhbHVlKTsgfQotICAgIExWYWx1ZSBiaXRDYXN0KExWYWx1ZSwgTFR5cGUpOwotICAg
IExWYWx1ZSBmcm91bmQoTFZhbHVlIGRvdWJsZVZhbHVlKTsKLQotICAgIExWYWx1ZSBsb2FkKFR5
cGVkUG9pbnRlciwgTFR5cGUpOwotICAgIHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIp
OwotCi0gICAgTFZhbHVlIGxvYWQ4U2lnbkV4dDMyKFR5cGVkUG9pbnRlcik7Ci0gICAgTFZhbHVl
IGxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9pbnRlcik7Ci0gICAgTFZhbHVlIGxvYWQxNlNpZ25FeHQz
MihUeXBlZFBvaW50ZXIpOwotICAgIExWYWx1ZSBsb2FkMTZaZXJvRXh0MzIoVHlwZWRQb2ludGVy
KTsKLSAgICBMVmFsdWUgbG9hZDMyKFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2Fk
KHBvaW50ZXIsIEIzOjpJbnQzMik7IH0KLSAgICBMVmFsdWUgbG9hZDY0KFR5cGVkUG9pbnRlciBw
b2ludGVyKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIEIzOjpJbnQ2NCk7IH0KLSAgICBMVmFsdWUg
bG9hZFB0cihUeXBlZFBvaW50ZXIgcG9pbnRlcikgeyByZXR1cm4gbG9hZChwb2ludGVyLCBCMzo6
cG9pbnRlclR5cGUoKSk7IH0KLSAgICBMVmFsdWUgbG9hZEZsb2F0KFR5cGVkUG9pbnRlciBwb2lu
dGVyKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIEIzOjpGbG9hdCk7IH0KLSAgICBMVmFsdWUgbG9h
ZERvdWJsZShUeXBlZFBvaW50ZXIgcG9pbnRlcikgeyByZXR1cm4gbG9hZChwb2ludGVyLCBCMzo6
RG91YmxlKTsgfQotICAgIHZvaWQgc3RvcmUzMkFzOChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRl
ciBwb2ludGVyKTsKLSAgICB2b2lkIHN0b3JlMzJBczE2KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2lu
dGVyIHBvaW50ZXIpOwotICAgIHZvaWQgc3RvcmUzMihMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRl
ciBwb2ludGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gQjM6Oklu
dDMyKTsKLSAgICAgICAgc3RvcmUodmFsdWUsIHBvaW50ZXIpOwotICAgIH0KLSAgICB2b2lkIHN0
b3JlNjQoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlcikKLSAgICB7Ci0gICAgICAg
IEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09IEIzOjpJbnQ2NCk7Ci0gICAgICAgIHN0b3JlKHZhbHVl
LCBwb2ludGVyKTsKLSAgICB9Ci0gICAgdm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUsIFR5cGVk
UG9pbnRlciBwb2ludGVyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0g
QjM6OnBvaW50ZXJUeXBlKCkpOwotICAgICAgICBzdG9yZSh2YWx1ZSwgcG9pbnRlcik7Ci0gICAg
fQotICAgIHZvaWQgc3RvcmVGbG9hdChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVy
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gQjM6OkZsb2F0KTsKLSAg
ICAgICAgc3RvcmUodmFsdWUsIHBvaW50ZXIpOwotICAgIH0KLSAgICB2b2lkIHN0b3JlRG91Ymxl
KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpCi0gICAgewotICAgICAgICBBU1NF
UlQodmFsdWUtPnR5cGUoKSA9PSBCMzo6RG91YmxlKTsKLSAgICAgICAgc3RvcmUodmFsdWUsIHBv
aW50ZXIpOwotICAgIH0KLQotICAgIGVudW0gTG9hZFR5cGUgewotICAgICAgICBMb2FkOFNpZ25F
eHQzMiwKLSAgICAgICAgTG9hZDhaZXJvRXh0MzIsCi0gICAgICAgIExvYWQxNlNpZ25FeHQzMiwK
LSAgICAgICAgTG9hZDE2WmVyb0V4dDMyLAotICAgICAgICBMb2FkMzIsCi0gICAgICAgIExvYWQ2
NCwKLSAgICAgICAgTG9hZFB0ciwKLSAgICAgICAgTG9hZEZsb2F0LAotICAgICAgICBMb2FkRG91
YmxlCi0gICAgfTsKLQotICAgIExWYWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTG9hZFR5cGUpOwot
ICAgIAotICAgIGVudW0gU3RvcmVUeXBlIHsKLSAgICAgICAgU3RvcmUzMkFzOCwKLSAgICAgICAg
U3RvcmUzMkFzMTYsCi0gICAgICAgIFN0b3JlMzIsCi0gICAgICAgIFN0b3JlNjQsCi0gICAgICAg
IFN0b3JlUHRyLAotICAgICAgICBTdG9yZUZsb2F0LAotICAgICAgICBTdG9yZURvdWJsZQotICAg
IH07Ci0KLSAgICB2b2lkIHN0b3JlKExWYWx1ZSwgVHlwZWRQb2ludGVyLCBTdG9yZVR5cGUpOwot
Ci0gICAgTFZhbHVlIGFkZFB0cihMVmFsdWUgdmFsdWUsIHB0cmRpZmZfdCBpbW1lZGlhdGUgPSAw
KQotICAgIHsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGUpCi0gICAgICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgICAgIHJldHVybiBhZGQodmFsdWUsIGNvbnN0SW50UHRyKGltbWVkaWF0ZSkpOwot
ICAgIH0KLQotICAgIC8vIENvbnN0cnVjdCBhbiBhZGRyZXNzIGJ5IG9mZnNldHRpbmcgYmFzZSBi
eSB0aGUgcmVxdWVzdGVkIGFtb3VudCBhbmQgYXNjcmliaW5nCi0gICAgLy8gdGhlIHJlcXVlc3Rl
ZCBhYnN0cmFjdCBoZWFwIHRvIGl0LgotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzKGNvbnN0IEFi
c3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIGJhc2UsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIFR5cGVkUG9pbnRlcihoZWFwLCBhZGRQdHIoYmFzZSwgb2Zmc2V0
KSk7Ci0gICAgfQotICAgIC8vIENvbnN0cnVjdCBhbiBhZGRyZXNzIGJ5IG9mZnNldHRpbmcgYmFz
ZSBieSB0aGUgYW1vdW50IHNwZWNpZmllZCBieSB0aGUgZmllbGQsCi0gICAgLy8gYW5kIG9wdGlv
bmFsbHkgYW4gYWRkaXRpb25hbCBhbW91bnQgKHVzZSB0aGlzIHdpdGggY2FyZSksIGFuZCB0aGVu
IGNyZWF0aW5nCi0gICAgLy8gYSBUeXBlZFBvaW50ZXIgd2l0aCB0aGUgZ2l2ZW4gZmllbGQgYXMg
dGhlIGhlYXAuCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3MoTFZhbHVlIGJhc2UsIGNvbnN0IEFi
c3RyYWN0RmllbGQmIGZpZWxkLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZGRyZXNzKGZpZWxkLCBiYXNlLCBvZmZzZXQgKyBmaWVsZC5vZmZzZXQoKSk7Ci0g
ICAgfQotCi0gICAgTFZhbHVlIGJhc2VJbmRleChMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBT
Y2FsZSwgcHRyZGlmZl90IG9mZnNldCA9IDApOwotCi0gICAgVHlwZWRQb2ludGVyIGJhc2VJbmRl
eChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIFNj
YWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBU
eXBlZFBvaW50ZXIoaGVhcCwgYmFzZUluZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KSk7
Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYg
aGVhcCwgTFZhbHVlIGJhc2UsIExWYWx1ZSBpbmRleCwgSlNWYWx1ZSBpbmRleEFzQ29uc3RhbnQg
PSBKU1ZhbHVlKCksIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGhlYXAuYmFzZUluZGV4KCp0aGlzLCBiYXNlLCBpbmRleCwgaW5kZXhBc0NvbnN0YW50LCBvZmZz
ZXQpOwotICAgIH0KLQotICAgIFR5cGVkUG9pbnRlciBhYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFR5cGVkUG9pbnRlcihtX2hlYXBzLT5hYnNvbHV0ZVthZGRy
ZXNzXSwgY29uc3RJbnRQdHIoYWRkcmVzcykpOwotICAgIH0KLQotICAgIExWYWx1ZSBsb2FkOFNp
Z25FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJu
IGxvYWQ4U2lnbkV4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIExWYWx1ZSBsb2Fk
OFplcm9FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0
dXJuIGxvYWQ4WmVyb0V4dDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIExWYWx1ZSBs
b2FkMTZTaWduRXh0MzIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7
IHJldHVybiBsb2FkMTZTaWduRXh0MzIoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZh
bHVlIGxvYWQxNlplcm9FeHQzMihMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmll
bGQpIHsgcmV0dXJuIGxvYWQxNlplcm9FeHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KLSAg
ICBMVmFsdWUgbG9hZDMyKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkg
eyByZXR1cm4gbG9hZDMyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotICAgIExWYWx1ZSBsb2Fk
NjQoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2Fk
NjQoYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9Ci0gICAgTFZhbHVlIGxvYWRQdHIoTFZhbHVlIGJh
c2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkUHRyKGFkZHJlc3Mo
YmFzZSwgZmllbGQpKTsgfQotICAgIExWYWx1ZSBsb2FkRG91YmxlKExWYWx1ZSBiYXNlLCBjb25z
dCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZERvdWJsZShhZGRyZXNzKGJhc2Us
IGZpZWxkKSk7IH0KLSAgICB2b2lkIHN0b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwg
Y29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgc3RvcmUzMih2YWx1ZSwgYWRkcmVzcyhiYXNl
LCBmaWVsZCkpOyB9Ci0gICAgdm9pZCBzdG9yZTY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2Us
IGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHN0b3JlNjQodmFsdWUsIGFkZHJlc3MoYmFz
ZSwgZmllbGQpKTsgfQotICAgIHZvaWQgc3RvcmVQdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFz
ZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgc3RvcmVQdHIodmFsdWUsIGFkZHJlc3Mo
YmFzZSwgZmllbGQpKTsgfQotICAgIHZvaWQgc3RvcmVEb3VibGUoTFZhbHVlIHZhbHVlLCBMVmFs
dWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgc3RvcmVEb3VibGUodmFsdWUs
IGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQotCi0gICAgLy8gRklYTUU6IEV4cGxvcmUgYWRkaW5n
IHN1cHBvcnQgZm9yIHZhbHVlIHJhbmdlIGNvbnN0cmFpbnRzIHRvIEIzLiBNYXliZSBpdCBjb3Vs
ZCBiZSBhcyBzaW1wbGUgYXMgaGF2aW5nCi0gICAgLy8gYSBsb2FkIGluc3RydWN0aW9uIHRoYXQg
Z3VhcmFudGVlcyB0aGF0IGl0cyByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLgotICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE0NTgKLSAgICB2b2lkIGFzY3Jp
YmVSYW5nZShMVmFsdWUsIGNvbnN0IFZhbHVlUmFuZ2UmKSB7IH0KLSAgICBMVmFsdWUgbm9uTmVn
YXRpdmUzMihMVmFsdWUgbG9hZEluc3RydWN0aW9uKSB7IHJldHVybiBsb2FkSW5zdHJ1Y3Rpb247
IH0KLSAgICBMVmFsdWUgbG9hZDMyTm9uTmVnYXRpdmUoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsg
cmV0dXJuIGxvYWQzMihwb2ludGVyKTsgfQotICAgIExWYWx1ZSBsb2FkMzJOb25OZWdhdGl2ZShM
VmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQzMihi
YXNlLCBmaWVsZCk7IH0KLQotICAgIExWYWx1ZSBlcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpF
cXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBub3RFcXVhbChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAg
IExWYWx1ZSBhYm92ZShMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBYm92ZSwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsgfQotICAgIExWYWx1ZSBhYm92ZU9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6
QWJvdmVFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBiZWxvdyhM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpCZWxvdywgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAg
IExWYWx1ZSBiZWxvd09yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QmVsb3dFcXVhbCwgb3Jp
Z2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBncmVhdGVyVGhhbihMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpHcmVhdGVyVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExW
YWx1ZSBncmVhdGVyVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlckVxdWFs
LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGxlc3NUaGFuKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6Okxlc3NUaGFuLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZh
bHVlIGxlc3NUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzRXF1YWwsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7IH0KLQotICAgIExWYWx1ZSBkb3VibGVFcXVhbChMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBk
b3VibGVFcXVhbE9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsT3JVbm9yZGVy
ZWQsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTm90RXF1YWxP
clVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVMZXNzVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIz
OjpMZXNzVGhhbiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQotICAgIExWYWx1ZSBkb3VibGVM
ZXNzVGhhbk9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TGVzc0VxdWFsLCBvcmlnaW4oKSwg
bGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZUdyZWF0ZXJUaGFuKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkdyZWF0ZXJUaGFuLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Ci0gICAgTFZh
bHVlIGRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpHcmVhdGVy
RXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KLSAgICBMVmFsdWUgZG91YmxlTm90RXF1
YWxBbmRPcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxvZ2ljYWxO
b3QoZG91YmxlRXF1YWxPclVub3JkZXJlZChsZWZ0LCByaWdodCkpOyB9Ci0gICAgTFZhbHVlIGRv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gbG9naWNhbE5vdChkb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpKTsgfQot
ICAgIExWYWx1ZSBkb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsb2dpY2FsTm90KGRvdWJsZUdyZWF0ZXJUaGFuKGxlZnQs
IHJpZ2h0KSk7IH0KLSAgICBMVmFsdWUgZG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBsb2dpY2FsTm90KGRvdWJsZUxlc3NUaGFu
T3JFcXVhbChsZWZ0LCByaWdodCkpOyB9Ci0gICAgTFZhbHVlIGRvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxvZ2lj
YWxOb3QoZG91YmxlTGVzc1RoYW4obGVmdCwgcmlnaHQpKTsgfQotCi0gICAgTFZhbHVlIGlzWmVy
bzMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50MzJaZXJvKTsgfQotICAgIExW
YWx1ZSBub3RaZXJvMzIoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlpl
cm8pOyB9Ci0gICAgTFZhbHVlIGlzWmVybzY0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1
ZSwgaW50NjRaZXJvKTsgfQotICAgIExWYWx1ZSBub3RaZXJvNjQoTFZhbHVlIHZhbHVlKSB7IHJl
dHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwg
b3JpZ2luKCksIHZhbHVlLCBpbnQ2NFplcm8pOyB9Ci0gICAgTFZhbHVlIGlzTnVsbChMVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIGlzWmVybzY0KHZhbHVlKTsgfQotICAgIExWYWx1ZSBub3ROdWxsKExW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gbm90WmVybzY0KHZhbHVlKTsgfQotCi0gICAgTFZhbHVlIHRl
c3RJc1plcm8zMihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc1plcm8zMihi
aXRBbmQodmFsdWUsIG1hc2spKTsgfQotICAgIExWYWx1ZSB0ZXN0Tm9uWmVybzMyKExWYWx1ZSB2
YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0dXJuIG5vdFplcm8zMihiaXRBbmQodmFsdWUsIG1hc2sp
KTsgfQotICAgIExWYWx1ZSB0ZXN0SXNaZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykg
eyByZXR1cm4gaXNaZXJvNjQoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KLSAgICBMVmFsdWUgdGVz
dE5vblplcm82NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQo
Yml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KLSAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUg
dmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7
IH0KLSAgICBMVmFsdWUgdGVzdE5vblplcm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykg
eyByZXR1cm4gbm90TnVsbChiaXRBbmQodmFsdWUsIG1hc2spKTsgfQotCi0gICAgTFZhbHVlIHNl
bGVjdChMVmFsdWUgdmFsdWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdp
bigpLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsgfQotICAgIExWYWx1ZSBleHRyYWN0VmFsdWUo
TFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgQ1JBU0goKTsgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KLSAgICBMVmFsdWUgY2FsbChMVHlwZSB0eXBlLCBMVmFs
dWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIEIz
OjpDQ2FsbFZhbHVlKiByZXN1bHQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNDYWxsVmFsdWU+
KG1fcHJvYywgdHlwZSwgb3JpZ2luKCksIGZ1bmN0aW9uKTsKLSAgICAgICAgcmVzdWx0LT5jaGls
ZHJlbigpLmFwcGVuZFZlY3Rvcih2ZWN0b3IpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSAgICBMVmFsdWUgY2FsbChMVHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q0NhbGxWYWx1ZT4obV9wcm9jLCB0eXBlLCBvcmlnaW4o
KSwgZnVuY3Rpb24pOyB9Ci0gICAgTFZhbHVlIGNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1bmN0
aW9uLCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDQ2FsbFZh
bHVlPihtX3Byb2MsIHR5cGUsIG9yaWdpbigpLCBmdW5jdGlvbiwgYXJnMSk7IH0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgotICAgIExWYWx1ZSBjYWxsKExUeXBlIHR5cGUsIExWYWx1
ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpDQ2FsbFZhbHVlPihtX3Byb2MsIHR5cGUsIG9yaWdpbigpLCBmdW5jdGlv
biwgYXJnMSwgYXJncy4uLik7IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlw
ZT4KLSAgICBMVmFsdWUgb3BlcmF0aW9uKEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikgeyByZXR1cm4g
Y29uc3RJbnRQdHIoYml0d2lzZV9jYXN0PHZvaWQqPihmdW5jdGlvbikpOyB9Ci0KLSAgICB2b2lk
IGp1bXAoTEJhc2ljQmxvY2sgZGVzdGluYXRpb24pIHsgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpD
b250cm9sVmFsdWU+KG1fcHJvYywgQjM6Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJs
b2NrKGRlc3RpbmF0aW9uKSk7IH0KLSAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBM
QmFzaWNCbG9jayB0YWtlbiwgV2VpZ2h0IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtl
biwgV2VpZ2h0IG5vdFRha2VuV2VpZ2h0KTsKLSAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0
aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtlbiwgV2VpZ2h0ZWRUYXJnZXQgbm90VGFrZW4pCi0gICAg
ewotICAgICAgICBicmFuY2goY29uZGl0aW9uLCB0YWtlbi50YXJnZXQoKSwgdGFrZW4ud2VpZ2h0
KCksIG5vdFRha2VuLnRhcmdldCgpLCBub3RUYWtlbi53ZWlnaHQoKSk7Ci0gICAgfQotCi0gICAg
Ly8gQnJhbmNoZXMgdG8gYW4gYWxyZWFkeS1jcmVhdGVkIGhhbmRsZXIgaWYgdHJ1ZSwgImZhbGxz
IHRocm91Z2giIGlmIGZhbHNlLiBGYWxsLXRocm91Z2ggaXMKLSAgICAvLyBzaW11bGF0ZWQgYnkg
Y3JlYXRpbmcgYSBjb250aW51YXRpb24gZm9yIHlvdS4KLSAgICB2b2lkIGNoZWNrKExWYWx1ZSBj
b25kaXRpb24sIFdlaWdodGVkVGFyZ2V0IHRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpOwot
ICAgIAotICAgIC8vIFNhbWUgYXMgY2hlY2soKSwgYnV0IHVzZXMgV2VpZ2h0OjppbnZlcnNlKCkg
dG8gY29tcHV0ZSB0aGUgbm90VGFrZW5XZWlnaHQuCi0gICAgdm9pZCBjaGVjayhMVmFsdWUgY29u
ZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtlbik7Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmVjdG9yVHlwZT4KLSAgICB2b2lkIHN3aXRjaEluc3RydWN0aW9uKExWYWx1ZSB2YWx1ZSwg
Y29uc3QgVmVjdG9yVHlwZSYgY2FzZXMsIExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdoLCBXZWlnaHQg
ZmFsbFRocm91Z2hXZWlnaHQpCi0gICAgewotICAgICAgICBCMzo6U3dpdGNoVmFsdWUqIHN3aXRj
aFZhbHVlID0gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpTd2l0Y2hWYWx1ZT4oCi0gICAgICAgICAg
ICBtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhmYWxsVGhyb3Vn
aCkpOwotICAgICAgICBmb3IgKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UgOiBjYXNlcykg
ewotICAgICAgICAgICAgaW50NjRfdCB2YWx1ZSA9IHN3aXRjaENhc2UudmFsdWUoKS0+YXNJbnQo
KTsKLSAgICAgICAgICAgIEIzOjpGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KHN3aXRjaENhc2UudGFy
Z2V0KCksIHN3aXRjaENhc2Uud2VpZ2h0KCkuZnJlcXVlbmN5Q2xhc3MoKSk7Ci0gICAgICAgICAg
ICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2FzZShCMzo6U3dpdGNoQ2FzZSh2YWx1ZSwgdGFyZ2V0KSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHJldChMVmFsdWUgdmFsdWUpIHsgbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpDb250cm9sVmFsdWU+KG1fcHJvYywgQjM6OlJldHVybiwgb3JpZ2lu
KCksIHZhbHVlKTsgfQotCi0gICAgdm9pZCB1bnJlYWNoYWJsZSgpIHsgbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpDb250cm9sVmFsdWU+KG1fcHJvYywgQjM6Ok9vcHMsIG9yaWdpbigpKTsgfQotCi0g
ICAgQjM6OkNoZWNrVmFsdWUqIHNwZWN1bGF0ZShMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpD
aGVjaywgb3JpZ2luKCksIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBCMzo6Q2hlY2tWYWx1ZSogc3Bl
Y3VsYXRlQWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVja0Fk
ZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKLSAgICB9Ci0KLSAgICBCMzo6Q2hlY2tWYWx1ZSog
c3BlY3VsYXRlU3ViKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVj
a1N1Yiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKLSAgICB9Ci0KLSAgICBCMzo6Q2hlY2tWYWx1
ZSogc3BlY3VsYXRlTXVsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpD
aGVja011bCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsKLSAgICB9Ci0KLSAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50KExUeXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgdHlwZSwgb3Jp
Z2luKCkpOwotICAgIH0KLQotICAgIHZvaWQgdHJhcCgpCi0gICAgewotICAgICAgICBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OkNvbnRyb2xWYWx1ZT4obV9wcm9jLCBCMzo6T29wcywgb3JpZ2luKCkp
OwotICAgIH0KLQotICAgIFZhbHVlRnJvbUJsb2NrIGFuY2hvcihMVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICBCMzo6VXBzaWxvblZhbHVlKiB1cHNpbG9uID0gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIHZhbHVlKTsKLSAgICAgICAgcmV0
dXJuIFZhbHVlRnJvbUJsb2NrKHVwc2lsb24sIG1fYmxvY2spOwotICAgIH0KLQotI2lmIFBMQVRG
T1JNKENPQ09BKQotI3ByYWdtYSBtYXJrIC0gU3RhdGVzCi0jZW5kaWYKLSAgICBCMzo6UHJvY2Vk
dXJlJiBtX3Byb2M7Ci0KLSAgICBERkc6Ok5vZGUqIG1fb3JpZ2luIHsgbnVsbHB0ciB9OwotICAg
IExCYXNpY0Jsb2NrIG1fYmxvY2sgeyBudWxscHRyIH07Ci0gICAgTEJhc2ljQmxvY2sgbV9uZXh0
QmxvY2sgeyBudWxscHRyIH07Ci0KLSAgICBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5KiBtX2hlYXBz
OwotCi0gICAgZG91YmxlIG1fZnJlcXVlbmN5IHsgMSB9OwotCi1wcml2YXRlOgotICAgIE9yZGVy
TWFrZXI8TEJhc2ljQmxvY2s+IG1fYmxvY2tPcmRlcjsKLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdGlvbiwgdHlwZW5hbWUuLi4gQXJncz4KLSAgICBMVmFsdWUgY2FsbFdpdGhvdXRT
aWRlRWZmZWN0cyhCMzo6VHlwZSB0eXBlLCBGdW5jdGlvbiBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IEFyZ3MuLi4gYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OkNDYWxsVmFsdWU+KG1fcHJvYywgdHlwZSwgb3JpZ2luKCksIEIzOjpFZmZlY3RzOjpub25l
KCksCi0gICAgICAgICAgICBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0UHRyVmFsdWU+KG1f
cHJvYywgb3JpZ2luKCksIGJpdHdpc2VfY2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwKLSAgICAgICAg
ICAgIGFyZzEsIGFyZ3MuLi4pOwotICAgIH0KLQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4g
UGFyYW1zPgotaW5saW5lIExWYWx1ZSBPdXRwdXQ6OnBoaShMVHlwZSB0eXBlLCBWYWx1ZUZyb21C
bG9jayB2YWx1ZSwgUGFyYW1zLi4uIHRoZVJlc3QpCi17Ci0gICAgTFZhbHVlIHBoaU5vZGUgPSBw
aGkodHlwZSk7Ci0gICAgYWRkSW5jb21pbmdUb1BoaShwaGlOb2RlLCB2YWx1ZSwgdGhlUmVzdC4u
Lik7Ci0gICAgcmV0dXJuIHBoaU5vZGU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5
cGU+Ci1pbmxpbmUgTFZhbHVlIE91dHB1dDo6cGhpKExUeXBlIHR5cGUsIGNvbnN0IFZlY3RvclR5
cGUmIHZlY3RvcikKLXsKLSAgICBMVmFsdWUgcGhpTm9kZSA9IHBoaSh0eXBlKTsKLSAgICBmb3Ig
KGNvbnN0IFZhbHVlRnJvbUJsb2NrJiB2YWx1ZUZyb21CbG9jayA6IHZlY3RvcikKLSAgICAgICAg
YWRkSW5jb21pbmdUb1BoaShwaGlOb2RlLCB2YWx1ZUZyb21CbG9jayk7Ci0gICAgcmV0dXJuIHBo
aU5vZGU7Ci19Ci0KLWlubGluZSB2b2lkIE91dHB1dDo6YWRkSW5jb21pbmdUb1BoaShMVmFsdWUg
cGhpLCBWYWx1ZUZyb21CbG9jayB2YWx1ZSkKLXsKLSAgICB2YWx1ZS52YWx1ZSgpLT5hczxCMzo6
VXBzaWxvblZhbHVlPigpLT5zZXRQaGkocGhpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUuLi4g
UGFyYW1zPgotaW5saW5lIHZvaWQgT3V0cHV0OjphZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGks
IFZhbHVlRnJvbUJsb2NrIHZhbHVlLCBQYXJhbXMuLi4gdGhlUmVzdCkKLXsKLSAgICBhZGRJbmNv
bWluZ1RvUGhpKHBoaSwgdmFsdWUpOwotICAgIGFkZEluY29taW5nVG9QaGkocGhpLCB0aGVSZXN0
Li4uKTsKLX0KLQotaW5saW5lIExWYWx1ZSBPdXRwdXQ6OmJpdENhc3QoTFZhbHVlIHZhbHVlLCBM
VHlwZSB0eXBlKQotewotICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBpbnQ2NCB8fCB0
eXBlID09IGRvdWJsZVR5cGUpOwotICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpCaXR3aXNlQ2FzdCwgb3JpZ2luKCksIHZhbHVlKTsKLX0KLQotaW5s
aW5lIExWYWx1ZSBPdXRwdXQ6OmZyb3VuZChMVmFsdWUgZG91YmxlVmFsdWUpCi17Ci0gICAgcmV0
dXJuIGZsb2F0VG9Eb3VibGUoZG91YmxlVG9GbG9hdChkb3VibGVWYWx1ZSkpOwotfQotCi0jaWYg
Q09NUElMRVIoR0NDX09SX0NMQU5HKQotI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKLSNlbmRp
ZiAvLyBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCi0KLSNkZWZpbmUgRlRMX05FV19CTE9DSyhvdXRw
dXQsIG5hbWVBcmd1bWVudHMpIFwKLSAgICAoTElLRUxZKCF2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKCkpIFwKLSAgICA/IChvdXRwdXQpLm5ld0Jsb2NrKCkgXAotICAgIDogKG91dHB1dCkubmV3
QmxvY2soKHRvQ1N0cmluZyBuYW1lQXJndW1lbnRzKS5kYXRhKCkpKQotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQotI2VuZGlmIC8vIEZU
TEIzT3V0cHV0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAkocmV2aXNpb24gMTk2NzI5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIz
Q29tcGlsZS5jcHA6MTk2NzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExDb21waWxlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNQcm9j
ZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUg
IkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0dyYXBoU2FmZXBvaW50LmgiCisjaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRhdGFWaWV3LmgiCisjaW5jbHVkZSAiRGlzYXNz
ZW1ibGVyLmgiCisjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5o
IgorI2luY2x1ZGUgIkpJVFN1YkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
KyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBERkc7CisKK3ZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6
UmVzdWx0JiBzYWZlcG9pbnRSZXN1bHQpCit7CisgICAgR3JhcGgmIGdyYXBoID0gc3RhdGUuZ3Jh
cGg7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5tX2NvZGVCbG9jazsKKyAgICBW
TSYgdm0gPSBncmFwaC5tX3ZtOworCisgICAgeworICAgICAgICBHcmFwaFNhZmVwb2ludCBzYWZl
cG9pbnQoc3RhdGUuZ3JhcGgsIHNhZmVwb2ludFJlc3VsdCk7CisKKyAgICAgICAgQjM6OnByZXBh
cmVGb3JHZW5lcmF0aW9uKCpzdGF0ZS5wcm9jKTsKKyAgICB9CisKKyAgICBpZiAoc2FmZXBvaW50
UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgUkVMRUFTRV9B
U1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5pc0NvbGxlY3RpbmcoKSk7CisgICAgCisgICAg
aWYgKHN0YXRlLmFsbG9jYXRpb25GYWlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IHJlZ2lzdGVyT2Zmc2V0cyA9Cisg
ICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8UmVnaXN0ZXJBdE9mZnNldExpc3Q+KHN0YXRlLnByb2Mt
PmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgp
KSB7CisgICAgICAgIGRhdGFMb2coIlVud2luZCBpbmZvIGZvciAiLCBDb2RlQmxvY2tXaXRoSklU
VHlwZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSwgIjpcbiIpOwor
ICAgICAgICBkYXRhTG9nKCIgICAgIiwgKnJlZ2lzdGVyT2Zmc2V0cywgIlxuIik7CisgICAgfQor
ICAgIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5zZXRDYWxsZWVTYXZlUmVnaXN0ZXJzKFdURk1v
dmUocmVnaXN0ZXJPZmZzZXRzKSk7CisgICAgQVNTRVJUKCEoc3RhdGUucHJvYy0+ZnJhbWVTaXpl
KCkgJSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9u
LmZyYW1lUmVnaXN0ZXJDb3VudCA9IHN0YXRlLnByb2MtPmZyYW1lU2l6ZSgpIC8gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKKworICAgIGludCBsb2NhbHNPZmZzZXQgPQorICAgICAgICBzdGF0ZS5j
YXB0dXJlZFZhbHVlLT5vZmZzZXRGcm9tRlAoKSAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBn
cmFwaC5tX25leHRNYWNoaW5lTG9jYWw7CisgICAgaWYgKHNob3VsZER1bXBEaXNhc3NlbWJseSgp
KSB7CisgICAgICAgIGRhdGFMb2coCisgICAgICAgICAgICAibG9jYWxzT2Zmc2V0ID0gIiwgbG9j
YWxzT2Zmc2V0LCAiIGZvciBzdGFjayBzbG90OiAiLAorICAgICAgICAgICAgcG9pbnRlckR1bXAo
c3RhdGUuY2FwdHVyZWRWYWx1ZSksICIgYXQgIiwgUmF3UG9pbnRlcihzdGF0ZS5jYXB0dXJlZFZh
bHVlKSwgIlxuIik7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLm1f
aW5saW5lVmFyaWFibGVEYXRhLnNpemUoKTsgaS0tOykgeworICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IGdyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhW2ldLmlubGlu
ZUNhbGxGcmFtZTsKKyAgICAgICAgCisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50Q291bnRSZWdpc3Rlci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnRSZWdpc3RlciArPSBsb2NhbHNPZmZzZXQ7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpOyBhcmd1bWVudC0tID4gMTspIHsKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzW2FyZ3VtZW50XSA9CisgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHNbYXJndW1lbnRdLndpdGhMb2NhbHNPZmZzZXQobG9jYWxzT2Zmc2V0KTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkg
eworICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeSA9CisgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS53aXRoTG9jYWxzT2Zmc2V0
KGxvY2Fsc09mZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ3JhcGguaGFzRGVidWdn
ZXJFbmFibGVkKCkpCisgICAgICAgICAgICBjb2RlQmxvY2stPnNldFNjb3BlUmVnaXN0ZXIoY29k
ZUJsb2NrLT5zY29wZVJlZ2lzdGVyKCkgKyBsb2NhbHNPZmZzZXQpOworICAgIH0KKyAgICBmb3Ig
KE9TUkV4aXREZXNjcmlwdG9yJiBkZXNjcmlwdG9yIDogc3RhdGUuaml0Q29kZS0+b3NyRXhpdERl
c2NyaXB0b3JzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRlc2NyaXB0b3IubV92YWx1
ZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgZGVzY3JpcHRvci5tX3ZhbHVlc1tpXSA9IGRl
c2NyaXB0b3IubV92YWx1ZXNbaV0ud2l0aExvY2Fsc09mZnNldChsb2NhbHNPZmZzZXQpOworICAg
ICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24g
OiBkZXNjcmlwdG9yLm1fbWF0ZXJpYWxpemF0aW9ucykKKyAgICAgICAgICAgIG1hdGVyaWFsaXph
dGlvbi0+YWNjb3VudEZvckxvY2Fsc09mZnNldChsb2NhbHNPZmZzZXQpOworICAgIH0KKworICAg
IC8vIFdlIHdpbGwgYWRkIGV4Y2VwdGlvbiBoYW5kbGVycyB3aGlsZSBnZW5lcmF0aW5nLgorICAg
IGNvZGVCbG9jay0+Y2xlYXJFeGNlcHRpb25IYW5kbGVycygpOworCisgICAgQ0NhbGxIZWxwZXJz
IGppdCgmdm0sIGNvZGVCbG9jayk7CisgICAgQjM6OmdlbmVyYXRlKCpzdGF0ZS5wcm9jLCBqaXQp
OworCisgICAgLy8gRW1pdCB0aGUgZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgKnN0YXRlLmV4Y2Vw
dGlvbkhhbmRsZXIgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUNh
bGxlZVNhdmVzQnVmZmVyKCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoaml0LnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGppdC5tb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIEND
YWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0
aW9uSGFuZGxlcigpOworICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVu
Y3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOworICAgICAgICB9KTsKKworICAgIHN0
YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1
ZmZlcj4oCisgICAgICAgIHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWls
KTsKKyAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5kaWRGYWlsVG9B
bGxvY2F0ZSgpKSB7CisgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1h
cCA9IHN0YXRlLnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7CisgICAgaWYgKHZtLnNob3Vs
ZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkKKyAgICAgICAgY29kZUJsb2NrLT5zZXRQ
Q1RvQ29kZU9yaWdpbk1hcChzdGQ6Om1ha2VfdW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1Rv
Q29kZU9yaWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5h
bGl6ZXItPmIzQ29kZUxpbmtCdWZmZXIpKTsKKworICAgIHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9u
ID0gYml0d2lzZV9jYXN0PEdlbmVyYXRlZEZ1bmN0aW9uPigKKyAgICAgICAgc3RhdGUuZmluYWxp
emVyLT5iM0NvZGVMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUIzQnlwcm9kdWN0cyhzdGF0ZS5wcm9jLT5y
ZWxlYXNlQnlwcm9kdWN0cygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTY3MjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTMgKzQxLDEzIEBACiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgogI2luY2x1ZGUgIkZUTEF2YWlsYWJs
ZVJlY292ZXJ5LmgiCi0jaW5jbHVkZSAiRlRMQjNPdXRwdXQuaCIKICNpbmNsdWRlICJGVExFeGNl
cHRpb25UYXJnZXQuaCIKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNs
dWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aENhbGwu
aCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3BlcmF0
aW9ucy5oIgorI2luY2x1ZGUgIkZUTE91dHB1dC5oIgogI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRF
eGNlcHRpb25IYW5kbGUuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJGVExX
ZWlnaHRlZFRhcmdldC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmNwcAkocmV2aXNpb24gMTk2NzI5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEIzT3V0cHV0LmNwcDoxOTY3MjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91
dHB1dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRlRMQjNPdXRwdXQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiQjNNYXRoRXh0cmFzLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3Bh
Y2UgQjM7CisKK091dHB1dDo6T3V0cHV0KFN0YXRlJiBzdGF0ZSkKKyAgICA6IG1fcHJvYygqc3Rh
dGUucHJvYykKK3sKK30KKworT3V0cHV0Ojp+T3V0cHV0KCkKK3sKK30KKwordm9pZCBPdXRwdXQ6
OmluaXRpYWxpemUoQWJzdHJhY3RIZWFwUmVwb3NpdG9yeSYgaGVhcHMpCit7CisgICAgbV9oZWFw
cyA9ICZoZWFwczsKK30KKworTEJhc2ljQmxvY2sgT3V0cHV0OjpuZXdCbG9jayhjb25zdCBjaGFy
KikKK3sKKyAgICBMQmFzaWNCbG9jayByZXN1bHQgPSBtX3Byb2MuYWRkQmxvY2sobV9mcmVxdWVu
Y3kpOworCisgICAgaWYgKCFtX25leHRCbG9jaykKKyAgICAgICAgbV9ibG9ja09yZGVyLmFwcGVu
ZChyZXN1bHQpOworICAgIGVsc2UKKyAgICAgICAgbV9ibG9ja09yZGVyLmluc2VydEJlZm9yZSht
X25leHRCbG9jaywgcmVzdWx0KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgT3V0
cHV0OjphcHBseUJsb2NrT3JkZXIoKQoreworICAgIG1fcHJvYy5zZXRCbG9ja09yZGVyKG1fYmxv
Y2tPcmRlcik7Cit9CisKK0xCYXNpY0Jsb2NrIE91dHB1dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sg
YmxvY2ssIExCYXNpY0Jsb2NrIG5leHRCbG9jaykKK3sKKyAgICBhcHBlbmRUbyhibG9jayk7Cisg
ICAgcmV0dXJuIGluc2VydE5ld0Jsb2Nrc0JlZm9yZShuZXh0QmxvY2spOworfQorCit2b2lkIE91
dHB1dDo6YXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2spCit7CisgICAgbV9ibG9jayA9IGJsb2Nr
OworfQorCitTbG90QmFzZVZhbHVlKiBPdXRwdXQ6OmxvY2tlZFN0YWNrU2xvdChzaXplX3QgYnl0
ZXMpCit7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxTbG90QmFzZVZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBtX3Byb2MuYWRkU3RhY2tTbG90KGJ5dGVzKSk7Cit9CisKK0xWYWx1ZSBP
dXRwdXQ6Om5lZyhMVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBCMzo6TmVnLCBvcmlnaW4oKSwgdmFsdWUpOworfQorCitMVmFsdWUg
T3V0cHV0OjpiaXROb3QoTFZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRYb3IsIG9yaWdpbigpLAorICAgICAgICB2
YWx1ZSwKKyAgICAgICAgbV9ibG9jay0+YXBwZW5kSW50Q29uc3RhbnQobV9wcm9jLCBvcmlnaW4o
KSwgdmFsdWUtPnR5cGUoKSwgLTEpKTsKK30KKworTFZhbHVlIE91dHB1dDo6bG9naWNhbE5vdChM
VmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+
KG1fcHJvYywgQjM6OkVxdWFsLCBvcmlnaW4oKSwgdmFsdWUsIGludDMyWmVybyk7Cit9CisKK0xW
YWx1ZSBPdXRwdXQ6OmxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHR5cGUpCit7Cisg
ICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgdHlwZSwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7CisgICAgcG9pbnRlci5oZWFw
KCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7CisgICAgcmV0dXJuIGxvYWQ7
Cit9CisKK0xWYWx1ZSBPdXRwdXQ6OmRvdWJsZVBvd2koTFZhbHVlIHgsIExWYWx1ZSB5KQorewor
ICAgIC8vIEZJWE1FOiBwb3dEb3VibGVJbnQzMigpIHNob3VsZCBiZSBpbmxpbmVkIGhlcmUgc2lu
Y2UgT3V0cHV0IGtub3dzIGFib3V0IGJsb2NrIGxheW91dCBhbmQKKyAgICAvLyBzaG91bGQgYmUg
aW52b2x2ZWQgaW4gYW55IG9wZXJhdGlvbiB0aGF0IGNyZWF0ZXMgYmxvY2tzLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyMjMKKyAgICBhdXRvIHJl
c3VsdCA9IHBvd0RvdWJsZUludDMyKG1fcHJvYywgbV9ibG9jaywgb3JpZ2luKCksIHgsIHkpOwor
ICAgIG1fYmxvY2sgPSByZXN1bHQuZmlyc3Q7CisgICAgcmV0dXJuIHJlc3VsdC5zZWNvbmQ7Cit9
CisKK2Jvb2wgT3V0cHV0OjpoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkKK3sKKyAgICByZXR1cm4g
b3B0aW1pemVGb3JYODYoKTsKK30KKworTFZhbHVlIE91dHB1dDo6ZG91YmxlVG9JbnQoTFZhbHVl
IHZhbHVlKQoreworICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gcGF0Y2hwb2ludChJbnQz
Mik7CisgICAgcmVzdWx0LT5hcHBlbmQodmFsdWUsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwor
ICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBq
aXQudHJ1bmNhdGVEb3VibGVUb0ludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdwcigp
KTsKKyAgICAgICAgfSk7CisgICAgcmVzdWx0LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6OmRvdWJsZVRvVUludChMVmFs
dWUgdmFsdWUpCit7CisgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBwYXRjaHBvaW50KElu
dDMyKTsKKyAgICByZXN1bHQtPmFwcGVuZCh2YWx1ZSwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7
CisgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFtdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
IGppdC50cnVuY2F0ZURvdWJsZVRvVWludDMyKHBhcmFtc1sxXS5mcHIoKSwgcGFyYW1zWzBdLmdw
cigpKTsKKyAgICAgICAgfSk7CisgICAgcmVzdWx0LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6OnVuc2lnbmVkVG9Eb3Vi
bGUoTFZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBpbnRUb0RvdWJsZSh6ZXJvRXh0KHZhbHVl
LCBJbnQ2NCkpOworfQorCitMVmFsdWUgT3V0cHV0Ojpsb2FkOFNpZ25FeHQzMihUeXBlZFBvaW50
ZXIgcG9pbnRlcikKK3sKKyAgICBMVmFsdWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkOFMsIEludDMyLCBvcmlnaW4oKSwgcG9pbnRlci52YWx1ZSgp
KTsKKyAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKGxvYWQsICptX2hlYXBz
KTsKKyAgICByZXR1cm4gbG9hZDsKK30KKworTFZhbHVlIE91dHB1dDo6bG9hZDhaZXJvRXh0MzIo
VHlwZWRQb2ludGVyIHBvaW50ZXIpCit7CisgICAgTFZhbHVlIGxvYWQgPSBtX2Jsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBJbnQzMiwgb3JpZ2luKCksIHBvaW50
ZXIudmFsdWUoKSk7CisgICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihsb2Fk
LCAqbV9oZWFwcyk7CisgICAgcmV0dXJuIGxvYWQ7Cit9CisKK0xWYWx1ZSBPdXRwdXQ6OmxvYWQx
NlNpZ25FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRlcikKK3sKKyAgICBMVmFsdWUgbG9hZCA9IG1f
YmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZTLCBJbnQzMiwgb3Jp
Z2luKCksIHBvaW50ZXIudmFsdWUoKSk7CisgICAgcG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0
cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7CisgICAgcmV0dXJuIGxvYWQ7Cit9CisKK0xWYWx1ZSBP
dXRwdXQ6OmxvYWQxNlplcm9FeHQzMihUeXBlZFBvaW50ZXIgcG9pbnRlcikKK3sKKyAgICBMVmFs
dWUgbG9hZCA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkMTZa
LCBJbnQzMiwgb3JpZ2luKCksIHBvaW50ZXIudmFsdWUoKSk7CisgICAgcG9pbnRlci5oZWFwKCku
ZGVjb3JhdGVJbnN0cnVjdGlvbihsb2FkLCAqbV9oZWFwcyk7CisgICAgcmV0dXJuIGxvYWQ7Cit9
CisKK3ZvaWQgT3V0cHV0OjpzdG9yZShMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVy
KQoreworICAgIExWYWx1ZSBzdG9yZSA9IG1fYmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBTdG9yZSwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVlKCkpOworICAgIHBv
aW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24oc3RvcmUsICptX2hlYXBzKTsKK30KKwor
dm9pZCBPdXRwdXQ6OnN0b3JlMzJBczgoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRl
cikKK3sKKyAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgU3RvcmU4LCBvcmlnaW4oKSwgdmFsdWUsIHBvaW50ZXIudmFsdWUoKSk7CisgICAg
cG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihzdG9yZSwgKm1faGVhcHMpOworfQor
Cit2b2lkIE91dHB1dDo6c3RvcmUzMkFzMTYoTFZhbHVlIHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9p
bnRlcikKK3sKKyAgICBMVmFsdWUgc3RvcmUgPSBtX2Jsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgU3RvcmUxNiwgb3JpZ2luKCksIHZhbHVlLCBwb2ludGVyLnZhbHVlKCkpOwor
ICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24oc3RvcmUsICptX2hlYXBzKTsK
K30KKworTFZhbHVlIE91dHB1dDo6YmFzZUluZGV4KExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgs
IFNjYWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zmc2V0KQoreworICAgIExWYWx1ZSBhY2N1bXVsYXRl
ZE9mZnNldDsKKyAgICAgICAgCisgICAgc3dpdGNoIChzY2FsZSkgeworICAgIGNhc2UgU2NhbGVP
bmU6CisgICAgICAgIGFjY3VtdWxhdGVkT2Zmc2V0ID0gaW5kZXg7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2NhbGVUd286CisgICAgICAgIGFjY3VtdWxhdGVkT2Zmc2V0ID0gc2hsKGluZGV4
LCBpbnRQdHJPbmUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjYWxlRm91cjoKKyAgICAg
ICAgYWNjdW11bGF0ZWRPZmZzZXQgPSBzaGwoaW5kZXgsIGludFB0clR3byk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU2NhbGVFaWdodDoKKyAgICBjYXNlIFNjYWxlUHRyOgorICAgICAgICBh
Y2N1bXVsYXRlZE9mZnNldCA9IHNobChpbmRleCwgaW50UHRyVGhyZWUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChvZmZzZXQpCisgICAgICAgIGFjY3VtdWxhdGVk
T2Zmc2V0ID0gYWRkKGFjY3VtdWxhdGVkT2Zmc2V0LCBjb25zdEludFB0cihvZmZzZXQpKTsKKyAg
ICAgICAgCisgICAgcmV0dXJuIGFkZChiYXNlLCBhY2N1bXVsYXRlZE9mZnNldCk7Cit9CisKK3Zv
aWQgT3V0cHV0OjpicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIFdl
aWdodCB0YWtlbldlaWdodCwgTEJhc2ljQmxvY2sgbm90VGFrZW4sIFdlaWdodCBub3RUYWtlbldl
aWdodCkKK3sKKyAgICBtX2Jsb2NrLT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
bV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwgY29uZGl0aW9uLAorICAgICAgICBGcmVxdWVu
dGVkQmxvY2sodGFrZW4sIHRha2VuV2VpZ2h0LmZyZXF1ZW5jeUNsYXNzKCkpLAorICAgICAgICBG
cmVxdWVudGVkQmxvY2sobm90VGFrZW4sIG5vdFRha2VuV2VpZ2h0LmZyZXF1ZW5jeUNsYXNzKCkp
KTsKK30KKwordm9pZCBPdXRwdXQ6OmNoZWNrKExWYWx1ZSBjb25kaXRpb24sIFdlaWdodGVkVGFy
Z2V0IHRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpCit7CisgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSygqdGhpcywgKCJPdXRwdXQ6OmNoZWNrIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICBicmFuY2goY29uZGl0aW9uLCB0YWtlbiwgV2VpZ2h0ZWRUYXJnZXQoY29u
dGludWF0aW9uLCBub3RUYWtlbldlaWdodCkpOworICAgIGFwcGVuZFRvKGNvbnRpbnVhdGlvbik7
Cit9CisKK3ZvaWQgT3V0cHV0OjpjaGVjayhMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdl
dCB0YWtlbikKK3sKKyAgICBjaGVjayhjb25kaXRpb24sIHRha2VuLCB0YWtlbi53ZWlnaHQoKS5p
bnZlcnNlKCkpOworfQorCitMVmFsdWUgT3V0cHV0Ojpsb2FkKFR5cGVkUG9pbnRlciBwb2ludGVy
LCBMb2FkVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTG9hZDhT
aWduRXh0MzI6CisgICAgICAgIHJldHVybiBsb2FkOFNpZ25FeHQzMihwb2ludGVyKTsKKyAgICBj
YXNlIExvYWQ4WmVyb0V4dDMyOgorICAgICAgICByZXR1cm4gbG9hZDhaZXJvRXh0MzIocG9pbnRl
cik7CisgICAgY2FzZSBMb2FkMTZTaWduRXh0MzI6CisgICAgICAgIHJldHVybiBsb2FkOFNpZ25F
eHQzMihwb2ludGVyKTsKKyAgICBjYXNlIExvYWQxNlplcm9FeHQzMjoKKyAgICAgICAgcmV0dXJu
IGxvYWQ4WmVyb0V4dDMyKHBvaW50ZXIpOworICAgIGNhc2UgTG9hZDMyOgorICAgICAgICByZXR1
cm4gbG9hZDMyKHBvaW50ZXIpOworICAgIGNhc2UgTG9hZDY0OgorICAgICAgICByZXR1cm4gbG9h
ZDY0KHBvaW50ZXIpOworICAgIGNhc2UgTG9hZFB0cjoKKyAgICAgICAgcmV0dXJuIGxvYWRQdHIo
cG9pbnRlcik7CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIHJldHVybiBsb2FkRmxvYXQo
cG9pbnRlcik7CisgICAgY2FzZSBMb2FkRG91YmxlOgorICAgICAgICByZXR1cm4gbG9hZERvdWJs
ZShwb2ludGVyKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBPdXRwdXQ6OnN0b3JlKExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIsIFN0b3JlVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgU3RvcmUzMkFzODoKKyAgICAgICAgc3RvcmUzMkFzOCh2YWx1ZSwgcG9p
bnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlMzJBczE2OgorICAgICAgICBz
dG9yZTMyQXMxNih2YWx1ZSwgcG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlMzI6CisgICAgICAgIHN0b3JlMzIodmFsdWUsIHBvaW50ZXIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTdG9yZTY0OgorICAgICAgICBzdG9yZTY0KHZhbHVlLCBwb2ludGVyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVQdHI6CisgICAgICAgIHN0b3JlUHRyKHZhbHVl
LCBwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAg
ICAgc3RvcmVGbG9hdCh2YWx1ZSwgcG9pbnRlcik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFN0b3JlRG91YmxlOgorICAgICAgICBzdG9yZURvdWJsZSh2YWx1ZSwgcG9pbnRlcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHdvcmtpbmcg
Y29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJGVExCM091dHB1dC5oIgorI2luY2x1ZGUgIkZUTE91dHB1dC5oIgogCiAjaWYgRU5B
QkxFKEZUTF9KSVQpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAko
cmV2aXNpb24gMTk2NzI5KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0
cHV0Lmg6MTk2NzI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGVExCM091dHB1dF9oCisjZGVmaW5l
IEZUTEIzT3V0cHV0X2gKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAi
QjNDb21waWxhdGlvbi5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAi
QjNDb25zdFB0clZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJC
M1Nsb3RCYXNlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisjaW5jbHVkZSAi
QjNVcHNpbG9uVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKKyNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgiCisjaW5jbHVkZSAiRlRMQ29tbW9uVmFsdWVzLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUu
aCIKKyNpbmNsdWRlICJGVExTd2l0Y2hDYXNlLmgiCisjaW5jbHVkZSAiRlRMVHlwZWRQb2ludGVy
LmgiCisjaW5jbHVkZSAiRlRMVmFsdWVGcm9tQmxvY2suaCIKKyNpbmNsdWRlICJGVExXZWlnaHQu
aCIKKyNpbmNsdWRlICJGVExXZWlnaHRlZFRhcmdldC5oIgorI2luY2x1ZGUgPHd0Zi9PcmRlck1h
a2VyLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKKy8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyBvbmNlIGV2ZXJ5dGhpbmcgY2FuIGJlIGdlbmVyYXRlZCB0aHJvdWdoIEIzLgor
I2lmIENPTVBJTEVSKEdDQ19PUl9DTEFORykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisjcHJh
Z21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXBhcmFtZXRlciIKKyNlbmRpZiAv
LyBDT01QSUxFUihHQ0NfT1JfQ0xBTkcpCisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2Ug
REZHIHsgc3RydWN0IE5vZGU7IH0KKworbmFtZXNwYWNlIEZUTCB7CisKK2VudW0gU2NhbGUgeyBT
Y2FsZU9uZSwgU2NhbGVUd28sIFNjYWxlRm91ciwgU2NhbGVFaWdodCwgU2NhbGVQdHIgfTsKKwor
Y2xhc3MgT3V0cHV0IDogcHVibGljIENvbW1vblZhbHVlcyB7CitwdWJsaWM6CisgICAgT3V0cHV0
KFN0YXRlJik7CisgICAgfk91dHB1dCgpOworCisgICAgdm9pZCBpbml0aWFsaXplKEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkmKTsKKworICAgIHZvaWQgc2V0RnJlcXVlbmN5KGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIG1fZnJlcXVlbmN5ID0gdmFsdWU7CisgICAgfQorCisgICAgTEJhc2lj
QmxvY2sgbmV3QmxvY2soY29uc3QgY2hhciogbmFtZSA9ICIiKTsKKworICAgIExCYXNpY0Jsb2Nr
IGluc2VydE5ld0Jsb2Nrc0JlZm9yZShMQmFzaWNCbG9jayBuZXh0QmxvY2spCisgICAgeworICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dEJsb2NrID0gbV9uZXh0QmxvY2s7CisgICAgICAgIG1f
bmV4dEJsb2NrID0gbmV4dEJsb2NrOworICAgICAgICByZXR1cm4gbGFzdE5leHRCbG9jazsKKyAg
ICB9CisKKyAgICB2b2lkIGFwcGx5QmxvY2tPcmRlcigpOworCisgICAgTEJhc2ljQmxvY2sgYXBw
ZW5kVG8oTEJhc2ljQmxvY2ssIExCYXNpY0Jsb2NrIG5leHRCbG9jayk7CisgICAgdm9pZCBhcHBl
bmRUbyhMQmFzaWNCbG9jayk7CisKKyAgICB2b2lkIHNldE9yaWdpbihERkc6Ok5vZGUqIG5vZGUp
IHsgbV9vcmlnaW4gPSBub2RlOyB9CisgICAgQjM6Ok9yaWdpbiBvcmlnaW4oKSB7IHJldHVybiBC
Mzo6T3JpZ2luKG1fb3JpZ2luKTsgfQorCisgICAgTFZhbHVlIGZyYW1lUG9pbnRlcigpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkZyYW1lUG9pbnRl
ciwgb3JpZ2luKCkpOyB9CisKKyAgICBCMzo6U2xvdEJhc2VWYWx1ZSogbG9ja2VkU3RhY2tTbG90
KHNpemVfdCBieXRlcyk7CisKKyAgICBMVmFsdWUgY29uc3RCb29sKGJvb2wgdmFsdWUpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigp
LCB2YWx1ZSk7IH0KKyAgICBMVmFsdWUgY29uc3RJbnQzMihpbnQzMl90IHZhbHVlKSB7IHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwg
dmFsdWUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBMVmFsdWUgY29uc3RJbnRQ
dHIoVCogdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6Q29uc3RQdHJWYWx1
ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBMVmFsdWUgY29uc3RJbnRQdHIoVCB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpDb25zdFB0clZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZSk7IH0KKyAgICBM
VmFsdWUgY29uc3RJbnQ2NChpbnQ2NF90IHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OkNvbnN0NjRWYWx1ZT4obV9wcm9jLCBvcmlnaW4oKSwgdmFsdWUpOyB9CisgICAgTFZh
bHVlIGNvbnN0RG91YmxlKGRvdWJsZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpDb25zdERvdWJsZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCB2YWx1ZSk7IH0KKworICAg
IExWYWx1ZSBwaGkoTFR5cGUgdHlwZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6UGhpLCB0eXBlLCBvcmlnaW4oKSk7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBQYXJhbXM+CisgICAgTFZhbHVlIHBoaShMVHlwZSwgVmFsdWVGcm9tQmxvY2ss
IFBhcmFtcy4uLiB0aGVSZXN0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgor
ICAgIExWYWx1ZSBwaGkoTFR5cGUsIGNvbnN0IFZlY3RvclR5cGUmKTsKKyAgICB2b2lkIGFkZElu
Y29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2spOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIFBhcmFtcz4KKyAgICB2b2lkIGFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwg
VmFsdWVGcm9tQmxvY2ssIFBhcmFtcy4uLiB0aGVSZXN0KTsKKworICAgIExWYWx1ZSBhZGQoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6QWRkLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZh
bHVlIHN1YihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBl
bmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpTdWIsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7
IH0KKyAgICBMVmFsdWUgbXVsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1f
YmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Ok11bCwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBkaXYoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RGl2LCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGNoaWxsRGl2KExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1f
cHJvYywgQjM6OkNoaWxsRGl2LCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVl
IG1vZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpNb2QsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0K
KyAgICBMVmFsdWUgY2hpbGxNb2QoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4g
bV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Q2hpbGxNb2QsIG9yaWdp
bigpLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgbmVnKExWYWx1ZSk7CisKKyAgICBMVmFs
dWUgZG91YmxlQWRkKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2st
PmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkFkZCwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsgfQorICAgIExWYWx1ZSBkb3VibGVTdWIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6U3ViLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRvdWJsZU11bChMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpNdWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgZG91
YmxlRGl2KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVu
ZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkRpdiwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsg
fQorICAgIExWYWx1ZSBkb3VibGVNb2QoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6TW9kLCBvcmlnaW4o
KSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRvdWJsZU5lZyhMVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIG5lZyh2YWx1ZSk7IH0KKworICAgIExWYWx1ZSBiaXRBbmQoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9j
LCBCMzo6Qml0QW5kLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGJpdE9y
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KG1fcHJvYywgQjM6OkJpdE9yLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9Cisg
ICAgTFZhbHVlIGJpdFhvcihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Js
b2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXRYb3IsIG9yaWdpbigpLCBs
ZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgc2hsKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlNobCwg
b3JpZ2luKCksIGxlZnQsIGNhc3RUb0ludDMyKHJpZ2h0KSk7IH0KKyAgICBMVmFsdWUgYVNocihM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpTU2hyLCBvcmlnaW4oKSwgbGVmdCwgY2FzdFRvSW50MzIocmln
aHQpKTsgfQorICAgIExWYWx1ZSBsU2hyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OlpTaHIsIG9yaWdp
bigpLCBsZWZ0LCBjYXN0VG9JbnQzMihyaWdodCkpOyB9CisgICAgTFZhbHVlIGJpdE5vdChMVmFs
dWUpOworICAgIExWYWx1ZSBsb2dpY2FsTm90KExWYWx1ZSk7CisKKyAgICBMVmFsdWUgY3RsejMy
KExWYWx1ZSBvcGVyYW5kKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpDbHosIG9yaWdpbigpLCBvcGVyYW5kKTsgfQorICAgIExWYWx1ZSBhZGRXaXRo
T3ZlcmZsb3czMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IENSQVNIKCk7IH0KKyAgICBM
VmFsdWUgc3ViV2l0aE92ZXJmbG93MzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyBDUkFT
SCgpOyB9CisgICAgTFZhbHVlIG11bFdpdGhPdmVyZmxvdzMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgQ1JBU0goKTsgfQorICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZsb3c2NChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7IENSQVNIKCk7IH0KKyAgICBMVmFsdWUgc3ViV2l0aE92ZXJm
bG93NjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyBDUkFTSCgpOyB9CisgICAgTFZhbHVl
IG11bFdpdGhPdmVyZmxvdzY0KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgQ1JBU0goKTsg
fQorICAgIExWYWx1ZSBkb3VibGVBYnMoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpBYnMsIG9yaWdpbigpLCB2YWx1ZSk7IH0K
KyAgICBMVmFsdWUgZG91YmxlQ2VpbChMVmFsdWUgb3BlcmFuZCkgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6Q2VpbCwgb3JpZ2luKCksIG9wZXJhbmQp
OyB9CisKKyAgICBMVmFsdWUgZG91YmxlU2luKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGRvdWJsZSAoKnNpbkRvdWJsZSkoZG91YmxlKSA9IHNpbjsKKyAgICAgICAgcmV0dXJuIGNhbGxX
aXRob3V0U2lkZUVmZmVjdHMoQjM6OkRvdWJsZSwgc2luRG91YmxlLCB2YWx1ZSk7CisgICAgfQor
ICAgIExWYWx1ZSBkb3VibGVDb3MoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgZG91Ymxl
ICgqY29zRG91YmxlKShkb3VibGUpID0gY29zOworICAgICAgICByZXR1cm4gY2FsbFdpdGhvdXRT
aWRlRWZmZWN0cyhCMzo6RG91YmxlLCBjb3NEb3VibGUsIHZhbHVlKTsKKyAgICB9CisKKyAgICBM
VmFsdWUgZG91YmxlUG93KExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKQorICAgIHsK
KyAgICAgICAgZG91YmxlICgqcG93RG91YmxlKShkb3VibGUsIGRvdWJsZSkgPSBwb3c7CisgICAg
ICAgIHJldHVybiBjYWxsV2l0aG91dFNpZGVFZmZlY3RzKEIzOjpEb3VibGUsIHBvd0RvdWJsZSwg
eE9wZXJhbmQsIHlPcGVyYW5kKTsKKyAgICB9CisKKyAgICBMVmFsdWUgZG91YmxlUG93aShMVmFs
dWUgeE9wZXJhbmQsIExWYWx1ZSB5T3BlcmFuZCk7CisKKyAgICBMVmFsdWUgZG91YmxlU3FydChM
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJv
YywgQjM6OlNxcnQsIG9yaWdpbigpLCB2YWx1ZSk7IH0KKworICAgIExWYWx1ZSBkb3VibGVMb2co
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgZG91YmxlICgqbG9nRG91YmxlKShkb3VibGUp
ID0gbG9nOworICAgICAgICByZXR1cm4gY2FsbFdpdGhvdXRTaWRlRWZmZWN0cyhCMzo6RG91Ymxl
LCBsb2dEb3VibGUsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBoYXNTZW5zaWJs
ZURvdWJsZVRvSW50KCk7CisgICAgTFZhbHVlIGRvdWJsZVRvSW50KExWYWx1ZSk7CisgICAgTFZh
bHVlIGRvdWJsZVRvVUludChMVmFsdWUpOworCisgICAgTFZhbHVlIHNpZ25FeHQzMlRvNjQoTFZh
bHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2Ms
IEIzOjpTRXh0MzIsIG9yaWdpbigpLCB2YWx1ZSk7IH0KKyAgICBMVmFsdWUgemVyb0V4dChMVmFs
dWUgdmFsdWUsIExUeXBlIHR5cGUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9
PSB0eXBlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICByZXR1cm4gbV9ibG9j
ay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6WkV4dDMyLCBvcmlnaW4oKSwgdmFs
dWUpOworICAgIH0KKyAgICBMVmFsdWUgemVyb0V4dFB0cihMVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IHplcm9FeHQodmFsdWUsIEIzOjpJbnQ2NCk7IH0KKyAgICBMVmFsdWUgaW50VG9Eb3VibGUoTFZh
bHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2Ms
IEIzOjpJVG9ELCBvcmlnaW4oKSwgdmFsdWUpOyB9CisgICAgTFZhbHVlIHVuc2lnbmVkVG9Eb3Vi
bGUoTFZhbHVlKTsKKyAgICBMVmFsdWUgY2FzdFRvSW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHZhbHVlLT50eXBlKCkgPT0gQjM6OkludDMyID8gdmFsdWUgOgorICAg
ICAgICAgICAgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6VHJ1bmMs
IG9yaWdpbigpLCB2YWx1ZSk7CisgICAgfQorICAgIExWYWx1ZSBkb3VibGVUb0Zsb2F0KExWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBC
Mzo6RG91YmxlVG9GbG9hdCwgb3JpZ2luKCksIHZhbHVlKTsgfQorICAgIExWYWx1ZSBmbG9hdFRv
RG91YmxlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1
ZT4obV9wcm9jLCBCMzo6RmxvYXRUb0RvdWJsZSwgb3JpZ2luKCksIHZhbHVlKTsgfQorICAgIExW
YWx1ZSBiaXRDYXN0KExWYWx1ZSwgTFR5cGUpOworICAgIExWYWx1ZSBmcm91bmQoTFZhbHVlIGRv
dWJsZVZhbHVlKTsKKworICAgIExWYWx1ZSBsb2FkKFR5cGVkUG9pbnRlciwgTFR5cGUpOworICAg
IHZvaWQgc3RvcmUoTFZhbHVlLCBUeXBlZFBvaW50ZXIpOworCisgICAgTFZhbHVlIGxvYWQ4U2ln
bkV4dDMyKFR5cGVkUG9pbnRlcik7CisgICAgTFZhbHVlIGxvYWQ4WmVyb0V4dDMyKFR5cGVkUG9p
bnRlcik7CisgICAgTFZhbHVlIGxvYWQxNlNpZ25FeHQzMihUeXBlZFBvaW50ZXIpOworICAgIExW
YWx1ZSBsb2FkMTZaZXJvRXh0MzIoVHlwZWRQb2ludGVyKTsKKyAgICBMVmFsdWUgbG9hZDMyKFR5
cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2FkKHBvaW50ZXIsIEIzOjpJbnQzMik7IH0K
KyAgICBMVmFsdWUgbG9hZDY0KFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2FkKHBv
aW50ZXIsIEIzOjpJbnQ2NCk7IH0KKyAgICBMVmFsdWUgbG9hZFB0cihUeXBlZFBvaW50ZXIgcG9p
bnRlcikgeyByZXR1cm4gbG9hZChwb2ludGVyLCBCMzo6cG9pbnRlclR5cGUoKSk7IH0KKyAgICBM
VmFsdWUgbG9hZEZsb2F0KFR5cGVkUG9pbnRlciBwb2ludGVyKSB7IHJldHVybiBsb2FkKHBvaW50
ZXIsIEIzOjpGbG9hdCk7IH0KKyAgICBMVmFsdWUgbG9hZERvdWJsZShUeXBlZFBvaW50ZXIgcG9p
bnRlcikgeyByZXR1cm4gbG9hZChwb2ludGVyLCBCMzo6RG91YmxlKTsgfQorICAgIHZvaWQgc3Rv
cmUzMkFzOChMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKTsKKyAgICB2b2lkIHN0
b3JlMzJBczE2KExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIpOworICAgIHZvaWQg
c3RvcmUzMihMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gQjM6OkludDMyKTsKKyAgICAgICAgc3RvcmUodmFs
dWUsIHBvaW50ZXIpOworICAgIH0KKyAgICB2b2lkIHN0b3JlNjQoTFZhbHVlIHZhbHVlLCBUeXBl
ZFBvaW50ZXIgcG9pbnRlcikKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09
IEIzOjpJbnQ2NCk7CisgICAgICAgIHN0b3JlKHZhbHVlLCBwb2ludGVyKTsKKyAgICB9CisgICAg
dm9pZCBzdG9yZVB0cihMVmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gQjM6OnBvaW50ZXJUeXBlKCkpOworICAg
ICAgICBzdG9yZSh2YWx1ZSwgcG9pbnRlcik7CisgICAgfQorICAgIHZvaWQgc3RvcmVGbG9hdChM
VmFsdWUgdmFsdWUsIFR5cGVkUG9pbnRlciBwb2ludGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHZhbHVlLT50eXBlKCkgPT0gQjM6OkZsb2F0KTsKKyAgICAgICAgc3RvcmUodmFsdWUsIHBvaW50
ZXIpOworICAgIH0KKyAgICB2b2lkIHN0b3JlRG91YmxlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2lu
dGVyIHBvaW50ZXIpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBCMzo6
RG91YmxlKTsKKyAgICAgICAgc3RvcmUodmFsdWUsIHBvaW50ZXIpOworICAgIH0KKworICAgIGVu
dW0gTG9hZFR5cGUgeworICAgICAgICBMb2FkOFNpZ25FeHQzMiwKKyAgICAgICAgTG9hZDhaZXJv
RXh0MzIsCisgICAgICAgIExvYWQxNlNpZ25FeHQzMiwKKyAgICAgICAgTG9hZDE2WmVyb0V4dDMy
LAorICAgICAgICBMb2FkMzIsCisgICAgICAgIExvYWQ2NCwKKyAgICAgICAgTG9hZFB0ciwKKyAg
ICAgICAgTG9hZEZsb2F0LAorICAgICAgICBMb2FkRG91YmxlCisgICAgfTsKKworICAgIExWYWx1
ZSBsb2FkKFR5cGVkUG9pbnRlciwgTG9hZFR5cGUpOworICAgIAorICAgIGVudW0gU3RvcmVUeXBl
IHsKKyAgICAgICAgU3RvcmUzMkFzOCwKKyAgICAgICAgU3RvcmUzMkFzMTYsCisgICAgICAgIFN0
b3JlMzIsCisgICAgICAgIFN0b3JlNjQsCisgICAgICAgIFN0b3JlUHRyLAorICAgICAgICBTdG9y
ZUZsb2F0LAorICAgICAgICBTdG9yZURvdWJsZQorICAgIH07CisKKyAgICB2b2lkIHN0b3JlKExW
YWx1ZSwgVHlwZWRQb2ludGVyLCBTdG9yZVR5cGUpOworCisgICAgTFZhbHVlIGFkZFB0cihMVmFs
dWUgdmFsdWUsIHB0cmRpZmZfdCBpbW1lZGlhdGUgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKCFp
bW1lZGlhdGUpCisgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgIHJldHVybiBhZGQo
dmFsdWUsIGNvbnN0SW50UHRyKGltbWVkaWF0ZSkpOworICAgIH0KKworICAgIC8vIENvbnN0cnVj
dCBhbiBhZGRyZXNzIGJ5IG9mZnNldHRpbmcgYmFzZSBieSB0aGUgcmVxdWVzdGVkIGFtb3VudCBh
bmQgYXNjcmliaW5nCisgICAgLy8gdGhlIHJlcXVlc3RlZCBhYnN0cmFjdCBoZWFwIHRvIGl0Lgor
ICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzKGNvbnN0IEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVl
IGJhc2UsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5cGVk
UG9pbnRlcihoZWFwLCBhZGRQdHIoYmFzZSwgb2Zmc2V0KSk7CisgICAgfQorICAgIC8vIENvbnN0
cnVjdCBhbiBhZGRyZXNzIGJ5IG9mZnNldHRpbmcgYmFzZSBieSB0aGUgYW1vdW50IHNwZWNpZmll
ZCBieSB0aGUgZmllbGQsCisgICAgLy8gYW5kIG9wdGlvbmFsbHkgYW4gYWRkaXRpb25hbCBhbW91
bnQgKHVzZSB0aGlzIHdpdGggY2FyZSksIGFuZCB0aGVuIGNyZWF0aW5nCisgICAgLy8gYSBUeXBl
ZFBvaW50ZXIgd2l0aCB0aGUgZ2l2ZW4gZmllbGQgYXMgdGhlIGhlYXAuCisgICAgVHlwZWRQb2lu
dGVyIGFkZHJlc3MoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkLCBwdHJk
aWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzKGZpZWxkLCBi
YXNlLCBvZmZzZXQgKyBmaWVsZC5vZmZzZXQoKSk7CisgICAgfQorCisgICAgTFZhbHVlIGJhc2VJ
bmRleChMVmFsdWUgYmFzZSwgTFZhbHVlIGluZGV4LCBTY2FsZSwgcHRyZGlmZl90IG9mZnNldCA9
IDApOworCisgICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChjb25zdCBBYnN0cmFjdEhlYXAmIGhl
YXAsIExWYWx1ZSBiYXNlLCBMVmFsdWUgaW5kZXgsIFNjYWxlIHNjYWxlLCBwdHJkaWZmX3Qgb2Zm
c2V0ID0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBUeXBlZFBvaW50ZXIoaGVhcCwgYmFzZUlu
ZGV4KGJhc2UsIGluZGV4LCBzY2FsZSwgb2Zmc2V0KSk7CisgICAgfQorICAgIFR5cGVkUG9pbnRl
ciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIGJhc2UsIExWYWx1
ZSBpbmRleCwgSlNWYWx1ZSBpbmRleEFzQ29uc3RhbnQgPSBKU1ZhbHVlKCksIHB0cmRpZmZfdCBv
ZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhlYXAuYmFzZUluZGV4KCp0aGlzLCBi
YXNlLCBpbmRleCwgaW5kZXhBc0NvbnN0YW50LCBvZmZzZXQpOworICAgIH0KKworICAgIFR5cGVk
UG9pbnRlciBhYnNvbHV0ZSh2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFR5
cGVkUG9pbnRlcihtX2hlYXBzLT5hYnNvbHV0ZVthZGRyZXNzXSwgY29uc3RJbnRQdHIoYWRkcmVz
cykpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkOFNpZ25FeHQzMihMVmFsdWUgYmFzZSwgY29u
c3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4U2lnbkV4dDMyKGFkZHJlc3Mo
YmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBsb2FkOFplcm9FeHQzMihMVmFsdWUgYmFzZSwg
Y29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQ4WmVyb0V4dDMyKGFkZHJl
c3MoYmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBsb2FkMTZTaWduRXh0MzIoTFZhbHVlIGJh
c2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkMTZTaWduRXh0MzIo
YWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgTFZhbHVlIGxvYWQxNlplcm9FeHQzMihMVmFs
dWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQxNlplcm9F
eHQzMihhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICBMVmFsdWUgbG9hZDMyKExWYWx1ZSBi
YXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkgeyByZXR1cm4gbG9hZDMyKGFkZHJlc3Mo
YmFzZSwgZmllbGQpKTsgfQorICAgIExWYWx1ZSBsb2FkNjQoTFZhbHVlIGJhc2UsIGNvbnN0IEFi
c3RyYWN0RmllbGQmIGZpZWxkKSB7IHJldHVybiBsb2FkNjQoYWRkcmVzcyhiYXNlLCBmaWVsZCkp
OyB9CisgICAgTFZhbHVlIGxvYWRQdHIoTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQm
IGZpZWxkKSB7IHJldHVybiBsb2FkUHRyKGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIExW
YWx1ZSBsb2FkRG91YmxlKExWYWx1ZSBiYXNlLCBjb25zdCBBYnN0cmFjdEZpZWxkJiBmaWVsZCkg
eyByZXR1cm4gbG9hZERvdWJsZShhZGRyZXNzKGJhc2UsIGZpZWxkKSk7IH0KKyAgICB2b2lkIHN0
b3JlMzIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYgZmll
bGQpIHsgc3RvcmUzMih2YWx1ZSwgYWRkcmVzcyhiYXNlLCBmaWVsZCkpOyB9CisgICAgdm9pZCBz
dG9yZTY0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIGJhc2UsIGNvbnN0IEFic3RyYWN0RmllbGQmIGZp
ZWxkKSB7IHN0b3JlNjQodmFsdWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIHZvaWQg
c3RvcmVQdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RGaWVsZCYg
ZmllbGQpIHsgc3RvcmVQdHIodmFsdWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsgfQorICAgIHZv
aWQgc3RvcmVEb3VibGUoTFZhbHVlIHZhbHVlLCBMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJhY3RG
aWVsZCYgZmllbGQpIHsgc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3MoYmFzZSwgZmllbGQpKTsg
fQorCisgICAgLy8gRklYTUU6IEV4cGxvcmUgYWRkaW5nIHN1cHBvcnQgZm9yIHZhbHVlIHJhbmdl
IGNvbnN0cmFpbnRzIHRvIEIzLiBNYXliZSBpdCBjb3VsZCBiZSBhcyBzaW1wbGUgYXMgaGF2aW5n
CisgICAgLy8gYSBsb2FkIGluc3RydWN0aW9uIHRoYXQgZ3VhcmFudGVlcyB0aGF0IGl0cyByZXN1
bHQgaXMgbm9uLW5lZ2F0aXZlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTE0NTgKKyAgICB2b2lkIGFzY3JpYmVSYW5nZShMVmFsdWUsIGNvbnN0IFZh
bHVlUmFuZ2UmKSB7IH0KKyAgICBMVmFsdWUgbm9uTmVnYXRpdmUzMihMVmFsdWUgbG9hZEluc3Ry
dWN0aW9uKSB7IHJldHVybiBsb2FkSW5zdHJ1Y3Rpb247IH0KKyAgICBMVmFsdWUgbG9hZDMyTm9u
TmVnYXRpdmUoVHlwZWRQb2ludGVyIHBvaW50ZXIpIHsgcmV0dXJuIGxvYWQzMihwb2ludGVyKTsg
fQorICAgIExWYWx1ZSBsb2FkMzJOb25OZWdhdGl2ZShMVmFsdWUgYmFzZSwgY29uc3QgQWJzdHJh
Y3RGaWVsZCYgZmllbGQpIHsgcmV0dXJuIGxvYWQzMihiYXNlLCBmaWVsZCk7IH0KKworICAgIExW
YWx1ZSBlcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5h
cHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsgfQorICAgIExWYWx1ZSBub3RFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVh
bCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBhYm92ZShMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPiht
X3Byb2MsIEIzOjpBYm92ZSwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBh
Ym92ZU9yRXF1YWwoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+
YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6QWJvdmVFcXVhbCwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiZWxvdyhMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCZWxv
dywgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiZWxvd09yRXF1YWwoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpW
YWx1ZT4obV9wcm9jLCBCMzo6QmVsb3dFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQor
ICAgIExWYWx1ZSBncmVhdGVyVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpHcmVhdGVyVGhhbiwg
b3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBncmVhdGVyVGhhbk9yRXF1YWwo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpWYWx1ZT4obV9wcm9jLCBCMzo6R3JlYXRlckVxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQp
OyB9CisgICAgTFZhbHVlIGxlc3NUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0
dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6Okxlc3NUaGFuLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGxlc3NUaGFuT3JFcXVhbChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZh
bHVlPihtX3Byb2MsIEIzOjpMZXNzRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCByaWdodCk7IH0KKwor
ICAgIExWYWx1ZSBkb3VibGVFcXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpFcXVhbCwgb3JpZ2lu
KCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBkb3VibGVFcXVhbE9yVW5vcmRlcmVkKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
VmFsdWU+KG1fcHJvYywgQjM6OkVxdWFsT3JVbm9yZGVyZWQsIG9yaWdpbigpLCBsZWZ0LCByaWdo
dCk7IH0KKyAgICBMVmFsdWUgZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3By
b2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBk
b3VibGVMZXNzVGhhbihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpMZXNzVGhhbiwgb3JpZ2luKCksIGxl
ZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBkb3VibGVMZXNzVGhhbk9yRXF1YWwoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6TGVzc0VxdWFsLCBvcmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZh
bHVlIGRvdWJsZUdyZWF0ZXJUaGFuKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJu
IG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6VmFsdWU+KG1fcHJvYywgQjM6OkdyZWF0ZXJUaGFuLCBv
cmlnaW4oKSwgbGVmdCwgcmlnaHQpOyB9CisgICAgTFZhbHVlIGRvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmRO
ZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpHcmVhdGVyRXF1YWwsIG9yaWdpbigpLCBsZWZ0LCBy
aWdodCk7IH0KKyAgICBMVmFsdWUgZG91YmxlTm90RXF1YWxBbmRPcmRlcmVkKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxvZ2ljYWxOb3QoZG91YmxlRXF1YWxPclVub3JkZXJl
ZChsZWZ0LCByaWdodCkpOyB9CisgICAgTFZhbHVlIGRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gbG9naWNhbE5vdChkb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpKTsgfQorICAgIExWYWx1ZSBkb3VibGVMZXNzVGhh
bk9yRXF1YWxPclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBs
b2dpY2FsTm90KGRvdWJsZUdyZWF0ZXJUaGFuKGxlZnQsIHJpZ2h0KSk7IH0KKyAgICBMVmFsdWUg
ZG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBsb2dpY2FsTm90KGRvdWJsZUxlc3NUaGFuT3JFcXVhbChsZWZ0LCByaWdodCkpOyB9
CisgICAgTFZhbHVlIGRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGxvZ2ljYWxOb3QoZG91YmxlTGVzc1RoYW4obGVm
dCwgcmlnaHQpKTsgfQorCisgICAgTFZhbHVlIGlzWmVybzMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4obV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdp
bigpLCB2YWx1ZSwgaW50MzJaZXJvKTsgfQorICAgIExWYWx1ZSBub3RaZXJvMzIoTFZhbHVlIHZh
bHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpO
b3RFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQzMlplcm8pOyB9CisgICAgTFZhbHVlIGlzWmVy
bzY0KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpWYWx1ZT4o
bV9wcm9jLCBCMzo6RXF1YWwsIG9yaWdpbigpLCB2YWx1ZSwgaW50NjRaZXJvKTsgfQorICAgIExW
YWx1ZSBub3RaZXJvNjQoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8
QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpOb3RFcXVhbCwgb3JpZ2luKCksIHZhbHVlLCBpbnQ2NFpl
cm8pOyB9CisgICAgTFZhbHVlIGlzTnVsbChMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGlzWmVybzY0
KHZhbHVlKTsgfQorICAgIExWYWx1ZSBub3ROdWxsKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gbm90
WmVybzY0KHZhbHVlKTsgfQorCisgICAgTFZhbHVlIHRlc3RJc1plcm8zMihMVmFsdWUgdmFsdWUs
IExWYWx1ZSBtYXNrKSB7IHJldHVybiBpc1plcm8zMihiaXRBbmQodmFsdWUsIG1hc2spKTsgfQor
ICAgIExWYWx1ZSB0ZXN0Tm9uWmVybzMyKExWYWx1ZSB2YWx1ZSwgTFZhbHVlIG1hc2spIHsgcmV0
dXJuIG5vdFplcm8zMihiaXRBbmQodmFsdWUsIG1hc2spKTsgfQorICAgIExWYWx1ZSB0ZXN0SXNa
ZXJvNjQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gaXNaZXJvNjQoYml0QW5k
KHZhbHVlLCBtYXNrKSk7IH0KKyAgICBMVmFsdWUgdGVzdE5vblplcm82NChMVmFsdWUgdmFsdWUs
IExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0K
KyAgICBMVmFsdWUgdGVzdElzWmVyb1B0cihMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJl
dHVybiBpc051bGwoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KKyAgICBMVmFsdWUgdGVzdE5vblpl
cm9QdHIoTFZhbHVlIHZhbHVlLCBMVmFsdWUgbWFzaykgeyByZXR1cm4gbm90TnVsbChiaXRBbmQo
dmFsdWUsIG1hc2spKTsgfQorCisgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFsdWUsIExWYWx1
ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6
OlZhbHVlPihtX3Byb2MsIEIzOjpTZWxlY3QsIG9yaWdpbigpLCB2YWx1ZSwgdGFrZW4sIG5vdFRh
a2VuKTsgfQorICAgIExWYWx1ZSBleHRyYWN0VmFsdWUoTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQg
aW5kZXgpIHsgQ1JBU0goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4K
KyAgICBMVmFsdWUgY2FsbChMVHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3Rv
clR5cGUmIHZlY3RvcikKKyAgICB7CisgICAgICAgIEIzOjpDQ2FsbFZhbHVlKiByZXN1bHQgPSBt
X2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNDYWxsVmFsdWU+KG1fcHJvYywgdHlwZSwgb3JpZ2luKCks
IGZ1bmN0aW9uKTsKKyAgICAgICAgcmVzdWx0LT5jaGlsZHJlbigpLmFwcGVuZFZlY3Rvcih2ZWN0
b3IpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBMVmFsdWUgY2FsbChMVHlw
ZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxCMzo6
Q0NhbGxWYWx1ZT4obV9wcm9jLCB0eXBlLCBvcmlnaW4oKSwgZnVuY3Rpb24pOyB9CisgICAgTFZh
bHVlIGNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSkgeyByZXR1
cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDQ2FsbFZhbHVlPihtX3Byb2MsIHR5cGUsIG9yaWdp
bigpLCBmdW5jdGlvbiwgYXJnMSk7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgor
ICAgIExWYWx1ZSBjYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEs
IEFyZ3MuLi4gYXJncykgeyByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDQ2FsbFZhbHVl
PihtX3Byb2MsIHR5cGUsIG9yaWdpbigpLCBmdW5jdGlvbiwgYXJnMSwgYXJncy4uLik7IH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KKyAgICBMVmFsdWUgb3BlcmF0aW9u
KEZ1bmN0aW9uVHlwZSBmdW5jdGlvbikgeyByZXR1cm4gY29uc3RJbnRQdHIoYml0d2lzZV9jYXN0
PHZvaWQqPihmdW5jdGlvbikpOyB9CisKKyAgICB2b2lkIGp1bXAoTEJhc2ljQmxvY2sgZGVzdGlu
YXRpb24pIHsgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb250cm9sVmFsdWU+KG1fcHJvYywgQjM6
Okp1bXAsIG9yaWdpbigpLCBCMzo6RnJlcXVlbnRlZEJsb2NrKGRlc3RpbmF0aW9uKSk7IH0KKyAg
ICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgV2VpZ2h0
IHRha2VuV2VpZ2h0LCBMQmFzaWNCbG9jayBub3RUYWtlbiwgV2VpZ2h0IG5vdFRha2VuV2VpZ2h0
KTsKKyAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0YWtl
biwgV2VpZ2h0ZWRUYXJnZXQgbm90VGFrZW4pCisgICAgeworICAgICAgICBicmFuY2goY29uZGl0
aW9uLCB0YWtlbi50YXJnZXQoKSwgdGFrZW4ud2VpZ2h0KCksIG5vdFRha2VuLnRhcmdldCgpLCBu
b3RUYWtlbi53ZWlnaHQoKSk7CisgICAgfQorCisgICAgLy8gQnJhbmNoZXMgdG8gYW4gYWxyZWFk
eS1jcmVhdGVkIGhhbmRsZXIgaWYgdHJ1ZSwgImZhbGxzIHRocm91Z2giIGlmIGZhbHNlLiBGYWxs
LXRocm91Z2ggaXMKKyAgICAvLyBzaW11bGF0ZWQgYnkgY3JlYXRpbmcgYSBjb250aW51YXRpb24g
Zm9yIHlvdS4KKyAgICB2b2lkIGNoZWNrKExWYWx1ZSBjb25kaXRpb24sIFdlaWdodGVkVGFyZ2V0
IHRha2VuLCBXZWlnaHQgbm90VGFrZW5XZWlnaHQpOworICAgIAorICAgIC8vIFNhbWUgYXMgY2hl
Y2soKSwgYnV0IHVzZXMgV2VpZ2h0OjppbnZlcnNlKCkgdG8gY29tcHV0ZSB0aGUgbm90VGFrZW5X
ZWlnaHQuCisgICAgdm9pZCBjaGVjayhMVmFsdWUgY29uZGl0aW9uLCBXZWlnaHRlZFRhcmdldCB0
YWtlbik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICB2b2lk
IHN3aXRjaEluc3RydWN0aW9uKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9yVHlwZSYgY2FzZXMs
IExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdoLCBXZWlnaHQgZmFsbFRocm91Z2hXZWlnaHQpCisgICAg
eworICAgICAgICBCMzo6U3dpdGNoVmFsdWUqIHN3aXRjaFZhbHVlID0gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpTd2l0Y2hWYWx1ZT4oCisgICAgICAgICAgICBtX3Byb2MsIG9yaWdpbigpLCB2YWx1
ZSwgQjM6OkZyZXF1ZW50ZWRCbG9jayhmYWxsVGhyb3VnaCkpOworICAgICAgICBmb3IgKGNvbnN0
IFN3aXRjaENhc2UmIHN3aXRjaENhc2UgOiBjYXNlcykgeworICAgICAgICAgICAgaW50NjRfdCB2
YWx1ZSA9IHN3aXRjaENhc2UudmFsdWUoKS0+YXNJbnQoKTsKKyAgICAgICAgICAgIEIzOjpGcmVx
dWVudGVkQmxvY2sgdGFyZ2V0KHN3aXRjaENhc2UudGFyZ2V0KCksIHN3aXRjaENhc2Uud2VpZ2h0
KCkuZnJlcXVlbmN5Q2xhc3MoKSk7CisgICAgICAgICAgICBzd2l0Y2hWYWx1ZS0+YXBwZW5kQ2Fz
ZShCMzo6U3dpdGNoQ2FzZSh2YWx1ZSwgdGFyZ2V0KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHJldChMVmFsdWUgdmFsdWUpIHsgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb250cm9s
VmFsdWU+KG1fcHJvYywgQjM6OlJldHVybiwgb3JpZ2luKCksIHZhbHVlKTsgfQorCisgICAgdm9p
ZCB1bnJlYWNoYWJsZSgpIHsgbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpDb250cm9sVmFsdWU+KG1f
cHJvYywgQjM6Ok9vcHMsIG9yaWdpbigpKTsgfQorCisgICAgQjM6OkNoZWNrVmFsdWUqIHNwZWN1
bGF0ZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVjaywgb3JpZ2luKCksIHZhbHVlKTsK
KyAgICB9CisKKyAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRlQWRkKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIz
OjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVja0FkZCwgb3JpZ2luKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICB9CisKKyAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRlU3ViKExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3
PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVja1N1Yiwgb3JpZ2luKCksIGxlZnQsIHJp
Z2h0KTsKKyAgICB9CisKKyAgICBCMzo6Q2hlY2tWYWx1ZSogc3BlY3VsYXRlTXVsKExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PEIzOjpDaGVja1ZhbHVlPihtX3Byb2MsIEIzOjpDaGVja011bCwgb3JpZ2luKCksIGxlZnQs
IHJpZ2h0KTsKKyAgICB9CisKKyAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KExU
eXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpQ
YXRjaHBvaW50VmFsdWU+KG1fcHJvYywgdHlwZSwgb3JpZ2luKCkpOworICAgIH0KKworICAgIHZv
aWQgdHJhcCgpCisgICAgeworICAgICAgICBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNvbnRyb2xW
YWx1ZT4obV9wcm9jLCBCMzo6T29wcywgb3JpZ2luKCkpOworICAgIH0KKworICAgIFZhbHVlRnJv
bUJsb2NrIGFuY2hvcihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBCMzo6VXBzaWxvblZh
bHVlKiB1cHNpbG9uID0gbV9ibG9jay0+YXBwZW5kTmV3PEIzOjpVcHNpbG9uVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlRnJvbUJsb2NrKHVwc2ls
b24sIG1fYmxvY2spOworICAgIH0KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI3ByYWdtYSBtYXJr
IC0gU3RhdGVzCisjZW5kaWYKKyAgICBCMzo6UHJvY2VkdXJlJiBtX3Byb2M7CisKKyAgICBERkc6
Ok5vZGUqIG1fb3JpZ2luIHsgbnVsbHB0ciB9OworICAgIExCYXNpY0Jsb2NrIG1fYmxvY2sgeyBu
dWxscHRyIH07CisgICAgTEJhc2ljQmxvY2sgbV9uZXh0QmxvY2sgeyBudWxscHRyIH07CisKKyAg
ICBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5KiBtX2hlYXBzOworCisgICAgZG91YmxlIG1fZnJlcXVl
bmN5IHsgMSB9OworCitwcml2YXRlOgorICAgIE9yZGVyTWFrZXI8TEJhc2ljQmxvY2s+IG1fYmxv
Y2tPcmRlcjsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvbiwgdHlwZW5hbWUu
Li4gQXJncz4KKyAgICBMVmFsdWUgY2FsbFdpdGhvdXRTaWRlRWZmZWN0cyhCMzo6VHlwZSB0eXBl
LCBGdW5jdGlvbiBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIEFyZ3MuLi4gYXJncykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OkNDYWxsVmFsdWU+KG1fcHJvYywg
dHlwZSwgb3JpZ2luKCksIEIzOjpFZmZlY3RzOjpub25lKCksCisgICAgICAgICAgICBtX2Jsb2Nr
LT5hcHBlbmROZXc8QjM6OkNvbnN0UHRyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oZnVuY3Rpb24pKSwKKyAgICAgICAgICAgIGFyZzEsIGFyZ3MuLi4pOworICAg
IH0KKworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgoraW5saW5lIExWYWx1ZSBP
dXRwdXQ6OnBoaShMVHlwZSB0eXBlLCBWYWx1ZUZyb21CbG9jayB2YWx1ZSwgUGFyYW1zLi4uIHRo
ZVJlc3QpCit7CisgICAgTFZhbHVlIHBoaU5vZGUgPSBwaGkodHlwZSk7CisgICAgYWRkSW5jb21p
bmdUb1BoaShwaGlOb2RlLCB2YWx1ZSwgdGhlUmVzdC4uLik7CisgICAgcmV0dXJuIHBoaU5vZGU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CitpbmxpbmUgTFZhbHVlIE91dHB1
dDo6cGhpKExUeXBlIHR5cGUsIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKK3sKKyAgICBMVmFs
dWUgcGhpTm9kZSA9IHBoaSh0eXBlKTsKKyAgICBmb3IgKGNvbnN0IFZhbHVlRnJvbUJsb2NrJiB2
YWx1ZUZyb21CbG9jayA6IHZlY3RvcikKKyAgICAgICAgYWRkSW5jb21pbmdUb1BoaShwaGlOb2Rl
LCB2YWx1ZUZyb21CbG9jayk7CisgICAgcmV0dXJuIHBoaU5vZGU7Cit9CisKK2lubGluZSB2b2lk
IE91dHB1dDo6YWRkSW5jb21pbmdUb1BoaShMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jayB2YWx1
ZSkKK3sKKyAgICB2YWx1ZS52YWx1ZSgpLT5hczxCMzo6VXBzaWxvblZhbHVlPigpLT5zZXRQaGko
cGhpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgoraW5saW5lIHZvaWQgT3V0
cHV0OjphZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGksIFZhbHVlRnJvbUJsb2NrIHZhbHVlLCBQ
YXJhbXMuLi4gdGhlUmVzdCkKK3sKKyAgICBhZGRJbmNvbWluZ1RvUGhpKHBoaSwgdmFsdWUpOwor
ICAgIGFkZEluY29taW5nVG9QaGkocGhpLCB0aGVSZXN0Li4uKTsKK30KKworaW5saW5lIExWYWx1
ZSBPdXRwdXQ6OmJpdENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKQoreworICAgIEFTU0VS
VF9VTlVTRUQodHlwZSwgdHlwZSA9PSBpbnQ2NCB8fCB0eXBlID09IGRvdWJsZVR5cGUpOworICAg
IHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihtX3Byb2MsIEIzOjpCaXR3aXNl
Q2FzdCwgb3JpZ2luKCksIHZhbHVlKTsKK30KKworaW5saW5lIExWYWx1ZSBPdXRwdXQ6OmZyb3Vu
ZChMVmFsdWUgZG91YmxlVmFsdWUpCit7CisgICAgcmV0dXJuIGZsb2F0VG9Eb3VibGUoZG91Ymxl
VG9GbG9hdChkb3VibGVWYWx1ZSkpOworfQorCisjaWYgQ09NUElMRVIoR0NDX09SX0NMQU5HKQor
I3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZiAvLyBDT01QSUxFUihHQ0NfT1JfQ0xB
TkcpCisKKyNkZWZpbmUgRlRMX05FV19CTE9DSyhvdXRwdXQsIG5hbWVBcmd1bWVudHMpIFwKKyAg
ICAoTElLRUxZKCF2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIFwKKyAgICA/IChvdXRwdXQp
Lm5ld0Jsb2NrKCkgXAorICAgIDogKG91dHB1dCkubmV3QmxvY2soKHRvQ1N0cmluZyBuYW1lQXJn
dW1lbnRzKS5kYXRhKCkpKQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEIzT3V0cHV0X2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMs
OCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZUTEIzT3V0cHV0X2gKLSNkZWZp
bmUgRlRMQjNPdXRwdXRfaAorI2lmbmRlZiBGVExPdXRwdXRfaAorI2RlZmluZSBGVExPdXRwdXRf
aAogCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAKQEAgLTUzMiw0ICs1MzIsNCBAQCBpbmxpbmUg
TFZhbHVlIE91dHB1dDo6ZnJvdW5kKExWYWx1ZSBkb3ViCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKIAotI2VuZGlmIC8vIEZUTEIzT3V0cHV0X2gKKyNlbmRpZiAvLyBGVExPdXRwdXRfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>