<?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>82553</bug_id>
          
          <creation_ts>2012-03-28 17:06:07 -0700</creation_ts>
          <short_desc>[Chromium] Move APIs related to ResourceHandle into Platform</short_desc>
          <delta_ts>2012-03-28 22:29:53 -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>New Bugs</component>
          <version>528+ (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="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>mjs</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>590620</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 17:06:07 -0700</bug_when>
    <thetext>[Chromium] Move APIs related to ResourceHandle into Platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590633</commentid>
    <comment_count>1</comment_count>
      <attachid>134452</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 17:11:20 -0700</bug_when>
    <thetext>Created attachment 134452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590641</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 17:14:47 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590642</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 17:15:08 -0700</bug_when>
    <thetext>Attachment 134452 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/Platform/chromium/public/WebURL.h:136:  One space before end of line comments  [whitespace/comments] [5]
Source/Platform/chromium/public/WebPrivateOwnPtr.h:33:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/public/WebPrivateOwnPtr.h:42:  Missing space inside { }.  [whitespace/braces] [5]
Source/Platform/chromium/public/WebURLLoader.h:47:  Missing space inside { }.  [whitespace/braces] [5]
Source/Platform/chromium/public/WebURLLoader.h:50:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/public/WebURLLoader.h:53:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebURLLoader.h:56:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/public/WebURLLoader.h:61:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/public/WebData.h:45:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/Platform/chromium/public/WebData.h:76:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 27 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>590644</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 17:15:49 -0700</bug_when>
    <thetext>This patch just moves existing code.  I can address these style nits in a followup patch if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590647</commentid>
    <comment_count>5</comment_count>
      <attachid>134452</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-03-28 17:18:08 -0700</bug_when>
    <thetext>Comment on attachment 134452
Patch

R=me. Do you know if there&apos;s a way to land this that ensures the svn metadata is set up as a move?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590648</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 17:19:34 -0700</bug_when>
    <thetext>&gt; R=me. Do you know if there&apos;s a way to land this that ensures the svn metadata is set up as a move?

Landing via the commit-queue should take care of that, but I can land it manually via svn to make sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590653</commentid>
    <comment_count>7</comment_count>
      <attachid>134452</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 17:21:13 -0700</bug_when>
    <thetext>Comment on attachment 134452
Patch

I&apos;m going to give mjs sometime to comment before landing this patch in case he has thoughts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590848</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 22:29:53 -0700</bug_when>
    <thetext>Committed r112501: &lt;http://trac.webkit.org/changeset/112501&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134452</attachid>
            <date>2012-03-28 17:11:20 -0700</date>
            <delta_ts>2012-03-28 17:21:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82553-20120328171119.patch</filename>
            <type>text/plain</type>
            <size>123374</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Bs
YXRmb3JtL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNDc1KQorKysgU291cmNlL1BsYXRmb3JtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOSBAQAorMjAxMi0wMy0yOCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gTW92ZSBB
UElzIHJlbGF0ZWQgdG8gUmVzb3VyY2VIYW5kbGUgaW50byBQbGF0Zm9ybQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1NTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIHRoZSBmaXJz
dCBwYXRjaCBpbiB0aGlzIHNlcmllczoKKyAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2FiYXJ0
aC93ZWJraXQvY29tcGFyZS9tYXN0ZXIuLi53ZWJjb3JlLXBsYXRmb3JtCisKKyAgICAgICAgVGhl
IGdvYWwgb2YgdGhlc2UgcGF0Y2hlcyBpcyB0byBtb3ZlIFdlYkNvcmU6OlJlc291cmNlSGFuZGxl
IG91dCBvZgorICAgICAgICBDaHJvbWl1bSdzIFdlYktpdCBsYXllciBhbmQgaW50byBXZWJDb3Jl
L3BsYXRmb3JtLCB3aGVyZSBpdCBiZWxvbmdzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMg
dGhlIENocm9taXVtLVdlYktpdCBBUElzIHVzZWQgYnkgUmVzb3VyY2VIYW5kbGUgb3V0IG9mCisg
ICAgICAgIHRoZSBXZWJLaXQgbGF5ZXIgYW5kIGludG8gdGhlIFBsYWZvcm0gbGF5ZXIuIFRoZXNl
IGFyZSBBUElzIHRoYXQgV2ViS2l0CisgICAgICAgIHVzZXMgdG8gY2FsbCAiZG93biIgdG8gbWFu
aXB1bGF0ZSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSAocmF0aGVyIHRoYW4KKyAgICAgICAgInVw
IiB0byB0aGUgY2xpZW50IHRvIG1ha2UgZGVjaXNpb25zKS4gVGhlIGxvbmctdGVybSBwbGFuIGlz
IHRvIG1vdmUKKyAgICAgICAgYWxsIG9mIHRoZSBoZWFkZXJzIGluIFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvcGxhdGZvcm0gaW50bworICAgICAgICBQbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMgKGFs
dGhvdWdoIHdlJ2xsIGxpa2VseSBuZWVkIHRvIGNsZWFuIHVwIHNvbWUKKyAgICAgICAgbGF5ZXJp
bmcgdmlvbGF0aW9ucyBhcyB3ZSBnbykuCisKKyAgICAgICAgKiBQbGF0Zm9ybS5neXBpOgorICAg
ICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJEYXRhLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYkRhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjp+V2ViRGF0
YSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGE6OldlYkRhdGEpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhOjppc0VtcHR5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRGF0YTo6aXNOdWxsKToKKyAgICAgICAgKiBjaHJvbWl1
bS9wdWJsaWMvV2ViSFRUUEJvZHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViSFRUUEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJIVFRQQm9keTo6fldlYkhUVFBC
b2R5KToKKyAgICAgICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6OldlYkhUVFBCb2R5KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViSFRUUEJvZHk6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkhUVFBCb2R5Ojppc051bGwpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJIVFRQSGVh
ZGVyVmlzaXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJIVFRQ
SGVhZGVyVmlzaXRvcik6CisgICAgICAgIChXZWJLaXQ6OldlYkhUVFBIZWFkZXJWaXNpdG9yOjp+
V2ViSFRUUEhlYWRlclZpc2l0b3IpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJIVFRQ
TG9hZEluZm8uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJIVFRQTG9hZEluZm8pOgorICAgICAgICAoV2ViS2l0OjpXZWJIVFRQTG9h
ZEluZm86OldlYkhUVFBMb2FkSW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUVFBMb2FkSW5m
bzo6fldlYkhUVFBMb2FkSW5mbyk6CisgICAgICAgIChXZWJLaXQ6OldlYkhUVFBMb2FkSW5mbzo6
b3BlcmF0b3IgPSk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlByaXZhdGVPd25QdHIu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUHJpdmF0ZU93blB0cik6
CisgICAgICAgIChXZWJLaXQ6OldlYlByaXZhdGVPd25QdHI6OldlYlByaXZhdGVPd25QdHIpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcml2YXRlT3duUHRyOjp+V2ViUHJpdmF0ZU93blB0cik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlByaXZhdGVPd25QdHI6OnJlc2V0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUHJpdmF0ZU93blB0cjo6Z2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpdmF0ZU93
blB0cjo6b3BlcmF0b3ItPik6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlVSTC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJVUkwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkw6On5XZWJVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkw6OldlYlVSTCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVSTDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVVJMOjphc3NpZ24pOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkw6OnNwZWMpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJVUkw6OnBhcnNlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTDo6aXNW
YWxpZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTDo6aXNFbXB0eSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVSTDo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMOjpvcGVyYXRvciBH
VVJMKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIGNocm9t
aXVtL3B1YmxpYy9XZWJVUkxFcnJvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJVUkxFcnJvcik6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTEVycm9yOjpXZWJVUkxF
cnJvcik6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRUaW1pbmcuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVVJMTG9hZFRpbWluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlVSTExvYWRUaW1pbmc6On5XZWJVUkxMb2FkVGltaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVVJMTG9hZFRpbWluZzo6V2ViVVJMTG9hZFRpbWluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTExvYWRUaW1pbmc6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTExvYWRUaW1pbmc6OmlzTnVsbCk6CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dl
YlVSTExvYWRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJVUkxM
b2FkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxMb2FkZXI6On5XZWJVUkxMb2FkZXIpOgor
ICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJVUkxMb2FkZXJDbGllbnQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVVJMTG9hZGVyQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVVJMTG9hZGVyQ2xpZW50Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxMb2FkZXJDbGllbnQ6OmRpZFNlbmREYXRhKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVVJMTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJVUkxMb2FkZXJDbGllbnQ6OmRpZERvd25sb2FkRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlVSTExvYWRlckNsaWVudDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVUkxMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVDYWNoZWRNZXRhZGF0YSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTExvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlVSTExvYWRlckNsaWVudDo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTExvYWRlckNsaWVudDo6fldlYlVSTExvYWRlckNsaWVudCk6CisgICAgICAgICogY2hy
b21pdW0vcHVibGljL1dlYlVSTFJlcXVlc3QuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgor
ICAgICAgICAoV2ViVVJMUmVxdWVzdCk6CisgICAgICAgIChFeHRyYURhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxSZXF1ZXN0OjpFeHRyYURhdGE6On5FeHRyYURhdGEpOgorICAgICAgICAo
V2ViS2l0OjpXZWJVUkxSZXF1ZXN0Ojp+V2ViVVJMUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlVSTFJlcXVlc3Q6OldlYlVSTFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxS
ZXF1ZXN0OjpvcGVyYXRvcj0pOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJVUkxSZXNw
b25zZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJVUkxSZXNwb25z
ZSk6CisgICAgICAgIChFeHRyYURhdGEpOgorICAgICAgICAoV2ViS2l0OjpXZWJVUkxSZXNwb25z
ZTo6RXh0cmFEYXRhOjp+RXh0cmFEYXRhKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMUmVzcG9u
c2U6On5XZWJVUkxSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpX
ZWJVUkxSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVSTFJlc3BvbnNlOjpvcGVyYXRv
cj0pOgorCiAyMDEyLTAzLTI3ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbY2hyb21pdW1dIFJvdXRlIG1vbm90b25pYyBjbG9jayB1cCBmcm9tIGNvbXBvc2l0b3IK
SW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCShyZXZpc2lvbiAxMTI0NjIpCisrKyBTb3VyY2UvUGxh
dGZvcm0vUGxhdGZvcm0uZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzcsMjIgKzM3LDM0IEBACiAg
ICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkNvbW1vbi5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9wdWJsaWMvV2ViQ29udGVudExheWVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L3B1YmxpYy9XZWJDb250ZW50TGF5ZXJDbGllbnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYkRhdGEuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkV4dGVy
bmFsVGV4dHVyZUxheWVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJGbG9h
dFBvaW50LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdFF1YWQuaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaCcsCisgICAgICAgICAg
ICAnY2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVt
L3B1YmxpYy9XZWJIVFRQSGVhZGVyVmlzaXRvci5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViSFRUUExvYWRJbmZvLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJMYXllci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmll
dy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViTGF5ZXJUcmVlVmlld0NsaWVu
dC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViTWltZVJlZ2lzdHJ5LmgnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJOb25Db3B5YWJsZS5oJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUG9pbnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYlByaXZhdGVPd25QdHIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGlj
L1dlYlByaXZhdGVQdHIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlJlY3Qu
aCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlNpemUuaCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vcHVibGljL1dlYlNvbGlkQ29sb3JMYXllci5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9wdWJsaWMvV2ViU3RyaW5nLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1Ymxp
Yy9XZWJVUkwuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgn
LAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJVUkxMb2FkVGltaW5nLmgnLAorICAg
ICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJVUkxMb2FkZXIuaCcsCisgICAgICAgICAgICAn
Y2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRlckNsaWVudC5oJywKKyAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViVVJMUmVxdWVzdC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJs
aWMvV2ViVVJMUmVzcG9uc2UuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYkNTdHJp
bmcuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9zcmMvV2ViRmxvYXRRdWFkLmNwcCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vc3JjL1dlYlN0cmluZy5jcHAnLApJbmRleDogU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkRhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkRhdGFfaAorI2RlZmluZSBXZWJEYXRhX2gKKworI2luY2x1ZGUg
IldlYkNvbW1vbi5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2Vi
Q29yZSB7IGNsYXNzIFNoYXJlZEJ1ZmZlcjsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYkRhdGFQcml2YXRlOworCisvLyBBIGNvbnRhaW5lciBmb3IgcmF3IGJ5
dGVzLiAgSXQgaXMgaW5leHBlbnNpdmUgdG8gY29weSBhIFdlYkRhdGEgb2JqZWN0LgorLy8KKy8v
IFdBUk5JTkc6IEl0IGlzIG5vdCBzYWZlIHRvIHBhc3MgYSBXZWJEYXRhIGFjcm9zcyB0aHJlYWRz
ISEhCisvLworY2xhc3MgV2ViRGF0YSB7CitwdWJsaWM6CisgICAgfldlYkRhdGEoKSB7IHJlc2V0
KCk7IH0KKworICAgIFdlYkRhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdlYkRhdGEo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUpIDogbV9wcml2YXRlKDApCisgICAgeworICAg
ICAgICBhc3NpZ24oZGF0YSwgc2l6ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPGludCBOPgor
ICAgIFdlYkRhdGEoY29uc3QgY2hhciAoJmRhdGEpW05dKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsK
KyAgICAgICAgYXNzaWduKGRhdGEsIE4gLSAxKTsKKyAgICB9CisKKyAgICBXZWJEYXRhKGNvbnN0
IFdlYkRhdGEmIGQpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKGQpOyB9CisKKyAgICBXZWJEYXRh
JiBvcGVyYXRvcj0oY29uc3QgV2ViRGF0YSYgZCkKKyAgICB7CisgICAgICAgIGFzc2lnbihkKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBy
ZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViRGF0YSYpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNp
emUpOworCisgICAgV0VCS0lUX0VYUE9SVCBzaXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIFdFQktJ
VF9FWFBPUlQgY29uc3QgY2hhciogZGF0YSgpIGNvbnN0OworCisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViRGF0
YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYpOworICAgIFdl
YkRhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+KCkgY29uc3Q7CisjZWxzZQorICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIFdlYkRhdGEo
Y29uc3QgQyYgYykgOiBtX3ByaXZhdGUoMCkKKyAgICB7CisgICAgICAgIGFzc2lnbihjLmRhdGEo
KSwgYy5zaXplKCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIFdlYkRh
dGEmIG9wZXJhdG9yPShjb25zdCBDJiBjKQorICAgIHsKKyAgICAgICAgYXNzaWduKGMuZGF0YSgp
LCBjLnNpemUoKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisjZW5kaWYKKworcHJp
dmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJEYXRhUHJpdmF0ZSopOworICAgIFdlYkRhdGFQcml2
YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkhUVFBCb2R5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQQm9keS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQQm9k
eS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSFRUUEJvZHlfaAor
I2RlZmluZSBXZWJIVFRQQm9keV9oCisKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAi
V2ViTm9uQ29weWFibGUuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJV
UkwuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUgeyBj
bGFzcyBGb3JtRGF0YTsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYkhUVFBCb2R5UHJpdmF0ZTsKKworY2xhc3MgV2ViSFRUUEJvZHkgeworcHVibGljOgorICAg
IHN0cnVjdCBFbGVtZW50IHsKKyAgICAgICAgZW51bSBUeXBlIHsgVHlwZURhdGEsIFR5cGVGaWxl
LCBUeXBlQmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsKKyAgICAgICAgV2ViU3Ry
aW5nIGZpbGVQYXRoOworICAgICAgICBsb25nIGxvbmcgZmlsZVN0YXJ0OworICAgICAgICBsb25n
IGxvbmcgZmlsZUxlbmd0aDsgLy8gLTEgbWVhbnMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyAg
ICAgICAgZG91YmxlIG1vZGlmaWNhdGlvblRpbWU7CisgICAgICAgIFdlYlVSTCBibG9iVVJMOwor
ICAgIH07CisKKyAgICB+V2ViSFRUUEJvZHkoKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYkhUVFBC
b2R5KCkgOiBtX3ByaXZhdGUoMCkgeyB9CisgICAgV2ViSFRUUEJvZHkoY29uc3QgV2ViSFRUUEJv
ZHkmIGIpIDogbV9wcml2YXRlKDApIHsgYXNzaWduKGIpOyB9CisgICAgV2ViSFRUUEJvZHkmIG9w
ZXJhdG9yPShjb25zdCBXZWJIVFRQQm9keSYgYikKKyAgICB7CisgICAgICAgIGFzc2lnbihiKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBp
bml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJIVFRQQm9keSYpOworCisgICAgYm9vbCBpc051
bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSBu
dW1iZXIgb2YgZWxlbWVudHMgY29tcHJpc2luZyB0aGUgaHR0cCBib2R5LgorICAgIFdFQktJVF9F
WFBPUlQgc2l6ZV90IGVsZW1lbnRDb3VudCgpIGNvbnN0OworCisgICAgLy8gU2V0cyB0aGUgdmFs
dWVzIG9mIHRoZSBlbGVtZW50IGF0IHRoZSBnaXZlbiBpbmRleC4gUmV0dXJucyBmYWxzZSBpZgor
ICAgIC8vIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgICAgV0VCS0lUX0VYUE9SVCBib29sIGVs
ZW1lbnRBdChzaXplX3QgaW5kZXgsIEVsZW1lbnQmKSBjb25zdDsKKworICAgIC8vIEFwcGVuZCB0
byB0aGUgbGlzdCBvZiBlbGVtZW50cy4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kRGF0
YShjb25zdCBXZWJEYXRhJik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZEZpbGUoY29u
c3QgV2ViU3RyaW5nJik7CisgICAgLy8gUGFzc2luZyAtMSB0byBmaWxlTGVuZ3RoIG1lYW5zIHRv
IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFwcGVuZEZpbGVS
YW5nZShjb25zdCBXZWJTdHJpbmcmLCBsb25nIGxvbmcgZmlsZVN0YXJ0LCBsb25nIGxvbmcgZmls
ZUxlbmd0aCwgZG91YmxlIG1vZGlmaWNhdGlvblRpbWUpOworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhcHBlbmRCbG9iKGNvbnN0IFdlYlVSTCYpOworCisgICAgLy8gSWRlbnRpZmllcyBhIHBhcnRp
Y3VsYXIgZm9ybSBzdWJtaXNzaW9uIGluc3RhbmNlLiBBIHZhbHVlIG9mIDAgaXMKKyAgICAvLyB1
c2VkIHRvIGluZGljYXRlIGFuIHVuc3BlY2lmaWVkIGlkZW50aWZpZXIuCisgICAgV0VCS0lUX0VY
UE9SVCBsb25nIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXRJZGVudGlmaWVyKGxvbmcgbG9uZyk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgY29u
dGFpbnNQYXNzd29yZERhdGEoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Q29u
dGFpbnNQYXNzd29yZERhdGEoYm9vbCk7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICBXZWJIVFRQQm9keShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybURhdGE+Jik7
CisgICAgV2ViSFRUUEJvZHkmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6Rm9ybURhdGE+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZv
cm1EYXRhPigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oV2Vi
SFRUUEJvZHlQcml2YXRlKik7CisgICAgdm9pZCBlbnN1cmVNdXRhYmxlKCk7CisgICAgV2ViSFRU
UEJvZHlQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkhUVFBIZWFk
ZXJWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJIVFRQSGVhZGVyVmlzaXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQSGVhZGVyVmlzaXRvci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJIVFRQSGVhZGVyVmlzaXRvcl9oCisjZGVmaW5lIFdlYkhU
VFBIZWFkZXJWaXNpdG9yX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlN0cmlu
ZzsKKworY2xhc3MgV2ViSFRUUEhlYWRlclZpc2l0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwg
dm9pZCB2aXNpdEhlYWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYg
dmFsdWUpID0gMDsKKworcHJvdGVjdGVkOgorICAgIH5XZWJIVFRQSGVhZGVyVmlzaXRvcigpIHsg
fQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQTG9hZEluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkhUVFBMb2FkSW5mby5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJIVFRQTG9hZEluZm8u
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSFRUUExvYWRJbmZvX2gK
KyNkZWZpbmUgV2ViSFRUUExvYWRJbmZvX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2lu
Y2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IFJl
c291cmNlTG9hZEluZm87Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViU3RyaW5n
OworCitjbGFzcyBXZWJIVFRQTG9hZEluZm8geworcHVibGljOgorICAgIFdlYkhUVFBMb2FkSW5m
bygpIHsgaW5pdGlhbGl6ZSgpOyB9CisgICAgfldlYkhUVFBMb2FkSW5mbygpIHsgcmVzZXQoKTsg
fQorICAgIFdlYkhUVFBMb2FkSW5mbyhjb25zdCBXZWJIVFRQTG9hZEluZm8mIHIpIHsgYXNzaWdu
KHIpOyB9CisgICAgV2ViSFRUUExvYWRJbmZvJiBvcGVyYXRvciA9KGNvbnN0IFdlYkhUVFBMb2Fk
SW5mbyYgcikKKyAgICB7IAorICAgICAgICBhc3NpZ24ocik7CisgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhc3NpZ24o
Y29uc3QgV2ViSFRUUExvYWRJbmZvJiByKTsKKworICAgIFdFQktJVF9FWFBPUlQgaW50IGh0dHBT
dGF0dXNDb2RlKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEhUVFBTdGF0dXND
b2RlKGludCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBodHRwU3RhdHVzVGV4dCgp
IGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRIVFRQU3RhdHVzVGV4dChjb25zdCBX
ZWJTdHJpbmcmKTsKKworICAgIFdFQktJVF9FWFBPUlQgbG9uZyBsb25nIGVuY29kZWREYXRhTGVu
Z3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEVuY29kZWREYXRhTGVuZ3Ro
KGxvbmcgbG9uZyk7CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkUmVxdWVzdEhlYWRlcihj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpOworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBhZGRSZXNwb25zZUhlYWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNv
bnN0IFdlYlN0cmluZyYgdmFsdWUpOworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgcmVx
dWVzdEhlYWRlcnNUZXh0KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFJlcXVl
c3RIZWFkZXJzVGV4dChjb25zdCBXZWJTdHJpbmcmKTsKKworICAgIFdFQktJVF9FWFBPUlQgV2Vi
U3RyaW5nIHJlc3BvbnNlSGVhZGVyc1RleHQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0UmVzcG9uc2VIZWFkZXJzVGV4dChjb25zdCBXZWJTdHJpbmcmKTsKKworI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkhUVFBMb2FkSW5mbyhXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6UmVzb3VyY2VMb2FkSW5mbz4pOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRJbmZvPigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRJbmZvPiBtX3ByaXZhdGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlByaXZhdGVPd25QdHIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlByaXZhdGVPd25QdHIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUHJpdmF0ZU93blB0ci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJQcml2YXRl
T3duUHRyX2gKKyNkZWZpbmUgV2ViUHJpdmF0ZU93blB0cl9oCisKKyNpbmNsdWRlICJXZWJDb21t
b24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVt
ZW50YXRpb24gZGV0YWlsIG9mIHRoZSBXZWJLaXQgQVBJLiAgSXQgZXhpc3RzCisvLyB0byBoZWxw
IHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBXZWJLaXQgaW50ZXJmYWNlcyB0aGF0IG1l
cmVseQorLy8gd3JhcCBhIHBvaW50ZXIgdG8gYSBXZWJDb3JlIGNsYXNzLiBJdCdzIHNpbWlsYXIg
dG8gV2ViUHJpdmF0ZVB0ciwgYnV0IGl0CisvLyB3cmFwcyBhIG5ha2VkIHBvaW50ZXIgcmF0aGVy
IHRoYW4gYSByZWZlcmVuY2UgY291bnRlZC4KKy8vIE5vdGU6IHlvdSBtdXN0IGNhbGwgcmVzZXQo
MCkgb24gdGhlIGltcGxlbWVudGF0aW9uIHNpZGUgaW4gb3JkZXIgdG8gZGVsZXRlCisvLyB0aGUg
V2ViQ29yZSBwb2ludGVyLgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBXZWJQcml2YXRl
T3duUHRyIHsKK3B1YmxpYzoKKyAgICBXZWJQcml2YXRlT3duUHRyKCkgOiBtX3B0cigwKSB7fQor
ICAgIH5XZWJQcml2YXRlT3duUHRyKCkgeyBXRUJLSVRfQVNTRVJUKCFtX3B0cik7IH0KKworI2lm
IFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIGV4cGxpY2l0IFdlYlByaXZhdGVPd25QdHIoVCog
cHRyKQorICAgICAgICA6IG1fcHRyKHB0cikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCByZXNl
dChUKiBwdHIpCisgICAgeworICAgICAgICBkZWxldGUgbV9wdHI7CisgICAgICAgIG1fcHRyID0g
cHRyOworICAgIH0KKworICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisKKyAg
ICBUKiBvcGVyYXRvci0+KCkgY29uc3QKKyAgICB7CisgICAgICAgIFdFQktJVF9BU1NFUlQobV9w
dHIpOworICAgICAgICByZXR1cm4gbV9wdHI7CisgICAgfQorI2VuZGlmIC8vIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorCitwcml2YXRlOgorICAgIFQqIG1fcHRyOworCisgICAgV2ViUHJpdmF0ZU93
blB0cihjb25zdCBXZWJQcml2YXRlT3duUHRyJik7CisgICAgdm9pZCBvcGVyYXRvcj0oY29uc3Qg
V2ViUHJpdmF0ZU93blB0ciYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlVSTC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlVSTF9oCisjZGVmaW5lIFdlYlVSTF9o
CisKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCisjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy91cmxf
cGFyc2UuaD4KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorbmFtZXNwYWNlIFdlYkNvcmUg
eyBjbGFzcyBLVVJMOyB9CisjZWxzZQorI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvZ3VybC5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJVUkwgeworcHVibGljOgor
ICAgIH5XZWJVUkwoKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJVUkwoKSA6IG1faXNWYWxpZChm
YWxzZSkKKyAgICB7CisgICAgfQorCisgICAgV2ViVVJMKGNvbnN0IFdlYkNTdHJpbmcmIHNwZWMs
IGNvbnN0IHVybF9wYXJzZTo6UGFyc2VkJiBwYXJzZWQsIGJvb2wgaXNWYWxpZCkKKyAgICAgICAg
OiBtX3NwZWMoc3BlYykKKyAgICAgICAgLCBtX3BhcnNlZChwYXJzZWQpCisgICAgICAgICwgbV9p
c1ZhbGlkKGlzVmFsaWQpCisgICAgeworICAgIH0KKworICAgIFdlYlVSTChjb25zdCBXZWJVUkwm
IHMpCisgICAgICAgIDogbV9zcGVjKHMubV9zcGVjKQorICAgICAgICAsIG1fcGFyc2VkKHMubV9w
YXJzZWQpCisgICAgICAgICwgbV9pc1ZhbGlkKHMubV9pc1ZhbGlkKQorICAgIHsKKyAgICB9CisK
KyAgICBXZWJVUkwmIG9wZXJhdG9yPShjb25zdCBXZWJVUkwmIHMpCisgICAgeworICAgICAgICBt
X3NwZWMgPSBzLm1fc3BlYzsKKyAgICAgICAgbV9wYXJzZWQgPSBzLm1fcGFyc2VkOworICAgICAg
ICBtX2lzVmFsaWQgPSBzLm1faXNWYWxpZDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0K
KworICAgIHZvaWQgYXNzaWduKGNvbnN0IFdlYkNTdHJpbmcmIHNwZWMsIGNvbnN0IHVybF9wYXJz
ZTo6UGFyc2VkJiBwYXJzZWQsIGJvb2wgaXNWYWxpZCkKKyAgICB7CisgICAgICAgIG1fc3BlYyA9
IHNwZWM7CisgICAgICAgIG1fcGFyc2VkID0gcGFyc2VkOworICAgICAgICBtX2lzVmFsaWQgPSBp
c1ZhbGlkOworICAgIH0KKworICAgIGNvbnN0IFdlYkNTdHJpbmcmIHNwZWMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3BlYzsKKyAgICB9CisKKyAgICBjb25zdCB1cmxfcGFyc2U6
OlBhcnNlZCYgcGFyc2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BhcnNlZDsK
KyAgICB9CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faXNWYWxpZDsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc3BlYy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgYm9vbCBpc051bGwo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3BlYy5pc0VtcHR5KCk7CisgICAgfQor
CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViVVJMKGNvbnN0IFdlYkNvcmU6OktV
UkwmKTsKKyAgICBXZWJVUkwmIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpLVVJMJik7CisgICAg
b3BlcmF0b3IgV2ViQ29yZTo6S1VSTCgpIGNvbnN0OworI2Vsc2UKKyAgICBXZWJVUkwoY29uc3Qg
R1VSTCYgZykKKyAgICAgICAgOiBtX3NwZWMoZy5wb3NzaWJseV9pbnZhbGlkX3NwZWMoKSkKKyAg
ICAgICAgLCBtX3BhcnNlZChnLnBhcnNlZF9mb3JfcG9zc2libHlfaW52YWxpZF9zcGVjKCkpCisg
ICAgICAgICwgbV9pc1ZhbGlkKGcuaXNfdmFsaWQoKSkKKyAgICB7CisgICAgfQorCisgICAgV2Vi
VVJMJiBvcGVyYXRvcj0oY29uc3QgR1VSTCYgZykKKyAgICB7CisgICAgICAgIG1fc3BlYyA9IGcu
cG9zc2libHlfaW52YWxpZF9zcGVjKCk7CisgICAgICAgIG1fcGFyc2VkID0gZy5wYXJzZWRfZm9y
X3Bvc3NpYmx5X2ludmFsaWRfc3BlYygpOworICAgICAgICBtX2lzVmFsaWQgPSBnLmlzX3ZhbGlk
KCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBvcGVyYXRvciBHVVJMKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc051bGwoKSA/IEdVUkwoKSA6IEdVUkwobV9z
cGVjLmRhdGEoKSwgbV9zcGVjLmxlbmd0aCgpLCBtX3BhcnNlZCwgbV9pc1ZhbGlkKTsKKyAgICB9
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXZWJDU3RyaW5nIG1fc3BlYzsgIC8vIFVURi04IGVu
Y29kZWQKKyAgICB1cmxfcGFyc2U6OlBhcnNlZCBtX3BhcnNlZDsKKyAgICBib29sIG1faXNWYWxp
ZDsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdl
YlVSTCYgYikKK3sKKyAgICByZXR1cm4gYS5zcGVjKCkgPCBiLnNwZWMoKTsKK30KKworaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdlYlVSTCYgYikKK3sKKyAg
ICByZXR1cm4gIWEuc3BlYygpLmNvbXBhcmUoYi5zcGVjKCkpOworfQorCitpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFdlYlVSTCYgYSwgY29uc3QgV2ViVVJMJiBiKQoreworICAgIHJldHVy
biAhKGEgPT0gYik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMRXJyb3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlVSTEVycm9yX2gKKyNkZWZp
bmUgV2ViVVJMRXJyb3JfaAorCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2Vi
VVJMLmgiCisKKyNpZiBkZWZpbmVkKFdFQktJVF9JTVBMRU1FTlRBVElPTikKK25hbWVzcGFjZSBX
ZWJDb3JlIHsgY2xhc3MgUmVzb3VyY2VFcnJvcjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdHJ1Y3QgV2ViVVJMRXJyb3IgeworICAgIC8vIEEgbmFtZXNwYWNlIGZvciAicmVh
c29uIiB0byBzdXBwb3J0IHZhcmlvdXMgbGF5ZXJzIGdlbmVyYXRpbmcKKyAgICAvLyByZXNvdXJj
ZSBlcnJvcnMuIFdlYktpdCBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSB2YWx1ZSBvZiB0aGlzCisg
ICAgLy8gc3RyaW5nIGFzIGl0IHdpbGwganVzdCBiZSBwYXNzZWQgdmlhIGNhbGxiYWNrcyB0byB0
aGUgY29uc3VtZXIuCisgICAgV2ViU3RyaW5nIGRvbWFpbjsKKworICAgIC8vIEEgbnVtZXJpYyBl
cnJvciBjb2RlIGRldGFpbGluZyB0aGUgcmVhc29uIGZvciB0aGlzIGVycm9yLiBBIHZhbHVlCisg
ICAgLy8gb2YgMCBtZWFucyBubyBlcnJvci4gV2ViS2l0IGRvZXMgbm90IGludGVycHJldCB0aGUg
bWVhbmluZyBvZiBvdGhlcgorICAgIC8vIHZhbHVlcyBhbmQgbm9ybWFsbHkganVzdCBmb3J3YXJk
cyB0aGlzIGVycm9yIGluZm9ybWF0aW9uIGJhY2sgdG8gdGhlCisgICAgLy8gZW1iZWRkZXIgKHNl
ZSBmb3IgZXhhbXBsZSBXZWJGcmFtZUNsaWVudCkuCisgICAgaW50IHJlYXNvbjsKKworICAgIC8v
IEEgZmxhZyBzaG93aW5nIHdoZXRoZXIgdGhpcyBlcnJvciBzaG91bGQgYmUgdHJlYXRlZCBhcyBh
IGNhbmNlbGxhdGlvbiwKKyAgICAvLyBlLmcuIHdlIGRvIG5vdCBzaG93IGNvbnNvbGUgZXJyb3Jz
IGZvciBjYW5jZWxsYXRpb25zLgorICAgIGJvb2wgaXNDYW5jZWxsYXRpb247CisKKyAgICAvLyBU
aGUgdXJsIHRoYXQgZmFpbGVkIHRvIGxvYWQuCisgICAgV2ViVVJMIHVucmVhY2hhYmxlVVJMOwor
CisgICAgV2ViVVJMRXJyb3IoKSA6IHJlYXNvbigwKSwgaXNDYW5jZWxsYXRpb24oZmFsc2UpIHsg
fQorCisjaWYgZGVmaW5lZChXRUJLSVRfSU1QTEVNRU5UQVRJT04pCisgICAgV2ViVVJMRXJyb3Io
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIFdlYlVSTEVycm9yJiBvcGVyYXRv
cj0oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIG9wZXJhdG9yIFdlYkNvcmU6
OlJlc291cmNlRXJyb3IoKSBjb25zdDsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJV
UkxMb2FkVGltaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJVUkxMb2FkVGltaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRUaW1pbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlVSTExvYWRUaW1pbmdfaAorI2RlZmluZSBXZWJVUkxMb2FkVGlt
aW5nX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVQdHIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBSZXNvdXJjZUxvYWRUaW1pbmc7IH0KKwor
bmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJTdHJpbmc7CisKK2NsYXNzIFdlYlVSTExvYWRU
aW1pbmcgeworcHVibGljOgorICAgIH5XZWJVUkxMb2FkVGltaW5nKCkgeyByZXNldCgpOyB9CisK
KyAgICBXZWJVUkxMb2FkVGltaW5nKCkgeyB9CisgICAgV2ViVVJMTG9hZFRpbWluZyhjb25zdCBX
ZWJVUkxMb2FkVGltaW5nJiBkKSB7IGFzc2lnbihkKTsgfQorICAgIFdlYlVSTExvYWRUaW1pbmcm
IG9wZXJhdG9yPShjb25zdCBXZWJVUkxMb2FkVGltaW5nJiBkKQorICAgIHsKKyAgICAgICAgYXNz
aWduKGQpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlVSTExvYWRUaW1pbmcmKTsKKwor
ICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlLmlzTnVsbCgpOyB9CisK
KyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSByZXF1ZXN0VGltZSgpIGNvbnN0OworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRSZXF1ZXN0VGltZShkb3VibGUpOworCisgICAgV0VCS0lUX0VYUE9S
VCBpbnQgcHJveHlTdGFydCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRQcm94
eVN0YXJ0KGludCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGludCBwcm94eUVuZCgpIGNvbnN0Owor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRQcm94eUVuZChpbnQpOworCisgICAgV0VCS0lUX0VY
UE9SVCBpbnQgZG5zU3RhcnQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RE5T
U3RhcnQoaW50KTsKKworICAgIFdFQktJVF9FWFBPUlQgaW50IGRuc0VuZCgpIGNvbnN0OworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBzZXRETlNFbmQoaW50KTsKKworICAgIFdFQktJVF9FWFBPUlQg
aW50IGNvbm5lY3RTdGFydCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRDb25u
ZWN0U3RhcnQoaW50KTsKKworICAgIFdFQktJVF9FWFBPUlQgaW50IGNvbm5lY3RFbmQoKSBjb25z
dDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Q29ubmVjdEVuZChpbnQpOworCisgICAgV0VC
S0lUX0VYUE9SVCBpbnQgc2VuZFN0YXJ0KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldFNlbmRTdGFydChpbnQpOworCisgICAgV0VCS0lUX0VYUE9SVCBpbnQgc2VuZEVuZCgpIGNv
bnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRTZW5kRW5kKGludCk7CisKKyAgICBXRUJL
SVRfRVhQT1JUIGludCByZWNlaXZlSGVhZGVyc0VuZCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBzZXRSZWNlaXZlSGVhZGVyc0VuZChpbnQpOworCisgICAgV0VCS0lUX0VYUE9SVCBp
bnQgc3NsU3RhcnQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U1NMU3RhcnQo
aW50KTsKKworICAgIFdFQktJVF9FWFBPUlQgaW50IHNzbEVuZCgpIGNvbnN0OworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRTU0xFbmQoaW50KTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgorICAgIFdlYlVSTExvYWRUaW1pbmcoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlJl
c291cmNlTG9hZFRpbWluZz4mKTsKKyAgICBXZWJVUkxMb2FkVGltaW5nJiBvcGVyYXRvcj0oY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlJlc291cmNlTG9hZFRpbWluZz4mKTsKKyAgICBv
cGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VMb2FkVGltaW5nPigpIGNv
bnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpSZXNv
dXJjZUxvYWRUaW1pbmc+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMTG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJV
UkxMb2FkZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViVVJMTG9hZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdlYlVSTExvYWRlcl9oCisjZGVmaW5lIFdlYlVSTExvYWRlcl9oCisKKyNpbmNsdWRlICJX
ZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkRhdGE7CitjbGFz
cyBXZWJVUkxMb2FkZXJDbGllbnQ7CitjbGFzcyBXZWJVUkxSZXF1ZXN0OworY2xhc3MgV2ViVVJM
UmVzcG9uc2U7CitzdHJ1Y3QgV2ViVVJMRXJyb3I7CisKK2NsYXNzIFdlYlVSTExvYWRlciB7Citw
dWJsaWM6CisgICAgLy8gVGhlIFdlYlVSTExvYWRlciBtYXkgYmUgZGVsZXRlZCBpbiBhIGNhbGwg
dG8gaXRzIGNsaWVudC4KKyAgICB2aXJ0dWFsIH5XZWJVUkxMb2FkZXIoKSB7fQorCisgICAgLy8g
TG9hZCB0aGUgcmVxdWVzdCBzeW5jaHJvbm91c2x5LCByZXR1cm5pbmcgcmVzdWx0cyBkaXJlY3Rs
eSB0byB0aGUKKyAgICAvLyBjYWxsZXIgdXBvbiBjb21wbGV0aW9uLiAgVGhlcmUgaXMgbm8gbWVj
aGFuaXNtIHRvIGludGVycnVwdCBhCisgICAgLy8gc3luY2hyb25vdXMgbG9hZCEhCisgICAgdmly
dHVhbCB2b2lkIGxvYWRTeW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmLAorICAgICAg
ICBXZWJVUkxSZXNwb25zZSYsIFdlYlVSTEVycm9yJiwgV2ViRGF0YSYgZGF0YSkgPSAwOworCisg
ICAgLy8gTG9hZCB0aGUgcmVxdWVzdCBhc3luY2hyb25vdXNseSwgc2VuZGluZyBub3RpZmljYXRp
b25zIHRvIHRoZSBnaXZlbgorICAgIC8vIGNsaWVudC4gIFRoZSBjbGllbnQgd2lsbCByZWNlaXZl
IG5vIGZ1cnRoZXIgbm90aWZpY2F0aW9ucyBpZiB0aGUKKyAgICAvLyBsb2FkZXIgaXMgZGlzcG9z
ZWQgYmVmb3JlIGl0IGNvbXBsZXRlcyBpdHMgd29yay4KKyAgICB2aXJ0dWFsIHZvaWQgbG9hZEFz
eW5jaHJvbm91c2x5KGNvbnN0IFdlYlVSTFJlcXVlc3QmLAorICAgICAgICBXZWJVUkxMb2FkZXJD
bGllbnQqKSA9IDA7CisKKyAgICAvLyBDYW5jZWxzIGFuIGFzeW5jaHJvbm91cyBsb2FkLiAgVGhp
cyB3aWxsIGFwcGVhciBhcyBhIGxvYWQgZXJyb3IgdG8KKyAgICAvLyB0aGUgY2xpZW50LgorICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWwoKSA9IDA7CisKKyAgICAvLyBTdXNwZW5kcy9yZXN1bWVzIGFu
IGFzeW5jaHJvbm91cyBsb2FkLgorICAgIHZpcnR1YWwgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJv
b2wpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMTG9hZGVyQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJVUkxMb2FkZXJDbGll
bnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
VVJMTG9hZGVyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YlVSTExvYWRlckNsaWVudF9oCisjZGVmaW5lIFdlYlVSTExvYWRlckNsaWVudF9oCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJVUkxMb2FkZXI7CitjbGFzcyBXZWJVUkxSZXF1ZXN0
OworY2xhc3MgV2ViVVJMUmVzcG9uc2U7CitzdHJ1Y3QgV2ViVVJMRXJyb3I7CisKK2NsYXNzIFdl
YlVSTExvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgLy8gQ2FsbGVkIHdoZW4gZm9sbG93aW5n
IGEgcmVkaXJlY3QuIHxuZXdSZXF1ZXN0fCBjb250YWlucyB0aGUgcmVxdWVzdAorICAgIC8vIGdl
bmVyYXRlZCBieSB0aGUgcmVkaXJlY3QuIFRoZSBjbGllbnQgbWF5IG1vZGlmeSB8bmV3UmVxdWVz
dHwuCisgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdCgKKyAgICAgICAgV2ViVVJMTG9h
ZGVyKiwgV2ViVVJMUmVxdWVzdCYgbmV3UmVxdWVzdCwgY29uc3QgV2ViVVJMUmVzcG9uc2UmIHJl
ZGlyZWN0UmVzcG9uc2UpIHsgfQorCisgICAgLy8gQ2FsbGVkIHRvIHJlcG9ydCB1cGxvYWQgcHJv
Z3Jlc3MuIFRoZSBieXRlcyByZXBvcnRlZCBjb3JyZXNwb25kIHRvCisgICAgLy8gdGhlIEhUVFAg
bWVzc2FnZSBib2R5LgorICAgIHZpcnR1YWwgdm9pZCBkaWRTZW5kRGF0YSgKKyAgICAgICAgV2Vi
VVJMTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBs
b25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgeyB9CisKKyAgICAvLyBDYWxsZWQgd2hlbiByZXNwb25z
ZSBoZWFkZXJzIGFyZSByZWNlaXZlZC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKFdlYlVSTExvYWRlciosIGNvbnN0IFdlYlVSTFJlc3BvbnNlJikgeyB9CisKKyAgICAvLyBD
YWxsZWQgd2hlbiBhIGNodW5rIG9mIHJlc3BvbnNlIGRhdGEgaXMgZG93bmxvYWRlZC4gVGhpcyBp
cyBvbmx5IGNhbGxlZAorICAgIC8vIGlmIFdlYlVSTFJlcXVlc3QncyBkb3dubG9hZFRvRmlsZSBm
bGFnIHdhcyBzZXQgdG8gdHJ1ZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRG93bmxvYWREYXRhKFdl
YlVSTExvYWRlciosIGludCBkYXRhTGVuZ3RoKSB7IH0KKworICAgIC8vIENhbGxlZCB3aGVuIGEg
Y2h1bmsgb2YgcmVzcG9uc2UgZGF0YSBpcyByZWNlaXZlZC4KKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGRhdGFMZW5n
dGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCkgeyB9CisKKyAgICAvLyBDYWxsZWQgd2hlbiBhIGNo
dW5rIG9mIHJlbmRlcmVyLWdlbmVyYXRlZCBtZXRhZGF0YSBpcyByZWNlaXZlZCBmcm9tIHRoZSBj
YWNoZS4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNhY2hlZE1ldGFkYXRhKFdlYlVSTExv
YWRlciosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKSB7IH0KKworICAgIC8vIENh
bGxlZCB3aGVuIHRoZSBsb2FkIGNvbXBsZXRlcyBzdWNjZXNzZnVsbHkuCisgICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcoV2ViVVJMTG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpIHsg
fQorCisgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGxvYWQgY29tcGxldGVzIHdpdGggYW4gZXJyb3Iu
CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2ViVVJMTG9hZGVyKiwgY29uc3QgV2ViVVJMRXJy
b3ImKSB7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfldlYlVSTExvYWRlckNsaWVudCgp
IHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJVUkxSZXF1ZXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJVUkxSZXF1ZXN0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlVSTFJlcXVlc3QuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlVSTFJlcXVlc3RfaAorI2Rl
ZmluZSBXZWJVUkxSZXF1ZXN0X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYkhUVFBCb2R5LmgiCisKKyNpZiBkZWZpbmVkKFdFQktJVF9JTVBMRU1FTlRBVElPTikKK25h
bWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OyB9CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkNTdHJpbmc7CitjbGFzcyBXZWJIVFRQQm9keTsK
K2NsYXNzIFdlYkhUVFBIZWFkZXJWaXNpdG9yOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2Vi
VVJMOworY2xhc3MgV2ViVVJMUmVxdWVzdFByaXZhdGU7CisKK2NsYXNzIFdlYlVSTFJlcXVlc3Qg
eworcHVibGljOgorICAgIGVudW0gQ2FjaGVQb2xpY3kgeworICAgICAgICBVc2VQcm90b2NvbENh
Y2hlUG9saWN5LCAvLyBub3JtYWwgbG9hZAorICAgICAgICBSZWxvYWRJZ25vcmluZ0NhY2hlRGF0
YSwgLy8gcmVsb2FkCisgICAgICAgIFJldHVybkNhY2hlRGF0YUVsc2VMb2FkLCAvLyBiYWNrL2Zv
cndhcmQgb3IgZW5jb2RpbmcgY2hhbmdlIC0gYWxsb3cgc3RhbGUgZGF0YQorICAgICAgICBSZXR1
cm5DYWNoZURhdGFEb250TG9hZCwgLy8gcmVzdWx0cyBvZiBhIHBvc3QgLSBhbGxvdyBzdGFsZSBk
YXRhIGFuZCBvbmx5IHVzZSBjYWNoZQorICAgIH07CisKKyAgICBlbnVtIFRhcmdldFR5cGUgewor
ICAgICAgICBUYXJnZXRJc01haW5GcmFtZSA9IDAsCisgICAgICAgIFRhcmdldElzU3ViZnJhbWUg
PSAxLAorICAgICAgICBUYXJnZXRJc1N1YnJlc291cmNlID0gMiwKKyAgICAgICAgVGFyZ2V0SXNT
dHlsZVNoZWV0ID0gMywKKyAgICAgICAgVGFyZ2V0SXNTY3JpcHQgPSA0LAorICAgICAgICBUYXJn
ZXRJc0ZvbnRSZXNvdXJjZSA9IDUsCisgICAgICAgIFRhcmdldElzSW1hZ2UgPSA2LAorICAgICAg
ICBUYXJnZXRJc09iamVjdCA9IDcsCisgICAgICAgIFRhcmdldElzTWVkaWEgPSA4LAorICAgICAg
ICBUYXJnZXRJc1dvcmtlciA9IDksCisgICAgICAgIFRhcmdldElzU2hhcmVkV29ya2VyID0gMTAs
CisgICAgICAgIFRhcmdldElzUHJlZmV0Y2ggPSAxMSwKKyAgICAgICAgVGFyZ2V0SXNQcmVyZW5k
ZXIgPSAxMiwKKyAgICAgICAgVGFyZ2V0SXNGYXZpY29uID0gMTMsCisgICAgICAgIFRhcmdldElz
WEhSID0gMTQsCisgICAgICAgIFRhcmdldElzVGV4dFRyYWNrID0gMTUsCisgICAgICAgIFRhcmdl
dElzVW5zcGVjaWZpZWQgPSAxNiwKKyAgICB9OworCisgICAgY2xhc3MgRXh0cmFEYXRhIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfkV4dHJhRGF0YSgpIHsgfQorICAgIH07CisKKyAg
ICB+V2ViVVJMUmVxdWVzdCgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViVVJMUmVxdWVzdCgpIDog
bV9wcml2YXRlKDApIHsgfQorICAgIFdlYlVSTFJlcXVlc3QoY29uc3QgV2ViVVJMUmVxdWVzdCYg
cikgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24ocik7IH0KKyAgICBXZWJVUkxSZXF1ZXN0JiBvcGVy
YXRvcj0oY29uc3QgV2ViVVJMUmVxdWVzdCYgcikKKyAgICB7CisgICAgICAgIGFzc2lnbihyKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGV4cGxpY2l0IFdlYlVSTFJlcXVl
c3QoY29uc3QgV2ViVVJMJiB1cmwpIDogbV9wcml2YXRlKDApCisgICAgeworICAgICAgICBpbml0
aWFsaXplKCk7CisgICAgICAgIHNldFVSTCh1cmwpOworICAgIH0KKworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHJlc2V0KCk7Cisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJVUkxSZXF1ZXN0Jik7CisKKyAg
ICBXRUJLSVRfRVhQT1JUIGJvb2wgaXNOdWxsKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JU
IFdlYlVSTCB1cmwoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VVJMKGNvbnN0
IFdlYlVSTCYpOworCisgICAgLy8gVXNlZCB0byBpbXBsZW1lbnQgdGhpcmQtcGFydHkgY29va2ll
IGJsb2NraW5nLgorICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIGZpcnN0UGFydHlGb3JDb29raWVz
KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEZpcnN0UGFydHlGb3JDb29raWVz
KGNvbnN0IFdlYlVSTCYpOworCisgICAgV0VCS0lUX0VYUE9SVCBib29sIGFsbG93Q29va2llcygp
IGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBbGxvd0Nvb2tpZXMoYm9vbCk7CisK
KyAgICAvLyBDb250cm9scyB3aGV0aGVyIHVzZXIgbmFtZSwgcGFzc3dvcmQsIGFuZCBjb29raWVz
IG1heSBiZSBzZW50IHdpdGggdGhlCisgICAgLy8gcmVxdWVzdC4gKElmIGZhbHNlLCB0aGlzIG92
ZXJyaWRlcyBhbGxvd0Nvb2tpZXMuKQorICAgIFdFQktJVF9FWFBPUlQgYm9vbCBhbGxvd1N0b3Jl
ZENyZWRlbnRpYWxzKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFsbG93U3Rv
cmVkQ3JlZGVudGlhbHMoYm9vbCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIENhY2hlUG9saWN5IGNh
Y2hlUG9saWN5KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldENhY2hlUG9saWN5
KENhY2hlUG9saWN5KTsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGh0dHBNZXRob2Qo
KSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0SFRUUE1ldGhvZChjb25zdCBXZWJT
dHJpbmcmKTsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChj
b25zdCBXZWJTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRI
VFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHZh
bHVlKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSk7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGNsZWFySFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSk7CisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIHZpc2l0SFRUUEhlYWRlckZpZWxkcyhXZWJIVFRQSGVhZGVyVmlz
aXRvciopIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJIVFRQQm9keSBodHRwQm9keSgp
IGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRIVFRQQm9keShjb25zdCBXZWJIVFRQ
Qm9keSYpOworCisgICAgLy8gQ29udHJvbHMgd2hldGhlciB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRz
IGFyZSBnZW5lcmF0ZWQgd2hlbiBhIHJlcXVlc3QKKyAgICAvLyBoYXMgYSBib2R5LgorICAgIFdF
QktJVF9FWFBPUlQgYm9vbCByZXBvcnRVcGxvYWRQcm9ncmVzcygpIGNvbnN0OworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sKTsKKworICAgIC8vIENv
bnRyb2xzIHdoZXRoZXIgbG9hZCB0aW1pbmcgaW5mbyBpcyBjb2xsZWN0ZWQgZm9yIHRoZSByZXF1
ZXN0LgorICAgIFdFQktJVF9FWFBPUlQgYm9vbCByZXBvcnRMb2FkVGltaW5nKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFJlcG9ydExvYWRUaW1pbmcoYm9vbCk7CisKKyAgICAv
LyBDb250cm9scyB3aGV0aGVyIGFjdHVhbCBoZWFkZXJzIHNlbnQgYW5kIHJlY2VpdmVkIGZvciBy
ZXF1ZXN0IGFyZQorICAgIC8vIGNvbGxlY3RlZCBhbmQgcmVwb3J0ZWQuCisgICAgV0VCS0lUX0VY
UE9SVCBib29sIHJlcG9ydFJhd0hlYWRlcnMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0UmVwb3J0UmF3SGVhZGVycyhib29sKTsKKworICAgIFdFQktJVF9FWFBPUlQgVGFyZ2V0
VHlwZSB0YXJnZXRUeXBlKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFRhcmdl
dFR5cGUoVGFyZ2V0VHlwZSk7CisKKyAgICAvLyBUcnVlIGlmIHRoZSByZXF1ZXN0IHdhcyB1c2Vy
IGluaXRpYXRlZC4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaGFzVXNlckdlc3R1cmUoKSBjb25z
dDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0SGFzVXNlckdlc3R1cmUoYm9vbCk7CisKKyAg
ICAvLyBBIGNvbnN1bWVyIGNvbnRyb2xsZWQgdmFsdWUgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byBp
ZGVudGlmeSB0aGUKKyAgICAvLyByZXF1ZXN0b3IuCisgICAgV0VCS0lUX0VYUE9SVCBpbnQgcmVx
dWVzdG9ySUQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UmVxdWVzdG9ySUQo
aW50KTsKKworICAgIC8vIEEgY29uc3VtZXIgY29udHJvbGxlZCB2YWx1ZSBpbnRlbmRlZCB0byBi
ZSB1c2VkIHRvIGlkZW50aWZ5IHRoZQorICAgIC8vIHByb2Nlc3Mgb2YgdGhlIHJlcXVlc3Rvci4K
KyAgICBXRUJLSVRfRVhQT1JUIGludCByZXF1ZXN0b3JQcm9jZXNzSUQoKSBjb25zdDsKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0UmVxdWVzdG9yUHJvY2Vzc0lEKGludCk7CisKKyAgICAvLyBB
bGxvd3MgdGhlIHJlcXVlc3QgdG8gYmUgbWF0Y2hlZCB1cCB3aXRoIGl0cyBhcHAgY2FjaGUgaG9z
dC4KKyAgICBXRUJLSVRfRVhQT1JUIGludCBhcHBDYWNoZUhvc3RJRCgpIGNvbnN0OworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBzZXRBcHBDYWNoZUhvc3RJRChpbnQpOworCisgICAgLy8gSWYgdHJ1
ZSwgdGhlIHJlc3BvbnNlIGJvZHkgd2lsbCBiZSBkb3dubG9hZGVkIHRvIGEgZmlsZSBtYW5hZ2Vk
IGJ5IHRoZQorICAgIC8vIFdlYlVSTExvYWRlci4gU2VlIFdlYlVSTFJlc3BvbnNlOjpkb3dubG9h
ZGVkRmlsZVBhdGguCisgICAgV0VCS0lUX0VYUE9SVCBib29sIGRvd25sb2FkVG9GaWxlKCkgY29u
c3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldERvd25sb2FkVG9GaWxlKGJvb2wpOworCisg
ICAgLy8gRXh0cmEgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybHlpbmcgcmVzb3VyY2Ug
cmVxdWVzdC4gUmVzb3VyY2UKKyAgICAvLyByZXF1ZXN0cyBjYW4gYmUgY29waWVkLiBJZiBub24t
bnVsbCwgZWFjaCBjb3B5IG9mIGEgcmVzb3VyY2UgcmVxdWVzdHMKKyAgICAvLyBob2xkcyBhIHBv
aW50ZXIgdG8gdGhlIGV4dHJhIGRhdGEsIGFuZCB0aGUgZXh0cmEgZGF0YSBwb2ludGVyIHdpbGwg
YmUKKyAgICAvLyBkZWxldGVkIHdoZW4gdGhlIGxhc3QgcmVzb3VyY2UgcmVxdWVzdCBpcyBkZXN0
cm95ZWQuIFNldHRpbmcgdGhlIGV4dHJhCisgICAgLy8gZGF0YSBwb2ludGVyIHdpbGwgY2F1c2Ug
dGhlIHVuZGVybHlpbmcgcmVzb3VyY2UgcmVxdWVzdCB0byBiZQorICAgIC8vIGRpc3NvY2lhdGVk
IGZyb20gYW55IGV4aXN0aW5nIG5vbi1udWxsIGV4dHJhIGRhdGEgcG9pbnRlci4KKyAgICBXRUJL
SVRfRVhQT1JUIEV4dHJhRGF0YSogZXh0cmFEYXRhKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHNldEV4dHJhRGF0YShFeHRyYURhdGEqKTsKKworI2lmIGRlZmluZWQoV0VCS0lUX0lN
UExFTUVOVEFUSU9OKQorICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgdG9NdXRhYmxlUmVz
b3VyY2VSZXF1ZXN0KCk7CisgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiB0b1Jl
c291cmNlUmVxdWVzdCgpIGNvbnN0OworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGFz
c2lnbihXZWJVUkxSZXF1ZXN0UHJpdmF0ZSopOworCitwcml2YXRlOgorICAgIFdlYlVSTFJlcXVl
c3RQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlVSTFJlc3BvbnNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJVUkxS
ZXNwb25zZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJVUkxSZXNwb25zZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViVVJMUmVzcG9uc2VfaAorI2RlZmluZSBXZWJVUkxSZXNwb25zZV9oCisKKyNpbmNsdWRlICJX
ZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisKKyNpZiBkZWZpbmVk
KFdFQktJVF9JTVBMRU1FTlRBVElPTikKK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVzb3Vy
Y2VSZXNwb25zZTsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJD
U3RyaW5nOworY2xhc3MgV2ViSFRUUEhlYWRlclZpc2l0b3I7CitjbGFzcyBXZWJIVFRQTG9hZElu
Zm87CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7CitjbGFzcyBXZWJVUkxMb2FkVGlt
aW5nOworY2xhc3MgV2ViVVJMUmVzcG9uc2VQcml2YXRlOworCitjbGFzcyBXZWJVUkxSZXNwb25z
ZSB7CitwdWJsaWM6CisgICAgY2xhc3MgRXh0cmFEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgfkV4dHJhRGF0YSgpIHsgfQorICAgIH07CisKKyAgICB+V2ViVVJMUmVzcG9uc2Uo
KSB7IHJlc2V0KCk7IH0KKworICAgIFdlYlVSTFJlc3BvbnNlKCkgOiBtX3ByaXZhdGUoMCkgeyB9
CisgICAgV2ViVVJMUmVzcG9uc2UoY29uc3QgV2ViVVJMUmVzcG9uc2UmIHIpIDogbV9wcml2YXRl
KDApIHsgYXNzaWduKHIpOyB9CisgICAgV2ViVVJMUmVzcG9uc2UmIG9wZXJhdG9yPShjb25zdCBX
ZWJVUkxSZXNwb25zZSYgcikKKyAgICB7CisgICAgICAgIGFzc2lnbihyKTsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIGV4cGxpY2l0IFdlYlVSTFJlc3BvbnNlKGNvbnN0IFdl
YlVSTCYgdXJsKSA6IG1fcHJpdmF0ZSgwKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZSgpOwor
ICAgICAgICBzZXRVUkwodXJsKTsKKyAgICB9CisKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5p
dGlhbGl6ZSgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViVVJMUmVzcG9uc2UmKTsKKworICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBpc051bGwoKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHVy
bCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRVUkwoY29uc3QgV2ViVVJMJik7
CisKKyAgICBXRUJLSVRfRVhQT1JUIHVuc2lnbmVkIGNvbm5lY3Rpb25JRCgpIGNvbnN0OworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBzZXRDb25uZWN0aW9uSUQodW5zaWduZWQpOworCisgICAgV0VC
S0lUX0VYUE9SVCBib29sIGNvbm5lY3Rpb25SZXVzZWQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgc2V0Q29ubmVjdGlvblJldXNlZChib29sKTsKKworICAgIFdFQktJVF9FWFBPUlQg
V2ViVVJMTG9hZFRpbWluZyBsb2FkVGltaW5nKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNl
dExvYWRUaW1pbmcoY29uc3QgV2ViVVJMTG9hZFRpbWluZyYpOworCisgICAgV0VCS0lUX0VYUE9S
VCBXZWJIVFRQTG9hZEluZm8gaHR0cExvYWRJbmZvKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldEhUVFBMb2FkSW5mbyhjb25zdCBXZWJIVFRQTG9hZEluZm8mKTsKKworICAgIFdFQktJVF9F
WFBPUlQgZG91YmxlIHJlc3BvbnNlVGltZSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBzZXRSZXNwb25zZVRpbWUoZG91YmxlKTsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5n
IG1pbWVUeXBlKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE1JTUVUeXBlKGNv
bnN0IFdlYlN0cmluZyYpOworCisgICAgV0VCS0lUX0VYUE9SVCBsb25nIGxvbmcgZXhwZWN0ZWRD
b250ZW50TGVuZ3RoKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEV4cGVjdGVk
Q29udGVudExlbmd0aChsb25nIGxvbmcpOworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcg
dGV4dEVuY29kaW5nTmFtZSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRUZXh0
RW5jb2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJT
dHJpbmcgc3VnZ2VzdGVkRmlsZU5hbWUoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
c2V0U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3QgV2ViU3RyaW5nJik7CisKKyAgICBXRUJLSVRfRVhQ
T1JUIGludCBodHRwU3RhdHVzQ29kZSgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBz
ZXRIVFRQU3RhdHVzQ29kZShpbnQpOworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgaHR0
cFN0YXR1c1RleHQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0SFRUUFN0YXR1
c1RleHQoY29uc3QgV2ViU3RyaW5nJik7CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBo
dHRwSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29u
c3QgV2ViU3RyaW5nJiB2YWx1ZSk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZEhUVFBIZWFk
ZXJGaWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJp
bmcmIG5hbWUpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCB2aXNpdEhUVFBIZWFkZXJGaWVsZHMo
V2ViSFRUUEhlYWRlclZpc2l0b3IqKSBjb25zdDsKKworICAgIFdFQktJVF9FWFBPUlQgZG91Ymxl
IGxhc3RNb2RpZmllZERhdGUoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TGFz
dE1vZGlmaWVkRGF0ZShkb3VibGUpOworCisgICAgV0VCS0lUX0VYUE9SVCBsb25nIGxvbmcgYXBw
Q2FjaGVJRCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBcHBDYWNoZUlEKGxv
bmcgbG9uZyk7CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlVSTCBhcHBDYWNoZU1hbmlmZXN0VVJM
KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFwcENhY2hlTWFuaWZlc3RVUkwo
Y29uc3QgV2ViVVJMJik7CisKKyAgICAvLyBBIGNvbnN1bWVyIGNvbnRyb2xsZWQgdmFsdWUgaW50
ZW5kZWQgdG8gYmUgdXNlZCB0byByZWNvcmQgb3BhcXVlCisgICAgLy8gc2VjdXJpdHkgaW5mbyBy
ZWxhdGVkIHRvIHRoaXMgcmVxdWVzdC4KKyAgICBXRUJLSVRfRVhQT1JUIFdlYkNTdHJpbmcgc2Vj
dXJpdHlJbmZvKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFNlY3VyaXR5SW5m
byhjb25zdCBXZWJDU3RyaW5nJik7CisKKyNpZiBkZWZpbmVkKFdFQktJVF9JTVBMRU1FTlRBVElP
TikKKyAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB0b011dGFibGVSZXNvdXJjZVJlc3Bv
bnNlKCk7CisgICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdG9SZXNvdXJjZVJl
c3BvbnNlKCkgY29uc3Q7CisjZW5kaWYKKworICAgIC8vIEZsYWcgd2hldGhlciB0aGlzIHJlcXVl
c3Qgd2FzIHNlcnZlZCBmcm9tIHRoZSBkaXNrIGNhY2hlIGVudHJ5LgorICAgIFdFQktJVF9FWFBP
UlQgYm9vbCB3YXNDYWNoZWQoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0V2Fz
Q2FjaGVkKGJvb2wpOworCisgICAgLy8gRmxhZyB3aGV0aGVyIHRoaXMgcmVxdWVzdCB3YXMgbG9h
ZGVkIHZpYSB0aGUgU1BEWSBwcm90b2NvbCBvciBub3QuCisgICAgLy8gU1BEWSBpcyBhbiBleHBl
cmltZW50YWwgd2ViIHByb3RvY29sLCBzZWUgaHR0cDovL2Rldi5jaHJvbWl1bS5vcmcvc3BkeQor
ICAgIFdFQktJVF9FWFBPUlQgYm9vbCB3YXNGZXRjaGVkVmlhU1BEWSgpIGNvbnN0OworICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBzZXRXYXNGZXRjaGVkVmlhU1BEWShib29sKTsKKworICAgIC8vIEZs
YWcgd2hldGhlciB0aGlzIHJlcXVlc3Qgd2FzIGxvYWRlZCBhZnRlciB0aGUgVExTL05leHQtUHJv
dG9jb2wtTmVnb3RpYXRpb24gd2FzIHVzZWQuCisgICAgLy8gVGhpcyBpcyByZWxhdGVkIHRvIFNQ
RFkuCisgICAgV0VCS0lUX0VYUE9SVCBib29sIHdhc05wbk5lZ290aWF0ZWQoKSBjb25zdDsKKyAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0V2FzTnBuTmVnb3RpYXRlZChib29sKTsKKworICAgIC8v
IEZsYWcgd2hldGhlciB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUgd2hlbiAiQWx0ZXJuYXRlLVByb3Rv
Y29sOiB4eHgiCisgICAgLy8gaXMgcHJlc2VudCBpbiBzZXJ2ZXIncyByZXNwb25zZS4KKyAgICBX
RUJLSVRfRVhQT1JUIGJvb2wgd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUoKSBjb25zdDsK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0V2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUo
Ym9vbCk7CisKKyAgICAvLyBGbGFnIHdoZXRoZXIgdGhpcyByZXF1ZXN0IHdhcyBsb2FkZWQgdmlh
IGFuIGV4cGxpY2l0IHByb3h5IChIVFRQLCBTT0NLUywgZXRjKS4KKyAgICBXRUJLSVRfRVhQT1JU
IGJvb2wgd2FzRmV0Y2hlZFZpYVByb3h5KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldFdhc0ZldGNoZWRWaWFQcm94eShib29sKTsKKworICAgIC8vIEZsYWcgd2hldGhlciB0aGlz
IHJlcXVlc3QgaXMgcGFydCBvZiBhIG11bHRpcGFydCByZXNwb25zZS4KKyAgICBXRUJLSVRfRVhQ
T1JUIGJvb2wgaXNNdWx0aXBhcnRQYXlsb2FkKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHNldElzTXVsdGlwYXJ0UGF5bG9hZChib29sKTsKKworICAgIC8vIFRoaXMgaW5kaWNhdGVz
IHRoZSBsb2NhdGlvbiBvZiBhIGRvd25sb2FkZWQgcmVzcG9uc2UgaWYgdGhlCisgICAgLy8gV2Vi
VVJMUmVxdWVzdCBoYWQgdGhlIGRvd25sb2FkVG9GaWxlIGZsYWcgc2V0IHRvIHRydWUuIFRoaXMg
ZmlsZSBwYXRoCisgICAgLy8gcmVtYWlucyB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBX
ZWJVUkxMb2FkZXIgdXNlZCB0byBjcmVhdGUgaXQuCisgICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJp
bmcgZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRE
b3dubG9hZEZpbGVQYXRoKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgLy8gUmVtb3RlIElQIGFk
ZHJlc3Mgb2YgdGhlIHNvY2tldCB3aGljaCBmZXRjaGVkIHRoaXMgcmVzb3VyY2UuCisgICAgV0VC
S0lUX0VYUE9SVCBXZWJTdHJpbmcgcmVtb3RlSVBBZGRyZXNzKCkgY29uc3Q7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHNldFJlbW90ZUlQQWRkcmVzcyhjb25zdCBXZWJTdHJpbmcmKTsKKworICAg
IC8vIFJlbW90ZSBwb3J0IG51bWJlciBvZiB0aGUgc29ja2V0IHdoaWNoIGZldGNoZWQgdGhpcyBy
ZXNvdXJjZS4KKyAgICBXRUJLSVRfRVhQT1JUIHVuc2lnbmVkIHNob3J0IHJlbW90ZVBvcnQoKSBj
b25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UmVtb3RlUG9ydCh1bnNpZ25lZCBzaG9y
dCk7CisKKyAgICAvLyBFeHRyYSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyBy
ZXNvdXJjZSByZXNwb25zZS4gUmVzb3VyY2UKKyAgICAvLyByZXNwb25zZXMgY2FuIGJlIGNvcGll
ZC4gSWYgbm9uLW51bGwsIGVhY2ggY29weSBvZiBhIHJlc291cmNlIHJlc3BvbnNlCisgICAgLy8g
aG9sZHMgYSBwb2ludGVyIHRvIHRoZSBleHRyYSBkYXRhLCBhbmQgdGhlIGV4dHJhIGRhdGEgcG9p
bnRlciB3aWxsIGJlCisgICAgLy8gZGVsZXRlZCB3aGVuIHRoZSBsYXN0IHJlc291cmNlIHJlc3Bv
bnNlIGlzIGRlc3Ryb3llZC4gU2V0dGluZyB0aGUgZXh0cmEKKyAgICAvLyBkYXRhIHBvaW50ZXIg
d2lsbCBjYXVzZSB0aGUgdW5kZXJseWluZyByZXNvdXJjZSByZXNwb25zZSB0byBiZQorICAgIC8v
IGRpc3NvY2lhdGVkIGZyb20gYW55IGV4aXN0aW5nIG5vbi1udWxsIGV4dHJhIGRhdGEgcG9pbnRl
ci4KKyAgICBXRUJLSVRfRVhQT1JUIEV4dHJhRGF0YSogZXh0cmFEYXRhKCkgY29uc3Q7CisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIHNldEV4dHJhRGF0YShFeHRyYURhdGEqKTsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgYXNzaWduKFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSopOworCitwcml2YXRlOgor
ICAgIFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDExMjQ3NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDMtMjggIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KKworICAgICAgICBbQ2hyb21pdW1dIE1vdmUgQVBJcyByZWxhdGVkIHRvIFJl
c291cmNlSGFuZGxlIGludG8gUGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgyNTUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlc2UgaGVhZGVycyBhcmUgbm93IGp1c3QgZm9yd2FyZGluZyBo
ZWFkZXJzIHRvIHRoZSBuZXcgbG9jYXRpb24gb2YKKyAgICAgICAgdGhlc2UgaGVhZGVycy4gVGhl
c2UgZm9yd2FyZGluZyBoZWFkZXJzIGV4aXN0IHRvIGF2b2lkIGJyZWFraW5nCisgICAgICAgIGV4
aXN0aW5nIHVzZXJzIG9mIHRoZSBBUEkuIFRoZXkgd2lsbCBsaWtlbHkgYmUgcmVtb3ZlZCAob3Ig
Y2hhbmdlZCkKKyAgICAgICAgaW4gdGhlIGZ1dHVyZSBvbmNlIHdlJ3ZlIHVwZGF0ZWQgYWxsIGZv
bGtzIHVzaW5nIHRoZW0uCisKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViRGF0YS5oOgor
ICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJIVFRQQm9keS5oOgorICAgICAgICAqIHB1Ymxp
Yy9wbGF0Zm9ybS9XZWJIVFRQSGVhZGVyVmlzaXRvci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0
Zm9ybS9XZWJIVFRQTG9hZEluZm8uaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViUHJp
dmF0ZU93blB0ci5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJVUkwuaDoKKyAgICAg
ICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViVVJMRXJyb3IuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxh
dGZvcm0vV2ViVVJMTG9hZFRpbWluZy5oOgorICAgICAgICAqIHB1YmxpYy9wbGF0Zm9ybS9XZWJV
UkxMb2FkZXIuaDoKKyAgICAgICAgKiBwdWJsaWMvcGxhdGZvcm0vV2ViVVJMTG9hZGVyQ2xpZW50
Lmg6CisgICAgICAgICogcHVibGljL3BsYXRmb3JtL1dlYlVSTFJlcXVlc3QuaDoKKyAgICAgICAg
KiBwdWJsaWMvcGxhdGZvcm0vV2ViVVJMUmVzcG9uc2UuaDoKKwogMjAxMi0wMy0yOCAgTmF0ZSBD
aGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSBkaXNwYXRjaERp
ZExvYWRNYWluUmVzb3VyY2UgY2FsbGJhY2ssIHNpbmNlIG5vCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViRGF0YS5oCShyZXZpc2lvbiAxMTI0
NjIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTEwICsxLDI2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKICAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBXZWJEYXRhX2gKLSNkZWZpbmUgV2ViRGF0YV9oCi0KLSNpbmNsdWRlICJXZWJD
b21tb24uaCIKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotbmFtZXNwYWNlIFdlYkNvcmUg
eyBjbGFzcyBTaGFyZWRCdWZmZXI7IH0KLW5hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gY2xhc3MgUGFzc1JlZlB0cjsgfQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1jbGFzcyBXZWJEYXRhUHJpdmF0ZTsKLQotLy8gQSBjb250YWluZXIgZm9yIHJhdyBieXRlcy4g
IEl0IGlzIGluZXhwZW5zaXZlIHRvIGNvcHkgYSBXZWJEYXRhIG9iamVjdC4KLS8vCi0vLyBXQVJO
SU5HOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzIGEgV2ViRGF0YSBhY3Jvc3MgdGhyZWFkcyEhIQot
Ly8KLWNsYXNzIFdlYkRhdGEgewotcHVibGljOgotICAgIH5XZWJEYXRhKCkgeyByZXNldCgpOyB9
Ci0KLSAgICBXZWJEYXRhKCkgOiBtX3ByaXZhdGUoMCkgeyB9Ci0KLSAgICBXZWJEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAg
YXNzaWduKGRhdGEsIHNpemUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDxpbnQgTj4KLSAgICBX
ZWJEYXRhKGNvbnN0IGNoYXIgKCZkYXRhKVtOXSkgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAg
ICAgIGFzc2lnbihkYXRhLCBOIC0gMSk7Ci0gICAgfQotCi0gICAgV2ViRGF0YShjb25zdCBXZWJE
YXRhJiBkKSA6IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihkKTsgfQotCi0gICAgV2ViRGF0YSYgb3Bl
cmF0b3I9KGNvbnN0IFdlYkRhdGEmIGQpCi0gICAgewotICAgICAgICBhc3NpZ24oZCk7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQo
KTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkRhdGEmKTsKLSAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplKTsK
LQotICAgIFdFQktJVF9FWFBPUlQgc2l6ZV90IHNpemUoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQ
T1JUIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdDsKLQotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
IHsgcmV0dXJuICFzaXplKCk7IH0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFt
X3ByaXZhdGU7IH0KLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYkRhdGEoY29u
c3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mKTsKLSAgICBXZWJEYXRh
JiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4m
KTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPigp
IGNvbnN0OwotI2Vsc2UKLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICBXZWJEYXRhKGNvbnN0
IEMmIGMpIDogbV9wcml2YXRlKDApCi0gICAgewotICAgICAgICBhc3NpZ24oYy5kYXRhKCksIGMu
c2l6ZSgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICBXZWJEYXRhJiBv
cGVyYXRvcj0oY29uc3QgQyYgYykKLSAgICB7Ci0gICAgICAgIGFzc2lnbihjLmRhdGEoKSwgYy5z
aXplKCkpOwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6
Ci0gICAgdm9pZCBhc3NpZ24oV2ViRGF0YVByaXZhdGUqKTsKLSAgICBXZWJEYXRhUHJpdmF0ZSog
bV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgorI2luY2x1
ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJEYXRhLmgiCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJIVFRQQm9keS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkhU
VFBCb2R5LmgJKHJldmlzaW9uIDExMjQ2MikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL3BsYXRmb3JtL1dlYkhUVFBCb2R5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEyICsxLDI2
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJIVFRQQm9keV9oCi0jZGVm
aW5lIFdlYkhUVFBCb2R5X2gKLQotI2luY2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJO
b25Db3B5YWJsZS5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgotI2luY2x1ZGUgIldlYlVSTC5o
IgotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi1uYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNz
IEZvcm1EYXRhOyB9Ci1uYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IFBhc3NSZWZQdHI7IH0KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2Vi
SFRUUEJvZHlQcml2YXRlOwotCi1jbGFzcyBXZWJIVFRQQm9keSB7Ci1wdWJsaWM6Ci0gICAgc3Ry
dWN0IEVsZW1lbnQgewotICAgICAgICBlbnVtIFR5cGUgeyBUeXBlRGF0YSwgVHlwZUZpbGUsIFR5
cGVCbG9iIH0gdHlwZTsKLSAgICAgICAgV2ViRGF0YSBkYXRhOwotICAgICAgICBXZWJTdHJpbmcg
ZmlsZVBhdGg7Ci0gICAgICAgIGxvbmcgbG9uZyBmaWxlU3RhcnQ7Ci0gICAgICAgIGxvbmcgbG9u
ZyBmaWxlTGVuZ3RoOyAvLyAtMSBtZWFucyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLgotICAgICAg
ICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZTsKLSAgICAgICAgV2ViVVJMIGJsb2JVUkw7Ci0gICAg
fTsKLQotICAgIH5XZWJIVFRQQm9keSgpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViSFRUUEJvZHko
KSA6IG1fcHJpdmF0ZSgwKSB7IH0KLSAgICBXZWJIVFRQQm9keShjb25zdCBXZWJIVFRQQm9keSYg
YikgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24oYik7IH0KLSAgICBXZWJIVFRQQm9keSYgb3BlcmF0
b3I9KGNvbnN0IFdlYkhUVFBCb2R5JiBiKQotICAgIHsKLSAgICAgICAgYXNzaWduKGIpOwotICAg
ICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRp
YWxpemUoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYkhUVFBCb2R5Jik7Ci0KLSAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJl
ciBvZiBlbGVtZW50cyBjb21wcmlzaW5nIHRoZSBodHRwIGJvZHkuCi0gICAgV0VCS0lUX0VYUE9S
VCBzaXplX3QgZWxlbWVudENvdW50KCkgY29uc3Q7Ci0KLSAgICAvLyBTZXRzIHRoZSB2YWx1ZXMg
b2YgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4LiBSZXR1cm5zIGZhbHNlIGlmCi0gICAg
Ly8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZWxlbWVu
dEF0KHNpemVfdCBpbmRleCwgRWxlbWVudCYpIGNvbnN0OwotCi0gICAgLy8gQXBwZW5kIHRvIHRo
ZSBsaXN0IG9mIGVsZW1lbnRzLgotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhcHBlbmREYXRhKGNv
bnN0IFdlYkRhdGEmKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kRmlsZShjb25zdCBX
ZWJTdHJpbmcmKTsKLSAgICAvLyBQYXNzaW5nIC0xIHRvIGZpbGVMZW5ndGggbWVhbnMgdG8gdGhl
IGVuZCBvZiB0aGUgZmlsZS4KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYXBwZW5kRmlsZVJhbmdl
KGNvbnN0IFdlYlN0cmluZyYsIGxvbmcgbG9uZyBmaWxlU3RhcnQsIGxvbmcgbG9uZyBmaWxlTGVu
Z3RoLCBkb3VibGUgbW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFw
cGVuZEJsb2IoY29uc3QgV2ViVVJMJik7Ci0KLSAgICAvLyBJZGVudGlmaWVzIGEgcGFydGljdWxh
ciBmb3JtIHN1Ym1pc3Npb24gaW5zdGFuY2UuIEEgdmFsdWUgb2YgMCBpcwotICAgIC8vIHVzZWQg
dG8gaW5kaWNhdGUgYW4gdW5zcGVjaWZpZWQgaWRlbnRpZmllci4KLSAgICBXRUJLSVRfRVhQT1JU
IGxvbmcgbG9uZyBpZGVudGlmaWVyKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNl
dElkZW50aWZpZXIobG9uZyBsb25nKTsKLQotICAgIFdFQktJVF9FWFBPUlQgYm9vbCBjb250YWlu
c1Bhc3N3b3JkRGF0YSgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRDb250YWlu
c1Bhc3N3b3JkRGF0YShib29sKTsKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdl
YkhUVFBCb2R5KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGb3JtRGF0YT4mKTsKLSAg
ICBXZWJIVFRQQm9keSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpG
b3JtRGF0YT4mKTsKLSAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9ybURh
dGE+KCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFzc2lnbihXZWJIVFRQ
Qm9keVByaXZhdGUqKTsKLSAgICB2b2lkIGVuc3VyZU11dGFibGUoKTsKLSAgICBXZWJIVFRQQm9k
eVByaXZhdGUqIG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViSFRU
UEJvZHkuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dl
YkhUVFBIZWFkZXJWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvcGxhdGZvcm0vV2ViSFRUUEhlYWRlclZpc2l0b3IuaAkocmV2aXNpb24gMTEyNDYy
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViSFRUUEhlYWRl
clZpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0OCArMSwyNiBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgV2ViSFRUUEhlYWRlclZpc2l0b3JfaAotI2RlZmluZSBXZWJI
VFRQSGVhZGVyVmlzaXRvcl9oCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJTdHJp
bmc7Ci0KLWNsYXNzIFdlYkhUVFBIZWFkZXJWaXNpdG9yIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRIZWFkZXIoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcm
IHZhbHVlKSA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICB+V2ViSFRUUEhlYWRlclZpc2l0b3IoKSB7
IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKKyNpbmNsdWRlICIuLi8u
Li8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViSFRUUEhlYWRlclZpc2l0b3IuaCIK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYkhUVFBMb2Fk
SW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRm
b3JtL1dlYkhUVFBMb2FkSW5mby5oCShyZXZpc2lvbiAxMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJIVFRQTG9hZEluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMSw4OCArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2Vi
SFRUUExvYWRJbmZvX2gKLSNkZWZpbmUgV2ViSFRUUExvYWRJbmZvX2gKLQotI2luY2x1ZGUgIldl
YkNvbW1vbi5oIgotI2luY2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotc3RydWN0IFJlc291cmNlTG9hZEluZm87Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Y2xhc3MgV2ViU3RyaW5nOwotCi1jbGFzcyBXZWJIVFRQTG9hZEluZm8gewotcHVibGljOgotICAg
IFdlYkhUVFBMb2FkSW5mbygpIHsgaW5pdGlhbGl6ZSgpOyB9Ci0gICAgfldlYkhUVFBMb2FkSW5m
bygpIHsgcmVzZXQoKTsgfQotICAgIFdlYkhUVFBMb2FkSW5mbyhjb25zdCBXZWJIVFRQTG9hZElu
Zm8mIHIpIHsgYXNzaWduKHIpOyB9Ci0gICAgV2ViSFRUUExvYWRJbmZvJiBvcGVyYXRvciA9KGNv
bnN0IFdlYkhUVFBMb2FkSW5mbyYgcikKLSAgICB7IAotICAgICAgICBhc3NpZ24ocik7Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlh
bGl6ZSgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViSFRUUExvYWRJbmZvJiByKTsKLQotICAgIFdFQktJVF9F
WFBPUlQgaW50IGh0dHBTdGF0dXNDb2RlKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldEhUVFBTdGF0dXNDb2RlKGludCk7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBo
dHRwU3RhdHVzVGV4dCgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRIVFRQU3Rh
dHVzVGV4dChjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9FWFBPUlQgbG9uZyBsb25n
IGVuY29kZWREYXRhTGVuZ3RoKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEVu
Y29kZWREYXRhTGVuZ3RoKGxvbmcgbG9uZyk7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRk
UmVxdWVzdEhlYWRlcihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFs
dWUpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGRSZXNwb25zZUhlYWRlcihjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpOwotCi0gICAgV0VCS0lUX0VYUE9S
VCBXZWJTdHJpbmcgcmVxdWVzdEhlYWRlcnNUZXh0KCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHNldFJlcXVlc3RIZWFkZXJzVGV4dChjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIFdF
QktJVF9FWFBPUlQgV2ViU3RyaW5nIHJlc3BvbnNlSGVhZGVyc1RleHQoKSBjb25zdDsKLSAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0UmVzcG9uc2VIZWFkZXJzVGV4dChjb25zdCBXZWJTdHJpbmcm
KTsKLQotI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgotICAgIFdlYkhUVFBMb2FkSW5mbyhXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6UmVzb3VyY2VMb2FkSW5mbz4pOwotICAgIG9wZXJhdG9yIFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRJbmZvPigpIGNvbnN0OwotI2VuZGlm
Ci0KLXByaXZhdGU6Ci0gICAgV2ViUHJpdmF0ZVB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRJbmZv
PiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCisjaW5j
bHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkhUVFBMb2FkSW5m
by5oIgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUHJp
dmF0ZU93blB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L3BsYXRmb3JtL1dlYlByaXZhdGVPd25QdHIuaAkocmV2aXNpb24gMTEyNDYyKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViUHJpdmF0ZU93blB0ci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIzLDUzICsyMyw0IEBACiAgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViUHJp
dmF0ZU93blB0cl9oCi0jZGVmaW5lIFdlYlByaXZhdGVPd25QdHJfaAotCi0jaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBUaGlzIGNsYXNzIGlzIGFuIGlt
cGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgV2ViS2l0IEFQSS4gIEl0IGV4aXN0cwotLy8gdG8g
aGVscCBzaW1wbGlmeSB0aGUgaW1wbGVtZW50YXRpb24gb2YgV2ViS2l0IGludGVyZmFjZXMgdGhh
dCBtZXJlbHkKLS8vIHdyYXAgYSBwb2ludGVyIHRvIGEgV2ViQ29yZSBjbGFzcy4gSXQncyBzaW1p
bGFyIHRvIFdlYlByaXZhdGVQdHIsIGJ1dCBpdAotLy8gd3JhcHMgYSBuYWtlZCBwb2ludGVyIHJh
dGhlciB0aGFuIGEgcmVmZXJlbmNlIGNvdW50ZWQuCi0vLyBOb3RlOiB5b3UgbXVzdCBjYWxsIHJl
c2V0KDApIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBzaWRlIGluIG9yZGVyIHRvIGRlbGV0ZQotLy8g
dGhlIFdlYkNvcmUgcG9pbnRlci4KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgV2ViUHJp
dmF0ZU93blB0ciB7Ci1wdWJsaWM6Ci0gICAgV2ViUHJpdmF0ZU93blB0cigpIDogbV9wdHIoMCkg
e30KLSAgICB+V2ViUHJpdmF0ZU93blB0cigpIHsgV0VCS0lUX0FTU0VSVCghbV9wdHIpOyB9Ci0K
LSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBleHBsaWNpdCBXZWJQcml2YXRlT3duUHRy
KFQqIHB0cikKLSAgICAgICAgOiBtX3B0cihwdHIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQg
cmVzZXQoVCogcHRyKQotICAgIHsKLSAgICAgICAgZGVsZXRlIG1fcHRyOwotICAgICAgICBtX3B0
ciA9IHB0cjsKLSAgICB9Ci0KLSAgICBUKiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQot
Ci0gICAgVCogb3BlcmF0b3ItPigpIGNvbnN0Ci0gICAgewotICAgICAgICBXRUJLSVRfQVNTRVJU
KG1fcHRyKTsKLSAgICAgICAgcmV0dXJuIG1fcHRyOwotICAgIH0KLSNlbmRpZiAvLyBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KLQotcHJpdmF0ZToKLSAgICBUKiBtX3B0cjsKLQotICAgIFdlYlByaXZh
dGVPd25QdHIoY29uc3QgV2ViUHJpdmF0ZU93blB0ciYpOwotICAgIHZvaWQgb3BlcmF0b3I9KGNv
bnN0IFdlYlByaXZhdGVPd25QdHImKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2Vi
UHJpdmF0ZU93blB0ci5oIgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxh
dGZvcm0vV2ViVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvcGxhdGZvcm0vV2ViVVJMLmgJKHJldmlzaW9uIDExMjQ2MikKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlVSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE1
OCArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViVVJMX2gKLSNk
ZWZpbmUgV2ViVVJMX2gKLQotI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKLSNpbmNsdWRlIDxnb29n
bGV1cmwvc3JjL3VybF9wYXJzZS5oPgotCi0jaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCi1uYW1l
c3BhY2UgV2ViQ29yZSB7IGNsYXNzIEtVUkw7IH0KLSNlbHNlCi0jaW5jbHVkZSA8Z29vZ2xldXJs
L3NyYy9ndXJsLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlVS
TCB7Ci1wdWJsaWM6Ci0gICAgfldlYlVSTCgpCi0gICAgewotICAgIH0KLQotICAgIFdlYlVSTCgp
IDogbV9pc1ZhbGlkKGZhbHNlKQotICAgIHsKLSAgICB9Ci0KLSAgICBXZWJVUkwoY29uc3QgV2Vi
Q1N0cmluZyYgc3BlYywgY29uc3QgdXJsX3BhcnNlOjpQYXJzZWQmIHBhcnNlZCwgYm9vbCBpc1Zh
bGlkKQotICAgICAgICA6IG1fc3BlYyhzcGVjKQotICAgICAgICAsIG1fcGFyc2VkKHBhcnNlZCkK
LSAgICAgICAgLCBtX2lzVmFsaWQoaXNWYWxpZCkKLSAgICB7Ci0gICAgfQotCi0gICAgV2ViVVJM
KGNvbnN0IFdlYlVSTCYgcykKLSAgICAgICAgOiBtX3NwZWMocy5tX3NwZWMpCi0gICAgICAgICwg
bV9wYXJzZWQocy5tX3BhcnNlZCkKLSAgICAgICAgLCBtX2lzVmFsaWQocy5tX2lzVmFsaWQpCi0g
ICAgewotICAgIH0KLQotICAgIFdlYlVSTCYgb3BlcmF0b3I9KGNvbnN0IFdlYlVSTCYgcykKLSAg
ICB7Ci0gICAgICAgIG1fc3BlYyA9IHMubV9zcGVjOwotICAgICAgICBtX3BhcnNlZCA9IHMubV9w
YXJzZWQ7Ci0gICAgICAgIG1faXNWYWxpZCA9IHMubV9pc1ZhbGlkOwotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotCi0gICAgdm9pZCBhc3NpZ24oY29uc3QgV2ViQ1N0cmluZyYgc3BlYywg
Y29uc3QgdXJsX3BhcnNlOjpQYXJzZWQmIHBhcnNlZCwgYm9vbCBpc1ZhbGlkKQotICAgIHsKLSAg
ICAgICAgbV9zcGVjID0gc3BlYzsKLSAgICAgICAgbV9wYXJzZWQgPSBwYXJzZWQ7Ci0gICAgICAg
IG1faXNWYWxpZCA9IGlzVmFsaWQ7Ci0gICAgfQotCi0gICAgY29uc3QgV2ViQ1N0cmluZyYgc3Bl
YygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zcGVjOwotICAgIH0KLQotICAgIGNv
bnN0IHVybF9wYXJzZTo6UGFyc2VkJiBwYXJzZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fcGFyc2VkOwotICAgIH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9pc1ZhbGlkOwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zcGVjLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAg
ICBib29sIGlzTnVsbCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zcGVjLmlzRW1w
dHkoKTsKLSAgICB9Ci0KLSNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJVUkwoY29u
c3QgV2ViQ29yZTo6S1VSTCYpOwotICAgIFdlYlVSTCYgb3BlcmF0b3I9KGNvbnN0IFdlYkNvcmU6
OktVUkwmKTsKLSAgICBvcGVyYXRvciBXZWJDb3JlOjpLVVJMKCkgY29uc3Q7Ci0jZWxzZQotICAg
IFdlYlVSTChjb25zdCBHVVJMJiBnKQotICAgICAgICA6IG1fc3BlYyhnLnBvc3NpYmx5X2ludmFs
aWRfc3BlYygpKQotICAgICAgICAsIG1fcGFyc2VkKGcucGFyc2VkX2Zvcl9wb3NzaWJseV9pbnZh
bGlkX3NwZWMoKSkKLSAgICAgICAgLCBtX2lzVmFsaWQoZy5pc192YWxpZCgpKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBXZWJVUkwmIG9wZXJhdG9yPShjb25zdCBHVVJMJiBnKQotICAgIHsKLSAgICAg
ICAgbV9zcGVjID0gZy5wb3NzaWJseV9pbnZhbGlkX3NwZWMoKTsKLSAgICAgICAgbV9wYXJzZWQg
PSBnLnBhcnNlZF9mb3JfcG9zc2libHlfaW52YWxpZF9zcGVjKCk7Ci0gICAgICAgIG1faXNWYWxp
ZCA9IGcuaXNfdmFsaWQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIG9w
ZXJhdG9yIEdVUkwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTnVsbCgpID8gR1VS
TCgpIDogR1VSTChtX3NwZWMuZGF0YSgpLCBtX3NwZWMubGVuZ3RoKCksIG1fcGFyc2VkLCBtX2lz
VmFsaWQpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFdlYkNTdHJpbmcgbV9zcGVj
OyAgLy8gVVRGLTggZW5jb2RlZAotICAgIHVybF9wYXJzZTo6UGFyc2VkIG1fcGFyc2VkOwotICAg
IGJvb2wgbV9pc1ZhbGlkOwotfTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFdlYlVS
TCYgYSwgY29uc3QgV2ViVVJMJiBiKQotewotICAgIHJldHVybiBhLnNwZWMoKSA8IGIuc3BlYygp
OwotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlVSTCYgYSwgY29uc3QgV2Vi
VVJMJiBiKQotewotICAgIHJldHVybiAhYS5zcGVjKCkuY29tcGFyZShiLnNwZWMoKSk7Ci19Ci0K
LWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgV2ViVVJMJiBhLCBjb25zdCBXZWJVUkwmIGIp
Ci17Ci0gICAgcmV0dXJuICEoYSA9PSBiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJVUkwuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dl
YlVSTEVycm9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
cGxhdGZvcm0vV2ViVVJMRXJyb3IuaAkocmV2aXNpb24gMTEyNDYyKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViVVJMRXJyb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3MyArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAg
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViVVJM
RXJyb3JfaAotI2RlZmluZSBXZWJVUkxFcnJvcl9oCi0KLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
LSNpbmNsdWRlICJXZWJVUkwuaCIKLQotI2lmIGRlZmluZWQoV0VCS0lUX0lNUExFTUVOVEFUSU9O
KQotbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBSZXNvdXJjZUVycm9yOyB9Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0cnVjdCBXZWJVUkxFcnJvciB7Ci0gICAgLy8gQSBuYW1l
c3BhY2UgZm9yICJyZWFzb24iIHRvIHN1cHBvcnQgdmFyaW91cyBsYXllcnMgZ2VuZXJhdGluZwot
ICAgIC8vIHJlc291cmNlIGVycm9ycy4gV2ViS2l0IGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIHZh
bHVlIG9mIHRoaXMKLSAgICAvLyBzdHJpbmcgYXMgaXQgd2lsbCBqdXN0IGJlIHBhc3NlZCB2aWEg
Y2FsbGJhY2tzIHRvIHRoZSBjb25zdW1lci4KLSAgICBXZWJTdHJpbmcgZG9tYWluOwotCi0gICAg
Ly8gQSBudW1lcmljIGVycm9yIGNvZGUgZGV0YWlsaW5nIHRoZSByZWFzb24gZm9yIHRoaXMgZXJy
b3IuIEEgdmFsdWUKLSAgICAvLyBvZiAwIG1lYW5zIG5vIGVycm9yLiBXZWJLaXQgZG9lcyBub3Qg
aW50ZXJwcmV0IHRoZSBtZWFuaW5nIG9mIG90aGVyCi0gICAgLy8gdmFsdWVzIGFuZCBub3JtYWxs
eSBqdXN0IGZvcndhcmRzIHRoaXMgZXJyb3IgaW5mb3JtYXRpb24gYmFjayB0byB0aGUKLSAgICAv
LyBlbWJlZGRlciAoc2VlIGZvciBleGFtcGxlIFdlYkZyYW1lQ2xpZW50KS4KLSAgICBpbnQgcmVh
c29uOwotCi0gICAgLy8gQSBmbGFnIHNob3dpbmcgd2hldGhlciB0aGlzIGVycm9yIHNob3VsZCBi
ZSB0cmVhdGVkIGFzIGEgY2FuY2VsbGF0aW9uLAotICAgIC8vIGUuZy4gd2UgZG8gbm90IHNob3cg
Y29uc29sZSBlcnJvcnMgZm9yIGNhbmNlbGxhdGlvbnMuCi0gICAgYm9vbCBpc0NhbmNlbGxhdGlv
bjsKLQotICAgIC8vIFRoZSB1cmwgdGhhdCBmYWlsZWQgdG8gbG9hZC4KLSAgICBXZWJVUkwgdW5y
ZWFjaGFibGVVUkw7Ci0KLSAgICBXZWJVUkxFcnJvcigpIDogcmVhc29uKDApLCBpc0NhbmNlbGxh
dGlvbihmYWxzZSkgeyB9Ci0KLSNpZiBkZWZpbmVkKFdFQktJVF9JTVBMRU1FTlRBVElPTikKLSAg
ICBXZWJVUkxFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAgV2ViVVJM
RXJyb3ImIG9wZXJhdG9yPShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAgb3Bl
cmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VFcnJvcigpIGNvbnN0OwotI2VuZGlmCi19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJVUkxMb2FkVGltaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViVVJMTG9hZFRpbWluZy5o
CShyZXZpc2lvbiAxMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJVUkxMb2FkVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICsxLDI2IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKICAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJVUkxMb2FkVGltaW5nX2gKLSNk
ZWZpbmUgV2ViVVJMTG9hZFRpbWluZ19oCi0KLSNpbmNsdWRlICJXZWJDb21tb24uaCIKLSNpbmNs
dWRlICJXZWJQcml2YXRlUHRyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVzb3Vy
Y2VMb2FkVGltaW5nOyB9Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViU3RyaW5nOwot
Ci1jbGFzcyBXZWJVUkxMb2FkVGltaW5nIHsKLXB1YmxpYzoKLSAgICB+V2ViVVJMTG9hZFRpbWlu
ZygpIHsgcmVzZXQoKTsgfQotCi0gICAgV2ViVVJMTG9hZFRpbWluZygpIHsgfQotICAgIFdlYlVS
TExvYWRUaW1pbmcoY29uc3QgV2ViVVJMTG9hZFRpbWluZyYgZCkgeyBhc3NpZ24oZCk7IH0KLSAg
ICBXZWJVUkxMb2FkVGltaW5nJiBvcGVyYXRvcj0oY29uc3QgV2ViVVJMTG9hZFRpbWluZyYgZCkK
LSAgICB7Ci0gICAgICAgIGFzc2lnbihkKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0K
LQotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7Ci0gICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHJlc2V0KCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFzc2lnbihjb25zdCBXZWJV
UkxMb2FkVGltaW5nJik7Ci0KLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJp
dmF0ZS5pc051bGwoKTsgfQotCi0gICAgV0VCS0lUX0VYUE9SVCBkb3VibGUgcmVxdWVzdFRpbWUo
KSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UmVxdWVzdFRpbWUoZG91YmxlKTsK
LQotICAgIFdFQktJVF9FWFBPUlQgaW50IHByb3h5U3RhcnQoKSBjb25zdDsKLSAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0UHJveHlTdGFydChpbnQpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBpbnQg
cHJveHlFbmQoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UHJveHlFbmQoaW50
KTsKLQotICAgIFdFQktJVF9FWFBPUlQgaW50IGRuc1N0YXJ0KCkgY29uc3Q7Ci0gICAgV0VCS0lU
X0VYUE9SVCB2b2lkIHNldEROU1N0YXJ0KGludCk7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIGludCBk
bnNFbmQoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0RE5TRW5kKGludCk7Ci0K
LSAgICBXRUJLSVRfRVhQT1JUIGludCBjb25uZWN0U3RhcnQoKSBjb25zdDsKLSAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0Q29ubmVjdFN0YXJ0KGludCk7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIGlu
dCBjb25uZWN0RW5kKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldENvbm5lY3RF
bmQoaW50KTsKLQotICAgIFdFQktJVF9FWFBPUlQgaW50IHNlbmRTdGFydCgpIGNvbnN0OwotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBzZXRTZW5kU3RhcnQoaW50KTsKLQotICAgIFdFQktJVF9FWFBP
UlQgaW50IHNlbmRFbmQoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U2VuZEVu
ZChpbnQpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBpbnQgcmVjZWl2ZUhlYWRlcnNFbmQoKSBjb25z
dDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UmVjZWl2ZUhlYWRlcnNFbmQoaW50KTsKLQot
ICAgIFdFQktJVF9FWFBPUlQgaW50IHNzbFN0YXJ0KCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHNldFNTTFN0YXJ0KGludCk7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIGludCBzc2xFbmQo
KSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U1NMRW5kKGludCk7Ci0KLSNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KLSAgICBXZWJVUkxMb2FkVGltaW5nKGNvbnN0IFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxvYWRUaW1pbmc+Jik7Ci0gICAgV2ViVVJMTG9hZFRp
bWluZyYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUxv
YWRUaW1pbmc+Jik7Ci0gICAgb3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlJlc291
cmNlTG9hZFRpbWluZz4oKSBjb25zdDsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFdlYlByaXZh
dGVQdHI8V2ViQ29yZTo6UmVzb3VyY2VMb2FkVGltaW5nPiBtX3ByaXZhdGU7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlVSTExvYWRUaW1pbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlVSTExvYWRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlVSTExvYWRlci5oCShy
ZXZpc2lvbiAxMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJVUkxMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3MSArMSwyNiBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViVVJMTG9hZGVyX2gKLSNkZWZpbmUg
V2ViVVJMTG9hZGVyX2gKLQotI2luY2x1ZGUgIldlYkNvbW1vbi5oIgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgV2ViRGF0YTsKLWNsYXNzIFdlYlVSTExvYWRlckNsaWVudDsKLWNsYXNz
IFdlYlVSTFJlcXVlc3Q7Ci1jbGFzcyBXZWJVUkxSZXNwb25zZTsKLXN0cnVjdCBXZWJVUkxFcnJv
cjsKLQotY2xhc3MgV2ViVVJMTG9hZGVyIHsKLXB1YmxpYzoKLSAgICAvLyBUaGUgV2ViVVJMTG9h
ZGVyIG1heSBiZSBkZWxldGVkIGluIGEgY2FsbCB0byBpdHMgY2xpZW50LgotICAgIHZpcnR1YWwg
fldlYlVSTExvYWRlcigpIHt9Ci0KLSAgICAvLyBMb2FkIHRoZSByZXF1ZXN0IHN5bmNocm9ub3Vz
bHksIHJldHVybmluZyByZXN1bHRzIGRpcmVjdGx5IHRvIHRoZQotICAgIC8vIGNhbGxlciB1cG9u
IGNvbXBsZXRpb24uICBUaGVyZSBpcyBubyBtZWNoYW5pc20gdG8gaW50ZXJydXB0IGEKLSAgICAv
LyBzeW5jaHJvbm91cyBsb2FkISEKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFN5bmNocm9ub3VzbHko
Y29uc3QgV2ViVVJMUmVxdWVzdCYsCi0gICAgICAgIFdlYlVSTFJlc3BvbnNlJiwgV2ViVVJMRXJy
b3ImLCBXZWJEYXRhJiBkYXRhKSA9IDA7Ci0KLSAgICAvLyBMb2FkIHRoZSByZXF1ZXN0IGFzeW5j
aHJvbm91c2x5LCBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgdG8gdGhlIGdpdmVuCi0gICAgLy8gY2xp
ZW50LiAgVGhlIGNsaWVudCB3aWxsIHJlY2VpdmUgbm8gZnVydGhlciBub3RpZmljYXRpb25zIGlm
IHRoZQotICAgIC8vIGxvYWRlciBpcyBkaXNwb3NlZCBiZWZvcmUgaXQgY29tcGxldGVzIGl0cyB3
b3JrLgotICAgIHZpcnR1YWwgdm9pZCBsb2FkQXN5bmNocm9ub3VzbHkoY29uc3QgV2ViVVJMUmVx
dWVzdCYsCi0gICAgICAgIFdlYlVSTExvYWRlckNsaWVudCopID0gMDsKLQotICAgIC8vIENhbmNl
bHMgYW4gYXN5bmNocm9ub3VzIGxvYWQuICBUaGlzIHdpbGwgYXBwZWFyIGFzIGEgbG9hZCBlcnJv
ciB0bwotICAgIC8vIHRoZSBjbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIGNhbmNlbCgpID0gMDsK
LQotICAgIC8vIFN1c3BlbmRzL3Jlc3VtZXMgYW4gYXN5bmNocm9ub3VzIGxvYWQuCi0gICAgdmly
dHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCkgPSAwOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJVUkxMb2FkZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL3BsYXRmb3JtL1dlYlVSTExvYWRlckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlVSTExvYWRlckNsaWVudC5oCShy
ZXZpc2lvbiAxMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9y
bS9XZWJVUkxMb2FkZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OCArMSwyNiBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViVVJMTG9hZGVyQ2xpZW50X2gKLSNk
ZWZpbmUgV2ViVVJMTG9hZGVyQ2xpZW50X2gKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNz
IFdlYlVSTExvYWRlcjsKLWNsYXNzIFdlYlVSTFJlcXVlc3Q7Ci1jbGFzcyBXZWJVUkxSZXNwb25z
ZTsKLXN0cnVjdCBXZWJVUkxFcnJvcjsKLQotY2xhc3MgV2ViVVJMTG9hZGVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICAvLyBDYWxsZWQgd2hlbiBmb2xsb3dpbmcgYSByZWRpcmVjdC4gfG5ld1JlcXVl
c3R8IGNvbnRhaW5zIHRoZSByZXF1ZXN0Ci0gICAgLy8gZ2VuZXJhdGVkIGJ5IHRoZSByZWRpcmVj
dC4gVGhlIGNsaWVudCBtYXkgbW9kaWZ5IHxuZXdSZXF1ZXN0fC4KLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0KAotICAgICAgICBXZWJVUkxMb2FkZXIqLCBXZWJVUkxSZXF1ZXN0JiBu
ZXdSZXF1ZXN0LCBjb25zdCBXZWJVUkxSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkgeyB9Ci0K
LSAgICAvLyBDYWxsZWQgdG8gcmVwb3J0IHVwbG9hZCBwcm9ncmVzcy4gVGhlIGJ5dGVzIHJlcG9y
dGVkIGNvcnJlc3BvbmQgdG8KLSAgICAvLyB0aGUgSFRUUCBtZXNzYWdlIGJvZHkuCi0gICAgdmly
dHVhbCB2b2lkIGRpZFNlbmREYXRhKAotICAgICAgICBXZWJVUkxMb2FkZXIqLCB1bnNpZ25lZCBs
b25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxCeXRlc1RvQmVTZW50
KSB7IH0KLQotICAgIC8vIENhbGxlZCB3aGVuIHJlc3BvbnNlIGhlYWRlcnMgYXJlIHJlY2VpdmVk
LgotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViVVJMTG9hZGVyKiwgY29u
c3QgV2ViVVJMUmVzcG9uc2UmKSB7IH0KLQotICAgIC8vIENhbGxlZCB3aGVuIGEgY2h1bmsgb2Yg
cmVzcG9uc2UgZGF0YSBpcyBkb3dubG9hZGVkLiBUaGlzIGlzIG9ubHkgY2FsbGVkCi0gICAgLy8g
aWYgV2ViVVJMUmVxdWVzdCdzIGRvd25sb2FkVG9GaWxlIGZsYWcgd2FzIHNldCB0byB0cnVlLgot
ICAgIHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoV2ViVVJMTG9hZGVyKiwgaW50IGRhdGFM
ZW5ndGgpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYSBjaHVuayBvZiByZXNwb25zZSBkYXRh
IGlzIHJlY2VpdmVkLgotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJVUkxMb2Fk
ZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVu
Z3RoKSB7IH0KLQotICAgIC8vIENhbGxlZCB3aGVuIGEgY2h1bmsgb2YgcmVuZGVyZXItZ2VuZXJh
dGVkIG1ldGFkYXRhIGlzIHJlY2VpdmVkIGZyb20gdGhlIGNhY2hlLgotICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlQ2FjaGVkTWV0YWRhdGEoV2ViVVJMTG9hZGVyKiwgY29uc3QgY2hhciogZGF0
YSwgaW50IGRhdGFMZW5ndGgpIHsgfQotCi0gICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGxvYWQgY29t
cGxldGVzIHN1Y2Nlc3NmdWxseS4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhX
ZWJVUkxMb2FkZXIqLCBkb3VibGUgZmluaXNoVGltZSkgeyB9Ci0KLSAgICAvLyBDYWxsZWQgd2hl
biB0aGUgbG9hZCBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvci4KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
RmFpbChXZWJVUkxMb2FkZXIqLCBjb25zdCBXZWJVUkxFcnJvciYpIHsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB+V2ViVVJMTG9hZGVyQ2xpZW50KCkgeyB9Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmCisjaW5jbHVkZSAiLi4vLi4vLi4vLi4vUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYlVSTExvYWRlckNsaWVudC5oIgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViVVJMUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlVSTFJlcXVlc3QuaAkocmV2
aXNpb24gMTEyNDYyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0v
V2ViVVJMUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5OSArMSwyNiBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViVVJMUmVxdWVzdF9oCi0jZGVmaW5lIFdlYlVS
TFJlcXVlc3RfaAotCi0jaW5jbHVkZSAiV2ViQ29tbW9uLmgiCi0jaW5jbHVkZSAiV2ViSFRUUEJv
ZHkuaCIKLQotI2lmIGRlZmluZWQoV0VCS0lUX0lNUExFTUVOVEFUSU9OKQotbmFtZXNwYWNlIFdl
YkNvcmUgeyBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7IH0KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgV2ViQ1N0cmluZzsKLWNsYXNzIFdlYkhUVFBCb2R5OwotY2xhc3MgV2Vi
SFRUUEhlYWRlclZpc2l0b3I7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7Ci1jbGFz
cyBXZWJVUkxSZXF1ZXN0UHJpdmF0ZTsKLQotY2xhc3MgV2ViVVJMUmVxdWVzdCB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBDYWNoZVBvbGljeSB7Ci0gICAgICAgIFVzZVByb3RvY29sQ2FjaGVQb2xpY3ks
IC8vIG5vcm1hbCBsb2FkCi0gICAgICAgIFJlbG9hZElnbm9yaW5nQ2FjaGVEYXRhLCAvLyByZWxv
YWQKLSAgICAgICAgUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQsIC8vIGJhY2svZm9yd2FyZCBvciBl
bmNvZGluZyBjaGFuZ2UgLSBhbGxvdyBzdGFsZSBkYXRhCi0gICAgICAgIFJldHVybkNhY2hlRGF0
YURvbnRMb2FkLCAvLyByZXN1bHRzIG9mIGEgcG9zdCAtIGFsbG93IHN0YWxlIGRhdGEgYW5kIG9u
bHkgdXNlIGNhY2hlCi0gICAgfTsKLQotICAgIGVudW0gVGFyZ2V0VHlwZSB7Ci0gICAgICAgIFRh
cmdldElzTWFpbkZyYW1lID0gMCwKLSAgICAgICAgVGFyZ2V0SXNTdWJmcmFtZSA9IDEsCi0gICAg
ICAgIFRhcmdldElzU3VicmVzb3VyY2UgPSAyLAotICAgICAgICBUYXJnZXRJc1N0eWxlU2hlZXQg
PSAzLAotICAgICAgICBUYXJnZXRJc1NjcmlwdCA9IDQsCi0gICAgICAgIFRhcmdldElzRm9udFJl
c291cmNlID0gNSwKLSAgICAgICAgVGFyZ2V0SXNJbWFnZSA9IDYsCi0gICAgICAgIFRhcmdldElz
T2JqZWN0ID0gNywKLSAgICAgICAgVGFyZ2V0SXNNZWRpYSA9IDgsCi0gICAgICAgIFRhcmdldElz
V29ya2VyID0gOSwKLSAgICAgICAgVGFyZ2V0SXNTaGFyZWRXb3JrZXIgPSAxMCwKLSAgICAgICAg
VGFyZ2V0SXNQcmVmZXRjaCA9IDExLAotICAgICAgICBUYXJnZXRJc1ByZXJlbmRlciA9IDEyLAot
ICAgICAgICBUYXJnZXRJc0Zhdmljb24gPSAxMywKLSAgICAgICAgVGFyZ2V0SXNYSFIgPSAxNCwK
LSAgICAgICAgVGFyZ2V0SXNUZXh0VHJhY2sgPSAxNSwKLSAgICAgICAgVGFyZ2V0SXNVbnNwZWNp
ZmllZCA9IDE2LAotICAgIH07Ci0KLSAgICBjbGFzcyBFeHRyYURhdGEgewotICAgIHB1YmxpYzoK
LSAgICAgICAgdmlydHVhbCB+RXh0cmFEYXRhKCkgeyB9Ci0gICAgfTsKLQotICAgIH5XZWJVUkxS
ZXF1ZXN0KCkgeyByZXNldCgpOyB9Ci0KLSAgICBXZWJVUkxSZXF1ZXN0KCkgOiBtX3ByaXZhdGUo
MCkgeyB9Ci0gICAgV2ViVVJMUmVxdWVzdChjb25zdCBXZWJVUkxSZXF1ZXN0JiByKSA6IG1fcHJp
dmF0ZSgwKSB7IGFzc2lnbihyKTsgfQotICAgIFdlYlVSTFJlcXVlc3QmIG9wZXJhdG9yPShjb25z
dCBXZWJVUkxSZXF1ZXN0JiByKQotICAgIHsKLSAgICAgICAgYXNzaWduKHIpOwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgV2ViVVJMUmVxdWVzdChjb25zdCBX
ZWJVUkwmIHVybCkgOiBtX3ByaXZhdGUoMCkKLSAgICB7Ci0gICAgICAgIGluaXRpYWxpemUoKTsK
LSAgICAgICAgc2V0VVJMKHVybCk7Ci0gICAgfQotCi0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGlu
aXRpYWxpemUoKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgcmVzZXQoKTsKLSAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgYXNzaWduKGNvbnN0IFdlYlVSTFJlcXVlc3QmKTsKLQotICAgIFdFQktJVF9F
WFBPUlQgYm9vbCBpc051bGwoKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHVy
bCgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRVUkwoY29uc3QgV2ViVVJMJik7
Ci0KLSAgICAvLyBVc2VkIHRvIGltcGxlbWVudCB0aGlyZC1wYXJ0eSBjb29raWUgYmxvY2tpbmcu
Ci0gICAgV0VCS0lUX0VYUE9SVCBXZWJVUkwgZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSBjb25zdDsK
LSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoY29uc3QgV2Vi
VVJMJik7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgYWxsb3dDb29raWVzKCkgY29uc3Q7Ci0g
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFsbG93Q29va2llcyhib29sKTsKLQotICAgIC8vIENv
bnRyb2xzIHdoZXRoZXIgdXNlciBuYW1lLCBwYXNzd29yZCwgYW5kIGNvb2tpZXMgbWF5IGJlIHNl
bnQgd2l0aCB0aGUKLSAgICAvLyByZXF1ZXN0LiAoSWYgZmFsc2UsIHRoaXMgb3ZlcnJpZGVzIGFs
bG93Q29va2llcy4pCi0gICAgV0VCS0lUX0VYUE9SVCBib29sIGFsbG93U3RvcmVkQ3JlZGVudGlh
bHMoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0QWxsb3dTdG9yZWRDcmVkZW50
aWFscyhib29sKTsKLQotICAgIFdFQktJVF9FWFBPUlQgQ2FjaGVQb2xpY3kgY2FjaGVQb2xpY3ko
KSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0Q2FjaGVQb2xpY3koQ2FjaGVQb2xp
Y3kpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgaHR0cE1ldGhvZCgpIGNvbnN0Owot
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRIVFRQTWV0aG9kKGNvbnN0IFdlYlN0cmluZyYpOwot
Ci0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgaHR0cEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0
cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEhUVFBIZWFkZXJG
aWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpOwotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhZGRIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBu
YW1lLCBjb25zdCBXZWJTdHJpbmcmIHZhbHVlKTsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgY2xl
YXJIVFRQSGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKTsKLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgdmlzaXRIVFRQSGVhZGVyRmllbGRzKFdlYkhUVFBIZWFkZXJWaXNpdG9yKikgY29u
c3Q7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIFdlYkhUVFBCb2R5IGh0dHBCb2R5KCkgY29uc3Q7Ci0g
ICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEhUVFBCb2R5KGNvbnN0IFdlYkhUVFBCb2R5Jik7Ci0K
LSAgICAvLyBDb250cm9scyB3aGV0aGVyIHVwbG9hZCBwcm9ncmVzcyBldmVudHMgYXJlIGdlbmVy
YXRlZCB3aGVuIGEgcmVxdWVzdAotICAgIC8vIGhhcyBhIGJvZHkuCi0gICAgV0VCS0lUX0VYUE9S
VCBib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2
b2lkIHNldFJlcG9ydFVwbG9hZFByb2dyZXNzKGJvb2wpOwotCi0gICAgLy8gQ29udHJvbHMgd2hl
dGhlciBsb2FkIHRpbWluZyBpbmZvIGlzIGNvbGxlY3RlZCBmb3IgdGhlIHJlcXVlc3QuCi0gICAg
V0VCS0lUX0VYUE9SVCBib29sIHJlcG9ydExvYWRUaW1pbmcoKSBjb25zdDsKLSAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgc2V0UmVwb3J0TG9hZFRpbWluZyhib29sKTsKLQotICAgIC8vIENvbnRyb2xz
IHdoZXRoZXIgYWN0dWFsIGhlYWRlcnMgc2VudCBhbmQgcmVjZWl2ZWQgZm9yIHJlcXVlc3QgYXJl
Ci0gICAgLy8gY29sbGVjdGVkIGFuZCByZXBvcnRlZC4KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wg
cmVwb3J0UmF3SGVhZGVycygpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRSZXBv
cnRSYXdIZWFkZXJzKGJvb2wpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBUYXJnZXRUeXBlIHRhcmdl
dFR5cGUoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0VGFyZ2V0VHlwZShUYXJn
ZXRUeXBlKTsKLQotICAgIC8vIFRydWUgaWYgdGhlIHJlcXVlc3Qgd2FzIHVzZXIgaW5pdGlhdGVk
LgotICAgIFdFQktJVF9FWFBPUlQgYm9vbCBoYXNVc2VyR2VzdHVyZSgpIGNvbnN0OwotICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBzZXRIYXNVc2VyR2VzdHVyZShib29sKTsKLQotICAgIC8vIEEgY29u
c3VtZXIgY29udHJvbGxlZCB2YWx1ZSBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIGlkZW50aWZ5IHRo
ZQotICAgIC8vIHJlcXVlc3Rvci4KLSAgICBXRUJLSVRfRVhQT1JUIGludCByZXF1ZXN0b3JJRCgp
IGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRSZXF1ZXN0b3JJRChpbnQpOwotCi0g
ICAgLy8gQSBjb25zdW1lciBjb250cm9sbGVkIHZhbHVlIGludGVuZGVkIHRvIGJlIHVzZWQgdG8g
aWRlbnRpZnkgdGhlCi0gICAgLy8gcHJvY2VzcyBvZiB0aGUgcmVxdWVzdG9yLgotICAgIFdFQktJ
VF9FWFBPUlQgaW50IHJlcXVlc3RvclByb2Nlc3NJRCgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBzZXRSZXF1ZXN0b3JQcm9jZXNzSUQoaW50KTsKLQotICAgIC8vIEFsbG93cyB0aGUg
cmVxdWVzdCB0byBiZSBtYXRjaGVkIHVwIHdpdGggaXRzIGFwcCBjYWNoZSBob3N0LgotICAgIFdF
QktJVF9FWFBPUlQgaW50IGFwcENhY2hlSG9zdElEKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9S
VCB2b2lkIHNldEFwcENhY2hlSG9zdElEKGludCk7Ci0KLSAgICAvLyBJZiB0cnVlLCB0aGUgcmVz
cG9uc2UgYm9keSB3aWxsIGJlIGRvd25sb2FkZWQgdG8gYSBmaWxlIG1hbmFnZWQgYnkgdGhlCi0g
ICAgLy8gV2ViVVJMTG9hZGVyLiBTZWUgV2ViVVJMUmVzcG9uc2U6OmRvd25sb2FkZWRGaWxlUGF0
aC4KLSAgICBXRUJLSVRfRVhQT1JUIGJvb2wgZG93bmxvYWRUb0ZpbGUoKSBjb25zdDsKLSAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0RG93bmxvYWRUb0ZpbGUoYm9vbCk7Ci0KLSAgICAvLyBFeHRy
YSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyByZXNvdXJjZSByZXF1ZXN0LiBS
ZXNvdXJjZQotICAgIC8vIHJlcXVlc3RzIGNhbiBiZSBjb3BpZWQuIElmIG5vbi1udWxsLCBlYWNo
IGNvcHkgb2YgYSByZXNvdXJjZSByZXF1ZXN0cwotICAgIC8vIGhvbGRzIGEgcG9pbnRlciB0byB0
aGUgZXh0cmEgZGF0YSwgYW5kIHRoZSBleHRyYSBkYXRhIHBvaW50ZXIgd2lsbCBiZQotICAgIC8v
IGRlbGV0ZWQgd2hlbiB0aGUgbGFzdCByZXNvdXJjZSByZXF1ZXN0IGlzIGRlc3Ryb3llZC4gU2V0
dGluZyB0aGUgZXh0cmEKLSAgICAvLyBkYXRhIHBvaW50ZXIgd2lsbCBjYXVzZSB0aGUgdW5kZXJs
eWluZyByZXNvdXJjZSByZXF1ZXN0IHRvIGJlCi0gICAgLy8gZGlzc29jaWF0ZWQgZnJvbSBhbnkg
ZXhpc3Rpbmcgbm9uLW51bGwgZXh0cmEgZGF0YSBwb2ludGVyLgotICAgIFdFQktJVF9FWFBPUlQg
RXh0cmFEYXRhKiBleHRyYURhdGEoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
RXh0cmFEYXRhKEV4dHJhRGF0YSopOwotCi0jaWYgZGVmaW5lZChXRUJLSVRfSU1QTEVNRU5UQVRJ
T04pCi0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiB0b011dGFibGVSZXNvdXJjZVJlcXVl
c3QoKTsKLSAgICBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHRvUmVzb3VyY2VSZXF1
ZXN0KCkgY29uc3Q7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgYXNzaWduKFdlYlVS
TFJlcXVlc3RQcml2YXRlKik7Ci0KLXByaXZhdGU6Ci0gICAgV2ViVVJMUmVxdWVzdFByaXZhdGUq
IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYKKyNpbmNs
dWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMUmVxdWVzdC5o
IgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViVVJMUmVz
cG9uc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9wbGF0
Zm9ybS9XZWJVUkxSZXNwb25zZS5oCShyZXZpc2lvbiAxMTI0NjIpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9wbGF0Zm9ybS9XZWJVUkxSZXNwb25zZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDIwMCArMSwyNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CiAgKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2Vi
VVJMUmVzcG9uc2VfaAotI2RlZmluZSBXZWJVUkxSZXNwb25zZV9oCi0KLSNpbmNsdWRlICJXZWJD
b21tb24uaCIKLSNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCi0KLSNpZiBkZWZpbmVkKFdF
QktJVF9JTVBMRU1FTlRBVElPTikKLW5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsgfQotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJDU3Ry
aW5nOwotY2xhc3MgV2ViSFRUUEhlYWRlclZpc2l0b3I7Ci1jbGFzcyBXZWJIVFRQTG9hZEluZm87
Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7Ci1jbGFzcyBXZWJVUkxMb2FkVGltaW5n
OwotY2xhc3MgV2ViVVJMUmVzcG9uc2VQcml2YXRlOwotCi1jbGFzcyBXZWJVUkxSZXNwb25zZSB7
Ci1wdWJsaWM6Ci0gICAgY2xhc3MgRXh0cmFEYXRhIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgfkV4dHJhRGF0YSgpIHsgfQotICAgIH07Ci0KLSAgICB+V2ViVVJMUmVzcG9uc2UoKSB7
IHJlc2V0KCk7IH0KLQotICAgIFdlYlVSTFJlc3BvbnNlKCkgOiBtX3ByaXZhdGUoMCkgeyB9Ci0g
ICAgV2ViVVJMUmVzcG9uc2UoY29uc3QgV2ViVVJMUmVzcG9uc2UmIHIpIDogbV9wcml2YXRlKDAp
IHsgYXNzaWduKHIpOyB9Ci0gICAgV2ViVVJMUmVzcG9uc2UmIG9wZXJhdG9yPShjb25zdCBXZWJV
UkxSZXNwb25zZSYgcikKLSAgICB7Ci0gICAgICAgIGFzc2lnbihyKTsKLSAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgIH0KLQotICAgIGV4cGxpY2l0IFdlYlVSTFJlc3BvbnNlKGNvbnN0IFdlYlVS
TCYgdXJsKSA6IG1fcHJpdmF0ZSgwKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZSgpOwotICAg
ICAgICBzZXRVUkwodXJsKTsKLSAgICB9Ci0KLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlh
bGl6ZSgpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCByZXNldCgpOwotICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBhc3NpZ24oY29uc3QgV2ViVVJMUmVzcG9uc2UmKTsKLQotICAgIFdFQktJVF9FWFBP
UlQgYm9vbCBpc051bGwoKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgV2ViVVJMIHVybCgp
IGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRVUkwoY29uc3QgV2ViVVJMJik7Ci0K
LSAgICBXRUJLSVRfRVhQT1JUIHVuc2lnbmVkIGNvbm5lY3Rpb25JRCgpIGNvbnN0OwotICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBzZXRDb25uZWN0aW9uSUQodW5zaWduZWQpOwotCi0gICAgV0VCS0lU
X0VYUE9SVCBib29sIGNvbm5lY3Rpb25SZXVzZWQoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgc2V0Q29ubmVjdGlvblJldXNlZChib29sKTsKLQotICAgIFdFQktJVF9FWFBPUlQgV2Vi
VVJMTG9hZFRpbWluZyBsb2FkVGltaW5nKCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldExv
YWRUaW1pbmcoY29uc3QgV2ViVVJMTG9hZFRpbWluZyYpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBX
ZWJIVFRQTG9hZEluZm8gaHR0cExvYWRJbmZvKCk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNl
dEhUVFBMb2FkSW5mbyhjb25zdCBXZWJIVFRQTG9hZEluZm8mKTsKLQotICAgIFdFQktJVF9FWFBP
UlQgZG91YmxlIHJlc3BvbnNlVGltZSgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBz
ZXRSZXNwb25zZVRpbWUoZG91YmxlKTsKLQotICAgIFdFQktJVF9FWFBPUlQgV2ViU3RyaW5nIG1p
bWVUeXBlKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldE1JTUVUeXBlKGNvbnN0
IFdlYlN0cmluZyYpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBsb25nIGxvbmcgZXhwZWN0ZWRDb250
ZW50TGVuZ3RoKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEV4cGVjdGVkQ29u
dGVudExlbmd0aChsb25nIGxvbmcpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgdGV4
dEVuY29kaW5nTmFtZSgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRUZXh0RW5j
b2RpbmdOYW1lKGNvbnN0IFdlYlN0cmluZyYpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJp
bmcgc3VnZ2VzdGVkRmlsZU5hbWUoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
U3VnZ2VzdGVkRmlsZU5hbWUoY29uc3QgV2ViU3RyaW5nJik7Ci0KLSAgICBXRUJLSVRfRVhQT1JU
IGludCBodHRwU3RhdHVzQ29kZSgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRI
VFRQU3RhdHVzQ29kZShpbnQpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcgaHR0cFN0
YXR1c1RleHQoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0SFRUUFN0YXR1c1Rl
eHQoY29uc3QgV2ViU3RyaW5nJik7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIFdlYlN0cmluZyBodHRw
SGVhZGVyRmllbGQoY29uc3QgV2ViU3RyaW5nJiBuYW1lKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQ
T1JUIHZvaWQgc2V0SFRUUEhlYWRlckZpZWxkKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3Qg
V2ViU3RyaW5nJiB2YWx1ZSk7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZEhUVFBIZWFkZXJG
aWVsZChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpOwotICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBjbGVhckhUVFBIZWFkZXJGaWVsZChjb25zdCBXZWJTdHJpbmcm
IG5hbWUpOwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCB2aXNpdEhUVFBIZWFkZXJGaWVsZHMoV2Vi
SFRUUEhlYWRlclZpc2l0b3IqKSBjb25zdDsKLQotICAgIFdFQktJVF9FWFBPUlQgZG91YmxlIGxh
c3RNb2RpZmllZERhdGUoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0TGFzdE1v
ZGlmaWVkRGF0ZShkb3VibGUpOwotCi0gICAgV0VCS0lUX0VYUE9SVCBsb25nIGxvbmcgYXBwQ2Fj
aGVJRCgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBcHBDYWNoZUlEKGxvbmcg
bG9uZyk7Ci0KLSAgICBXRUJLSVRfRVhQT1JUIFdlYlVSTCBhcHBDYWNoZU1hbmlmZXN0VVJMKCkg
Y29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldEFwcENhY2hlTWFuaWZlc3RVUkwoY29u
c3QgV2ViVVJMJik7Ci0KLSAgICAvLyBBIGNvbnN1bWVyIGNvbnRyb2xsZWQgdmFsdWUgaW50ZW5k
ZWQgdG8gYmUgdXNlZCB0byByZWNvcmQgb3BhcXVlCi0gICAgLy8gc2VjdXJpdHkgaW5mbyByZWxh
dGVkIHRvIHRoaXMgcmVxdWVzdC4KLSAgICBXRUJLSVRfRVhQT1JUIFdlYkNTdHJpbmcgc2VjdXJp
dHlJbmZvKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFNlY3VyaXR5SW5mbyhj
b25zdCBXZWJDU3RyaW5nJik7Ci0KLSNpZiBkZWZpbmVkKFdFQktJVF9JTVBMRU1FTlRBVElPTikK
LSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiB0b011dGFibGVSZXNvdXJjZVJlc3BvbnNl
KCk7Ci0gICAgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgdG9SZXNvdXJjZVJlc3Bv
bnNlKCkgY29uc3Q7Ci0jZW5kaWYKLQotICAgIC8vIEZsYWcgd2hldGhlciB0aGlzIHJlcXVlc3Qg
d2FzIHNlcnZlZCBmcm9tIHRoZSBkaXNrIGNhY2hlIGVudHJ5LgotICAgIFdFQktJVF9FWFBPUlQg
Ym9vbCB3YXNDYWNoZWQoKSBjb25zdDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0V2FzQ2Fj
aGVkKGJvb2wpOwotCi0gICAgLy8gRmxhZyB3aGV0aGVyIHRoaXMgcmVxdWVzdCB3YXMgbG9hZGVk
IHZpYSB0aGUgU1BEWSBwcm90b2NvbCBvciBub3QuCi0gICAgLy8gU1BEWSBpcyBhbiBleHBlcmlt
ZW50YWwgd2ViIHByb3RvY29sLCBzZWUgaHR0cDovL2Rldi5jaHJvbWl1bS5vcmcvc3BkeQotICAg
IFdFQktJVF9FWFBPUlQgYm9vbCB3YXNGZXRjaGVkVmlhU1BEWSgpIGNvbnN0OwotICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRXYXNGZXRjaGVkVmlhU1BEWShib29sKTsKLQotICAgIC8vIEZsYWcg
d2hldGhlciB0aGlzIHJlcXVlc3Qgd2FzIGxvYWRlZCBhZnRlciB0aGUgVExTL05leHQtUHJvdG9j
b2wtTmVnb3RpYXRpb24gd2FzIHVzZWQuCi0gICAgLy8gVGhpcyBpcyByZWxhdGVkIHRvIFNQRFku
Ci0gICAgV0VCS0lUX0VYUE9SVCBib29sIHdhc05wbk5lZ290aWF0ZWQoKSBjb25zdDsKLSAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgc2V0V2FzTnBuTmVnb3RpYXRlZChib29sKTsKLQotICAgIC8vIEZs
YWcgd2hldGhlciB0aGlzIHJlcXVlc3Qgd2FzIG1hZGUgd2hlbiAiQWx0ZXJuYXRlLVByb3RvY29s
OiB4eHgiCi0gICAgLy8gaXMgcHJlc2VudCBpbiBzZXJ2ZXIncyByZXNwb25zZS4KLSAgICBXRUJL
SVRfRVhQT1JUIGJvb2wgd2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUoKSBjb25zdDsKLSAg
ICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0V2FzQWx0ZXJuYXRlUHJvdG9jb2xBdmFpbGFibGUoYm9v
bCk7Ci0KLSAgICAvLyBGbGFnIHdoZXRoZXIgdGhpcyByZXF1ZXN0IHdhcyBsb2FkZWQgdmlhIGFu
IGV4cGxpY2l0IHByb3h5IChIVFRQLCBTT0NLUywgZXRjKS4KLSAgICBXRUJLSVRfRVhQT1JUIGJv
b2wgd2FzRmV0Y2hlZFZpYVByb3h5KCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNl
dFdhc0ZldGNoZWRWaWFQcm94eShib29sKTsKLQotICAgIC8vIEZsYWcgd2hldGhlciB0aGlzIHJl
cXVlc3QgaXMgcGFydCBvZiBhIG11bHRpcGFydCByZXNwb25zZS4KLSAgICBXRUJLSVRfRVhQT1JU
IGJvb2wgaXNNdWx0aXBhcnRQYXlsb2FkKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VYUE9SVCB2b2lk
IHNldElzTXVsdGlwYXJ0UGF5bG9hZChib29sKTsKLQotICAgIC8vIFRoaXMgaW5kaWNhdGVzIHRo
ZSBsb2NhdGlvbiBvZiBhIGRvd25sb2FkZWQgcmVzcG9uc2UgaWYgdGhlCi0gICAgLy8gV2ViVVJM
UmVxdWVzdCBoYWQgdGhlIGRvd25sb2FkVG9GaWxlIGZsYWcgc2V0IHRvIHRydWUuIFRoaXMgZmls
ZSBwYXRoCi0gICAgLy8gcmVtYWlucyB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBXZWJV
UkxMb2FkZXIgdXNlZCB0byBjcmVhdGUgaXQuCi0gICAgV0VCS0lUX0VYUE9SVCBXZWJTdHJpbmcg
ZG93bmxvYWRGaWxlUGF0aCgpIGNvbnN0OwotICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXREb3du
bG9hZEZpbGVQYXRoKGNvbnN0IFdlYlN0cmluZyYpOwotCi0gICAgLy8gUmVtb3RlIElQIGFkZHJl
c3Mgb2YgdGhlIHNvY2tldCB3aGljaCBmZXRjaGVkIHRoaXMgcmVzb3VyY2UuCi0gICAgV0VCS0lU
X0VYUE9SVCBXZWJTdHJpbmcgcmVtb3RlSVBBZGRyZXNzKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHNldFJlbW90ZUlQQWRkcmVzcyhjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIC8v
IFJlbW90ZSBwb3J0IG51bWJlciBvZiB0aGUgc29ja2V0IHdoaWNoIGZldGNoZWQgdGhpcyByZXNv
dXJjZS4KLSAgICBXRUJLSVRfRVhQT1JUIHVuc2lnbmVkIHNob3J0IHJlbW90ZVBvcnQoKSBjb25z
dDsKLSAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0UmVtb3RlUG9ydCh1bnNpZ25lZCBzaG9ydCk7
Ci0KLSAgICAvLyBFeHRyYSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJseWluZyByZXNv
dXJjZSByZXNwb25zZS4gUmVzb3VyY2UKLSAgICAvLyByZXNwb25zZXMgY2FuIGJlIGNvcGllZC4g
SWYgbm9uLW51bGwsIGVhY2ggY29weSBvZiBhIHJlc291cmNlIHJlc3BvbnNlCi0gICAgLy8gaG9s
ZHMgYSBwb2ludGVyIHRvIHRoZSBleHRyYSBkYXRhLCBhbmQgdGhlIGV4dHJhIGRhdGEgcG9pbnRl
ciB3aWxsIGJlCi0gICAgLy8gZGVsZXRlZCB3aGVuIHRoZSBsYXN0IHJlc291cmNlIHJlc3BvbnNl
IGlzIGRlc3Ryb3llZC4gU2V0dGluZyB0aGUgZXh0cmEKLSAgICAvLyBkYXRhIHBvaW50ZXIgd2ls
bCBjYXVzZSB0aGUgdW5kZXJseWluZyByZXNvdXJjZSByZXNwb25zZSB0byBiZQotICAgIC8vIGRp
c3NvY2lhdGVkIGZyb20gYW55IGV4aXN0aW5nIG5vbi1udWxsIGV4dHJhIGRhdGEgcG9pbnRlci4K
LSAgICBXRUJLSVRfRVhQT1JUIEV4dHJhRGF0YSogZXh0cmFEYXRhKCkgY29uc3Q7Ci0gICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHNldEV4dHJhRGF0YShFeHRyYURhdGEqKTsKLQotcHJvdGVjdGVkOgot
ICAgIHZvaWQgYXNzaWduKFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSopOwotCi1wcml2YXRlOgotICAg
IFdlYlVSTFJlc3BvbnNlUHJpdmF0ZSogbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJVUkxSZXNwb25zZS5oIgo=
</data>
<flag name="review"
          id="138711"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>