<?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>156787</bug_id>
          
          <creation_ts>2016-04-20 01:47:05 -0700</creation_ts>
          <short_desc>[GTK] Move GTK+-independent platform code to platform/glib</short_desc>
          <delta_ts>2016-04-20 08:02:54 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Claudio Saavedra">csaavedra</reporter>
          <assigned_to name="Claudio Saavedra">csaavedra</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1185376</commentid>
    <comment_count>0</comment_count>
    <who name="Claudio Saavedra">csaavedra</who>
    <bug_when>2016-04-20 01:47:05 -0700</bug_when>
    <thetext>[GTK] Move GTK+-independent platform code to platform/glib</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185378</commentid>
    <comment_count>1</comment_count>
      <attachid>276813</attachid>
    <who name="Claudio Saavedra">csaavedra</who>
    <bug_when>2016-04-20 01:58:42 -0700</bug_when>
    <thetext>Created attachment 276813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185379</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-20 01:59:42 -0700</bug_when>
    <thetext>Attachment 276813 did not pass style-queue:


ERROR: Source/WebCore/platform/glib/SharedBufferGlib.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/platform/glib/LanguageGlib.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 21 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>1185381</commentid>
    <comment_count>3</comment_count>
      <attachid>276813</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-20 02:21:51 -0700</bug_when>
    <thetext>Comment on attachment 276813
Patch

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

&gt; Source/WebCore/platform/glib/ErrorsGlib.h:21
&gt; +#define ErrorsGlib_h

I&apos;m not sure about this particular rename. This is not the glib implementation of anything, but the error messages used by the GTK port. In this case the Gtk in the name didn&apos;t refer to the GTk library, but the GTK port. I know it&apos;s confusing, but I think ErrorsGlib is more confusing.

&gt; Source/WebCore/platform/glib/LanguageGlib.cpp:57
&gt; +Vector&lt;String&gt; platformUserPreferredLanguages()

Something similar applies here. This is the implementation for the GTK+ port, nothing depends on GLib here.

&gt; Source/WebCore/platform/glib/LoggingGlib.cpp:33
&gt; +String logLevelString()

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185391</commentid>
    <comment_count>4</comment_count>
      <attachid>276816</attachid>
    <who name="Claudio Saavedra">csaavedra</who>
    <bug_when>2016-04-20 04:34:10 -0700</bug_when>
    <thetext>Created attachment 276816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185392</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-20 04:35:00 -0700</bug_when>
    <thetext>Attachment 276816 did not pass style-queue:


ERROR: Source/WebCore/platform/glib/SharedBufferGlib.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 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>1185412</commentid>
    <comment_count>6</comment_count>
      <attachid>276816</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-20 08:02:49 -0700</bug_when>
    <thetext>Comment on attachment 276816
Patch

Clearing flags on attachment: 276816

Committed r199772: &lt;http://trac.webkit.org/changeset/199772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185413</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-20 08:02:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276813</attachid>
            <date>2016-04-20 01:58:42 -0700</date>
            <delta_ts>2016-04-20 04:34:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156787-20160420115901.patch</filename>
            <type>text/plain</type>
            <size>83242</size>
            <attacher name="Claudio Saavedra">csaavedra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NzY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRhYzc5ZjllZWIzYTcz
YjgyZTI5OTgwYTU5NzczZGMwMDAxNmY5OC4uMTc5OWQwMjhhZGFlYWE3ZDM4MDllYWJiYjMwOGFm
OWM4ZWQ3YjIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg0IEBACisyMDE2LTA0LTIwICBDbGF1
ZGlvIFNhYXZlZHJhICA8Y3NhYXZlZHJhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92
ZSBHVEsrLWluZGVwZW5kZW50IHBsYXRmb3JtIGNvZGUgdG8gcGxhdGZvcm0vZ2xpYgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Nzg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgaXMgcGxlbnR5
IG9mIGNvZGUgaW4gcGxhdGZvcm0vZ3RrIHRoYXQgaXMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgR1RL
KyBsaWJyYXJ5LgorICAgICAgICBNb3ZlIHRob3NlIGZpbGVzIHRvIHBsYXRmb3JtL2dsaWIgc28g
dGhhdCB0aGV5IGNhbiBiZSByZXVzZWQgYnkgb3RoZXIgR0xpYi1iYXNlZCBwb3J0cy4KKworICAg
ICAgICBBbHNvIGNsZWFuIHNvbWUgc3R5bGUgd2FybmluZ3MgaW4gdGhvc2UgZmlsZXMuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogTW92ZSB0aGUgZmlsZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ2xpYi9FcnJvcnNHbGliLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6Y2FuY2VsbGVkRXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6YmxvY2tlZEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OmJsb2NrZWRCeUNvbnRlbnRCbG9ja2VyRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fubm90
U2hvd1VSTEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OmludGVycnVwdGVkRm9yUG9saWN5Q2hh
bmdlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKToKKyAgICAgICAgKFdlYkNv
cmU6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6ZG93bmxv
YWROZXR3b3JrRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6ZG93bmxvYWRDYW5jZWxsZWRCeVVz
ZXJFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJpbnRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpwcmludGVy
Tm90Rm91bmRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjppbnZhbGlkUGFnZVJhbmdlVG9Qcmlu
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9FcnJvcnNHbGliLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmguCisgICAgICAgICogcGxhdGZv
cm0vZ2xpYi9FdmVudExvb3BHbGliLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRMb29w
OjpjeWNsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OnVuZXNjYXBlZEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaWxlbmFtZUZvckRpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmlsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVGaWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNv
cmU6OmdldEZpbGVTdGF0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldEZpbGVDcmVhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RmlsZU1ldGFkYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAgICAg
IChXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6aG9tZURp
cmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6cGF0aEdldEZpbGVOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OmFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpzaGFyZWRSZXNvdXJjZXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFZvbHVtZUZyZWVT
aXplRm9yUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6b3BlblRlbXBvcmFy
eUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlbkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
Y2xvc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnNlZWtGaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRGcm9tRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjp1bmxvYWRNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZExpbmtP
ckNvcHlGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xpYi5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUdsaWI6OkdhbWVwYWREZXZpY2VHbGliKToK
KyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VHbGliOjp+R2FtZXBhZERldmljZUdsaWIp
OgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUdsaWI6OnJlYWRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6OkdhbWVwYWRzR2xpYik6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkc0dsaWI6On5HYW1lcGFkc0dsaWIpOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZHNHbGliOjpyZWdpc3RlckRldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
c0dsaWI6OnVucmVnaXN0ZXJEZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGli
Ojp1cGRhdGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6Om9u
VUV2ZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGliOjppc0dhbWVw
YWREZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6c2FtcGxlR2FtZXBhZHMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dsaWIvTGFuZ3VhZ2VHbGliLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjpwbGF0
Zm9ybUxhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtVXNlclByZWZlcnJlZExh
bmd1YWdlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9Mb2dnaW5nR2xpYi5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpsb2dMZXZlbFN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9T
aGFyZWRCdWZmZXJHbGliLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVy
OjpjcmVhdGVGcm9tUmVhZGluZ0ZpbGUpOgorCiAyMDE2LTA0LTE5ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxOTg3ODIp
OiBTSE9VTEQgTkVWRVIgQkUgUkVBQ0hFRCBmYWlsdXJlIGluIEltYWdlU291cmNlOjpzZXREYXRh
IHNpbmNlIHIxOTg3ODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9w
by9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nCmlu
ZGV4IDA3MDVjZmI1NTc4NTlkNjY0NGEyY2Y2OGM2MjI1ZTEyOWU4MWU5NjEuLjIxZjU2OGE0ZjI3
NzdjNzU4YzAxZjAzMTE0ZTE3ZmVjYTk5NmE1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9wby9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL3BvL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA0LTIwICBDbGF1ZGlvIFNh
YXZlZHJhICA8Y3NhYXZlZHJhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92ZSBHVEsr
LWluZGVwZW5kZW50IHBsYXRmb3JtIGNvZGUgdG8gcGxhdGZvcm0vZ2xpYgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Nzg3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQT1RGSUxFUy5pbjogVXBkYXRl
IEVycm9yc0dsaWIuY3BwIGxvY2F0aW9uLgorCiAyMDE2LTA0LTE4ICBUb20gVHJ5Zm9uaWRpcyAg
PHRvbXRyeWZAZ21haWwuY29tPgogCiAgICAgICAgIFtsMTBuXSBVcGRhdGVkIEdyZWVrIHRyYW5z
bGF0aW9uIG9mIFdlYktpdEdUSysKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5ZGM0NzE3ZTZhODk4NmIxMDYxZDk3
ODkwOTc3OWY4ZWRiYzRmNjc3Li4zYzI1OTBiNTQwNjZjMmI2NmY2YzgxOWQ4Mjg0NDM5MWFjZDg5
Y2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTYtMDQtMjAgIENsYXVkaW8gU2Fh
dmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBNb3ZlIEdUSyst
aW5kZXBlbmRlbnQgcGxhdGZvcm0gY29kZSB0byBwbGF0Zm9ybS9nbGliCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY3ODcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdGhlIGxvY2F0aW9uIGFu
ZCBuYW1lIG9mIG1vdmVkIGluY2x1ZGUgaGVhZGVycy4KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcDoKKyAgICAgICAgKiBQ
bGF0Zm9ybUdUSy5jbWFrZTogQWRkIFdlYkNvcmUvcGxhdGZvcm0vZ2xpYiB0byB0aGUgaW5jbHVk
ZSBsaXN0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNz
L05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291cEN1c3RvbVByb3RvY29sUmVxdWVz
dE1hbmFnZXIuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dl
YkVycm9yc0d0ay5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmlu
dE9wZXJhdGlvbkd0ay5jcHA6CisKIDIwMTYtMDQtMTkgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2UgYnVpbGQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCmluZGV4IDk1MDhjZTRlZjk2YTRmMDAyNWUwNGFjNTI5YjJhYzE5NWE2
MGMyZjMuLjAwZGI0OTc0NDE0MzI3Y2U0ZTQ3ZmI0OWY5MWRmY2ZkOGVmZDVlNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCkBAIC04NSw5ICs4NSwxNiBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVl
MS5jcHAKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5j
cHAKIAorICAgIHBsYXRmb3JtL2dsaWIvRXJyb3JzR2xpYi5jcHAKKyAgICBwbGF0Zm9ybS9nbGli
L0V2ZW50TG9vcEdsaWIuY3BwCisgICAgcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAK
KyAgICBwbGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xpYi5jcHAKKyAgICBwbGF0Zm9ybS9nbGliL0xh
bmd1YWdlR2xpYi5jcHAKKyAgICBwbGF0Zm9ybS9nbGliL0xvZ2dpbmdHbGliLmNwcAogICAgIHBs
YXRmb3JtL2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAKICAgICBwbGF0Zm9ybS9nbGliL0tleWVk
RW5jb2RlckdsaWIuY3BwCiAgICAgcGxhdGZvcm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVkVGltZXJH
TGliLmNwcAorICAgIHBsYXRmb3JtL2dsaWIvU2hhcmVkQnVmZmVyR2xpYi5jcHAKIAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuY3BwCkBAIC0xMzYsMTUgKzE0Myw4IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3Bs
YXlYMTEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVSZXNvdXJjZS5jcHAK
IAotICAgIHBsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwCi0gICAgcGxhdGZvcm0vZ3RrL0V2ZW50
TG9vcEd0ay5jcHAKLSAgICBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKLSAgICBwbGF0
Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3BwCi0gICAgcGxhdGZvcm0vZ3RrL0xhbmd1YWdlR3RrLmNw
cAotICAgIHBsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9NSU1F
VHlwZVJlZ2lzdHJ5R3RrLmNwcAogICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxBbmltYXRvckd0ay5j
cHAKLSAgICBwbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcAogICAgIHBsYXRmb3JtL2d0
ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5j
cHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9FcnJvcnNHbGli
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvRXJyb3JzR2xpYi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzVkNDNiZjJjZGI3MDg0MWExZGM5YmE4MjAwMTkwMDZkYTRlNGEzZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvRXJyb3JzR2xpYi5jcHAKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVycm9yc0dsaWIuaCIKKworI2luY2x1ZGUgIlJl
c291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZXNvdXJjZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpbk5ldHdvcmssIE5ldHdvcmtFcnJvckNhbmNlbGxlZCwgcmVxdWVzdC51cmwoKSwgXygiTG9h
ZCByZXF1ZXN0IGNhbmNlbGxlZCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0
LCByZXF1ZXN0LnVybCgpLCBfKCJOb3QgYWxsb3dlZCB0byB1c2UgcmVzdHJpY3RlZCBuZXR3b3Jr
IHBvcnQiKSk7Cit9CisKK1Jlc291cmNlRXJyb3IgYmxvY2tlZEJ5Q29udGVudEJsb2NrZXJFcnJv
cihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoZXJyb3JEb21haW5Qb2xpY3ksIFBvbGljeUVycm9yQmxvY2tlZEJ5Q29udGVudEJsb2Nr
ZXIsIHJlcXVlc3QudXJsKCksIF8oIkJsb2NrZWQgYnkgY29udGVudCBibG9ja2VyIikpOworfQor
CitSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ks
IFBvbGljeUVycm9yQ2Fubm90U2hvd1VSTCwgcmVxdWVzdC51cmwoKSwgXygiVVJMIGNhbm5vdCBi
ZSBzaG93biIpKTsKK30KKworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5n
ZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gUmVz
b3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JGcmFtZUxvYWRJbnRlcnJ1
cHRlZEJ5UG9saWN5Q2hhbmdlLCByZXF1ZXN0LnVybCgpLCBfKCJGcmFtZSBsb2FkIHdhcyBpbnRl
cnJ1cHRlZCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpblBvbGljeSwgUG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5cGUsIHJl
c3BvbnNlLnVybCgpLCBfKCJDb250ZW50IHdpdGggdGhlIHNwZWNpZmllZCBNSU1FIHR5cGUgY2Fu
bm90IGJlIHNob3duIikpOworfQorCitSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJv
cihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICByZXR1cm4gUmVzb3Vy
Y2VFcnJvcihlcnJvckRvbWFpbk5ldHdvcmssIE5ldHdvcmtFcnJvckZpbGVEb2VzTm90RXhpc3Qs
IHJlc3BvbnNlLnVybCgpLCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0IikpOworfQorCitSZXNvdXJj
ZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QbHVnaW4s
IFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQsIHJlc3BvbnNlLnVybCgpLCBfKCJQbHVnaW4gd2ls
bCBoYW5kbGUgbG9hZCIpKTsKK30KKworUmVzb3VyY2VFcnJvciBkb3dubG9hZE5ldHdvcmtFcnJv
cihjb25zdCBSZXNvdXJjZUVycm9yJiBuZXR3b3JrRXJyb3IpCit7CisgICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoZXJyb3JEb21haW5Eb3dubG9hZCwgRG93bmxvYWRFcnJvck5ldHdvcmssIG5ldHdv
cmtFcnJvci5mYWlsaW5nVVJMKCksIG5ldHdvcmtFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigp
KTsKK30KKworUmVzb3VyY2VFcnJvciBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVycm9yKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KGVycm9yRG9tYWluRG93bmxvYWQsIERvd25sb2FkRXJyb3JDYW5jZWxsZWRCeVVzZXIsIHJlc3Bv
bnNlLnVybCgpLCBfKCJVc2VyIGNhbmNlbGxlZCB0aGUgZG93bmxvYWQiKSk7Cit9CisKK1Jlc291
cmNlRXJyb3IgZG93bmxvYWREZXN0aW5hdGlvbkVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gUmVz
b3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBEb3dubG9hZEVycm9yRGVzdGluYXRpb24s
IHJlc3BvbnNlLnVybCgpLCBlcnJvck1lc3NhZ2UpOworfQorCitSZXNvdXJjZUVycm9yIHByaW50
RXJyb3IoY29uc3QgVVJMJiBmYWlsaW5nVVJMLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkK
K3sKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblByaW50LCBQcmludEVycm9y
R2VuZXJhbCwgZmFpbGluZ1VSTCwgZXJyb3JNZXNzYWdlKTsKK30KKworUmVzb3VyY2VFcnJvciBw
cmludGVyTm90Rm91bmRFcnJvcihjb25zdCBVUkwmIGZhaWxpbmdVUkwpCit7CisgICAgcmV0dXJu
IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvclByaW50ZXJOb3RGb3Vu
ZCwgZmFpbGluZ1VSTCwgXygiUHJpbnRlciBub3QgZm91bmQiKSk7Cit9CisKK1Jlc291cmNlRXJy
b3IgaW52YWxpZFBhZ2VSYW5nZVRvUHJpbnQoY29uc3QgVVJMJiBmYWlsaW5nVVJMKQoreworICAg
IHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUHJpbnQsIFByaW50RXJyb3JJbnZhbGlk
UGFnZVJhbmdlLCBmYWlsaW5nVVJMLCBfKCJJbnZhbGlkIHBhZ2UgcmFuZ2UiKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dsaWIvRXJyb3JzR2xpYi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9FcnJvcnNH
bGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjQzZWJiZWNjZTAwZDM1MTlkZmIyMGJhOTdlOGM1MmY5NTVjY2Fi
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvRXJyb3Jz
R2xpYi5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmbmRlZiBFcnJvcnNHbGliX2gKKyNkZWZpbmUgRXJyb3JzR2xpYl9oCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZXNvdXJjZUVycm9yOworY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OworY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKK2NsYXNzIFVSTDsKKworY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5OZXR3
b3JrID0gIldlYktpdE5ldHdvcmtFcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFp
blBvbGljeSA9ICJXZWJLaXRQb2xpY3lFcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBlcnJvckRv
bWFpblBsdWdpbiA9ICJXZWJLaXRQbHVnaW5FcnJvciI7Citjb25zdCBjaGFyKiBjb25zdCBlcnJv
ckRvbWFpbkRvd25sb2FkID0gIldlYktpdERvd25sb2FkRXJyb3IiOworY29uc3QgY2hhciogY29u
c3QgZXJyb3JEb21haW5QcmludCA9ICJXZWJLaXRQcmludEVycm9yIjsKKworZW51bSBOZXR3b3Jr
RXJyb3IgeworICAgIE5ldHdvcmtFcnJvckZhaWxlZCA9IDM5OSwKKyAgICBOZXR3b3JrRXJyb3JU
cmFuc3BvcnQgPSAzMDAsCisgICAgTmV0d29ya0Vycm9yVW5rbm93blByb3RvY29sID0gMzAxLAor
ICAgIE5ldHdvcmtFcnJvckNhbmNlbGxlZCA9IDMwMiwKKyAgICBOZXR3b3JrRXJyb3JGaWxlRG9l
c05vdEV4aXN0ID0gMzAzCit9OworCisvLyBTeW5jJ2Qgd2l0aCBNYWMncyBXZWJLaXQgRXJyb3Jz
LgorZW51bSBQb2xpY3lFcnJvciB7CisgICAgUG9saWN5RXJyb3JGYWlsZWQgPSAxOTksCisgICAg
UG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5cGUgPSAxMDAsCisgICAgUG9saWN5RXJyb3JDYW5u
b3RTaG93VVJMID0gMTAxLAorICAgIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBv
bGljeUNoYW5nZSA9IDEwMiwKKyAgICBQb2xpY3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0
ID0gMTAzLAorICAgIFBvbGljeUVycm9yQmxvY2tlZEJ5Q29udGVudEJsb2NrZXIgPSAxMDQsCit9
OworCitlbnVtIFBsdWdpbkVycm9yIHsKKyAgICBQbHVnaW5FcnJvckZhaWxlZCA9IDI5OSwKKyAg
ICBQbHVnaW5FcnJvckNhbm5vdEZpbmRQbHVnaW4gPSAyMDAsCisgICAgUGx1Z2luRXJyb3JDYW5u
b3RMb2FkUGx1Z2luID0gMjAxLAorICAgIFBsdWdpbkVycm9ySmF2YVVuYXZhaWxhYmxlID0gMjAy
LAorICAgIFBsdWdpbkVycm9yQ29ubmVjdGlvbkNhbmNlbGxlZCA9IDIwMywKKyAgICBQbHVnaW5F
cnJvcldpbGxIYW5kbGVMb2FkID0gMjA0Cit9OworCitlbnVtIERvd25sb2FkRXJyb3IgeworICAg
IERvd25sb2FkRXJyb3JOZXR3b3JrID0gNDk5LAorICAgIERvd25sb2FkRXJyb3JDYW5jZWxsZWRC
eVVzZXIgPSA0MDAsCisgICAgRG93bmxvYWRFcnJvckRlc3RpbmF0aW9uID0gNDAxCit9OworCitl
bnVtIFByaW50RXJyb3IgeworICAgIFByaW50RXJyb3JHZW5lcmFsID0gNTk5LAorICAgIFByaW50
RXJyb3JQcmludGVyTm90Rm91bmQgPSA1MDAsCisgICAgUHJpbnRFcnJvckludmFsaWRQYWdlUmFu
Z2UgPSA1MDEKK307CisKK1Jlc291cmNlRXJyb3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik7CitSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgYmxvY2tlZEJ5Q29udGVudEJsb2NrZXJFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKTsKK1Jlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGlj
eUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworUmVzb3VyY2VFcnJvciBjYW5u
b3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNvdXJjZUVy
cm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CitSZXNv
dXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZE5ldHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVy
cm9yJik7CitSZXNvdXJjZUVycm9yIGRvd25sb2FkQ2FuY2VsbGVkQnlVc2VyRXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOworUmVzb3VyY2VFcnJvciBkb3dubG9hZERlc3RpbmF0aW9uRXJy
b3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsK
K1Jlc291cmNlRXJyb3IgcHJpbnRFcnJvcihjb25zdCBVUkwmIGZhaWxpbmdVUkwsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKTsKK1Jlc291cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5kRXJyb3Io
Y29uc3QgVVJMJiBmYWlsaW5nVVJMKTsKK1Jlc291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5nZVRv
UHJpbnQoY29uc3QgVVJMJiBmYWlsaW5nVVJMKTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvRXZlbnRMb29wR2xpYi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nbGliL0V2ZW50TG9vcEdsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlZjdi
NWNiNzdiOTQ0ZmJlMDU4MTg0Zjg2MTQ0MDUyYWU2YTUyMmEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0V2ZW50TG9vcEdsaWIuY3BwCkBAIC0wLDAgKzEs
MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRXZlbnRMb29wOjpjeWNsZSgpCit7CisgICAgZ19t
YWluX2NvbnRleHRfaXRlcmF0aW9uKE5VTEwsIEZBTFNFKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1HbGli
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41ODE4OGZmMjUwMGZiZTYyMjI5N2NlZmMxZTU0MjQzNmNkYmU3ODA4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9GaWxlU3lz
dGVtR2xpYi5jcHAKQEAgLTAsMCArMSwzNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBD
b2xsYWJvcmEsIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGaWxlU3lzdGVtLmgiCisKKyNpbmNsdWRlICJGaWxlTWV0YWRhdGEuaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlVVSUQuaCIKKyNpbmNsdWRlIDxnaW8v
Z2lvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvR0xpYlV0aWxpdGllcy5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKy8qIE9uIGxpbnV4IGZpbGUgbmFtZXMgYXJlIGp1c3QgcmF3IGJ5dGVz
LCBzbyBhbHNvIHN0cmluZ3MgdGhhdCBjYW5ub3QgYmUgZW5jb2RlZCBpbiBhbnkgd2F5CisgKiBh
cmUgdmFsaWQgZmlsZSBuYW1lcy4gVGhpcyBtZWFuIHRoYXQgd2UgY2Fubm90IGp1c3Qgc3RvcmUg
YSBmaWxlIG5hbWUgYXMtaXMgaW4gYSBTdHJpbmcKKyAqIGJ1dCB3ZSBoYXZlIHRvIGVzY2FwZSBp
dC4KKyAqIE9uIFdpbmRvd3MgdGhlIEdMaWIgZmlsZSBuYW1lIGVuY29kaW5nIGlzIGFsd2F5cyBV
VEYtOCBzbyB3ZSBjYW4gb3B0aW1pemUgdGhpcyBjYXNlLiAqLworU3RyaW5nIGZpbGVuYW1lVG9T
dHJpbmcoY29uc3QgY2hhciogZmlsZW5hbWUpCit7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChmaWxlbmFtZSk7CisjZWxzZQorICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGVzY2Fw
ZWRTdHJpbmcoZ191cmlfZXNjYXBlX3N0cmluZyhmaWxlbmFtZSwgIi86IiwgZmFsc2UpKTsKKyAg
ICByZXR1cm4gZXNjYXBlZFN0cmluZy5nZXQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgR1VuaXF1
ZVB0cjxjaGFyPiB1bmVzY2FwZWRGaWxlbmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAg
aWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNpZiBPUyhXSU5E
T1dTKQorICAgIHJldHVybiBHVW5pcXVlUHRyPGNoYXI+KGdfc3RyZHVwKHBhdGgudXRmOCgpLmRh
dGEoKSkpOworI2Vsc2UKKyAgICByZXR1cm4gR1VuaXF1ZVB0cjxjaGFyPihnX3VyaV91bmVzY2Fw
ZV9zdHJpbmcocGF0aC51dGY4KCkuZGF0YSgpLCBudWxscHRyKSk7CisjZW5kaWYKK30KKworQ1N0
cmluZyBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQoreworI2lm
IE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIHBhdGgudXRmOCgpOworI2Vsc2UKKyAgICBHVW5pcXVl
UHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOworICAgIHJldHVy
biBmaWxlbmFtZS5nZXQoKTsKKyNlbmRpZgorfQorCisvLyBDb252ZXJ0cyBhIHN0cmluZyB0byBz
b21ldGhpbmcgc3VpdGFibGUgdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLgorU3RyaW5nIGZp
bGVuYW1lRm9yRGlzcGxheShjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyNpZiBPUyhXSU5ET1dT
KQorICAgIHJldHVybiBzdHJpbmc7CisjZWxzZQorICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVu
YW1lID0gdW5lc2NhcGVkRmlsZW5hbWUoc3RyaW5nKTsKKyAgICBpZiAoIWZpbGVuYW1lKQorICAg
ICAgICByZXR1cm4gc3RyaW5nOworCisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZGlzcGxheShnX2Zp
bGVuYW1lX3RvX3V0ZjgoZmlsZW5hbWUuZ2V0KCksIC0xLCBudWxscHRyLCBudWxscHRyLCBudWxs
cHRyKSk7CisgICAgaWYgKCFkaXNwbGF5KQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlzcGxheS5nZXQoKSk7CisjZW5kaWYKK30KKworYm9v
bCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBHVW5pcXVlUHRyPGdjaGFy
PiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOworICAgIHJldHVybiBmaWxlbmFt
ZSA/IGdfZmlsZV90ZXN0KGZpbGVuYW1lLmdldCgpLCBHX0ZJTEVfVEVTVF9FWElTVFMpIDogZmFs
c2U7Cit9CisKK2Jvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKKyAgICBy
ZXR1cm4gZmlsZW5hbWUgPyBnX3JlbW92ZShmaWxlbmFtZS5nZXQoKSkgIT0gLTEgOiBmYWxzZTsK
K30KKworYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsK
KyAgICByZXR1cm4gZmlsZW5hbWUgPyBnX3JtZGlyKGZpbGVuYW1lLmdldCgpKSAhPSAtMSA6IGZh
bHNlOworfQorCitzdGF0aWMgYm9vbCBnZXRGaWxlU3RhdChjb25zdCBTdHJpbmcmIHBhdGgsIEdT
dGF0QnVmKiBzdGF0QnVmZmVyKQoreworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lID0g
dW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGdfc3RhdChmaWxlbmFtZS5nZXQoKSwgc3RhdEJ1ZmZl
cikgIT0gLTE7Cit9CisKK2Jvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
IGxvbmcmIHJlc3VsdFNpemUpCit7CisgICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKKyAgICBpZiAo
IWdldEZpbGVTdGF0KHBhdGgsICZzdGF0UmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmVzdWx0U2l6ZSA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgZ2V0
RmlsZUNyZWF0aW9uVGltZShjb25zdCBTdHJpbmcmLCB0aW1lX3QmKQoreworICAgIC8vIEZJWE1F
OiBJcyB0aGVyZSBhIHdheSB0byByZXRyaWV2ZSBmaWxlIGNyZWF0aW9uIHRpbWUgd2l0aCBHdGsg
b24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBpdD8KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIG1v
ZGlmaWVkVGltZSkKK3sKKyAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OworICAgIGlmICghZ2V0Rmls
ZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBt
b2RpZmllZFRpbWUgPSBzdGF0UmVzdWx0LnN0X210aW1lOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVNZXRhZGF0YSYg
bWV0YWRhdGEpCit7CisgICAgR1N0YXRCdWYgc3RhdFJlc3VsdDsKKyAgICBpZiAoIWdldEZpbGVT
dGF0KHBhdGgsICZzdGF0UmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbWV0
YWRhdGEubW9kaWZpY2F0aW9uVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7CisgICAgbWV0YWRh
dGEubGVuZ3RoID0gc3RhdFJlc3VsdC5zdF9zaXplOworICAgIG1ldGFkYXRhLnR5cGUgPSBTX0lT
RElSKHN0YXRSZXN1bHQuc3RfbW9kZSkgPyBGaWxlTWV0YWRhdGE6OlR5cGVEaXJlY3RvcnkgOiBG
aWxlTWV0YWRhdGE6OlR5cGVGaWxlOworICAgIHJldHVybiB0cnVlOworfQorCitTdHJpbmcgcGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBj
b21wb25lbnQpCit7CisgICAgaWYgKHBhdGguZW5kc1dpdGgoR19ESVJfU0VQQVJBVE9SX1MpKQor
ICAgICAgICByZXR1cm4gcGF0aCArIGNvbXBvbmVudDsKKyAgICByZXR1cm4gcGF0aCArIEdfRElS
X1NFUEFSQVRPUl9TICsgY29tcG9uZW50OworfQorCitib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhj
b25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1
bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKKyAgICByZXR1cm4gZmlsZW5hbWUgPyBnX21rZGlyX3dp
dGhfcGFyZW50cyhmaWxlbmFtZS5nZXQoKSwgU19JUldYVSkgIT0gLTEgOiBmYWxzZTsKK30KKwor
U3RyaW5nIGhvbWVEaXJlY3RvcnlQYXRoKCkKK3sKKyAgICByZXR1cm4gZmlsZW5hbWVUb1N0cmlu
ZyhnX2dldF9ob21lX2RpcigpKTsKK30KKworU3RyaW5nIHBhdGhHZXRGaWxlTmFtZShjb25zdCBT
dHJpbmcmIHBhdGhOYW1lKQoreworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRtcEZpbGVuYW1lID0g
dW5lc2NhcGVkRmlsZW5hbWUocGF0aE5hbWUpOworICAgIGlmICghdG1wRmlsZW5hbWUpCisgICAg
ICAgIHJldHVybiBwYXRoTmFtZTsKKworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGJhc2VOYW1lKGdf
cGF0aF9nZXRfYmFzZW5hbWUodG1wRmlsZW5hbWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChiYXNlTmFtZS5nZXQoKSk7Cit9CisKK0NTdHJpbmcgYXBwbGljYXRpb25EaXJl
Y3RvcnlQYXRoKCkKK3sKKyAgICBDU3RyaW5nIHBhdGggPSBnZXRDdXJyZW50RXhlY3V0YWJsZVBh
dGgoKTsKKyAgICBpZiAoIXBhdGguaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBwYXRoOworCisg
ICAgLy8gSWYgdGhlIGFib3ZlIGZhaWxzLCBjaGVjayB0aGUgUEFUSCBlbnYgdmFyaWFibGUuCisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBjdXJyZW50RXhlUGF0aChnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRo
KGdfZ2V0X3ByZ25hbWUoKSkpOworICAgIGlmICghY3VycmVudEV4ZVBhdGguZ2V0KCkpCisgICAg
ICAgIHJldHVybiBDU3RyaW5nKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRpcm5hbWUoZ19w
YXRoX2dldF9kaXJuYW1lKGN1cnJlbnRFeGVQYXRoLmdldCgpKSk7CisgICAgcmV0dXJuIGRpcm5h
bWUuZ2V0KCk7Cit9CisKK0NTdHJpbmcgc2hhcmVkUmVzb3VyY2VzUGF0aCgpCit7CisgICAgc3Rh
dGljIENTdHJpbmcgY2FjaGVkUGF0aDsKKyAgICBpZiAoIWNhY2hlZFBhdGguaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBjYWNoZWRQYXRoOworCisjaWYgT1MoV0lORE9XUykKKyAgICBITU9EVUxF
IGhtb2R1bGUgPSAwOworICAgIEdldE1vZHVsZUhhbmRsZUV4QShHRVRfTU9EVUxFX0hBTkRMRV9F
WF9GTEFHX0ZST01fQUREUkVTUywgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2hhcmVkUmVzb3Vy
Y2VzUGF0aCksICZobW9kdWxlKTsKKworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHJ1bnRpbWVEaXIo
Z193aW4zMl9nZXRfcGFja2FnZV9pbnN0YWxsYXRpb25fZGlyZWN0b3J5X29mX21vZHVsZShobW9k
dWxlKSk7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShy
dW50aW1lRGlyLmdldCgpLCAic2hhcmUiLCAid2Via2l0Z3RrLSIgV0VCS0lUR1RLX0FQSV9WRVJT
SU9OX1NUUklORywgTlVMTCkpOworI2Vsc2UKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBkYXRhUGF0
aChnX2J1aWxkX2ZpbGVuYW1lKERBVEFfRElSLCAid2Via2l0Z3RrLSIgV0VCS0lUR1RLX0FQSV9W
RVJTSU9OX1NUUklORywgTlVMTCkpOworI2VuZGlmCisKKyAgICBjYWNoZWRQYXRoID0gZGF0YVBh
dGguZ2V0KCk7CisgICAgcmV0dXJuIGNhY2hlZFBhdGg7Cit9CisKK3VpbnQ2NF90IGdldFZvbHVt
ZUZyZWVTaXplRm9yUGF0aChjb25zdCBjaGFyKiBwYXRoKQoreworICAgIEdSZWZQdHI8R0ZpbGU+
IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChwYXRoKSk7CisgICAgR1JlZlB0
cjxHRmlsZUluZm8+IGZpbGVJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9maWxlc3lzdGVt
X2luZm8oZmlsZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUsIDAsIDAp
KTsKKyAgICBpZiAoIWZpbGVJbmZvKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBn
X2ZpbGVfaW5mb19nZXRfYXR0cmlidXRlX3VpbnQ2NChmaWxlSW5mby5nZXQoKSwgR19GSUxFX0FU
VFJJQlVURV9GSUxFU1lTVEVNX0ZSRUUpOworfQorCitTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25z
dCBTdHJpbmcmIHBhdGgpCit7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVz
Y2FwZWRGaWxlbmFtZShwYXRoKTsKKyAgICBpZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRpcm5hbWUoZ19wYXRoX2dldF9kaXJu
YW1lKGZpbGVuYW1lLmdldCgpKSk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZGlybmFt
ZS5nZXQoKSk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGxpc3REaXJlY3RvcnkoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBTdHJpbmcmIGZpbHRlcikKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBlbnRy
aWVzOworCisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFt
ZShwYXRoKTsKKyAgICBpZiAoIWZpbGVuYW1lKQorICAgICAgICByZXR1cm4gZW50cmllczsKKwor
ICAgIEdVbmlxdWVQdHI8R0Rpcj4gZGlyKGdfZGlyX29wZW4oZmlsZW5hbWUuZ2V0KCksIDAsIG51
bGxwdHIpKTsKKyAgICBpZiAoIWRpcikKKyAgICAgICAgcmV0dXJuIGVudHJpZXM7CisKKyAgICBH
VW5pcXVlUHRyPEdQYXR0ZXJuU3BlYz4gcHNwZWMoZ19wYXR0ZXJuX3NwZWNfbmV3KChmaWx0ZXIu
dXRmOCgpKS5kYXRhKCkpKTsKKyAgICB3aGlsZSAoY29uc3QgY2hhciogbmFtZSA9IGdfZGlyX3Jl
YWRfbmFtZShkaXIuZ2V0KCkpKSB7CisgICAgICAgIGlmICghZ19wYXR0ZXJuX21hdGNoX3N0cmlu
Zyhwc3BlYy5nZXQoKSwgbmFtZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBH
VW5pcXVlUHRyPGdjaGFyPiBlbnRyeShnX2J1aWxkX2ZpbGVuYW1lKGZpbGVuYW1lLmdldCgpLCBu
YW1lLCBudWxscHRyKSk7CisgICAgICAgIGVudHJpZXMuYXBwZW5kKGZpbGVuYW1lVG9TdHJpbmco
ZW50cnkuZ2V0KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cmllczsKK30KKworU3RyaW5n
IG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5k
bGUmIGhhbmRsZSkKK3sKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZShnX3N0cmR1cF9w
cmludGYoIiVzJXMiLCBwcmVmaXgudXRmOCgpLmRhdGEoKSwgY3JlYXRlQ2Fub25pY2FsVVVJRFN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiB0ZW1wUGF0aChn
X2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3RtcF9kaXIoKSwgZmlsZW5hbWUuZ2V0KCksIE5VTEwpKTsK
KyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
dGVtcFBhdGguZ2V0KCkpKTsKKworICAgIGhhbmRsZSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRl
KGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7CisgICAgaWYgKCFpc0hhbmRs
ZVZhbGlkKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOCh0ZW1wUGF0aC5nZXQoKSk7Cit9CisKK1BsYXRmb3JtRmlsZUhhbmRsZSBv
cGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQoreworICAgIEdV
bmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7CisgICAg
aWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7
CisKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgoZmlsZW5hbWUuZ2V0KCkpKTsKKyAgICBHRmlsZUlPU3RyZWFtKiBpb1N0cmVhbSA9IDA7Cisg
ICAgaWYgKG1vZGUgPT0gT3BlbkZvclJlYWQpCisgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29w
ZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOworICAgIGVsc2UgaWYgKG1vZGUgPT0gT3Bl
bkZvcldyaXRlKSB7CisgICAgICAgIGlmIChnX2ZpbGVfdGVzdChmaWxlbmFtZS5nZXQoKSwgc3Rh
dGljX2Nhc3Q8R0ZpbGVUZXN0PihHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19S
RUdVTEFSKSkpCisgICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShm
aWxlLmdldCgpLCAwLCAwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW9TdHJlYW0gPSBn
X2ZpbGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAs
IDApOworICAgIH0KKworICAgIHJldHVybiBpb1N0cmVhbTsKK30KKwordm9pZCBjbG9zZUZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhh
bmRsZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGdfaW9fc3RyZWFtX2Nsb3NlKEdfSU9fU1RS
RUFNKGhhbmRsZSksIDAsIDApOworICAgIGdfb2JqZWN0X3VucmVmKGhhbmRsZSk7CisgICAgaGFu
ZGxlID0gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKK30KKworbG9uZyBsb25nIHNlZWtGaWxl
KFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQsIEZpbGVTZWVrT3Jp
Z2luIG9yaWdpbikKK3sKKyAgICBHU2Vla1R5cGUgc2Vla1R5cGUgPSBHX1NFRUtfU0VUOworICAg
IHN3aXRjaCAob3JpZ2luKSB7CisgICAgY2FzZSBTZWVrRnJvbUJlZ2lubmluZzoKKyAgICAgICAg
c2Vla1R5cGUgPSBHX1NFRUtfU0VUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlZWtGcm9t
Q3VycmVudDoKKyAgICAgICAgc2Vla1R5cGUgPSBHX1NFRUtfQ1VSOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNlZWtGcm9tRW5kOgorICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19FTkQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIGlmICghZ19zZWVrYWJsZV9zZWVrKEdfU0VFS0FCTEUoZ19pb19zdHJl
YW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSksCisgICAgICAgIG9mZnNl
dCwgc2Vla1R5cGUsIDAsIDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg
ICByZXR1cm4gZ19zZWVrYWJsZV90ZWxsKEdfU0VFS0FCTEUoZ19pb19zdHJlYW1fZ2V0X2lucHV0
X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSkpOworfQorCitpbnQgd3JpdGVUb0ZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sK
KyAgICBnc2l6ZSBieXRlc1dyaXR0ZW47CisgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FsbChn
X2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKKyAgICAg
ICAgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKKyAgICByZXR1cm4gYnl0ZXNX
cml0dGVuOworfQorCitpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUs
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOworICAgIGRvIHsKKyAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFt
X3JlYWQoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwK
KyAgICAgICAgICAgIGRhdGEsIGxlbmd0aCwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAg
aWYgKGJ5dGVzUmVhZCA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIGJ5dGVzUmVhZDsKKyAgICB9
IHdoaWxlIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHX0ZJTEVfRVJST1JfSU5UUik7CisgICAg
cmV0dXJuIC0xOworfQorCitib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUp
Cit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gOjpGcmVlTGlicmFyeShtb2R1bGUpOwor
I2Vsc2UKKyAgICByZXR1cm4gZ19tb2R1bGVfY2xvc2UobW9kdWxlKTsKKyNlbmRpZgorfQorCiti
b29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvR2FtZXBhZHNHbGliLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvR2FtZXBhZHNHbGliLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
OGJkMjFhNWU4NjYyMjYyNGQzY2Q3YTlkYzgzNTJjMjRlMjQ1ODRiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9HYW1lcGFkc0dsaWIuY3BwCkBAIC0wLDAg
KzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9i
ZXJzZWtAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR2FtZXBhZHMuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCisKKyNpbmNs
dWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIKKyNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxnaW8vZ3VuaXhpbnB1dHN0cmVhbS5oPgorI2lu
Y2x1ZGUgPGd1ZGV2L2d1ZGV2Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZERldmljZUdsaWIg
OiBwdWJsaWMgR2FtZXBhZERldmljZUxpbnV4IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHYW1l
cGFkRGV2aWNlR2xpYihTdHJpbmcgZGV2aWNlRmlsZSk7CisgICAgfkdhbWVwYWREZXZpY2VHbGli
KCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0
KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSk7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJl
YW0+IG1faW5wdXRTdHJlYW07CisgICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKK307CisK
K0dhbWVwYWREZXZpY2VHbGliOjpHYW1lcGFkRGV2aWNlR2xpYihTdHJpbmcgZGV2aWNlRmlsZSkK
KyAgICA6IEdhbWVwYWREZXZpY2VMaW51eChkZXZpY2VGaWxlKQoreworICAgIGlmIChtX2ZpbGVE
ZXNjcmlwdG9yID09IC0xKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lucHV0U3RyZWFtID0g
YWRvcHRHUmVmKGdfdW5peF9pbnB1dF9zdHJlYW1fbmV3KG1fZmlsZURlc2NyaXB0b3IsIEZBTFNF
KSk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdSZWYoZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1fY3Jl
YXRlX3NvdXJjZShHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSwg
MCkpOworICAgIGdfc291cmNlX3NldF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxHU291cmNlRnVuYz4ocmVhZENhbGxiYWNrKSwgdGhpcywgMCk7CisgICAgZ19zb3Vy
Y2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCAwKTsKK30KKworR2FtZXBhZERldmljZUdsaWI6On5H
YW1lcGFkRGV2aWNlR2xpYigpCit7CisgICAgaWYgKG1fc291cmNlKQorICAgICAgICBnX3NvdXJj
ZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsKK30KKworZ2Jvb2xlYW4gR2FtZXBhZERldmljZUds
aWI6OnJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBHYW1lcGFkRGV2aWNlR2xpYiogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R2FtZXBhZERldmljZUdsaWIqPihkYXRhKTsKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgc3RydWN0IGpzX2V2ZW50IGV2ZW50OworCisgICAgZ3NzaXplIGxlbiA9IGdf
cG9sbGFibGVfaW5wdXRfc3RyZWFtX3JlYWRfbm9uYmxvY2tpbmcoR19QT0xMQUJMRV9JTlBVVF9T
VFJFQU0ocG9sbGFibGVTdHJlYW0pLAorICAgICAgICAmZXZlbnQsIHNpemVvZihldmVudCksIDAs
ICZlcnJvci5vdXRQdHIoKSk7CisKKyAgICAvLyBGSVhNRTogUHJvcGVybHkgbG9nIHRoZSBlcnJv
ci4KKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLIGVycm9yIHJl
dHVybiBUUlVFIHRvIHdhaXQgdW50aWwKKyAgICAvLyB0aGUgc291cmNlIGJlY29tZXMgcmVhZGFi
bGUgYWdhaW4gYW5kIEZBTFNFIG90aGVyd2lzZS4KKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJl
dHVybiBnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1Jf
V09VTERfQkxPQ0spOworCisgICAgQVNTRVJUX1VOVVNFRChsZW4sIGxlbiA9PSBzaXplb2YoZXZl
bnQpKTsKKyAgICBnYW1lcGFkRGV2aWNlLT51cGRhdGVGb3JFdmVudChldmVudCk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK2NsYXNzIEdhbWVwYWRzR2xpYiB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgR2FtZXBhZHNHbGliKHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyRGV2
aWNlKFN0cmluZyBkZXZpY2VGaWxlKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJEZXZpY2UoU3RyaW5n
IGRldmljZUZpbGUpOworCisgICAgdm9pZCB1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCop
OworCitwcml2YXRlOgorICAgIH5HYW1lcGFkc0dsaWIoKTsKKyAgICBzdGF0aWMgdm9pZCBvblVF
dmVudENhbGxiYWNrKEdVZGV2Q2xpZW50KiwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqLCBn
cG9pbnRlciBkYXRhKTsKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gaXNHYW1lcGFkRGV2aWNlKEdVZGV2
RGV2aWNlKik7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdhbWVwYWREZXZpY2VHbGli
PiA+IG1fc2xvdHM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVwYWREZXZpY2VHbGliKj4gbV9k
ZXZpY2VNYXA7CisKKyAgICBHUmVmUHRyPEdVZGV2Q2xpZW50PiBtX2d1ZGV2Q2xpZW50OworfTsK
KworR2FtZXBhZHNHbGliOjpHYW1lcGFkc0dsaWIodW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9z
bG90cyhsZW5ndGgpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1YnN5c3RlbXNbXSA9IHsg
ImlucHV0IiwgMCB9OworICAgIG1fZ3VkZXZDbGllbnQgPSBhZG9wdEdSZWYoZ191ZGV2X2NsaWVu
dF9uZXcoc3Vic3lzdGVtcykpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndWRldkNsaWVudC5n
ZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZlbnRDYWxsYmFjayksIHRoaXMpOworCisg
ICAgR1VuaXF1ZVB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191ZGV2X2NsaWVudF9xdWVyeV9ieV9z
dWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lzdGVtc1swXSkpOworICAgIGZvciAo
R0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9
IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgeworICAgICAgICBHVWRldkRldmljZSogZGV2aWNlID0g
R19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7CisgICAgICAgIFN0cmluZyBkZXZpY2VGaWxl
ID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2Up
KTsKKyAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZpY2UpKQorICAgICAgICAgICAgcmVn
aXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGRldmljZSk7
CisgICAgfQorfQorCitHYW1lcGFkc0dsaWI6On5HYW1lcGFkc0dsaWIoKQoreworICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2d1ZGV2Q2xpZW50LmdldCgpLCBHX1NJ
R05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKK30KKwordm9pZCBHYW1lcGFkc0ds
aWI6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQoreworICAgIExPRyhHYW1lcGFk
LCAiR2FtZXBhZHNHbGliOjpyZWdpc3RlckRldmljZSAlcyIsIGRldmljZUZpbGUuYXNjaWkoKS5k
YXRhKCkpOworICAgIEFTU0VSVCghbV9kZXZpY2VNYXAuY29udGFpbnMoZGV2aWNlRmlsZSkpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9zbG90cy5zaXplKCk7IGlu
ZGV4KyspIHsKKyAgICAgICAgaWYgKCFtX3Nsb3RzW2luZGV4XSkgeworICAgICAgICAgICAgbV9z
bG90c1tpbmRleF0gPSBzdGQ6Om1ha2VfdW5pcXVlPEdhbWVwYWREZXZpY2VHbGliPihkZXZpY2VG
aWxlKTsKKyAgICAgICAgICAgIG1fZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2lu
ZGV4XS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBHYW1lcGFkc0dsaWI6OnVucmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCit7
CisgICAgTE9HKEdhbWVwYWQsICJHYW1lcGFkc0dsaWI6OnVucmVnaXN0ZXJEZXZpY2UgJXMiLCBk
ZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBBU1NFUlQobV9kZXZpY2VNYXAuY29udGFp
bnMoZGV2aWNlRmlsZSkpOworCisgICAgR2FtZXBhZERldmljZUdsaWIqIGdhbWVwYWREZXZpY2Ug
PSBtX2RldmljZU1hcC50YWtlKGRldmljZUZpbGUpOworICAgIHNpemVfdCBpbmRleCA9IG1fc2xv
dHMuZmluZChnYW1lcGFkRGV2aWNlKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwor
CisgICAgbV9zbG90c1tpbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIEdhbWVwYWRzR2xpYjo6
dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCit7CisgICAgQVNTRVJUKG1fc2xv
dHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgp
ICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7CisgICAgICAgICAgICBHYW1lcGFkRGV2aWNl
R2xpYiogZ2FtZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7CisgICAgICAgICAgICBSZWZQ
dHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoIWdh
bWVwYWQpCisgICAgICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOworCisg
ICAgICAgICAgICBnYW1lcGFkLT5pbmRleChpKTsKKyAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdh
bWVwYWREZXZpY2UtPmlkKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVw
YWREZXZpY2UtPnRpbWVzdGFtcCgpKTsKKyAgICAgICAgICAgIGdhbWVwYWQtPmF4ZXMoZ2FtZXBh
ZERldmljZS0+YXhlc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkpOworICAgICAg
ICAgICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2Ft
ZXBhZERldmljZS0+YnV0dG9uc0RhdGEoKSk7CisKKyAgICAgICAgICAgIGludG8tPnNldChpLCBn
YW1lcGFkKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7Cisg
ICAgfQorfQorCit2b2lkIEdhbWVwYWRzR2xpYjo6b25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVu
dCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCit7
CisgICAgaWYgKCFpc0dhbWVwYWREZXZpY2UoZGV2aWNlKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR2FtZXBhZHNHbGliKiBnYW1lcGFkc0dsaWIgPSByZWludGVycHJldF9jYXN0PEdhbWVwYWRz
R2xpYio+KGRhdGEpOworICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChn
X3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKKworICAgIGlmICghZ19zdHJj
bXAwKGFjdGlvbiwgImFkZCIpKQorICAgICAgICBnYW1lcGFkc0dsaWItPnJlZ2lzdGVyRGV2aWNl
KGRldmljZUZpbGUpOworICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAoYWN0aW9uLCAicmVtb3ZlIikp
CisgICAgICAgIGdhbWVwYWRzR2xpYi0+dW5yZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKK30K
KworZ2Jvb2xlYW4gR2FtZXBhZHNHbGliOjppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRl
dmljZSkKK3sKKyAgICBjb25zdCBnY2hhciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0
X2RldmljZV9maWxlKGRldmljZSk7CisgICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRl
dl9kZXZpY2VfZ2V0X3N5c2ZzX3BhdGgoZGV2aWNlKTsKKyAgICBpZiAoIWRldmljZUZpbGUgfHwg
IXN5c2ZzUGF0aCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnX3VkZXZfZGV2
aWNlX2hhc19wcm9wZXJ0eShkZXZpY2UsICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hh
c19wcm9wZXJ0eShkZXZpY2UsICJJRF9JTlBVVF9KT1lTVElDSyIpKQorICAgICAgICByZXR1cm4g
RkFMU0U7CisKKyAgICByZXR1cm4gZ19zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9p
bnB1dC9qcyIpOworfQorCit2b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQor
eworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChHYW1lcGFkc0dsaWIsIGdhbWVw
YWRzR2xpYiwgKGludG8tPmxlbmd0aCgpKSk7CisgICAgZ2FtZXBhZHNHbGliLnVwZGF0ZUdhbWVw
YWRMaXN0KGludG8pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2xpYi9MYW5ndWFnZUdsaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xp
Yi9MYW5ndWFnZUdsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlYmQ1MGJhYTg2NzRlNjRiYzNlZjMxOTI3
MTAwM2NkNDk4Njg4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9nbGliL0xhbmd1YWdlR2xpYi5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGxvY2FsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzaW5nIHBh
bmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0KCkgaGVyZSBpcyBub3QgYW4gb3B0aW9uLCBiZWNhdXNl
CisvLyBpdCBkb2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGxvY2FsZSBpbiBydW50aW1lLCBz
byBpdCByZXR1cm5zCisvLyBhbHdheXMgdGhlIHNhbWUgdmFsdWUuCitzdGF0aWMgU3RyaW5nIHBs
YXRmb3JtTGFuZ3VhZ2UoKQoreworICAgIGNoYXIqIGxvY2FsZURlZmF1bHQgPSBzZXRsb2NhbGUo
TENfQ1RZUEUsIG51bGxwdHIpOworCisgICAgaWYgKCFsb2NhbGVEZWZhdWx0KQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCJjIik7CisKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBub3JtYWxpemVkRGVm
YXVsdChnX2FzY2lpX3N0cmRvd24obG9jYWxlRGVmYXVsdCwgLTEpKTsKKyAgICBjaGFyKiBwdHIg
PSBzdHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0KCksICdfJyk7CisKKyAgICBpZiAocHRyKQor
ICAgICAgICAqcHRyID0gJy0nOworCisgICAgcHRyID0gc3RyY2hyKG5vcm1hbGl6ZWREZWZhdWx0
LmdldCgpLCAnLicpOworCisgICAgaWYgKHB0cikKKyAgICAgICAgKnB0ciA9ICdcMCc7CisKKyAg
ICByZXR1cm4gU3RyaW5nKG5vcm1hbGl6ZWREZWZhdWx0LmdldCgpKTsKK30KKworVmVjdG9yPFN0
cmluZz4gcGxhdGZvcm1Vc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOworICAgIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMu
YXBwZW5kKHBsYXRmb3JtTGFuZ3VhZ2UoKSk7CisgICAgcmV0dXJuIHVzZXJQcmVmZXJyZWRMYW5n
dWFnZXM7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
bGliL0xvZ2dpbmdHbGliLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvTG9nZ2lu
Z0dsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NDUwYmI2MDc5NWFjMDBlYTQ5MjhjODVhNzA4MDNmNTA2
NTc5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0xv
Z2dpbmdHbGliLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2
byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25vbWUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKKworI2lmICFMT0dfRElTQUJMRUQKKworI2luY2x1ZGUgPGdsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHJpbmcgbG9nTGV2ZWxTdHJpbmcoKQoreworICAgIGNo
YXIqIGxvZ0VudiA9IGdldGVudigiV0VCS0lUX0RFQlVHIik7CisgICAgaWYgKCFsb2dFbnYpCisg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgLy8gV2Ugc2V0IHVwIHRoZSBsb2dz
IGFueXdheSBiZWNhdXNlIHNvbWUgb2Ygb3VyIGxvZ2dpbmcsIHN1Y2ggYXMgU291cCdzIGlzIGF2
YWlsYWJsZSBpbiByZWxlYXNlIGJ1aWxkcy4KKyNpZiBkZWZpbmVkKE5ERUJVRykKKyAgICBnX3dh
cm5pbmcoIldFQktJVF9ERUJVRyBpcyBub3QgZW1wdHksIGJ1dCB0aGlzIGlzIGEgcmVsZWFzZSBi
dWlsZC4gTm90aWNlIHRoYXQgbWFueSBsb2cgbWVzc2FnZXMgd2lsbCBvbmx5IGFwcGVhciBpbiBh
IGRlYnVnIGJ1aWxkLiIpOworI2VuZGlmCisKKyAgICAvLyBUbyBkaXNhYmxlIGxvZ2dpbmcgbm90
SW1wbGVtZW50ZWQgc2V0IHRoZSBESVNBQkxFX05JX1dBUk5JTkcgZW52aXJvbm1lbnQgdmFyaWFi
bGUgdG8gMS4KKyAgICBTdHJpbmcgbG9nTGV2ZWwgPSAiTm90WWV0SW1wbGVtZW50ZWQsIjsKKyAg
ICBsb2dMZXZlbC5hcHBlbmQobG9nRW52KTsKKyAgICByZXR1cm4gbG9nTGV2ZWw7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvU2hhcmVkQnVmZmVyR2xpYi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL1NoYXJlZEJ1ZmZlckdsaWIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUxNTIyZjZmYWMxMDlmYTQ5NjI4MTliMDExYTBmODc1YzkyYzA4NjUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL1NoYXJlZEJ1ZmZlckdsaWIuY3Bw
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0
ZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNp
bmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVGcm9tUmVhZGluZ0ZpbGUoY29u
c3QgU3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oZmlsZVBhdGgpOworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGNvbnRlbnRzOwor
ICAgIGdzaXplIHNpemU7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlm
ICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlbmFtZS5kYXRhKCksICZjb250ZW50cy5vdXRQdHIo
KSwgJnNpemUsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gZnVsbHkgcmVhZCBjb250ZW50cyBvZiBmaWxlICVzIC0gJXMiLCBmaWxlbmFtZUZvckRpc3Bs
YXkoZmlsZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoY29udGVudHMuZ2V0KCksIHNpemUpOworCisgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FcnJvcnNHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDhkZmQxNThiM2I0ZDZjNTQ0YmRiMjlhNjE1NzQxZGJkYTRiNDFhNTQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0Vycm9yc0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiRXJyb3JzR3RrLmgiCi0KLSNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCi0jaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2lu
Y2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVzb3Vy
Y2VFcnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17
Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3b3JrLCBOZXR3b3JrRXJy
b3JDYW5jZWxsZWQsIHJlcXVlc3QudXJsKCksIF8oIkxvYWQgcmVxdWVzdCBjYW5jZWxsZWQiKSk7
Ci19Ci0KLVJlc291cmNlRXJyb3IgYmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpblBvbGljeSwg
UG9saWN5RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKSwgXygiTm90
IGFsbG93ZWQgdG8gdXNlIHJlc3RyaWN0ZWQgbmV0d29yayBwb3J0IikpOwotfQotCi1SZXNvdXJj
ZUVycm9yIGJsb2NrZWRCeUNvbnRlbnRCbG9ja2VyRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5
LCBQb2xpY3lFcnJvckJsb2NrZWRCeUNvbnRlbnRCbG9ja2VyLCByZXF1ZXN0LnVybCgpLCBfKCJC
bG9ja2VkIGJ5IGNvbnRlbnQgYmxvY2tlciIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBjYW5ub3RT
aG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHJldHVy
biBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUG9saWN5LCBQb2xpY3lFcnJvckNhbm5vdFNob3dV
UkwsIHJlcXVlc3QudXJsKCksIF8oIlVSTCBjYW5ub3QgYmUgc2hvd24iKSk7Ci19Ci0KLVJlc291
cmNlRXJyb3IgaW50ZXJydXB0ZWRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Q
b2xpY3ksIFBvbGljeUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSwgcmVx
dWVzdC51cmwoKSwgXygiRnJhbWUgbG9hZCB3YXMgaW50ZXJydXB0ZWQiKSk7Ci19Ci0KLVJlc291
cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5Qb2xpY3ks
IFBvbGljeUVycm9yQ2Fubm90U2hvd01pbWVUeXBlLCByZXNwb25zZS51cmwoKSwgXygiQ29udGVu
dCB3aXRoIHRoZSBzcGVjaWZpZWQgTUlNRSB0eXBlIGNhbm5vdCBiZSBzaG93biIpKTsKLX0KLQot
UmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5OZXR3
b3JrLCBOZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0LCByZXNwb25zZS51cmwoKSwgXygiRmls
ZSBkb2VzIG5vdCBleGlzdCIpKTsKLX0KLQotUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxsSGFuZGxl
TG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIHJldHVy
biBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluUGx1Z2luLCBQbHVnaW5FcnJvcldpbGxIYW5kbGVM
b2FkLCByZXNwb25zZS51cmwoKSwgXygiUGx1Z2luIHdpbGwgaGFuZGxlIGxvYWQiKSk7Ci19Ci0K
LVJlc291cmNlRXJyb3IgZG93bmxvYWROZXR3b3JrRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYg
bmV0d29ya0Vycm9yKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluRG93
bmxvYWQsIERvd25sb2FkRXJyb3JOZXR3b3JrLCBuZXR3b3JrRXJyb3IuZmFpbGluZ1VSTCgpLCBu
ZXR3b3JrRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSk7Ci19Ci0KLVJlc291cmNlRXJyb3Ig
ZG93bmxvYWRDYW5jZWxsZWRCeVVzZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbkRvd25sb2FkLCBE
b3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyLCByZXNwb25zZS51cmwoKSwgXygiVXNlciBjYW5j
ZWxsZWQgdGhlIGRvd25sb2FkIikpOwotfQotCi1SZXNvdXJjZUVycm9yIGRvd25sb2FkRGVzdGlu
YXRpb25FcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5E
b3dubG9hZCwgRG93bmxvYWRFcnJvckRlc3RpbmF0aW9uLCByZXNwb25zZS51cmwoKSwgZXJyb3JN
ZXNzYWdlKTsKLX0KLQotUmVzb3VyY2VFcnJvciBwcmludEVycm9yKGNvbnN0IFVSTCYgZmFpbGlu
Z1VSTCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoZXJyb3JEb21haW5QcmludCwgUHJpbnRFcnJvckdlbmVyYWwsIGZhaWxpbmdVUkwsIGVy
cm9yTWVzc2FnZSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5kRXJyb3IoY29u
c3QgVVJMJiBmYWlsaW5nVVJMKQotewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGVycm9yRG9t
YWluUHJpbnQsIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQsIGZhaWxpbmdVUkwsIF8oIlByaW50
ZXIgbm90IGZvdW5kIikpOwotfQotCi1SZXNvdXJjZUVycm9yIGludmFsaWRQYWdlUmFuZ2VUb1By
aW50KGNvbnN0IFVSTCYgZmFpbGluZ1VSTCkKLXsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihl
cnJvckRvbWFpblByaW50LCBQcmludEVycm9ySW52YWxpZFBhZ2VSYW5nZSwgZmFpbGluZ1VSTCwg
XygiSW52YWxpZCBwYWdlIHJhbmdlIikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRXJyb3JzR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDc2MWRjY2IyNmVmNzAwNDFiYzcxYTcwMjFiNTA1MzBkNzgwMjgxNzAuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEVycm9yc0d0a19o
Ci0jZGVmaW5lIEVycm9yc0d0a19oCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZXNvdXJjZUVycm9yOwotY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0OwotY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLWNsYXNzIFVSTDsKLQotY29u
c3QgY2hhciogY29uc3QgZXJyb3JEb21haW5OZXR3b3JrID0gIldlYktpdE5ldHdvcmtFcnJvciI7
Ci1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpblBvbGljeSA9ICJXZWJLaXRQb2xpY3lFcnJv
ciI7Ci1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpblBsdWdpbiA9ICJXZWJLaXRQbHVnaW5F
cnJvciI7Ci1jb25zdCBjaGFyKiBjb25zdCBlcnJvckRvbWFpbkRvd25sb2FkID0gIldlYktpdERv
d25sb2FkRXJyb3IiOwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5QcmludCA9ICJXZWJL
aXRQcmludEVycm9yIjsKLQotZW51bSBOZXR3b3JrRXJyb3IgewotICAgIE5ldHdvcmtFcnJvckZh
aWxlZCA9IDM5OSwKLSAgICBOZXR3b3JrRXJyb3JUcmFuc3BvcnQgPSAzMDAsCi0gICAgTmV0d29y
a0Vycm9yVW5rbm93blByb3RvY29sID0gMzAxLAotICAgIE5ldHdvcmtFcnJvckNhbmNlbGxlZCA9
IDMwMiwKLSAgICBOZXR3b3JrRXJyb3JGaWxlRG9lc05vdEV4aXN0ID0gMzAzCi19OwotCi0vLyBT
eW5jJ2Qgd2l0aCBNYWMncyBXZWJLaXQgRXJyb3JzLgotZW51bSBQb2xpY3lFcnJvciB7Ci0gICAg
UG9saWN5RXJyb3JGYWlsZWQgPSAxOTksCi0gICAgUG9saWN5RXJyb3JDYW5ub3RTaG93TWltZVR5
cGUgPSAxMDAsCi0gICAgUG9saWN5RXJyb3JDYW5ub3RTaG93VVJMID0gMTAxLAotICAgIFBvbGlj
eUVycm9yRnJhbWVMb2FkSW50ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSA9IDEwMiwKLSAgICBQb2xp
Y3lFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0ID0gMTAzLAotICAgIFBvbGljeUVycm9yQmxv
Y2tlZEJ5Q29udGVudEJsb2NrZXIgPSAxMDQsCi19OwotCi1lbnVtIFBsdWdpbkVycm9yIHsKLSAg
ICBQbHVnaW5FcnJvckZhaWxlZCA9IDI5OSwKLSAgICBQbHVnaW5FcnJvckNhbm5vdEZpbmRQbHVn
aW4gPSAyMDAsCi0gICAgUGx1Z2luRXJyb3JDYW5ub3RMb2FkUGx1Z2luID0gMjAxLAotICAgIFBs
dWdpbkVycm9ySmF2YVVuYXZhaWxhYmxlID0gMjAyLAotICAgIFBsdWdpbkVycm9yQ29ubmVjdGlv
bkNhbmNlbGxlZCA9IDIwMywKLSAgICBQbHVnaW5FcnJvcldpbGxIYW5kbGVMb2FkID0gMjA0Ci19
OwotCi1lbnVtIERvd25sb2FkRXJyb3IgewotICAgIERvd25sb2FkRXJyb3JOZXR3b3JrID0gNDk5
LAotICAgIERvd25sb2FkRXJyb3JDYW5jZWxsZWRCeVVzZXIgPSA0MDAsCi0gICAgRG93bmxvYWRF
cnJvckRlc3RpbmF0aW9uID0gNDAxCi19OwotCi1lbnVtIFByaW50RXJyb3IgewotICAgIFByaW50
RXJyb3JHZW5lcmFsID0gNTk5LAotICAgIFByaW50RXJyb3JQcmludGVyTm90Rm91bmQgPSA1MDAs
Ci0gICAgUHJpbnRFcnJvckludmFsaWRQYWdlUmFuZ2UgPSA1MDEKLX07Ci0KLVJlc291cmNlRXJy
b3IgY2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci1SZXNvdXJjZUVycm9y
IGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLVJlc291cmNlRXJyb3IgYmxv
Y2tlZEJ5Q29udGVudEJsb2NrZXJFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLVJlc291
cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwotUmVz
b3VyY2VFcnJvciBpbnRlcnJ1cHRlZEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpOwotUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJik7Ci1SZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci1SZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVM
b2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotUmVzb3VyY2VFcnJvciBkb3dubG9h
ZE5ldHdvcmtFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJik7Ci1SZXNvdXJjZUVycm9yIGRvd25s
b2FkQ2FuY2VsbGVkQnlVc2VyRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotUmVzb3Vy
Y2VFcnJvciBkb3dubG9hZERlc3RpbmF0aW9uRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLVJlc291cmNlRXJyb3IgcHJpbnRFcnJvcihj
b25zdCBVUkwmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLVJlc291
cmNlRXJyb3IgcHJpbnRlck5vdEZvdW5kRXJyb3IoY29uc3QgVVJMJiBmYWlsaW5nVVJMKTsKLVJl
c291cmNlRXJyb3IgaW52YWxpZFBhZ2VSYW5nZVRvUHJpbnQoY29uc3QgVVJMJiBmYWlsaW5nVVJM
KTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9FdmVudExvb3BHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0V2ZW50TG9v
cEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZjdiNWNiNzdiOTQ0ZmJl
MDU4MTg0Zjg2MTQ0MDUyYWU2YTUyMmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IE51YW50aSBMdGQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJFdmVudExvb3Au
aCIKLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEV2
ZW50TG9vcDo6Y3ljbGUoKQotewotICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBG
QUxTRSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMWQ4ZWQ3ZGY2NGU1MGY4NTgyMjFmNDgzMzhmZGEyNTU4YmQyZWQzZS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNzQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwgTHRkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBvcnRpb25zIENvcHly
aWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLQotI2luY2x1
ZGUgIkZpbGVNZXRhZGF0YS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiVVVJRC5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5j
bHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HTGliVXRpbGl0aWVzLmg+
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLyogT24gbGludXggZmls
ZSBuYW1lcyBhcmUganVzdCByYXcgYnl0ZXMsIHNvIGFsc28gc3RyaW5ncyB0aGF0IGNhbm5vdCBi
ZSBlbmNvZGVkIGluIGFueSB3YXkKLSAqIGFyZSB2YWxpZCBmaWxlIG5hbWVzLiBUaGlzIG1lYW4g
dGhhdCB3ZSBjYW5ub3QganVzdCBzdG9yZSBhIGZpbGUgbmFtZSBhcy1pcyBpbiBhIFN0cmluZwot
ICogYnV0IHdlIGhhdmUgdG8gZXNjYXBlIGl0LgotICogT24gV2luZG93cyB0aGUgR0xpYiBmaWxl
IG5hbWUgZW5jb2RpbmcgaXMgYWx3YXlzIFVURi04IHNvIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIGNh
c2UuICovCi1TdHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25zdCBjaGFyKiBmaWxlbmFtZSkKLXsK
LSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSNpZiBPUyhX
SU5ET1dTKQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGZpbGVuYW1lKTsKLSNlbHNlCi0g
ICAgR1VuaXF1ZVB0cjxnY2hhcj4gZXNjYXBlZFN0cmluZyhnX3VyaV9lc2NhcGVfc3RyaW5nKGZp
bGVuYW1lLCAiLzoiLCBmYWxzZSkpOwotICAgIHJldHVybiBlc2NhcGVkU3RyaW5nLmdldCgpOwot
I2VuZGlmCi19Ci0KLXN0YXRpYyBHVW5pcXVlUHRyPGNoYXI+IHVuZXNjYXBlZEZpbGVuYW1lKGNv
bnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIEdVbmlxdWVQdHI8Y2hh
cj4oZ19zdHJkdXAocGF0aC51dGY4KCkuZGF0YSgpKSk7Ci0jZWxzZQotICAgIHJldHVybiBHVW5p
cXVlUHRyPGNoYXI+KGdfdXJpX3VuZXNjYXBlX3N0cmluZyhwYXRoLnV0ZjgoKS5kYXRhKCksIG51
bGxwdHIpKTsKLSNlbmRpZgotfQotCi1DU3RyaW5nIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0jaWYgT1MoV0lORE9XUykKLSAgICByZXR1cm4gcGF0aC51
dGY4KCk7Ci0jZWxzZQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2NhcGVk
RmlsZW5hbWUocGF0aCk7Ci0gICAgcmV0dXJuIGZpbGVuYW1lLmdldCgpOwotI2VuZGlmCi19Ci0K
LS8vIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBzdWl0YWJsZSB0byBiZSBkaXNwbGF5
ZWQgdG8gdGhlIHVzZXIuCi1TdHJpbmcgZmlsZW5hbWVGb3JEaXNwbGF5KGNvbnN0IFN0cmluZyYg
c3RyaW5nKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0dXJuIHN0cmluZzsKLSNlbHNlCi0g
ICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShzdHJpbmcp
OwotICAgIGlmICghZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KLSAgICBHVW5p
cXVlUHRyPGdjaGFyPiBkaXNwbGF5KGdfZmlsZW5hbWVfdG9fdXRmOChmaWxlbmFtZS5nZXQoKSwg
LTEsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBpZiAoIWRpc3BsYXkpCi0gICAg
ICAgIHJldHVybiBzdHJpbmc7Ci0KLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXNwbGF5
LmdldCgpKTsKLSNlbmRpZgotfQotCi1ib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRo
KQotewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUo
cGF0aCk7Ci0gICAgcmV0dXJuIGZpbGVuYW1lID8gZ19maWxlX3Rlc3QoZmlsZW5hbWUuZ2V0KCks
IEdfRklMRV9URVNUX0VYSVNUUykgOiBmYWxzZTsKLX0KLQotYm9vbCBkZWxldGVGaWxlKGNvbnN0
IFN0cmluZyYgcGF0aCkKLXsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNj
YXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZSA/IGdfcmVtb3ZlKGZpbGVu
YW1lLmdldCgpKSAhPSAtMSA6IGZhbHNlOwotfQotCi1ib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9
IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZSA/IGdfcm1kaXIo
ZmlsZW5hbWUuZ2V0KCkpICE9IC0xIDogZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGdldEZpbGVT
dGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCi17Ci0gICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKLSAgICBp
ZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZ19zdGF0
KGZpbGVuYW1lLmdldCgpLCBzdGF0QnVmZmVyKSAhPSAtMTsKLX0KLQotYm9vbCBnZXRGaWxlU2l6
ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0U2l6ZSkKLXsKLSAgICBHU3Rh
dEJ1ZiBzdGF0UmVzdWx0OwotICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHRTaXplID0gc3RhdFJlc3VsdC5z
dF9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGdldEZpbGVTaXplKFBsYXRmb3Jt
RmlsZUhhbmRsZSwgbG9uZyBsb25nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRGaWxlQ3JlYXRpb25UaW1lKGNvbnN0IFN0cmluZyYs
IHRpbWVfdCYpCi17Ci0gICAgLy8gRklYTUU6IElzIHRoZXJlIGEgd2F5IHRvIHJldHJpZXZlIGZp
bGUgY3JlYXRpb24gdGltZSB3aXRoIEd0ayBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IGl0Pwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25z
dCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1lKQotewotICAgIEdTdGF0QnVmIHN0
YXRSZXN1bHQ7Ci0gICAgaWYgKCFnZXRGaWxlU3RhdChwYXRoLCAmc3RhdFJlc3VsdCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1vZGlmaWVkVGltZSA9IHN0YXRSZXN1bHQuc3RfbXRp
bWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgZ2V0RmlsZU1ldGFkYXRhKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICBHU3RhdEJ1ZiBzdGF0
UmVzdWx0OwotICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwgJnN0YXRSZXN1bHQpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtZXRhZGF0YS5tb2RpZmljYXRpb25UaW1lID0gc3RhdFJl
c3VsdC5zdF9tdGltZTsKLSAgICBtZXRhZGF0YS5sZW5ndGggPSBzdGF0UmVzdWx0LnN0X3NpemU7
Ci0gICAgbWV0YWRhdGEudHlwZSA9IFNfSVNESVIoc3RhdFJlc3VsdC5zdF9tb2RlKSA/IEZpbGVN
ZXRhZGF0YTo6VHlwZURpcmVjdG9yeSA6IEZpbGVNZXRhZGF0YTo6VHlwZUZpbGU7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKLXsKLSAgICBpZiAocGF0aC5lbmRz
V2l0aChHX0RJUl9TRVBBUkFUT1JfUykpCi0gICAgICAgIHJldHVybiBwYXRoICsgY29tcG9uZW50
OwotICAgIHJldHVybiBwYXRoICsgR19ESVJfU0VQQVJBVE9SX1MgKyBjb21wb25lbnQ7Ci19Ci0K
LWJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBHVW5p
cXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJl
dHVybiBmaWxlbmFtZSA/IGdfbWtkaXJfd2l0aF9wYXJlbnRzKGZpbGVuYW1lLmdldCgpLCBTX0lS
V1hVKSAhPSAtMSA6IGZhbHNlOwotfQotCi1TdHJpbmcgaG9tZURpcmVjdG9yeVBhdGgoKQotewot
ICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5nKGdfZ2V0X2hvbWVfZGlyKCkpOwotfQotCi1TdHJp
bmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0aE5hbWUpCi17Ci0gICAgR1VuaXF1
ZVB0cjxnY2hhcj4gdG1wRmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoTmFtZSk7Ci0g
ICAgaWYgKCF0bXBGaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIHBhdGhOYW1lOwotCi0gICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gYmFzZU5hbWUoZ19wYXRoX2dldF9iYXNlbmFtZSh0bXBGaWxlbmFtZS5n
ZXQoKSkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGJhc2VOYW1lLmdldCgpKTsKLX0K
LQotQ1N0cmluZyBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgoKQotewotICAgIENTdHJpbmcgcGF0
aCA9IGdldEN1cnJlbnRFeGVjdXRhYmxlUGF0aCgpOwotICAgIGlmICghcGF0aC5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICAvLyBJZiB0aGUgYWJvdmUgZmFpbHMsIGNoZWNr
IHRoZSBQQVRIIGVudiB2YXJpYWJsZS4KLSAgICBHVW5pcXVlUHRyPGNoYXI+IGN1cnJlbnRFeGVQ
YXRoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgoZ19nZXRfcHJnbmFtZSgpKSk7Ci0gICAgaWYgKCFj
dXJyZW50RXhlUGF0aC5nZXQoKSkKLSAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKLQotICAgIEdV
bmlxdWVQdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoY3VycmVudEV4ZVBhdGgu
Z2V0KCkpKTsKLSAgICByZXR1cm4gZGlybmFtZS5nZXQoKTsKLX0KLQotQ1N0cmluZyBzaGFyZWRS
ZXNvdXJjZXNQYXRoKCkKLXsKLSAgICBzdGF0aWMgQ1N0cmluZyBjYWNoZWRQYXRoOwotICAgIGlm
ICghY2FjaGVkUGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZFBhdGg7Ci0KLSNp
ZiBPUyhXSU5ET1dTKQotICAgIEhNT0RVTEUgaG1vZHVsZSA9IDA7Ci0gICAgR2V0TW9kdWxlSGFu
ZGxlRXhBKEdFVF9NT0RVTEVfSEFORExFX0VYX0ZMQUdfRlJPTV9BRERSRVNTLCByZWludGVycHJl
dF9jYXN0PGNoYXIqPihzaGFyZWRSZXNvdXJjZXNQYXRoKSwgJmhtb2R1bGUpOwotCi0gICAgR1Vu
aXF1ZVB0cjxnY2hhcj4gcnVudGltZURpcihnX3dpbjMyX2dldF9wYWNrYWdlX2luc3RhbGxhdGlv
bl9kaXJlY3Rvcnlfb2ZfbW9kdWxlKGhtb2R1bGUpKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBk
YXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKHJ1bnRpbWVEaXIuZ2V0KCksICJzaGFyZSIsICJ3ZWJr
aXRndGstIiBXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7Ci0jZWxzZQotICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IGRhdGFQYXRoKGdfYnVpbGRfZmlsZW5hbWUoREFUQV9ESVIsICJ3
ZWJraXRndGstIiBXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5HLCBOVUxMKSk7Ci0jZW5kaWYK
LQotICAgIGNhY2hlZFBhdGggPSBkYXRhUGF0aC5nZXQoKTsKLSAgICByZXR1cm4gY2FjaGVkUGF0
aDsKLX0KLQotdWludDY0X3QgZ2V0Vm9sdW1lRnJlZVNpemVGb3JQYXRoKGNvbnN0IGNoYXIqIHBh
dGgpCi17Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zv
cl9wYXRoKHBhdGgpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5mbz4gZmlsZUluZm8gPSBhZG9wdEdS
ZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5mbyhmaWxlLmdldCgpLCBHX0ZJTEVfQVRUUklC
VVRFX0ZJTEVTWVNURU1fRlJFRSwgMCwgMCkpOwotICAgIGlmICghZmlsZUluZm8pCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdfZmlsZV9pbmZvX2dldF9hdHRyaWJ1dGVfdWludDY0
KGZpbGVJbmZvLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSk7Ci19Ci0K
LVN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBHVW5pcXVl
UHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIGlmICgh
ZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEdVbmlxdWVQdHI8Y2hh
cj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZW5hbWUuZ2V0KCkpKTsKLSAgICByZXR1
cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJuYW1lLmdldCgpKTsKLX0KLQotVmVjdG9yPFN0cmluZz4g
bGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVyKQot
ewotICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7Ci0KLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBm
aWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIGlmICghZmlsZW5hbWUpCi0g
ICAgICAgIHJldHVybiBlbnRyaWVzOwotCi0gICAgR1VuaXF1ZVB0cjxHRGlyPiBkaXIoZ19kaXJf
b3BlbihmaWxlbmFtZS5nZXQoKSwgMCwgbnVsbHB0cikpOwotICAgIGlmICghZGlyKQotICAgICAg
ICByZXR1cm4gZW50cmllczsKLQotICAgIEdVbmlxdWVQdHI8R1BhdHRlcm5TcGVjPiBwc3BlYyhn
X3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRhdGEoKSkpOwotICAgIHdoaWxlIChj
b25zdCBjaGFyKiBuYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRpci5nZXQoKSkpIHsKLSAgICAgICAg
aWYgKCFnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nKHBzcGVjLmdldCgpLCBuYW1lKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGVudHJ5KGdfYnVpbGRf
ZmlsZW5hbWUoZmlsZW5hbWUuZ2V0KCksIG5hbWUsIG51bGxwdHIpKTsKLSAgICAgICAgZW50cmll
cy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQoKSkpOwotICAgIH0KLQotICAgIHJl
dHVybiBlbnRyaWVzOwotfQotCi1TdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5n
JiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQotewotICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMlcyIsIHByZWZpeC51dGY4KCkuZGF0
YSgpLCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwotICAgIEdV
bmlxdWVQdHI8Z2NoYXI+IHRlbXBQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdG1wX2Rpcigp
LCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOwotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9w
dEdSZWYoZ19maWxlX25ld19mb3JfcGF0aCh0ZW1wUGF0aC5nZXQoKSkpOwotCi0gICAgaGFuZGxl
ID0gZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgR19GSUxFX0NSRUFURV9OT05F
LCAwLCAwKTsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBQYXRoLmdldCgpKTsK
LX0KLQotUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU9wZW5Nb2RlIG1vZGUpCi17Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVz
Y2FwZWRGaWxlbmFtZShwYXRoKTsKLSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4g
aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKLQotICAgIEdSZWZQdHI8R0ZpbGU+IGZpbGUgPSBh
ZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChmaWxlbmFtZS5nZXQoKSkpOwotICAgIEdGaWxl
SU9TdHJlYW0qIGlvU3RyZWFtID0gMDsKLSAgICBpZiAobW9kZSA9PSBPcGVuRm9yUmVhZCkKLSAg
ICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgMCwgMCk7
Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUpIHsKLSAgICAgICAgaWYgKGdfZmls
ZV90ZXN0KGZpbGVuYW1lLmdldCgpLCBzdGF0aWNfY2FzdDxHRmlsZVRlc3Q+KEdfRklMRV9URVNU
X0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkKLSAgICAgICAgICAgIGlvU3RyZWFt
ID0gZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCksIDAsIDApOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVhdGVfcmVhZHdyaXRlKGZpbGUuZ2V0
KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGlvU3Ry
ZWFtOwotfQotCi12b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKLXsK
LSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Z19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxlKSwgMCwgMCk7Ci0gICAgZ19vYmpl
Y3RfdW5yZWYoaGFuZGxlKTsKLSAgICBoYW5kbGUgPSBpbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxl
OwotfQotCi1sb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9u
ZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQotewotICAgIEdTZWVrVHlwZSBz
ZWVrVHlwZSA9IEdfU0VFS19TRVQ7Ci0gICAgc3dpdGNoIChvcmlnaW4pIHsKLSAgICBjYXNlIFNl
ZWtGcm9tQmVnaW5uaW5nOgotICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50OgotICAgICAgICBzZWVrVHlwZSA9IEdf
U0VFS19DVVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2Vla0Zyb21FbmQ6Ci0gICAgICAg
IHNlZWtUeXBlID0gR19TRUVLX0VORDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgaWYgKCFnX3NlZWthYmxl
X3NlZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFN
KGhhbmRsZSkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIHNlZWtUeXBlLCAw
LCAwKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBnX3NlZWthYmxlX3RlbGwoR19T
RUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkp
KSk7Ci19Ci0KLWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGdzaXplIGJ5dGVzV3JpdHRlbjsKLSAg
ICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3RyZWFtX2dldF9vdXRwdXRfc3RyZWFt
KEdfSU9fU1RSRUFNKGhhbmRsZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKLSAgICByZXR1cm4gYnl0ZXNXcml0dGVu
OwotfQotCi1pbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwot
ICAgIGRvIHsKLSAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWQo
Z19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NUUkVBTShoYW5kbGUpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAw
LCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAoYnl0ZXNSZWFkID49IDApCi0gICAgICAg
ICAgICByZXR1cm4gYnl0ZXNSZWFkOwotICAgIH0gd2hpbGUgKGVycm9yICYmIGVycm9yLT5jb2Rl
ID09IEdfRklMRV9FUlJPUl9JTlRSKTsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWJvb2wgdW5sb2Fk
TW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKLXsKLSNpZiBPUyhXSU5ET1dTKQotICAgIHJl
dHVybiA6OkZyZWVMaWJyYXJ5KG1vZHVsZSk7Ci0jZWxzZQotICAgIHJldHVybiBnX21vZHVsZV9j
bG9zZShtb2R1bGUpOwotI2VuZGlmCi19Ci0KLWJvb2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HYW1l
cGFkc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYjI5ZjJiOTU0NmZj
MTgzOWM0ZWE4ZWI1Nzg0YThhNTYyMzIzNDkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3Rr
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKLQotI2lmIEVOQUJMRShH
QU1FUEFEX0RFUFJFQ0FURUQpCi0KLSNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIKLSNp
bmNsdWRlICJHYW1lcGFkTGlzdC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDxn
aW8vZ3VuaXhpbnB1dHN0cmVhbS5oPgotI2luY2x1ZGUgPGd1ZGV2L2d1ZGV2Lmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgR2FtZXBhZERldmljZUd0ayA6IHB1YmxpYyBHYW1lcGFkRGV2aWNlTGludXggewot
cHVibGljOgotICAgIGV4cGxpY2l0IEdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUp
OwotICAgIH5HYW1lcGFkRGV2aWNlR3RrKCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGdib29s
ZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSk7
Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07Ci0gICAgR1JlZlB0cjxH
U291cmNlPiBtX3NvdXJjZTsKLX07Ci0KLUdhbWVwYWREZXZpY2VHdGs6OkdhbWVwYWREZXZpY2VH
dGsoU3RyaW5nIGRldmljZUZpbGUpCi0gICAgOiBHYW1lcGFkRGV2aWNlTGludXgoZGV2aWNlRmls
ZSkKLXsKLSAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX3VuaXhfaW5wdXRfc3RyZWFtX25ldyht
X2ZpbGVEZXNjcmlwdG9yLCBGQUxTRSkpOwotICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfcG9s
bGFibGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0o
bV9pbnB1dFN0cmVhbS5nZXQoKSksIDApKTsKLSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9z
b3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlYWRDYWxsYmFjayks
IHRoaXMsIDApOwotICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgMCk7Ci19Ci0K
LUdhbWVwYWREZXZpY2VHdGs6On5HYW1lcGFkRGV2aWNlR3RrKCkKLXsKLSAgICBpZiAobV9zb3Vy
Y2UpCi0gICAgICAgIGdfc291cmNlX2Rlc3Ryb3kobV9zb3VyY2UuZ2V0KCkpOwotfQotCi1nYm9v
bGVhbiBHYW1lcGFkRGV2aWNlR3RrOjpyZWFkQ2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJl
YW0sIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgR2FtZXBhZERldmljZUd0ayogZ2FtZXBhZERldmlj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZERldmljZUd0ayo+KGRhdGEpOwotICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBzdHJ1Y3QganNfZXZlbnQgZXZlbnQ7Ci0KLSAg
ICBnc3NpemUgbGVuID0gZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1fcmVhZF9ub25ibG9ja2luZyhH
X1BPTExBQkxFX0lOUFVUX1NUUkVBTShwb2xsYWJsZVN0cmVhbSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50LCBzaXplb2Yo
ZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotCi0gICAgLy8gRklYTUU6IFByb3Blcmx5IGxv
ZyB0aGUgZXJyb3IuCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgR19JT19FUlJPUl9XT1VMRF9CTE9D
SyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0IHVudGlsCi0gICAgLy8gdGhlIHNvdXJjZSBiZWNv
bWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxTRSBvdGhlcndpc2UuCi0gICAgaWYgKGVycm9yKQot
ICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBH
X0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKLQotICAgIEFTU0VSVF9VTlVTRUQobGVuLCBsZW4gPT0g
c2l6ZW9mKGV2ZW50KSk7Ci0gICAgZ2FtZXBhZERldmljZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQp
OwotICAgIHJldHVybiBUUlVFOwotfQotCi1jbGFzcyBHYW1lcGFkc0d0ayB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgR2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHZvaWQgcmVn
aXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOwotICAgIHZvaWQgdW5yZWdpc3RlckRldmlj
ZShTdHJpbmcgZGV2aWNlRmlsZSk7Ci0KLSAgICB2b2lkIHVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVw
YWRMaXN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgfkdhbWVwYWRzR3RrKCk7Ci0gICAgc3RhdGljIHZv
aWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2
aWNlKiwgZ3BvaW50ZXIgZGF0YSk7Ci0gICAgc3RhdGljIGdib29sZWFuIGlzR2FtZXBhZERldmlj
ZShHVWRldkRldmljZSopOwotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxHYW1lcGFkRGV2
aWNlR3RrPiA+IG1fc2xvdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVwYWREZXZpY2VHdGsq
PiBtX2RldmljZU1hcDsKLQotICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+IG1fZ3VkZXZDbGllbnQ7
Ci19OwotCi1HYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5zaWduZWQgbGVuZ3RoKQotICAgIDog
bV9zbG90cyhsZW5ndGgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1YnN5c3RlbXNbXSA9
IHsgImlucHV0IiwgMCB9OwotICAgIG1fZ3VkZXZDbGllbnQgPSBhZG9wdEdSZWYoZ191ZGV2X2Ns
aWVudF9uZXcoc3Vic3lzdGVtcykpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndWRldkNsaWVu
dC5nZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZlbnRDYWxsYmFjayksIHRoaXMpOwot
Ci0gICAgR1VuaXF1ZVB0cjxHTGlzdD4gZGV2aWNlc0xpc3QoZ191ZGV2X2NsaWVudF9xdWVyeV9i
eV9zdWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vic3lzdGVtc1swXSkpOwotICAgIGZv
ciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0KCk7IGxpc3RJdGVtOyBsaXN0SXRl
bSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgewotICAgICAgICBHVWRldkRldmljZSogZGV2aWNl
ID0gR19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7Ci0gICAgICAgIFN0cmluZyBkZXZpY2VG
aWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZp
Y2UpKTsKLSAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShkZXZpY2UpKQotICAgICAgICAgICAg
cmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGRldmlj
ZSk7Ci0gICAgfQotfQotCi1HYW1lcGFkc0d0azo6fkdhbWVwYWRzR3RrKCkKLXsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRldkNsaWVudC5nZXQoKSwgR19T
SUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci19Ci0KLXZvaWQgR2FtZXBhZHNH
dGs6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQotewotICAgIExPRyhHYW1lcGFk
LCAiR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRh
dGEoKSk7Ci0gICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZpY2VGaWxlKSk7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3RzLnNpemUoKTsgaW5k
ZXgrKykgewotICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7Ci0gICAgICAgICAgICBtX3Ns
b3RzW2luZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8R2FtZXBhZERldmljZUd0az4oZGV2aWNlRmls
ZSk7Ci0gICAgICAgICAgICBtX2RldmljZU1hcC5hZGQoZGV2aWNlRmlsZSwgbV9zbG90c1tpbmRl
eF0uZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgR2FtZXBhZHNHdGs6OnVucmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCi17Ci0g
ICAgTE9HKEdhbWVwYWQsICJHYW1lcGFkc0d0azo6dW5yZWdpc3RlckRldmljZSAlcyIsIGRldmlj
ZUZpbGUuYXNjaWkoKS5kYXRhKCkpOwotICAgIEFTU0VSVChtX2RldmljZU1hcC5jb250YWlucyhk
ZXZpY2VGaWxlKSk7Ci0KLSAgICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gbV9k
ZXZpY2VNYXAudGFrZShkZXZpY2VGaWxlKTsKLSAgICBzaXplX3QgaW5kZXggPSBtX3Nsb3RzLmZp
bmQoZ2FtZXBhZERldmljZSk7Ci0gICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLQotICAg
IG1fc2xvdHNbaW5kZXhdID0gbnVsbHB0cjsKLX0KLQotdm9pZCBHYW1lcGFkc0d0azo6dXBkYXRl
R2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCi17Ci0gICAgQVNTRVJUKG1fc2xvdHMuc2l6
ZSgpID09IGludG8tPmxlbmd0aCgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X3Nsb3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1f
c2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7Ci0gICAgICAgICAgICBHYW1lcGFkRGV2aWNlR3RrKiBn
YW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKLSAgICAgICAgICAgIFJlZlB0cjxHYW1l
cGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmICghZ2FtZXBhZCkK
LSAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAg
ICAgIGdhbWVwYWQtPmluZGV4KGkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERl
dmljZS0+aWQoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmlj
ZS0+dGltZXN0YW1wKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNl
LT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7Ci0gICAgICAgICAgICBn
YW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2
aWNlLT5idXR0b25zRGF0YSgpKTsKLQotICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKLSAgICB9Ci19
Ci0KLXZvaWQgR2FtZXBhZHNHdGs6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqLCBnY2hh
ciogYWN0aW9uLCBHVWRldkRldmljZSogZGV2aWNlLCBncG9pbnRlciBkYXRhKQotewotICAgIGlm
ICghaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdhbWVw
YWRzR3RrKiBnYW1lcGFkc0d0ayA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZHNHdGsqPihkYXRh
KTsKLSAgICBTdHJpbmcgZGV2aWNlRmlsZSA9IFN0cmluZzo6ZnJvbVVURjgoZ191ZGV2X2Rldmlj
ZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKSk7Ci0KLSAgICBpZiAoIWdfc3RyY21wMChhY3Rpb24s
ICJhZGQiKSkKLSAgICAgICAgZ2FtZXBhZHNHdGstPnJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUp
OwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAoYWN0aW9uLCAicmVtb3ZlIikpCi0gICAgICAgIGdh
bWVwYWRzR3RrLT51bnJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUpOwotfQotCi1nYm9vbGVhbiBH
YW1lcGFkc0d0azo6aXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKiBkZXZpY2UpCi17Ci0gICAg
Y29uc3QgZ2NoYXIqIGRldmljZUZpbGUgPSBnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShk
ZXZpY2UpOwotICAgIGNvbnN0IGdjaGFyKiBzeXNmc1BhdGggPSBnX3VkZXZfZGV2aWNlX2dldF9z
eXNmc19wYXRoKGRldmljZSk7Ci0gICAgaWYgKCFkZXZpY2VGaWxlIHx8ICFzeXNmc1BhdGgpCi0g
ICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGlmICghZ191ZGV2X2RldmljZV9oYXNfcHJvcGVy
dHkoZGV2aWNlLCAiSURfSU5QVVQiKSB8fCAhZ191ZGV2X2RldmljZV9oYXNfcHJvcGVydHkoZGV2
aWNlLCAiSURfSU5QVVRfSk9ZU1RJQ0siKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAg
cmV0dXJuIGdfc3RyX2hhc19wcmVmaXgoZGV2aWNlRmlsZSwgIi9kZXYvaW5wdXQvanMiKTsKLX0K
LQotdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykKLXsKLSAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHdGssIGdhbWVwYWRzR3RrLCAoaW50by0+
bGVuZ3RoKCkpKTsKLSAgICBnYW1lcGFkc0d0ay51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQURfREVQ
UkVDQVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFn
ZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTVjODJkOTYxY2I4NzQ3ZWQ2M2FkMDYzODA0
NGY4NzNiZjUyZWFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZUd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMYW5ndWFn
ZS5oIgotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8bG9jYWxlLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVXNpbmcgcGFuZ29fbGFuZ3VhZ2VfZ2V0X2Rl
ZmF1bHQoKSBoZXJlIGlzIG5vdCBhbiBvcHRpb24sIGJlY2F1c2UKLS8vIGl0IGRvZXNuJ3Qgc3Vw
cG9ydCBjaGFuZ2luZyB0aGUgbG9jYWxlIGluIHJ1bnRpbWUsIHNvIGl0IHJldHVybnMKLS8vIGFs
d2F5cyB0aGUgc2FtZSB2YWx1ZS4KLXN0YXRpYyBTdHJpbmcgcGxhdGZvcm1MYW5ndWFnZSgpCi17
Ci0gICAgY2hhciogbG9jYWxlRGVmYXVsdCA9IHNldGxvY2FsZShMQ19DVFlQRSwgTlVMTCk7Ci0K
LSAgICBpZiAoIWxvY2FsZURlZmF1bHQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoImMiKTsKLQot
ICAgIEdVbmlxdWVQdHI8Z2NoYXI+IG5vcm1hbGl6ZWREZWZhdWx0KGdfYXNjaWlfc3RyZG93bihs
b2NhbGVEZWZhdWx0LCAtMSkpOwotICAgIGNoYXIqIHB0ciA9IHN0cmNocihub3JtYWxpemVkRGVm
YXVsdC5nZXQoKSwgJ18nKTsKLQotICAgIGlmIChwdHIpCi0gICAgICAgICpwdHIgPSAnLSc7Ci0K
LSAgICBwdHIgPSBzdHJjaHIobm9ybWFsaXplZERlZmF1bHQuZ2V0KCksICcuJyk7Ci0KLSAgICBp
ZiAocHRyKQotICAgICAgICAqcHRyID0gJ1wwJzsKLQotICAgIHJldHVybiBTdHJpbmcobm9ybWFs
aXplZERlZmF1bHQuZ2V0KCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBwbGF0Zm9ybVVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVmZXJyZWRMYW5n
dWFnZXM7Ci0gICAgdXNlclByZWZlcnJlZExhbmd1YWdlcy5hcHBlbmQocGxhdGZvcm1MYW5ndWFn
ZSgpKTsKLSAgICByZXR1cm4gdXNlclByZWZlcnJlZExhbmd1YWdlczsKLX0KLSAgICAKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2dnaW5nR3RrLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYTg0NTBiYjYwNzk1YWMwMGVhNDkyOGM4NWE3MDgwM2Y1MDY1Nzk5OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvTG9nZ2luZ0d0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhIDxnbnNAZ25v
bWUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLQotI2lmICFM
T0dfRElTQUJMRUQKLQotI2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1T
dHJpbmcgbG9nTGV2ZWxTdHJpbmcoKQotewotICAgIGNoYXIqIGxvZ0VudiA9IGdldGVudigiV0VC
S0lUX0RFQlVHIik7Ci0gICAgaWYgKCFsb2dFbnYpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwotCi0gICAgLy8gV2Ugc2V0IHVwIHRoZSBsb2dzIGFueXdheSBiZWNhdXNlIHNvbWUgb2Yg
b3VyIGxvZ2dpbmcsIHN1Y2ggYXMgU291cCdzIGlzIGF2YWlsYWJsZSBpbiByZWxlYXNlIGJ1aWxk
cy4KLSNpZiBkZWZpbmVkKE5ERUJVRykKLSAgICBnX3dhcm5pbmcoIldFQktJVF9ERUJVRyBpcyBu
b3QgZW1wdHksIGJ1dCB0aGlzIGlzIGEgcmVsZWFzZSBidWlsZC4gTm90aWNlIHRoYXQgbWFueSBs
b2cgbWVzc2FnZXMgd2lsbCBvbmx5IGFwcGVhciBpbiBhIGRlYnVnIGJ1aWxkLiIpOwotI2VuZGlm
Ci0KLSAgICAvLyBUbyBkaXNhYmxlIGxvZ2dpbmcgbm90SW1wbGVtZW50ZWQgc2V0IHRoZSBESVNB
QkxFX05JX1dBUk5JTkcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gMS4KLSAgICBTdHJpbmcgbG9n
TGV2ZWwgPSAiTm90WWV0SW1wbGVtZW50ZWQsIjsKLSAgICBsb2dMZXZlbC5hcHBlbmQobG9nRW52
KTsKLSAgICByZXR1cm4gbG9nTGV2ZWw7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vICFMT0dfRElTQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1NoYXJlZEJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNTIy
ZjZmYWMxMDlmYTQ5NjI4MTliMDExYTBmODc1YzkyYzA4NjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1No
YXJlZEJ1ZmZlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKgotICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
Ci0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGdsaWIuaD4K
LQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZlB0cjxTaGFyZWRCdWZmZXI+IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlRnJvbVJlYWRpbmdGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCi17Ci0g
ICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDU3Ry
aW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZpbGVQYXRoKTsKLSAgICBH
VW5pcXVlT3V0UHRyPGdjaGFyPiBjb250ZW50czsKLSAgICBnc2l6ZSBzaXplOwotICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmls
ZW5hbWUuZGF0YSgpLCAmY29udGVudHMub3V0UHRyKCksICZzaXplLCAmZXJyb3Iub3V0UHRyKCkp
KSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZ1bGx5IHJlYWQgY29udGVudHMgb2Yg
ZmlsZSAlcyAtICVzIiwgZmlsZW5hbWVGb3JEaXNwbGF5KGZpbGVQYXRoKS51dGY4KCkuZGF0YSgp
LCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnRzLmdl
dCgpLCBzaXplKTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
cG8vUE9URklMRVMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMu
aW4KaW5kZXggN2ZhMjgyNTIwY2FlMmU3ZjE3MDk3YTc2ODU0MzdhNmU1NTljNzQwZS4uZmQwOWZj
NzNhZmI0MjBjMTIxZjIwMTNlZTFjOTE0MTUwZTNkMWVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9wby9QT1RGSUxFUy5pbgpAQCAtMSw2ICsxLDYgQEAKICMgTGlzdCBvZiBzb3Vy
Y2UgZmlsZXMgd2hpY2ggY29udGFpbiB0cmFuc2xhdGFibGUgc3RyaW5ncy4KLUVycm9yc0d0ay5j
cHAKIExvY2FsaXplZFN0cmluZ3NHdGsuY3BwCisuLi9nbGliL0Vycm9yc0dsaWIuY3BwCiAuLi8u
Li8uLi9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9zb3VwL0Rvd25sb2FkU291cC5j
cHAKIC4uLy4uLy4uL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25EaWFsb2cuY3BwCiAuLi8uLi8uLi9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRG93
bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvRG93bmxvYWRzL2d0ay9Eb3dubG9hZFNvdXBFcnJvcnNHdGsuY3BwCmluZGV4
IGJhMmU3YjQ1NmE0MTVmMTdkNTk2NTMwMDFiYmRmYWMwYmUyODAzNDIuLmU5Zjk5Y2MyMGEyODQw
MDAwNWM5NTMwYzM0MzQ4OWFkNzFlNjdmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0Rvd25sb2Fkcy9ndGsvRG93bmxvYWRTb3VwRXJyb3JzR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Eb3dubG9hZHMvZ3RrL0Rvd25sb2FkU291
cEVycm9yc0d0ay5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJEb3dubG9hZFNvdXBFcnJvcnMuaCIKIAotI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3Jz
R3RrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHbGliLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUVycm9yLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUdUSy5jbWFrZQppbmRleCA3OWVhZDY0MTkyNzkzMzNmY2EyNjk1ZjVjZGZmZDY5ZDMzYTQ5
NzFjLi44YjE5NTE3YTdkZDE5ZDE3OTg1NmExYzA4YmJhYzVkMzMxYzg4MTViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDkzLDYgKzQ5Myw3IEBAIGxpc3QoSU5TRVJUIFdlYktpdDJf
SU5DTFVERV9ESVJFQ1RPUklFUyAwCiBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vUGx1Z2luUHJvY2Vzcy91bml4IgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9jYWlybyIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z2xpYiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbnR5cGUiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAKaW5kZXggODZjMDViMmYyOTdhMDViOTFiZWY2ODFi
NDFhZWRlMDE1ZTMzNTgzNS4uZDEwMTZiNGRjNTdkN2E1ZTgyMDAyZWU1MjMwMDg3MjEwNzcxMzYy
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93
bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRVUklSZXF1ZXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFVS
SVJlc3BvbnNlUHJpdmF0ZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3JzR3RrLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9FcnJvcnNHbGliLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJl
c3BvbnNlLmg+CiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KICNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRFcnJvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRFcnJvci5jcHAKaW5kZXggNzQxOWVlNzIxYTBmZTg2YWJjMzY0MzZkMjRlYzI1ZTQ2NDIzZThj
Zi4uZjcwYTMwY2E3NmRjMTg0ZDdhODYxNTYwNWRhMjNhNDYyZGY3ZTVkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcApAQCAtMjIsNyAr
MjIsNyBAQAogI2luY2x1ZGUgIldlYktpdEVycm9yLmgiCiAKICNpbmNsdWRlICJXZWJLaXRQcml2
YXRlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0Vycm9yc0dsaWIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAKaW5kZXggMmIx
ZTEyNDk3NmJhNGRkYzY3MTkxNzI1MGU5NzgyOTgwMTQ1YmFjYS4uOGEyMTA1NWExYjlhNDZiMzFm
MGY4MzJjMWZjNGM2NTgwZjEzYjllMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5jcHAKQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAKLSNpbmNsdWRlICJFcnJv
cnNHdGsuaCIKKyNpbmNsdWRlICJFcnJvcnNHbGliLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIK
ICNpbmNsdWRlICJXZWJLaXRFcnJvci5oIgogI2luY2x1ZGUgPGdkay9nZGsuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3Vw
L1dlYlNvdXBDdXN0b21Qcm90b2NvbFJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9zb3VwL1dlYlNvdXBDdXN0b21Qcm90
b2NvbFJlcXVlc3RNYW5hZ2VyLmNwcAppbmRleCBiNjU1ZTQzNTEzZDVlNDEzZTFiOGY1YzYyMmQ4
OGEzOTY1YjA2YTRiLi4wMDVjNWJlYTAzZjM4NTQxMmNhODdmZDhiY2UyNGZlM2NmOGY2ZWMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2Nv
bHMvc291cC9XZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3NvdXAvV2ViU291
cEN1c3RvbVByb3RvY29sUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAKICNpZiBQTEFURk9STShHVEspCi0j
aW5jbHVkZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0ds
aWIuaD4KICNlbGlmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0VmbC5o
PgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcAppbmRleCBlOWQxZDRjMmI3NDRjN2Ez
NjU5NmY5ZGM0OTIyZmQyNjQ4MmY3ZjgzLi5hMTg3ZGVkN2NmMWJmNDU5ODQ0MzY0MzE1ZTMzMTVk
NTAxZWMxYzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVycm9yc0d0ay5jcHAKQEAgLTI5LDcgKzI5LDcgQEAK
ICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKIAogI2luY2x1ZGUgIkFQSUVycm9yLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9FcnJvcnNHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0dsaWIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmlu
dE9wZXJhdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAppbmRleCBiNjIwNWRiOTQ5NTAxM2U0YThlMjIxY2Q2
YmZiNmQ4NDk4MzgzMDEyLi4zZmIxYjcyMmQyZDMwZmU2NDJjMTA0Y2Q3ZjExOTBiZTMzYzUxOWY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBy
aW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0Vycm9y
c0d0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRXJyb3JzR2xpYi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276816</attachid>
            <date>2016-04-20 04:34:10 -0700</date>
            <delta_ts>2016-04-20 08:02:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156787-20160420143429.patch</filename>
            <type>text/plain</type>
            <size>50581</size>
            <attacher name="Claudio Saavedra">csaavedra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5NzY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzRhYzc5ZjllZWIzYTcz
YjgyZTI5OTgwYTU5NzczZGMwMDAxNmY5OC4uNmU2YjU2ZmI2ZTc3ZDVmOGRmYzc2NDM3YmMzMzI0
N2NhM2FhMTg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA0LTIwICBDbGF1
ZGlvIFNhYXZlZHJhICA8Y3NhYXZlZHJhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTW92
ZSBHVEsrLWluZGVwZW5kZW50IHBsYXRmb3JtIGNvZGUgdG8gcGxhdGZvcm0vZ2xpYgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2Nzg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgaXMgcGxlbnR5
IG9mIGNvZGUgaW4gcGxhdGZvcm0vZ3RrIHRoYXQgaXMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgR1RL
KyBsaWJyYXJ5LgorICAgICAgICBNb3ZlIHRob3NlIGZpbGVzIHRvIHBsYXRmb3JtL2dsaWIgc28g
dGhhdCB0aGV5IGNhbiBiZSByZXVzZWQgYnkgb3RoZXIgR0xpYi1iYXNlZCBwb3J0cy4KKworICAg
ICAgICBBbHNvIGNsZWFuIHNvbWUgc3R5bGUgd2FybmluZ3MgaW4gdGhvc2UgZmlsZXMuCisKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZTogTW92ZSB0aGUgZmlsZXMuCisgICAgICAgICogcGxh
dGZvcm0vZ2xpYi9FdmVudExvb3BHbGliLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRM
b29wOjpjeWNsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OnVuZXNjYXBlZEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmaWxlbmFtZUZvckRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVGaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdl
YkNvcmU6OmdldEZpbGVTdGF0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldEZpbGVDcmVhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RmlsZU1ldGFk
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6aG9t
ZURpcmVjdG9yeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6cGF0aEdldEZpbGVOYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OmFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpzaGFyZWRSZXNvdXJjZXNQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFZvbHVtZUZy
ZWVTaXplRm9yUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Omxpc3REaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6b3BlblRlbXBv
cmFyeUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlbkZpbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y2xvc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnNlZWtGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRGcm9tRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bmxvYWRNb2R1bGUpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZExp
bmtPckNvcHlGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xpYi5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2FtZXBhZHNHdGsuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUdsaWI6OkdhbWVwYWREZXZpY2VHbGli
KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VHbGliOjp+R2FtZXBhZERldmljZUds
aWIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUdsaWI6OnJlYWRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6OkdhbWVwYWRzR2xpYik6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6On5HYW1lcGFkc0dsaWIpOgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZHNHbGliOjpyZWdpc3RlckRldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1l
cGFkc0dsaWI6OnVucmVnaXN0ZXJEZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNH
bGliOjp1cGRhdGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6
Om9uVUV2ZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGliOjppc0dh
bWVwYWREZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6c2FtcGxlR2FtZXBhZHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dsaWIvU2hhcmVkQnVmZmVyR2xpYi5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2hhcmVkQnVmZmVyR3RrLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlRnJvbVJlYWRpbmdGaWxlKToKKwogMjAxNi0wNC0x
OSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAg
UkVHUkVTU0lPTihyMTk4NzgyKTogU0hPVUxEIE5FVkVSIEJFIFJFQUNIRUQgZmFpbHVyZSBpbiBJ
bWFnZVNvdXJjZTo6c2V0RGF0YSBzaW5jZSByMTk4NzgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IDk1MDhjZTRlZjk2YTRmMDAyNWUwNGFjNTI5YjJhYzE5NWE2MGMyZjMuLmRlZjI2ZWJj
NzA3MTJiNTU1M2YyMTQ0ZGVhZGEzZGJjNjBhZjgyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNt
YWtlCkBAIC04NSw5ICs4NSwxMyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMS5jcHAKICAgICBwbGF0
Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5jcHAKIAorICAgIHBsYXRm
b3JtL2dsaWIvRXZlbnRMb29wR2xpYi5jcHAKKyAgICBwbGF0Zm9ybS9nbGliL0ZpbGVTeXN0ZW1H
bGliLmNwcAorICAgIHBsYXRmb3JtL2dsaWIvR2FtZXBhZHNHbGliLmNwcAogICAgIHBsYXRmb3Jt
L2dsaWIvS2V5ZWREZWNvZGVyR2xpYi5jcHAKICAgICBwbGF0Zm9ybS9nbGliL0tleWVkRW5jb2Rl
ckdsaWIuY3BwCiAgICAgcGxhdGZvcm0vZ2xpYi9NYWluVGhyZWFkU2hhcmVkVGltZXJHTGliLmNw
cAorICAgIHBsYXRmb3JtL2dsaWIvU2hhcmVkQnVmZmVyR2xpYi5jcHAKIAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwCkBAIC0xMzcsMTQgKzE0MSwxMCBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNw
cAogCiAgICAgcGxhdGZvcm0vZ3RrL0Vycm9yc0d0ay5jcHAKLSAgICBwbGF0Zm9ybS9ndGsvRXZl
bnRMb29wR3RrLmNwcAotICAgIHBsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAotICAgIHBs
YXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvTGFuZ3VhZ2VHdGsu
Y3BwCiAgICAgcGxhdGZvcm0vZ3RrL0xvZ2dpbmdHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL01J
TUVUeXBlUmVnaXN0cnlHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1Njcm9sbEFuaW1hdG9yR3Rr
LmNwcAotICAgIHBsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwCiAgICAgcGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3Rr
LmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0V2ZW50TG9v
cEdsaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9FdmVudExvb3BHbGliLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40ZWY3YjVjYjc3Yjk0NGZiZTA1ODE4NGY4NjE0NDA1MmFlNmE1MjJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9FdmVudExvb3BH
bGliLmNwcApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50
aSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudExvb3AuaCIKKworI2lu
Y2x1ZGUgPGdsaWIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEV2ZW50TG9vcDo6
Y3ljbGUoKQoreworICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTgxODhmZjI1MDBmYmU2MjIyOTdj
ZWZjMWU1NDI0MzZjZGJlNzgwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dsaWIvRmlsZVN5c3RlbUdsaWIuY3BwCkBAIC0wLDAgKzEsMzc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhLCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj
KSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorCisjaW5jbHVkZSAiRmls
ZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJVVUlE
LmgiCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxn
bGliL2dzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dMaWJVdGlsaXRpZXMuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKiBPbiBsaW51eCBmaWxlIG5hbWVz
IGFyZSBqdXN0IHJhdyBieXRlcywgc28gYWxzbyBzdHJpbmdzIHRoYXQgY2Fubm90IGJlIGVuY29k
ZWQgaW4gYW55IHdheQorICogYXJlIHZhbGlkIGZpbGUgbmFtZXMuIFRoaXMgbWVhbiB0aGF0IHdl
IGNhbm5vdCBqdXN0IHN0b3JlIGEgZmlsZSBuYW1lIGFzLWlzIGluIGEgU3RyaW5nCisgKiBidXQg
d2UgaGF2ZSB0byBlc2NhcGUgaXQuCisgKiBPbiBXaW5kb3dzIHRoZSBHTGliIGZpbGUgbmFtZSBl
bmNvZGluZyBpcyBhbHdheXMgVVRGLTggc28gd2UgY2FuIG9wdGltaXplIHRoaXMgY2FzZS4gKi8K
K1N0cmluZyBmaWxlbmFtZVRvU3RyaW5nKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQoreworICAgIGlm
ICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworI2lmIE9TKFdJTkRPV1Mp
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpOworI2Vsc2UKKyAgICBHVW5p
cXVlUHRyPGdjaGFyPiBlc2NhcGVkU3RyaW5nKGdfdXJpX2VzY2FwZV9zdHJpbmcoZmlsZW5hbWUs
ICIvOiIsIGZhbHNlKSk7CisgICAgcmV0dXJuIGVzY2FwZWRTdHJpbmcuZ2V0KCk7CisjZW5kaWYK
K30KKworc3RhdGljIEdVbmlxdWVQdHI8Y2hhcj4gdW5lc2NhcGVkRmlsZW5hbWUoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gR1VuaXF1ZVB0cjxjaGFyPihnX3N0
cmR1cChwYXRoLnV0ZjgoKS5kYXRhKCkpKTsKKyNlbHNlCisgICAgcmV0dXJuIEdVbmlxdWVQdHI8
Y2hhcj4oZ191cmlfdW5lc2NhcGVfc3RyaW5nKHBhdGgudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikp
OworI2VuZGlmCit9CisKK0NTdHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyNpZiBPUyhXSU5ET1dTKQorICAgIHJldHVybiBwYXRoLnV0ZjgoKTsK
KyNlbHNlCisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFt
ZShwYXRoKTsKKyAgICByZXR1cm4gZmlsZW5hbWUuZ2V0KCk7CisjZW5kaWYKK30KKworLy8gQ29u
dmVydHMgYSBzdHJpbmcgdG8gc29tZXRoaW5nIHN1aXRhYmxlIHRvIGJlIGRpc3BsYXllZCB0byB0
aGUgdXNlci4KK1N0cmluZyBmaWxlbmFtZUZvckRpc3BsYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcp
Cit7CisjaWYgT1MoV0lORE9XUykKKyAgICByZXR1cm4gc3RyaW5nOworI2Vsc2UKKyAgICBHVW5p
cXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHN0cmluZyk7CisgICAg
aWYgKCFmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKworICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IGRpc3BsYXkoZ19maWxlbmFtZV90b191dGY4KGZpbGVuYW1lLmdldCgpLCAtMSwgbnVs
bHB0ciwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIGlmICghZGlzcGxheSkKKyAgICAgICAgcmV0
dXJuIHN0cmluZzsKKworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGRpc3BsYXkuZ2V0KCkp
OworI2VuZGlmCit9CisKK2Jvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsK
KyAgICByZXR1cm4gZmlsZW5hbWUgPyBnX2ZpbGVfdGVzdChmaWxlbmFtZS5nZXQoKSwgR19GSUxF
X1RFU1RfRVhJU1RTKSA6IGZhbHNlOworfQorCitib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKQoreworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2NhcGVkRmls
ZW5hbWUocGF0aCk7CisgICAgcmV0dXJuIGZpbGVuYW1lID8gZ19yZW1vdmUoZmlsZW5hbWUuZ2V0
KCkpICE9IC0xIDogZmFsc2U7Cit9CisKK2Jvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2Nh
cGVkRmlsZW5hbWUocGF0aCk7CisgICAgcmV0dXJuIGZpbGVuYW1lID8gZ19ybWRpcihmaWxlbmFt
ZS5nZXQoKSkgIT0gLTEgOiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgZ2V0RmlsZVN0YXQoY29u
c3QgU3RyaW5nJiBwYXRoLCBHU3RhdEJ1Ziogc3RhdEJ1ZmZlcikKK3sKKyAgICBHVW5pcXVlUHRy
PGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOworICAgIGlmICghZmls
ZW5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBnX3N0YXQoZmlsZW5h
bWUuZ2V0KCksIHN0YXRCdWZmZXIpICE9IC0xOworfQorCitib29sIGdldEZpbGVTaXplKGNvbnN0
IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHRTaXplKQoreworICAgIEdTdGF0QnVmIHN0
YXRSZXN1bHQ7CisgICAgaWYgKCFnZXRGaWxlU3RhdChwYXRoLCAmc3RhdFJlc3VsdCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdFNpemUgPSBzdGF0UmVzdWx0LnN0X3NpemU7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgZ2V0RmlsZVNpemUoUGxhdGZvcm1GaWxlSGFu
ZGxlLCBsb25nIGxvbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIGdldEZpbGVDcmVhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwgdGltZV90
JikKK3sKKyAgICAvLyBGSVhNRTogSXMgdGhlcmUgYSB3YXkgdG8gcmV0cmlldmUgZmlsZSBjcmVh
dGlvbiB0aW1lIHdpdGggR3RrIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQ/CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdGltZV90JiBtb2RpZmllZFRpbWUpCit7CisgICAgR1N0YXRCdWYgc3RhdFJlc3Vs
dDsKKyAgICBpZiAoIWdldEZpbGVTdGF0KHBhdGgsICZzdGF0UmVzdWx0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbW9kaWZpZWRUaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBnZXRGaWxlTWV0YWRhdGEoY29uc3QgU3RyaW5nJiBw
YXRoLCBGaWxlTWV0YWRhdGEmIG1ldGFkYXRhKQoreworICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7
CisgICAgaWYgKCFnZXRGaWxlU3RhdChwYXRoLCAmc3RhdFJlc3VsdCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1ldGFkYXRhLm1vZGlmaWNhdGlvblRpbWUgPSBzdGF0UmVzdWx0LnN0
X210aW1lOworICAgIG1ldGFkYXRhLmxlbmd0aCA9IHN0YXRSZXN1bHQuc3Rfc2l6ZTsKKyAgICBt
ZXRhZGF0YS50eXBlID0gU19JU0RJUihzdGF0UmVzdWx0LnN0X21vZGUpID8gRmlsZU1ldGFkYXRh
OjpUeXBlRGlyZWN0b3J5IDogRmlsZU1ldGFkYXRhOjpUeXBlRmlsZTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworU3RyaW5nIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQoreworICAgIGlmIChwYXRoLmVuZHNXaXRoKEdf
RElSX1NFUEFSQVRPUl9TKSkKKyAgICAgICAgcmV0dXJuIHBhdGggKyBjb21wb25lbnQ7CisgICAg
cmV0dXJuIHBhdGggKyBHX0RJUl9TRVBBUkFUT1JfUyArIGNvbXBvbmVudDsKK30KKworYm9vbCBt
YWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IGZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7CisgICAgcmV0dXJuIGZp
bGVuYW1lID8gZ19ta2Rpcl93aXRoX3BhcmVudHMoZmlsZW5hbWUuZ2V0KCksIFNfSVJXWFUpICE9
IC0xIDogZmFsc2U7Cit9CisKK1N0cmluZyBob21lRGlyZWN0b3J5UGF0aCgpCit7CisgICAgcmV0
dXJuIGZpbGVuYW1lVG9TdHJpbmcoZ19nZXRfaG9tZV9kaXIoKSk7Cit9CisKK1N0cmluZyBwYXRo
R2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoTmFtZSkKK3sKKyAgICBHVW5pcXVlUHRyPGdj
aGFyPiB0bXBGaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGhOYW1lKTsKKyAgICBpZiAo
IXRtcEZpbGVuYW1lKQorICAgICAgICByZXR1cm4gcGF0aE5hbWU7CisKKyAgICBHVW5pcXVlUHRy
PGdjaGFyPiBiYXNlTmFtZShnX3BhdGhfZ2V0X2Jhc2VuYW1lKHRtcEZpbGVuYW1lLmdldCgpKSk7
CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYmFzZU5hbWUuZ2V0KCkpOworfQorCitDU3Ry
aW5nIGFwcGxpY2F0aW9uRGlyZWN0b3J5UGF0aCgpCit7CisgICAgQ1N0cmluZyBwYXRoID0gZ2V0
Q3VycmVudEV4ZWN1dGFibGVQYXRoKCk7CisgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gcGF0aDsKKworICAgIC8vIElmIHRoZSBhYm92ZSBmYWlscywgY2hlY2sgdGhlIFBB
VEggZW52IHZhcmlhYmxlLgorICAgIEdVbmlxdWVQdHI8Y2hhcj4gY3VycmVudEV4ZVBhdGgoZ19m
aW5kX3Byb2dyYW1faW5fcGF0aChnX2dldF9wcmduYW1lKCkpKTsKKyAgICBpZiAoIWN1cnJlbnRF
eGVQYXRoLmdldCgpKQorICAgICAgICByZXR1cm4gQ1N0cmluZygpOworCisgICAgR1VuaXF1ZVB0
cjxjaGFyPiBkaXJuYW1lKGdfcGF0aF9nZXRfZGlybmFtZShjdXJyZW50RXhlUGF0aC5nZXQoKSkp
OworICAgIHJldHVybiBkaXJuYW1lLmdldCgpOworfQorCitDU3RyaW5nIHNoYXJlZFJlc291cmNl
c1BhdGgoKQoreworICAgIHN0YXRpYyBDU3RyaW5nIGNhY2hlZFBhdGg7CisgICAgaWYgKCFjYWNo
ZWRQYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gY2FjaGVkUGF0aDsKKworI2lmIE9TKFdJ
TkRPV1MpCisgICAgSE1PRFVMRSBobW9kdWxlID0gMDsKKyAgICBHZXRNb2R1bGVIYW5kbGVFeEEo
R0VUX01PRFVMRV9IQU5ETEVfRVhfRkxBR19GUk9NX0FERFJFU1MsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHNoYXJlZFJlc291cmNlc1BhdGgpLCAmaG1vZHVsZSk7CisKKyAgICBHVW5pcXVlUHRy
PGdjaGFyPiBydW50aW1lRGlyKGdfd2luMzJfZ2V0X3BhY2thZ2VfaW5zdGFsbGF0aW9uX2RpcmVj
dG9yeV9vZl9tb2R1bGUoaG1vZHVsZSkpOworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGRhdGFQYXRo
KGdfYnVpbGRfZmlsZW5hbWUocnVudGltZURpci5nZXQoKSwgInNoYXJlIiwgIndlYmtpdGd0ay0i
IFdFQktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkcsIE5VTEwpKTsKKyNlbHNlCisgICAgR1VuaXF1
ZVB0cjxnY2hhcj4gZGF0YVBhdGgoZ19idWlsZF9maWxlbmFtZShEQVRBX0RJUiwgIndlYmtpdGd0
ay0iIFdFQktJVEdUS19BUElfVkVSU0lPTl9TVFJJTkcsIE5VTEwpKTsKKyNlbmRpZgorCisgICAg
Y2FjaGVkUGF0aCA9IGRhdGFQYXRoLmdldCgpOworICAgIHJldHVybiBjYWNoZWRQYXRoOworfQor
Cit1aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBhdGgoY29uc3QgY2hhciogcGF0aCkKK3sK
KyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgo
cGF0aCkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBmaWxlSW5mbyA9IGFkb3B0R1JlZihnX2Zp
bGVfcXVlcnlfZmlsZXN5c3RlbV9pbmZvKGZpbGUuZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklM
RVNZU1RFTV9GUkVFLCAwLCAwKSk7CisgICAgaWYgKCFmaWxlSW5mbykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gZ19maWxlX2luZm9fZ2V0X2F0dHJpYnV0ZV91aW50NjQoZmlsZUlu
Zm8uZ2V0KCksIEdfRklMRV9BVFRSSUJVVEVfRklMRVNZU1RFTV9GUkVFKTsKK30KKworU3RyaW5n
IGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIEdVbmlxdWVQdHI8Z2No
YXI+IGZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7CisgICAgaWYgKCFmaWxlbmFt
ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkaXJu
YW1lKGdfcGF0aF9nZXRfZGlybmFtZShmaWxlbmFtZS5nZXQoKSkpOworICAgIHJldHVybiBTdHJp
bmc6OmZyb21VVEY4KGRpcm5hbWUuZ2V0KCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBsaXN0RGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCit7CisgICAg
VmVjdG9yPFN0cmluZz4gZW50cmllczsKKworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1l
ID0gdW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7CisgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAg
cmV0dXJuIGVudHJpZXM7CisKKyAgICBHVW5pcXVlUHRyPEdEaXI+IGRpcihnX2Rpcl9vcGVuKGZp
bGVuYW1lLmdldCgpLCAwLCBudWxscHRyKSk7CisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVy
biBlbnRyaWVzOworCisgICAgR1VuaXF1ZVB0cjxHUGF0dGVyblNwZWM+IHBzcGVjKGdfcGF0dGVy
bl9zcGVjX25ldygoZmlsdGVyLnV0ZjgoKSkuZGF0YSgpKSk7CisgICAgd2hpbGUgKGNvbnN0IGNo
YXIqIG5hbWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyLmdldCgpKSkgeworICAgICAgICBpZiAoIWdf
cGF0dGVybl9tYXRjaF9zdHJpbmcocHNwZWMuZ2V0KCksIG5hbWUpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZW50cnkoZ19idWlsZF9maWxlbmFt
ZShmaWxlbmFtZS5nZXQoKSwgbmFtZSwgbnVsbHB0cikpOworICAgICAgICBlbnRyaWVzLmFwcGVu
ZChmaWxlbmFtZVRvU3RyaW5nKGVudHJ5LmdldCgpKSk7CisgICAgfQorCisgICAgcmV0dXJuIGVu
dHJpZXM7Cit9CisKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZp
eCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgR1VuaXF1ZVB0cjxnY2hhcj4g
ZmlsZW5hbWUoZ19zdHJkdXBfcHJpbnRmKCIlcyVzIiwgcHJlZml4LnV0ZjgoKS5kYXRhKCksIGNy
ZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgR1VuaXF1ZVB0
cjxnY2hhcj4gdGVtcFBhdGgoZ19idWlsZF9maWxlbmFtZShnX2dldF90bXBfZGlyKCksIGZpbGVu
YW1lLmdldCgpLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihn
X2ZpbGVfbmV3X2Zvcl9wYXRoKHRlbXBQYXRoLmdldCgpKSk7CisKKyAgICBoYW5kbGUgPSBnX2Zp
bGVfY3JlYXRlX3JlYWR3cml0ZShmaWxlLmdldCgpLCBHX0ZJTEVfQ1JFQVRFX05PTkUsIDAsIDAp
OworICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcFBhdGguZ2V0KCkpOworfQorCitQ
bGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1v
ZGUgbW9kZSkKK3sKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZp
bGVuYW1lKHBhdGgpOworICAgIGlmICghZmlsZW5hbWUpCisgICAgICAgIHJldHVybiBpbnZhbGlk
UGxhdGZvcm1GaWxlSGFuZGxlOworCisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1Jl
ZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lLmdldCgpKSk7CisgICAgR0ZpbGVJT1N0cmVh
bSogaW9TdHJlYW0gPSAwOworICAgIGlmIChtb2RlID09IE9wZW5Gb3JSZWFkKQorICAgICAgICBp
b1N0cmVhbSA9IGdfZmlsZV9vcGVuX3JlYWR3cml0ZShmaWxlLmdldCgpLCAwLCAwKTsKKyAgICBl
bHNlIGlmIChtb2RlID09IE9wZW5Gb3JXcml0ZSkgeworICAgICAgICBpZiAoZ19maWxlX3Rlc3Qo
ZmlsZW5hbWUuZ2V0KCksIHN0YXRpY19jYXN0PEdGaWxlVGVzdD4oR19GSUxFX1RFU1RfRVhJU1RT
IHwgR19GSUxFX1RFU1RfSVNfUkVHVUxBUikpKQorICAgICAgICAgICAgaW9TdHJlYW0gPSBnX2Zp
bGVfb3Blbl9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGlvU3RyZWFtID0gZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQoKSwgR19G
SUxFX0NSRUFURV9OT05FLCAwLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW9TdHJlYW07Cit9
CisKK3ZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGlm
ICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBnX2lvX3N0
cmVhbV9jbG9zZShHX0lPX1NUUkVBTShoYW5kbGUpLCAwLCAwKTsKKyAgICBnX29iamVjdF91bnJl
ZihoYW5kbGUpOworICAgIGhhbmRsZSA9IGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGU7Cit9CisK
K2xvbmcgbG9uZyBzZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcg
b2Zmc2V0LCBGaWxlU2Vla09yaWdpbiBvcmlnaW4pCit7CisgICAgR1NlZWtUeXBlIHNlZWtUeXBl
ID0gR19TRUVLX1NFVDsKKyAgICBzd2l0Y2ggKG9yaWdpbikgeworICAgIGNhc2UgU2Vla0Zyb21C
ZWdpbm5pbmc6CisgICAgICAgIHNlZWtUeXBlID0gR19TRUVLX1NFVDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTZWVrRnJvbUN1cnJlbnQ6CisgICAgICAgIHNlZWtUeXBlID0gR19TRUVLX0NV
UjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZWVrRnJvbUVuZDoKKyAgICAgICAgc2Vla1R5
cGUgPSBHX1NFRUtfRU5EOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWdfc2Vla2FibGVfc2VlayhH
X1NFRUtBQkxFKGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxl
KSkpLAorICAgICAgICBvZmZzZXQsIHNlZWtUeXBlLCAwLCAwKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIGdfc2Vla2FibGVfdGVsbChHX1NFRUtBQkxFKGdf
aW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19JT19TVFJFQU0oaGFuZGxlKSkpKTsKK30KKwor
aW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCit7CisgICAgZ3NpemUgYnl0ZXNXcml0dGVuOworICAgIGdfb3V0cHV0
X3N0cmVhbV93cml0ZV9hbGwoZ19pb19zdHJlYW1fZ2V0X291dHB1dF9zdHJlYW0oR19JT19TVFJF
QU0oaGFuZGxlKSksCisgICAgICAgIGRhdGEsIGxlbmd0aCwgJmJ5dGVzV3JpdHRlbiwgMCwgMCk7
CisgICAgcmV0dXJuIGJ5dGVzV3JpdHRlbjsKK30KKworaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkbyB7CisgICAgICAgIGdzc2l6ZSBieXRlc1Jl
YWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkKGdfaW9fc3RyZWFtX2dldF9pbnB1dF9zdHJlYW0oR19J
T19TVFJFQU0oaGFuZGxlKSksCisgICAgICAgICAgICBkYXRhLCBsZW5ndGgsIDAsICZlcnJvci5v
dXRQdHIoKSk7CisgICAgICAgIGlmIChieXRlc1JlYWQgPj0gMCkKKyAgICAgICAgICAgIHJldHVy
biBieXRlc1JlYWQ7CisgICAgfSB3aGlsZSAoZXJyb3IgJiYgZXJyb3ItPmNvZGUgPT0gR19GSUxF
X0VSUk9SX0lOVFIpOworICAgIHJldHVybiAtMTsKK30KKworYm9vbCB1bmxvYWRNb2R1bGUoUGxh
dGZvcm1Nb2R1bGUgbW9kdWxlKQoreworI2lmIE9TKFdJTkRPV1MpCisgICAgcmV0dXJuIDo6RnJl
ZUxpYnJhcnkobW9kdWxlKTsKKyNlbHNlCisgICAgcmV0dXJuIGdfbW9kdWxlX2Nsb3NlKG1vZHVs
ZSk7CisjZW5kaWYKK30KKworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0dh
bWVwYWRzR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xp
Yi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjhiZDIxYTVlODY2MjI2MjRkM2NkN2E5ZGM4MzUyYzI0ZTI0NTg0
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvR2FtZXBh
ZHNHbGliLmNwcApAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBa
YW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdhbWVwYWRzLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRF9E
RVBSRUNBVEVEKQorCisjaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCisjaW5jbHVkZSAi
R2FtZXBhZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8Z2lvL2d1bml4
aW5wdXRzdHJlYW0uaD4KKyNpbmNsdWRlIDxndWRldi9ndWRldi5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdhbWVwYWREZXZpY2VHbGliIDogcHVibGljIEdhbWVwYWREZXZpY2VMaW51eCB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgR2FtZXBhZERldmljZUdsaWIoU3RyaW5nIGRldmljZUZpbGUpOworICAg
IH5HYW1lcGFkRGV2aWNlR2xpYigpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBnYm9vbGVhbiBy
ZWFkQ2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpOworICAg
IEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOworICAgIEdSZWZQdHI8R1NvdXJj
ZT4gbV9zb3VyY2U7Cit9OworCitHYW1lcGFkRGV2aWNlR2xpYjo6R2FtZXBhZERldmljZUdsaWIo
U3RyaW5nIGRldmljZUZpbGUpCisgICAgOiBHYW1lcGFkRGV2aWNlTGludXgoZGV2aWNlRmlsZSkK
K3sKKyAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX3VuaXhfaW5wdXRfc3RyZWFtX25ldyhtX2Zp
bGVEZXNjcmlwdG9yLCBGQUxTRSkpOworICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFi
bGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0obV9p
bnB1dFN0cmVhbS5nZXQoKSksIDApKTsKKyAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3Vy
Y2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJlYWRDYWxsYmFjayksIHRo
aXMsIDApOworICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQoKSwgMCk7Cit9CisKK0dh
bWVwYWREZXZpY2VHbGliOjp+R2FtZXBhZERldmljZUdsaWIoKQoreworICAgIGlmIChtX3NvdXJj
ZSkKKyAgICAgICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQoKSk7Cit9CisKK2dib29s
ZWFuIEdhbWVwYWREZXZpY2VHbGliOjpyZWFkQ2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJl
YW0sIGdwb2ludGVyIGRhdGEpCit7CisgICAgR2FtZXBhZERldmljZUdsaWIqIGdhbWVwYWREZXZp
Y2UgPSByZWludGVycHJldF9jYXN0PEdhbWVwYWREZXZpY2VHbGliKj4oZGF0YSk7CisgICAgR1Vu
aXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKKwor
ICAgIGdzc2l6ZSBsZW4gPSBnX3BvbGxhYmxlX2lucHV0X3N0cmVhbV9yZWFkX25vbmJsb2NraW5n
KEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKHBvbGxhYmxlU3RyZWFtKSwKKyAgICAgICAgJmV2ZW50
LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgLy8gRklYTUU6IFBy
b3Blcmx5IGxvZyB0aGUgZXJyb3IuCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgR19JT19FUlJPUl9X
T1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0IHVudGlsCisgICAgLy8gdGhlIHNv
dXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxTRSBvdGhlcndpc2UuCisgICAgaWYg
KGVycm9yKQorICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lP
X0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKKworICAgIEFTU0VSVF9VTlVTRUQobGVu
LCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7CisgICAgZ2FtZXBhZERldmljZS0+dXBkYXRlRm9yRXZl
bnQoZXZlbnQpOworICAgIHJldHVybiBUUlVFOworfQorCitjbGFzcyBHYW1lcGFkc0dsaWIgewor
cHVibGljOgorICAgIGV4cGxpY2l0IEdhbWVwYWRzR2xpYih1bnNpZ25lZCBsZW5ndGgpOworCisg
ICAgdm9pZCByZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7CisgICAgdm9pZCB1bnJl
Z2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKTsKKworICAgIHZvaWQgdXBkYXRlR2FtZXBh
ZExpc3QoR2FtZXBhZExpc3QqKTsKKworcHJpdmF0ZToKKyAgICB+R2FtZXBhZHNHbGliKCk7Cisg
ICAgc3RhdGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rp
b24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7CisgICAgc3RhdGljIGdib29sZWFuIGlz
R2FtZXBhZERldmljZShHVWRldkRldmljZSopOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxHYW1lcGFkRGV2aWNlR2xpYj4gPiBtX3Nsb3RzOworICAgIEhhc2hNYXA8U3RyaW5nLCBHYW1l
cGFkRGV2aWNlR2xpYio+IG1fZGV2aWNlTWFwOworCisgICAgR1JlZlB0cjxHVWRldkNsaWVudD4g
bV9ndWRldkNsaWVudDsKK307CisKK0dhbWVwYWRzR2xpYjo6R2FtZXBhZHNHbGliKHVuc2lnbmVk
IGxlbmd0aCkKKyAgICA6IG1fc2xvdHMobGVuZ3RoKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBzdWJzeXN0ZW1zW10gPSB7ICJpbnB1dCIsIDAgfTsKKyAgICBtX2d1ZGV2Q2xpZW50ID0gYWRv
cHRHUmVmKGdfdWRldl9jbGllbnRfbmV3KHN1YnN5c3RlbXMpKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fZ3VkZXZDbGllbnQuZ2V0KCksICJ1ZXZlbnQiLCBHX0NBTExCQUNLKG9uVUV2ZW50Q2Fs
bGJhY2spLCB0aGlzKTsKKworICAgIEdVbmlxdWVQdHI8R0xpc3Q+IGRldmljZXNMaXN0KGdfdWRl
dl9jbGllbnRfcXVlcnlfYnlfc3Vic3lzdGVtKG1fZ3VkZXZDbGllbnQuZ2V0KCksIHN1YnN5c3Rl
bXNbMF0pKTsKKyAgICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGRldmljZXNMaXN0LmdldCgpOyBs
aXN0SXRlbTsgbGlzdEl0ZW0gPSBnX2xpc3RfbmV4dChsaXN0SXRlbSkpIHsKKyAgICAgICAgR1Vk
ZXZEZXZpY2UqIGRldmljZSA9IEdfVURFVl9ERVZJQ0UobGlzdEl0ZW0tPmRhdGEpOworICAgICAg
ICBTdHJpbmcgZGV2aWNlRmlsZSA9IFN0cmluZzo6ZnJvbVVURjgoZ191ZGV2X2RldmljZV9nZXRf
ZGV2aWNlX2ZpbGUoZGV2aWNlKSk7CisgICAgICAgIGlmIChpc0dhbWVwYWREZXZpY2UoZGV2aWNl
KSkKKyAgICAgICAgICAgIHJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUpOworICAgICAgICBnX29i
amVjdF91bnJlZihkZXZpY2UpOworICAgIH0KK30KKworR2FtZXBhZHNHbGliOjp+R2FtZXBhZHNH
bGliKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRl
dkNsaWVudC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Cit9
CisKK3ZvaWQgR2FtZXBhZHNHbGliOjpyZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkK
K3sKKyAgICBMT0coR2FtZXBhZCwgIkdhbWVwYWRzR2xpYjo6cmVnaXN0ZXJEZXZpY2UgJXMiLCBk
ZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBBU1NFUlQoIW1fZGV2aWNlTWFwLmNvbnRh
aW5zKGRldmljZUZpbGUpKTsKKworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8
IG1fc2xvdHMuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGlmICghbV9zbG90c1tpbmRleF0p
IHsKKyAgICAgICAgICAgIG1fc2xvdHNbaW5kZXhdID0gc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFk
RGV2aWNlR2xpYj4oZGV2aWNlRmlsZSk7CisgICAgICAgICAgICBtX2RldmljZU1hcC5hZGQoZGV2
aWNlRmlsZSwgbV9zbG90c1tpbmRleF0uZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2FtZXBhZHNHbGliOjp1bnJlZ2lzdGVyRGV2aWNlKFN0
cmluZyBkZXZpY2VGaWxlKQoreworICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHbGliOjp1bnJl
Z2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgQVNTRVJU
KG1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZpbGUpKTsKKworICAgIEdhbWVwYWREZXZpY2VH
bGliKiBnYW1lcGFkRGV2aWNlID0gbV9kZXZpY2VNYXAudGFrZShkZXZpY2VGaWxlKTsKKyAgICBz
aXplX3QgaW5kZXggPSBtX3Nsb3RzLmZpbmQoZ2FtZXBhZERldmljZSk7CisgICAgQVNTRVJUKGlu
ZGV4ICE9IG5vdEZvdW5kKTsKKworICAgIG1fc2xvdHNbaW5kZXhdID0gbnVsbHB0cjsKK30KKwor
dm9pZCBHYW1lcGFkc0dsaWI6OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0KiBpbnRvKQor
eworICAgIEFTU0VSVChtX3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG90cy5zaXplKCk7IGkrKykgeworICAgICAgICBp
ZiAobV9zbG90c1tpXS5nZXQoKSAmJiBtX3Nsb3RzW2ldLT5jb25uZWN0ZWQoKSkgeworICAgICAg
ICAgICAgR2FtZXBhZERldmljZUdsaWIqIGdhbWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgp
OworICAgICAgICAgICAgUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOwor
ICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQorICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1l
cGFkOjpjcmVhdGUoKTsKKworICAgICAgICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7CisgICAgICAg
ICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKKyAgICAgICAgICAgIGdhbWVw
YWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNlLT50aW1lc3RhbXAoKSk7CisgICAgICAgICAgICBn
YW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5h
eGVzRGF0YSgpKTsKKyAgICAgICAgICAgIGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+
YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOworCisgICAgICAg
ICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
aW50by0+c2V0KGksIDApOworICAgIH0KK30KKwordm9pZCBHYW1lcGFkc0dsaWI6Om9uVUV2ZW50
Q2FsbGJhY2soR1VkZXZDbGllbnQqLCBnY2hhciogYWN0aW9uLCBHVWRldkRldmljZSogZGV2aWNl
LCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICghaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdhbWVwYWRzR2xpYiogZ2FtZXBhZHNHbGliID0gcmVpbnRl
cnByZXRfY2FzdDxHYW1lcGFkc0dsaWIqPihkYXRhKTsKKyAgICBTdHJpbmcgZGV2aWNlRmlsZSA9
IFN0cmluZzo6ZnJvbVVURjgoZ191ZGV2X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKSk7
CisKKyAgICBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJhZGQiKSkKKyAgICAgICAgZ2FtZXBhZHNH
bGliLT5yZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKKyAgICBlbHNlIGlmICghZ19zdHJjbXAw
KGFjdGlvbiwgInJlbW92ZSIpKQorICAgICAgICBnYW1lcGFkc0dsaWItPnVucmVnaXN0ZXJEZXZp
Y2UoZGV2aWNlRmlsZSk7Cit9CisKK2dib29sZWFuIEdhbWVwYWRzR2xpYjo6aXNHYW1lcGFkRGV2
aWNlKEdVZGV2RGV2aWNlKiBkZXZpY2UpCit7CisgICAgY29uc3QgZ2NoYXIqIGRldmljZUZpbGUg
PSBnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpOworICAgIGNvbnN0IGdjaGFy
KiBzeXNmc1BhdGggPSBnX3VkZXZfZGV2aWNlX2dldF9zeXNmc19wYXRoKGRldmljZSk7CisgICAg
aWYgKCFkZXZpY2VGaWxlIHx8ICFzeXNmc1BhdGgpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIGlmICghZ191ZGV2X2RldmljZV9oYXNfcHJvcGVydHkoZGV2aWNlLCAiSURfSU5QVVQiKSB8
fCAhZ191ZGV2X2RldmljZV9oYXNfcHJvcGVydHkoZGV2aWNlLCAiSURfSU5QVVRfSk9ZU1RJQ0si
KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIGdfc3RyX2hhc19wcmVmaXgo
ZGV2aWNlRmlsZSwgIi9kZXYvaW5wdXQvanMiKTsKK30KKwordm9pZCBzYW1wbGVHYW1lcGFkcyhH
YW1lcGFkTGlzdCogaW50bykKK3sKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
R2FtZXBhZHNHbGliLCBnYW1lcGFkc0dsaWIsIChpbnRvLT5sZW5ndGgoKSkpOworICAgIGdhbWVw
YWRzR2xpYi51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvU2hhcmVkQnVmZmVyR2xpYi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL1NoYXJlZEJ1ZmZlckdsaWIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUxNTIyZjZmYWMxMDlmYTQ5NjI4MTliMDExYTBmODc1YzkyYzA4NjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL1NoYXJlZEJ1ZmZlckdsaWIuY3BwCkBA
IC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVGcm9tUmVhZGluZ0ZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICBpZiAoZmlsZVBhdGguaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIENTdHJpbmcgZmlsZW5hbWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oZmlsZVBhdGgpOworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGNvbnRlbnRzOworICAg
IGdzaXplIHNpemU7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICgh
Z19maWxlX2dldF9jb250ZW50cyhmaWxlbmFtZS5kYXRhKCksICZjb250ZW50cy5vdXRQdHIoKSwg
JnNpemUsICZlcnJvci5vdXRQdHIoKSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
ZnVsbHkgcmVhZCBjb250ZW50cyBvZiBmaWxlICVzIC0gJXMiLCBmaWxlbmFtZUZvckRpc3BsYXko
ZmlsZVBhdGgpLnV0ZjgoKS5kYXRhKCksIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzdWx0ID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoY29udGVudHMuZ2V0KCksIHNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDRlZjdiNWNiNzdiOTQ0ZmJlMDU4MTg0Zjg2MTQ0MDUyYWU2YTUyMmEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0V2ZW50TG9vcEd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAq
Ci0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJFdmVudExvb3AuaCIKLQotI2luY2x1ZGUgPGdsaWIuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi12b2lkIEV2ZW50TG9vcDo6Y3ljbGUoKQotewotICAgIGdfbWFpbl9jb250
ZXh0X2l0ZXJhdGlvbihOVUxMLCBGQUxTRSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ4ZWQ3ZGY2NGU1MGY4NTgyMjFmNDgzMzhmZGEyNTU4
YmQyZWQzZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOSBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSwg
THRkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKLQotI2luY2x1ZGUgIkZpbGVNZXRhZGF0YS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVVVJRC5oIgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYv
Z2xpYi9HTGliVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLyogT24gbGludXggZmlsZSBuYW1lcyBhcmUganVzdCByYXcgYnl0ZXMsIHNvIGFsc28g
c3RyaW5ncyB0aGF0IGNhbm5vdCBiZSBlbmNvZGVkIGluIGFueSB3YXkKLSAqIGFyZSB2YWxpZCBm
aWxlIG5hbWVzLiBUaGlzIG1lYW4gdGhhdCB3ZSBjYW5ub3QganVzdCBzdG9yZSBhIGZpbGUgbmFt
ZSBhcy1pcyBpbiBhIFN0cmluZwotICogYnV0IHdlIGhhdmUgdG8gZXNjYXBlIGl0LgotICogT24g
V2luZG93cyB0aGUgR0xpYiBmaWxlIG5hbWUgZW5jb2RpbmcgaXMgYWx3YXlzIFVURi04IHNvIHdl
IGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2UuICovCi1TdHJpbmcgZmlsZW5hbWVUb1N0cmluZyhjb25z
dCBjaGFyKiBmaWxlbmFtZSkKLXsKLSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGZpbGVuYW1lKTsKLSNlbHNlCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gZXNjYXBlZFN0cmluZyhn
X3VyaV9lc2NhcGVfc3RyaW5nKGZpbGVuYW1lLCAiLzoiLCBmYWxzZSkpOwotICAgIHJldHVybiBl
c2NhcGVkU3RyaW5nLmdldCgpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBHVW5pcXVlUHRyPGNoYXI+
IHVuZXNjYXBlZEZpbGVuYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotI2lmIE9TKFdJTkRPV1MpCi0gICAg
cmV0dXJuIEdVbmlxdWVQdHI8Y2hhcj4oZ19zdHJkdXAocGF0aC51dGY4KCkuZGF0YSgpKSk7Ci0j
ZWxzZQotICAgIHJldHVybiBHVW5pcXVlUHRyPGNoYXI+KGdfdXJpX3VuZXNjYXBlX3N0cmluZyhw
YXRoLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpKTsKLSNlbmRpZgotfQotCi1DU3RyaW5nIGZpbGVT
eXN0ZW1SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0jaWYgT1MoV0lORE9X
UykKLSAgICByZXR1cm4gcGF0aC51dGY4KCk7Ci0jZWxzZQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+
IGZpbGVuYW1lID0gdW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7Ci0gICAgcmV0dXJuIGZpbGVuYW1l
LmdldCgpOwotI2VuZGlmCi19Ci0KLS8vIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNvbWV0aGluZyBz
dWl0YWJsZSB0byBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCi1TdHJpbmcgZmlsZW5hbWVGb3JE
aXNwbGF5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotI2lmIE9TKFdJTkRPV1MpCi0gICAgcmV0
dXJuIHN0cmluZzsKLSNlbHNlCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVz
Y2FwZWRGaWxlbmFtZShzdHJpbmcpOwotICAgIGlmICghZmlsZW5hbWUpCi0gICAgICAgIHJldHVy
biBzdHJpbmc7Ci0KLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBkaXNwbGF5KGdfZmlsZW5hbWVfdG9f
dXRmOChmaWxlbmFtZS5nZXQoKSwgLTEsIG51bGxwdHIsIG51bGxwdHIsIG51bGxwdHIpKTsKLSAg
ICBpZiAoIWRpc3BsYXkpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KLSAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChkaXNwbGF5LmdldCgpKTsKLSNlbmRpZgotfQotCi1ib29sIGZpbGVFeGlz
dHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1l
ID0gdW5lc2NhcGVkRmlsZW5hbWUocGF0aCk7Ci0gICAgcmV0dXJuIGZpbGVuYW1lID8gZ19maWxl
X3Rlc3QoZmlsZW5hbWUuZ2V0KCksIEdfRklMRV9URVNUX0VYSVNUUykgOiBmYWxzZTsKLX0KLQot
Ym9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBHVW5pcXVlUHRyPGdj
aGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxl
bmFtZSA/IGdfcmVtb3ZlKGZpbGVuYW1lLmdldCgpKSAhPSAtMSA6IGZhbHNlOwotfQotCi1ib29s
IGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBHVW5pcXVl
UHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwotICAgIHJldHVy
biBmaWxlbmFtZSA/IGdfcm1kaXIoZmlsZW5hbWUuZ2V0KCkpICE9IC0xIDogZmFsc2U7Ci19Ci0K
LXN0YXRpYyBib29sIGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0
YXRCdWZmZXIpCi17Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRG
aWxlbmFtZShwYXRoKTsKLSAgICBpZiAoIWZpbGVuYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gZ19zdGF0KGZpbGVuYW1lLmdldCgpLCBzdGF0QnVmZmVyKSAhPSAtMTsK
LX0KLQotYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVz
dWx0U2l6ZSkKLXsKLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OwotICAgIGlmICghZ2V0RmlsZVN0
YXQocGF0aCwgJnN0YXRSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1
bHRTaXplID0gc3RhdFJlc3VsdC5zdF9zaXplOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IGdldEZpbGVTaXplKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nJikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRGaWxlQ3JlYXRp
b25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYpCi17Ci0gICAgLy8gRklYTUU6IElzIHRoZXJl
IGEgd2F5IHRvIHJldHJpZXZlIGZpbGUgY3JlYXRpb24gdGltZSB3aXRoIEd0ayBvbiBwbGF0Zm9y
bXMgdGhhdCBzdXBwb3J0IGl0PwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgbW9kaWZpZWRUaW1l
KQotewotICAgIEdTdGF0QnVmIHN0YXRSZXN1bHQ7Ci0gICAgaWYgKCFnZXRGaWxlU3RhdChwYXRo
LCAmc3RhdFJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1vZGlmaWVkVGlt
ZSA9IHN0YXRSZXN1bHQuc3RfbXRpbWU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgZ2V0
RmlsZU1ldGFkYXRhKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU1ldGFkYXRhJiBtZXRhZGF0YSkK
LXsKLSAgICBHU3RhdEJ1ZiBzdGF0UmVzdWx0OwotICAgIGlmICghZ2V0RmlsZVN0YXQocGF0aCwg
JnN0YXRSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtZXRhZGF0YS5tb2Rp
ZmljYXRpb25UaW1lID0gc3RhdFJlc3VsdC5zdF9tdGltZTsKLSAgICBtZXRhZGF0YS5sZW5ndGgg
PSBzdGF0UmVzdWx0LnN0X3NpemU7Ci0gICAgbWV0YWRhdGEudHlwZSA9IFNfSVNESVIoc3RhdFJl
c3VsdC5zdF9tb2RlKSA/IEZpbGVNZXRhZGF0YTo6VHlwZURpcmVjdG9yeSA6IEZpbGVNZXRhZGF0
YTo6VHlwZUZpbGU7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVN0cmluZyBwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkK
LXsKLSAgICBpZiAocGF0aC5lbmRzV2l0aChHX0RJUl9TRVBBUkFUT1JfUykpCi0gICAgICAgIHJl
dHVybiBwYXRoICsgY29tcG9uZW50OwotICAgIHJldHVybiBwYXRoICsgR19ESVJfU0VQQVJBVE9S
X1MgKyBjb21wb25lbnQ7Ci19Ci0KLWJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLXsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZp
bGVuYW1lKHBhdGgpOwotICAgIHJldHVybiBmaWxlbmFtZSA/IGdfbWtkaXJfd2l0aF9wYXJlbnRz
KGZpbGVuYW1lLmdldCgpLCBTX0lSV1hVKSAhPSAtMSA6IGZhbHNlOwotfQotCi1TdHJpbmcgaG9t
ZURpcmVjdG9yeVBhdGgoKQotewotICAgIHJldHVybiBmaWxlbmFtZVRvU3RyaW5nKGdfZ2V0X2hv
bWVfZGlyKCkpOwotfQotCi1TdHJpbmcgcGF0aEdldEZpbGVOYW1lKGNvbnN0IFN0cmluZyYgcGF0
aE5hbWUpCi17Ci0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gdG1wRmlsZW5hbWUgPSB1bmVzY2FwZWRG
aWxlbmFtZShwYXRoTmFtZSk7Ci0gICAgaWYgKCF0bXBGaWxlbmFtZSkKLSAgICAgICAgcmV0dXJu
IHBhdGhOYW1lOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gYmFzZU5hbWUoZ19wYXRoX2dldF9i
YXNlbmFtZSh0bXBGaWxlbmFtZS5nZXQoKSkpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGJhc2VOYW1lLmdldCgpKTsKLX0KLQotQ1N0cmluZyBhcHBsaWNhdGlvbkRpcmVjdG9yeVBhdGgo
KQotewotICAgIENTdHJpbmcgcGF0aCA9IGdldEN1cnJlbnRFeGVjdXRhYmxlUGF0aCgpOwotICAg
IGlmICghcGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICAvLyBJZiB0
aGUgYWJvdmUgZmFpbHMsIGNoZWNrIHRoZSBQQVRIIGVudiB2YXJpYWJsZS4KLSAgICBHVW5pcXVl
UHRyPGNoYXI+IGN1cnJlbnRFeGVQYXRoKGdfZmluZF9wcm9ncmFtX2luX3BhdGgoZ19nZXRfcHJn
bmFtZSgpKSk7Ci0gICAgaWYgKCFjdXJyZW50RXhlUGF0aC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IENTdHJpbmcoKTsKLQotICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rp
cm5hbWUoY3VycmVudEV4ZVBhdGguZ2V0KCkpKTsKLSAgICByZXR1cm4gZGlybmFtZS5nZXQoKTsK
LX0KLQotQ1N0cmluZyBzaGFyZWRSZXNvdXJjZXNQYXRoKCkKLXsKLSAgICBzdGF0aWMgQ1N0cmlu
ZyBjYWNoZWRQYXRoOwotICAgIGlmICghY2FjaGVkUGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIGNhY2hlZFBhdGg7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIEhNT0RVTEUgaG1vZHVsZSA9
IDA7Ci0gICAgR2V0TW9kdWxlSGFuZGxlRXhBKEdFVF9NT0RVTEVfSEFORExFX0VYX0ZMQUdfRlJP
TV9BRERSRVNTLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzaGFyZWRSZXNvdXJjZXNQYXRoKSwg
Jmhtb2R1bGUpOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gcnVudGltZURpcihnX3dpbjMyX2dl
dF9wYWNrYWdlX2luc3RhbGxhdGlvbl9kaXJlY3Rvcnlfb2ZfbW9kdWxlKGhtb2R1bGUpKTsKLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBkYXRhUGF0aChnX2J1aWxkX2ZpbGVuYW1lKHJ1bnRpbWVEaXIu
Z2V0KCksICJzaGFyZSIsICJ3ZWJraXRndGstIiBXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RSSU5H
LCBOVUxMKSk7Ci0jZWxzZQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGRhdGFQYXRoKGdfYnVpbGRf
ZmlsZW5hbWUoREFUQV9ESVIsICJ3ZWJraXRndGstIiBXRUJLSVRHVEtfQVBJX1ZFUlNJT05fU1RS
SU5HLCBOVUxMKSk7Ci0jZW5kaWYKLQotICAgIGNhY2hlZFBhdGggPSBkYXRhUGF0aC5nZXQoKTsK
LSAgICByZXR1cm4gY2FjaGVkUGF0aDsKLX0KLQotdWludDY0X3QgZ2V0Vm9sdW1lRnJlZVNpemVG
b3JQYXRoKGNvbnN0IGNoYXIqIHBhdGgpCi17Ci0gICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKHBhdGgpKTsKLSAgICBHUmVmUHRyPEdGaWxlSW5m
bz4gZmlsZUluZm8gPSBhZG9wdEdSZWYoZ19maWxlX3F1ZXJ5X2ZpbGVzeXN0ZW1faW5mbyhmaWxl
LmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJTEVTWVNURU1fRlJFRSwgMCwgMCkpOwotICAgIGlm
ICghZmlsZUluZm8pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGdfZmlsZV9pbmZv
X2dldF9hdHRyaWJ1dGVfdWludDY0KGZpbGVJbmZvLmdldCgpLCBHX0ZJTEVfQVRUUklCVVRFX0ZJ
TEVTWVNURU1fRlJFRSk7Ci19Ci0KLVN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYg
cGF0aCkKLXsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVu
YW1lKHBhdGgpOwotICAgIGlmICghZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LQotICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGlybmFtZShnX3BhdGhfZ2V0X2Rpcm5hbWUoZmlsZW5h
bWUuZ2V0KCkpKTsKLSAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChkaXJuYW1lLmdldCgpKTsK
LX0KLQotVmVjdG9yPFN0cmluZz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNv
bnN0IFN0cmluZyYgZmlsdGVyKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7Ci0KLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBmaWxlbmFtZSA9IHVuZXNjYXBlZEZpbGVuYW1lKHBhdGgpOwot
ICAgIGlmICghZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBlbnRyaWVzOwotCi0gICAgR1VuaXF1
ZVB0cjxHRGlyPiBkaXIoZ19kaXJfb3BlbihmaWxlbmFtZS5nZXQoKSwgMCwgbnVsbHB0cikpOwot
ICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm4gZW50cmllczsKLQotICAgIEdVbmlxdWVQdHI8
R1BhdHRlcm5TcGVjPiBwc3BlYyhnX3BhdHRlcm5fc3BlY19uZXcoKGZpbHRlci51dGY4KCkpLmRh
dGEoKSkpOwotICAgIHdoaWxlIChjb25zdCBjaGFyKiBuYW1lID0gZ19kaXJfcmVhZF9uYW1lKGRp
ci5nZXQoKSkpIHsKLSAgICAgICAgaWYgKCFnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nKHBzcGVjLmdl
dCgpLCBuYW1lKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IGVudHJ5KGdfYnVpbGRfZmlsZW5hbWUoZmlsZW5hbWUuZ2V0KCksIG5hbWUsIG51bGxw
dHIpKTsKLSAgICAgICAgZW50cmllcy5hcHBlbmQoZmlsZW5hbWVUb1N0cmluZyhlbnRyeS5nZXQo
KSkpOwotICAgIH0KLQotICAgIHJldHVybiBlbnRyaWVzOwotfQotCi1TdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxl
KQotewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZpbGVuYW1lKGdfc3RyZHVwX3ByaW50ZigiJXMl
cyIsIHByZWZpeC51dGY4KCkuZGF0YSgpLCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSkpOwotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRlbXBQYXRoKGdfYnVpbGRfZmls
ZW5hbWUoZ19nZXRfdG1wX2RpcigpLCBmaWxlbmFtZS5nZXQoKSwgTlVMTCkpOwotICAgIEdSZWZQ
dHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aCh0ZW1wUGF0aC5n
ZXQoKSkpOwotCi0gICAgaGFuZGxlID0gZ19maWxlX2NyZWF0ZV9yZWFkd3JpdGUoZmlsZS5nZXQo
KSwgR19GSUxFX0NSRUFURV9OT05FLCAwLCAwKTsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFu
ZGxlKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KHRlbXBQYXRoLmdldCgpKTsKLX0KLQotUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCi17Ci0gICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRoKTsKLSAgICBpZiAoIWZpbGVu
YW1lKQotICAgICAgICByZXR1cm4gaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZTsKLQotICAgIEdS
ZWZQdHI8R0ZpbGU+IGZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19mb3JfcGF0aChmaWxlbmFt
ZS5nZXQoKSkpOwotICAgIEdGaWxlSU9TdHJlYW0qIGlvU3RyZWFtID0gMDsKLSAgICBpZiAobW9k
ZSA9PSBPcGVuRm9yUmVhZCkKLSAgICAgICAgaW9TdHJlYW0gPSBnX2ZpbGVfb3Blbl9yZWFkd3Jp
dGUoZmlsZS5nZXQoKSwgMCwgMCk7Ci0gICAgZWxzZSBpZiAobW9kZSA9PSBPcGVuRm9yV3JpdGUp
IHsKLSAgICAgICAgaWYgKGdfZmlsZV90ZXN0KGZpbGVuYW1lLmdldCgpLCBzdGF0aWNfY2FzdDxH
RmlsZVRlc3Q+KEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKSkK
LSAgICAgICAgICAgIGlvU3RyZWFtID0gZ19maWxlX29wZW5fcmVhZHdyaXRlKGZpbGUuZ2V0KCks
IDAsIDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpb1N0cmVhbSA9IGdfZmlsZV9jcmVh
dGVfcmVhZHdyaXRlKGZpbGUuZ2V0KCksIEdfRklMRV9DUkVBVEVfTk9ORSwgMCwgMCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGlvU3RyZWFtOwotfQotCi12b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZ19pb19zdHJlYW1fY2xvc2UoR19JT19TVFJFQU0oaGFuZGxl
KSwgMCwgMCk7Ci0gICAgZ19vYmplY3RfdW5yZWYoaGFuZGxlKTsKLSAgICBoYW5kbGUgPSBpbnZh
bGlkUGxhdGZvcm1GaWxlSGFuZGxlOwotfQotCi1sb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2lu
KQotewotICAgIEdTZWVrVHlwZSBzZWVrVHlwZSA9IEdfU0VFS19TRVQ7Ci0gICAgc3dpdGNoIChv
cmlnaW4pIHsKLSAgICBjYXNlIFNlZWtGcm9tQmVnaW5uaW5nOgotICAgICAgICBzZWVrVHlwZSA9
IEdfU0VFS19TRVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU2Vla0Zyb21DdXJyZW50Ogot
ICAgICAgICBzZWVrVHlwZSA9IEdfU0VFS19DVVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
U2Vla0Zyb21FbmQ6Ci0gICAgICAgIHNlZWtUeXBlID0gR19TRUVLX0VORDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQot
Ci0gICAgaWYgKCFnX3NlZWthYmxlX3NlZWsoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5w
dXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBvZmZzZXQsIHNlZWtUeXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVy
biBnX3NlZWthYmxlX3RlbGwoR19TRUVLQUJMRShnX2lvX3N0cmVhbV9nZXRfaW5wdXRfc3RyZWFt
KEdfSU9fU1RSRUFNKGhhbmRsZSkpKSk7Ci19Ci0KLWludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIGdz
aXplIGJ5dGVzV3JpdHRlbjsKLSAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYWxsKGdfaW9fc3Ry
ZWFtX2dldF9vdXRwdXRfc3RyZWFtKEdfSU9fU1RSRUFNKGhhbmRsZSkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YSwgbGVuZ3RoLCAmYnl0ZXNXcml0dGVuLCAwLCAwKTsKLSAg
ICByZXR1cm4gYnl0ZXNXcml0dGVuOwotfQotCi1pbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgR1VuaXF1ZU91
dFB0cjxHRXJyb3I+IGVycm9yOwotICAgIGRvIHsKLSAgICAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9
IGdfaW5wdXRfc3RyZWFtX3JlYWQoZ19pb19zdHJlYW1fZ2V0X2lucHV0X3N0cmVhbShHX0lPX1NU
UkVBTShoYW5kbGUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YSwgbGVuZ3RoLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotICAgICAgICBpZiAoYnl0
ZXNSZWFkID49IDApCi0gICAgICAgICAgICByZXR1cm4gYnl0ZXNSZWFkOwotICAgIH0gd2hpbGUg
KGVycm9yICYmIGVycm9yLT5jb2RlID09IEdfRklMRV9FUlJPUl9JTlRSKTsKLSAgICByZXR1cm4g
LTE7Ci19Ci0KLWJvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKLXsKLSNp
ZiBPUyhXSU5ET1dTKQotICAgIHJldHVybiA6OkZyZWVMaWJyYXJ5KG1vZHVsZSk7Ci0jZWxzZQot
ICAgIHJldHVybiBnX21vZHVsZV9jbG9zZShtb2R1bGUpOwotI2VuZGlmCi19Ci0KLWJvb2wgaGFy
ZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9HYW1lcGFkc0d0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDlmYjI5ZjJiOTU0NmZjMTgzOWM0ZWE4ZWI1Nzg0YThhNTYyMzIzNDkuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dhbWVwYWRzR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21h
aWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgot
ICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gK
LSAqIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBh
ZHMuaCIKLQotI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCi0KLSNpbmNsdWRlICJHYW1l
cGFkRGV2aWNlTGludXguaCIKLSNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlIDxnaW8vZ3VuaXhpbnB1dHN0cmVhbS5oPgotI2luY2x1ZGUgPGd1
ZGV2L2d1ZGV2Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xp
Yi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2FtZXBhZERldmljZUd0ayA6IHB1YmxpYyBH
YW1lcGFkRGV2aWNlTGludXggewotcHVibGljOgotICAgIGV4cGxpY2l0IEdhbWVwYWREZXZpY2VH
dGsoU3RyaW5nIGRldmljZUZpbGUpOwotICAgIH5HYW1lcGFkRGV2aWNlR3RrKCk7Ci0KLXByaXZh
dGU6Ci0gICAgc3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0
cmVhbSwgZ3BvaW50ZXIgZGF0YSk7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRT
dHJlYW07Ci0gICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKLX07Ci0KLUdhbWVwYWREZXZp
Y2VHdGs6OkdhbWVwYWREZXZpY2VHdGsoU3RyaW5nIGRldmljZUZpbGUpCi0gICAgOiBHYW1lcGFk
RGV2aWNlTGludXgoZGV2aWNlRmlsZSkKLXsKLSAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9PSAt
MSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX3Vu
aXhfaW5wdXRfc3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBGQUxTRSkpOwotICAgIG1fc291
cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UoR19Q
T0xMQUJMRV9JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSksIDApKTsKLSAgICBnX3Nv
dXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJj
ZUZ1bmM+KHJlYWRDYWxsYmFjayksIHRoaXMsIDApOwotICAgIGdfc291cmNlX2F0dGFjaChtX3Nv
dXJjZS5nZXQoKSwgMCk7Ci19Ci0KLUdhbWVwYWREZXZpY2VHdGs6On5HYW1lcGFkRGV2aWNlR3Rr
KCkKLXsKLSAgICBpZiAobV9zb3VyY2UpCi0gICAgICAgIGdfc291cmNlX2Rlc3Ryb3kobV9zb3Vy
Y2UuZ2V0KCkpOwotfQotCi1nYm9vbGVhbiBHYW1lcGFkRGV2aWNlR3RrOjpyZWFkQ2FsbGJhY2so
R09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgR2FtZXBhZERl
dmljZUd0ayogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZERldmljZUd0
ayo+KGRhdGEpOwotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBzdHJ1Y3Qg
anNfZXZlbnQgZXZlbnQ7Ci0KLSAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJsZV9pbnB1dF9zdHJl
YW1fcmVhZF9ub25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShwb2xsYWJsZVN0cmVh
bSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwotCi0gICAg
Ly8gRklYTUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCi0gICAgLy8gSW4gdGhlIGNhc2Ugb2Yg
R19JT19FUlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0IHVudGlsCi0g
ICAgLy8gdGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxTRSBvdGhlcndp
c2UuCi0gICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRjaGVzKGVycm9y
LmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKLQotICAgIEFTU0VS
VF9VTlVTRUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7Ci0gICAgZ2FtZXBhZERldmljZS0+
dXBkYXRlRm9yRXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBUUlVFOwotfQotCi1jbGFzcyBHYW1l
cGFkc0d0ayB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR2FtZXBhZHNHdGsodW5zaWduZWQgbGVu
Z3RoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOwotICAg
IHZvaWQgdW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7Ci0KLSAgICB2b2lkIHVw
ZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7Ci0KLXByaXZhdGU6Ci0gICAgfkdhbWVwYWRz
R3RrKCk7Ci0gICAgc3RhdGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdj
aGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7Ci0gICAgc3RhdGljIGdi
b29sZWFuIGlzR2FtZXBhZERldmljZShHVWRldkRldmljZSopOwotCi0gICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxHYW1lcGFkRGV2aWNlR3RrPiA+IG1fc2xvdHM7Ci0gICAgSGFzaE1hcDxTdHJp
bmcsIEdhbWVwYWREZXZpY2VHdGsqPiBtX2RldmljZU1hcDsKLQotICAgIEdSZWZQdHI8R1VkZXZD
bGllbnQ+IG1fZ3VkZXZDbGllbnQ7Ci19OwotCi1HYW1lcGFkc0d0azo6R2FtZXBhZHNHdGsodW5z
aWduZWQgbGVuZ3RoKQotICAgIDogbV9zbG90cyhsZW5ndGgpCi17Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIHN1YnN5c3RlbXNbXSA9IHsgImlucHV0IiwgMCB9OwotICAgIG1fZ3VkZXZDbGllbnQg
PSBhZG9wdEdSZWYoZ191ZGV2X2NsaWVudF9uZXcoc3Vic3lzdGVtcykpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9ndWRldkNsaWVudC5nZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0sob25VRXZl
bnRDYWxsYmFjayksIHRoaXMpOwotCi0gICAgR1VuaXF1ZVB0cjxHTGlzdD4gZGV2aWNlc0xpc3Qo
Z191ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQoKSwgc3Vi
c3lzdGVtc1swXSkpOwotICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xpc3QuZ2V0
KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgewotICAgICAg
ICBHVWRldkRldmljZSogZGV2aWNlID0gR19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0YSk7Ci0g
ICAgICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNl
X2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKLSAgICAgICAgaWYgKGlzR2FtZXBhZERldmljZShk
ZXZpY2UpKQotICAgICAgICAgICAgcmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Ci0gICAgICAg
IGdfb2JqZWN0X3VucmVmKGRldmljZSk7Ci0gICAgfQotfQotCi1HYW1lcGFkc0d0azo6fkdhbWVw
YWRzR3RrKCkKLXsKLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9n
dWRldkNsaWVudC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7
Ci19Ci0KLXZvaWQgR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxl
KQotewotICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHdGs6OnJlZ2lzdGVyRGV2aWNlICVzIiwg
ZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250
YWlucyhkZXZpY2VGaWxlKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBtX3Nsb3RzLnNpemUoKTsgaW5kZXgrKykgewotICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhd
KSB7Ci0gICAgICAgICAgICBtX3Nsb3RzW2luZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8R2FtZXBh
ZERldmljZUd0az4oZGV2aWNlRmlsZSk7Ci0gICAgICAgICAgICBtX2RldmljZU1hcC5hZGQoZGV2
aWNlRmlsZSwgbV9zbG90c1tpbmRleF0uZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgR2FtZXBhZHNHdGs6OnVucmVnaXN0ZXJEZXZpY2UoU3Ry
aW5nIGRldmljZUZpbGUpCi17Ci0gICAgTE9HKEdhbWVwYWQsICJHYW1lcGFkc0d0azo6dW5yZWdp
c3RlckRldmljZSAlcyIsIGRldmljZUZpbGUuYXNjaWkoKS5kYXRhKCkpOwotICAgIEFTU0VSVCht
X2RldmljZU1hcC5jb250YWlucyhkZXZpY2VGaWxlKSk7Ci0KLSAgICBHYW1lcGFkRGV2aWNlR3Rr
KiBnYW1lcGFkRGV2aWNlID0gbV9kZXZpY2VNYXAudGFrZShkZXZpY2VGaWxlKTsKLSAgICBzaXpl
X3QgaW5kZXggPSBtX3Nsb3RzLmZpbmQoZ2FtZXBhZERldmljZSk7Ci0gICAgQVNTRVJUKGluZGV4
ICE9IG5vdEZvdW5kKTsKLQotICAgIG1fc2xvdHNbaW5kZXhdID0gbnVsbHB0cjsKLX0KLQotdm9p
ZCBHYW1lcGFkc0d0azo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCi17Ci0g
ICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgpKTsKLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmICht
X3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7Ci0gICAgICAgICAg
ICBHYW1lcGFkRGV2aWNlR3RrKiBnYW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKLSAg
ICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKLSAgICAg
ICAgICAgIGlmICghZ2FtZXBhZCkKLSAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6
Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkpOwotICAgICAgICAgICAg
Z2FtZXBhZC0+aWQoZ2FtZXBhZERldmljZS0+aWQoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT50
aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOwotICAgICAgICAgICAgZ2FtZXBh
ZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0Rh
dGEoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRv
bnNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5idXR0b25zRGF0YSgpKTsKLQotICAgICAgICAgICAg
aW50by0+c2V0KGksIGdhbWVwYWQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludG8t
PnNldChpLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2FtZXBhZHNHdGs6Om9uVUV2ZW50Q2FsbGJh
Y2soR1VkZXZDbGllbnQqLCBnY2hhciogYWN0aW9uLCBHVWRldkRldmljZSogZGV2aWNlLCBncG9p
bnRlciBkYXRhKQotewotICAgIGlmICghaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdhbWVwYWRzR3RrKiBnYW1lcGFkc0d0ayA9IHJlaW50ZXJwcmV0X2Nh
c3Q8R2FtZXBhZHNHdGsqPihkYXRhKTsKLSAgICBTdHJpbmcgZGV2aWNlRmlsZSA9IFN0cmluZzo6
ZnJvbVVURjgoZ191ZGV2X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKSk7Ci0KLSAgICBp
ZiAoIWdfc3RyY21wMChhY3Rpb24sICJhZGQiKSkKLSAgICAgICAgZ2FtZXBhZHNHdGstPnJlZ2lz
dGVyRGV2aWNlKGRldmljZUZpbGUpOwotICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAoYWN0aW9uLCAi
cmVtb3ZlIikpCi0gICAgICAgIGdhbWVwYWRzR3RrLT51bnJlZ2lzdGVyRGV2aWNlKGRldmljZUZp
bGUpOwotfQotCi1nYm9vbGVhbiBHYW1lcGFkc0d0azo6aXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2
aWNlKiBkZXZpY2UpCi17Ci0gICAgY29uc3QgZ2NoYXIqIGRldmljZUZpbGUgPSBnX3VkZXZfZGV2
aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpOwotICAgIGNvbnN0IGdjaGFyKiBzeXNmc1BhdGgg
PSBnX3VkZXZfZGV2aWNlX2dldF9zeXNmc19wYXRoKGRldmljZSk7Ci0gICAgaWYgKCFkZXZpY2VG
aWxlIHx8ICFzeXNmc1BhdGgpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGlmICghZ191
ZGV2X2RldmljZV9oYXNfcHJvcGVydHkoZGV2aWNlLCAiSURfSU5QVVQiKSB8fCAhZ191ZGV2X2Rl
dmljZV9oYXNfcHJvcGVydHkoZGV2aWNlLCAiSURfSU5QVVRfSk9ZU1RJQ0siKSkKLSAgICAgICAg
cmV0dXJuIEZBTFNFOwotCi0gICAgcmV0dXJuIGdfc3RyX2hhc19wcmVmaXgoZGV2aWNlRmlsZSwg
Ii9kZXYvaW5wdXQvanMiKTsKLX0KLQotdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCog
aW50bykKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHdGss
IGdhbWVwYWRzR3RrLCAoaW50by0+bGVuZ3RoKCkpKTsKLSAgICBnYW1lcGFkc0d0ay51cGRhdGVH
YW1lcGFkTGlzdChpbnRvKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9TaGFyZWRCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGUxNTIyZjZmYWMxMDlmYTQ5NjI4MTliMDExYTBmODc1YzkyYzA4NjUuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKgotICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCi0KLSNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCi0jaW5jbHVkZSA8d3RmL2dsaWIvR1Vu
aXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotI2luY2x1ZGUgPGds
aWIuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZlB0cjxTaGFyZWRCdWZmZXI+IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlRnJvbVJlYWRpbmdGaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgp
Ci17Ci0gICAgaWYgKGZpbGVQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBDU3RyaW5nIGZpbGVuYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGZpbGVQYXRoKTsK
LSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBjb250ZW50czsKLSAgICBnc2l6ZSBzaXplOwotICAg
IEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVu
dHMoZmlsZW5hbWUuZGF0YSgpLCAmY29udGVudHMub3V0UHRyKCksICZzaXplLCAmZXJyb3Iub3V0
UHRyKCkpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZ1bGx5IHJlYWQgY29udGVu
dHMgb2YgZmlsZSAlcyAtICVzIiwgZmlsZW5hbWVGb3JEaXNwbGF5KGZpbGVQYXRoKS51dGY4KCku
ZGF0YSgpLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRl
bnRzLmdldCgpLCBzaXplKTsKLQotICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>