<?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>26112</bug_id>
          
          <creation_ts>2009-05-31 21:53:11 -0700</creation_ts>
          <short_desc>Single-view WebKit -- make events work</short_desc>
          <delta_ts>2010-05-25 15:12:22 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>26113</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123780</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-31 21:53:11 -0700</bug_when>
    <thetext>I&apos;m using this bug to track some work on viewless WebKit. The patch (or patches) attached here will be related primarily to events and view coordinates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123784</commentid>
    <comment_count>1</comment_count>
      <attachid>30825</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-31 22:55:06 -0700</bug_when>
    <thetext>Created attachment 30825
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123785</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-31 22:56:27 -0700</bug_when>
    <thetext>Note: The enormous size of this patch is mainly due to the 3 or 4 copies of WebHTMLView.mm that appear because I used &quot;svn copy&quot; to extract a class from that file. Perhaps I should separate that into a distinct check-in to make reviewing more sane. Or depending on the reviewer it might not faze you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123788</commentid>
    <comment_count>3</comment_count>
      <attachid>30825</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-05-31 23:24:56 -0700</bug_when>
    <thetext>Comment on attachment 30825
patch

Clearing review flag for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123790</commentid>
    <comment_count>4</comment_count>
      <attachid>30826</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-01 00:11:15 -0700</bug_when>
    <thetext>Created attachment 30826
newer work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123816</commentid>
    <comment_count>5</comment_count>
      <attachid>30829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-01 02:11:00 -0700</bug_when>
    <thetext>Created attachment 30829
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123843</commentid>
    <comment_count>6</comment_count>
      <attachid>30829</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-06-01 10:11:16 -0700</bug_when>
    <thetext>Comment on attachment 30829
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124591</commentid>
    <comment_count>7</comment_count>
      <attachid>30829</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-05 16:38:30 -0700</bug_when>
    <thetext>Comment on attachment 30829
patch

Clearing review flag since I landed this as &lt;http://trac.webkit.org/changeset/44379&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230491</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 15:12:22 -0700</bug_when>
    <thetext>We’re not going to do single-view WebKit any more. We have a better approach.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30825</attachid>
            <date>2009-05-31 22:55:06 -0700</date>
            <delta_ts>2009-06-01 00:11:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ViewlessEventPatch.txt</filename>
            <type>text/plain</type>
            <size>1132492</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIzIEBACisyMDA5LTA1LTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjYxMTI6IHZpZXdsZXNzIFdlYktpdCAtLSBtYWtlIGV2ZW50cyB3b3JrCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjExMgorCisgICAgICAgIFRoZSBt
YWluIGZpeCBoZXJlIGlzIHRvIG1ha2UgbW91c2UgYW5kIHdoZWVsIGV2ZW50IGNvb3JkaW5hdGVz
IGluIHRoZSBjb29yZGluYXRlCisgICAgICAgIHN5c3RlbSBvZiB0aGUgdG9wIGxldmVsIE5TVmll
dyByYXRoZXIgdGhhbiB0aGUgTlNXaW5kb3cgd2hlbiBpbiB0aGUgdmlld2xlc3MgbW9kZS4KKyAg
ICAgICAgVGhpcyBpcyB0aGUgZGVzaWduIEh5YXR0IGNob3NlLCBidXQgdGhlIGV2ZW50IHBhcnQg
b2YgaXQgd2Fzbid0IGRvbmUgeWV0LgorCisgICAgICAgIEFsc28gZml4IEZyYW1lVmlldyB0byBk
byBub3JtYWwgcmVmZXJlbmNlIGNvdW50aW5nIGluc3RlYWQgb2YgYSBzdHJhbmdlIG1vZGVsIHdp
dGgKKyAgICAgICAgYW4gZXhwbGljaXQgZGVyZWYgbmVhciBjcmVhdGlvbiB0aW1lLgorCisgICAg
ICAgICogV2ViQ29yZS5iYXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFu
ZGxlTW91c2VVcCk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaW50byB0aGUgZmlsZQorICAgICAgICB0
byByZWR1Y2UgY29uZGl0aW9uYWxzIGluIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmV2ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZCk6IERpdHRvLgorCisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogUmVkdWNlZCBpbmNsdWRlcy4gRml4ZWQgZm9ybWF0
dGluZyBvZiBPYmplY3RpdmUtQyB0eXBlcy4KKyAgICAgICAgTWFkZSBjdXJyZW50TlNFdmVudCBh
IHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uIEFkZGVkIHNlbmRDb250ZXh0TWVudUV2ZW50IGFuZAor
ICAgICAgICBldmVudE1heVN0YXJ0RHJhZyBmdW5jdGlvbnMgdGhhdCB0YWtlcyBOU0V2ZW50ICog
c28gdGhlIGNvbnZlcnNpb24gdG8gUGxhdGZvcm1Nb3VzZUV2ZW50CisgICAgICAgIGNhbiBiZSBk
b25lIGhlcmUgcmF0aGVyIHRoYW4gaW4gV2ViS2l0LiBSZWR1Y2VkICNpZiBieSBtYWtpbmcgZXZl
bnRMb29wSGFuZGxlTW91c2VVcCBhbmQKKyAgICAgICAgZXZlbnRMb29wSGFuZGxlTW91c2VEcmFn
Z2VkIHVuY29uZGl0aW9uYWwuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpzZXRWaWV3KTogTWFkZSB0aGlzIHRha2UgYSBQYXNzUmVmUHRyIHNp
bmNlIGl0IHRha2VzIG93bmVyc2hpcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVW
aWV3KTogQ2hhbmdlZCB0byB1c2UgUmVmUHRyIGFuZCBGcmFtZVZpZXc6OmNyZWF0ZSBhbmQgcmVt
b3ZlCisgICAgICAgIHRoZSBleHBsaWNpdCBkZXJlZi4KKworICAgICAgICAqIHBhZ2UvRnJhbWUu
aDogQ2hhbmdlZCBzZXRWaWV3IHRvIHRha2UgYSBQYXNzUmVmUHRyLgorCisgICAgICAgICogcGFn
ZS9GcmFtZVRyZWUuY3BwOiBBZGRlZCBuZXdseS1uZWVkZWQgaW5jbHVkZS4KKworICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6RnJhbWVW
aWV3KTogR290IHJpZCBvZiBvbmUgb2YgdGhlIHR3byBjb25zdHJ1Y3RvcnMsIGFuZCByZW1vdmVk
CisgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbiBvZiBtX3JlZkNvdW50IGFuZCBjYWxsIHRvIHNo
b3cgZnJvbSB0aGUgcmVhbWluaW5nIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
Y3JlYXRlKTogQWRkZWQgdHdvIGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBkbyB3aGF0IHRoZSB0d28K
KyAgICAgICAgY29uc3RydWN0b3JzIGRpZCBiZWZvcmUsIGV4Y2VwdCB0aGF0IHRoZXkgcmV0dXJu
IGEgUGFzc1JlZlB0ciB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgIHJlZmVyZW5jZSBjb3VudGlu
ZyBpcyBoYW5kbGVkIGNvcnJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6fkZy
YW1lVmlldyk6IFJlbW92ZWQgYXNzZXJ0aW9uIGZyb20gd2hlbiBGcmFtZVZpZXcgaW1wbGVtZW50
ZWQKKyAgICAgICAgaXRzIG93biByZWZlcmVuY2UgY291bnRpbmcuCisKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOiBJbmhlcml0IGZyb20gUmVmQ291bnRlZCBmb3IgcmVmZXJlbmNlIGNvdW50
aW5nLiBNYWRlIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBwcml2YXRlIGFuZCBhZGRlZCBjcmVh
dGUgZnVuY3Rpb25zLiBHb3QgcmlkIG9mIHRoZSBoYW5kLWltcGxlbWVudGVkCisgICAgICAgIHJl
ZmVyZW5jZSBjb3VudGluZyBpbiB0aGlzIGNsYXNzLgorCisgICAgICAgICogcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVudE5TRXZlbnRTbG90KTog
UmVuYW1lZCBjdXJyZW50RXZlbnQgdG8gY3VycmVudE5TRXZlbnRTbG90IHRvCisgICAgICAgIG1h
a2UgaXQgbW9yZSBjbGVhciBob3cgaXQgcmVsYXRlcyB0byBjdXJyZW50TlNFdmVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZlbnQpOiBVcGRhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q3VycmVudEV2ZW50U2NvcGU6OkN1cnJlbnRFdmVudFNjb3BlKTogQWRk
ZWQuIFVzZSB0byBzZXQvcmVzZXQgdGhlCisgICAgICAgIGN1cnJlbnQgZXZlbnQgaW4gYSBmb29s
cHJvb2Ygd2F5LgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudEV2ZW50U2NvcGU6On5DdXJyZW50
RXZlbnRTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp3aGVl
bEV2ZW50KTogVXNlIEN1cnJlbnRFdmVudFNjb3BlLiBQYXNzIHRoZSBwbGF0Zm9ybQorICAgICAg
ICB3aW5kb3cgaW4gd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFBsYXRmb3JtV2hlZWxFdmVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOiBVc2UgQ3VycmVudEV2ZW50
U2NvcGUuCisgICAgICAgIChXZWJDb3JlOjpsYXN0RXZlbnRJc01vdXNlVXApOiBVc2UgY3VycmVu
dE5TRXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25F
dmVudFRvV2lkZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmV2
ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpldmVudExvb3BIYW5kbGVNb3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZSk6IFVzZQorICAg
ICAgICBjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50IHRvIGdldCBhIG1vdXNlIGV2ZW50IHRoYXQg
aGFzIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBwbGF0Zm9ybSB3aW5kb3cgcGFzc2VkIHRvIGNy
ZWF0ZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRU
b1dpZGdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZURv
d24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VEcmFnZ2Vk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlVXApOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50
KTogQWRkZWQuIFBhc3NlcyB0aGUKKyAgICAgICAgcGxhdGZvcm0gd2luZG93IHRoYXQncyBub3cg
bmVlZGVkIHRvIGNyZWF0ZSBhIFBsYXRmb3JtTW91c2VFdmVudC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZXZlbnRNYXlTdGFydERyYWcpOiBBZGRlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcyBhbmQg
Y29uc3RydWN0b3IgZGVmaW5pdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOiBTb3J0ZWQgdGhpbmdzIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyAgICAgICAg
Q2hhbmdlZCBNYWMgY29uc3RydWN0b3IgdG8gdGFrZSBhIHdpbmRvd1ZpZXcgYXMgd2VsbCBhcyB0
aGUgZXZlbnQuIFRoaXMgaXMKKyAgICAgICAgbmVlZGVkIGluIHZpZXdsZXNzIG1vZGUsIHNpbmNl
IHRoZSAid2luZG93IiBpcyBhY3R1YWxseSBhbiBOU1ZpZXcsIHNvIHRoZQorICAgICAgICBldmVu
dCBoYXMgdG8ga25vdyB3aGljaCB2aWV3IHRvIGNvbXB1dGUgdGhlIGNvb3JkaW5hdGVzIHdpdGgu
IE1hZGUgdGhlCisgICAgICAgIHNhbWUgY2hhbmdlIHRvIHBvaW50Rm9yRXZlbnQuCisgICAgICAg
ICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6IERpdHRvLgorCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXRmb3JtTW91c2VFdmVudE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBv
aW50Rm9yRXZlbnQpOiBDb252ZXJ0IHBvaW50IGZyb20gd2luZG93IGNvb3JkaW5hdGVzIHRvIHZp
ZXcKKyAgICAgICAgY29vcmRpbmF0ZXMgaWYgYSB3aW5kb3dWaWV3IGlzIHBhc3NlZCBpbi4gVGhp
cyBpcyB1c2VkIGluIHZpZXdsZXNzIG1vZGUuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1v
dXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XaGVlbEV2ZW50TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvdyk6IEZpeGVkIGNhc2Ugd2hlcmUgdGhlcmUKKyAgICAgICAgaXMgbm8gcGxh
dGZvcm0gd2lkZ2V0IGFuZCBubyBwYXJlbnQuIEJlZm9yZSBpdCB3b3VsZCB5aWVsZCB1bnByZWRp
Y3RhYmxlCisgICAgICAgIHJlc3VsdHMgYmVjYXVzZSBvZiBkaXNwYXRjaGluZyB0byBhIG5pbCBv
YmplY3QgYW5kIHJldHVybmluZyBhIHN0cnVjdHVyZS4KKyAgICAgICAgTm93IGl0IHJldHVybnMg
dGhlIHBvaW50IHdpdGhvdXQgY2hhbmdpbmcgY29vcmRpbmF0ZXMgYXQgYWxsLCB3aGljaCBpcyB3
aGF0CisgICAgICAgIHdlIG5lZWQgZm9yIHRoaXMgY2FzZSBpbiB2aWV3bGVzcyBtb2RlLgorCisg
ICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oOiBSZW1vdmVkIHVuaGVscGZ1bCBtYXgg
YW5kIG1pbiBmdW5jdGlvbnMuIFRoZXNlCisgICAgICAgIGp1c3QgZG8gd2hhdCBzdGQ6Om1heCBh
bmQgc3RkOjptaW4gd2lsbCBhbHJlYWR5IGRvIGF1dG9tYXRpY2FsbHkgZm9yIHRoaXMKKyAgICAg
ICAgdHlwZSwgc28gdGhleSBhcmUgbm90IGhlbHBmdWwuCisKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OlNWR0ltYWdlKTog
UmVtb3ZlZCB1bm5lZWRlZCBpbml0aWFsIHZhbHVlcyBmb3IgdHlwZXMKKyAgICAgICAgdGhhdCBp
bml0aWFsaXplIHRvIHplcm8gd2l0aG91dCBhbnl0aGluZyBleHBsaWNpdC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjp+U1ZHSW1hZ2UpOiBVcGRhdGUgc2luY2UgbV9mcmFtZSBhbmQgbV9m
cmFtZVZpZXcgYXJlCisgICAgICAgIG5vIGxvbmdlciBzdG9yZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2U6OnVzZXNDb250YWluZXJTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6c2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Omhhc1Jl
bGF0aXZlV2lkdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpoYXNSZWxh
dGl2ZUhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKTog
RGl0dG8uCisKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDogUmVtb3ZlZCB1bm5l
ZWRlZCBpbmNsdWRlcyBhbmQgdW5uZWVkZWQgZGF0YQorICAgICAgICBtZW1iZXJzIG1fZG9jdW1l
bnQsIG1fZnJhbWUsIG1fZnJhbWVWaWV3LCBhbmQgbV9taW5TaXplLgorCiAyMDA5LTA1LTMxICBE
aXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlr
b2xhcyBaaW1tZXJtYW5uLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw5ICsyMzIsMTAgQEAg
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9sbE92ZXJmbAogX19aTjdXZWJDb3JlMTJF
dmVudEhhbmRsZXIxNXNlbmRTY3JvbGxFdmVudEV2CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjE3ZHJhZ1NvdXJjZUVuZGVkQXRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEVOU18xM0RyYWdP
cGVyYXRpb25FCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE3ZHJhZ1NvdXJjZU1vdmVkVG9F
UktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdl
dmVudE1heVN0YXJ0RHJhZ0VQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBo
YW5kbGVUZXh0SW5wdXRFdmVudEVSS05TXzZTdHJpbmdFUE5TXzVFdmVudEViYgogX19aTjdXZWJD
b3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJi
Ci1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwc2VuZENvbnRleHRNZW51RXZlbnRFUktOU18x
OFBsYXRmb3JtTW91c2VFdmVudEUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBzZW5kQ29u
dGV4dE1lbnVFdmVudEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjdjYXBz
TG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWRFdgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXI3bW91
c2VVcEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyOGtleUV2ZW50RVA3TlNF
dmVudApAQCAtMzk1LDcgKzM5Niw2IEBAIF9fWk43V2ViQ29yZTE2dGhyZWFkR2xvYmFsRGF0YUV2
CiBfX1pON1dlYkNvcmUxN0RPTUltcGxlbWVudGF0aW9uMTRpc1RleHRNSU1FVHlwZUVSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUxN0dseXBoUGFnZVRyZWVOb2RlMTh0cmVlR2x5cGhQYWdlQ291
bnRFdgogX19aTjdXZWJDb3JlMTdlcXVhbElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMx
XwotX19aTjdXZWJDb3JlMThQbGF0Zm9ybU1vdXNlRXZlbnRDMUVQN05TRXZlbnQKIF9fWk43V2Vi
Q29yZTE4aXNTdGFydE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyMHBhdXNlQW5pbWF0aW9uQXRUaW1lRVBOU18xMlJl
bmRlck9iamVjdEVSS05TXzZTdHJpbmdFZAogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9s
bGVyMjFwYXVzZVRyYW5zaXRpb25BdFRpbWVFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfNlN0cmlu
Z0VkCkBAIC01MTksNyArNTE5LDcgQEAgX19aTjdXZWJDb3JlNUZyYW1lMjhzZWFyY2hGb3JMYWJl
bHNCZWZvcgogX19aTjdXZWJDb3JlNUZyYW1lMzRzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkRWIKIF9fWk43V2ViQ29yZTVGcmFtZTRpbml0RXYKIF9fWk43V2ViQ29yZTVGcmFtZTZz
Y3JpcHRFdgotX19aTjdXZWJDb3JlNUZyYW1lN3NldFZpZXdFUE5TXzlGcmFtZVZpZXdFCitfX1pO
N1dlYkNvcmU1RnJhbWU3c2V0Vmlld0VOM1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVF
CiBfX1pON1dlYkNvcmU1RnJhbWVDMUVQTlNfNFBhZ2VFUE5TXzIxSFRNTEZyYW1lT3duZXJFbGVt
ZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19aTjdXZWJDb3JlNUZyYW1lRDFFdgogX19a
TjdXZWJDb3JlNUltYWdlMTJzdXBwb3J0c1R5cGVFUktOU182U3RyaW5nRQpAQCAtNjgzLDggKzY4
Myw4IEBAIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMnNldEJhc2VCYWNrZ3JvdW4KIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcyM2xheW91dElmTmVlZGVkUmVjdXJzaXZlRXYKIF9fWk43V2ViQ29yZTlG
cmFtZVZpZXcyOWZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlRWZmYgogX19aTjdXZWJDb3Jl
OUZyYW1lVmlldzI5c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW5FYgotX19aTjdXZWJDb3Jl
OUZyYW1lVmlld0MxRVBOU181RnJhbWVFCi1fX1pON1dlYkNvcmU5RnJhbWVWaWV3QzFFUE5TXzVG
cmFtZUVSS05TXzdJbnRTaXplRQorX19aTjdXZWJDb3JlOUZyYW1lVmlldzZjcmVhdGVFUE5TXzVG
cmFtZUUKK19fWk43V2ViQ29yZTlGcmFtZVZpZXc2Y3JlYXRlRVBOU181RnJhbWVFUktOU183SW50
U2l6ZUUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXMxMGxpc3RpbmdUYWdFCiBfX1pON1dlYkNvcmU5
SFRNTE5hbWVzMTF0ZXh0YXJlYVRhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXMxM2Jsb2NrcXVv
dGVUYWdFCkBAIC03NzMsNyArNzczLDYgQEAgX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04Y2hp
bGRyZW5FdgogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04cmVmZXJyZXJFdgogX19aTks3V2Vi
Q29yZTExSGlzdG9yeUl0ZW05dXJsU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVt
OXZpZXdTdGF0ZUV2Ci1fX1pOSzdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2V2ZW50TWF5U3RhcnRE
cmFnRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pOSzdXZWJDb3JlMTJFdmVudEhhbmRs
ZXIyMGN1cnJlbnRLZXlib2FyZEV2ZW50RXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTEy
ZGF0YWJhc2VQYXRoRXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTI0c2hvdWxkU3RvcFRo
cmVhZEFjdGl2aXR5RXYKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA0NDMwOSkK
KysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
NiArMTE3LDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3JvbGxBbmRBY2NlcHRFdmVudCgKICAg
ICAgICAgZS5hY2NlcHQoKTsKIH0KIAorI2lmICFQTEFURk9STShNQUMpCisKK2lubGluZSBib29s
IEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VVcChjb25zdCBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29s
IEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VEcmFnZ2VkKGNvbnN0IE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworI2VuZGlm
CisKIEV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJh
bWUoZnJhbWUpCiAgICAgLCBtX21vdXNlUHJlc3NlZChmYWxzZSkKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyMiArMjcsMTUgQEAKICNkZWZpbmUgRXZlbnRIYW5k
bGVyX2gKIAogI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCi0jaW5jbHVkZSAiRm9jdXNEaXJlY3Rp
b24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxU
eXBlcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiV2Vi
Q29yZUtleWJvYXJkVUlNb2RlLmgiCi0jaWZuZGVmIF9fT0JKQ19fCi1jbGFzcyBOU0V2ZW50Owor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18pCiBjbGFzcyBOU1ZpZXc7CiAj
ZW5kaWYKLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUxLDcgKzQ0LDYgQEAg
Y2xhc3MgQ2xpcGJvYXJkOwogY2xhc3MgQ3Vyc29yOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGbG9h
dFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIaXRUZXN0UmVx
dWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC02OCw3ICs2MCw2IEBAIGNsYXNzIFNjcm9s
bGJhcjsKIGNsYXNzIFN0cmluZzsKIGNsYXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKIGNsYXNzIFRl
eHRFdmVudDsKLWNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFdpZGdldDsKICAgICAKIGV4
dGVybiBjb25zdCBpbnQgTGlua0RyYWdIeXN0ZXJlc2lzOwpAQCAtMTU5LDIxICsxNTAsMjQgQEAg
cHVibGljOgogICAgIHZvaWQgc2VuZFJlc2l6ZUV2ZW50KCk7CiAgICAgdm9pZCBzZW5kU2Nyb2xs
RXZlbnQoKTsKICAgICAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBk
ZWZpbmVkKF9fT0JKQ19fKQogICAgIFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4gY3VycmVudEtl
eWJvYXJkRXZlbnQoKSBjb25zdDsKIAotICAgIHZvaWQgbW91c2VEb3duKE5TRXZlbnQqKTsKLSAg
ICB2b2lkIG1vdXNlRHJhZ2dlZChOU0V2ZW50Kik7Ci0gICAgdm9pZCBtb3VzZVVwKE5TRXZlbnQq
KTsKLSAgICB2b2lkIG1vdXNlTW92ZWQoTlNFdmVudCopOwotICAgIGJvb2wga2V5RXZlbnQoTlNF
dmVudCopOwotICAgIGJvb2wgd2hlZWxFdmVudChOU0V2ZW50Kik7CisgICAgdm9pZCBtb3VzZURv
d24oTlNFdmVudCAqKTsKKyAgICB2b2lkIG1vdXNlRHJhZ2dlZChOU0V2ZW50ICopOworICAgIHZv
aWQgbW91c2VVcChOU0V2ZW50ICopOworICAgIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50ICopOwor
ICAgIGJvb2wga2V5RXZlbnQoTlNFdmVudCAqKTsKKyAgICBib29sIHdoZWVsRXZlbnQoTlNFdmVu
dCAqKTsKKworICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnQoTlNFdmVudCAqKTsKKyAgICBi
b29sIGV2ZW50TWF5U3RhcnREcmFnKE5TRXZlbnQgKik7CiAKLSAgICB2b2lkIHNlbmRGYWtlRXZl
bnRzQWZ0ZXJXaWRnZXRUcmFja2luZyhOU0V2ZW50KiBpbml0aWF0aW5nRXZlbnQpOworICAgIHZv
aWQgc2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRyYWNraW5nKE5TRXZlbnQgKmluaXRpYXRpbmdF
dmVudCk7CiAKICAgICB2b2lkIHNldEFjdGl2YXRpb25FdmVudE51bWJlcihpbnQgbnVtKSB7IG1f
YWN0aXZhdGlvbkV2ZW50TnVtYmVyID0gbnVtOyB9CiAKLSAgICBOU0V2ZW50ICpjdXJyZW50TlNF
dmVudCgpOworICAgIHN0YXRpYyBOU0V2ZW50ICpjdXJyZW50TlNFdmVudCgpOwogI2VuZGlmCiAK
IHByaXZhdGU6CkBAIC0xOTMsOCArMTg3LDggQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPENs
aXBib2FyZD4gY3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdDsKICAgICAKICAgICBib29s
IGV2ZW50QWN0aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25zdDsKLSAg
ICB2b2lkIHNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpOwotICAgIHZvaWQgc2VsZWN0Q2xvc2VzdFdvcmRPckxp
bmtGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVu
dCk7CisgICAgdm9pZCBzZWxlY3RDbG9zZXN0V29yZEZyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKKyAgICB2b2lkIHNlbGVjdENsb3Nlc3RXb3JkT3JM
aW5rRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwog
CiAgICAgYm9vbCBoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50Jik7CiAKQEAgLTI2NiwxNCArMjYwLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgYXJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGhhbmRsZU1vdXNlVXAgYW5k
IGhhbmRsZURyYWcuICAKICAgICAvLyBJZiB0aGV5IHJldHVybiB0cnVlIGl0IGluZGljYXRlcyB0
aGF0IHRoZXkgaGF2ZSBjb25zdW1lZCB0aGUgZXZlbnQuCi0jaWYgUExBVEZPUk0oTUFDKQogICAg
IGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VVcChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJik7CiAgICAgYm9vbCBldmVudExvb3BIYW5kbGVNb3VzZURyYWdnZWQoY29uc3QgTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwotICAgIE5TVmlldyAqbW91c2VEb3duVmlld0lm
U3RpbGxHb29kKCk7Ci0jZWxzZQotICAgIGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VVcChjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBi
b29sIGV2ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJikgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgogCiAgICAgYm9vbCBpbnZlcnRT
ZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwogCkBAIC0yODEsNiArMjY5
LDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIGNhcHR1cmVzRHJhZ2dpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2NhcHR1cmVzRHJhZ2dpbmc7IH0KIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5l
ZChfX09CSkNfXykKKyAgICBOU1ZpZXcgKm1vdXNlRG93blZpZXdJZlN0aWxsR29vZCgpOworCisg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSBjb25zdDsK
KyNlbmRpZgorCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBib29sIG1fbW91c2VQcmVzc2Vk
OwpAQCAtMzA0LDYgKzI5OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2F1dG9zY3JvbGxJblBy
b2dyZXNzOwogICAgIGJvb2wgbV9tb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGw7CiAgICAgYm9v
bCBtX21vdXNlRG93bldhc0luU3ViZnJhbWU7CisKICNpZiBFTkFCTEUoU1ZHKQogICAgIGJvb2wg
bV9zdmdQYW47CiAgICAgUmVmUHRyPFNWR0VsZW1lbnRJbnN0YW5jZT4gbV9pbnN0YW5jZVVuZGVy
TW91c2U7CkBAIC0zMzgsNyArMzMzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2VuZGluZ0V2
ZW50VG9TdWJ2aWV3OwogICAgIGludCBtX2FjdGl2YXRpb25FdmVudE51bWJlcjsKICNlbmRpZgot
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ0MzA5
KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIy
MSw3IEBAIEZyYW1lVmlldyogRnJhbWU6OnZpZXcoKSBjb25zdAogICAgIHJldHVybiBtX3ZpZXcu
Z2V0KCk7CiB9CiAKLXZvaWQgRnJhbWU6OnNldFZpZXcoRnJhbWVWaWV3KiB2aWV3KQordm9pZCBG
cmFtZTo6c2V0VmlldyhQYXNzUmVmUHRyPEZyYW1lVmlldz4gdmlldykKIHsKICAgICAvLyBEZXRh
Y2ggdGhlIGRvY3VtZW50IG5vdywgc28gYW55IG9uVW5sb2FkIGhhbmRsZXJzIGdldCBydW4gLSBp
ZgogICAgIC8vIHdlIHdhaXQgdW50aWwgdGhlIHZpZXcgaXMgZGVzdHJveWVkLCB0aGVuIHRoaW5n
cyB3b24ndCBiZQpAQCAtMTc1MSwyMCArMTc1MSwxOCBAQCB2b2lkIEZyYW1lOjpjcmVhdGVWaWV3
KGNvbnN0IEludFNpemUmIHZpCiAKICAgICBzZXRWaWV3KDApOwogCi0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXc7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gZnJhbWVWaWV3OwogICAgIGlmIChpc01h
aW5GcmFtZSkgewotICAgICAgICBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KHRoaXMsIHZpZXdw
b3J0U2l6ZSk7CisgICAgICAgIGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRlKHRoaXMsIHZp
ZXdwb3J0U2l6ZSk7CiAgICAgICAgIGZyYW1lVmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKGZpeGVk
TGF5b3V0U2l6ZSk7CiAgICAgICAgIGZyYW1lVmlldy0+c2V0VXNlRml4ZWRMYXlvdXQodXNlRml4
ZWRMYXlvdXQpOwogICAgIH0gZWxzZQotICAgICAgICBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3
KHRoaXMpOworICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSh0aGlzKTsKIAog
ICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xsYmFyTW9kZXMoaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUs
IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7CiAgICAgZnJhbWVWaWV3LT51cGRhdGVEZWZhdWx0U2Ny
b2xsYmFyU3RhdGUoKTsKIAogICAgIHNldFZpZXcoZnJhbWVWaWV3KTsKLSAgICAvLyBGcmFtZVZp
ZXdzIGFyZSBjcmVhdGVkIHdpdGggYSByZWYgY291bnQgb2YgMS4gUmVsZWFzZSB0aGlzIHJlZiBz
aW5jZSB3ZSd2ZSBhc3NpZ25lZCBpdCB0byBmcmFtZS4KLSAgICBmcmFtZVZpZXctPmRlcmVmKCk7
CiAKICAgICBpZiAoYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgZnJhbWVWaWV3
LT51cGRhdGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVu
dCk7CkBAIC0xNzczLDcgKzE3NzEsNyBAQCB2b2lkIEZyYW1lOjpjcmVhdGVWaWV3KGNvbnN0IElu
dFNpemUmIHZpCiAgICAgICAgIGZyYW1lVmlldy0+c2V0UGFyZW50VmlzaWJsZSh0cnVlKTsKIAog
ICAgIGlmIChvd25lclJlbmRlcmVyKCkpCi0gICAgICAgIG93bmVyUmVuZGVyZXIoKS0+c2V0V2lk
Z2V0KGZyYW1lVmlldyk7CisgICAgICAgIG93bmVyUmVuZGVyZXIoKS0+c2V0V2lkZ2V0KGZyYW1l
Vmlldy5nZXQoKSk7CiAKICAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG93
bmVyRWxlbWVudCgpKQogICAgICAgICB2aWV3KCktPnNldENhbkhhdmVTY3JvbGxiYXJzKG93bmVy
LT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKSW5kZXg6IFdlYkNvcmUv
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lv
biA0NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01LDcg
KzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAyMDAwLTIwMDEgU2ltb24gSGF1c21hbm4g
PGhhdXNtYW5uQGtkZS5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAgIDIwMDAtMjAwMSBEaXJr
IE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBT
dGVmYW4gU2NoaW1hbnNraSA8MVN0ZWluQGdteC5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAy
MDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgpAQCAtOTEsNyArOTEsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lKHBhZ2UsIG93
bmVyRWxlbWVudCwgY2xpZW50KSk7CiAgICAgfQotICAgIHZvaWQgc2V0VmlldyhGcmFtZVZpZXcq
KTsKKyAgICB2b2lkIHNldFZpZXcoUGFzc1JlZlB0cjxGcmFtZVZpZXc+KTsKICAgICB+RnJhbWUo
KTsKICAgICAKICAgICB2b2lkIGluaXQoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCShyZXZpc2lvbiA0
NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAKICNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZp
c2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw4ICs5MCw3IEBAIHN0cnVjdCBTY2hlZHVsZWRFdmVudCB7CiB9OwogCiBGcmFtZVZp
ZXc6OkZyYW1lVmlldyhGcmFtZSogZnJhbWUpCi0gICAgOiBtX3JlZkNvdW50KDEpCi0gICAgLCBt
X2ZyYW1lKGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fdm1vZGUoU2Nyb2xs
YmFyQXV0bykKICAgICAsIG1faG1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAsIG1fc2xvd1JlcGFp
bnRPYmplY3RDb3VudCgwKQpAQCAtMTEzLDM1ICsxMTIsMjEgQEAgRnJhbWVWaWV3OjpGcmFtZVZp
ZXcoRnJhbWUqIGZyYW1lKQogICAgICwgbV9zZXROZWVkc0xheW91dFdhc0RlZmVycmVkKGZhbHNl
KQogewogICAgIGluaXQoKTsKLSAgICBzaG93KCk7CiB9CiAKLUZyYW1lVmlldzo6RnJhbWVWaWV3
KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUpCi0gICAgOiBtX3JlZkNv
dW50KDEpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV92bW9kZShTY3JvbGxiYXJBdXRv
KQotICAgICwgbV9obW9kZShTY3JvbGxiYXJBdXRvKQotICAgICwgbV9zbG93UmVwYWludE9iamVj
dENvdW50KDApCi0gICAgLCBtX2xheW91dFRpbWVyKHRoaXMsICZGcmFtZVZpZXc6OmxheW91dFRp
bWVyRmlyZWQpCi0gICAgLCBtX2xheW91dFJvb3QoMCkKLSAgICAsIG1fcG9zdExheW91dFRhc2tz
VGltZXIodGhpcywgJkZyYW1lVmlldzo6cG9zdExheW91dFRpbWVyRmlyZWQpCi0gICAgLCBtX25l
ZWRUb0luaXRTY3JvbGxiYXJzKHRydWUpCi0gICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCi0g
ICAgLCBtX2Jhc2VCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9tZWRpYVR5
cGUoInNjcmVlbiIpCi0gICAgLCBtX2VucXVldWVFdmVudHMoMCkKLSAgICAsIG1fb3ZlcmZsb3dT
dGF0dXNEaXJ0eSh0cnVlKQotICAgICwgbV92aWV3cG9ydFJlbmRlcmVyKDApCi0gICAgLCBtX3dh
c1Njcm9sbGVkQnlVc2VyKGZhbHNlKQotICAgICwgbV9pblByb2dyYW1tYXRpY1Njcm9sbChmYWxz
ZSkKLSAgICAsIG1fZGVmZXJyZWRSZXBhaW50VGltZXIodGhpcywgJkZyYW1lVmlldzo6ZGVmZXJy
ZWRSZXBhaW50VGltZXJGaXJlZCkKLSAgICAsIG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4o
dHJ1ZSkKLSAgICAsIG1fZGVmZXJTZXROZWVkc0xheW91dHMoMCkKLSAgICAsIG1fc2V0TmVlZHNM
YXlvdXRXYXNEZWZlcnJlZChmYWxzZSkKK1Bhc3NSZWZQdHI8RnJhbWVWaWV3PiBGcmFtZVZpZXc6
OmNyZWF0ZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgaW5pdCgpOwotICAgIFdpZGdldDo6c2V0RnJh
bWVSZWN0KEludFJlY3QoeCgpLCB5KCksIGluaXRpYWxTaXplLndpZHRoKCksIGluaXRpYWxTaXpl
LmhlaWdodCgpKSk7Ci0gICAgc2hvdygpOworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBh
ZG9wdFJlZihuZXcgRnJhbWVWaWV3KGZyYW1lKSk7CisgICAgdmlldy0+c2hvdygpOworICAgIHJl
dHVybiB2aWV3LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxGcmFtZVZpZXc+IEZyYW1lVmll
dzo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUpCit7Cisg
ICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGFkb3B0UmVmKG5ldyBGcmFtZVZpZXcoZnJhbWUp
KTsKKyAgICB2aWV3LT5XaWRnZXQ6OnNldEZyYW1lUmVjdChJbnRSZWN0KHZpZXctPnBvcygpLCBp
bml0aWFsU2l6ZSkpOworICAgIHZpZXctPnNob3coKTsKKyAgICByZXR1cm4gdmlldy5yZWxlYXNl
KCk7CiB9CiAKIEZyYW1lVmlldzo6fkZyYW1lVmlldygpCkBAIC0xNTYsNyArMTQxLDYgQEAgRnJh
bWVWaWV3Ojp+RnJhbWVWaWV3KCkKICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGZhbHNl
KTsgLy8gUmVtb3ZlIG5hdGl2ZSBzY3JvbGxiYXJzIG5vdyBiZWZvcmUgd2UgbG9zZSB0aGUgY29u
bmVjdGlvbiB0byB0aGUgSG9zdFdpbmRvdy4KICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihm
YWxzZSk7CiAgICAgCi0gICAgQVNTRVJUKG1fcmVmQ291bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1f
c2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX2VucXVldWVFdmVudHMp
OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFN0cmluZzsK
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOwogCi1jbGFzcyBGcmFtZVZpZXcg
OiBwdWJsaWMgU2Nyb2xsVmlldyB7CitjbGFzcyBGcmFtZVZpZXcgOiBwdWJsaWMgU2Nyb2xsVmll
dywgcHVibGljIFJlZkNvdW50ZWQ8RnJhbWVWaWV3PiB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlclZpZXc7CiAKLSAgICBGcmFtZVZpZXcoRnJhbWUqKTsKLSAgICBGcmFtZVZpZXco
RnJhbWUqLCBjb25zdCBJbnRTaXplJiBpbml0aWFsU2l6ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RnJhbWVWaWV3PiBjcmVhdGUoRnJhbWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFt
ZVZpZXc+IGNyZWF0ZShGcmFtZSosIGNvbnN0IEludFNpemUmIGluaXRpYWxTaXplKTsKIAogICAg
IHZpcnR1YWwgfkZyYW1lVmlldygpOwogCkBAIC02NCwxMCArNjQsNiBAQCBwdWJsaWM6CiAgICAg
RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZS5nZXQoKTsgfQogICAgIHZvaWQg
Y2xlYXJGcmFtZSgpOwogCi0gICAgdm9pZCByZWYoKSB7ICsrbV9yZWZDb3VudDsgfQotICAgIHZv
aWQgZGVyZWYoKSB7IGlmICghLS1tX3JlZkNvdW50KSBkZWxldGUgdGhpczsgfQotICAgIGJvb2wg
aGFzT25lUmVmKCkgeyByZXR1cm4gbV9yZWZDb3VudCA9PSAxOyB9Ci0KICAgICBpbnQgbWFyZ2lu
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbnMud2lkdGgoKTsgfSAvLyAtMSBtZWFucyBk
ZWZhdWx0CiAgICAgaW50IG1hcmdpbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lucy5o
ZWlnaHQoKTsgfSAvLyAtMSBtZWFucyBkZWZhdWx0CiAgICAgdm9pZCBzZXRNYXJnaW5XaWR0aChp
bnQpOwpAQCAtMTkwLDYgKzE4Niw4IEBAIHB1YmxpYzoKIAogCiBwcml2YXRlOgorICAgIEZyYW1l
VmlldyhGcmFtZSopOworCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgaW5pdCgpOwogCkBA
IC0yMjIsNyArMjIwLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgZG91YmxlIHNDdXJy
ZW50UGFpbnRUaW1lU3RhbXA7IC8vIHVzZWQgZm9yIGRldGVjdGluZyBkZWNvZGVkIHJlc291cmNl
IHRocmFzaCBpbiB0aGUgY2FjaGUKIAotICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CiAgICAgSW50
U2l6ZSBtX3NpemU7CiAgICAgSW50U2l6ZSBtX21hcmdpbnM7CiAgICAgT3duUHRyPEhhc2hTZXQ8
UmVuZGVyUGFydE9iamVjdCo+ID4gbV93aWRnZXRVcGRhdGVTZXQ7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGRvdWJsZSBFdmVu
dEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjE1OwogCi1zdGF0aWMgUmV0YWluUHRyPE5TRXZl
bnQ+JiBjdXJyZW50RXZlbnQoKQorc3RhdGljIFJldGFpblB0cjxOU0V2ZW50PiYgY3VycmVudE5T
RXZlbnRTbG90KCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0V2ZW50
PiwgZXZlbnQsICgpKTsKICAgICByZXR1cm4gZXZlbnQ7CkBAIC02OSwxOSArNjksNDYgQEAgc3Rh
dGljIFJldGFpblB0cjxOU0V2ZW50PiYgY3VycmVudEV2ZW50KAogCiBOU0V2ZW50ICpFdmVudEhh
bmRsZXI6OmN1cnJlbnROU0V2ZW50KCkKIHsKLSAgICByZXR1cm4gY3VycmVudEV2ZW50KCkuZ2V0
KCk7CisgICAgcmV0dXJuIGN1cnJlbnROU0V2ZW50U2xvdCgpLmdldCgpOworfQorCitjbGFzcyBD
dXJyZW50RXZlbnRTY29wZSA6IE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDdXJyZW50RXZl
bnRTY29wZShOU0V2ZW50ICopOworICAgIH5DdXJyZW50RXZlbnRTY29wZSgpOworCitwcml2YXRl
OgorICAgIFJldGFpblB0cjxOU0V2ZW50PiBtX3NhdmVkQ3VycmVudEV2ZW50OworI2lmbmRlZiBO
REVCVUcKKyAgICBSZXRhaW5QdHI8TlNFdmVudD4gbV9ldmVudDsKKyNlbmRpZgorfTsKKworaW5s
aW5lIEN1cnJlbnRFdmVudFNjb3BlOjpDdXJyZW50RXZlbnRTY29wZShOU0V2ZW50ICpldmVudCkK
KyAgICA6IG1fc2F2ZWRDdXJyZW50RXZlbnQoY3VycmVudE5TRXZlbnRTbG90KCkpCisjaWZuZGVm
IE5ERUJVRworICAgICwgbV9ldmVudChldmVudCkKKyNlbmRpZgoreworICAgIGN1cnJlbnROU0V2
ZW50U2xvdCgpID0gZXZlbnQ7Cit9CisKK2lubGluZSBDdXJyZW50RXZlbnRTY29wZTo6fkN1cnJl
bnRFdmVudFNjb3BlKCkKK3sKKyAgICBBU1NFUlQoY3VycmVudE5TRXZlbnRTbG90KCkgPT0gbV9l
dmVudCk7CisgICAgY3VycmVudE5TRXZlbnRTbG90KCkgPSBtX3NhdmVkQ3VycmVudEV2ZW50Owog
fQogCiBib29sIEV2ZW50SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICpldmVudCkKIHsKLSAg
ICBSZXRhaW5QdHI8TlNFdmVudD4gb2xkQ3VycmVudEV2ZW50ID0gY3VycmVudEV2ZW50KCk7Ci0g
ICAgY3VycmVudEV2ZW50KCkgPSBldmVudDsKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGxhdGZv
cm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgIGhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOwogCi0gICAgQVNT
RVJUKGN1cnJlbnRFdmVudCgpID09IGV2ZW50KTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IG9sZEN1
cnJlbnRFdmVudDsKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCwgcGFn
ZS0+Y2hyb21lKCktPnBsYXRmb3JtV2luZG93KCkpOworICAgIGhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CiAKICAgICByZXR1cm4gd2hlZWxFdmVudC5pc0FjY2VwdGVkKCk7CiB9CkBAIC0x
NjUsMjAgKzE5MiwxMiBAQCBib29sIEV2ZW50SGFuZGxlcjo6bmVlZHNLZXlib2FyZEV2ZW50RGlz
CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChOU0V2ZW50ICpldmVudCkKIHsKLSAgICBi
b29sIHJlc3VsdDsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBBU1NF
UlQoW2V2ZW50IHR5cGVdID09IE5TS2V5RG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNLZXlVcCk7
CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gb2xkQ3VycmVudEV2ZW50ID0gY3VycmVudEV2ZW50
KCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBldmVudDsKLQotICAgIHJlc3VsdCA9IGtleUV2ZW50
KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOwotICAgIAotICAgIEFTU0VSVChjdXJyZW50
RXZlbnQoKSA9PSBldmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBvbGRDdXJyZW50RXZlbnQ7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50
KTsKKyAgICByZXR1cm4ga2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7CiAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0yMjAsMTcgKzIzOSwxNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2CiAKIHN0YXRpYyBib29sIGxh
c3RFdmVudElzTW91c2VVcCgpCiB7Ci0gICAgLy8gTWFueSBBSyB3aWRnZXRzIHJ1biB0aGVpciBv
d24gZXZlbnQgbG9vcHMgYW5kIGNvbnN1bWUgZXZlbnRzIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3du
LgotICAgIC8vIFdoZW4gdGhleSBmaW5pc2gsIGN1cnJlbnRFdmVudCBpcyB0aGUgbW91c2VVcCB0
aGF0IHRoZXkgZXhpdGVkIG9uLiAgV2UgbmVlZCB0byB1cGRhdGUKLSAgICAvLyB0aGUga2h0bWwg
c3RhdGUgd2l0aCB0aGlzIG1vdXNlVXAsIHdoaWNoIGtodG1sIG5ldmVyIHNhdy4gIFRoaXMgbWV0
aG9kIGxldHMgdXMgZGV0ZWN0Ci0gICAgLy8gdGhhdCBzdGF0ZS4KKyAgICAvLyBNYW55IEFwcEtp
dCB3aWRnZXRzIHJ1biB0aGVpciBvd24gZXZlbnQgbG9vcHMgYW5kIGNvbnN1bWUgZXZlbnRzIHdo
aWxlIHRoZSBtb3VzZSBpcyBkb3duLgorICAgIC8vIFdoZW4gdGhleSBmaW5pc2gsIGN1cnJlbnRF
dmVudCBpcyB0aGUgbW91c2VVcCB0aGF0IHRoZXkgZXhpdGVkIG9uLiBXZSBuZWVkIHRvIHVwZGF0
ZQorICAgIC8vIHRoZSBXZWJDb3JlIHN0YXRlIHdpdGggdGhpcyBtb3VzZVVwLCB3aGljaCB3ZSBu
ZXZlciBzYXcuIFRoaXMgbWV0aG9kIGxldHMgdXMgZGV0ZWN0CisgICAgLy8gdGhhdCBzdGF0ZS4g
SGFuZGxpbmcgdGhpcyB3YXMgY3JpdGljYWwgd2hlbiB3ZSB1c2VkIEFwcEtpdCB3aWRnZXRzIGZv
ciBmb3JtIGVsZW1lbnRzLgorICAgIC8vIEl0J3Mgbm90IGNsZWFyIGluIHdoYXQgY2FzZXMgdGhp
cyBpcyBoZWxwZnVsIG5vdyAtLSBpdCdzIHBvc3NpYmxlIGl0IGNhbiBiZSByZW1vdmVkLiAKIAog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBOU0V2ZW50ICpjdXJyZW50RXZl
bnRBZnRlckhhbmRsaW5nTW91c2VEb3duID0gW05TQXBwIGN1cnJlbnRFdmVudF07Ci0gICAgaWYg
KGN1cnJlbnRFdmVudCgpICE9IGN1cnJlbnRFdmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gJiYK
LSAgICAgICAgW2N1cnJlbnRFdmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gdHlwZV0gPT0gTlNM
ZWZ0TW91c2VVcCAmJgotICAgICAgICBbY3VycmVudEV2ZW50QWZ0ZXJIYW5kbGluZ01vdXNlRG93
biB0aW1lc3RhbXBdID49IFtjdXJyZW50RXZlbnQoKS5nZXQoKSB0aW1lc3RhbXBdKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZl
bnQoKSAhPSBjdXJyZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duCisgICAgICAgICYmIFtj
dXJyZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duIHR5cGVdID09IE5TTGVmdE1vdXNlVXAK
KyAgICAgICAgJiYgW2N1cnJlbnRFdmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gdGltZXN0YW1w
XSA+PSBbRXZlbnRIYW5kbGVyOjpjdXJyZW50TlNFdmVudCgpIHRpbWVzdGFtcF07CiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTIzOCw3ICsy
NTcsOCBAQCBzdGF0aWMgYm9vbCBsYXN0RXZlbnRJc01vdXNlVXAoKQogCiBib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAg
Ly8gRklYTUU6IHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIHRydWUKKyAgICAvLyBGSVhNRTog
VGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyB0cnVlLiBJdCBzaG91bGQgYmUgY2hhbmdlZCBl
aXRoZXIgdG8gcmV0dXJuCisgICAgLy8gZmFsc2UgaW4gc29tZSBjYXNlcyBvciB0aGUgcmV0dXJu
IHZhbHVlIHNob3VsZCBiZSByZW1vdmVkLgogCiAgICAgaWYgKCF3aWRnZXQpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJoaXQgYSBSZW5kZXJXaWRnZXQgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgV2lk
Z2V0LCBtZWFucyBhIGZyYW1lIGlzIGhhbGYtY29uc3RydWN0ZWQiKTsKQEAgLTI1MCw3ICsyNzAs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XCiAgICAgTlNWaWV3
ICpub2RlVmlldyA9IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKTsKICAgICBBU1NFUlQobm9kZVZp
ZXcpOwogICAgIEFTU0VSVChbbm9kZVZpZXcgc3VwZXJ2aWV3XSk7Ci0gICAgTlNWaWV3ICp2aWV3
ID0gW25vZGVWaWV3IGhpdFRlc3Q6W1tub2RlVmlldyBzdXBlcnZpZXddIGNvbnZlcnRQb2ludDpb
Y3VycmVudEV2ZW50KCkuZ2V0KCkgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXV07Cisg
ICAgTlNWaWV3ICp2aWV3ID0gW25vZGVWaWV3IGhpdFRlc3Q6W1tub2RlVmlldyBzdXBlcnZpZXdd
IGNvbnZlcnRQb2ludDpbY3VycmVudE5TRXZlbnQoKSBsb2NhdGlvbkluV2luZG93XSBmcm9tVmll
dzpuaWxdXTsKICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgLy8gV2UgcHJvYmFibHkgaGl0IHRo
ZSBib3JkZXIgb2YgYSBSZW5kZXJXaWRnZXQKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjMs
NyArMjgzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvVwogICAg
IGlmIChwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZpcnN0UmVzcG9uZGVyKCkgIT0gdmlldykg
ewogICAgICAgICAvLyBOb3JtYWxseSBbTlNXaW5kb3cgc2VuZEV2ZW50Ol0gaGFuZGxlcyBzZXR0
aW5nIHRoZSBmaXJzdCByZXNwb25kZXIuCiAgICAgICAgIC8vIEJ1dCBpbiBvdXIgY2FzZSwgdGhl
IGV2ZW50IHdhcyBzZW50IHRvIHRoZSB2aWV3IHJlcHJlc2VudGluZyB0aGUgZW50aXJlIHdlYiBw
YWdlLgotICAgICAgICBpZiAoW2N1cnJlbnRFdmVudCgpLmdldCgpIGNsaWNrQ291bnRdIDw9IDEg
JiYgW3ZpZXcgYWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSAmJiBbdmlldyBuZWVkc1BhbmVsVG9CZWNv
bWVLZXldKQorICAgICAgICBpZiAoW2N1cnJlbnROU0V2ZW50KCkgY2xpY2tDb3VudF0gPD0gMSAm
JiBbdmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdICYmIFt2aWV3IG5lZWRzUGFuZWxUb0JlY29t
ZUtleV0pCiAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm1ha2VGaXJzdFJl
c3BvbmRlcih2aWV3KTsKICAgICB9CiAKQEAgLTI4MCw3ICszMDAsNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XCiAKICAgICBBU1NFUlQoIW1fc2VuZGluZ0V2ZW50
VG9TdWJ2aWV3KTsKICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IHRydWU7Ci0gICAgW3Zp
ZXcgbW91c2VEb3duOmN1cnJlbnRFdmVudCgpLmdldCgpXTsKKyAgICBbdmlldyBtb3VzZURvd246
Y3VycmVudE5TRXZlbnQoKV07CiAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsK
ICAgICAKICAgICBpZiAoIXdhc0RlZmVycmluZ0xvYWRpbmcpCkBAIC0zNTUsNyArMzc1LDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmV2ZW50TG9vcEhhbmRsZU1vdXNlRAogICAgICAgICBBU1NFUlQo
IW1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3KTsKICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZp
ZXcgPSB0cnVlOwogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgICAg
IFt2aWV3IG1vdXNlRHJhZ2dlZDpjdXJyZW50RXZlbnQoKS5nZXQoKV07CisgICAgICAgIFt2aWV3
IG1vdXNlRHJhZ2dlZDpjdXJyZW50TlNFdmVudCgpXTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsKICAg
ICB9CkBAIC0zODIsNyArNDAyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50TG9vcEhhbmRs
ZU1vdXNlVQogICAgICAgICBBU1NFUlQoIW1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3KTsKICAgICAg
ICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0cnVlOwogICAgICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0gICAgICAgIFt2aWV3IG1vdXNlVXA6Y3VycmVudEV2ZW50KCkuZ2V0
KCldOworICAgICAgICBbdmlldyBtb3VzZVVwOmN1cnJlbnROU0V2ZW50KCldOwogICAgICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgICAgICBtX3NlbmRpbmdFdmVudFRvU3Vidmll
dyA9IGZhbHNlOwogICAgIH0KQEAgLTM5NCw3ICs0MTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
cGFzc1N1YmZyYW1lRXZlbnRUb1N1CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogCi0gICAgc3dpdGNoIChbY3VycmVudEV2ZW50KCkuZ2V0KCkgdHlwZV0pIHsKKyAgICBzd2l0
Y2ggKFtjdXJyZW50TlNFdmVudCgpIHR5cGVdKSB7CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VE
cmFnZ2VkOgogICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZURyYWdnZWQ6CiAgICAgICAgIGNhc2Ug
TlNSaWdodE1vdXNlRHJhZ2dlZDoKQEAgLTQwNSwxMiArNDI1LDEyIEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3UKICAgICAgICAgICAgIGlmIChzdWJmcmFtZS0+cGFn
ZSgpLT5kcmFnQ29udHJvbGxlcigpLT5kaWRJbml0aWF0ZURyYWcoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgotICAgICAgICAgICAg
Ly8gU2luY2Ugd2UncmUgcGFzc2luZyBpbiBjdXJyZW50RXZlbnQoKSBoZXJlLCB3ZSBjYW4gY2Fs
bAorICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUgcGFzc2luZyBpbiBjdXJyZW50TlNFdmVudCgp
IGhlcmUsIHdlIGNhbiBjYWxsCiAgICAgICAgICAgICAvLyBoYW5kbGVNb3VzZU1vdmVFdmVudCgp
IGRpcmVjdGx5LCBzaW5jZSB0aGUgc2F2ZS9yZXN0b3JlIG9mCi0gICAgICAgICAgICAvLyBjdXJy
ZW50RXZlbnQoKSB0aGF0IG1vdXNlTW92ZWQoKSBkb2VzIHdvdWxkIGhhdmUgbm8gZWZmZWN0Lgor
ICAgICAgICAgICAgLy8gY3VycmVudE5TRXZlbnQoKSB0aGF0IG1vdXNlTW92ZWQoKSBkb2VzIHdv
dWxkIGhhdmUgbm8gZWZmZWN0LgogICAgICAgICAgICAgQVNTRVJUKCFtX3NlbmRpbmdFdmVudFRv
U3Vidmlldyk7CiAgICAgICAgICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IHRydWU7Ci0g
ICAgICAgICAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50
KGN1cnJlbnRFdmVudCgpLmdldCgpLCBob3ZlcmVkTm9kZSk7CisgICAgICAgICAgICBzdWJmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1v
dXNlRXZlbnQoKSwgaG92ZXJlZE5vZGUpOwogICAgICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1
YnZpZXcgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKQEAgLTQz
NCw3ICs0NTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgQVNTRVJUKCFtX3NlbmRp
bmdFdmVudFRvU3Vidmlldyk7CiAgICAgICAgICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9
IHRydWU7Ci0gICAgICAgICAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNl
UmVsZWFzZUV2ZW50KGN1cnJlbnRFdmVudCgpLmdldCgpKTsKKyAgICAgICAgICAgIHN1YmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY3VycmVudFBsYXRmb3Jt
TW91c2VFdmVudCgpKTsKICAgICAgICAgICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFs
c2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDg0LDEzICs1MDQs
MTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZQogewogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAgICAgCi0gICAgaWYgKFtjdXJyZW50RXZl
bnQoKS5nZXQoKSB0eXBlXSAhPSBOU1Njcm9sbFdoZWVsIHx8IG1fc2VuZGluZ0V2ZW50VG9TdWJ2
aWV3IHx8ICF3aWRnZXQpIAorICAgIGlmIChbY3VycmVudE5TRXZlbnQoKSB0eXBlXSAhPSBOU1Nj
cm9sbFdoZWVsIHx8IG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3IHx8ICF3aWRnZXQpIAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBOU1ZpZXcqIG5vZGVWaWV3ID0gd2lkZ2V0LT5wbGF0Zm9y
bVdpZGdldCgpOwogICAgIEFTU0VSVChub2RlVmlldyk7CiAgICAgQVNTRVJUKFtub2RlVmlldyBz
dXBlcnZpZXddKTsKLSAgICBOU1ZpZXcgKnZpZXcgPSBbbm9kZVZpZXcgaGl0VGVzdDpbW25vZGVW
aWV3IHN1cGVydmlld10gY29udmVydFBvaW50OltjdXJyZW50RXZlbnQoKS5nZXQoKSBsb2NhdGlv
bkluV2luZG93XSBmcm9tVmlldzpuaWxdXTsKKyAgICBOU1ZpZXcgKnZpZXcgPSBbbm9kZVZpZXcg
aGl0VGVzdDpbW25vZGVWaWV3IHN1cGVydmlld10gY29udmVydFBvaW50OltjdXJyZW50TlNFdmVu
dCgpIGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF1dOwogICAgIGlmICghdmlldykKICAg
ICAgICAgLy8gV2UgcHJvYmFibHkgaGl0IHRoZSBib3JkZXIgb2YgYSBSZW5kZXJXaWRnZXQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTAxLDcgKzUyMSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpwYXNzV2hlZWxFdmVudFRvV2lkZ2UKICAgICAvLyBjcmFzaCBpZiB0aGUgTlNTY3JvbGxWaWV3
IGlzIHJlbGVhc2VkIGR1cmluZyB0aW1lciBvciBuZXR3b3JrIGNhbGxiYWNrIGRpc3BhdGNoCiAg
ICAgLy8gaW4gdGhlIG5lc3RlZCB0cmFja2luZyBydW5sb29wIHRoYXQgLVtOU1Njcm9sbFZpZXcg
c2Nyb2xsV2hlZWw6XSBydW5zLgogICAgIHNldE5TU2Nyb2xsVmlld1Njcm9sbFdoZWVsU2hvdWxk
UmV0YWluU2VsZih0cnVlKTsKLSAgICBbdmlldyBzY3JvbGxXaGVlbDpjdXJyZW50RXZlbnQoKS5n
ZXQoKV07CisgICAgW3ZpZXcgc2Nyb2xsV2hlZWw6Y3VycmVudE5TRXZlbnQoKV07CiAgICAgc2V0
TlNTY3JvbGxWaWV3U2Nyb2xsV2hlZWxTaG91bGRSZXRhaW5TZWxmKGZhbHNlKTsKICAgICBtX3Nl
bmRpbmdFdmVudFRvU3VidmlldyA9IGZhbHNlOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTIyLDE0
ICs1NDIsOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VEb3duKE5TRXZlbnQgKmV2CiAKICAg
ICBtX21vdXNlRG93blZpZXcgPSBuaWw7CiAgICAgCi0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IG9s
ZEN1cnJlbnRFdmVudCA9IGN1cnJlbnRFdmVudCgpOwotICAgIGN1cnJlbnRFdmVudCgpID0gZXZl
bnQ7Ci0gICAgbV9tb3VzZURvd24gPSBQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpOwotICAgIAot
ICAgIGhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7Ci0gICAgCi0gICAgQVNTRVJUKGN1cnJl
bnRFdmVudCgpID09IGV2ZW50KTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IG9sZEN1cnJlbnRFdmVu
dDsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCk7CisgICAgbV9tb3VzZURvd24g
PSBjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCk7CisgICAgaGFuZGxlTW91c2VQcmVzc0V2ZW50
KG1fbW91c2VEb3duKTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CkBAIC01
NDIsMTMgKzU1Nyw4IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZURyYWdnZWQoTlNFdmVudCAK
IAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0cjxOU0V2
ZW50PiBvbGRDdXJyZW50RXZlbnQgPSBjdXJyZW50RXZlbnQoKTsKLSAgICBjdXJyZW50RXZlbnQo
KSA9IGV2ZW50OwotCi0gICAgaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQpOwotICAgIAotICAg
IEFTU0VSVChjdXJyZW50RXZlbnQoKSA9PSBldmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBv
bGRDdXJyZW50RXZlbnQ7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOworICAg
IGhhbmRsZU1vdXNlTW92ZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7CiAKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQpAQCAtNTYxLDggKzU3MSw3IEBAIHZvaWQg
RXZlbnRIYW5kbGVyOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW4KIAogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBvbGRDdXJyZW50RXZlbnQg
PSBjdXJyZW50RXZlbnQoKTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IGV2ZW50OworICAgIEN1cnJl
bnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKIAogICAgIC8vIE91ciBiZWhhdmlvciBoZXJlIGlz
IGEgbGl0dGxlIGRpZmZlcmVudCB0aGF0IFF0LiBRdCBhbHdheXMgc2VuZHMKICAgICAvLyBhIG1v
dXNlIHJlbGVhc2UgZXZlbnQsIGV2ZW4gZm9yIGEgZG91YmxlIGNsaWNrLiBUbyBjb3JyZWN0IHBy
b2JsZW1zCkBAIC01NzMsMTIgKzU4Miw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZVVwKE5T
RXZlbnQgKmV2ZW4KICAgICAvLyB0cmVhdGVkIGFzIGFub3RoZXIgZG91YmxlIGNsaWNrLiBIZW5j
ZSB0aGUgIiUgMiIgYmVsb3cuCiAgICAgaW50IGNsaWNrQ291bnQgPSBbZXZlbnQgY2xpY2tDb3Vu
dF07CiAgICAgaWYgKGNsaWNrQ291bnQgPiAwICYmIGNsaWNrQ291bnQgJSAyID09IDApCi0gICAg
ICAgIGhhbmRsZU1vdXNlRG91YmxlQ2xpY2tFdmVudChldmVudCk7CisgICAgICAgIGhhbmRsZU1v
dXNlRG91YmxlQ2xpY2tFdmVudChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkpOwogICAgIGVs
c2UKLSAgICAgICAgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwotICAgIAotICAgIEFT
U0VSVChjdXJyZW50RXZlbnQoKSA9PSBldmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBvbGRD
dXJyZW50RXZlbnQ7CisgICAgICAgIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGN1cnJlbnRQbGF0
Zm9ybU1vdXNlRXZlbnQoKSk7CiAgICAgCiAgICAgbV9tb3VzZURvd25WaWV3ID0gbmlsOwogCkBA
IC02NTcsMTUgKzY2Myw4IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKE5TRXZlbnQg
KmUKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLQotICAgIFJldGFpblB0cjxOU0V2ZW50PiBvbGRDdXJyZW50RXZlbnQgPSBjdXJyZW50RXZl
bnQoKTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IGV2ZW50OwotICAgIAotICAgIG1vdXNlTW92ZWQo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgCi0gICAgQVNTRVJUKGN1cnJlbnRFdmVu
dCgpID09IGV2ZW50KTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IG9sZEN1cnJlbnRFdmVudDsKLQor
ICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBtb3VzZU1vdmVkKGN1cnJl
bnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IH0KIApAQCAtNjk1LDQgKzY5NCwyOCBAQCB1bnNpZ25lZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tl
eU1vZGlmaWVyCiAgICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q3RybEtleSB8IFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5OwogfQogCitQbGF0Zm9ybU1vdXNlRXZlbnQgRXZl
bnRIYW5kbGVyOjpjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkgY29uc3QKK3sKKyAgICBOU1Zp
ZXcgKndpbmRvd1ZpZXcgPSBuaWw7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCkpCisgICAgICAgIHdpbmRvd1ZpZXcgPSBwYWdlLT5jaHJvbWUoKS0+cGxhdGZvcm1XaW5kb3co
KTsKKyAgICByZXR1cm4gUGxhdGZvcm1Nb3VzZUV2ZW50KGN1cnJlbnROU0V2ZW50KCksIHdpbmRv
d1ZpZXcpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQoTlNF
dmVudCAqZXZlbnQpCit7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc2VuZENvbnRleHRN
ZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBwYWdlLT5jaHJvbWUoKS0+cGxhdGZv
cm1XaW5kb3coKSkpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRNYXlTdGFydERyYWco
TlNFdmVudCAqZXZlbnQpCit7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZXZlbnRNYXlT
dGFydERyYWcoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBwYWdlLT5jaHJvbWUoKS0+cGxhdGZv
cm1XaW5kb3coKSkpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkocmV2aXNpb24g
NDQzMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTggKzI3LDEzIEBACiAjZGVmaW5lIEhvc3RXaW5kb3dfaAogCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIldpZGdldC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50UmVj
dDsKLQogY2xhc3MgSG9zdFdpbmRvdyA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBIb3N0
V2luZG93KCkge30KLSAgICB2aXJ0dWFsIH5Ib3N0V2luZG93KCkge30KKyAgICB2aXJ0dWFsIH5I
b3N0V2luZG93KCkgeyB9CiAKICAgICAvLyBUaGUgcmVwYWludCBtZXRob2QgYXNrcyB0aGUgaG9z
dCB3aW5kb3cgdG8gcmVwYWludCBhIHJlY3QgaW4gdGhlIHdpbmRvdydzIGNvb3JkaW5hdGUgc3Bh
Y2UuICBUaGUKICAgICAvLyBjb250ZW50Q2hhbmdlZCBib29sZWFuIGluZGljYXRlcyB3aGV0aGVy
IG9yIG5vdCB0aGUgV2ViIHBhZ2UgY29udGVudCBhY3R1YWxseSBjaGFuZ2VkIChvciBpZiBhIHJl
cGFpbnQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAkocmV2aXNpb24g
NDQzMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI2ICsyNyw2IEBA
CiAjZGVmaW5lIFBsYXRmb3JtTW91c2VFdmVudF9oCiAKICNpbmNsdWRlICJJbnRQb2ludC5oIgot
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2lmZGVmIF9f
T0JKQ19fCi1AY2xhc3MgTlNFdmVudDsKLUBjbGFzcyBOU1NjcmVlbjsKLUBjbGFzcyBOU1dpbmRv
dzsKLSNlbHNlCi1jbGFzcyBOU0V2ZW50OwotY2xhc3MgTlNTY3JlZW47Ci1jbGFzcyBOU1dpbmRv
dzsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi10eXBlZGVmIHN0cnVjdCBI
V05EX18qIEhXTkQ7Ci10eXBlZGVmIHVuc2lnbmVkIFVJTlQ7Ci10eXBlZGVmIHVuc2lnbmVkIFdQ
QVJBTTsKLXR5cGVkZWYgbG9uZyBMUEFSQU07Ci0jZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykK
IHR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKQEAgLTU5LDYg
KzM5LDEzIEBAIGNsYXNzIFFJbnB1dEV2ZW50OwogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShXSU4pCit0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVm
IHVuc2lnbmVkIFVJTlQ7Cit0eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKK3R5cGVkZWYgbG9uZyBM
UEFSQU07CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdYKQogY2xhc3Mgd3hNb3VzZUV2ZW50Owog
I2VuZGlmCkBAIC04NCw5ICs3MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsK
ICAgICAgICAgfQogCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChjb25zdCBJbnRQb2ludCYg
cG9zLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zLCBNb3VzZUJ1dHRvbiBidXR0b24sIE1vdXNl
RXZlbnRUeXBlIGV2ZW50VHlwZSwKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBNb3VzZUJ1
dHRvbiBidXR0b24sIE1vdXNlRXZlbnRUeXBlIGV2ZW50VHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjbGlja0NvdW50LCBib29sIHNoaWZ0LCBib29sIGN0cmwsIGJvb2wgYWx0
LCBib29sIG1ldGEsIGRvdWJsZSB0aW1lc3RhbXApCi0gICAgICAgICAgICA6IG1fcG9zaXRpb24o
cG9zKSwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3MpLCBtX2J1dHRvbihidXR0b24pCisgICAg
ICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZ2xvYmFsUG9z
aXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgICAgICAgICAsIG1fYnV0dG9uKGJ1dHRvbikKICAg
ICAgICAgICAgICwgbV9ldmVudFR5cGUoZXZlbnRUeXBlKQogICAgICAgICAgICAgLCBtX2NsaWNr
Q291bnQoY2xpY2tDb3VudCkKICAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdCkKQEAgLTEx
MiwzMiArMTAxLDM0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtZXRhS2V5
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9CiAgICAgICAgIHVuc2lnbmVkIG1vZGlmaWVy
RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX21vZGlmaWVyRmxhZ3M7IH0KICAgICAgICAgCi0gICAg
ICAgIC8vdGltZSBpbiBzZWNvbmRzCisgICAgICAgIC8vIFRpbWUgaW4gc2Vjb25kcy4KICAgICAg
ICAgZG91YmxlIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9CiAKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50Kik7Ci0g
ICAgICAgIGludCBldmVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnROdW1iZXI7IH0K
LSNlbmRpZgotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEhX
TkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNLCBib29sIGFjdGl2YXRlZFdlYlZpZXcgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgc2V0Q2xpY2tDb3VudChpbnQgY291bnQpIHsgbV9jbGlja0NvdW50ID0g
Y291bnQ7IH0KLSAgICAgICAgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmF0ZWRXZWJWaWV3OyB9Ci0jZW5kaWYKICNpZiBQTEFURk9STShHVEspIAogICAgICAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qKTsKICAgICAgICAgUGxhdGZvcm1N
b3VzZUV2ZW50KEdka0V2ZW50TW90aW9uKik7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykg
JiYgZGVmaW5lZChfX09CSkNfXykKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQg
KiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKKyAgICAgICAgaW50IGV2ZW50TnVtYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9ldmVudE51bWJlcjsgfQorI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KFFJbnB1dEV2ZW50KiwgaW50IGNsaWNrQ291bnQpOwog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChI
V05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSwgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3ID0gZmFsc2Up
OworICAgICAgICB2b2lkIHNldENsaWNrQ291bnQoaW50IGNvdW50KSB7IG1fY2xpY2tDb3VudCA9
IGNvdW50OyB9CisgICAgICAgIGJvb2wgYWN0aXZhdGVkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJu
IG1fYWN0aXZhdGVkV2ViVmlldzsgfQorI2VuZGlmCisKICNpZiBQTEFURk9STShXWCkKICAgICAg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IHd4TW91c2VFdmVudCYsIGNvbnN0IHd4UG9pbnQm
IGdsb2JhbFBvaW50LCBpbnQgY2xpY2tDb3VudCk7CiAjZW5kaWYKIAotCi0gICAgcHJvdGVjdGVk
OgorICAgIHByaXZhdGU6CiAgICAgICAgIEludFBvaW50IG1fcG9zaXRpb247CiAgICAgICAgIElu
dFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CiAgICAgICAgIE1vdXNlQnV0dG9uIG1fYnV0dG9uOwpA
QCAtMTQ5LDE4ICsxNDAsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1f
bWV0YUtleTsKICAgICAgICAgZG91YmxlIG1fdGltZXN0YW1wOyAvLyB1bml0OiBzZWNvbmRzCiAg
ICAgICAgIHVuc2lnbmVkIG1fbW9kaWZpZXJGbGFnczsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAgICAgaW50IG1fZXZlbnROdW1iZXI7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICAgICAgYm9vbCBtX2FjdGl2YXRlZFdlYlZpZXc7CiAjZW5kaWYKICAgICB9OwogCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIEludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRv
d1BvaW50LCBOU1dpbmRvdyAqd2luZG93KTsKLSAgICBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5T
RXZlbnQgKmV2ZW50KTsKLSAgICBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQg
KmV2ZW50KTsKKyNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQoX19PQkpDX18pCisgICAgSW50
UG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93ICop
OworICAgIEludFBvaW50IHBvaW50Rm9yRXZlbnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1Zp
ZXcpOworICAgIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqKTsKICNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1X
aGVlbEV2ZW50LmgJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCwyMCArMjgsNiBAQAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKIAotI2lmIFBM
QVRGT1JNKE1BQykKLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIE5TRXZlbnQ7Ci0jZWxzZQotY2xh
c3MgTlNFdmVudDsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi10eXBlZGVm
IHN0cnVjdCBIV05EX18qIEhXTkQ7Ci10eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKLXR5cGVkZWYg
bG9uZyBMUEFSQU07Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0
IF9HZGtFdmVudFNjcm9sbCBHZGtFdmVudFNjcm9sbDsKICNlbmRpZgpAQCAtNTIsNiArMzgsMTIg
QEAgY2xhc3MgUVdoZWVsRXZlbnQ7CiBRVF9FTkRfTkFNRVNQQUNFCiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKK3R5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKK3R5cGVkZWYgdW5zaWdu
ZWQgV1BBUkFNOwordHlwZWRlZiBsb25nIExQQVJBTTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0o
V1gpCiBjbGFzcyB3eE1vdXNlRXZlbnQ7CiBjbGFzcyB3eFBvaW50OwpAQCAtOTMsMjMgKzg1LDI3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhY2NlcHQoKSB7IG1faXNBY2Nl
cHRlZCA9IHRydWU7IH0KICAgICAgICAgdm9pZCBpZ25vcmUoKSB7IG1faXNBY2NlcHRlZCA9IGZh
bHNlOyB9CiAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChO
U0V2ZW50Kik7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIFBsYXRmb3JtV2hl
ZWxFdmVudChIV05ELCBXUEFSQU0sIExQQVJBTSwgYm9vbCBpc01vdXNlSFdoZWVsKTsKLSNlbmRp
ZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKik7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5lZChfX09CSkNf
XykKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dW
aWV3KTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudChRV2hlZWxFdmVudCopOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudChIV05ELCBXUEFSQU0sIExQQVJBTSwgYm9vbCBpc01vdXNlSFdo
ZWVsKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV1gpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudChjb25zdCB3eE1vdXNlRXZlbnQmLCBjb25zdCB3eFBvaW50Jik7CiAjZW5kaWYKIAotICAg
IHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwog
ICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwogICAgICAgICBmbG9hdCBtX2RlbHRh
WDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtTW91c2VFdmVudE1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybU1vdXNlRXZlbnRNYWMu
bW0JKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Nb3Vz
ZUV2ZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMiArNjgsMTIgQEAgc3RhdGljIGlu
dCBjbGlja0NvdW50Rm9yRXZlbnQoTlNFdmVudCAqZQogICAgIH0KIH0KIAotSW50UG9pbnQgZ2xv
YmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93KiB3aW5kb3cpCitJ
bnRQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5kb3cg
KndpbmRvdykKIHsKICAgICByZXR1cm4gSW50UG9pbnQoZmxpcFNjcmVlblBvaW50KFt3aW5kb3cg
Y29udmVydEJhc2VUb1NjcmVlbjp3aW5kb3dQb2ludF0sIHNjcmVlbkZvcldpbmRvdyh3aW5kb3cp
KSk7CiB9CiAKLUludFBvaW50IHBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCitJbnRQb2lu
dCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCiB7CiAg
ICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246
CkBAIC04NiwxMSArODYsMTQgQEAgSW50UG9pbnQgcG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVu
dCkKICAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKICAgICAgICAgY2FzZSBOU090aGVyTW91
c2VEcmFnZ2VkOgogICAgICAgICBjYXNlIE5TTW91c2VNb3ZlZDoKLSAgICAgICAgY2FzZSBOU1Nj
cm9sbFdoZWVsOgotICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBoYXMgaXRzIG9yaWdpbiBhdCB0
aGUgYm90dG9tIGxlZnQgb2YgdGhlIHdpbmRvdy4KLSAgICAgICAgICAgIC8vIFRoZSBZIGNvb3Jk
aW5hdGUgZ2V0cyBmbGlwcGVkIGJ5IFNjcm9sbFZpZXc6OnZpZXdwb3J0VG9Db250ZW50cy4KLSAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBwcm9iYWJseSBjaGFuZ2UgYm90aCB0aGlzIGFuZCB0aGF0
IHRvIG5vdCB1c2UgImJvdHRvbSBsZWZ0IG9yaWdpbiIgY29vcmRpbmF0ZXMgYXQgYWxsLgotICAg
ICAgICAgICAgcmV0dXJuIEludFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSk7CisgICAg
ICAgIGNhc2UgTlNTY3JvbGxXaGVlbDogeworICAgICAgICAgICAgLy8gTm90ZTogVGhpcyB3aWxs
IGhhdmUgaXRzIG9yaWdpbiBhdCB0aGUgYm90dG9tIGxlZnQgb2YgdGhlIHdpbmRvdyB1bmxlc3Mg
d2luZG93VmlldyBpcyBmbGlwcGVkLgorICAgICAgICAgICAgLy8gSW4gdGhvc2UgY2FzZXMsIHRo
ZSBZIGNvb3JkaW5hdGUgZ2V0cyBmbGlwcGVkIGJ5IFdpZGdldDo6Y29udmVydEZyb21Db250YWlu
aW5nV2luZG93LgorICAgICAgICAgICAgTlNQb2ludCBsb2NhdGlvbiA9IFtldmVudCBsb2NhdGlv
bkluV2luZG93XTsKKyAgICAgICAgICAgIGlmICh3aW5kb3dWaWV3KQorICAgICAgICAgICAgICAg
IGxvY2F0aW9uID0gW3dpbmRvd1ZpZXcgY29udmVydFBvaW50OmxvY2F0aW9uIGZyb21WaWV3Om5p
bF07CisgICAgICAgICAgICByZXR1cm4gSW50UG9pbnQobG9jYXRpb24pOworICAgICAgICB9CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKICAgICB9CkBA
IC0xMzksOCArMTQyLDggQEAgc3RhdGljIE1vdXNlRXZlbnRUeXBlIG1vdXNlRXZlbnRGb3JOU0V2
ZQogICAgIH0KIH0KIAotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoTlNF
dmVudCogZXZlbnQpCi0gICAgOiBtX3Bvc2l0aW9uKHBvaW50Rm9yRXZlbnQoZXZlbnQpKQorUGxh
dGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoTlNFdmVudCogZXZlbnQsIE5TVmll
dyAqd2luZG93VmlldykKKyAgICA6IG1fcG9zaXRpb24ocG9pbnRGb3JFdmVudChldmVudCwgd2lu
ZG93VmlldykpCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZl
bnQpKQogICAgICwgbV9idXR0b24obW91c2VCdXR0b25Gb3JFdmVudChldmVudCkpCiAgICAgLCBt
X2V2ZW50VHlwZShtb3VzZUV2ZW50Rm9yTlNFdmVudChldmVudCkpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9XaGVlbEV2ZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL1doZWVsRXZlbnRNYWMubW0JKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2hlZWxFdmVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1X
aGVlbEV2ZW50KE5TRXZlbnQqIGV2ZW50KQotICAgIDogbV9wb3NpdGlvbihwb2ludEZvckV2ZW50
KGV2ZW50KSkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KE5TRXZlbnQq
IGV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCisgICAgOiBtX3Bvc2l0aW9uKHBvaW50Rm9yRXZl
bnQoZXZlbnQsIHdpbmRvd1ZpZXcpKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb2lu
dEZvckV2ZW50KGV2ZW50KSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoU2Nyb2xsQnlQaXhlbFdoZWVs
RXZlbnQpCiAgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lk
Z2V0TWFjLm1tCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdl
dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg1LDcgKzI4NSw5IEBAIHZvaWQgV2lkZ2V0Ojph
ZnRlck1vdXNlRG93bihOU1ZpZXcgKnZpZXcKIAogSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIGlm
ICghcGxhdGZvcm1XaWRnZXQoKSAmJiBwYXJlbnQoKSkgeworICAgIGlmICghcGxhdGZvcm1XaWRn
ZXQoKSkgeworICAgICAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHBvaW50
OwogICAgICAgICBJbnRQb2ludCByZXN1bHQgPSBwYXJlbnQoKS0+Y29udmVydEZyb21Db250YWlu
aW5nV2luZG93KHBvaW50KTsKICAgICAgICAgcmVzdWx0Lm1vdmUocGFyZW50KCktPnNjcm9sbFgo
KSAtIHgoKSwgcGFyZW50KCktPnNjcm9sbFkoKSAtIHkoKSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0zMDAsNyArMzAyLDkgQEAgSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdXaQogCiBJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpICYm
IHBhcmVudCgpKSB7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIGlmICgh
cGFyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gcmVjdDsKICAgICAgICAgSW50UmVjdCByZXN1
bHQgPSBwYXJlbnQoKS0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93KHJlY3QpOwogICAgICAg
ICByZXN1bHQubW92ZShwYXJlbnQoKS0+c2Nyb2xsWCgpIC0geCgpLCBwYXJlbnQoKS0+c2Nyb2xs
WSgpIC0geSgpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFdlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TTUlMVGltZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
TUlMVGltZS5oCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw4ICs2Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFNNSUxUaW1lJiBhLCBjb25zdCBT
TUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpID4gYi52YWx1ZSgpIHx8IG9wZXJhdG9yPT0o
YSwgYik7IH0KICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IFNNSUxUaW1lJiBhLCBj
b25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gYS52YWx1ZSgpIDwgYi52YWx1ZSgpIHx8IG9wZXJh
dG9yPT0oYSwgYik7IH0KIAotICAgIGlubGluZSBTTUlMVGltZSBtYXgoY29uc3QgU01JTFRpbWUm
IGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBzdGQ6Om1heChhLnZhbHVlKCksIGIudmFs
dWUoKSk7IH0KLSAgICBpbmxpbmUgU01JTFRpbWUgbWluKGNvbnN0IFNNSUxUaW1lJiBhLCBjb25z
dCBTTUlMVGltZSYgYikgeyByZXR1cm4gc3RkOjptaW4oYS52YWx1ZSgpLCBiLnZhbHVlKCkpOyB9
CiAgICAgU01JTFRpbWUgb3BlcmF0b3IrKGNvbnN0IFNNSUxUaW1lJiwgY29uc3QgU01JTFRpbWUm
KTsKICAgICBTTUlMVGltZSBvcGVyYXRvci0oY29uc3QgU01JTFRpbWUmLCBjb25zdCBTTUlMVGlt
ZSYpOwogICAgIC8vIFNvIG11bHRpcGx5aW5nIHRpbWVzIGRvZXMgbm90IG1ha2UgdG9vIG11Y2gg
c2Vuc2UgYnV0IFNNSUwgZGVmaW5lcyBpdCBmb3IgZHVyYXRpb24gKiByZXBlYXRDb3VudApJbmRl
eDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDEyICszMCwxNCBAQAog
CiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisj
aW5jbHVkZSAiRW1wdHlDbGllbnRzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxl
bWVudC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZl
ci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC00Niw4
ICs0OCw2IEBACiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNldHRpbmdz
LmgiCiAKLSNpbmNsdWRlICJFbXB0eUNsaWVudHMuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBTVkdJbWFnZUNocm9tZUNsaWVudCA6IHB1YmxpYyBFbXB0eUNocm9tZUNsaWVudCB7
CkBAIC03NiwzNiArNzYsMzMgQEAgcHJpdmF0ZToKIAogU1ZHSW1hZ2U6OlNWR0ltYWdlKEltYWdl
T2JzZXJ2ZXIqIG9ic2VydmVyKQogICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAgLCBtX2RvY3Vt
ZW50KDApCi0gICAgLCBtX2Nocm9tZUNsaWVudCgwKQotICAgICwgbV9wYWdlKDApCi0gICAgLCBt
X2ZyYW1lKDApCi0gICAgLCBtX2ZyYW1lVmlldygwKQogewogfQogCiBTVkdJbWFnZTo6flNWR0lt
YWdlKCkKIHsKLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmZy
YW1lRGV0YWNoZWQoKTsgLy8gQnJlYWsgYm90aCB0aGUgbG9hZGVyIGFuZCB2aWV3IHJlZmVyZW5j
ZXMgdG8gdGhlIGZyYW1lCisgICAgaWYgKG1fcGFnZSkgeworICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLT5sb2FkZXIoKS0+ZnJhbWVEZXRhY2hlZCgpOyAvLyBCcmVhayBib3RoIHRoZSBsb2Fk
ZXIgYW5kIHZpZXcgcmVmZXJlbmNlcyB0byB0aGUgZnJhbWUKKworICAgICAgICAvLyBDbGVhciBl
eHBsaWNpdGx5IGJlY2F1c2Ugd2Ugd2FudCB0byBkZWxldGUgdGhlIHBhZ2UgYmVmb3JlIHRoZSBD
aHJvbWVDbGllbnQuCisgICAgICAgIC8vIEZJWE1FOiBJIGJlbGlldmUgdGhhdCdzIGFscmVhZHkg
Z3VhcmFudGVlZCBieSBDKysgb2JqZWN0IGRlc3RydWN0aW9uIHJ1bGVzLAorICAgICAgICAvLyBz
byB0aGlzIG1heSBtYXR0ZXIgb25seSBmb3IgdGhlIGFzc2VydGlvbiBiZWxvdy4KKyAgICAgICAg
bV9wYWdlLmNsZWFyKCk7CisgICAgfQogCi0gICAgLy8gQ2xlYXIgdGhlc2UgbWFudWFsbHkgc28g
d2UgY2FuIHNhZmVseSBkZWxldGUgdGhlIENocm9tZUNsaWVudCBhZnRlcndhcmRzCi0gICAgbV9m
cmFtZVZpZXcuY2xlYXIoKTsKLSAgICBtX2ZyYW1lLmNsZWFyKCk7Ci0gICAgbV9wYWdlLmNsZWFy
KCk7Ci0gICAgCiAgICAgLy8gVmVyaWZ5IHRoYXQgcGFnZSB0ZWFyZG93biBkZXN0cm95ZWQgdGhl
IENocm9tZQogICAgIEFTU0VSVCghbV9jaHJvbWVDbGllbnQtPmltYWdlKCkpOwogfQogCiB2b2lk
IFNWR0ltYWdlOjpzZXRDb250YWluZXJTaXplKGNvbnN0IEludFNpemUmIGNvbnRhaW5lclNpemUp
CiB7Ci0gICAgaWYgKGNvbnRhaW5lclNpemUud2lkdGgoKSA8PSAwIHx8IGNvbnRhaW5lclNpemUu
aGVpZ2h0KCkgPD0gMCkKKyAgICBpZiAoY29udGFpbmVyU2l6ZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fcGFnZSkKICAgICAgICAg
cmV0dXJuOwotICAgIFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
RG9jdW1lbnQqPihtX2ZyYW1lLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKKyAgICBGcmFt
ZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIFNWR1NWR0VsZW1lbnQqIHJvb3RF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihmcmFtZS0+ZG9jdW1lbnQoKSktPnJv
b3RFbGVtZW50KCk7CiAgICAgaWYgKCFyb290RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMTQsOSArMTExLDEwIEBAIHZvaWQgU1ZHSW1hZ2U6OnNldENvbnRhaW5lclNpemUoY29uc3Qg
SW4KIAogYm9vbCBTVkdJbWFnZTo6dXNlc0NvbnRhaW5lclNpemUoKSBjb25zdAogewotICAgIGlm
ICghbV9mcmFtZSkKKyAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPiht
X2ZyYW1lLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBt
X3BhZ2UtPm1haW5GcmFtZSgpOworICAgIFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihmcmFtZS0+ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7
CiAgICAgaWYgKCFyb290RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMjUs
MTAgKzEyMywxMCBAQCBib29sIFNWR0ltYWdlOjp1c2VzQ29udGFpbmVyU2l6ZSgpIGNvbnN0CiAK
IEludFNpemUgU1ZHSW1hZ2U6OnNpemUoKSBjb25zdAogewotICAgIGlmICghbV9mcmFtZSkKKyAg
ICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLSAgICAKLSAgICBTVkdT
VkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4obV9mcmFt
ZS0+ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdl
LT5tYWluRnJhbWUoKTsKKyAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0RvY3VtZW50Kj4oZnJhbWUtPmRvY3VtZW50KCkpLT5yb290RWxlbWVudCgpOwogICAg
IGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CiAgICAgCkBAIC0x
NTEsOSArMTQ5LDkgQEAgSW50U2l6ZSBTVkdJbWFnZTo6c2l6ZSgpIGNvbnN0CiAKIGJvb2wgU1ZH
SW1hZ2U6Omhhc1JlbGF0aXZlV2lkdGgoKSBjb25zdAogewotICAgIGlmICghbV9mcmFtZSkKKyAg
ICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFNWR1NWR0VsZW1lbnQq
IHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihtX2ZyYW1lLT5kb2N1bWVu
dCgpKS0+cm9vdEVsZW1lbnQoKTsKKyAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0
YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4obV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSkt
PnJvb3RFbGVtZW50KCk7CiAgICAgaWYgKCFyb290RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC0xNjIsOSArMTYwLDkgQEAgYm9vbCBTVkdJbWFnZTo6aGFzUmVsYXRpdmVXaWR0
aCgpIGNvbnN0CiAKIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3Vt
ZW50Kj4obV9mcmFtZS0+ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7CisgICAgU1ZHU1ZHRWxl
bWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KG1fcGFnZS0+bWFp
bkZyYW1lKCktPmRvY3VtZW50KCkpLT5yb290RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTczLDIyICsxNzEsMjQgQEAgYm9vbCBT
VkdJbWFnZTo6aGFzUmVsYXRpdmVIZWlnaHQoKSBjb25zdAogCiB2b2lkIFNWR0ltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewot
ICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwotICAg
IAorCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS0+dmlldygpOwor
CiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlv
bihjb21wb3NpdGVPcCk7CiAgICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGRzdFJl
Y3QpKTsKICAgICBpZiAoY29tcG9zaXRlT3AgIT0gQ29tcG9zaXRlU291cmNlT3ZlcikKLSAgICAg
ICAgY29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxLjBmKTsKKyAgICAgICAgY29udGV4
dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsKICAgICBjb250ZXh0LT50cmFuc2xhdGUoZHN0
UmVjdC5sb2NhdGlvbigpLngoKSwgZHN0UmVjdC5sb2NhdGlvbigpLnkoKSk7Ci0gICAgY29udGV4
dC0+c2NhbGUoRmxvYXRTaXplKGRzdFJlY3Qud2lkdGgoKS9zcmNSZWN0LndpZHRoKCksIGRzdFJl
Y3QuaGVpZ2h0KCkvc3JjUmVjdC5oZWlnaHQoKSkpOworICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZShkc3RSZWN0LndpZHRoKCkgLyBzcmNSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkg
LyBzcmNSZWN0LmhlaWdodCgpKSk7CiAKLSAgICBtX2ZyYW1lLT52aWV3KCktPnJlc2l6ZShzaXpl
KCkpOworICAgIHZpZXctPnJlc2l6ZShzaXplKCkpOwogCi0gICAgaWYgKG1fZnJhbWUtPnZpZXco
KS0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgbV9mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKLSAg
ICBtX2ZyYW1lLT52aWV3KCktPnBhaW50KGNvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVj
dCkpOworICAgIGlmICh2aWV3LT5uZWVkc0xheW91dCgpKQorICAgICAgICB2aWV3LT5sYXlvdXQo
KTsKKyAgICB2aWV3LT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KHNyY1JlY3QpKTsK
IAogICAgIGlmIChjb21wb3NpdGVPcCAhPSBDb21wb3NpdGVTb3VyY2VPdmVyKQogICAgICAgICBj
b250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwpAQCAtMjA1LDIwICsyMDUsMjIgQEAgTmF0
aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAgIC8vIGZyYW1lIGNhY2hl
LCBvciBiZXR0ZXIgeWV0LCBub3QgdXNlIGEgY2FjaGUgZm9yIHRpbGVkIGRyYXdpbmcgYXQgYWxs
LCBpbnN0ZWFkCiAgICAgLy8gaGF2aW5nIGEgdGlsZWQgZHJhd2luZyBjYWxsYmFjayAoaG9wZWZ1
bGx5IG5vbi12aXJ0dWFsKS4KICAgICBpZiAoIW1fZnJhbWVDYWNoZSkgeworICAgICAgICBpZiAo
IW1fcGFnZSkKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgZmFsc2UpOwogICAgICAgICBpZiAoIW1fZnJhbWVD
YWNoZSkgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgcmVuZGVyU3VidHJlZVRvSW1hZ2UobV9mcmFtZUNhY2hlLmdldCgpLCBtX2ZyYW1l
LT5jb250ZW50UmVuZGVyZXIoKSk7CisgICAgICAgIHJlbmRlclN1YnRyZWVUb0ltYWdlKG1fZnJh
bWVDYWNoZS5nZXQoKSwgbV9wYWdlLT5tYWluRnJhbWUoKS0+Y29udGVudFJlbmRlcmVyKCkpOwog
ICAgIH0KICAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5pbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogfQogCiBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERh
dGFSZWNlaXZlZCkKIHsKLSAgICBpbnQgbGVuZ3RoID0gbV9kYXRhLT5zaXplKCk7Ci0gICAgaWYg
KCFsZW5ndGgpIC8vIGlmIHRoaXMgd2FzIGFuIGVtcHR5IGltYWdlCisgICAgLy8gRG9uJ3QgZG8g
YW55dGhpbmcgaWYgaXMgYW4gZW1wdHkgaW1hZ2UuCisgICAgaWYgKCFtX2RhdGEtPnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCisKICAgICBpZiAoYWxsRGF0YVJlY2VpdmVkKSB7
CiAgICAgICAgIHN0YXRpYyBGcmFtZUxvYWRlckNsaWVudCogZHVtbXlGcmFtZUxvYWRlckNsaWVu
dCA9ICBuZXcgRW1wdHlGcmFtZUxvYWRlckNsaWVudDsKICAgICAgICAgc3RhdGljIEVkaXRvckNs
aWVudCogZHVtbXlFZGl0b3JDbGllbnQgPSBuZXcgRW1wdHlFZGl0b3JDbGllbnQ7CkBAIC0yMjgs
MjggKzIzMCwyOSBAQCBib29sIFNWR0ltYWdlOjpkYXRhQ2hhbmdlZChib29sIGFsbERhdGFSCiAK
ICAgICAgICAgbV9jaHJvbWVDbGllbnQuc2V0KG5ldyBTVkdJbWFnZUNocm9tZUNsaWVudCh0aGlz
KSk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBTVkcgZW5kcyB1cCBsb2Fk
aW5nIGl0c2VsZiwgd2UnbGwgbGVhayB0aGlzIEZyYW1lIChhbmQgYXNzb2NpYXRlZCBET00gJiBy
ZW5kZXIgdHJlZXMpLgotICAgICAgICAvLyBUaGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93IGFi
b3V0IENhY2hlZEltYWdlcyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBicmVhayB0
aGUgY3ljbGUuCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIFNWRyBlbmRzIHVwIGxvYWRpbmcg
aXRzZWxmLCB3ZSBtaWdodCBsZWFrIHRoZSB3b3JsZC4KKyAgICAgICAgLy8gVEhlIGNvbW1lbnQg
c2FpZCB0aGF0IHRoZSBDYWNoZSBjb2RlIGRvZXMgbm90IGtub3cgYWJvdXQgQ2FjaGVkSW1hZ2Vz
CisgICAgICAgIC8vIGhvbGRpbmcgRnJhbWVzIGFuZCB3b24ndCBrbm93IHRvIGJyZWFrIHRoZSBj
eWNsZS4gQnV0IAogICAgICAgICBtX3BhZ2Uuc2V0KG5ldyBQYWdlKG1fY2hyb21lQ2xpZW50Lmdl
dCgpLCBkdW1teUNvbnRleHRNZW51Q2xpZW50LCBkdW1teUVkaXRvckNsaWVudCwgZHVtbXlEcmFn
Q2xpZW50LCBkdW1teUluc3BlY3RvckNsaWVudCkpOwogICAgICAgICBtX3BhZ2UtPnNldHRpbmdz
KCktPnNldEphdmFTY3JpcHRFbmFibGVkKGZhbHNlKTsKICAgICAgICAgbV9wYWdlLT5zZXR0aW5n
cygpLT5zZXRQbHVnaW5zRW5hYmxlZChmYWxzZSk7CiAKLSAgICAgICAgbV9mcmFtZSA9IEZyYW1l
OjpjcmVhdGUobV9wYWdlLmdldCgpLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsKLSAgICAg
ICAgbV9mcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KG1fZnJhbWUuZ2V0KCkpOwotICAgICAgICBt
X2ZyYW1lVmlldy0+ZGVyZWYoKTsgLy8gRklYTUU6IEZyYW1lVmlldyBzdGFydHMgd2l0aCBhIHJl
ZmNvdW50IG9mIDEKLSAgICAgICAgbV9mcmFtZS0+c2V0VmlldyhtX2ZyYW1lVmlldy5nZXQoKSk7
Ci0gICAgICAgIG1fZnJhbWUtPmluaXQoKTsKKyAgICAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9
IEZyYW1lOjpjcmVhdGUobV9wYWdlLmdldCgpLCAwLCBkdW1teUZyYW1lTG9hZGVyQ2xpZW50KTsK
KyAgICAgICAgZnJhbWUtPnNldFZpZXcoRnJhbWVWaWV3OjpjcmVhdGUoZnJhbWUuZ2V0KCkpKTsK
KyAgICAgICAgZnJhbWUtPmluaXQoKTsKICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IGZha2VSZXF1
ZXN0KEtVUkwoIiIpKTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmxvYWQoZmFrZVJlcXVl
c3QsIGZhbHNlKTsgLy8gTWFrZSBzdXJlIHRoZSBEb2N1bWVudExvYWRlciBpcyBjcmVhdGVkCi0g
ICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxDb250ZW50UG9saWN5Q2hlY2soKTsgLy8g
Y2FuY2VsIGFueSBwb2xpY3kgY2hlY2tzCi0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jb21t
aXRQcm92aXNpb25hbExvYWQoMCk7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5zZXRSZXNw
b25zZU1JTUVUeXBlKCJpbWFnZS9zdmcreG1sIik7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigp
LT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUgdGhlIGVtcHR5IGRvY3VtZW50Ci0gICAgICAgIG1f
ZnJhbWUtPmxvYWRlcigpLT53cml0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOwot
ICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZW5kKCk7Ci0gICAgICAgIG1fZnJhbWVWaWV3LT5z
ZXRUcmFuc3BhcmVudCh0cnVlKTsgLy8gU1ZHIEltYWdlcyBhcmUgdHJhbnNwYXJlbnQuCisgICAg
ICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CisgICAgICAgIGxvYWRl
ci0+bG9hZChmYWtlUmVxdWVzdCwgZmFsc2UpOyAvLyBNYWtlIHN1cmUgdGhlIERvY3VtZW50TG9h
ZGVyIGlzIGNyZWF0ZWQKKyAgICAgICAgbG9hZGVyLT5jYW5jZWxDb250ZW50UG9saWN5Q2hlY2so
KTsgLy8gY2FuY2VsIGFueSBwb2xpY3kgY2hlY2tzCisgICAgICAgIGxvYWRlci0+Y29tbWl0UHJv
dmlzaW9uYWxMb2FkKDApOworICAgICAgICBsb2FkZXItPnNldFJlc3BvbnNlTUlNRVR5cGUoImlt
YWdlL3N2Zyt4bWwiKTsKKyAgICAgICAgbG9hZGVyLT5iZWdpbihLVVJMKCkpOyAvLyBjcmVhdGUg
dGhlIGVtcHR5IGRvY3VtZW50CisgICAgICAgIGxvYWRlci0+d3JpdGUobV9kYXRhLT5kYXRhKCks
IG1fZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgbG9hZGVyLT5lbmQoKTsKKyAgICAgICAgZnJhbWUt
PnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJlIHRyYW5zcGFy
ZW50LgogICAgIH0KLSAgICByZXR1cm4gbV9mcmFtZVZpZXc7CisKKyAgICByZXR1cm4gbV9wYWdl
OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHJldmlzaW9uIDQ0MzA5KQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJpYyBTZWlkZWwgKGVyaWNAd2Vi
a2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDE1ICszMCwxMCBA
QAogI2lmIEVOQUJMRShTVkcpCiAKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotICAgIGNsYXNzIFNWR0RvY3VtZW50OwotICAg
IGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEZyYW1lVmlldzsKKworICAgIGNsYXNzIEltYWdlQnVm
ZmVyOwogICAgIGNsYXNzIFBhZ2U7CiAgICAgY2xhc3MgU1ZHSW1hZ2VDaHJvbWVDbGllbnQ7CiAg
ICAgCkBAIC03MiwxMiArNjgsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CiAgICAgICAgIAotICAgICAgICBTVkdEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICAgICAgT3du
UHRyPFNWR0ltYWdlQ2hyb21lQ2xpZW50PiBtX2Nocm9tZUNsaWVudDsKICAgICAgICAgT3duUHRy
PFBhZ2U+IG1fcGFnZTsKLSAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwotICAgICAgICBS
ZWZQdHI8RnJhbWVWaWV3PiBtX2ZyYW1lVmlldzsKLSAgICAgICAgSW50U2l6ZSBtX21pblNpemU7
CiAgICAgICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9mcmFtZUNhY2hlOwogICAgIH07CiB9Cklu
ZGV4OiBXZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDQ0MzA5KQorKysgV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDkgQEAKKzIwMDktMDUtMzEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIu
aC9tbS4KKwogMjAwOS0wNS0yOCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNiAr
MTIyLDggQEAKIAkJOTM0QzExNjcwRDg3MTBCQjAwQzMyQUJEIC8qIFdlYkR5bmFtaWNTY3JvbGxC
YXJzVmlld0ludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzRDMTE2NjBEODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNW
aWV3SW50ZXJuYWwuaCAqLzsgfTsKIAkJOTM0QzRBOTEwRjAxNDA2QzAwOTM3MkMwIC8qIFdlYk5T
T2JqZWN0RXh0cmFzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTM0QzRBOTAwRjAxNDA2QzAwOTM3MkMwIC8qIFdlYk5TT2JqZWN0RXh0cmFzLm1tICov
OyB9OwogCQk5MzRDNEFBMDBGMDE0MUY3MDA5MzcyQzAgLyogV2ViUmVzb3VyY2VJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM0QzRBOUYw
RjAxNDFGNzAwOTM3MkMwIC8qIFdlYlJlc291cmNlSW50ZXJuYWwuaCAqLzsgfTsKKwkJOTM2QTJE
RTgwRkQyRDA4MDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNkEyREU3MEZEMkQw
ODAwMEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gKi87IH07CisJCTkz
NkEyREVBMEZEMkQwODQwMEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNkEyREU5MEZE
MkQwODQwMEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJ
OTM5ODEwMTEwODI0QkYwMTAwOERGMDM4IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwN0QwMjBGNTBFRDBF
Q0ExNzY3IC8qIFdlYkJhY2tGb3J3YXJkTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJOTM5ODEwMTIwODI0QkYwMTAwOERGMDM4IC8qIFdlYkhp
c3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1
MjBGQjE5MDIyMURFRkQwMUMxQTUyNSAvKiBXZWJIaXN0b3J5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5Mzk4MTAxMzA4MjRCRjAxMDA4REYwMzgg
LyogV2ViSGlzdG9yeUl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDM5NDQ2MDdGMDIwRjUwRUQwRUNBMTc2NyAvKiBXZWJIaXN0b3J5SXRlbS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKQEAgLTUzNyw2ICs1
MzksOCBAQAogCQk5MzRDMTE2NjBEODcxMEJCMDBDMzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJh
cnNWaWV3SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRHlu
YW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOTM0QzRBOTAwRjAxNDA2QzAwOTM3MkMwIC8qIFdlYk5TT2JqZWN0RXh0cmFzLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViTlNPYmplY3RFeHRyYXMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzNEM0QTlGMEYwMTQxRjcwMDkzNzJDMCAv
KiBXZWJSZXNvdXJjZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlJlc291cmNlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM2
QTJERTcwRkQyRDA4MDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlRleHRDb21wbGV0aW9u
Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM2QTJERTkwRkQy
RDA4NDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5ODExMzIwODI0QkYwMTAwOERGMDM4IC8qIElu
Zm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1sOyBuYW1lID0gSW5mby5wbGlzdDsgcGF0
aCA9IG1hYy9JbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAxOyB9OwogCQk5Mzk4MTEzMzA4MjRCRjAxMDA4REYwMzggLyogV2ViS2l0
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gd3JhcHBlci5mcmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYktpdC5m
cmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTkzQUVCMTdE
MDMyQzE3MzUwMDg2MzVDRSAvKiBXZWJLaXRMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0TG9nZ2luZy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTEwNjQsNiAr
MTA2OCw4IEBACiAJCQkJN0U2RkVGMDYwODk4NUE3MjAwQzQ0QzNGIC8qIFdlYlNjcmlwdERlYnVn
RGVsZWdhdGUubW0gKi8sCiAJCQkJQzAxNjdCRjYwRDdGNUREMDAwMjg2OTZFIC8qIFdlYlNjcmlw
dERlYnVnZ2VyLmggKi8sCiAJCQkJQzAxNjdCRjcwRDdGNUREMDAwMjg2OTZFIC8qIFdlYlNjcmlw
dERlYnVnZ2VyLm1tICovLAorCQkJCTkzNkEyREU5MEZEMkQwODQwMEQzMTJEQiAvKiBXZWJUZXh0
Q29tcGxldGlvbkNvbnRyb2xsZXIuaCAqLywKKwkJCQk5MzZBMkRFNzBGRDJEMDgwMDBEMzEyREIg
LyogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tICovLAogCQkJCUY4MzRBQUQ1MEU2NEIx
QzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IuaCAqLywKIAkJCQlGODM0QUFENjBFNjRCMUM3
MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLm1tICovLAogCQkJCTUxNUUyN0NDMDQ1OEM4NjUw
MENBMkQzQSAvKiBXZWJVSURlbGVnYXRlLmggKi8sCkBAIC0xNDE2LDYgKzE0MjIsNyBAQAogCQkJ
CUFCOUZCQkJCMEY4NTgyQjAwMDZBREM0MyAvKiBXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTBBRUJGRjYzMEY5RkE4QkUwMDBENDg2QiAvKiBXZWJOZXRzY2Fw
ZUNvbnRhaW5lckNoZWNrUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEFCNzUyMzcwRkEy
RTREQjAwRDdDQkIxIC8qIFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hlY2tDb250ZXh0SW5mby5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJOTM2QTJERUEwRkQyRDA4NDAwRDMxMkRCIC8qIFdlYlRleHRDb21w
bGV0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xNzQyLDYgKzE3NDksNyBAQAog
CQkJCTBBRUJGRjY0MEY5RkE4QkUwMDBENDg2QiAvKiBXZWJOZXRzY2FwZUNvbnRhaW5lckNoZWNr
UHJpdmF0ZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBBQjc1MjM4MEZBMkU0REIwMEQ3Q0JCMSAv
KiBXZWJOZXRzY2FwZUNvbnRhaW5lckNoZWNrQ29udGV4dEluZm8ubW0gaW4gU291cmNlcyAqLywK
IAkJCQlFMTU2NjMxOTBGQjYxQzFGMDBDMTk5Q0EgLyogV2ViRG93bmxvYWQubW0gaW4gU291cmNl
cyAqLywKKwkJCQk5MzZBMkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRpb25D
b250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNDQzMDkpCisrKyBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NyBAQAorMjAw
OS0wNS0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDI2MTEyOiB2aWV3bGVzcyBXZWJL
aXQgLS0gbWFrZSBldmVudHMgd29yaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjYxMTIKKworICAgICAgICBPbmUgY2hhbmdlIGhlcmUgaXMgdG8gbWFr
ZSB0aGUgLVtXZWJGcmFtZSBmcmFtZVZpZXddIGZ1bmN0aW9uIGFzc2VydCBpZiBldmVyIGNhbGxl
ZAorICAgICAgICBpbiB2aWV3bGVzcyBtb2RlLCBhbmQgZml4IG1hbnkgY2FsbGVycyB0aGF0IHdv
dWxkIHRyaXAgdGhhdCBhc3NlcnRpb24uCisKKyAgICAgICAgQSBtYWpvciBjaGFuZ2UgaXMgdG8g
cHV0IHNvbWUgbWV0aG9kcyBhbmQgZGF0YSBpbiBXZWJWaWV3IHRoYXQgYXJlIGN1cnJlbnRseSBp
bgorICAgICAgICBXZWJIVE1MVmlldywgdXNlZCBvbmx5IGluIHZpZXdsZXNzIG1vZGUuIEEgbmV4
dCBzdGVwIHdpbGwgYmUgdG8gdXNlIHRoZSBXZWJWaWV3CisgICAgICAgIG1ldGhvZHMgd2hlbmV2
ZXIgcG9zc2libGUsIGV2ZW4gd2hlbiBub3QgaW4gdGhlIHZpZXdsZXNzIG1vZGUuCisKKyAgICAg
ICAgQWxzbyBmaXggRnJhbWVWaWV3IHRvIGRvIG5vcm1hbCByZWZlcmVuY2UgY291bnRpbmcgaW5z
dGVhZCBvZiBhIHN0cmFuZ2UgbW9kZWwgd2l0aAorICAgICAgICBhbiBleHBsaWNpdCBkZXJlZiBu
ZWFyIGNyZWF0aW9uIHRpbWUuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQubW06CisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbFJlY3RJbnRvVmlldyk6
IEFkZCBjb2RlIHRvIHN0YXJ0IGluIHRoZSBhcHByb3ByaWF0ZSBwbGFjZQorICAgICAgICB3aGVu
IGRlYWxpbmcgd2l0aCB2aWV3bGVzcyBtb2RlLiBUaGlzIGdldHMgdHJpZ2dlcmVkIHdoZW4gdmlz
aXRpbmcgdGhlIEdvb2dsZSBob21lIHBhZ2UuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnNl
dFRvb2xUaXApOiBDaGFuZ2VkIHRvIGNhbGwgV2ViVmlldyBpbnN0ZWFkIG9mIFdlYkhUTUxWaWV3
LgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpwcmludCk6IENoYW5nZWQgdG8gdXNlIGEgbmV3
IHNlbGVjdG9yIHRoYXQgZG9lc24ndCByZXF1aXJlIGEKKyAgICAgICAgV2ViRnJhbWVWaWV3IGlm
IHByZXNlbnQuIEFsc28gZG9uJ3QgZXZlbiB0cnkgdG8gdXNlIHRoZSBvbGQgc2VsZWN0b3IgaW4g
dmlld2xlc3MgbW9kZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bik6IENoYW5nZWQgdG8gY2FsbCBXZWJWaWV3IGluc3RlYWQgb2YgV2ViSFRNTFZpZXcuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbToKKyAgICAgICAg
KFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKTog
QWRkZWQgbW9yZSBjb2RlIHBhdGhzIGZvcgorICAgICAgICB2aWV3bGVzcyBtb2RlIHRvIHNraXAg
dGhpbmdzIHdlIGNhbid0IGRvIGluIHRoYXQgbW9kZSwgd2l0aCBhcHByb3ByaWF0ZSBGSVhNRS4K
KyAgICAgICAgVXNlIEZyYW1lOjpjcmVhdGUgYW5kIFJlZlB0ciBhbmQgZWxpbWluYXRlIHRoZSBz
dHJhbmdlIHJlZmVyZW5jZSBjb3VudGluZyBvZiBGcmFtZVZpZXcuCisKKyAgICAgICAgKiBXZWJW
aWV3L1dlYkRhdGFTb3VyY2UubW06CisgICAgICAgICgtW1dlYkRhdGFTb3VyY2UgX3JlY2VpdmVk
RGF0YTpdKTogQWRkZWQgYSBfdXNlc0RvY3VtZW50Vmlld3MgZ3VhcmQgYXJvdW5kIGNvZGUgdGhh
dCdzCisgICAgICAgIHNwZWNpZmljIHRvIGRvY3VtZW50IHZpZXdzLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3VwZGF0ZUJhY2tncm91bmRB
bmRVcGRhdGVzV2hpbGVPZmZzY3JlZW5dKTogQWRkZWQgYSBfdXNlc0RvY3VtZW50Vmlld3MKKyAg
ICAgICAgZ3VhcmQgYXJvdW5kIGNvZGUgdGhhdCdzIHNwZWNpZmljIHRvIGRvY3VtZW50IHZpZXdz
LgorICAgICAgICAoLVtXZWJGcmFtZSBfaGFzU2VsZWN0aW9uXSk6IEFkZGVkIGFuIGltcGxlbWVu
dGF0aW9uIGZvciB2aWV3bGVzcyBtb2RlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY2xlYXJTZWxl
Y3Rpb25dKTogQXNzZXJ0IHdlJ3JlIG5vdCBpbiB2aWV3bGVzcyBtb2RlOyBpdCBkb2Vzbid0IHJl
YWxseQorICAgICAgICBtYWtlIHNlbnNlIHRvIGNsZWFyIHRoZSBzZWxlY3Rpb24gaW4gb25seSBv
bmUgZnJhbWUgaW4gdmlld2xlc3MgbW9kZS4gTGF0ZXIgd2UgY2FuCisgICAgICAgIGRlY2lkZSB3
aGF0IHRvIGRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhZ1NvdXJjZU1vdmVkVG86XSk6IEFz
c2VydCB3ZSdyZSBub3QgaW4gdmlld2xlc3MgbW9kZTsgdGhlIGRyYWdnaW5nCisgICAgICAgIGNv
ZGUgZm9yIHZpZXdsZXNzIG1vZGUgc2hvdWxkbid0IGhhdmUgdG8gaW52b2x2ZSB0aGUgV2ViRnJh
bWUgb2JqZWN0IGF0IGFsbC4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYWdTb3VyY2VFbmRlZEF0
Om9wZXJhdGlvbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGZyYW1lVmlld10pOiBB
c3NlcnQgd2UncmUgbm90IGluIHZpZXdsZXNzIG1vZGUuIFRoaXMgYXNzZXJ0aW9uIGZpcmVzCisg
ICAgICAgIG9mdGVuLCBidXQgaXQncyBhIGdyZWF0IHBvaW50ZXIgdG8gY29kZSB0aGF0IG5lZWRz
IHRvIGJlIGNoYW5nZWQuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAg
ICAgICAoLVtXZWJIVE1MVmlld1ByaXZhdGUgZGVhbGxvY10pOiBVcGRhdGVkIGZvciBuYW1lIGNo
YW5nZSBvZiBjb21wQ29udHJvbGxlciB0bworICAgICAgICBjb21wbGV0aW9uQ29udHJvbGxlci4K
KyAgICAgICAgKC1bV2ViSFRNTFZpZXdQcml2YXRlIGNsZWFyXSk6IERpdHRvLgorICAgICAgICAo
LVtXZWJIVE1MVmlldyBfZnJhbWVPckJvdW5kc0NoYW5nZWRdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYkhUTUxWaWV3IGhpdFRlc3Q6XSk6IFR3ZWFrZWQgYSBjb21tZW50LgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50Ol0pOiBGaXhlZCBhIGJ1ZyB3aGVy
ZSB0aGUgZmFrZSBldmVudCBmb3IKKyAgICAgICAgbW92aW5nIHRoZSBtb3VzZSBvdXQgb2YgdGhl
IG9sZCB2aWV3IGVuZGVkIHVwIG92ZXJ3cml0aW5nIHRoZSBldmVudCBmb3IgbW92aW5nCisgICAg
ICAgIHRoZSBtb3VzZSB3aXRoaW4gdGhlIG5ldyB2aWV3LgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBtZW51Rm9yRXZlbnQ6XSk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIG9mIGNvbXBDb250cm9s
bGVyIHRvCisgICAgICAgIGNvbXBsZXRpb25Db250cm9sbGVyLgorICAgICAgICAoLVtXZWJIVE1M
VmlldyB3aW5kb3dEaWRSZXNpZ25LZXk6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmll
dyB3aW5kb3dXaWxsQ2xvc2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzaG91
bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6XSk6IEFkZGVkIG1pc3NpbmcgYnJhY2VzLgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBtb3VzZURvd246XSk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hh
bmdlIG9mIGNvbXBDb250cm9sbGVyIHRvCisgICAgICAgIGNvbXBsZXRpb25Db250cm9sbGVyLgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyByZXNpZ25GaXJzdFJlc3BvbmRlcl0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcga2V5RG93bjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IGNvbXBsZXRlOl0pOiBEaXR0by4gQW5kIGZvciB0aGUgY2hhbmdlIGluIHRoZSBjbGFz
cydzIG5hbWUgYW5kCisgICAgICAgIGl0cyBpbml0aWFsaXphdGlvbiBhcmd1bWVudHMuCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9pbnRlcmNlcHRFZGl0aW5nS2V5RXZlbnQ6c2hvdWxkU2F2ZUNv
bW1hbmQ6XSk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIuaDogQ29waWVkIGZyb20gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
LgorICAgICAgICBSZW1vdmVkIGV2ZXJ5dGhpbmcgZXhjZXB0IGZvciB0aGUgV2ViVGV4dENvbXBs
ZXRpb25Db250cm9sbGVyIGNsYXNzLgorICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLm1tOiBDb3BpZWQgZnJvbSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0uCisgICAgICAgIERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJVSURlbGVnYXRl
UHJpdmF0ZS5oOiBBZGRlZCB3ZWJWaWV3OnByaW50RnJhbWU6IG1ldGhvZC4KKworICAgICAgICAq
IFdlYlZpZXcvV2ViVmlldy5tbTogTW92ZWQgaW5jbHVkZXMgYW5kIGZpZWxkcyBpbiBmcm9tIFdl
YkhUTUxWaWV3LgorICAgICAgICAoLVtXZWJWaWV3IF91c2VzRG9jdW1lbnRWaWV3c10pOiBVcGRh
dGVkIGZvciBuYW1lIGNoYW5nZSBmcm9tIHVzZURvY3VtZW50Vmlld3MKKyAgICAgICAgdG8gdXNl
c0RvY3VtZW50Vmlld3MuCisgICAgICAgICgtW1dlYlZpZXcgX2NvbW1vbkluaXRpYWxpemF0aW9u
V2l0aEZyYW1lTmFtZTpncm91cE5hbWU6dXNlc0RvY3VtZW50Vmlld3M6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJWaWV3IGRyYXdTaW5nbGVSZWN0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
VmlldyBpc0ZsaXBwZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2V0RnJhbWVTaXpl
Ol0pOiBEaXR0by4gQWxzbyBjaGFuZ2VkIHRvIHVzZSBfbWFpbkNvcmVGcmFtZSBtZXRob2QuCisg
ICAgICAgICgtW1dlYlZpZXcgX3ZpZXdXaWxsRHJhd0ludGVybmFsXSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJWaWV3IHZpZXdXaWxsRHJhd10pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBk
cmF3UmVjdDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX2Nsb3NlXSk6IEFkZGVkIGNv
ZGUgdG8gbmlsIG91dCB0aGUgbGFzdE1vdXNlb3ZlclZpZXcgZ2xvYmFsLgorICAgICAgICAoLVtX
ZWJWaWV3IF9kYXNoYm9hcmRSZWdpb25zXSk6IFVzZSBfbWFpbkNvcmVGcmFtZS4KKyAgICAgICAg
KC1bV2ViVmlldyBzZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxpbmc6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJWaWV3IF9zZXRJblZpZXdTb3VyY2VNb2RlOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViVmlldyBfaW5WaWV3U291cmNlTW9kZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmll
dyBfYXR0YWNoU2NyaXB0RGVidWdnZXJUb0FsbEZyYW1lc10pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViVmlldyBfZGV0YWNoU2NyaXB0RGVidWdnZXJGcm9tQWxsRnJhbWVzXSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJWaWV3IHRleHRJdGVyYXRvckZvclJlY3Q6XSk6IERpdHRvLgorICAgICAgICAo
LVtXZWJWaWV3IF9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6dmFsdWU6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJWaWV3IGFkZFdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYlZpZXcgcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJWaWV3IF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYlZpZXcgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOl0pOiBU
dXJuZWQgaW50byBhIGNsYXNzIG1ldGhvZC4KKyAgICAgICAgQWRkZWQgY29kZSB0byBoYW5kbGUg
dGhlIHZpZXdsZXNzIGNhc2Ugd2l0aG91dCBjYWxsaW5nIGZyYW1lVmlldy4KKyAgICAgICAgKC1b
V2ViVmlldyBfd2luZG93RGlkQmVjb21lS2V5Ol0pOiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZSBm
cm9tIHVzZURvY3VtZW50Vmlld3MKKyAgICAgICAgdG8gdXNlc0RvY3VtZW50Vmlld3MuCisgICAg
ICAgICgtW1dlYlZpZXcgX3dpbmRvd0RpZFJlc2lnbktleTpdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYlZpZXcgX3dpbmRvd1dpbGxPcmRlck9uU2NyZWVuOl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViVmlldyBtYWluRnJhbWVdKTogVHdlYWtlZC4KKyAgICAgICAgKC1bV2ViVmlldyBzZWxlY3Rl
ZEZyYW1lXSk6IEFkZGVkIGEgY29uZGl0aW9uYWwgdG8gYXZvaWQgdHJ5aW5nIHRvIGdldCBhdCB0
aGUKKyAgICAgICAgZnJhbWUgdmlldyBpbiB2aWV3bGVzcyBjYXNlLgorICAgICAgICAoLVtXZWJW
aWV3IF9zZXRab29tTXVsdGlwbGllcjppc1RleHRPbmx5Ol0pOiBVc2UgX21haW5Db3JlRnJhbWUu
CisgICAgICAgICgtW1dlYlZpZXcgc2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZTpdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYlZpZXcgd2luZG93U2NyaXB0T2JqZWN0XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJWaWV3IHNldEhvc3RXaW5kb3c6XSk6IERpdHRvLiBBbHNvIHB1dCBzb21lIGNvZGUg
dGhhdCdzIG5lZWRlZCBvbmx5IGZvcgorICAgICAgICBkb2N1bWVudCB2aWV3cyBpbnNpZGUgX3By
aXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzLgorICAgICAgICAoLVtXZWJWaWV3IF9oaXRUZXN0OmRy
YWdUeXBlczpdKTogVHdlYWtlZC4KKyAgICAgICAgKC1bV2ViVmlldyBhY2NlcHRzRmlyc3RSZXNw
b25kZXJdKTogQWRkZWQgY2FzZSBmb3Igdmlld2xlc3MgbW9kZSBhbG9uZyB3aXRoIGEKKyAgICAg
ICAgRklYTUUsIHNpbmNlIGl0J3Mgbm90IGNvbXBsZXRlLgorICAgICAgICAoLVtXZWJWaWV3IGJl
Y29tZUZpcnN0UmVzcG9uZGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF93ZWJjb3Jl
X2VmZmVjdGl2ZUZpcnN0UmVzcG9uZGVyXSk6IFB1dCB0aGUgYm9keSBvZiB0aGlzIGluc2lkZQor
ICAgICAgICBhIHVzZXNEb2N1bWVudFZpZXcgY2hlY2ssIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0
aGUgZmlyc3QgcmVzcG9uZGVyIGZvcndhcmRpbmcKKyAgICAgICAgaW4gdmlld2xlc3MgbW9kZS4K
KyAgICAgICAgKC1bV2ViVmlldyBzZXROZXh0S2V5VmlldzpdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYlZpZXcgbW91c2VEb3duOl0pOiBBZGRlZC4gQ29waWVkIGZyb20gV2ViSFRNTFZpZXcuIEZJ
WE1FIGluIGhlcmUgc3VnZ2VzdHMKKyAgICAgICAgdGhhdCB3ZSBtYWtlIFdlYkhUTUxWaWV3IHNo
YXJlIHRoaXMgb25lIHNvb24sIHdoaWNoIEkgdGhpbmsgaXMgcHJhY3RpY2FsLgorICAgICAgICAo
LVtXZWJWaWV3IG1vdXNlVXA6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IHNldEhvdmVy
RmVlZGJhY2tTdXNwZW5kZWQ6XSk6IEFkZGVkIGEgY29kZSBwYXRoIGZvciB2aWV3bGVzcyBtb2Rl
LgorICAgICAgICAoLVtXZWJWaWV3IHNob3VsZENsb3NlXSk6IFVzZSBfbWFpbkNvcmVGcmFtZS4K
KyAgICAgICAgKC1bV2ViVmlldyBhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0RnJvbVN0cmlu
ZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2V0RWRpdGFibGU6XSk6IERpdHRvLgor
ICAgICAgICAoLVtXZWJWaWV3IF9mcmFtZVZpZXdBdFdpbmRvd1BvaW50Ol0pOiBBZGRlZCBhbiBh
c3NlcnRpb24gdGhhdCB3ZSdyZSBub3QgaW4KKyAgICAgICAgdmlld2xlc3MgbW9kZSBzaW5jZSB0
aGlzIG1ldGhvZCBtYWtlcyBubyBzZW5zZSBpbiB0aGF0IG1vZGUuCisgICAgICAgICgtW1dlYlZp
ZXcgX3NldE1vdXNlRG93bkV2ZW50Ol0pOiBBZGRlZC4gQ29waWVkIGZyb20gV2ViSFRNTFZpZXcu
IEkgcGxhbiB0bworICAgICAgICBlbGltaW5hdGUgdGhlIG9uZSBpbiBXZWJIVE1MVmlldyBzb29u
LgorICAgICAgICAoLVtXZWJWaWV3IF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV2ViVmlldyBfc3RvcEF1dG9zY3JvbGxUaW1lcl0pOiBEaXR0by4KKyAg
ICAgICAgKCtbV2ViVmlldyBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViVmlldyBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF0pOiBEaXR0by4K
KyAgICAgICAgKC1bV2ViVmlldyBfc2V0VG9vbFRpcDpdKTogQWRkZWQuIENhbGxzIHRocm91Z2gg
dG8gdGhlIFdlYkhUTUxWaWV3IHZlcnNpb24uCisgICAgICAgICgtW1dlYlZpZXcgX3NlbGVjdGlv
bkNoYW5nZWRdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX21haW5Db3JlRnJhbWVdKTog
QWRkZWQuCisgICAgICAgICgtW1dlYlZpZXcgX25lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb25dKTogTW92ZWQgaW50byB0aGUgV2ViSW50ZXJuYWwKKyAgICAgICAgY2F0ZWdvcnkuCisg
ICAgICAgICgtW1dlYlZpZXcgX3NldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb246
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9zdGFydGVkQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZyYW1lOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBfc3RvcHBlZEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTpdKTogRGl0dG8uCisgICAgICAgICh2aWV3VXBkYXRl
UnVuTG9vcE9ic2VydmVyQ2FsbEJhY2spOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBfc2No
ZWR1bGVWaWV3VXBkYXRlXSk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3SW50
ZXJuYWwuaDogTWFkZSBtb3N0IG9mIHRoZSBmaWxlIG5vdCBjb21waWxlIGF0IGFsbCB3aGVuCisg
ICAgICAgIGluY2x1ZGVkIGZyb20gbm9uLUMrKyBzb3VyY2UgZmlsZXMsIGVsbWluYXRpbmcgc29t
ZSBleGNlc3MgZGVjbGFyYXRpb25zIGFuZAorICAgICAgICB0eXBlZGVmcy4gTW92ZWQgbW9yZSBt
ZXRob2RzIGludG8gdGhlIHJlYWwgaW50ZXJuYWwgY2F0ZWdvcnkuIEFkZGVkIG5ldworICAgICAg
ICBtZXRob2RzIF9zZXRNb3VzZURvd25FdmVudCwgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVy
LCBfc3RvcEF1dG9zY3JvbGxUaW1lciwKKyAgICAgICAgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtl
RXZlbnQsIF9zZWxlY3Rpb25DaGFuZ2VkLCBhbmQgX3NldFRvb2xUaXA6LgorCiAyMDA5LTA1LTMw
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEpTTG9j
ayB0byAtW1dlYlNjcmlwdENhbGxGcmFtZSBzY29wZUNoYWluXQpJbmRleDogV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHJldmlzaW9uIDQ0MzA5KQorKysg
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ3NywxNiArNDc3LDIwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY3JvbGxSZWN0
SW50b1ZpZXcKICAgICAvLyBGSVhNRTogVGhpcyBzY3JvbGxpbmcgYmVoYXZpb3Igc2hvdWxkIGJl
IHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBlbWJlZGRpbmcgY2xpZW50IChyYXRoZXIgdGhhbiBz
b21ldGhpbmcKICAgICAvLyB3ZSBqdXN0IGRvIG91cnNlbHZlcykuCiAgICAgCi0gICAgLy8gV2Ug
aGF2ZSB0byBjb252ZXJ0IGJhY2sgdG8gZG9jdW1lbnQgdmlldyBjb29yZGluYXRlcyBpbiBvcmRl
ciB0byBsZXQgdGhlIGZsaXBwaW5nIGNvbnZlcnNpb24gdGFrZSBwbGFjZS4gIEl0IGp1c3QKLSAg
ICAvLyBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHRoZSBzY3JvbGxSZWN0SW50b1ZpZXcgQVBJIHRv
IHRha2UgZG9jdW1lbnQgdmlldyBjb29yZGluYXRlcy4KICAgICBJbnRSZWN0IHNjcm9sbFJlY3Qg
PSByOwotICAgIHNjcm9sbFJlY3QubW92ZShzY3JvbGxWaWV3LT5zY3JvbGxPZmZzZXQoKSk7Cisg
ICAgTlNWaWV3ICpzdGFydFZpZXcgPSBtX3dlYlZpZXc7CisgICAgaWYgKFttX3dlYlZpZXcgX3Vz
ZXNEb2N1bWVudFZpZXdzXSkgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQgYmFjayB0
byBkb2N1bWVudCB2aWV3IGNvb3JkaW5hdGVzLgorICAgICAgICAvLyBJdCBkb2Vzbid0IG1ha2Ug
c2Vuc2UgZm9yIHRoZSBzY3JvbGxSZWN0SW50b1ZpZXcgQVBJIHRvIHRha2UgZG9jdW1lbnQgdmll
dyBjb29yZGluYXRlcy4KKyAgICAgICAgc2Nyb2xsUmVjdC5tb3ZlKHNjcm9sbFZpZXctPnNjcm9s
bE9mZnNldCgpKTsKKyAgICAgICAgc3RhcnRWaWV3ID0gW1tbbV93ZWJWaWV3IG1haW5GcmFtZV0g
ZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIH0KICAgICBOU1JlY3QgcmVjdCA9IHNjcm9s
bFJlY3Q7Ci0gICAgZm9yIChOU1ZpZXcgKnZpZXcgPSBbW1ttX3dlYlZpZXcgbWFpbkZyYW1lXSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107IHZpZXc7IHZpZXcgPSBbdmlldyBzdXBlcnZpZXddKSB7
IAorICAgIGZvciAoTlNWaWV3ICp2aWV3ID0gc3RhcnRWaWV3OyB2aWV3OyB2aWV3ID0gW3ZpZXcg
c3VwZXJ2aWV3XSkgeyAKICAgICAgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W05TQ2xpcFZp
ZXcgY2xhc3NdXSkgeyAKICAgICAgICAgICAgIE5TQ2xpcFZpZXcgKmNsaXBWaWV3ID0gKE5TQ2xp
cFZpZXcgKil2aWV3OyAKICAgICAgICAgICAgIE5TVmlldyAqZG9jdW1lbnRWaWV3ID0gW2NsaXBW
aWV3IGRvY3VtZW50Vmlld107IAotICAgICAgICAgICAgW2RvY3VtZW50VmlldyBzY3JvbGxSZWN0
VG9WaXNpYmxlOltkb2N1bWVudFZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpbW1ttX3dl
YlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld11dXTsgCisgICAgICAgICAg
ICBbZG9jdW1lbnRWaWV3IHNjcm9sbFJlY3RUb1Zpc2libGU6W2RvY3VtZW50VmlldyBjb252ZXJ0
UmVjdDpyZWN0IGZyb21WaWV3OnN0YXJ0Vmlld11dOyAKICAgICAgICAgfSAKICAgICB9CiB9CkBA
IC01MDIsMTMgKzUwNiwxNiBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3Zl
ckVsCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdG9v
bFRpcCkKIHsKLSAgICBbKFdlYkhUTUxWaWV3ICopW1tbbV93ZWJWaWV3IG1haW5GcmFtZV0gZnJh
bWVWaWV3XSBkb2N1bWVudFZpZXddIF9zZXRUb29sVGlwOnRvb2xUaXBdOworICAgIFttX3dlYlZp
ZXcgX3NldFRvb2xUaXA6dG9vbFRpcF07CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpwcmlu
dChGcmFtZSogZnJhbWUpCiB7Ci0gICAgV2ViRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBba2l0KGZy
YW1lKSBmcmFtZVZpZXddOwotICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9y
KHdlYlZpZXc6cHJpbnRGcmFtZVZpZXc6KSwgZnJhbWVWaWV3KTsKKyAgICBXZWJGcmFtZSAqd2Vi
RnJhbWUgPSBraXQoZnJhbWUpOworICAgIGlmIChbW21fd2ViVmlldyBVSURlbGVnYXRlXSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHdlYlZpZXc6cHJpbnRGcmFtZTopXSkKKyAgICAgICAg
Q2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpwcmludEZyYW1lOiks
IHdlYkZyYW1lKTsKKyAgICBlbHNlIGlmIChbbV93ZWJWaWV3IF91c2VzRG9jdW1lbnRWaWV3c10p
CisgICAgICAgIENhbGxVSURlbGVnYXRlKG1fd2ViVmlldywgQHNlbGVjdG9yKHdlYlZpZXc6cHJp
bnRGcmFtZVZpZXc6KSwgW3dlYkZyYW1lIGZyYW1lVmlld10pOwogfQogCiAjaWYgRU5BQkxFKERB
VEFCQVNFKQpAQCAtNjQ5LDE1ICs2NTYsMTYgQEAgU3RyaW5nIFdlYkNocm9tZUNsaWVudDo6Z2Vu
ZXJhdGVSZXBsYWNlbQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCiB2
b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUqIGZyYW1l
LCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQogewogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtraXQoZnJhbWUpIGZy
YW1lVmlld107Ci0gICAgV2ViSFRNTFZpZXcgKmRvY1ZpZXcgPSAoV2ViSFRNTFZpZXcgKilbZnJh
bWVWaWV3IGRvY3VtZW50Vmlld107CisgICAgV2ViSFRNTFZpZXcgKmRvY3VtZW50VmlldyA9IChX
ZWJIVE1MVmlldyAqKVtmcmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsKICAgICBpZiAoZ3JhcGhpY3NM
YXllcikKLSAgICAgICAgW2RvY1ZpZXcgYXR0YWNoUm9vdExheWVyOmdyYXBoaWNzTGF5ZXItPm5h
dGl2ZUxheWVyKCldOworICAgICAgICBbZG9jdW1lbnRWaWV3IGF0dGFjaFJvb3RMYXllcjpncmFw
aGljc0xheWVyLT5uYXRpdmVMYXllcigpXTsKICAgICBlbHNlCi0gICAgICAgIFtkb2NWaWV3IGRl
dGFjaFJvb3RMYXllcl07CisgICAgICAgIFtkb2N1bWVudFZpZXcgZGV0YWNoUm9vdExheWVyXTsK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQogCkBAIC02NzQsNiArNjgyLDcgQEAg
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlVmlld1VwZGF0ZQogICAgIFttX3dlYlZpZXcg
X3NjaGVkdWxlVmlld1VwZGF0ZV07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0K
KwogI2VuZGlmCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZXF1ZXN0R2VvbG9jYXRpb25QZXJt
aXNzaW9uRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCklu
ZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2
aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgwLDkgKzI4MCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpyZXNwb25kVG9DaGFuZ2VkQ28KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRU
b0NoYW5nZWRTZWxlY3Rpb24oKQogewotICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqdmll
dyA9IFtbW21fd2ViVmlldyBzZWxlY3RlZEZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107
Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCi0gICAg
ICAgIFsoV2ViSFRNTFZpZXcgKil2aWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKKyAgICBbbV93ZWJW
aWV3IF9zZWxlY3Rpb25DaGFuZ2VkXTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHF1aXJrIGlzIG5l
ZWRlZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzUwMDk2MjU+IC0gV2UgY2FuIHBoYXNlIGl0IG91
dCBvbmNlIEFwZXJ0dXJlIGNhbiBhZG9wdCB0aGUgbmV3IGJlaGF2aW9yIG9uIHRoZWlyIGVuZAog
ICAgIGlmICghV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhP
VVRfQVBFUlRVUkVfUVVJUkspICYmIFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50
aWZpZXJdIGlzRXF1YWxUb1N0cmluZzpAImNvbS5hcHBsZS5BcGVydHVyZSJdKQpJbmRleDogV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCShy
ZXZpc2lvbiA0NDMwOSkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2Fk
ZXJDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMzcsMjggKzEwMzcsMzAgQEAgdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQwogCiB2b2lkIFdlYkZyYW1lTG9hZGVy
Q2xpZW50Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKIHsKLSAgICBXZWJGcmFt
ZVZpZXcgKnYgPSBtX3dlYkZyYW1lLT5fcHJpdmF0ZS0+d2ViRnJhbWVWaWV3OwotICAgIFdlYkRh
dGFTb3VyY2UgKmRzID0gW21fd2ViRnJhbWUuZ2V0KCkgX2RhdGFTb3VyY2VdOworICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOworICAgIFdlYkRhdGFT
b3VyY2UgKmRhdGFTb3VyY2UgPSBbbV93ZWJGcmFtZS5nZXQoKSBfZGF0YVNvdXJjZV07CisgICAg
Ym9vbCB1c2VzRG9jdW1lbnRWaWV3cyA9IFt3ZWJWaWV3IF91c2VzRG9jdW1lbnRWaWV3c107CiAK
LSAgICBib29sIHdpbGxQcm9kdWNlSFRNTFZpZXcgPSBbW1dlYkZyYW1lVmlldyBjbGFzc10gX3Zp
ZXdDbGFzc0Zvck1JTUVUeXBlOltkcyBfcmVzcG9uc2VNSU1FVHlwZV1dID09IFtXZWJIVE1MVmll
dyBjbGFzc107Ci0gICAgYm9vbCBjYW5Ta2lwQ3JlYXRpb24gPSBjb3JlKG1fd2ViRnJhbWUuZ2V0
KCkpLT5sb2FkZXIoKS0+Y29tbWl0dGluZ0ZpcnN0UmVhbExvYWQoKSAmJiB3aWxsUHJvZHVjZUhU
TUxWaWV3OwotICAgIGlmIChjYW5Ta2lwQ3JlYXRpb24pIHsKLSAgICAgICAgW1t2IGRvY3VtZW50
Vmlld10gc2V0RGF0YVNvdXJjZTpkc107Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAgIC8vIEZJWE1FIChWaWV3bGVzcyk6IEkgYXNz
dW1lIHdlIHdhbnQgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpbWl6YXRpb24gZm9yIHZpZXds
ZXNzIG1vZGUgdG9vLgorICAgICAgICBib29sIHdpbGxQcm9kdWNlSFRNTFZpZXcgPSBbW1dlYkZy
YW1lVmlldyBjbGFzc10gX3ZpZXdDbGFzc0Zvck1JTUVUeXBlOltkYXRhU291cmNlIF9yZXNwb25z
ZU1JTUVUeXBlXV0gPT0gW1dlYkhUTUxWaWV3IGNsYXNzXTsKKyAgICAgICAgYm9vbCBjYW5Ta2lw
Q3JlYXRpb24gPSBjb3JlKG1fd2ViRnJhbWUuZ2V0KCkpLT5sb2FkZXIoKS0+Y29tbWl0dGluZ0Zp
cnN0UmVhbExvYWQoKSAmJiB3aWxsUHJvZHVjZUhUTUxWaWV3OworICAgICAgICBpZiAoY2FuU2tp
cENyZWF0aW9uKSB7CisgICAgICAgICAgICBbW21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFt
ZVZpZXcgZG9jdW1lbnRWaWV3XSBzZXREYXRhU291cmNlOmRhdGFTb3VyY2VdOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAvLyBEb24ndCBzdXBwcmVzcyBzY3JvbGxiYXJz
IGJlZm9yZSB0aGUgdmlldyBjcmVhdGlvbiBpZiB3ZSdyZSBtYWtpbmcgdGhlIHZpZXcgZm9yIGEg
bm9uLUhUTUwgdmlldy4KLSAgICBpZiAoIXdpbGxQcm9kdWNlSFRNTFZpZXcpCi0gICAgICAgIFtb
diBfc2Nyb2xsVmlld10gc2V0U2Nyb2xsQmFyc1N1cHByZXNzZWQ6Tk8gcmVwYWludE9uVW5zdXBw
cmVzczpOT107CisgICAgICAgIC8vIERvbid0IHN1cHByZXNzIHNjcm9sbGJhcnMgYmVmb3JlIHRo
ZSB2aWV3IGNyZWF0aW9uIGlmIHdlJ3JlIG1ha2luZyB0aGUgdmlldyBmb3IgYSBub24tSFRNTCB2
aWV3LgorICAgICAgICBpZiAoIXdpbGxQcm9kdWNlSFRNTFZpZXcpCisgICAgICAgICAgICBbW21f
d2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFtZVZpZXcgX3Njcm9sbFZpZXddIHNldFNjcm9sbEJh
cnNTdXBwcmVzc2VkOk5PIHJlcGFpbnRPblVuc3VwcHJlc3M6Tk9dOworICAgIH0KICAgICAKICAg
ICAvLyBjbGVhbiB1cCB3ZWJraXQgcGx1Z2luIGluc3RhbmNlcyBiZWZvcmUgV2ViSFRNTFZpZXcg
Z2V0cyBmcmVlZC4KLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gZ2V0V2ViVmlldyhtX3dlYkZyYW1l
LmdldCgpKTsKICAgICBbd2ViVmlldyByZW1vdmVQbHVnaW5JbnN0YW5jZVZpZXdzRm9yOihtX3dl
YkZyYW1lLmdldCgpKV07CiAgICAgCi0gICAgQk9PTCB1c2VEb2N1bWVudFZpZXdzID0gW3dlYlZp
ZXcgX3VzZXNEb2N1bWVudFZpZXdzXTsKICAgICBOU1ZpZXcgPFdlYkRvY3VtZW50Vmlldz4gKmRv
Y3VtZW50VmlldyA9IG5pbDsKLSAgICBpZiAodXNlRG9jdW1lbnRWaWV3cykgewotICAgICAgICBk
b2N1bWVudFZpZXcgPSBbdiBfbWFrZURvY3VtZW50Vmlld0ZvckRhdGFTb3VyY2U6ZHNdOworICAg
IGlmICh1c2VzRG9jdW1lbnRWaWV3cykgeworICAgICAgICBkb2N1bWVudFZpZXcgPSBbbV93ZWJG
cmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBfbWFrZURvY3VtZW50Vmlld0ZvckRhdGFTb3Vy
Y2U6ZGF0YVNvdXJjZV07CiAgICAgICAgIGlmICghZG9jdW1lbnRWaWV3KQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTEwNzIsMjggKzEwNzQsMjkgQEAgdm9pZCBXZWJGcmFtZUxvYWRl
ckNsaWVudDo6dHJhbnNpdGlvblRvQwogICAgIGlmIChpc01haW5GcmFtZSAmJiBjb3JlRnJhbWUt
PnZpZXcoKSkKICAgICAgICAgY29yZUZyYW1lLT52aWV3KCktPnNldFBhcmVudFZpc2libGUoZmFs
c2UpOwogICAgIGNvcmVGcmFtZS0+c2V0VmlldygwKTsKLSAgICBGcmFtZVZpZXcqIGNvcmVWaWV3
OwotICAgIGlmICh1c2VEb2N1bWVudFZpZXdzKQotICAgICAgICBjb3JlVmlldyA9IG5ldyBGcmFt
ZVZpZXcoY29yZUZyYW1lKTsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBjb3JlVmlldzsKKyAgICBp
ZiAodXNlc0RvY3VtZW50Vmlld3MpCisgICAgICAgIGNvcmVWaWV3ID0gRnJhbWVWaWV3OjpjcmVh
dGUoY29yZUZyYW1lKTsKICAgICBlbHNlCi0gICAgICAgIGNvcmVWaWV3ID0gbmV3IEZyYW1lVmll
dyhjb3JlRnJhbWUsIEludFNpemUoW3dlYlZpZXcgYm91bmRzXS5zaXplKSk7CisgICAgICAgIGNv
cmVWaWV3ID0gRnJhbWVWaWV3OjpjcmVhdGUoY29yZUZyYW1lLCBJbnRTaXplKFt3ZWJWaWV3IGJv
dW5kc10uc2l6ZSkpOwogICAgIGNvcmVGcmFtZS0+c2V0Vmlldyhjb3JlVmlldyk7Ci0gICAgY29y
ZVZpZXctPmRlcmVmKCk7IC8vIEZJWE1FOiBFbGltaW5hdGUgdGhpcyBjcmF6eSByZWZjb3VudGlu
ZyEKIAogICAgIFttX3dlYkZyYW1lLmdldCgpIF91cGRhdGVCYWNrZ3JvdW5kQW5kVXBkYXRlc1do
aWxlT2Zmc2NyZWVuXTsKIAotICAgIFt2IF9pbnN0YWxsXTsKKyAgICBpZiAodXNlc0RvY3VtZW50
Vmlld3MpCisgICAgICAgIFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+d2ViRnJhbWVWaWV3IF9pbnN0
YWxsXTsKIAogICAgIGlmIChpc01haW5GcmFtZSkKICAgICAgICAgY29yZVZpZXctPnNldFBhcmVu
dFZpc2libGUodHJ1ZSk7CiAKLSAgICAvLyBDYWxsIHNldERhdGFTb3VyY2Ugb24gdGhlIGRvY3Vt
ZW50IHZpZXcgYWZ0ZXIgaXQgaGFzIGJlZW4gcGxhY2VkIGluIHRoZSB2aWV3IGhpZXJhcmNoeS4K
LSAgICAvLyBUaGlzIHdoYXQgd2UgZm9yIHRoZSB0b3AtbGV2ZWwgdmlldywgc28gc2hvdWxkIGRv
IHRoaXMgZm9yIHZpZXdzIGluIHN1YmZyYW1lcyBhcyB3ZWxsLgotICAgIFtkb2N1bWVudFZpZXcg
c2V0RGF0YVNvdXJjZTpkc107CisgICAgaWYgKHVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAg
IC8vIENhbGwgc2V0RGF0YVNvdXJjZSBvbiB0aGUgZG9jdW1lbnQgdmlldyBhZnRlciBpdCBoYXMg
YmVlbiBwbGFjZWQgaW4gdGhlIHZpZXcgaGllcmFyY2h5LgorICAgICAgICAvLyBUaGlzIHdoYXQg
d2UgZm9yIHRoZSB0b3AtbGV2ZWwgdmlldywgc28gc2hvdWxkIGRvIHRoaXMgZm9yIHZpZXdzIGlu
IHN1YmZyYW1lcyBhcyB3ZWxsLgorICAgICAgICBbZG9jdW1lbnRWaWV3IHNldERhdGFTb3VyY2U6
ZGF0YVNvdXJjZV07CisgICAgfQogICAgIAogICAgIGlmIChIVE1MRnJhbWVPd25lckVsZW1lbnQq
IG93bmVyID0gY29yZUZyYW1lLT5vd25lckVsZW1lbnQoKSkKICAgICAgICAgY29yZUZyYW1lLT52
aWV3KCktPnNldENhbkhhdmVTY3JvbGxiYXJzKG93bmVyLT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Ny
b2xsYmFyQWx3YXlzT2ZmKTsKLSAgICAKIH0KIAogUmV0YWluUHRyPFdlYkZyYW1lUG9saWN5TGlz
dGVuZXI+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpzZXRVcFBvbGljeUxpc3RlbmVyKEZyYW1lUG9s
aWN5RnVuY3Rpb24gZnVuY3Rpb24pCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNv
dXJjZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5t
bQkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRGF0YVNvdXJjZS5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjI0LDcgKzIyNCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRUeXBlc0Zyb21DbGFzcyhOU00KICAgICBSZXRhaW5QdHI8V2ViRGF0YVNvdXJjZSo+IHByb3Rl
Y3Qoc2VsZik7CiAgICAgCiAgICAgW1tzZWxmIHJlcHJlc2VudGF0aW9uXSByZWNlaXZlZERhdGE6
ZGF0YSB3aXRoRGF0YVNvdXJjZTpzZWxmXTsKLSAgICBbW1tbc2VsZiB3ZWJGcmFtZV0gZnJhbWVW
aWV3XSBkb2N1bWVudFZpZXddIGRhdGFTb3VyY2VVcGRhdGVkOnNlbGZdOworCisgICAgaWYgKFtb
c2VsZiBfd2ViVmlld10gX3VzZXNEb2N1bWVudFZpZXdzXSkKKyAgICAgICAgW1tbW3NlbGYgd2Vi
RnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSBkYXRhU291cmNlVXBkYXRlZDpzZWxmXTsK
IH0KIAogLSAodm9pZClfc2V0TWFpbkRvY3VtZW50RXJyb3I6KE5TRXJyb3IgKillcnJvcgpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxOCwyMiArMzE4LDI0IEBAIFdl
YlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKQogCiAgICAgRnJhbWUqIGNvcmVG
cmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBjb3Jl
RnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChjb3JlRnJh
bWUpKSB7Ci0gICAgICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IGtpdChmcmFtZSk7Ci0gICAgICAg
IC8vIERvbid0IGNhbGwgc2V0RHJhd3NCYWNrZ3JvdW5kOllFUyBoZXJlIGJlY2F1c2UgaXQgbWF5
IGJlIE5PIGJlY2F1c2Ugb2YgYSBsb2FkCi0gICAgICAgIC8vIGluIHByb2dyZXNzOyBXZWJGcmFt
ZUxvYWRlckNsaWVudCBrZWVwcyBpdCBzZXQgdG8gTk8gZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3Mu
Ci0gICAgICAgIGlmICghZHJhd3NCYWNrZ3JvdW5kKQotICAgICAgICAgICAgW1tbd2ViRnJhbWUg
ZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gc2V0RHJhd3NCYWNrZ3JvdW5kOk5PXTsKLSAgICAgICAg
W1tbd2ViRnJhbWUgZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gc2V0QmFja2dyb3VuZENvbG9yOmJh
Y2tncm91bmRDb2xvcl07Ci0gICAgICAgIGlkIGRvY3VtZW50VmlldyA9IFtbd2ViRnJhbWUgZnJh
bWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgICAgICBpZiAoW2RvY3VtZW50VmlldyByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldERyYXdzQmFja2dyb3VuZDopXSkKLSAgICAgICAgICAg
IFtkb2N1bWVudFZpZXcgc2V0RHJhd3NCYWNrZ3JvdW5kOmRyYXdzQmFja2dyb3VuZF07Ci0gICAg
ICAgIGlmIChbZG9jdW1lbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0QmFj
a2dyb3VuZENvbG9yOildKQotICAgICAgICAgICAgW2RvY3VtZW50VmlldyBzZXRCYWNrZ3JvdW5k
Q29sb3I6YmFja2dyb3VuZENvbG9yXTsKLSAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT52aWV3
KCkpIHsKLSAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNldFRyYW5zcGFyZW50KCFkcmF3c0Jh
Y2tncm91bmQpOwotICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFti
YWNrZ3JvdW5kQ29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JT
cGFjZV0pOwotICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2V0QmFzZUJhY2tncm91bmRDb2xv
cihjb2xvcik7Ci0gICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRTaG91bGRVcGRhdGVXaGls
ZU9mZnNjcmVlbihbd2ViVmlldyBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbl0pOworICAgICAg
ICBpZiAoW3dlYlZpZXcgX3VzZXNEb2N1bWVudFZpZXdzXSkgeworICAgICAgICAgICAgLy8gRG9u
J3QgY2FsbCBzZXREcmF3c0JhY2tncm91bmQ6WUVTIGhlcmUgYmVjYXVzZSBpdCBtYXkgYmUgTk8g
YmVjYXVzZSBvZiBhIGxvYWQKKyAgICAgICAgICAgIC8vIGluIHByb2dyZXNzOyBXZWJGcmFtZUxv
YWRlckNsaWVudCBrZWVwcyBpdCBzZXQgdG8gTk8gZHVyaW5nIHRoZSBsb2FkIHByb2Nlc3MuCisg
ICAgICAgICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBraXQoZnJhbWUpOworICAgICAgICAgICAg
aWYgKCFkcmF3c0JhY2tncm91bmQpCisgICAgICAgICAgICAgICAgW1tbd2ViRnJhbWUgZnJhbWVW
aWV3XSBfc2Nyb2xsVmlld10gc2V0RHJhd3NCYWNrZ3JvdW5kOk5PXTsKKyAgICAgICAgICAgIFtb
W3dlYkZyYW1lIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIHNldEJhY2tncm91bmRDb2xvcjpiYWNr
Z3JvdW5kQ29sb3JdOworICAgICAgICAgICAgaWQgZG9jdW1lbnRWaWV3ID0gW1t3ZWJGcmFtZSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldERyYXdzQmFja2dyb3VuZDopXSkKKyAgICAg
ICAgICAgICAgICBbZG9jdW1lbnRWaWV3IHNldERyYXdzQmFja2dyb3VuZDpkcmF3c0JhY2tncm91
bmRdOworICAgICAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KV0pCisgICAgICAgICAgICAgICAgW2RvY3VtZW50
VmlldyBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKSB7CisgICAgICAgICAg
ICB2aWV3LT5zZXRUcmFuc3BhcmVudCghZHJhd3NCYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgIHZp
ZXctPnNldEJhc2VCYWNrZ3JvdW5kQ29sb3IoY29sb3JGcm9tTlNDb2xvcihbYmFja2dyb3VuZENv
bG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdKSk7Cisg
ICAgICAgICAgICB2aWV3LT5zZXRTaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbihbd2ViVmlldyBz
aG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbl0pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzcw
LDIxICszNzIsMjcgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpCiAK
IC0gKEJPT0wpX2hhc1NlbGVjdGlvbgogewotICAgIGlkIGRvY3VtZW50VmlldyA9IFtfcHJpdmF0
ZS0+d2ViRnJhbWVWaWV3IGRvY3VtZW50Vmlld107ICAgIAorICAgIGlmIChbZ2V0V2ViVmlldyhz
ZWxmKSBfdXNlc0RvY3VtZW50Vmlld3NdKSB7CisgICAgICAgIGlkIGRvY3VtZW50VmlldyA9IFtf
cHJpdmF0ZS0+d2ViRnJhbWVWaWV3IGRvY3VtZW50Vmlld107ICAgIAogCi0gICAgLy8gb3B0aW1p
emF0aW9uIGZvciBjb21tb24gY2FzZSB0byBhdm9pZCBjcmVhdGluZyBwb3RlbnRpYWxseSBsYXJn
ZSBzZWxlY3Rpb24gc3RyaW5nCi0gICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJp
dmF0ZS0+Y29yZUZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCktPmlzUmFuZ2UoKTsKKyAgICAgICAgLy8gb3B0aW1pemF0aW9uIGZvciBjb21tb24gY2FzZSB0
byBhdm9pZCBjcmVhdGluZyBwb3RlbnRpYWxseSBsYXJnZSBzZWxlY3Rpb24gc3RyaW5nCisgICAg
ICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0p
CisgICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KTsKIAotICAgIGlmIChbZG9jdW1lbnRWaWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2wo
V2ViRG9jdW1lbnRUZXh0KV0pCi0gICAgICAgIHJldHVybiBbW2RvY3VtZW50VmlldyBzZWxlY3Rl
ZFN0cmluZ10gbGVuZ3RoXSA+IDA7Ci0gICAgCi0gICAgcmV0dXJuIE5POworICAgICAgICBpZiAo
W2RvY3VtZW50VmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkRvY3VtZW50VGV4
dCldKQorICAgICAgICAgICAgcmV0dXJuIFtbZG9jdW1lbnRWaWV3IHNlbGVjdGVkU3RyaW5nXSBs
ZW5ndGhdID4gMDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBG
cmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICByZXR1cm4gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKIH0KIAogLSAodm9pZClf
Y2xlYXJTZWxlY3Rpb24KIHsKKyAgICBBU1NFUlQoW2dldFdlYlZpZXcoc2VsZikgX3VzZXNEb2N1
bWVudFZpZXdzXSk7CiAgICAgaWQgZG9jdW1lbnRWaWV3ID0gW19wcml2YXRlLT53ZWJGcmFtZVZp
ZXcgZG9jdW1lbnRWaWV3XTsgICAgCiAgICAgaWYgKFtkb2N1bWVudFZpZXcgY29uZm9ybXNUb1By
b3RvY29sOkBwcm90b2NvbChXZWJEb2N1bWVudFRleHQpXSkKICAgICAgICAgW2RvY3VtZW50Vmll
dyBkZXNlbGVjdEFsbF07CkBAIC05MTAsNiArOTE4LDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRh
U291cmNlICpkYXRhU291cmNlKAogICAgIEZyYW1lVmlldyogdmlldyA9IF9wcml2YXRlLT5jb3Jl
RnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQoW2dldFdlYlZpZXcoc2VsZikgX3VzZXNEb2N1bWVudFZpZXdzXSk7CiAgICAgLy8gRklYTUU6
IFRoZXNlIGFyZSBmYWtlIG1vZGlmaWVyIGtleXMgaGVyZSwgYnV0IHRoZXkgc2hvdWxkIGJlIHJl
YWwgb25lcyBpbnN0ZWFkLgogICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChJbnRQb2ludCh3
aW5kb3dMb2MpLCBnbG9iYWxQb2ludCh3aW5kb3dMb2MsIFt2aWV3LT5wbGF0Zm9ybVdpZGdldCgp
IHdpbmRvd10pLAogICAgICAgICBMZWZ0QnV0dG9uLCBNb3VzZUV2ZW50TW92ZWQsIDAsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGltZSgpKTsKQEAgLTkyMyw2ICs5MzIsNyBA
QCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAgICAgRnJhbWVWaWV3
KiB2aWV3ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpOwogICAgIGlmICghdmlldykKICAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVChbZ2V0V2ViVmlldyhzZWxmKSBfdXNlc0RvY3VtZW50
Vmlld3NdKTsKICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZpZXIga2V5cyBoZXJl
LCBidXQgdGhleSBzaG91bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCiAgICAgUGxhdGZvcm1Nb3Vz
ZUV2ZW50IGV2ZW50KEludFBvaW50KHdpbmRvd0xvYyksIGdsb2JhbFBvaW50KHdpbmRvd0xvYywg
W3ZpZXctPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSksCiAgICAgICAgIExlZnRCdXR0b24sIE1v
dXNlRXZlbnRNb3ZlZCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGN1cnJlbnRUaW1l
KCkpOwpAQCAtMTE3OSw2ICsxMTg5LDcgQEAgc3RhdGljIGlubGluZSBXZWJEYXRhU291cmNlICpk
YXRhU291cmNlKAogCiAtIChXZWJGcmFtZVZpZXcgKilmcmFtZVZpZXcKIHsKKyAgICBBU1NFUlQo
IWdldFdlYlZpZXcoc2VsZikgfHwgW2dldFdlYlZpZXcoc2VsZikgX3VzZXNEb2N1bWVudFZpZXdz
XSk7CiAgICAgcmV0dXJuIF9wcml2YXRlLT53ZWJGcmFtZVZpZXc7CiB9CiAKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBACiAjaW1w
b3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYlJlc291cmNlUHJpdmF0
ZS5oIgogI2ltcG9ydCAiV2ViU3RyaW5nVHJ1bmNhdG9yLmgiCisjaW1wb3J0ICJXZWJUZXh0Q29t
cGxldGlvbkNvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBv
cnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIK
QEAgLTEwMCw3ICsxMDEsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1LZXli
b2FyZEV2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9s
bGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgpAQCAtMjM3LDcgKzIzNyw2
IEBAIGV4dGVybiBOU1N0cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNlbWVudFIKIAogQGludGVyZmFj
ZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQogLSAoaWQpX25ld0ZpcnN0UmVzcG9uZGVy
QWZ0ZXJSZXNpZ25pbmc7Ci0tICh2b2lkKV9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOihCT09MKWZs
YWc7CiBAZW5kCiAKIEBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChXZWJOU0F0dHJpYnV0
ZWRTdHJpbmdEZXRhaWxzKQpAQCAtNDA1LDI0ICs0MDQsNiBAQCBzdGF0aWMgQ2FjaGVkUmVzb3Vy
Y2VDbGllbnQqIHByb21pc2VkRGF0CiAtICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6KGlk
KW9iamVjdCBmb3JLZXk6KGlkKWtleTsKIEBlbmQKIAotLy8gSGFuZGxlcyB0aGUgY29tcGxldGU6
IHRleHQgY29tbWFuZAotQGludGVyZmFjZSBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIDogTlNP
YmplY3QgPE5TVGFibGVWaWV3RGVsZWdhdGUsIE5TVGFibGVWaWV3RGF0YVNvdXJjZT4gewotQHBy
aXZhdGUKLSAgICBXZWJIVE1MVmlldyAqX3ZpZXc7Ci0gICAgTlNXaW5kb3cgKl9wb3B1cFdpbmRv
dzsKLSAgICBOU1RhYmxlVmlldyAqX3RhYmxlVmlldzsKLSAgICBOU0FycmF5ICpfY29tcGxldGlv
bnM7Ci0gICAgTlNTdHJpbmcgKl9vcmlnaW5hbFN0cmluZzsKLSAgICBpbnQgcHJlZml4TGVuZ3Ro
OwotfQotLSAoaWQpaW5pdFdpdGhIVE1MVmlldzooV2ViSFRNTFZpZXcgKil2aWV3OwotLSAodm9p
ZClkb0NvbXBsZXRpb247Ci0tICh2b2lkKWVuZFJldmVydGluZ0NoYW5nZTooQk9PTClyZXZlcnRD
aGFuZ2UgbW92ZUxlZnQ6KEJPT0wpZ29MZWZ0OwotLSAoQk9PTClwb3B1cFdpbmRvd0lzT3BlbjsK
LS0gKEJPT0wpZmlsdGVyS2V5RG93bjooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClfcmVmbGVj
dFNlbGVjdGlvbjsKLUBlbmQKLQogc3RydWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRz
UGFyYW1ldGVycyB7CiAgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQ7CiAgICAgQk9PTCBldmVudFdh
c0hhbmRsZWQ7CkBAIC00NzksNyArNDYwLDcgQEAgc3RydWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0
S2V5RXZlbnRzUGFyYQogICAgIEJPT0wgbmV4dFJlc3BvbmRlckRpc2FibGVkT25jZTsKICNlbmRp
ZgogICAgIAotICAgIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgKmNvbXBDb250cm9sbGVyOwor
ICAgIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciAqY29tcGxldGlvbkNvbnRyb2xsZXI7CiAg
ICAgCiAgICAgQk9PTCB0cmFuc3BhcmVudEJhY2tncm91bmQ7CiAKQEAgLTU2MSw3ICs1NDIsNyBA
QCBzdGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhCiAgICAgW2tleURvd25F
dmVudCByZWxlYXNlXTsKICAgICBbcGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKICAgICBbdG9v
bFRpcCByZWxlYXNlXTsKLSAgICBbY29tcENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgW2NvbXBs
ZXRpb25Db250cm9sbGVyIHJlbGVhc2VdOwogICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOwogICAg
IFtoaWdobGlnaHRlcnMgcmVsZWFzZV07CiAgICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlKQpAQCAtNTg2LDcgKzU2Nyw3IEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlT
dGF0ZSBzdGEKICAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOwogICAgIFtwbHVnaW5Db250cm9s
bGVyIHJlbGVhc2VdOwogICAgIFt0b29sVGlwIHJlbGVhc2VdOwotICAgIFtjb21wQ29udHJvbGxl
ciByZWxlYXNlXTsKKyAgICBbY29tcGxldGlvbkNvbnRyb2xsZXIgcmVsZWFzZV07CiAgICAgW2Rh
dGFTb3VyY2UgcmVsZWFzZV07CiAgICAgW2hpZ2hsaWdodGVycyByZWxlYXNlXTsKICAgICBpZiAo
cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCkBAIC01OTYsNyArNTc3LDcgQEAgc3RhdGljIE5T
Q2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0YXRlIHN0YQogICAgIGtleURvd25FdmVudCA9IG5pbDsK
ICAgICBwbHVnaW5Db250cm9sbGVyID0gbmlsOwogICAgIHRvb2xUaXAgPSBuaWw7Ci0gICAgY29t
cENvbnRyb2xsZXIgPSBuaWw7CisgICAgY29tcGxldGlvbkNvbnRyb2xsZXIgPSBuaWw7CiAgICAg
ZGF0YVNvdXJjZSA9IG5pbDsKICAgICBoaWdobGlnaHRlcnMgPSBuaWw7CiAgICAgcHJvbWlzZWRE
cmFnVElGRkRhdGFTb3VyY2UgPSAwOwpAQCAtMTE5OSw3ICsxMTgwLDcgQEAgc3RhdGljIHZvaWQg
X3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhYwogICAgIGlmICghTlNFcXVhbFBvaW50cyhfcHJp
dmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uLCBvcmlnaW4pKSB7CiAgICAgICAgIGlmIChGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKICAgICAgICAgICAgIGNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnNlbmRTY3JvbGxFdmVudCgpOwotICAgICAgICBbX3ByaXZhdGUtPmNv
bXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgICAg
IFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1v
dmVMZWZ0Ok5PXTsKICAgICAgICAgCiAgICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBf
d2ViVmlld107CiAgICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzp3ZWJWaWV3IGRpZFNjcm9sbERvY3VtZW50SW5GcmFtZVZpZXc6W3NlbGYgX2ZyYW1lVmlld11d
OwpAQCAtMTQzMSw4ICsxNDEyLDggQEAgc3RhdGljIHZvaWQgX3VwZGF0ZU1vdXNlb3ZlclRpbWVy
Q2FsbGJhYwogICAgIC8vICAgICAgd2hlbiB0aGVyZSBpcyBIVE1MIG92ZXJsYXBwaW5nIHRoZSB2
aWV3LCBzZWUgYnVnIDQzNjE2MjYpCiAgICAgLy8gICA0KSBOU0FjY2Vzc2liaWxpdHlIaXRUZXN0
IHJlbGllcyBvbiB0aGlzIGZvciBjaGVja2luZyB0aGUgY3Vyc29yIHBvc2l0aW9uLgogICAgIC8v
ICAgICAgT3VyIGNoZWNrIGZvciB0aGF0IGlzIHdoZXRoZXIgdGhlIGV2ZW50IGlzIE5TRmxhZ3ND
aGFuZ2VkLiAgVGhpcyB3b3JrcwotICAgIC8vICAgICAgZm9yIFZvaWNlT3ZlcidzIGNudGwtb3B0
LWY1IGNvbW1hbmQgKG1vdmUgZm9jdXMgdG8gaXRlbSB1bmRlciBjdXJzb3IpCi0gICAgLy8gICAg
ICBhbmQgRGljdGlvbmFyeSdzIGNtZC1jbnRsLUQgKG9wZW4gZGljdGlvbmFyeSBwb3B1cCBmb3Ig
aXRlbSB1bmRlciBjdXJzb3IpLgorICAgIC8vICAgICAgZm9yIFZvaWNlT3ZlcidzIENvbnRyb2wt
T3B0aW9uLUY1IGNvbW1hbmQgKG1vdmUgZm9jdXMgdG8gaXRlbSB1bmRlciBjdXJzb3IpCisgICAg
Ly8gICAgICBhbmQgRGljdGlvbmFyeSdzIENvbW1hbmQtQ29udHJvbC1EIChvcGVuIGRpY3Rpb25h
cnkgcG9wdXAgZm9yIGl0ZW0gdW5kZXIgY3Vyc29yKS4KICAgICAvLyAgICAgIFRoaXMgaXMgb2Yg
Y291cnNlIGEgaGFjay4KIAogICAgIEJPT0wgY2FwdHVyZUhpdHNPblN1YnZpZXdzOwpAQCAtMTYw
MSwxOCArMTU4MiwxOCBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFj
CiAgICAgaWYgKGxhc3RIaXRWaWV3ICE9IHZpZXcgJiYgbGFzdEhpdFZpZXcgJiYgW2xhc3RIaXRW
aWV3IF9mcmFtZV0pIHsKICAgICAgICAgLy8gSWYgd2UgYXJlIG1vdmluZyBvdXQgb2YgYSB2aWV3
IChvciBmcmFtZSksIGxldCdzIHByZXRlbmQgdGhlIG1vdXNlIG1vdmVkCiAgICAgICAgIC8vIGFs
bCB0aGUgd2F5IG91dCBvZiB0aGF0IHZpZXcuIEJ1dCB3ZSBoYXZlIHRvIGFjY291bnQgZm9yIHNj
cm9sbGluZywgYmVjYXVzZQotICAgICAgICAvLyBraHRtbCBkb2Vzbid0IHVuZGVyc3RhbmQgb3Vy
IGNsaXBwaW5nLgorICAgICAgICAvLyBXZWJDb3JlIGRvZXNuJ3QgdW5kZXJzdGFuZCBvdXIgY2xp
cHBpbmcuCiAgICAgICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtbW1tsYXN0SGl0VmlldyBfZnJh
bWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIGRvY3VtZW50VmlzaWJsZVJlY3RdOwogICAgICAg
ICBmbG9hdCB5U2Nyb2xsID0gdmlzaWJsZVJlY3Qub3JpZ2luLnk7CiAgICAgICAgIGZsb2F0IHhT
Y3JvbGwgPSB2aXNpYmxlUmVjdC5vcmlnaW4ueDsKIAotICAgICAgICBldmVudCA9IFtOU0V2ZW50
IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbjpOU01ha2VQb2ludCgtMSAtIHhTY3JvbGwsIC0xIC0geVNjcm9sbCApCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0g
bW9kaWZpZXJGbGFnc10KLSAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgd2luZG93TnVtYmVyOltbdmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQotICAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJl
OjBdOworICAgICAgICBOU0V2ZW50ICpldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlw
ZTpOU01vdXNlTW92ZWQKKyAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0xIC0geFNj
cm9sbCwgLTEgLSB5U2Nyb2xsKQorICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1
cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRl
IHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgIHdpbmRvd051bWJl
cjpbW3ZpZXcgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgICAgICBjb250ZXh0OltbTlNB
cHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQorICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlj
a0NvdW50OjAgcHJlc3N1cmU6MF07CiAgICAgICAgIGlmIChGcmFtZSogbGFzdEhpdENvcmVGcmFt
ZSA9IGNvcmUoW2xhc3RIaXRWaWV3IF9mcmFtZV0pKQogICAgICAgICAgICAgbGFzdEhpdENvcmVG
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwogICAgIH0KQEAgLTE3ODYs
NyArMTc2Nyw3IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWMKICAg
ICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdICYmIFtb
cGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVd
OwogfQogCi0tICh2b2lkKV9zdGFydEF1dG9zY3JvbGxUaW1lcjogKE5TRXZlbnQgKil0cmlnZ2Vy
RXZlbnQKKy0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOihOU0V2ZW50ICopdHJpZ2dlckV2
ZW50CiB7CiAgICAgaWYgKF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPT0gbmlsKSB7CiAgICAg
ICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJX
aXRoVGltZUludGVydmFsOkFVVE9TQ1JPTExfSU5URVJWQUwKQEAgLTE5NjQsNyArMTk0NSw3IEBA
IHN0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWMKIHsKICAgICBbc2VsZiBf
Y2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOwogCi0gICAgW1tzZWxmIF93
ZWJWaWV3XSBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlRm9yRnJhbWU6W3NlbGYgX2ZyYW1l
XV07CisgICAgW1dlYlZpZXcgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOltz
ZWxmIF9mcmFtZV1dOwogfQogCiAtICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZApAQCAtMzA3OSw3ICszMDYwLDcgQEAgc3RhdGljIHZv
aWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQogICAgIC8vIGluc2lkZSBBcHBLaXQgY29k
ZS4KICAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwogCi0gICAgW19wcml2YXRlLT5j
b21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgIFtf
cHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVM
ZWZ0Ok5PXTsKIAogICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKQEAgLTMwOTMsNyArMzA3NCw3IEBAIHN0YXRpYyB2
b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUKICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdN
b3VzZURvd25FdmVudCA9IFlFUzsKICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+
Y2xlYXJDb250ZXh0TWVudSgpOwogICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNl
RG93bihldmVudCk7Ci0gICAgQk9PTCBoYW5kbGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsK
KyAgICBCT09MIGhhbmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRD
b250ZXh0TWVudUV2ZW50KGV2ZW50KTsKICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25F
dmVudCA9IE5POwogCiAgICAgaWYgKCFoYW5kbGVkRXZlbnQpCkBAIC0zMzA2LDcgKzMyODcsNyBA
QCBzdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCiAKICAgICBpZiAoZm9y
bWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwgZm9ybWVyS2V5V2luZG93ID09IFtbc2Vs
ZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKSB7CiAgICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2Vk
QW5kQWN0aXZlU3RhdGVdOwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJl
dmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcGxl
dGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKICAgICB9
CiB9CiAKQEAgLTMzMTcsNyArMzI5OCw3IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFtfcHJpdmF0ZS0+Y29t
cENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICBbX3By
aXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVm
dDpOT107CiAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107
CiB9CiAKQEAgLTMzODUsMTIgKzMzNjYsMTMgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRB
bmRBY3RpdmVTdGF0ZQogICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFtoaXRWaWV3IGlz
S2luZE9mQ2xhc3M6W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZpZXcgOiBuaWw7
CiAgICAgaWYgKGhpdEhUTUxWaWV3KSB7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRdKQorICAgICAg
ICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50XSkgewogICAgICAgICAg
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkgewog
ICAgICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmV2ZW50
TWF5U3RhcnREcmFnKGV2ZW50KTsKICAgICAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1v
dXNlRG93bkV2ZW50Om5pbF07CiAgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAgICAgcmV0dXJuIFtoaXRWaWV3IHNob3VsZERlbGF5V2luZG93
T3JkZXJpbmdGb3JFdmVudDpldmVudF07CkBAIC0zNDE2LDcgKzMzOTgsNyBAQCBzdGF0aWMgdm9p
ZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCiAgICAgaWYgKFtjdXJyZW50SW5wdXRNYW5h
Z2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFu
ZGxlTW91c2VFdmVudDpldmVudF0pCiAgICAgICAgIGdvdG8gZG9uZTsKIAotICAgIFtfcHJpdmF0
ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAg
ICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBt
b3ZlTGVmdDpOT107CiAKICAgICAvLyBJZiB0aGUgd2ViIHBhZ2UgaGFuZGxlcyB0aGUgY29udGV4
dCBtZW51IGV2ZW50IGFuZCBtZW51Rm9yRXZlbnQ6IHJldHVybnMgbmlsLCB3ZSdsbCBnZXQgY29u
dHJvbCBjbGljayBldmVudHMgaGVyZS4KICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhc3MgdGhl
bSBhbG9uZyB0byBLSFRNTCBhIHNlY29uZCB0aW1lLgpAQCAtMzY3OSw3ICszNjYxLDcgQEAgc3Rh
dGljIEJPT0wgaXNJblBhc3N3b3JkRmllbGQoRnJhbWUqIGNvcgogICAgIEJPT0wgcmVzaWduID0g
W3N1cGVyIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKICAgICBpZiAocmVzaWduKSB7CiAgICAgICAg
IF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKLSAgICAgICAgW19wcml2
YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwor
ICAgICAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5n
ZTpOTyBtb3ZlTGVmdDpOT107CiAgICAgICAgIGlmICghW3NlbGYgbWFpbnRhaW5zSW5hY3RpdmVT
ZWxlY3Rpb25dKSB7IAogICAgICAgICAgICAgW3NlbGYgZGVzZWxlY3RBbGxdOwogICAgICAgICAg
ICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1c10p
CkBAIC0zOTc5LDE1ICszOTYxLDE1IEBAIHN0YXRpYyBCT09MIGlzSW5QYXNzd29yZEZpZWxkKEZy
YW1lKiBjb3IKICAgICBbX3ByaXZhdGUtPmtleURvd25FdmVudCByZWxlYXNlXTsKICAgICBfcHJp
dmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07CiAKLSAgICBCT09MIGNvbXBsZXRp
b25Qb3B1cFdhc09wZW4gPSBfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgJiYgW19wcml2YXRlLT5j
b21wQ29udHJvbGxlciBwb3B1cFdpbmRvd0lzT3Blbl07CisgICAgQk9PTCBjb21wbGV0aW9uUG9w
dXBXYXNPcGVuID0gX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyICYmIFtfcHJpdmF0ZS0+
Y29tcGxldGlvbkNvbnRyb2xsZXIgcG9wdXBXaW5kb3dJc09wZW5dOwogICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJD
b3JlICYmIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChl
dmVudCkpIHsKICAgICAgICAgLy8gV2ViQ29yZSBwcm9jZXNzZWQgYSBrZXkgZXZlbnQsIGJhaWwg
b24gYW55IHByZWV4aXN0aW5nIGNvbXBsZXRlOiBVSQogICAgICAgICBpZiAoY29tcGxldGlvblBv
cHVwV2FzT3BlbikKLSAgICAgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2
ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0gICAgfSBlbHNlIGlmICghX3ByaXZhdGUt
PmNvbXBDb250cm9sbGVyIHx8ICFbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGZpbHRlcktleURv
d246ZXZlbnRdKSB7CisgICAgICAgICAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVy
IGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOworICAgIH0gZWxzZSBpZiAoIV9w
cml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciB8fCAhW19wcml2YXRlLT5jb21wbGV0aW9uQ29u
dHJvbGxlciBmaWx0ZXJLZXlEb3duOmV2ZW50XSkgewogICAgICAgICAvLyBOb3QgY29uc3VtZWQg
YnkgY29tcGxldGU6IHBvcHVwIHdpbmRvdwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9s
bGVyIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOworICAgICAgICBbX3ByaXZh
dGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6
Tk9dOwogICAgICAgICBjYWxsU3VwZXIgPSBZRVM7CiAgICAgfQogICAgIGlmIChjYWxsU3VwZXIp
CkBAIC00NjEzLDkgKzQ1OTUsOSBAQCBOU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgICAg
LyogTlNDCiAKICAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKICAgICAgICAgcmV0dXJuOwotICAg
IGlmICghX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyKQotICAgICAgICBfcHJpdmF0ZS0+Y29tcENv
bnRyb2xsZXIgPSBbW1dlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSFRN
TFZpZXc6c2VsZl07Ci0gICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBkb0NvbXBsZXRpb25d
OworICAgIGlmICghX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyKQorICAgICAgICBfcHJp
dmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgPSBbW1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxl
ciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OltzZWxmIF93ZWJWaWV3XSBIVE1MVmlldzpzZWxmXTsK
KyAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGRvQ29tcGxldGlvbl07CiB9CiAK
IC0gKHZvaWQpY2hlY2tTcGVsbGluZzooaWQpc2VuZGVyCkBAIC01MzQwLDcgKzUzMjIsNyBAQCBz
dGF0aWMgQ0dQb2ludCBjb3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvCiAKICAgICBpZiAoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCkp
IHsKICAgICAgICAgTlNFdmVudCAqbWFjRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5tYWNFdmVudCgp
OwotICAgICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TS2V5RG93biAmJiBbX3ByaXZhdGUt
PmNvbXBDb250cm9sbGVyIGZpbHRlcktleURvd246bWFjRXZlbnRdKQorICAgICAgICBpZiAoW21h
Y0V2ZW50IHR5cGVdID09IE5TS2V5RG93biAmJiBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9s
bGVyIGZpbHRlcktleURvd246bWFjRXZlbnRdKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIAogICAgICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFuZ2VkKQpA
QCAtNTg4NCwyOTIgKzU4NjYsNiBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0
dHJpYnV0CiAKIEBlbmQKIAotLyoKLSAgICBUaGlzIGNsYXNzIHJ1bnMgdGhlIHNob3cgZm9yIGhh
bmRpbmcgdGhlIGNvbXBsZXRlOiBOU1RleHRWaWV3IG9wZXJhdGlvbi4gIEl0IGNvdW50cyBvbiBp
dHMgSFRNTCB2aWV3Ci0gICAgdG8gY2FsbCBlbmRSZXZlcnRpbmdDaGFuZ2U6IHdoZW5ldmVyIHRo
ZSBjdXJyZW50IGNvbXBsZXRpb24gbmVlZHMgdG8gYmUgYWJvcnRlZC4KLSAKLSAgICBUaGUgY2xh
c3MgaXMgaW4gb25lIG9mIHR3byBtb2RlczogIFBvcHVwV2luZG93IHNob3dpbmcsIG9yIG5vdC4g
IEl0IGlzIHNob3duIHdoZW4gYSBjb21wbGV0aW9uIHlpZWxkcwotICAgIG1vcmUgdGhhbiBvbmUg
bWF0Y2guICBJZiBhIGNvbXBsZXRpb24geWllbGRzIG9uZSBvciB6ZXJvIG1hdGNoZXMsIGl0IGlz
IG5vdCBzaG93biwgYW5kICoqdGhlcmUgaXMgbm8KLSAgICBzdGF0ZSBjYXJyaWVkIGFjcm9zcyB0
byB0aGUgbmV4dCBjb21wbGV0aW9uKiouCi0gKi8KLQotQGltcGxlbWVudGF0aW9uIFdlYlRleHRD
b21wbGV0ZUNvbnRyb2xsZXIKLQotLSAoaWQpaW5pdFdpdGhIVE1MVmlldzooV2ViSFRNTFZpZXcg
Kil2aWV3Ci17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBpZiAoIXNlbGYpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgX3ZpZXcgPSB2aWV3OwotICAgIHJldHVybiBzZWxmOwotfQot
Ci0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBbX3BvcHVwV2luZG93IHJlbGVhc2VdOwotICAgIFtf
Y29tcGxldGlvbnMgcmVsZWFzZV07Ci0gICAgW19vcmlnaW5hbFN0cmluZyByZWxlYXNlXTsKLSAg
ICAKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQpX2luc2VydE1hdGNoOihOU1N0
cmluZyAqKW1hdGNoCi17Ci0gICAgLy8gRklYTUU6IDM3Njk2NTQgLSBXZSBzaG91bGQgcHJlc2Vy
dmUgY2FzZSBvZiBzdHJpbmcgYmVpbmcgaW5zZXJ0ZWQsIGV2ZW4gaW4gcHJlZml4IChidXQgdGhl
biBhbHNvIGJlCi0gICAgLy8gYWJsZSB0byByZXZlcnQgdGhhdCkuICBNaW1pYyBOU1RleHQuCi0g
ICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07Ci0gICAgTlNTdHJpbmcgKm5ld1Rl
eHQgPSBbbWF0Y2ggc3Vic3RyaW5nRnJvbUluZGV4OnByZWZpeExlbmd0aF07Ci0gICAgW2ZyYW1l
IF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3VGV4dCBzZWxlY3RSZXBsYWNlbWVudDpZRVMg
c21hcnRSZXBsYWNlOk5PXTsKLX0KLQotLy8gbW9zdGx5IGxpZnRlZCBmcm9tIE5TVGV4dFZpZXdf
S2V5QmluZGluZy5tCi0tICh2b2lkKV9idWlsZFVJCi17Ci0gICAgTlNSZWN0IHNjcm9sbEZyYW1l
ID0gTlNNYWtlUmVjdCgwLCAwLCAxMDAsIDEwMCk7Ci0gICAgTlNSZWN0IHRhYmxlRnJhbWUgPSBO
U1plcm9SZWN0OyAgICAKLSAgICB0YWJsZUZyYW1lLnNpemUgPSBbTlNTY3JvbGxWaWV3IGNvbnRl
bnRTaXplRm9yRnJhbWVTaXplOnNjcm9sbEZyYW1lLnNpemUgaGFzSG9yaXpvbnRhbFNjcm9sbGVy
Ok5PIGhhc1ZlcnRpY2FsU2Nyb2xsZXI6WUVTIGJvcmRlclR5cGU6TlNOb0JvcmRlcl07Ci0gICAg
Ly8gQWRkZWQgY2FzdCB0byB3b3JrIGFyb3VuZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgRm91bmRh
dGlvbiBpbml0V2l0aElkZW50aWZpZXI6IG1ldGhvZHMgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVy
IHR5cGVzLgotICAgIE5TVGFibGVDb2x1bW4gKmNvbHVtbiA9IFsoTlNUYWJsZUNvbHVtbiAqKVtO
U1RhYmxlQ29sdW1uIGFsbG9jXSBpbml0V2l0aElkZW50aWZpZXI6W05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6MF1dOwotICAgIFtjb2x1bW4gc2V0V2lkdGg6dGFibGVGcmFtZS5zaXplLndpZHRoXTsK
LSAgICBbY29sdW1uIHNldEVkaXRhYmxlOk5PXTsKLSAgICAKLSAgICBfdGFibGVWaWV3ID0gW1tO
U1RhYmxlVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTp0YWJsZUZyYW1lXTsKLSAgICBbX3RhYmxl
VmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZV07Ci0gICAgW190YWJs
ZVZpZXcgYWRkVGFibGVDb2x1bW46Y29sdW1uXTsKLSAgICBbY29sdW1uIHJlbGVhc2VdOwotICAg
IFtfdGFibGVWaWV3IHNldEdyaWRTdHlsZU1hc2s6TlNUYWJsZVZpZXdHcmlkTm9uZV07Ci0gICAg
W190YWJsZVZpZXcgc2V0Q29ybmVyVmlldzpuaWxdOwotICAgIFtfdGFibGVWaWV3IHNldEhlYWRl
clZpZXc6bmlsXTsKLSAgICBbX3RhYmxlVmlldyBzZXRDb2x1bW5BdXRvcmVzaXppbmdTdHlsZTpO
U1RhYmxlVmlld1VuaWZvcm1Db2x1bW5BdXRvcmVzaXppbmdTdHlsZV07Ci0gICAgW190YWJsZVZp
ZXcgc2V0RGVsZWdhdGU6c2VsZl07Ci0gICAgW190YWJsZVZpZXcgc2V0RGF0YVNvdXJjZTpzZWxm
XTsKLSAgICBbX3RhYmxlVmlldyBzZXRUYXJnZXQ6c2VsZl07Ci0gICAgW190YWJsZVZpZXcgc2V0
RG91YmxlQWN0aW9uOkBzZWxlY3Rvcih0YWJsZUFjdGlvbjopXTsKLSAgICAKLSAgICBOU1Njcm9s
bFZpZXcgKnNjcm9sbFZpZXcgPSBbW05TU2Nyb2xsVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpz
Y3JvbGxGcmFtZV07Ci0gICAgW3Njcm9sbFZpZXcgc2V0Qm9yZGVyVHlwZTpOU05vQm9yZGVyXTsK
LSAgICBbc2Nyb2xsVmlldyBzZXRIYXNWZXJ0aWNhbFNjcm9sbGVyOllFU107Ci0gICAgW3Njcm9s
bFZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWln
aHRTaXphYmxlXTsKLSAgICBbc2Nyb2xsVmlldyBzZXREb2N1bWVudFZpZXc6X3RhYmxlVmlld107
Ci0gICAgW190YWJsZVZpZXcgcmVsZWFzZV07Ci0gICAgCi0gICAgX3BvcHVwV2luZG93ID0gW1tO
U1dpbmRvdyBhbGxvY10gaW5pdFdpdGhDb250ZW50UmVjdDpzY3JvbGxGcmFtZSBzdHlsZU1hc2s6
TlNCb3JkZXJsZXNzV2luZG93TWFzayBiYWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVm
ZXI6Tk9dOwotICAgIFtfcG9wdXBXaW5kb3cgc2V0QWxwaGFWYWx1ZTowLjg4Zl07Ci0gICAgW19w
b3B1cFdpbmRvdyBzZXRDb250ZW50VmlldzpzY3JvbGxWaWV3XTsKLSAgICBbc2Nyb2xsVmlldyBy
ZWxlYXNlXTsKLSAgICBbX3BvcHVwV2luZG93IHNldEhhc1NoYWRvdzpZRVNdOwotICAgIFtfcG9w
dXBXaW5kb3cgc2V0T25lU2hvdDpZRVNdOwotICAgIFtfcG9wdXBXaW5kb3cgX3NldEZvcmNlQWN0
aXZlQ29udHJvbHM6WUVTXTsKLSAgICBbX3BvcHVwV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3Nl
ZDpOT107Ci19Ci0KLS8vIG1vc3RseSBsaWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJpbmRpbmcu
bQotLSAodm9pZClfcGxhY2VQb3B1cFdpbmRvdzooTlNQb2ludCl0b3BMZWZ0Ci17Ci0gICAgaW50
IG51bWJlclRvU2hvdyA9IFtfY29tcGxldGlvbnMgY291bnRdOwotICAgIGlmIChudW1iZXJUb1No
b3cgPiAyMCkgewotICAgICAgICBudW1iZXJUb1Nob3cgPSAyMDsKLSAgICB9Ci0KLSAgICBOU1Jl
Y3Qgd2luZG93RnJhbWU7Ci0gICAgTlNQb2ludCB3b3JkU3RhcnQgPSB0b3BMZWZ0OwotICAgIHdp
bmRvd0ZyYW1lLm9yaWdpbiA9IFtbX3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOltf
dmlldyBjb252ZXJ0UG9pbnQ6d29yZFN0YXJ0IHRvVmlldzpuaWxdXTsKLSAgICB3aW5kb3dGcmFt
ZS5zaXplLmhlaWdodCA9IG51bWJlclRvU2hvdyAqIFtfdGFibGVWaWV3IHJvd0hlaWdodF0gKyAo
bnVtYmVyVG9TaG93ICsgMSkgKiBbX3RhYmxlVmlldyBpbnRlcmNlbGxTcGFjaW5nXS5oZWlnaHQ7
Ci0gICAgd2luZG93RnJhbWUub3JpZ2luLnkgLT0gd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQ7Ci0g
ICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZToxMi4wZl0sIE5TRm9udEF0
dHJpYnV0ZU5hbWUsIG5pbF07Ci0gICAgZmxvYXQgbWF4V2lkdGggPSAwLjBmOwotICAgIGludCBt
YXhJbmRleCA9IC0xOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJUb1No
b3c7IGkrKykgewotICAgICAgICBmbG9hdCB3aWR0aCA9IGNlaWxmKFtbX2NvbXBsZXRpb25zIG9i
amVjdEF0SW5kZXg6aV0gc2l6ZVdpdGhBdHRyaWJ1dGVzOmF0dHJpYnV0ZXNdLndpZHRoKTsKLSAg
ICAgICAgaWYgKHdpZHRoID4gbWF4V2lkdGgpIHsKLSAgICAgICAgICAgIG1heFdpZHRoID0gd2lk
dGg7Ci0gICAgICAgICAgICBtYXhJbmRleCA9IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgd2lu
ZG93RnJhbWUuc2l6ZS53aWR0aCA9IDEwMDsKLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewotICAg
ICAgICBtYXhXaWR0aCA9IGNlaWxmKFtOU1Njcm9sbFZpZXcgZnJhbWVTaXplRm9yQ29udGVudFNp
emU6TlNNYWtlU2l6ZShtYXhXaWR0aCwgMTAwLjBmKSBoYXNIb3Jpem9udGFsU2Nyb2xsZXI6Tk8g
aGFzVmVydGljYWxTY3JvbGxlcjpZRVMgYm9yZGVyVHlwZTpOU05vQm9yZGVyXS53aWR0aCk7Ci0g
ICAgICAgIG1heFdpZHRoID0gY2VpbGYoW05TV2luZG93IGZyYW1lUmVjdEZvckNvbnRlbnRSZWN0
Ok5TTWFrZVJlY3QoMC4wZiwgMC4wZiwgbWF4V2lkdGgsIDEwMC4wZikgc3R5bGVNYXNrOk5TQm9y
ZGVybGVzc1dpbmRvd01hc2tdLnNpemUud2lkdGgpOwotICAgICAgICBtYXhXaWR0aCArPSA1LjBm
OwotICAgICAgICB3aW5kb3dGcmFtZS5zaXplLndpZHRoID0gTUFYKG1heFdpZHRoLCB3aW5kb3dG
cmFtZS5zaXplLndpZHRoKTsKLSAgICAgICAgbWF4V2lkdGggPSBNSU4oNDAwLjBmLCB3aW5kb3dG
cmFtZS5zaXplLndpZHRoKTsKLSAgICB9Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRGcmFtZTp3aW5k
b3dGcmFtZSBkaXNwbGF5Ok5PXTsKLSAgICAKLSAgICBbX3RhYmxlVmlldyByZWxvYWREYXRhXTsK
LSAgICBbX3RhYmxlVmlldyBzZWxlY3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0
aEluZGV4OjBdIGJ5RXh0ZW5kaW5nU2VsZWN0aW9uOk5PXTsKLSAgICBbX3RhYmxlVmlldyBzY3Jv
bGxSb3dUb1Zpc2libGU6MF07Ci0gICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOwotICAgIFtf
cG9wdXBXaW5kb3cgc2V0TGV2ZWw6TlNQb3BVcE1lbnVXaW5kb3dMZXZlbF07Ci0gICAgW19wb3B1
cFdpbmRvdyBvcmRlckZyb250Om5pbF07ICAgIAotICAgIFtbX3ZpZXcgd2luZG93XSBhZGRDaGls
ZFdpbmRvdzpfcG9wdXBXaW5kb3cgb3JkZXJlZDpOU1dpbmRvd0Fib3ZlXTsKLX0KLQotLSAodm9p
ZClkb0NvbXBsZXRpb24KLXsKLSAgICBpZiAoIV9wb3B1cFdpbmRvdykgewotICAgICAgICBOU1Nw
ZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJd
OwotICAgICAgICBpZiAoIWNoZWNrZXIpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiTm8gTlNT
cGVsbENoZWNrZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIEdldCBwcmVjZWVkaW5nIHdvcmQgc3RlbQotICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBb
X3ZpZXcgX2ZyYW1lXTsKLSAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZy
YW1lKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgICAgICBE
T01SYW5nZSAqd2hvbGVXb3JkID0gW2ZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0
aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORAotICAgICAgICAgICAgZGlyZWN0aW9uOlNl
bGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJEIGdyYW51bGFyaXR5OldvcmRHcmFudWxhcml0eV07
Ci0gICAgICAgIERPTVJhbmdlICpwcmVmaXggPSBbd2hvbGVXb3JkIGNsb25lUmFuZ2VdOwotICAg
ICAgICBbcHJlZml4IHNldEVuZDpbc2VsZWN0aW9uIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3Nl
bGVjdGlvbiBzdGFydE9mZnNldF1dOwotCi0gICAgICAgIC8vIFJlamVjdCBzb21lIE5PUCBjYXNl
cwotICAgICAgICBpZiAoW3ByZWZpeCBjb2xsYXBzZWRdKSB7Ci0gICAgICAgICAgICBOU0JlZXAo
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBOU1N0cmluZyAqcHJl
Zml4U3RyID0gW2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpwcmVmaXhdOwotICAgICAgICBOU1N0cmlu
ZyAqdHJpbW1lZFByZWZpeCA9IFtwcmVmaXhTdHIgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJ
blNldDpbTlNDaGFyYWN0ZXJTZXQgd2hpdGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsK
LSAgICAgICAgaWYgKFt0cmltbWVkUHJlZml4IGxlbmd0aF0gPT0gMCkgewotICAgICAgICAgICAg
TlNCZWVwKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcHJlZml4
TGVuZ3RoID0gW3ByZWZpeFN0ciBsZW5ndGhdOwotCi0gICAgICAgIC8vIExvb2t1cCBtYXRjaGVz
Ci0gICAgICAgIFtfY29tcGxldGlvbnMgcmVsZWFzZV07Ci0gICAgICAgIF9jb21wbGV0aW9ucyA9
IFtjaGVja2VyIGNvbXBsZXRpb25zRm9yUGFydGlhbFdvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBb
cHJlZml4U3RyIGxlbmd0aF0pIGluU3RyaW5nOnByZWZpeFN0ciBsYW5ndWFnZTpuaWwgaW5TcGVs
bERvY3VtZW50V2l0aFRhZzpbW192aWV3IF93ZWJWaWV3XSBzcGVsbENoZWNrZXJEb2N1bWVudFRh
Z11dOwotICAgICAgICBbX2NvbXBsZXRpb25zIHJldGFpbl07Ci0gICAgCi0gICAgICAgIGlmICgh
X2NvbXBsZXRpb25zIHx8IFtfY29tcGxldGlvbnMgY291bnRdID09IDApIHsKLSAgICAgICAgICAg
IE5TQmVlcCgpOwotICAgICAgICB9IGVsc2UgaWYgKFtfY29tcGxldGlvbnMgY291bnRdID09IDEp
IHsKLSAgICAgICAgICAgIFtzZWxmIF9pbnNlcnRNYXRjaDpbX2NvbXBsZXRpb25zIG9iamVjdEF0
SW5kZXg6MF1dOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKCFfb3JpZ2lu
YWxTdHJpbmcpOyAgICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGJlIHNldCBJRkYgd2UgaGF2ZSBh
IHBvcHVwIHdpbmRvdwotICAgICAgICAgICAgX29yaWdpbmFsU3RyaW5nID0gW1tmcmFtZSBfc3Ry
aW5nRm9yUmFuZ2U6c2VsZWN0aW9uXSByZXRhaW5dOwotICAgICAgICAgICAgW3NlbGYgX2J1aWxk
VUldOwotICAgICAgICAgICAgTlNSZWN0IHdvcmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdE5v
ZGU6W3dob2xlV29yZCBzdGFydENvbnRhaW5lcl0gb2Zmc2V0Olt3aG9sZVdvcmQgc3RhcnRPZmZz
ZXRdIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsKLSAgICAgICAgICAg
IC8vICsxIHRvIGJlIHVuZGVyIHRoZSB3b3JkLCBub3QgdGhlIGNhcmV0Ci0gICAgICAgICAgICAv
LyBGSVhNRSAtIDM3Njk2NTIgLSBXcm9uZyBwb3NpdGlvbmluZyBmb3IgcmlnaHQgdG8gbGVmdCBs
YW5ndWFnZXMuICBXZSBzaG91bGQgbGluZSB1cCB0aGUgdXBwZXIKLSAgICAgICAgICAgIC8vIHJp
Z2h0IGNvcm5lciB3aXRoIHRoZSBjYXJldCBpbnN0ZWFkIG9mIHVwcGVyIGxlZnQsIGFuZCB0aGUg
KzEgd291bGQgYmUgYSAtMS4KLSAgICAgICAgICAgIE5TUG9pbnQgd29yZExvd2VyTGVmdCA9IHsg
TlNNaW5YKHdvcmRSZWN0KSsxLCBOU01heFkod29yZFJlY3QpIH07Ci0gICAgICAgICAgICBbc2Vs
ZiBfcGxhY2VQb3B1cFdpbmRvdzp3b3JkTG93ZXJMZWZ0XTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwot
ICAgIH0KLX0KLQotLSAodm9pZCllbmRSZXZlcnRpbmdDaGFuZ2U6KEJPT0wpcmV2ZXJ0Q2hhbmdl
IG1vdmVMZWZ0OihCT09MKWdvTGVmdAotewotICAgIGlmIChfcG9wdXBXaW5kb3cpIHsKLSAgICAg
ICAgLy8gdGVhciBkb3duIFVJCi0gICAgICAgIFtbX3ZpZXcgd2luZG93XSByZW1vdmVDaGlsZFdp
bmRvdzpfcG9wdXBXaW5kb3ddOwotICAgICAgICBbX3BvcHVwV2luZG93IG9yZGVyT3V0OnNlbGZd
OwotICAgICAgICAvLyBNdXN0IGF1dG9yZWxlYXNlIGJlY2F1c2UgZXZlbnQgdHJhY2tpbmcgY29k
ZSBtYXkgYmUgb24gdGhlIHN0YWNrIHRvdWNoaW5nIFVJCi0gICAgICAgIFtfcG9wdXBXaW5kb3cg
YXV0b3JlbGVhc2VdOwotICAgICAgICBfcG9wdXBXaW5kb3cgPSBuaWw7Ci0KLSAgICAgICAgaWYg
KHJldmVydENoYW5nZSkgewotICAgICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9m
cmFtZV07Ci0gICAgICAgICAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpfb3Jp
Z2luYWxTdHJpbmcgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Ci0gICAg
ICAgIH0gZWxzZSBpZiAoW192aWV3IF9oYXNTZWxlY3Rpb25dKSB7Ci0gICAgICAgICAgICBpZiAo
Z29MZWZ0KQotICAgICAgICAgICAgICAgIFtfdmlldyBtb3ZlQmFja3dhcmQ6bmlsXTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBbX3ZpZXcgbW92ZUZvcndhcmQ6bmlsXTsKLSAg
ICAgICAgfQotICAgICAgICBbX29yaWdpbmFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICBfb3Jp
Z2luYWxTdHJpbmcgPSBuaWw7Ci0gICAgfQotICAgIC8vIGVsc2UgdGhlcmUgaXMgbm8gc3RhdGUg
dG8gYWJvcnQgaWYgdGhlIHdpbmRvdyB3YXMgbm90IHVwCi19Ci0KLS0gKEJPT0wpcG9wdXBXaW5k
b3dJc09wZW4KLXsKLSAgICByZXR1cm4gX3BvcHVwV2luZG93ICE9IG5pbDsKLX0KLQotLy8gV2Vi
SFRNTFZpZXcgZ2l2ZXMgdXMgYSBjcmFjayBhdCBrZXkgZXZlbnRzIGl0IHNlZXMuIFJldHVybiB3
aGV0aGVyIHdlIGNvbnN1bWVkIHRoZSBldmVudC4KLS8vIFRoZSBmZWF0dXJlcyBmb3IgdGhlIHZh
cmlvdXMga2V5cyBtaW1pYyBOU1RleHRWaWV3LgotLSAoQk9PTClmaWx0ZXJLZXlEb3duOihOU0V2
ZW50ICopZXZlbnQKLXsKLSAgICBpZiAoIV9wb3B1cFdpbmRvdykKLSAgICAgICAgcmV0dXJuIE5P
OwotICAgIE5TU3RyaW5nICpzdHJpbmcgPSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZp
ZXJzXTsKLSAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAg
IHVuaWNoYXIgYyA9IFtzdHJpbmcgY2hhcmFjdGVyQXRJbmRleDowXTsKLSAgICBpZiAoYyA9PSBO
U1VwQXJyb3dGdW5jdGlvbktleSkgewotICAgICAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxl
VmlldyBzZWxlY3RlZFJvd107Ci0gICAgICAgIGlmICgwIDwgc2VsZWN0ZWRSb3cpIHsKLSAgICAg
ICAgICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRX
aXRoSW5kZXg6c2VsZWN0ZWRSb3cgLSAxXSBieUV4dGVuZGluZ1NlbGVjdGlvbjpOT107Ci0gICAg
ICAgICAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dUb1Zpc2libGU6c2VsZWN0ZWRSb3cgLSAxXTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBpZiAoYyA9PSBOU0Rv
d25BcnJvd0Z1bmN0aW9uS2V5KSB7Ci0gICAgICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVW
aWV3IHNlbGVjdGVkUm93XTsKLSAgICAgICAgaWYgKHNlbGVjdGVkUm93IDwgKGludClbX2NvbXBs
ZXRpb25zIGNvdW50XSAtIDEpIHsKLSAgICAgICAgICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0lu
ZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6c2VsZWN0ZWRSb3cgKyAxXSBieUV4
dGVuZGluZ1NlbGVjdGlvbjpOT107Ci0gICAgICAgICAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dU
b1Zpc2libGU6c2VsZWN0ZWRSb3cgKyAxXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gWUVT
OwotICAgIH0KLSAgICBpZiAoYyA9PSBOU1JpZ2h0QXJyb3dGdW5jdGlvbktleSB8fCBjID09ICdc
bicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1x0JykgewotICAgICAgICAvLyBGSVhNRTogV2hhdCBh
Ym91dCBiYWNrdGFiPwotICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxl
ZnQ6Tk9dOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBpZiAoYyA9PSBOU0xlZnRB
cnJvd0Z1bmN0aW9uS2V5KSB7Ci0gICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBt
b3ZlTGVmdDpZRVNdOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICBpZiAoYyA9PSAw
eDFCIHx8IGMgPT0gTlNGNUZ1bmN0aW9uS2V5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBGNT8KLSAg
ICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0gICAgICAg
IHJldHVybiBZRVM7Ci0gICAgfQotICAgIGlmIChjID09ICcgJyB8fCBjID49IDB4MjEgJiYgYyA8
PSAweDJGIHx8IGMgPj0gMHgzQSAmJiBjIDw9IDB4NDAgfHwgYyA+PSAweDVCICYmIGMgPD0gMHg2
MCB8fCBjID49IDB4N0IgJiYgYyA8PSAweDdEKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBJcyB0aGUg
YWJvdmUgbGlzdCBvZiBrZXlzIHJlYWxseSBkZWZpbml0aXZlPwotICAgICAgICAvLyBPcmlnaW5h
bGx5IHRoaXMgY29kZSBjYWxsZWQgaXNwdW5jdDsgYXJlbid0IHRoZXJlIG90aGVyIHB1bmN0dWF0
aW9uIGtleXMgb24gaW50ZXJuYXRpb25hbCBrZXlib2FyZHM/Ci0gICAgICAgIFtzZWxmIGVuZFJl
dmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIHJldHVybiBOTzsgLy8gbGV0
IHRoZSBjaGFyIGdldCBpbnNlcnRlZAotICAgIH0KLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKHZv
aWQpX3JlZmxlY3RTZWxlY3Rpb24KLXsKLSAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmll
dyBzZWxlY3RlZFJvd107Ci0gICAgQVNTRVJUKHNlbGVjdGVkUm93ID49IDAgJiYgc2VsZWN0ZWRS
b3cgPCAoaW50KVtfY29tcGxldGlvbnMgY291bnRdKTsKLSAgICBbc2VsZiBfaW5zZXJ0TWF0Y2g6
W19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OnNlbGVjdGVkUm93XV07Ci19Ci0KLS0gKHZvaWQp
dGFibGVBY3Rpb246KGlkKXNlbmRlcgotewotICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsK
LSAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotfQotCi0tIChO
U0ludGVnZXIpbnVtYmVyT2ZSb3dzSW5UYWJsZVZpZXc6KE5TVGFibGVWaWV3ICopdGFibGVWaWV3
Ci17Ci0gICAgcmV0dXJuIFtfY29tcGxldGlvbnMgY291bnRdOwotfQotCi0tIChpZCl0YWJsZVZp
ZXc6KE5TVGFibGVWaWV3ICopdGFibGVWaWV3IG9iamVjdFZhbHVlRm9yVGFibGVDb2x1bW46KE5T
VGFibGVDb2x1bW4gKil0YWJsZUNvbHVtbiByb3c6KE5TSW50ZWdlcilyb3cKLXsKLSAgICByZXR1
cm4gW19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OnJvd107Ci19Ci0KLS0gKHZvaWQpdGFibGVW
aWV3U2VsZWN0aW9uRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewot
ICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsKLX0KLQotQGVuZAotCiBAaW1wbGVtZW50YXRp
b24gV2ViSFRNTFZpZXcgKFdlYkRvY3VtZW50UHJpdmF0ZVByb3RvY29scykKIAogLSAoTlNSZWN0
KXNlbGVjdGlvblJlY3QKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlv
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENv
bXBsZXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDQ0MjkyKQkoZnJvbSBXZWJLaXQvbWFjL1dl
YlZpZXcvV2ViSFRNTFZpZXcubW06NDQyOTIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NDMzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiwgMjAwNyBH
cmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJXZWJIVE1M
Vmlldy5oIgorCisjaW1wb3J0ICJET01DU1NTdHlsZURlY2xhcmF0aW9uSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIkRPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NRG9jdW1l
bnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01S
YW5nZUludGVybmFsLmgiCisjaW1wb3J0ICJXZWJBcmNoaXZlLmgiCisjaW1wb3J0ICJXZWJDbGlw
Vmlldy5oIgorI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9uc0ludGVybmFsLmgiCisjaW1wb3J0ICJX
ZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkRlZmF1bHRVSURlbGVnYXRlLmgi
CisjaW1wb3J0ICJXZWJEb2N1bWVudEludGVybmFsLmgiCisjaW1wb3J0ICJXZWJEeW5hbWljU2Ny
b2xsQmFyc1ZpZXcuaCIKKyNpbXBvcnQgIldlYkVkaXRpbmdEZWxlZ2F0ZS5oIgorI2ltcG9ydCAi
V2ViRWxlbWVudERpY3Rpb25hcnkuaCIKKyNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKKyNp
bXBvcnQgIldlYkZyYW1lUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50ZXJuYWwu
aCIKKyNpbXBvcnQgIldlYkhUTUxSZXByZXNlbnRhdGlvblByaXZhdGUuaCIKKyNpbXBvcnQgIldl
YkhUTUxWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKKyNpbXBvcnQg
IldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJLaXRWZXJzaW9uQ2hlY2tzLmgi
CisjaW1wb3J0ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCIKKyNpbXBvcnQgIldlYk5TQXR0cmli
dXRlZFN0cmluZ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNFdmVudEV4dHJhcy5oIgorI2ltcG9y
dCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNJbWFnZUV4dHJhcy5o
IgorI2ltcG9ydCAiV2ViTlNPYmplY3RFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TUGFzdGVib2Fy
ZEV4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNQcmludE9wZXJhdGlvbkV4dHJhcy5oIgorI2ltcG9y
dCAiV2ViTlNVUkxFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TVmlld0V4dHJhcy5oIgorI2ltcG9y
dCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJXZWJOb2RlSGlnaGxpZ2h0Lmgi
CisjaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNl
cy5oIgorI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJSZXNv
dXJjZVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlN0cmluZ1RydW5jYXRvci5oIgorI2ltcG9ydCAi
V2ViVHlwZXNJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKKyNp
bXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0
eS5oPgorI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0NhY2hlZEltYWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NhY2hlZFJlc291cmNl
Q2xpZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0NvbnRleHRNZW51Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Q29udHJvbGxlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVu
dEZyYWdtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+CisjaW1wb3J0
IDxXZWJDb3JlL0VkaXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FZGl0b3JEZWxldGVBY3Rpb24u
aD4KKyNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhh
bmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uSGFuZGxlcnMuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5o
PgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRl
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSFRN
TE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvSW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9MZWdhY3lXZWJBcmNoaXZlLmg+CisjaW1wb3J0IDxXZWJDb3JlL01JTUVUeXBl
UmVnaXN0cnkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2
ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NlbGVj
dGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CisjaW1wb3J0IDxXZWJDb3JlL1RleHQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
V2ViQ29yZVRleHRSZW5kZXJlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KKyNpbXBv
cnQgPFdlYktpdC9ET00uaD4KKyNpbXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+CisjaW1w
b3J0IDxXZWJLaXQvRE9NUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNl
Lmg+CisjaW1wb3J0IDxkbGZjbi5oPgorI2ltcG9ydCA8bGltaXRzPgorI2ltcG9ydCA8cnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNlbmRpZgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Cit1c2luZyBuYW1l
c3BhY2UgV1RGOworCitAaW50ZXJmYWNlIE5TV2luZG93IChCb3JkZXJWaWV3QWNjZXNzKQorLSAo
TlNWaWV3Kilfd2ViX2JvcmRlclZpZXc7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1dpbmRv
dyAoQm9yZGVyVmlld0FjY2VzcykKKy0gKE5TVmlldyopX3dlYl9ib3JkZXJWaWV3Cit7CisgICAg
cmV0dXJuIF9ib3JkZXJWaWV3OworfQorQGVuZAorCitAaW50ZXJmYWNlIFdlYlJlc3BvbmRlckNo
YWluU2luayA6IE5TUmVzcG9uZGVyIHsKKyAgICBOU1Jlc3BvbmRlciogX2xhc3RSZXNwb25kZXJJ
bkNoYWluOworICAgIEJPT0wgX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsKK30KKy0gKGlkKWlu
aXRXaXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVyICopY2hhaW47CistICh2b2lkKWRldGFj
aDsKKy0gKEJPT0wpcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kOworQGVuZAorCitzdGF0aWMgSU1Q
IG9sZFNldEN1cnNvcklNUCA9IE5VTEw7CisKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorCitz
dGF0aWMgSU1QIG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAgPSBOVUxMOworc3RhdGljIEJPT0wgY2Fu
U2V0Q3Vyc29yID0gWUVTOworCitzdGF0aWMgdm9pZCByZXNldEN1cnNvclJlY3RzKE5TV2luZG93
KiBzZWxmLCBTRUwgY21kKQoreworICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBtb3VzZUxvY2F0
aW9uT3V0c2lkZU9mRXZlbnRTdHJlYW1dOworICAgIE5TVmlldyogdmlldyA9IFtbc2VsZiBfd2Vi
X2JvcmRlclZpZXddIGhpdFRlc3Q6cG9pbnRdOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNz
OltXZWJIVE1MVmlldyBjbGFzc11dKSB7CisgICAgICAgIFdlYkhUTUxWaWV3ICpodG1sVmlldyA9
IChXZWJIVE1MVmlldyopdmlldzsKKyAgICAgICAgTlNQb2ludCBsb2NhbFBvaW50ID0gW2h0bWxW
aWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdOworICAgICAgICBOU0RpY3Rpb25h
cnkgKmRpY3QgPSBbaHRtbFZpZXcgZWxlbWVudEF0UG9pbnQ6bG9jYWxQb2ludCBhbGxvd1NoYWRv
d0NvbnRlbnQ6Tk9dOworICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0gW2RpY3Qgb2JqZWN0
Rm9yS2V5OldlYkVsZW1lbnRET01Ob2RlS2V5XTsKKyAgICAgICAgaWYgKCFbZWxlbWVudCBpc0tp
bmRPZkNsYXNzOltET01IVE1MQXBwbGV0RWxlbWVudCBjbGFzc11dICYmICFbZWxlbWVudCBpc0tp
bmRPZkNsYXNzOltET01IVE1MT2JqZWN0RWxlbWVudCBjbGFzc11dICYmCisgICAgICAgICAgICAh
W2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEVtYmVkRWxlbWVudCBjbGFzc11dKQorICAg
ICAgICAgICAgY2FuU2V0Q3Vyc29yID0gTk87CisgICAgfQorICAgIG9sZFJlc2V0Q3Vyc29yUmVj
dHNJTVAoc2VsZiwgY21kKTsKKyAgICBjYW5TZXRDdXJzb3IgPSBZRVM7Cit9CisKK3N0YXRpYyB2
b2lkIHNldEN1cnNvcihOU0N1cnNvciogc2VsZiwgU0VMIGNtZCkKK3sKKyAgICBpZiAoY2FuU2V0
Q3Vyc29yKQorICAgICAgICBvbGRTZXRDdXJzb3JJTVAoc2VsZiwgY21kKTsKK30KKworI2Vsc2UK
Kworc3RhdGljIHZvaWQgc2V0Q3Vyc29yKE5TV2luZG93KiBzZWxmLCBTRUwgY21kLCBOU1BvaW50
IHBvaW50KQoreworICAgIE5TVmlldyogdmlldyA9IFtbc2VsZiBfd2ViX2JvcmRlclZpZXddIGhp
dFRlc3Q6cG9pbnRdOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBj
bGFzc11dKSB7CisgICAgICAgIFdlYkhUTUxWaWV3ICpodG1sVmlldyA9IChXZWJIVE1MVmlldyop
dmlldzsKKyAgICAgICAgTlNQb2ludCBsb2NhbFBvaW50ID0gW2h0bWxWaWV3IGNvbnZlcnRQb2lu
dDpwb2ludCBmcm9tVmlldzpuaWxdOworICAgICAgICBOU0RpY3Rpb25hcnkgKmRpY3QgPSBbaHRt
bFZpZXcgZWxlbWVudEF0UG9pbnQ6bG9jYWxQb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOwor
ICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OldlYkVsZW1l
bnRET01Ob2RlS2V5XTsKKyAgICAgICAgaWYgKCFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01I
VE1MQXBwbGV0RWxlbWVudCBjbGFzc11dICYmICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01I
VE1MT2JqZWN0RWxlbWVudCBjbGFzc11dICYmCisgICAgICAgICAgICAhW2VsZW1lbnQgaXNLaW5k
T2ZDbGFzczpbRE9NSFRNTEVtYmVkRWxlbWVudCBjbGFzc11dKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBvbGRTZXRDdXJzb3JJTVAoc2VsZiwgY21kLCBwb2ludCk7Cit9CisKKyNl
bmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCitAaW50ZXJmYWNlIFdl
YkxheWVySG9zdGluZ1ZpZXcgOiBOU1ZpZXcKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkxh
eWVySG9zdGluZ1ZpZXcKKworLy8gRW1wdHkgTlNWaWV3cyBpbnRlcmNlcHQgcmlnaHRNb3VzZURv
d246IHRvIGRvIGNvbnRleHQgbWVudSBoYW5kbGluZywgYnV0IHdlIG5lZWQgdGhlIFdlYkxheWVy
SG9zdGluZ1ZpZXcgdG8KKy8vIGxldCByaWdodCBtb3VzZSBjbGlja3MgdGhyb3VnaC4KKy0gKHZv
aWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIFtbc2VsZiBuZXh0UmVz
cG9uZGVyXSBwZXJmb3JtU2VsZWN0b3I6X2NtZCB3aXRoT2JqZWN0OmV2ZW50XTsKK30KKworQGVu
ZAorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCitleHRlcm4gIkMi
IHsKKworLy8gTmVlZCB0byBkZWNsYXJlIHRoZXNlIGF0dHJpYnV0ZSBuYW1lcyBiZWNhdXNlIEFw
cEtpdCBleHBvcnRzIHRoZW0gYnV0IGRvZXMgbm90IG1ha2UgdGhlbSBhdmFpbGFibGUgaW4gQVBJ
IG9yIFNQSSBoZWFkZXJzLgorCitleHRlcm4gTlNTdHJpbmcgKk5TTWFya2VkQ2xhdXNlU2VnbWVu
dEF0dHJpYnV0ZU5hbWU7CitleHRlcm4gTlNTdHJpbmcgKk5TVGV4dElucHV0UmVwbGFjZW1lbnRS
YW5nZUF0dHJpYnV0ZU5hbWU7CisKK30KKworQGludGVyZmFjZSBOU1ZpZXcgKFdlYk5TVmlld0Rl
dGFpbHMpCistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFj
aXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0OihCT09MKWlzVmlzaWJsZVJlY3QgcmVjdElz
VmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2aXNpYmxlVmlldyB0b3BWaWV3OihCT09MKXRv
cFZpZXc7CistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3VzOihC
T09MKW5lZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6KE5TUmVjdCl2aXNSZWN0OworLSAodm9pZClfcmVj
dXJzaXZlOihCT09MKXJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClk
aXNwbGF5UmVjdCBpbkNvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0ICopY29udGV4dCB0b3BWaWV3
OihCT09MKXRvcFZpZXc7CistIChOU1JlY3QpX2RpcnR5UmVjdDsKKy0gKHZvaWQpX3NldERyYXdz
T3duRGVzY2VuZGFudHM6KEJPT0wpZHJhd3NPd25EZXNjZW5kYW50czsKKy0gKHZvaWQpX3Byb3Bh
Z2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9yczsKKy0gKHZvaWQpX3dpbmRvd0NoYW5nZWRL
ZXlTdGF0ZTsKK0BlbmQKKworQGludGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0
aW9uRGV0YWlscykKKy0gKHZvaWQpc3BlYWtTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOworQGVu
ZAorCitAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCistIChpZClfbmV3
Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKKy0gKHZvaWQpX3NldEZvcmNlQWN0aXZlQ29u
dHJvbHM6KEJPT0wpZmxhZzsKK0BlbmQKKworQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcg
KFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCistIChpZClfaW5pdFdpdGhET01SYW5nZToo
RE9NUmFuZ2UgKilyYW5nZTsKKy0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcm9t
UmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnQ6KERPTURvY3VtZW50ICopZG9jdW1lbnQgZG9j
dW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1YnJlc291cmNlczooTlNBcnJh
eSAqKilzdWJyZXNvdXJjZXM7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKFdl
Yk5TU3BlbGxDaGVja2VyRGV0YWlscykKKy0gKHZvaWQpbGVhcm5Xb3JkOihOU1N0cmluZyAqKXdv
cmQ7CitAZW5kCisKKy8vIEJ5IGltYWdpbmcgdG8gYSB3aWR0aCBhIGxpdHRsZSB3aWRlciB0aGFu
IHRoZSBhdmFpbGFibGUgcGl4ZWxzLAorLy8gdGhpbiBwYWdlcyB3aWxsIGJlIHNjYWxlZCBkb3du
IGEgbGl0dGxlLCBtYXRjaGluZyB0aGUgd2F5IHRoZXkKKy8vIHByaW50IGluIElFIGFuZCBDYW1p
bm8uIFRoaXMgbGV0cyB0aGVtIHVzZSBmZXdlciBzaGVldHMgdGhhbiB0aGV5CisvLyB3b3VsZCBv
dGhlcndpc2UsIHdoaWNoIGlzIHByZXN1bWFibHkgd2h5IG90aGVyIGJyb3dzZXJzIGRvIHRoaXMu
CisvLyBXaWRlIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIGRvd24gbW9yZSB0aGFuIHRoaXMuCisjZGVm
aW5lIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciAgICAgMS4yNWYKKworLy8gVGhpcyBudW1i
ZXIgZGV0ZXJtaW5lcyBob3cgc21hbGwgd2UgYXJlIHdpbGxpbmcgdG8gcmVkdWNlIHRoZSBwYWdl
IGNvbnRlbnQKKy8vIGluIG9yZGVyIHRvIGFjY29tbW9kYXRlIHRoZSB3aWRlc3QgbGluZS4gSWYg
dGhlIHBhZ2Ugd291bGQgaGF2ZSB0byBiZQorLy8gcmVkdWNlZCBzbWFsbGVyIHRvIG1ha2UgdGhl
IHdpZGVzdCBsaW5lIGZpdCwgd2UganVzdCBjbGlwIGluc3RlYWQgKHRoaXMKKy8vIGJlaGF2aW9y
IG1hdGNoZXMgTWFjSUUgYW5kIE1vemlsbGEsIGF0IGxlYXN0KQorI2RlZmluZSBQcmludGluZ01h
eGltdW1TaHJpbmtGYWN0b3IgICAgIDIuMGYKKworLy8gVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyBo
b3cgc2hvcnQgdGhlIGxhc3QgcHJpbnRlZCBwYWdlIG9mIGEgbXVsdGktcGFnZSBwcmludCBzZXNz
aW9uCisvLyBjYW4gYmUgYmVmb3JlIHdlIHRyeSB0byBzaHJpbmsgdGhlIHNjYWxlIGluIG9yZGVy
IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHBhZ2VzLCBhbmQKKy8vIHRodXMgZWxpbWluYXRlIHRo
ZSBvcnBoYW4uCisjZGVmaW5lIExhc3RQcmludGVkUGFnZU9ycGhhblJhdGlvICAgICAgMC4xZgor
CisvLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIHRoZSBhbW91bnQgdGhlIHNjYWxlIGZhY3RvciBp
cyBhZGp1c3RlZCB0byB0cnkgdG8gZWxpbWluYXRlIG9ycGhhbnMuCisvLyBJdCBoYXMgbm8gZGly
ZWN0IG1hdGhlbWF0aWNhbCByZWxhdGlvbnNoaXAgdG8gTGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0
aW8sIGR1ZSB0byB2YXJpYWJsZQorLy8gbnVtYmVycyBvZiBwYWdlcywgbG9naWMgdG8gYXZvaWQg
YnJlYWtpbmcgZWxlbWVudHMsIGFuZCBDU1Mtc3VwcGxpZWQgaGFyZCBwYWdlIGJyZWFrcy4KKyNk
ZWZpbmUgUHJpbnRpbmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50ICAxLjFmCisKKyNkZWZpbmUgQVVU
T1NDUk9MTF9JTlRFUlZBTCAgICAgICAgICAgICAwLjFmCisKKyNkZWZpbmUgRFJBR19MQUJFTF9C
T1JERVJfWCAgICAgICAgICAgICA0LjBmCisvL0tlZXAgYm9yZGVyX3kgaW4gc3luY2ggd2l0aCBE
cmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNldAorI2RlZmluZSBEUkFHX0xBQkVMX0JP
UkRFUl9ZICAgICAgICAgICAgIDIuMGYKKyNkZWZpbmUgRFJBR19MQUJFTF9SQURJVVMgICAgICAg
ICAgICAgICA1LjBmCisjZGVmaW5lIERSQUdfTEFCRUxfQk9SREVSX1lfT0ZGU0VUICAgICAgICAg
ICAgICAyLjBmCisKKyNkZWZpbmUgTUlOX0RSQUdfTEFCRUxfV0lEVEhfQkVGT1JFX0NMSVAgICAg
ICAgIDEyMC4wZgorI2RlZmluZSBNQVhfRFJBR19MQUJFTF9XSURUSCAgICAgICAgICAgICAgICAg
ICAgMzIwLjBmCisKKyNkZWZpbmUgRFJBR19MSU5LX0xBQkVMX0ZPTlRfU0laRSAgIDExLjBmCisj
ZGVmaW5lIERSQUdfTElOS19VUkxfRk9OVF9TSVpFICAgMTAuMGYKKworLy8gQW55IG5vbi16ZXJv
IHZhbHVlIHdpbGwgZG8sIGJ1dCB1c2luZyBzb21ldGhpbmcgcmVjb2duaXphYmxlIG1pZ2h0IGhl
bHAgdXMgZGVidWcgc29tZSBkYXkuCisjZGVmaW5lIFRSQUNLSU5HX1JFQ1RfVEFHIDB4QkFERkFD
RQorCisvLyBGSVhNRTogVGhpcyBjb25zdGFudCBpcyBjb3BpZWQgZnJvbSBBcHBLaXQncyBfTlhT
bWFydFBhc3RlIGNvbnN0YW50LgorI2RlZmluZSBXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSBAIk5l
WFQgc21hcnQgcGFzdGUgcGFzdGVib2FyZCB0eXBlIgorCisjZGVmaW5lIFNUQU5EQVJEX1dFSUdI
VCA1CisjZGVmaW5lIE1JTl9CT0xEX1dFSUdIVCA3CisjZGVmaW5lIFNUQU5EQVJEX0JPTERfV0VJ
R0hUIDkKKworLy8gRmFrZSBVUkwgc2NoZW1lLgorI2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hl
bWUgQCJ3ZWJraXQtZmFrZS11cmwiCisKKy8vIDxyZGFyOi8vcHJvYmxlbS80OTg1NTI0PiBSZWZl
cmVuY2VzIHRvIFdlYkNvcmVTY3JvbGxWaWV3IGFzIGEgc3VidmlldyBvZiBhIFdlYkhUTUxWaWV3
IG1heSBiZSBwcmVzZW50CisvLyBpbiBzb21lIE5JQiBmaWxlcywgc28gTlNVbmFyY2hpdmVyIG11
c3QgYmUgc3RpbGwgYWJsZSB0byBsb29rIHVwIHRoaXMgbm93LXVudXNlZCBjbGFzcy4KK0BpbnRl
cmZhY2UgV2ViQ29yZVNjcm9sbFZpZXcgOiBOU1Njcm9sbFZpZXcKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFdlYkNvcmVTY3JvbGxWaWV3CitAZW5kCisKKy8vIGlmIFlFUywgZG8gdGhlIHN0YW5k
YXJkIE5TVmlldyBoaXQgdGVzdCAod2hpY2ggY2FuJ3QgZ2l2ZSB0aGUgcmlnaHQgcmVzdWx0IHdo
ZW4gSFRNTCBvdmVybGFwcyBhIHZpZXcpCitzdGF0aWMgQk9PTCBmb3JjZU5TVmlld0hpdFRlc3Q7
CisKKy8vIGlmIFlFUywgZG8gdGhlICJ0b3AgV2ViSFRNTFZpZXciIGhpdCB0ZXN0ICh3aGljaCB3
ZSdkIGxpa2UgdG8gZG8gYWxsIHRoZSB0aW1lIGJ1dCBjYW4ndCBiZWNhdXNlIG9mIEphdmEgcmVx
dWlyZW1lbnRzIFtzZWUgYnVnIDQzNDk3MjFdKQorc3RhdGljIEJPT0wgZm9yY2VXZWJIVE1MVmll
d0hpdFRlc3Q7CisKK3N0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhpdFZpZXc7CisKKy8vIFdlIG5l
ZWQgdGhpcyB0byBiZSBhYmxlIHRvIHNhZmVseSByZWZlcmVuY2UgdGhlIENhY2hlZEltYWdlIGZv
ciB0aGUgcHJvbWlzZWQgZHJhZyBkYXRhCitzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHBy
b21pc2VkRGF0YUNsaWVudCgpCit7CisgICAgc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBz
dGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudCA9IG5ldyBDYWNoZWRSZXNvdXJjZUNsaWVudDsKKyAg
ICByZXR1cm4gc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQ7Cit9CisKK0BpbnRlcmZhY2UgV2Vi
SFRNTFZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorLSAoQk9PTClfaW1hZ2VFeGlzdHNB
dFBhdGhzOihOU0FycmF5ICopcGF0aHM7CistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBpbkNv
bnRleHQ6KERPTVJhbmdlICopY29udGV4dCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWlu
VGV4dDsKKy0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkOworLSAodm9pZClfcGFzdGVXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dDsKKy0g
KHZvaWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZDsKKy0gKHZvaWQpX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxs
eTsKKy0gKHZvaWQpX3JlbW92ZVN1cGVydmlld09ic2VydmVyczsKKy0gKHZvaWQpX3JlbW92ZVdp
bmRvd09ic2VydmVyczsKKy0gKEJPT0wpX3Nob3VsZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVu
dEZyYWdtZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2Ug
Z2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uOworLSAoQk9PTClfc2hvdWxk
SW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAq
KXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKEJPT0wp
X3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0
aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKGZsb2F0KV9jYWxjdWxhdGVQcmlu
dEhlaWdodDsKKy0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2U7CistIChCT09MKV9zaG91bGRE
ZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKKy0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZl
bnQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9h
cmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRy
aWJ1dGVkU3RyaW5nOworLSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRSYW5nZTsKKy0gKHZvaWQpX3Nl
dE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CistIChXZWJIVE1MVmlldyAqKV90b3BI
VE1MVmlldzsKKy0gKEJPT0wpX2lzVG9wSFRNTFZpZXc7CistICh2b2lkKV93ZWJfc2V0UHJpbnRp
bmdNb2RlUmVjdXJzaXZlOworLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFu
ZEFkanVzdFZpZXdTaXplOworLSAodm9pZClfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZl
OworQGVuZAorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCisKK0BpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3
VGV4dENoZWNraW5nSW50ZXJuYWwpCistICh2b2lkKW9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFu
ZWw6KGlkKXNlbmRlcjsKKy0gKEJPT0wpc21hcnRJbnNlcnREZWxldGVFbmFibGVkOworLSAodm9p
ZClzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxhZzsKKy0gKHZvaWQpdG9nZ2xl
U21hcnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcjsKKy0gKEJPT0wpaXNBdXRvbWF0aWNRdW90ZVN1
YnN0aXR1dGlvbkVuYWJsZWQ7CistICh2b2lkKXNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
RW5hYmxlZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1
dGlvbjooaWQpc2VuZGVyOworLSAoQk9PTClpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
OworLSAodm9pZClzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnOwor
LSAodm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihpZClzZW5kZXI7CistIChCT09M
KWlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ7CistICh2b2lkKXNldEF1dG9tYXRp
Y0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2dsZUF1dG9t
YXRpY0Rhc2hTdWJzdGl0dXRpb246KGlkKXNlbmRlcjsKKy0gKEJPT0wpaXNBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnRFbmFibGVkOworLSAodm9pZClzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRF
bmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVu
dDooaWQpc2VuZGVyOworLSAoQk9PTClpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQ7CistICh2b2lkKXNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ6KEJPT0wp
ZmxhZzsKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOihpZClzZW5k
ZXI7CitAZW5kCisKKyNlbmRpZgorCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJGb3J3YXJk
RGVjbGFyYXRpb24pIC8vIEZJWE1FOiBQdXQgdGhpcyBpbiBhIG5vcm1hbCBjYXRlZ29yeSBhbmQg
c3RvcCBkb2luZyB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbiB0cmljay4KKy0gKHZvaWQpX3NldFBy
aW50aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0
aCBtYXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6KEJP
T0wpYWRqdXN0Vmlld1NpemU7CitAZW5kCisKK0BjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7CitA
aW50ZXJmYWNlIE5TUmVzcG9uZGVyIChBcHBLaXREZXRhaWxzKQorLSAoTlNUZXh0SW5wdXRDb250
ZXh0ICopaW5wdXRDb250ZXh0OworQGVuZAorCitAaW50ZXJmYWNlIE5TT2JqZWN0IChOU1RleHRJ
bnB1dENvbnRleHREZXRhaWxzKQorLSAoQk9PTCl3YW50c1RvSGFuZGxlTW91c2VFdmVudHM7Cist
IChCT09MKWhhbmRsZU1vdXNlRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKK0BlbmQKKworQGludGVy
ZmFjZSBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KSA8TlNUZXh0SW5wdXQ+Cist
ICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXI7CitAZW5kCisKK0BpbnRlcmZh
Y2UgV2ViSFRNTFZpZXcgKFdlYkVkaXRpbmdTdHlsZVN1cHBvcnQpCistIChET01DU1NTdHlsZURl
Y2xhcmF0aW9uICopX2VtcHR5U3R5bGU7CistIChOU1N0cmluZyAqKV9jb2xvckFzU3RyaW5nOihO
U0NvbG9yICopY29sb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNWaWV3IChXZWJIVE1MVmlld0Zp
bGVJbnRlcm5hbCkKKy0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJh
eTooTlNNdXRhYmxlQXJyYXkgKikgYXJyYXk7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNNdXRhYmxl
RGljdGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCistICh2b2lkKV93ZWJfc2V0T2Jq
ZWN0SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleTsKK0BlbmQKKworLy8gSGFuZGxl
cyB0aGUgY29tcGxldGU6IHRleHQgY29tbWFuZAorQGludGVyZmFjZSBXZWJUZXh0Q29tcGxldGVD
b250cm9sbGVyIDogTlNPYmplY3QgPE5TVGFibGVWaWV3RGVsZWdhdGUsIE5TVGFibGVWaWV3RGF0
YVNvdXJjZT4geworQHByaXZhdGUKKyAgICBXZWJIVE1MVmlldyAqX3ZpZXc7CisgICAgTlNXaW5k
b3cgKl9wb3B1cFdpbmRvdzsKKyAgICBOU1RhYmxlVmlldyAqX3RhYmxlVmlldzsKKyAgICBOU0Fy
cmF5ICpfY29tcGxldGlvbnM7CisgICAgTlNTdHJpbmcgKl9vcmlnaW5hbFN0cmluZzsKKyAgICBp
bnQgcHJlZml4TGVuZ3RoOworfQorLSAoaWQpaW5pdFdpdGhIVE1MVmlldzooV2ViSFRNTFZpZXcg
Kil2aWV3OworLSAodm9pZClkb0NvbXBsZXRpb247CistICh2b2lkKWVuZFJldmVydGluZ0NoYW5n
ZTooQk9PTClyZXZlcnRDaGFuZ2UgbW92ZUxlZnQ6KEJPT0wpZ29MZWZ0OworLSAoQk9PTClwb3B1
cFdpbmRvd0lzT3BlbjsKKy0gKEJPT0wpZmlsdGVyS2V5RG93bjooTlNFdmVudCAqKWV2ZW50Owor
LSAodm9pZClfcmVmbGVjdFNlbGVjdGlvbjsKK0BlbmQKKworc3RydWN0IFdlYkhUTUxWaWV3SW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7CisgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQ7Cisg
ICAgQk9PTCBldmVudFdhc0hhbmRsZWQ7CisgICAgQk9PTCBzaG91bGRTYXZlQ29tbWFuZDsKKyAg
ICAvLyBUaGUgSW5wdXQgTWV0aG9kIG1heSBjb25zdW1lIGFuIGV2ZW50IGFuZCBub3QgdGVsbCB1
cywgaW4KKyAgICAvLyB3aGljaCBjYXNlIHdlIHNob3VsZCBub3QgYnViYmxlIHRoZSBldmVudCB1
cCB0aGUgRE9NCisgICAgQk9PTCBjb25zdW1lZEJ5SU07Cit9OworCitAaW50ZXJmYWNlIFdlYkhU
TUxWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKK0BwdWJsaWMKKyAgICBCT09MIGNsb3NlZDsKKyAg
ICBCT09MIG5lZWRzVG9BcHBseVN0eWxlczsKKyAgICBCT09MIGlnbm9yaW5nTW91c2VEcmFnZ2Vk
RXZlbnRzOworICAgIEJPT0wgcHJpbnRpbmc7CisgICAgQk9PTCBhdm9pZGluZ1ByaW50T3JwaGFu
OworICAgIEJPT0wgb2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnM7CisgICAgQk9PTCBv
YnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zOworICAgIEJPT0wgb2JzZXJ2aW5nV2luZG93
Tm90aWZpY2F0aW9uczsKKyAgICBCT09MIHJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyOworICAgIAor
ICAgIGlkIHNhdmVkU3Vidmlld3M7CisgICAgQk9PTCBzdWJ2aWV3c1NldEFzaWRlOworICAgIAor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBOU1ZpZXcgKmxheWVySG9zdGlu
Z1ZpZXc7CisjZW5kaWYKKworICAgIE5TRXZlbnQgKm1vdXNlRG93bkV2ZW50OyAvLyBLZXB0IGFm
dGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKyAgICBCT09MIGhhbmRsaW5nTW91c2VEb3duRXZlbnQ7
CisgICAgTlNFdmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBl
dmVudC4KKworICAgIC8vIEEgV2ViSFRNTFZpZXcgaGFzIGEgc2luZ2xlIGlucHV0IGNvbnRleHQs
IGJ1dCB3ZSByZXR1cm4gbmlsIHdoZW4gaW4gbm9uLWVkaXRhYmxlIGNvbnRlbnQgdG8gYXZvaWQg
bWFraW5nIGlucHV0IG1ldGhvZHMgZG8gdGhlaXIgd29yay4KKyAgICAvLyBUaGlzIHN0YXRlIGlz
IHNhdmVkIGVhY2ggdGltZSBzZWxlY3Rpb24gY2hhbmdlcywgYmVjYXVzZSBjb21wdXRpbmcgaXQg
Y2F1c2VzIHN0eWxlIHJlY2FsYywgd2hpY2ggaXMgbm90IGFsd2F5cyBzYWZlIHRvIGRvLgorICAg
IEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0OworCisgICAgTlNQb2ludCBsYXN0U2Nyb2xsUG9zaXRp
b247CisKKyAgICBXZWJQbHVnaW5Db250cm9sbGVyICpwbHVnaW5Db250cm9sbGVyOworICAgIAor
ICAgIE5TU3RyaW5nICp0b29sVGlwOworICAgIE5TVG9vbFRpcFRhZyBsYXN0VG9vbFRpcFRhZzsK
KyAgICBpZCB0cmFja2luZ1JlY3RPd25lcjsKKyAgICB2b2lkICp0cmFja2luZ1JlY3RVc2VyRGF0
YTsKKyAgICAKKyAgICBOU1RpbWVyICphdXRvc2Nyb2xsVGltZXI7CisgICAgTlNFdmVudCAqYXV0
b3Njcm9sbFRyaWdnZXJFdmVudDsKKyAgICAKKyAgICBOU0FycmF5ICpwYWdlUmVjdHM7CisKKyAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICpoaWdobGlnaHRlcnM7CisKKyNpZmRlZiBCVUlMRElOR19P
Tl9USUdFUgorICAgIEJPT0wgbmV4dFJlc3BvbmRlckRpc2FibGVkT25jZTsKKyNlbmRpZgorICAg
IAorICAgIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgKmNvbXBDb250cm9sbGVyOworICAgIAor
ICAgIEJPT0wgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kOworCisgICAgV2ViSFRNTFZpZXdJbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBpbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAg
IEJPT0wgcmVjZWl2ZWROT09QOworICAgIAorICAgIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2U7
CisgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwor
ICAgIAorICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRp
bWVyOworICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0ZU1vdXNlb3ZlclRpbWVyOworCisgICAg
U0VMIHNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvcjsKKworI2lmbmRlZiBOREVCVUcKKyAg
ICBCT09MIGVudW1lcmF0aW5nU3Vidmlld3M7CisjZW5kaWYKK30KKy0gKHZvaWQpY2xlYXI7CitA
ZW5kCisKK3N0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlTdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKKyAgICAgICAg
ICAgIHJldHVybiBOU09mZlN0YXRlOworICAgICAgICBjYXNlIFRydWVUcmlTdGF0ZToKKyAgICAg
ICAgICAgIHJldHVybiBOU09uU3RhdGU7CisgICAgICAgIGNhc2UgTWl4ZWRUcmlTdGF0ZToKKyAg
ICAgICAgICAgIHJldHVybiBOU01peGVkU3RhdGU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBOU09mZlN0YXRlOworfQorCitAaW1wbGVtZW50YXRpb24gV2Vi
SFRNTFZpZXdQcml2YXRlCisKKysgKHZvaWQpaW5pdGlhbGl6ZQoreworICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIFdlYkNvcmVP
YmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7CisjZW5kaWYKKworICAgIGlmICghb2xkU2V0
Q3Vyc29ySU1QKSB7CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgTWV0aG9kIHNl
dEN1cnNvck1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU0N1cnNvciBjbGFzc10s
IEBzZWxlY3RvcihzZXQpKTsKKyNlbHNlCisgICAgICAgIE1ldGhvZCBzZXRDdXJzb3JNZXRob2Qg
PSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNXaW5kb3cgY2xhc3NdLCBAc2VsZWN0b3IoX3Nl
dEN1cnNvckZvck1vdXNlTG9jYXRpb246KSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUKHNldEN1
cnNvck1ldGhvZCk7CisKKyAgICAgICAgb2xkU2V0Q3Vyc29ySU1QID0gbWV0aG9kX3NldEltcGxl
bWVudGF0aW9uKHNldEN1cnNvck1ldGhvZCwgKElNUClzZXRDdXJzb3IpOworICAgICAgICBBU1NF
UlQob2xkU2V0Q3Vyc29ySU1QKTsKKyAgICB9CisgICAgCisjaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKKyAgICBpZiAoIW9sZFJlc2V0Q3Vyc29yUmVjdHNJTVApIHsKKyAgICAgICAgTWV0aG9kIHJl
c2V0Q3Vyc29yUmVjdHNNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNXaW5kb3cg
Y2xhc3NdLCBAc2VsZWN0b3IocmVzZXRDdXJzb3JSZWN0cykpOworICAgICAgICBBU1NFUlQocmVz
ZXRDdXJzb3JSZWN0c01ldGhvZCk7CisgICAgICAgIG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAgPSBt
ZXRob2Rfc2V0SW1wbGVtZW50YXRpb24ocmVzZXRDdXJzb3JSZWN0c01ldGhvZCwgKElNUClyZXNl
dEN1cnNvclJlY3RzKTsKKyAgICAgICAgQVNTRVJUKG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVApOwor
ICAgIH0KKyNlbmRpZgorCit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3Jl
T2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbV2ViSFRNTFZpZXdQcml2YXRlIGNs
YXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghYXV0b3Njcm9sbFRp
bWVyKTsKKyAgICBBU1NFUlQoIWF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQpOworICAgIEFTU0VSVCgh
dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOworICAgIEFTU0VSVCghdXBkYXRlTW91
c2VvdmVyVGltZXIpOworICAgIAorICAgIFttb3VzZURvd25FdmVudCByZWxlYXNlXTsKKyAgICBb
a2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAgIFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwor
ICAgIFt0b29sVGlwIHJlbGVhc2VdOworICAgIFtjb21wQ29udHJvbGxlciByZWxlYXNlXTsKKyAg
ICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKKyAgICBbaGlnaGxpZ2h0ZXJzIHJlbGVhc2VdOworICAg
IGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKKyAgICAgICAgcHJvbWlzZWREcmFnVElG
RkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CisKKyAgICBb
c3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBBU1NFUlRfTUFJ
Tl9USFJFQUQoKTsKKworICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKKyAgICAg
ICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFD
bGllbnQoKSk7CisKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQorCistICh2b2lkKWNsZWFyCit7
CisgICAgW21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOworICAgIFtrZXlEb3duRXZlbnQgcmVsZWFz
ZV07CisgICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgW3Rvb2xUaXAgcmVsZWFz
ZV07CisgICAgW2NvbXBDb250cm9sbGVyIHJlbGVhc2VdOworICAgIFtkYXRhU291cmNlIHJlbGVh
c2VdOworICAgIFtoaWdobGlnaHRlcnMgcmVsZWFzZV07CisgICAgaWYgKHByb21pc2VkRHJhZ1RJ
RkZEYXRhU291cmNlKQorICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3Zl
Q2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKKworICAgIG1vdXNlRG93bkV2ZW50ID0gbmls
OworICAgIGtleURvd25FdmVudCA9IG5pbDsKKyAgICBwbHVnaW5Db250cm9sbGVyID0gbmlsOwor
ICAgIHRvb2xUaXAgPSBuaWw7CisgICAgY29tcENvbnRyb2xsZXIgPSBuaWw7CisgICAgZGF0YVNv
dXJjZSA9IG5pbDsKKyAgICBoaWdobGlnaHRlcnMgPSBuaWw7CisgICAgcHJvbWlzZWREcmFnVElG
RkRhdGFTb3VyY2UgPSAwOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IGxheWVySG9zdGluZ1ZpZXcgPSBuaWw7CisjZW5kaWYKK30KKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorCistIChET01SYW5n
ZSAqKV9kb2N1bWVudFJhbmdlCit7CisgICAgcmV0dXJuIFtbW3NlbGYgX2ZyYW1lXSBET01Eb2N1
bWVudF0gX2RvY3VtZW50UmFuZ2VdOworfQorCistIChCT09MKV9pbWFnZUV4aXN0c0F0UGF0aHM6
KE5TQXJyYXkgKilwYXRocworeworICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtwYXRo
cyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBOU1N0cmluZyAqcGF0aDsKKyAgICAKKyAgICB3aGls
ZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7CisgICAgICAgIE5T
U3RyaW5nICpNSU1FVHlwZSA9IFdLR2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oW3BhdGggcGF0aEV4
dGVuc2lvbl0pOworICAgICAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZVJlc291cmNlTUlNRVR5cGUoTUlNRVR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIE5POworfQorCistIChXZWJEYXRhU291cmNlICopX2RhdGFT
b3VyY2UKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmRhdGFTb3VyY2U7Cit9CisKKy0gKFdlYlZp
ZXcgKilfd2ViVmlldworeworICAgIHJldHVybiBbX3ByaXZhdGUtPmRhdGFTb3VyY2UgX3dlYlZp
ZXddOworfQorCistIChXZWJGcmFtZVZpZXcgKilfZnJhbWVWaWV3Cit7CisgICAgcmV0dXJuIFtb
X3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIGZyYW1lVmlld107Cit9CisKKy0gKERPTURv
Y3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczooTlNBcnJheSAqKXBh
dGhzCit7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQ7CisgICAgTlNFbnVtZXJh
dG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVudW1lcmF0b3JdOworICAgIE5TTXV0YWJs
ZUFycmF5ICpkb21Ob2RlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworICAgIE5T
U3RyaW5nICpwYXRoOworICAgIAorICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5leHRP
YmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAgLy8gTm9uLWltYWdlIGZpbGUgdHlwZXM7IF93ZWJf
dXNlclZpc2libGVTdHJpbmcgaXMgYXBwcm9wcmlhdGUgaGVyZSBiZWNhdXNlIHRoaXMgd2lsbAor
ICAgICAgICAvLyBiZSBwYXN0ZWQgYXMgdmlzaWJsZSB0ZXh0LgorICAgICAgICBOU1N0cmluZyAq
dXJsID0gW1tbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhdIF93ZWJraXRfY2Fub25pY2FsaXpl
XSBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKKyAgICAgICAgW2RvbU5vZGVzIGFkZE9iamVjdDpb
W1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIGNyZWF0ZVRleHROb2RlOiB1cmxdXTsKKyAgICB9
CisgICAgCisgICAgZnJhZ21lbnQgPSBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRGcmFnbWVudFdp
dGhOb2Rlc0FzUGFyYWdyYXBoczpkb21Ob2Rlc107IAorICAgIAorICAgIFtkb21Ob2RlcyByZWxl
YXNlXTsKKyAgICAKKyAgICByZXR1cm4gW2ZyYWdtZW50IGZpcnN0Q2hpbGRdICE9IG5pbCA/IGZy
YWdtZW50IDogbmlsOworfQorCisrIChOU0FycmF5ICopX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRy
aWJ1dGVkU3RyaW5nQ29udmVyc2lvbgoreworICAgIHN0YXRpYyBOU0FycmF5ICplbGVtZW50cyA9
IG5pbDsKKyAgICBpZiAoZWxlbWVudHMgPT0gbmlsKSB7CisgICAgICAgIGVsZW1lbnRzID0gW1tO
U0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAgICAgICAvLyBPbWl0IHN0eWxl
IHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUg
ZWFzaWx5IGluc2VydGVkLgorICAgICAgICAgICAgQCJzdHlsZSIsCisgICAgICAgICAgICAvLyBP
bWl0IHhtbCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgICAgIEAieG1sIiwg
CisgICAgICAgICAgICAvLyBPbWl0IHRhZ3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNv
bnZlcnRlZCB0byBhIGZyYWdtZW50IGFueXdheS4KKyAgICAgICAgICAgIEAiZG9jdHlwZSIsIEAi
aHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCisgICAgICAgICAgICAvLyBPbWl0IGRlcHJlY2F0ZWQg
dGFncy4KKyAgICAgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNlZm9udCIsIEAiY2VudGVyIiwgQCJk
aXIiLCBAImZvbnQiLCBAImlzaW5kZXgiLCBAIm1lbnUiLCBAInMiLCBAInN0cmlrZSIsIEAidSIs
CisgICAgICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRzIGFyZSBw
YXJ0IG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgIEAib2JqZWN0IiwgbmlsXTsKKyAgICAg
ICAgQ0ZSZXRhaW4oZWxlbWVudHMpOworICAgIH0KKyAgICByZXR1cm4gZWxlbWVudHM7Cit9CisK
K3N0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRp
dmVQYXJ0KQoreworICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQpOworICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZV
VUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOworICAgIENGUmVs
ZWFzZShVVUlEUmVmKTsKKyAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0YVByb3RvY29sU2No
ZW1lLCBVVUlEU3RyaW5nLCByZWxhdGl2ZVBhcnRdXTsKKyAgICBDRlJlbGVhc2UoVVVJRFN0cmlu
Zyk7CisKKyAgICByZXR1cm4gVVJMOworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2Rv
Y3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6
KERPTVJhbmdlICopY29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQKK3sKKyAgICBOU0FycmF5
ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50ICpm
cmFnbWVudCA9IG5pbDsKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2
ZVBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdt
ZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNv
bnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2Rv
Y3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TRmlsZW5hbWVzUGJv
YXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAK
KyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TSFRNTFBib2FyZFR5cGVdICYmCisgICAg
ICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFz
dGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0
dXJuIGZyYWdtZW50OworICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQ
Ym9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNSVEZQYm9hcmRUeXBlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2Vz
OjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworCisgICAgaWYgKFt0eXBlcyBjb250YWlu
c09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNSVEZEUGJvYXJk
VHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5D
b250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKworICAgIGlm
IChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZy
YWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJk
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JU
eXBlOk5TVElGRlBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJh
Z21lbnQ7CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUERGUGJvYXJkVHlwZV0g
JiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVi
b2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3JUeXBlOk5TUERGUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAg
ICAgIHJldHVybiBmcmFnbWVudDsKKworI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8
IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TUElDVFBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1
bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1BJQ1RQYm9hcmRUeXBl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRl
eHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworI2VuZGlmCisKKyAg
ICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBwb3J0IHNldHRpbmcgYW5kIHJldHJpZXZpbmcg
cGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1dCB3ZSBkb24ndCBiZWxpZXZlCisgICAgLy8g
dGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2VyIHB1dCB0eXBlcyBmb3Igd2hpY2ggd2Ugb25s
eSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhlIHBhc3RlYm9hcmQuCisgICAgaWYgKFt0eXBl
cyBjb250YWluc09iamVjdDooTlNTdHJpbmcqKWtVVFR5cGVQTkddICYmCisgICAgICAgIChmcmFn
bWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlw
ZTooTlNTdHJpbmcqKWtVVFR5cGVQTkcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4g
ZnJhZ21lbnQ7CisgICAgICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNVUkxQ
Ym9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNVUkxQYm9hcmRUeXBlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2Vz
OjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgICAgICAKKyAgICBpZiAoYWxsb3dQ
bGFpblRleHQgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0gJiYK
KyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkgeworICAg
ICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIAorICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilw
YXN0ZWJvYXJkCit7CisgICAgTlNBcnJheSAqdHlwZXMgPSBbcGFzdGVib2FyZCB0eXBlc107Cisg
ICAgCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKQor
ICAgICAgICByZXR1cm4gW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6TlNTdHJpbmdQYm9hcmRU
eXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKKyAgICAKKyAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBuaWw7CisgICAgTlNTdHJpbmcg
KnN0cmluZzsKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlw
ZV0pCisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVd
IGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBu
aWwgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0pCisgICAgICAgIGF0
dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6
W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0
ZXM6TlVMTF07CisgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgIT0gbmlsKSB7CisgICAgICAgIHN0
cmluZyA9IFtbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGNvcHldOworICAgICAgICBbYXR0cmli
dXRlZFN0cmluZyByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIFtzdHJpbmcgYXV0b3JlbGVhc2Vd
OworICAgIH0KKyAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVz
UGJvYXJkVHlwZV0pIHsKKyAgICAgICAgc3RyaW5nID0gW1twYXN0ZWJvYXJkIHByb3BlcnR5TGlz
dEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6
QCJcbiJdOworICAgICAgICBpZiAoc3RyaW5nICE9IG5pbCkKKyAgICAgICAgICAgIHJldHVybiBz
dHJpbmc7CisgICAgfQorICAgIAorICAgIE5TVVJMICpVUkw7CisgICAgCisgICAgaWYgKChVUkwg
PSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF0pKSB7CisgICAgICAgIHN0cmlu
ZyA9IFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAgICAgIGlmIChbc3RyaW5nIGxl
bmd0aF0gPiAwKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfcGFzdGVXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dAorewor
ICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW3NlbGYgX3dlYlZpZXddIHJldGFpbl07CisgICAgW3dl
YlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisKKyAgICBET01SYW5n
ZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CisgICAgRE9NRG9jdW1lbnRGcmFnbWVu
dCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgaW5Db250ZXh0OnJhbmdlIGFsbG93UGxhaW5UZXh0OmFsbG93UGxhaW5UZXh0XTsKKyAg
ICBpZiAoZnJhZ21lbnQgJiYgW3NlbGYgX3Nob3VsZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJl
cGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0
ZWRdKQorICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNt
YXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdIG1hdGNoU3R5bGU6Tk9dOworCisg
ICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6bmlsXTsKKyAgICBbd2ViVmlldyBy
ZWxlYXNlXTsKK30KKworLSAodm9pZClfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtbc2Vs
ZiBfd2ViVmlld10gcmV0YWluXTsKKyAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkXTsKKworICAgIE5TU3RyaW5nICp0ZXh0ID0gW3NlbGYgX3BsYWluVGV4dEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OnRleHQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3Rl
ZF0pCisgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dGV4
dCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFj
ZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdXTsKKworICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRp
b25QYXN0ZWJvYXJkOm5pbF07CisgICAgW3dlYlZpZXcgcmVsZWFzZV07Cit9CisKKy0gKHZvaWQp
X3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseQoreworICAgIGlmICghX3By
aXZhdGUgfHwgIV9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9ucykKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldLTW91c2VNb3ZlZE5vdGlmaWNhdGlvbigp
IG9iamVjdDpuaWxdOworICAgIF9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0
aW9ucyA9IGZhbHNlOworfQorCistICh2b2lkKV9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnMKK3sK
KyAgICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZp
Y2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5TVmlldyAqc3VwZXJ2aWV3ID0g
W3NlbGYgc3VwZXJ2aWV3XTsKKyAgICBpZiAoIXN1cGVydmlldyB8fCAhW3NlbGYgd2luZG93XSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmlj
YXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAg
W25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNWaWV3RnJhbWVE
aWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107CisgICAgW25vdGlmaWNhdGlv
bkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNWaWV3Qm91bmRzRGlkQ2hhbmdlTm90
aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOworICAgIAorICAgIF9wcml2YXRlLT5vYnNlcnZp
bmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0gZmFsc2U7Cit9CisKKy0gKHZvaWQpX3JlbW92ZVdp
bmRvd09ic2VydmVycworeworICAgIGlmICghX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlm
aWNhdGlvbnMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1dpbmRvdyAqd2luZG93ID0g
W3NlbGYgd2luZG93XTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2Jq
ZWN0Om5pbF07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5h
bWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgW25v
dGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dXaWxsQ2xv
c2VOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBy
ZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V0tXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNh
dGlvbigpIG9iamVjdDp3aW5kb3ddOworICAgIAorICAgIF9wcml2YXRlLT5vYnNlcnZpbmdXaW5k
b3dOb3RpZmljYXRpb25zID0gZmFsc2U7Cit9CisKKy0gKEJPT0wpX3Nob3VsZEluc2VydEZyYWdt
ZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7
CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICBET01Ob2RlICpj
aGlsZCA9IFtmcmFnbWVudCBmaXJzdENoaWxkXTsKKyAgICBpZiAoW2ZyYWdtZW50IGxhc3RDaGls
ZF0gPT0gY2hpbGQgJiYgW2NoaWxkIGlzS2luZE9mQ2xhc3M6W0RPTUNoYXJhY3RlckRhdGEgY2xh
c3NdXSkKKyAgICAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDpbKERPTUNoYXJhY3RlckRhdGEgKilj
aGlsZCBkYXRhXSByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOwor
ICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3
ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2Ug
Z2l2ZW5BY3Rpb246YWN0aW9uXTsKK30KKworLSAoQk9PTClfc2hvdWxkSW5zZXJ0VGV4dDooTlNT
dHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0
aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAgIFdlYlZpZXcgKndlYlZpZXcg
PSBbc2VsZiBfd2ViVmlld107CisgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2lu
Z0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Cit9CisKKy0gKEJPT0wpX3Nob3Vs
ZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihX
ZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAgIHJldHVybiBbc2VsZiBfc2hvdWxkSW5z
ZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSBnaXZl
bkFjdGlvbjphY3Rpb25dOworfQorCisvLyBDYWxjdWxhdGUgdGhlIHZlcnRpY2FsIHNpemUgb2Yg
dGhlIHZpZXcgdGhhdCBmaXRzIG9uIGEgc2luZ2xlIHBhZ2UKKy0gKGZsb2F0KV9jYWxjdWxhdGVQ
cmludEhlaWdodAoreworICAgIC8vIE9idGFpbiB0aGUgcHJpbnQgaW5mbyBvYmplY3QgZm9yIHRo
ZSBjdXJyZW50IG9wZXJhdGlvbgorICAgIE5TUHJpbnRJbmZvICpwaSA9IFtbTlNQcmludE9wZXJh
dGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludEluZm9dOworICAgIAorICAgIC8vIENhbGN1bGF0
ZSB0aGUgcGFnZSBoZWlnaHQgaW4gcG9pbnRzCisgICAgTlNTaXplIHBhcGVyU2l6ZSA9IFtwaSBw
YXBlclNpemVdOworICAgIHJldHVybiBwYXBlclNpemUuaGVpZ2h0IC0gW3BpIHRvcE1hcmdpbl0g
LSBbcGkgYm90dG9tTWFyZ2luXTsKK30KKworLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQor
eworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVy
biBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSkgOiBuaWw7Cit9CisKKy0gKEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01S
YW5nZSAqKXJhbmdlCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5zaG91bGRE
ZWxldGVSYW5nZShjb3JlKHJhbmdlKSk7Cit9CisKKy0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZl
bnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFVzdWFsbHksIHdlIGhhY2sgQUsncyBoaXRU
ZXN0IG1ldGhvZCB0byBjYXRjaCBhbGwgZXZlbnRzIGF0IHRoZSB0b3Btb3N0IFdlYkhUTUxWaWV3
LiAgCisgICAgLy8gQ2FsbGVycyBvZiB0aGlzIG1ldGhvZCwgaG93ZXZlciwgd2FudCB0byBxdWVy
eSB0aGUgZGVlcGVzdCB2aWV3IGluc3RlYWQuCisgICAgZm9yY2VOU1ZpZXdIaXRUZXN0ID0gWUVT
OworICAgIE5TVmlldyAqaGl0VmlldyA9IFtbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld10gaGl0
VGVzdDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dOworICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9
IE5POyAgICAKKyAgICByZXR1cm4gaGl0VmlldzsKK30KKworLSAodm9pZClfd3JpdGVTZWxlY3Rp
b25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bh
c3RlYm9hcmQgKilwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRl
ZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICAvLyBQdXQgSFRNTCBvbiB0aGUgcGFz
dGVib2FyZC4KKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hpdmVQYm9hcmRU
eXBlXSkgeworICAgICAgICBpZiAoUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNvcmVBcmNoaXZl
ID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihjb3JlKFtzZWxmIF9mcmFt
ZV0pKSkgeworICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBjb3Jl
QXJjaGl2ZSA/IGNvcmVBcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSA6IDApCisgICAg
ICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopZGF0YS5nZXQoKSBmb3JU
eXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyBQdXQgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIG9uIHRoZSBwYXN0ZWJvYXJkIChSVEYvUlRGRCBm
b3JtYXQpLgorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0p
IHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmlsKSB7CisgICAgICAgICAgICBh
dHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKKyAgICAg
ICAgfSAgICAgICAgCisgICAgICAgIE5TRGF0YSAqUlRGRERhdGEgPSBbYXR0cmlidXRlZFN0cmlu
ZyBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0p
IGRvY3VtZW50QXR0cmlidXRlczpuaWxdOworICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJU
RkREYXRhIGZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV07CisgICAgfSAgICAgICAgCisgICAgaWYg
KFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdKSB7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVkU3RyaW5nID09IG5pbCkgeworICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9
IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107CisgICAgICAgIH0KKyAgICAgICAgaWYg
KFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKSB7CisgICAgICAgICAgICBh
dHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5n
QnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVyc107CisgICAgICAgIH0KKyAgICAgICAgTlNE
YXRhICpSVEZEYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdl
KDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOwor
ICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkRhdGEgZm9yVHlwZTpOU1JURlBib2FyZFR5
cGVdOworICAgIH0KKyAgICAKKyAgICAvLyBQdXQgcGxhaW4gc3RyaW5nIG9uIHRoZSBwYXN0ZWJv
YXJkLgorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkg
eworICAgICAgICAvLyBNYXAgJm5ic3A7IHRvIGEgcGxhaW4gb2xkIHNwYWNlIGJlY2F1c2UgdGhp
cyBpcyBiZXR0ZXIgZm9yIHNvdXJjZSBjb2RlLCBvdGhlciBicm93c2VycyBkbyBpdCwKKyAgICAg
ICAgLy8gYW5kIGJlY2F1c2UgSFRNTCBmb3JjZXMgeW91IHRvIGRvIHRoaXMgYW55IHRpbWUgeW91
IHdhbnQgdHdvIHNwYWNlcyBpbiBhIHJvdy4KKyAgICAgICAgTlNNdXRhYmxlU3RyaW5nICpzID0g
W1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBtdXRhYmxlQ29weV07CisgICAgICAgIGNvbnN0IHVuaWNo
YXIgTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciA9IDB4QTA7CisgICAgICAgIE5TU3RyaW5nICpO
b25CcmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZO
b25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyIGxlbmd0aDoxXTsKKyAgICAgICAgW3MgcmVwbGFjZU9j
Y3VycmVuY2VzT2ZTdHJpbmc6Tm9uQnJlYWtpbmdTcGFjZVN0cmluZyB3aXRoU3RyaW5nOkAiICIg
b3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzIGxlbmd0aF0pXTsKKyAgICAgICAgW3Bh
c3RlYm9hcmQgc2V0U3RyaW5nOnMgZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOworICAgICAg
ICBbcyByZWxlYXNlXTsKKyAgICB9CisgICAgCisgICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlP
ckRlbGV0ZV0gJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBl
XSkgeworICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOm5pbCBmb3JUeXBlOldlYlNtYXJ0UGFz
dGVQYm9hcmRUeXBlXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihO
U0V2ZW50ICopZXZlbnQKK3sKKyAgICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBO
U0xlZnRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24gfHwgW2V2
ZW50IHR5cGVdID09IE5TT3RoZXJNb3VzZURvd24pOworCisgICAgaWYgKGV2ZW50ID09IF9wcml2
YXRlLT5tb3VzZURvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW2V2ZW50IHJldGFp
bl07CisgICAgW19wcml2YXRlLT5tb3VzZURvd25FdmVudCByZWxlYXNlXTsKKyAgICBfcHJpdmF0
ZS0+bW91c2VEb3duRXZlbnQgPSBldmVudDsKK30KKworLSAodm9pZClfY2FuY2VsVXBkYXRlRm9j
dXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPnVwZGF0ZUZvY3Vz
ZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0
ZShfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOworICAgICAgICBD
RlJlbGVhc2UoX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKKyAg
ICAgICAgX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyID0gTlVMTDsK
KyAgICB9Cit9CisKKy0gKHZvaWQpX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyCit7CisgICAg
aWYgKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcikgeworICAgICAgICBDRlJ1bkxvb3BU
aW1lckludmFsaWRhdGUoX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyKTsKKyAgICAgICAg
Q0ZSZWxlYXNlKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcik7CisgICAgICAgIF9wcml2
YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lciA9IE5VTEw7CisgICAgfQorfQorCistIChXZWJIVE1M
VmlldyAqKV90b3BIVE1MVmlldworeworICAgIC8vIEZJWE1FOiB0aGlzIGNhbiBmYWlsIGlmIHRo
ZSBkYXRhU291cmNlIGlzIG5pbCwgd2hpY2ggaGFwcGVucyB3aGVuIHRoZSBXZWJWaWV3IGlzIHRl
YXJpbmcgZG93biBmcm9tIHRoZSB3aW5kb3cgY2xvc2luZy4KKyAgICBXZWJIVE1MVmlldyAqdmll
dyA9IChXZWJIVE1MVmlldyAqKVtbW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSBfd2ViVmlld10gbWFp
bkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgQVNTRVJUKHZpZXcpOworICAg
IEFTU0VSVChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKTsKKyAgICBy
ZXR1cm4gdmlldzsKK30KKworLSAoQk9PTClfaXNUb3BIVE1MVmlldworeworICAgIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCBiZSBhIGNhY2hlZCBib29sZWFuIHRoYXQgZG9lc24ndCByZWx5IG9uIF90
b3BIVE1MVmlldyBzaW5jZSB0aGF0IGNhbiBmYWlsIChzZWUgX3RvcEhUTUxWaWV3KS4KKyAgICBy
ZXR1cm4gc2VsZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddOworfQorCistICh2b2lkKV93ZWJfc2V0
UHJpbnRpbmdNb2RlUmVjdXJzaXZlCit7CisgICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5p
bXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5P
XTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9
IFlFUzsKKyNlbmRpZgorCisgICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmll
d3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKworICAgIFtzZWxmIF93ZWJfYWRk
RGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107CisK
KyAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgW1tkZXNjZW5k
YW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5nOllFUyBtaW5pbXVt
UGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsK
KworICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOworCisjaWZuZGVmIE5ERUJV
RworICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87CisjZW5kaWYKK30KKwor
LSAodm9pZClfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlCit7CisgICAgW3NlbGYgX3Nl
dFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYg
YWRqdXN0Vmlld1NpemU6Tk9dOworCisjaWZuZGVmIE5ERUJVRworICAgIF9wcml2YXRlLT5lbnVt
ZXJhdGluZ1N1YnZpZXdzID0gWUVTOworI2VuZGlmCisKKyAgICBOU011dGFibGVBcnJheSAqZGVz
Y2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworCisg
ICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50
V2ViSFRNTFZpZXdzXTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1M
Vmlld3MgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQor
ICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJp
bnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1
c3RWaWV3U2l6ZTpOT107CisKKyAgICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsK
KworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5P
OworI2VuZGlmCit9CisKKy0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRB
ZGp1c3RWaWV3U2l6ZQoreworICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VX
aWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpZRVNdOworCisj
aWZuZGVmIE5ERUJVRworICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwor
I2VuZGlmCisKKyAgICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworCisgICAgW3NlbGYgX3dlYl9hZGREZXNjZW5k
YW50V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKKworICAgIHVu
c2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICBbW2Rlc2NlbmRhbnRXZWJI
VE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lk
dGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6WUVTXTsKKworICAg
IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOworCisjaWZuZGVmIE5ERUJVRworICAg
IF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87CisjZW5kaWYKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYlByaXZhdGUpCisKKysgKE5TQXJyYXkg
KilzdXBwb3J0ZWRNSU1FVHlwZXMKK3sKKyAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlv
biBzdXBwb3J0ZWRNSU1FVHlwZXNdOworfQorCisrIChOU0FycmF5ICopc3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZXMKK3sKKyAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlc107Cit9CisKKysgKE5TQXJyYXkgKilzdXBwb3J0ZWROb25JbWFnZU1JTUVU
eXBlcworeworICAgIHJldHVybiBbV2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZE5vbklt
YWdlTUlNRVR5cGVzXTsKK30KKworKyAoTlNBcnJheSAqKXVuc3VwcG9ydGVkVGV4dE1JTUVUeXBl
cworeworICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOgorICAgICAgICBAInRl
eHQvY2FsZW5kYXIiLCAgICAgICAvLyBpQ2FsCisgICAgICAgIEAidGV4dC94LWNhbGVuZGFyIiwK
KyAgICAgICAgQCJ0ZXh0L3gtdmNhbGVuZGFyIiwKKyAgICAgICAgQCJ0ZXh0L3ZjYWxlbmRhciIs
CisgICAgICAgIEAidGV4dC92Y2FyZCIsICAgICAgICAgIC8vIHZDYXJkCisgICAgICAgIEAidGV4
dC94LXZjYXJkIiwKKyAgICAgICAgQCJ0ZXh0L2RpcmVjdG9yeSIsCisgICAgICAgIEAidGV4dC9s
ZGlmIiwgICAgICAgICAgIC8vIE5ldHNjYXBlIEFkZHJlc3MgQm9vaworICAgICAgICBAInRleHQv
cWlmIiwgICAgICAgICAgICAvLyBRdWlja2VuCisgICAgICAgIEAidGV4dC94LXFpZiIsCisgICAg
ICAgIEAidGV4dC94LWNzdiIsICAgICAgICAgIC8vIENTViAoZm9yIEFkZHJlc3MgQm9vayBhbmQg
TWljcm9zb2Z0IE91dGxvb2spCisgICAgICAgIEAidGV4dC94LXZjZiIsICAgICAgICAgIC8vIHZD
YXJkIHR5cGUgdXNlZCBpbiBTdW4gYWZmaW5pdHkgYXBwCisgICAgICAgIEAidGV4dC9ydGYiLCAg
ICAgICAgICAgIC8vIFJpY2ggVGV4dCBGb3JtYXQKKyAgICAgICAgbmlsXTsKK30KKworKyAodm9p
ZClfcG9zdEZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQKK3sK
KyAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3I6IDxyZGFyOi8vcHJvYmxlbS8yOTgxNjE5
PiBOU1Jlc3BvbmRlcl9Qcml2YXRlIHNob3VsZCBpbmNsdWRlIG5vdGlmaWNhdGlvbiBmb3IgRmxh
Z3NDaGFuZ2VkCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdp
dGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAgICBsb2NhdGlvbjpbW2ZsYWdzQ2hhbmdlZEV2ZW50
IHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KKyAg
ICAgICAgbW9kaWZpZXJGbGFnczpbZmxhZ3NDaGFuZ2VkRXZlbnQgbW9kaWZpZXJGbGFnc10KKyAg
ICAgICAgdGltZXN0YW1wOltmbGFnc0NoYW5nZWRFdmVudCB0aW1lc3RhbXBdCisgICAgICAgIHdp
bmRvd051bWJlcjpbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93TnVtYmVyXQorICAgICAgICBjb250
ZXh0OltmbGFnc0NoYW5nZWRFdmVudCBjb250ZXh0XQorICAgICAgICBldmVudE51bWJlcjowIGNs
aWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKKworICAgIC8vIFByZXRlbmQgaXQncyBhIG1vdXNlIG1v
dmUuCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQorICAgICAgICBw
b3N0Tm90aWZpY2F0aW9uTmFtZTpXS01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6c2Vs
ZgorICAgICAgICB1c2VySW5mbzpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmZh
a2VFdmVudCBmb3JLZXk6QCJOU0V2ZW50Il1dOworfQorCistIChpZClfYnJpZGdlCit7CisgICAg
Ly8gVGhpcyBtZXRob2QgZXhpc3RzIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBMZW9w
YXJkJ3MgRGljdGlvbmFyeS5hcHAsIHNpbmNlIGl0CisgICAgLy8gY2FsbHMgX2JyaWRnZSB0byBn
ZXQgYWNjZXNzIHRvIGNvbnZlcnROU1JhbmdlVG9ET01SYW5nZTogYW5kIGNvbnZlcnRET01SYW5n
ZVRvTlNSYW5nZTouCisgICAgLy8gUmV0dXJuIHRoZSBXZWJGcmFtZSwgd2hpY2ggaW1wbGVtZW50
cyB0aGUgY29tcGF0aWJpbGl0eSBtZXRob2RzLiA8cmRhcjovL3Byb2JsZW0vNjAwMjE2MD4KKyAg
ICByZXR1cm4gW3NlbGYgX2ZyYW1lXTsKK30KKworLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0
aEZha2VFdmVudAoreworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07Cisg
ICAgCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBl
Ok5TTW91c2VNb3ZlZAorICAgICAgICBsb2NhdGlvbjpbW3NlbGYgd2luZG93XSBjb252ZXJ0U2Ny
ZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQorICAgICAgICBtb2RpZmllckZsYWdz
OltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQorICAgICAgICB0aW1lc3RhbXA6
W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCisgICAgICAgIHdpbmRvd051
bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6W1tOU0Fw
cCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3Vu
dDowIHByZXNzdXJlOjBdOworICAgIAorICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRXZl
bnQ6ZmFrZUV2ZW50XTsKK30KKworc3RhdGljIHZvaWQgX3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2Fs
bGJhY2soQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQgKmluZm8pCit7CisgICAgV2ViSFRN
TFZpZXcgKnZpZXcgPSAoV2ViSFRNTFZpZXcgKilpbmZvOworICAgIAorICAgIFt2aWV3IF91cGRh
dGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKK30KKworLSAodm9pZClfZnJhbWVPckJvdW5kc0No
YW5nZWQKK3sKKyAgICBOU1BvaW50IG9yaWdpbiA9IFtbc2VsZiBzdXBlcnZpZXddIGJvdW5kc10u
b3JpZ2luOworICAgIGlmICghTlNFcXVhbFBvaW50cyhfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0
aW9uLCBvcmlnaW4pKSB7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRT
Y3JvbGxFdmVudCgpOworICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVy
dGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgICAgIAorICAgICAgICBXZWJWaWV3ICp3
ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOworICAgICAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVG
b3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRTY3JvbGxEb2N1bWVudEluRnJhbWVWaWV3Oltz
ZWxmIF9mcmFtZVZpZXddXTsKKyAgICB9CisgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlv
biA9IG9yaWdpbjsKKworICAgIGlmIChbc2VsZiB3aW5kb3ddICYmICFfcHJpdmF0ZS0+Y2xvc2Vk
ICYmICFfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpIHsKKyAgICAgICAgQ0ZSdW5Mb29w
VGltZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFVzZSBhIDEwMG1zIGRlbGF5IHNvIHRoYXQgdGhlIHN5bnRoZXRp
YyBtb3VzZSBvdmVyIHVwZGF0ZSBkb2Vzbid0IGNhdXNlIGN1cnNvciB0aHJhc2hpbmcgd2hlbiBw
YWdlcyBhcmUgbG9hZGluZworICAgICAgICAvLyBhbmQgc2Nyb2xsaW5nIHJhcGlkbHkgYmFjayB0
byBiYWNrLgorICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIgPSBDRlJ1bkxv
b3BUaW1lckNyZWF0ZShOVUxMLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIDAuMSwgMCwg
MCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhY2ssICZjb250ZXh0KTsKKyAg
ICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBfcHJpdmF0ZS0+
dXBkYXRlTW91c2VvdmVyVGltZXIsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgfQorfQor
CistICh2b2lkKV9zZXRBc2lkZVN1YnZpZXdzCit7CisgICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vi
dmlld3NTZXRBc2lkZSk7CisgICAgQVNTRVJUKF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID09IG5p
bCk7CisgICAgX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPSBfc3Vidmlld3M7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0aGUgbGF5ZXIt
aG9zdGluZyB2aWV3IGluIHRoZSBzdWJ2aWV3cywgb3RoZXJ3aXNlIHRoZSBsYXllcnMgZmxhc2gu
CisgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7CisgICAgICAgIE5TQXJyYXkq
IG5ld1N1YnZpZXdzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6X3ByaXZhdGUt
PmxheWVySG9zdGluZ1ZpZXcsIG5pbF07CisgICAgICAgIF9zdWJ2aWV3cyA9IG5ld1N1YnZpZXdz
OworICAgIH0gZWxzZQorICAgICAgICBfc3Vidmlld3MgPSBuaWw7CisjZWxzZQorICAgIF9zdWJ2
aWV3cyA9IG5pbDsKKyNlbmRpZiAgICAKKyAgICBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSA9
IFlFUzsKKyB9CisgCisgLSAodm9pZClfcmVzdG9yZVN1YnZpZXdzCisgeworICAgIEFTU0VSVChf
cHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgeworICAgICAgICBbX3N1
YnZpZXdzIHJlbGVhc2VdOworICAgICAgICBfc3Vidmlld3MgPSBfcHJpdmF0ZS0+c2F2ZWRTdWJ2
aWV3czsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoX3N1YnZpZXdzID09IG5pbCk7Cisg
ICAgICAgIF9zdWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOworICAgIH0KKyNlbHNl
CisgICAgQVNTRVJUKF9zdWJ2aWV3cyA9PSBuaWwpOworICAgIF9zdWJ2aWV3cyA9IF9wcml2YXRl
LT5zYXZlZFN1YnZpZXdzOworI2VuZGlmICAgIAorICAgIF9wcml2YXRlLT5zYXZlZFN1YnZpZXdz
ID0gbmlsOworICAgIF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlID0gTk87Cit9CisKKyNpZm5k
ZWYgTkRFQlVHCisKKy0gKHZvaWQpZGlkQWRkU3VidmlldzooTlNWaWV3ICopc3Vidmlldworewor
ICAgIGlmIChfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cykKKyAgICAgICAgTE9HKFZpZXcs
ICJBIHZpZXcgb2YgY2xhc3MgJXMgd2FzIGFkZGVkIGR1cmluZyBzdWJ2aWV3IGVudW1lcmF0aW9u
IGZvciBsYXlvdXQgb3IgcHJpbnRpbmcgbW9kZSBjaGFuZ2UuIFRoaXMgdmlldyBtaWdodCBwYWlu
dCB3aXRob3V0IGZpcnN0IHJlY2VpdmluZyBsYXlvdXQuIiwgb2JqZWN0X2dldENsYXNzTmFtZShb
c3VidmlldyBjbGFzc10pKTsKK30KKworLSAodm9pZCl3aWxsUmVtb3ZlU3VidmlldzooTlNWaWV3
ICopc3VidmlldworeworICAgIC8vIEhhdmUgdG8gbnVsbC1jaGVjayBfcHJpdmF0ZSwgc2luY2Ug
dGhpcyBjYW4gYmUgY2FsbGVkIHZpYSAtZGVhbGxvYyB3aGVuCisgICAgLy8gY2xlYW5pbmcgdXAg
dGhlIHRoZSBsYXllckhvc3RpbmdWaWV3LgorICAgIGlmIChfcHJpdmF0ZSAmJiBfcHJpdmF0ZS0+
ZW51bWVyYXRpbmdTdWJ2aWV3cykKKyAgICAgICAgTE9HKFZpZXcsICJBIHZpZXcgb2YgY2xhc3Mg
JXMgd2FzIHJlbW92ZWQgZHVyaW5nIHN1YnZpZXcgZW51bWVyYXRpb24gZm9yIGxheW91dCBvciBw
cmludGluZyBtb2RlIGNoYW5nZS4gV2Ugd2lsbCBzdGlsbCBkbyBsYXlvdXQgb3IgdGhlIHByaW50
aW5nIG1vZGUgY2hhbmdlIGV2ZW4gdGhvdWdoIHRoaXMgdmlldyBpcyBubyBsb25nZXIgaW4gdGhl
IHZpZXcgaGllcmFyY2h5LiIsIG9iamVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7
Cit9CisKKyNlbmRpZgorCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKworLy8gVGhpcyBpcyBj
YWxsZWQgd2hlbiB3ZSBhcmUgYWJvdXQgdG8gZHJhdywgYnV0IGJlZm9yZSBvdXIgZGlydHkgcmVj
dCBpcyBwcm9wYWdhdGVkIHRvIG91ciBhbmNlc3RvcnMuCisvLyBUaGF0J3MgdGhlIHBlcmZlY3Qg
dGltZSB0byBkbyBhIGxheW91dCwgZXhjZXB0IHRoYXQgaWRlYWxseSB3ZSdkIHdhbnQgdG8gYmUg
c3VyZSB0aGF0IHdlJ3JlIGRpcnR5CisvLyBiZWZvcmUgZG9pbmcgaXQuIEFzIGEgY29tcHJvbWlz
ZSwgd2hlbiB3ZSdyZSBvcGFxdWUgd2UgZG8gdGhlIGxheW91dCBvbmx5IHdoZW4gYWN0dWFsbHkg
YXNrZWQgdG8KKy8vIGRyYXcsIGJ1dCB3aGVuIHdlJ3JlIHRyYW5zcGFyZW50IHdlIGRvIHRoZSBs
YXlvdXQgYXQgdGhpcyBzdGFnZSBzbyB2aWV3cyBiZWhpbmQgdXMga25vdyB0aGF0IHRoZXkKKy8v
IG5lZWQgdG8gYmUgcmVkcmF3biAoaW4gY2FzZSB0aGUgbGF5b3V0IGNhdXNlcyBzb21lIHRoaW5n
cyB0byBnZXQgZGlydGllZCkuCistICh2b2lkKV9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVB
bmNlc3RvcnMKK3sKKyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gZHJhd3NCYWNrZ3JvdW5kXSkK
KyAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisgICAgW3N1cGVy
IF9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnNdOworfQorCisjZWxzZQorCist
ICh2b2lkKXZpZXdXaWxsRHJhdworeworICAgIC8vIE9uIHdpbmRvdyBjbG9zZSB3ZSB3aWxsIGJl
IGNhbGxlZCB3aGVuIHRoZSBkYXRhc291cmNlIGlzIG5pbCwgdGhlbiBoaXQgYW4gYXNzZXJ0IGlu
IF90b3BIVE1MVmlldworICAgIC8vIFNvIGNoZWNrIGlmIHRoZSBkYXRhU291cmNlIGlzIG5pbCBi
ZWZvcmUgY2FsbGluZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRoaXMgY2FuIGJlIHJlbW92ZWQK
KyAgICAvLyBvbmNlIHRoZSBGSVhNRSBpbiBfaXNUb3BIVE1MVmlldyBpcyBmaXhlZC4KKyAgICBp
ZiAoX3ByaXZhdGUtPmRhdGFTb3VyY2UgJiYgW3NlbGYgX2lzVG9wSFRNTFZpZXddKQorICAgICAg
ICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKKyAgICBbc3VwZXIgdmlld1dp
bGxEcmF3XTsKK30KKworI2VuZGlmCisKKy8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1
YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KKy0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlS
ZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6KEJP
T0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5TVmlldyAqKXZpc2li
bGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldworeworICAgIC8vIFRoaXMgaGVscHMgd2hlbiB3
ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nlc3MuCisgICAgLy8gSWYgdGhl
IFdlYkhUTUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdpbGwg
bmV2ZXIgaGF2ZSB0byBkbyB0aGlzLgorICAgIEJPT0wgd2FzSW5QcmludGluZ01vZGUgPSBfcHJp
dmF0ZS0+cHJpbnRpbmc7CisgICAgQk9PTCBpc1ByaW50aW5nID0gIVtOU0dyYXBoaWNzQ29udGV4
dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07CisgICAgaWYgKGlzUHJpbnRpbmcpIHsK
KyAgICAgICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgICAgIFtzZWxmIF93ZWJf
c2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2
ZV07CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQorICAgICAgICBb
c2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKworI2lmZGVmIEJVSUxESU5H
X09OX1RJR0VSCisKKyAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMgbm90IGhhdmUgdmlld1dpbGxE
cmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhlcmUuCisgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5l
ZWRlZFJlY3Vyc2l2ZV07CisgICAgW19zdWJ2aWV3cyBtYWtlT2JqZWN0c1BlcmZvcm1TZWxlY3Rv
cjpAc2VsZWN0b3IoX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9ycyldOworCisj
ZW5kaWYKKworICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKKyAgICBbc3VwZXIgX3JlY3Vy
c2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6cmVjdCBpc1Zpc2libGVSZWN0
OmlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OnZpc2libGVWaWV3IHRvcFZp
ZXc6dG9wVmlld107CisgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107CisKKyAgICBpZiAod2Fz
SW5QcmludGluZ01vZGUgIT0gaXNQcmludGluZykgeworICAgICAgICBpZiAod2FzSW5QcmludGlu
Z01vZGUpCisgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVS
ZWN1cnNpdmVdOworICAgIH0KK30KKworLy8gRG9uJ3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vi
dmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0LgorLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheUFs
bERpcnR5V2l0aExvY2tGb2N1czooQk9PTCluZWVkc0xvY2tGb2N1cyB2aXNSZWN0OihOU1JlY3Qp
dmlzUmVjdAoreworICAgIEJPT0wgbmVlZFRvU2V0QXNpZGVTdWJ2aWV3cyA9ICFfcHJpdmF0ZS0+
c3Vidmlld3NTZXRBc2lkZTsKKworICAgIEJPT0wgd2FzSW5QcmludGluZ01vZGUgPSBfcHJpdmF0
ZS0+cHJpbnRpbmc7CisgICAgQk9PTCBpc1ByaW50aW5nID0gIVtOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07CisKKyAgICBpZiAobmVlZFRvU2V0QXNpZGVT
dWJ2aWV3cykgeworICAgICAgICAvLyBUaGlzIGhlbHBzIHdoZW4gd2UgcHJpbnQgYXMgcGFydCBv
ZiBhIGxhcmdlciBwcmludCBwcm9jZXNzLgorICAgICAgICAvLyBJZiB0aGUgV2ViSFRNTFZpZXcg
aXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZlciBoYXZlIHRv
IGRvIHRoaXMuCisgICAgICAgIGlmIChpc1ByaW50aW5nKSB7CisgICAgICAgICAgICBpZiAoIXdh
c0luUHJpbnRpbmdNb2RlKQorICAgICAgICAgICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdN
b2RlUmVjdXJzaXZlXTsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsK
KyNlbmRpZgorICAgICAgICB9IGVsc2UgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQorICAgICAgICAg
ICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07CisKKyNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgorCisgICAgICAgIC8vIEJlY2F1c2UgVGlnZXIgZG9lcyBub3QgaGF2ZSB2
aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVyZS4KKyAgICAgICAgTlNSZWN0IGJv
dW5kc0JlZm9yZUxheW91dCA9IFtzZWxmIGJvdW5kc107CisgICAgICAgIGlmICghTlNJc0VtcHR5
UmVjdCh2aXNSZWN0KSkKKyAgICAgICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1
cnNpdmVdOworCisgICAgICAgIC8vIElmIGxheW91dCBjaGFuZ2VzIHRoZSB2aWV3J3MgYm91bmRz
LCB0aGVuIHdlIG5lZWQgdG8gcmVjb21wdXRlIHRoZSB2aXNSZWN0LgorICAgICAgICAvLyBUaGF0
J3MgYmVjYXVzZSB0aGUgdmlzUmVjdCBwYXNzZWQgdG8gdXMgd2FzIGJhc2VkIG9uIHRoZSBib3Vu
ZHMgYXQgdGhlIHRpbWUKKyAgICAgICAgLy8gd2Ugd2VyZSBjYWxsZWQuIFRoaXMgbWV0aG9kIGlz
IG9ubHkgZGlzcGxheWVkIHRvIGRyYXcgImFsbCIsIHNvIGl0J3Mgc2FmZQorICAgICAgICAvLyB0
byBqdXN0IGNhbGwgdmlzaWJsZVJlY3QgdG8gY29tcHV0ZSB0aGUgZW50aXJlIHJlY3RhbmdsZS4K
KyAgICAgICAgaWYgKCFOU0VxdWFsUmVjdHMoYm91bmRzQmVmb3JlTGF5b3V0LCBbc2VsZiBib3Vu
ZHNdKSkKKyAgICAgICAgICAgIHZpc1JlY3QgPSBbc2VsZiB2aXNpYmxlUmVjdF07CisKKyNlbmRp
ZgorCisgICAgICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKKyAgICB9CisKKyAgICBbc3Vw
ZXIgX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6bmVlZHNMb2NrRm9jdXMg
dmlzUmVjdDp2aXNSZWN0XTsKKworICAgIGlmIChuZWVkVG9TZXRBc2lkZVN1YnZpZXdzKSB7Cisg
ICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSAhPSBpc1ByaW50aW5nKSB7CisgICAgICAgICAg
ICBpZiAod2FzSW5QcmludGluZ01vZGUpCisgICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQ
cmludGluZ01vZGVSZWN1cnNpdmVdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOworICAgICAgICB9CisKKyAg
ICAgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107CisgICAgfQorfQorCisvLyBEb24ndCBsZXQg
QXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJlIG9mIHRoYXQuCistICh2b2lk
KV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZSBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTooTlNS
ZWN0KWRpc3BsYXlSZWN0IGluQ29udGV4dDooTlNHcmFwaGljc0NvbnRleHQgKiljb250ZXh0IHRv
cFZpZXc6KEJPT0wpdG9wVmlldworeworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSIAorICAgIC8v
IEJlY2F1c2UgVGlnZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBs
YXlvdXQgaGVyZS4KKyAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKKyNl
bmRpZgorCisgICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3NdOworICAgIFtzdXBlciBfcmVjdXJz
aXZlOnJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6ZGlzcGxheVJlY3QgaW5Db250
ZXh0OmNvbnRleHQgdG9wVmlldzp0b3BWaWV3XTsKKyAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdz
XTsKK30KKworLSAoQk9PTClfaW5zaWRlQW5vdGhlckhUTUxWaWV3Cit7CisgICAgcmV0dXJuIHNl
bGYgIT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKK30KKworLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQ
b2ludClwb2ludAoreworICAgIC8vIFdlYkhUTUxWaWV3IG9iamVjdHMgaGFuZGxlIGFsbCBldmVu
dHMgZm9yIG9iamVjdHMgaW5zaWRlIHRoZW0uCisgICAgLy8gVG8gZ2V0IHRob3NlIGV2ZW50cywg
d2UgcHJldmVudCBoaXQgdGVzdGluZyBmcm9tIEFwcEtpdC4KKworICAgIC8vIEJ1dCB0aGVyZSBh
cmUgdGhyZWUgZXhjZXB0aW9ucyB0byB0aGlzOgorICAgIC8vICAgMSkgRm9yIHJpZ2h0IG1vdXNl
IGNsaWNrcyBhbmQgY29udHJvbCBjbGlja3Mgd2UgZG9uJ3QgeWV0IGhhdmUgYW4gaW1wbGVtZW50
YXRpb24KKyAgICAvLyAgICAgIHRoYXQgd29ya3MgZm9yIG5lc3RlZCB2aWV3cywgc28gd2UgbGV0
IHRoZSBoaXQgdGVzdGluZyBnbyB0aHJvdWdoIHRoZQorICAgIC8vICAgICAgc3RhbmRhcmQgTlNW
aWV3IGNvZGUgcGF0aCAobmVlZHMgdG8gYmUgZml4ZWQsIHNlZSBidWcgNDM2MTYxOCkuCisgICAg
Ly8gICAyKSBKYXZhIGRlcGVuZHMgb24gZG9pbmcgYSBoaXQgdGVzdCBpbnNpZGUgaXQncyBtb3Vz
ZSBtb3ZlZCBoYW5kbGluZywKKyAgICAvLyAgICAgIHNvIHdlIGxldCB0aGUgaGl0IHRlc3Rpbmcg
Z28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgTlNWaWV3IGNvZGUgcGF0aAorICAgIC8vICAgICAgd2hl
biB0aGUgY3VycmVudCBldmVudCBpcyBhIG1vdXNlIG1vdmUgKGV4Y2VwdCB3aGVuIHdlIGFyZSBj
YWxsaW5nCisgICAgLy8gICAgICBmcm9tIF91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQsIHNvIHdl
IGhhdmUgdG8gdXNlIGEgZ2xvYmFsLAorICAgIC8vICAgICAgZm9yY2VXZWJIVE1MVmlld0hpdFRl
c3QsIGZvciB0aGF0KQorICAgIC8vICAgMykgVGhlIGFjY2VwdHNGaXJzdE1vdXNlOiBhbmQgc2hv
dWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OiBtZXRob2RzCisgICAgLy8gICAgICBib3Ro
IG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCB2aWV3IHRvIGNoZWNrIHdpdGggaW5zaWRlIHRoZSBX
ZWJIVE1MVmlldy4KKyAgICAvLyAgICAgIFRoZXkgdXNlIGEgZ2xvYmFsIHRvIGNoYW5nZSB0aGUg
YmVoYXZpb3Igb2YgaGl0VGVzdDogc28gdGhleSBjYW4gZ2V0IHRoZQorICAgIC8vICAgICAgcmln
aHQgdmlldy4gVGhlIGdsb2JhbCBpcyBmb3JjZU5TVmlld0hpdFRlc3QgYW5kIHRoZSBtZXRob2Qg
dGhleSB1c2UgdG8KKyAgICAvLyAgICAgIGRvIHRoZSBoaXQgdGVzdGluZyBpcyBfaGl0Vmlld0Zv
ckV2ZW50Oi4gKEJ1dCB0aGlzIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5CisgICAgLy8gICAgICB3
aGVuIHRoZXJlIGlzIEhUTUwgb3ZlcmxhcHBpbmcgdGhlIHZpZXcsIHNlZSBidWcgNDM2MTYyNikK
KyAgICAvLyAgIDQpIE5TQWNjZXNzaWJpbGl0eUhpdFRlc3QgcmVsaWVzIG9uIHRoaXMgZm9yIGNo
ZWNraW5nIHRoZSBjdXJzb3IgcG9zaXRpb24uCisgICAgLy8gICAgICBPdXIgY2hlY2sgZm9yIHRo
YXQgaXMgd2hldGhlciB0aGUgZXZlbnQgaXMgTlNGbGFnc0NoYW5nZWQuICBUaGlzIHdvcmtzCisg
ICAgLy8gICAgICBmb3IgVm9pY2VPdmVyJ3MgY250bC1vcHQtZjUgY29tbWFuZCAobW92ZSBmb2N1
cyB0byBpdGVtIHVuZGVyIGN1cnNvcikKKyAgICAvLyAgICAgIGFuZCBEaWN0aW9uYXJ5J3MgY21k
LWNudGwtRCAob3BlbiBkaWN0aW9uYXJ5IHBvcHVwIGZvciBpdGVtIHVuZGVyIGN1cnNvcikuCisg
ICAgLy8gICAgICBUaGlzIGlzIG9mIGNvdXJzZSBhIGhhY2suCisKKyAgICBCT09MIGNhcHR1cmVI
aXRzT25TdWJ2aWV3czsKKyAgICBpZiAoZm9yY2VOU1ZpZXdIaXRUZXN0KQorICAgICAgICBjYXB0
dXJlSGl0c09uU3Vidmlld3MgPSBOTzsKKyAgICBlbHNlIGlmIChmb3JjZVdlYkhUTUxWaWV3SGl0
VGVzdCkKKyAgICAgICAgY2FwdHVyZUhpdHNPblN1YnZpZXdzID0gWUVTOworICAgIGVsc2Ugewor
ICAgICAgICBOU0V2ZW50ICpldmVudCA9IFtbc2VsZiB3aW5kb3ddIGN1cnJlbnRFdmVudF07Cisg
ICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9ICEoW2V2ZW50IHR5cGVdID09IE5TTW91c2VN
b3ZlZAorICAgICAgICAgICAgfHwgW2V2ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24KKyAg
ICAgICAgICAgIHx8IChbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91c2VEb3duICYmIChbZXZlbnQg
bW9kaWZpZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNrKSAhPSAwKQorICAgICAgICAgICAgfHwg
W2V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFuZ2VkKTsKKyAgICB9CisKKyAgICBpZiAoIWNhcHR1
cmVIaXRzT25TdWJ2aWV3cykKKyAgICAgICAgcmV0dXJuIFtzdXBlciBoaXRUZXN0OnBvaW50XTsK
KyAgICBpZiAoW1tzZWxmIHN1cGVydmlld10gbW91c2U6cG9pbnQgaW5SZWN0OltzZWxmIGZyYW1l
XV0pCisgICAgICAgIHJldHVybiBzZWxmOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKHZvaWQp
X2NsZWFyTGFzdEhpdFZpZXdJZlNlbGYKK3sKKyAgICBpZiAobGFzdEhpdFZpZXcgPT0gc2VsZikK
KyAgICAgICAgbGFzdEhpdFZpZXcgPSBuaWw7Cit9CisKKy0gKE5TVHJhY2tpbmdSZWN0VGFnKWFk
ZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2b2lk
ICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlCit7CisgICAgQVNTRVJUKF9w
cml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOworICAgIF9wcml2YXRlLT50cmFja2lu
Z1JlY3RPd25lciA9IG93bmVyOworICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9
IGRhdGE7CisgICAgcmV0dXJuIFRSQUNLSU5HX1JFQ1RfVEFHOworfQorCistIChOU1RyYWNraW5n
UmVjdFRhZylfYWRkVHJhY2tpbmdSZWN0OihOU1JlY3QpcmVjdCBvd25lcjooaWQpb3duZXIgdXNl
ckRhdGE6KHZvaWQgKilkYXRhIGFzc3VtZUluc2lkZTooQk9PTClhc3N1bWVJbnNpZGUgdXNlVHJh
Y2tpbmdOdW06KGludCl0YWcKK3sKKyAgICBBU1NFUlQodGFnID09IDAgfHwgdGFnID09IFRSQUNL
SU5HX1JFQ1RfVEFHKTsKKyAgICBBU1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09
IG5pbCk7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7CisgICAgX3By
aXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gZGF0YTsKKyAgICByZXR1cm4gVFJBQ0tJTkdf
UkVDVF9UQUc7Cit9CisKKy0gKHZvaWQpX2FkZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3Rz
IG93bmVyOihpZClvd25lciB1c2VyRGF0YUxpc3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3Vt
ZUluc2lkZUxpc3Q6KEJPT0wgKilhc3N1bWVJbnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFj
a2luZ1JlY3RUYWcgKil0cmFja2luZ051bXMgY291bnQ6KGludCljb3VudAoreworICAgIEFTU0VS
VChjb3VudCA9PSAxKTsKKyAgICBBU1NFUlQodHJhY2tpbmdOdW1zWzBdID09IDAgfHwgdHJhY2tp
bmdOdW1zWzBdID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKKyAgICBBU1NFUlQoX3ByaXZhdGUtPnRy
YWNraW5nUmVjdE93bmVyID09IG5pbCk7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVy
ID0gb3duZXI7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gdXNlckRhdGFM
aXN0WzBdOworICAgIHRyYWNraW5nTnVtc1swXSA9IFRSQUNLSU5HX1JFQ1RfVEFHOworfQorCist
ICh2b2lkKXJlbW92ZVRyYWNraW5nUmVjdDooTlNUcmFja2luZ1JlY3RUYWcpdGFnCit7CisgICAg
aWYgKHRhZyA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKF9wcml2YXRlICYm
ICh0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpKSB7CisgICAgICAgIF9wcml2YXRlLT50cmFja2lu
Z1JlY3RPd25lciA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
X3ByaXZhdGUgJiYgKHRhZyA9PSBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcpKSB7CisgICAgICAg
IFtzdXBlciByZW1vdmVUcmFja2luZ1JlY3Q6dGFnXTsKKyAgICAgICAgX3ByaXZhdGUtPmxhc3RU
b29sVGlwVGFnID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBJZiBh
bnkgb3RoZXIgdHJhY2tpbmcgcmVjdCBpcyBiZWluZyByZW1vdmVkLCB3ZSBkb24ndCBrbm93IGhv
dyBpdCB3YXMgY3JlYXRlZAorICAgIC8vIGFuZCBpdCdzIHBvc3NpYmxlIHRoZXJlJ3MgYSBsZWFr
IGludm9sdmVkIChzZWUgMzUwMDIxNykKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
LSAodm9pZClfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNUcmFja2luZ1JlY3RUYWcgKil0YWdzIGNv
dW50OihpbnQpY291bnQKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBpbnQgdGFnID0gdGFnc1tpXTsKKyAgICAgICAgaWYgKHRhZyA9PSAw
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVCh0YWcgPT0gVFJBQ0tJTkdf
UkVDVF9UQUcpOworICAgICAgICBpZiAoX3ByaXZhdGUgIT0gbmlsKSB7CisgICAgICAgICAgICBf
cHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBuaWw7CisgICAgICAgIH0KKyAgICB9Cit9CisK
Ky0gKHZvaWQpX3NlbmRUb29sVGlwTW91c2VFeGl0ZWQKK3sKKyAgICAvLyBOb3RoaW5nIG1hdHRl
cnMgZXhjZXB0IHdpbmRvdywgdHJhY2tpbmdOdW1iZXIsIGFuZCB1c2VyRGF0YS4KKyAgICBOU0V2
ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBlbnRlckV4aXRFdmVudFdpdGhUeXBlOk5TTW91c2VF
eGl0ZWQKKyAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoMCwgMCkKKyAgICAgICAgbW9kaWZp
ZXJGbGFnczowCisgICAgICAgIHRpbWVzdGFtcDowCisgICAgICAgIHdpbmRvd051bWJlcjpbW3Nl
bGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6TlVMTAorICAgICAgICBl
dmVudE51bWJlcjowCisgICAgICAgIHRyYWNraW5nTnVtYmVyOlRSQUNLSU5HX1JFQ1RfVEFHCisg
ICAgICAgIHVzZXJEYXRhOl9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YV07CisgICAgW19w
cml2YXRlLT50cmFja2luZ1JlY3RPd25lciBtb3VzZUV4aXRlZDpmYWtlRXZlbnRdOworfQorCist
ICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZAoreworICAgIC8vIE5vdGhpbmcgbWF0dGVy
cyBleGNlcHQgd2luZG93LCB0cmFja2luZ051bWJlciwgYW5kIHVzZXJEYXRhLgorICAgIE5TRXZl
bnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGVudGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUVu
dGVyZWQKKyAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoMCwgMCkKKyAgICAgICAgbW9kaWZp
ZXJGbGFnczowCisgICAgICAgIHRpbWVzdGFtcDowCisgICAgICAgIHdpbmRvd051bWJlcjpbW3Nl
bGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6TlVMTAorICAgICAgICBl
dmVudE51bWJlcjowCisgICAgICAgIHRyYWNraW5nTnVtYmVyOlRSQUNLSU5HX1JFQ1RfVEFHCisg
ICAgICAgIHVzZXJEYXRhOl9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YV07CisgICAgW19w
cml2YXRlLT50cmFja2luZ1JlY3RPd25lciBtb3VzZUVudGVyZWQ6ZmFrZUV2ZW50XTsKK30KKwor
LSAodm9pZClfc2V0VG9vbFRpcDooTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICBOU1N0cmluZyAq
dG9vbFRpcCA9IFtzdHJpbmcgbGVuZ3RoXSA9PSAwID8gbmlsIDogc3RyaW5nOworICAgIE5TU3Ry
aW5nICpvbGRUb29sVGlwID0gX3ByaXZhdGUtPnRvb2xUaXA7CisgICAgaWYgKCh0b29sVGlwID09
IG5pbCB8fCBvbGRUb29sVGlwID09IG5pbCkgPyB0b29sVGlwID09IG9sZFRvb2xUaXAgOiBbdG9v
bFRpcCBpc0VxdWFsVG9TdHJpbmc6b2xkVG9vbFRpcF0pIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAob2xkVG9vbFRpcCkgeworICAgICAgICBbc2VsZiBfc2VuZFRvb2xUaXBNb3Vz
ZUV4aXRlZF07CisgICAgICAgIFtvbGRUb29sVGlwIHJlbGVhc2VdOworICAgIH0KKyAgICBfcHJp
dmF0ZS0+dG9vbFRpcCA9IFt0b29sVGlwIGNvcHldOworICAgIGlmICh0b29sVGlwKSB7CisgICAg
ICAgIC8vIFNlZSByYWRhciAzNTAwMjE3IGZvciB3aHkgd2UgcmVtb3ZlIGFsbCB0b29sdGlwcyBy
YXRoZXIgdGhhbiBqdXN0IHRoZSBzaW5nbGUgb25lIHdlIGNyZWF0ZWQuCisgICAgICAgIFtzZWxm
IHJlbW92ZUFsbFRvb2xUaXBzXTsKKyAgICAgICAgTlNSZWN0IHdpZGVPcGVuUmVjdCA9IE5TTWFr
ZVJlY3QoLTEwMDAwMCwgLTEwMDAwMCwgMjAwMDAwLCAyMDAwMDApOworICAgICAgICBfcHJpdmF0
ZS0+bGFzdFRvb2xUaXBUYWcgPSBbc2VsZiBhZGRUb29sVGlwUmVjdDp3aWRlT3BlblJlY3Qgb3du
ZXI6c2VsZiB1c2VyRGF0YTpOVUxMXTsKKyAgICAgICAgW3NlbGYgX3NlbmRUb29sVGlwTW91c2VF
bnRlcmVkXTsKKyAgICB9Cit9CisKKy0gKE5TU3RyaW5nICopdmlldzooTlNWaWV3ICopdmlldyBz
dHJpbmdGb3JUb29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50OihOU1BvaW50KXBvaW50IHVz
ZXJEYXRhOih2b2lkICopZGF0YQoreworICAgIHJldHVybiBbW19wcml2YXRlLT50b29sVGlwIGNv
cHldIGF1dG9yZWxlYXNlXTsKK30KKworLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50
OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoX3ByaXZhdGUtPmNsb3NlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFtbZXZlbnQgd2luZG93XSBjb250
ZW50Vmlld107CisgICAgTlNQb2ludCBsb2NhdGlvbkZvckhpdFRlc3QgPSBbW2NvbnRlbnRWaWV3
IHN1cGVydmlld10gY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmll
dzpuaWxdOworICAgIAorICAgIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0ID0gWUVTOworICAgIE5T
VmlldyAqaGl0VmlldyA9IFtjb250ZW50VmlldyBoaXRUZXN0OmxvY2F0aW9uRm9ySGl0VGVzdF07
CisgICAgZm9yY2VXZWJIVE1MVmlld0hpdFRlc3QgPSBOTzsKKyAgICAKKyAgICBXZWJIVE1MVmll
dyAqdmlldyA9IG5pbDsKKyAgICBpZiAoW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZp
ZXcgY2xhc3NdXSAmJiAhW1soV2ViSFRNTFZpZXcgKiloaXRWaWV3IF93ZWJWaWV3XSBpc0hvdmVy
RmVlZGJhY2tTdXNwZW5kZWRdKQorICAgICAgICB2aWV3ID0gKFdlYkhUTUxWaWV3ICopaGl0Vmll
dzsgICAgCisKKyAgICBpZiAodmlldykKKyAgICAgICAgW3ZpZXcgcmV0YWluXTsKKworICAgIGlm
IChsYXN0SGl0VmlldyAhPSB2aWV3ICYmIGxhc3RIaXRWaWV3ICYmIFtsYXN0SGl0VmlldyBfZnJh
bWVdKSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBtb3Zpbmcgb3V0IG9mIGEgdmlldyAob3IgZnJh
bWUpLCBsZXQncyBwcmV0ZW5kIHRoZSBtb3VzZSBtb3ZlZAorICAgICAgICAvLyBhbGwgdGhlIHdh
eSBvdXQgb2YgdGhhdCB2aWV3LiBCdXQgd2UgaGF2ZSB0byBhY2NvdW50IGZvciBzY3JvbGxpbmcs
IGJlY2F1c2UKKyAgICAgICAgLy8ga2h0bWwgZG9lc24ndCB1bmRlcnN0YW5kIG91ciBjbGlwcGlu
Zy4KKyAgICAgICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW1tbW2xhc3RIaXRWaWV3IF9mcmFtZV0g
ZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gZG9jdW1lbnRWaXNpYmxlUmVjdF07CisgICAgICAgIGZs
b2F0IHlTY3JvbGwgPSB2aXNpYmxlUmVjdC5vcmlnaW4ueTsKKyAgICAgICAgZmxvYXQgeFNjcm9s
bCA9IHZpc2libGVSZWN0Lm9yaWdpbi54OworCisgICAgICAgIGV2ZW50ID0gW05TRXZlbnQgbW91
c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2F0aW9uOk5TTWFrZVBvaW50KC0xIC0geFNjcm9sbCwgLTEgLSB5U2Nyb2xsICkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2Rp
ZmllckZsYWdzXQorICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRp
bWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICB3
aW5kb3dOdW1iZXI6W1t2aWV3IHdpbmRvd10gd2luZG93TnVtYmVyXQorICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07
CisgICAgICAgIGlmIChGcmFtZSogbGFzdEhpdENvcmVGcmFtZSA9IGNvcmUoW2xhc3RIaXRWaWV3
IF9mcmFtZV0pKQorICAgICAgICAgICAgbGFzdEhpdENvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
Pm1vdXNlTW92ZWQoZXZlbnQpOworICAgIH0KKworICAgIGxhc3RIaXRWaWV3ID0gdmlldzsKKwor
ICAgIGlmICh2aWV3KSB7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbdmll
dyBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNl
TW92ZWQoZXZlbnQpOworCisgICAgICAgIFt2aWV3IHJlbGVhc2VdOworICAgIH0KK30KKworLy8g
a2VlcCBpbiBzeW5jIHdpdGggV2ViUGFzdGVib2FyZEhlbHBlcjo6aW5zZXJ0YWJsZVBhc3RlYm9h
cmRUeXBlcworKyAoTlNBcnJheSAqKV9pbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzCit7CisgICAg
c3RhdGljIE5TQXJyYXkgKnR5cGVzID0gbmlsOworICAgIGlmICghdHlwZXMpIHsKKyAgICAgICAg
dHlwZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpXZWJBcmNoaXZlUGJvYXJk
VHlwZSwgTlNIVE1MUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9hcmRUeXBlLCBOU1RJRkZQYm9h
cmRUeXBlLCBOU1BERlBib2FyZFR5cGUsCisjaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
fHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAgICAgICAgTlNQSUNUUGJvYXJk
VHlwZSwKKyNlbmRpZgorICAgICAgICAgICAgTlNVUkxQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRU
eXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNDb2xvclBib2FyZFR5
cGUsIGtVVFR5cGVQTkcsIG5pbF07CisgICAgICAgIENGUmV0YWluKHR5cGVzKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHR5cGVzOworfQorCisrIChOU0FycmF5ICopX3NlbGVjdGlvblBhc3RlYm9hcmRU
eXBlcworeworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHV0IGRhdGEgZm9yIE5TSFRNTFBib2Fy
ZFR5cGUgb24gdGhlIHBhc3RlYm9hcmQgYnV0IE1pY3Jvc29mdCBFeGNlbCBkb2Vzbid0IGxpa2Ug
b3VyIGZvcm1hdCBvZiBIVE1MICgzNjQwNDIzKS4KKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJkVHlwZSwgTlNSVEZQ
Ym9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIG5pbF07Cit9CisKKy0gKE5TSW1hZ2UgKilf
ZHJhZ0ltYWdlRm9yVVJMOihOU1N0cmluZyopdXJsU3RyaW5nIHdpdGhMYWJlbDooTlNTdHJpbmcq
KWxhYmVsCit7CisgICAgQk9PTCBkcmF3VVJMU3RyaW5nID0gWUVTOworICAgIEJPT0wgY2xpcFVS
TFN0cmluZyA9IE5PLCBjbGlwTGFiZWxTdHJpbmcgPSBOTzsKKyAgICAKKyAgICBpZiAoIWxhYmVs
KSB7CisgICAgICAgIGRyYXdVUkxTdHJpbmcgPSBOTzsKKyAgICAgICAgbGFiZWwgPSB1cmxTdHJp
bmc7CisgICAgfQorICAgIAorICAgIE5TRm9udCAqbGFiZWxGb250ID0gW1tOU0ZvbnRNYW5hZ2Vy
IHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6
RFJBR19MSU5LX0xBQkVMX0ZPTlRfU0laRV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9IYXZlVHJhaXQ6TlNCb2xkRm9udE1hc2td
OworICAgIE5TRm9udCAqdXJsRm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTogRFJBR19M
SU5LX1VSTF9GT05UX1NJWkVdOworICAgIE5TU2l6ZSBsYWJlbFNpemU7CisgICAgbGFiZWxTaXpl
LndpZHRoID0gW2xhYmVsIF93ZWJfd2lkdGhXaXRoRm9udDogbGFiZWxGb250XTsKKyAgICBsYWJl
bFNpemUuaGVpZ2h0ID0gW2xhYmVsRm9udCBhc2NlbmRlcl0gLSBbbGFiZWxGb250IGRlc2NlbmRl
cl07CisgICAgaWYgKGxhYmVsU2l6ZS53aWR0aCA+IE1BWF9EUkFHX0xBQkVMX1dJRFRIKXsKKyAg
ICAgICAgbGFiZWxTaXplLndpZHRoID0gTUFYX0RSQUdfTEFCRUxfV0lEVEg7CisgICAgICAgIGNs
aXBMYWJlbFN0cmluZyA9IFlFUzsKKyAgICB9CisgICAgCisgICAgTlNTaXplIGltYWdlU2l6ZSwg
dXJsU3RyaW5nU2l6ZTsKKyAgICBpbWFnZVNpemUud2lkdGggPSBsYWJlbFNpemUud2lkdGggKyBE
UkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZjsKKyAgICBpbWFnZVNpemUuaGVpZ2h0ID0gbGFiZWxT
aXplLmhlaWdodCArIERSQUdfTEFCRUxfQk9SREVSX1kgKiAyLjBmOworICAgIGlmIChkcmF3VVJM
U3RyaW5nKSB7CisgICAgICAgIHVybFN0cmluZ1NpemUud2lkdGggPSBbdXJsU3RyaW5nIF93ZWJf
d2lkdGhXaXRoRm9udDogdXJsRm9udF07CisgICAgICAgIHVybFN0cmluZ1NpemUuaGVpZ2h0ID0g
W3VybEZvbnQgYXNjZW5kZXJdIC0gW3VybEZvbnQgZGVzY2VuZGVyXTsKKyAgICAgICAgaW1hZ2VT
aXplLmhlaWdodCArPSB1cmxTdHJpbmdTaXplLmhlaWdodDsKKyAgICAgICAgaWYgKHVybFN0cmlu
Z1NpemUud2lkdGggPiBNQVhfRFJBR19MQUJFTF9XSURUSCkgeworICAgICAgICAgICAgaW1hZ2VT
aXplLndpZHRoID0gTUFYKE1BWF9EUkFHX0xBQkVMX1dJRFRIICsgRFJBR19MQUJFTF9CT1JERVJf
WCAqIDIuMGYsIE1JTl9EUkFHX0xBQkVMX1dJRFRIX0JFRk9SRV9DTElQKTsKKyAgICAgICAgICAg
IGNsaXBVUkxTdHJpbmcgPSBZRVM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbWFn
ZVNpemUud2lkdGggPSBNQVgobGFiZWxTaXplLndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAq
IDIuMGYsIHVybFN0cmluZ1NpemUud2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZik7
CisgICAgICAgIH0KKyAgICB9CisgICAgTlNJbWFnZSAqZHJhZ0ltYWdlID0gW1tbTlNJbWFnZSBh
bGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVdIGF1dG9yZWxlYXNlXTsKKyAgICBbZHJhZ0lt
YWdlIGxvY2tGb2N1c107CisgICAgCisgICAgW1tOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDog
MC43ZiBncmVlbjogMC43ZiBibHVlOiAwLjdmIGFscGhhOiAwLjhmXSBzZXRdOworICAgIAorICAg
IC8vIERyYWcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMvCisgICAgTlNCZXppZXJQ
YXRoICpwYXRoID0gW05TQmV6aWVyUGF0aCBiZXppZXJQYXRoXTsKKyAgICBbcGF0aCBhcHBlbmRC
ZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoMC4wZiwgMC4wZiwgRFJBR19MQUJF
TF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKKyAgICBbcGF0aCBh
cHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoMCwgaW1hZ2VTaXplLmhl
aWdodCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBm
LCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRo
V2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9S
QURJVVMgKiAyLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBm
LCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZildOwor
ICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdChpbWFn
ZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIDAuMGYsIERSQUdfTEFCRUxf
UkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07CisgICAgCisgICAgW3Bh
dGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KERSQUdfTEFCRUxfUkFESVVT
LCAwLjBmLCBpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIGltYWdl
U2l6ZS5oZWlnaHQpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFr
ZVJlY3QoMC4wZiwgRFJBR19MQUJFTF9SQURJVVMsIERSQUdfTEFCRUxfUkFESVVTICsgMTAuMGYs
IGltYWdlU2l6ZS5oZWlnaHQgLSAyLjBmICogRFJBR19MQUJFTF9SQURJVVMpXTsKKyAgICBbcGF0
aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0g
RFJBR19MQUJFTF9SQURJVVMgLSAyMC4wZiwgRFJBR19MQUJFTF9SQURJVVMsIERSQUdfTEFCRUxf
UkFESVVTICsgMjAuMGYsIGltYWdlU2l6ZS5oZWlnaHQgLSAyLjBmICogRFJBR19MQUJFTF9SQURJ
VVMpXTsKKyAgICBbcGF0aCBmaWxsXTsKKyAgICAKKyAgICBOU0NvbG9yICp0b3BDb2xvciA9IFtO
U0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjAuMGYgYWxwaGE6MC43NWZdOworICAgIE5TQ29s
b3IgKmJvdHRvbUNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MS4wZiBhbHBo
YTowLjVmXTsKKyAgICBpZiAoZHJhd1VSTFN0cmluZykgeworICAgICAgICBpZiAoY2xpcFVSTFN0
cmluZykKKyAgICAgICAgICAgIHVybFN0cmluZyA9IFtXZWJTdHJpbmdUcnVuY2F0b3IgY2VudGVy
VHJ1bmNhdGVTdHJpbmc6IHVybFN0cmluZyB0b1dpZHRoOmltYWdlU2l6ZS53aWR0aCAtIChEUkFH
X0xBQkVMX0JPUkRFUl9YICogMi4wZikgd2l0aEZvbnQ6dXJsRm9udF07CisgICAgICAgIAorICAg
ICAgICBbdXJsU3RyaW5nIF93ZWJfZHJhd0RvdWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50KERSQUdf
TEFCRUxfQk9SREVSX1gsIERSQUdfTEFCRUxfQk9SREVSX1kgLSBbdXJsRm9udCBkZXNjZW5kZXJd
KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhUb3BDb2xvcjp0b3BDb2xvciBi
b3R0b21Db2xvcjpib3R0b21Db2xvciBmb250OnVybEZvbnRdOworICAgIH0KKyAgICAKKyAgICBp
ZiAoY2xpcExhYmVsU3RyaW5nKQorICAgICAgICBsYWJlbCA9IFtXZWJTdHJpbmdUcnVuY2F0b3Ig
cmlnaHRUcnVuY2F0ZVN0cmluZzogbGFiZWwgdG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAoRFJB
R19MQUJFTF9CT1JERVJfWCAqIDIuMGYpIHdpdGhGb250OmxhYmVsRm9udF07CisgICAgW2xhYmVs
IF93ZWJfZHJhd0RvdWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50IChEUkFHX0xBQkVMX0JPUkRFUl9Y
LCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19MQUJFTF9CT1JERVJfWV9PRkZTRVQgLSBbbGFiZWxG
b250IHBvaW50U2l6ZV0pCisgICAgICAgICAgICAgICAgICAgICAgd2l0aFRvcENvbG9yOnRvcENv
bG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNvbG9yIGZvbnQ6bGFiZWxGb250XTsKKyAgICAKKyAgICBb
ZHJhZ0ltYWdlIHVubG9ja0ZvY3VzXTsKKyAgICAKKyAgICByZXR1cm4gZHJhZ0ltYWdlOworfQor
CistIChOU0ltYWdlICopX2RyYWdJbWFnZUZvckxpbmtFbGVtZW50OihOU0RpY3Rpb25hcnkgKill
bGVtZW50Cit7CisgICAgTlNVUkwgKmxpbmtVUkwgPSBbZWxlbWVudCBvYmplY3RGb3JLZXk6IFdl
YkVsZW1lbnRMaW5rVVJMS2V5XTsKKyAgICAKKyAgICBOU1N0cmluZyAqbGFiZWwgPSBbZWxlbWVu
dCBvYmplY3RGb3JLZXk6IFdlYkVsZW1lbnRMaW5rTGFiZWxLZXldOworICAgIE5TU3RyaW5nICp1
cmxTdHJpbmcgPSBbbGlua1VSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKKyAgICByZXR1cm4g
W3NlbGYgX2RyYWdJbWFnZUZvclVSTDp1cmxTdHJpbmcgd2l0aExhYmVsOmxhYmVsXTsKK30KKwor
LSAodm9pZClwYXN0ZWJvYXJkQ2hhbmdlZE93bmVyOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJk
Cit7CisgICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6MF07Cit9CisKKy0g
KHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBwcm92aWRlRGF0YUZv
clR5cGU6KE5TU3RyaW5nICopdHlwZQoreworICAgIGlmIChbdHlwZSBpc0VxdWFsOk5TUlRGRFBi
b2FyZFR5cGVdICYmIFtbcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2
ZVBib2FyZFR5cGVdKSB7CisgICAgICAgIFdlYkFyY2hpdmUgKmFyY2hpdmUgPSBbW1dlYkFyY2hp
dmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpXZWJBcmNoaXZl
UGJvYXJkVHlwZV1dOworICAgICAgICBbcGFzdGVib2FyZCBfd2ViX3dyaXRlUHJvbWlzZWRSVEZE
RnJvbUFyY2hpdmU6YXJjaGl2ZSBjb250YWluc0ltYWdlOltbcGFzdGVib2FyZCB0eXBlc10gY29u
dGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJkVHlwZV1dOworICAgICAgICBbYXJjaGl2ZSByZWxlYXNl
XTsKKyAgICB9IGVsc2UgaWYgKFt0eXBlIGlzRXF1YWw6TlNUSUZGUGJvYXJkVHlwZV0gJiYgW3Nl
bGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdKSB7CisgICAgICAgIGlmIChJbWFnZSogaW1h
Z2UgPSBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0tPmltYWdlKCkpCisgICAgICAg
ICAgICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilpbWFnZS0+Z2V0VElGRlJlcHJlc2Vu
dGF0aW9uKCkgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXTsKKyAgICAgICAgW3NlbGYgc2V0UHJv
bWlzZWREcmFnVElGRkRhdGFTb3VyY2U6MF07CisgICAgfQorfQorCistICh2b2lkKV9oYW5kbGVB
dXRvc2Nyb2xsRm9yTW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQgCit7IAorICAgIFtzZWxm
IGF1dG9zY3JvbGw6ZXZlbnRdOyAKKyAgICBbc2VsZiBfc3RhcnRBdXRvc2Nyb2xsVGltZXI6ZXZl
bnRdOyAKK30gCisKKy0gKFdlYlBsdWdpbkNvbnRyb2xsZXIgKilfcGx1Z2luQ29udHJvbGxlcgor
eworICAgIHJldHVybiBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlcjsKK30KKworLSAodm9pZClf
bGF5b3V0Rm9yUHJpbnRpbmcKK3sKKyAgICAvLyBTZXQgcHJpbnRpbmcgbW9kZSB0ZW1wb3Jhcmls
eSBzbyB3ZSBjYW4gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB2aWV3LiBUaGlzIHdpbGwgYWxsb3cK
KyAgICAvLyBBcHBLaXQncyBwYWdpbmF0aW9uIGNvZGUgdG8gdXNlIHRoZSBjb3JyZWN0IGhlaWdo
dCBmb3IgdGhlIHBhZ2UgY29udGVudC4gTGVhdmluZyBwcmludGluZworICAgIC8vIG1vZGUgb24g
aW5kZWZpbml0ZWx5IHdvdWxkIGludGVyZmVyZSB3aXRoIE1haWwncyBwcmludGluZyBtZWNoYW5p
c20gKGF0IGxlYXN0KSwgc28gd2UganVzdAorICAgIC8vIHR1cm4gaXQgb2ZmIGFnYWluIGFmdGVy
IGFkanVzdGluZyB0aGUgc2l6ZS4KKyAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vy
c2l2ZUFuZEFkanVzdFZpZXdTaXplXTsKKyAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2Rl
UmVjdXJzaXZlXTsKK30KKworLSAodm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5n
ICopcGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdlICopcmFuZ2VUb1JlcGxhY2Ug
YmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKiliZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6KE5TU3Ry
aW5nICoqKWFmdGVyU3RyaW5nCit7CisgICAgaWYgKCFwYXN0ZVN0cmluZyB8fCAhcmFuZ2VUb1Jl
cGxhY2UgfHwgIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSkgewor
ICAgICAgICBpZiAoYmVmb3JlU3RyaW5nKQorICAgICAgICAgICAgKmJlZm9yZVN0cmluZyA9IG5p
bDsKKyAgICAgICAgaWYgKGFmdGVyU3RyaW5nKQorICAgICAgICAgICAgKmFmdGVyU3RyaW5nID0g
bmlsOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFtbc2VsZiBfZnJhbWVdIF9z
bWFydEluc2VydEZvclN0cmluZzpwYXN0ZVN0cmluZyByZXBsYWNpbmdSYW5nZTpyYW5nZVRvUmVw
bGFjZSBiZWZvcmVTdHJpbmc6YmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOmFmdGVyU3RyaW5nXTsK
K30KKworLSAoQk9PTClfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWRdICYmIFtbcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6V2Vi
U21hcnRQYXN0ZVBib2FyZFR5cGVdOworfQorCistICh2b2lkKV9zdGFydEF1dG9zY3JvbGxUaW1l
cjogKE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKK3sKKyAgICBpZiAoX3ByaXZhdGUtPmF1dG9zY3Jv
bGxUaW1lciA9PSBuaWwpIHsKKyAgICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IFtb
TlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6QVVUT1NDUk9MTF9JTlRFUlZB
TAorICAgICAgICAgICAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hdXRvc2Nyb2xs
KSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdIHJldGFpbl07CisgICAgICAgIF9wcml2YXRlLT5h
dXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gW3RyaWdnZXJFdmVudCByZXRhaW5dOworICAgIH0KK30K
KworLy8gRklYTUU6IF9zZWxlY3Rpb25SZWN0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygc2Vs
ZWN0aW9uUmVjdCwgd2hpY2ggaXMgaW4gcHJvdG9jb2wgV2ViRG9jdW1lbnRTZWxlY3Rpb24uCisv
LyBXZSBjYW4ndCByZW1vdmUgdGhpcyB5ZXQgYmVjYXVzZSBpdCdzIHN0aWxsIGluIHVzZSBieSBN
YWlsLgorLSAoTlNSZWN0KV9zZWxlY3Rpb25SZWN0Cit7CisgICAgcmV0dXJuIFtzZWxmIHNlbGVj
dGlvblJlY3RdOworfQorCistICh2b2lkKV9zdG9wQXV0b3Njcm9sbFRpbWVyCit7CisgICAgTlNU
aW1lciAqdGltZXIgPSBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyOworICAgIF9wcml2YXRlLT5h
dXRvc2Nyb2xsVGltZXIgPSBuaWw7CisgICAgW19wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2
ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gbmls
OworICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKKyAgICBbdGltZXIgcmVsZWFzZV07Cit9CisKKy0g
KHZvaWQpX2F1dG9zY3JvbGwKK3sKKyAgICAvLyBHdWFyYW50ZWUgdGhhdCB0aGUgYXV0b3Njcm9s
bCB0aW1lciBpcyBpbnZhbGlkYXRlZCwgZXZlbiBpZiB3ZSBkb24ndCByZWNlaXZlCisgICAgLy8g
YSBtb3VzZSB1cCBldmVudC4KKyAgICBCT09MIGlzU3RpbGxEb3duID0gQ0dFdmVudFNvdXJjZUJ1
dHRvblN0YXRlKGtDR0V2ZW50U291cmNlU3RhdGVDb21iaW5lZFNlc3Npb25TdGF0ZSwga0NHTW91
c2VCdXR0b25MZWZ0KTsgICAKKyAgICBpZiAoIWlzU3RpbGxEb3duKXsKKyAgICAgICAgW3NlbGYg
X3N0b3BBdXRvc2Nyb2xsVGltZXJdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNF
dmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNl
RHJhZ2dlZAorICAgICAgICBsb2NhdGlvbjpbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9C
YXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQorICAgICAgICBtb2RpZmllckZsYWdzOltbTlNB
cHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQorICAgICAgICB0aW1lc3RhbXA6W05TRGF0
ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCisgICAgICAgIHdpbmRvd051bWJlcjpb
W3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJy
ZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHBy
ZXNzdXJlOjBdOworICAgIFtzZWxmIG1vdXNlRHJhZ2dlZDpmYWtlRXZlbnRdOworfQorCistIChC
T09MKV9jYW5FZGl0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0
KCk7Cit9CisKKy0gKEJPT0wpX2NhbkVkaXRSaWNobHkKK3sKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKK30KKworLSAoQk9PTClfY2FuQWx0ZXJDdXJy
ZW50U2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25Pckluc2VydGlv
blBvaW50XSAmJiBbc2VsZiBfaXNFZGl0YWJsZV07Cit9CisKKy0gKEJPT0wpX2hhc1NlbGVjdGlv
bgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJl
dHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworfQor
CistIChCT09MKV9oYXNTZWxlY3Rpb25Pckluc2VydGlvblBvaW50Cit7CisgICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0T3JSYW5nZSgpOworfQorCistIChCT09MKV9o
YXNJbnNlcnRpb25Qb2ludAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNDYXJldCgpOworfQorCistIChCT09MKV9pc0VkaXRhYmxlCit7CisgICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworfQorCistIChCT09MKV90
cmFuc3BhcmVudEJhY2tncm91bmQKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPnRyYW5zcGFyZW50
QmFja2dyb3VuZDsKK30KKworLSAodm9pZClfc2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5kOihCT09M
KWYKK3sKKyAgICBfcHJpdmF0ZS0+dHJhbnNwYXJlbnRCYWNrZ3JvdW5kID0gZjsKK30KKworLSAo
TlNJbWFnZSAqKV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdlCit7CisgICAgaWYgKFtzZWxmIF9oYXNT
ZWxlY3Rpb25dKSB7CisgICAgICAgIE5TSW1hZ2UgKmRyYWdJbWFnZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSktPnNlbGVjdGlvbkltYWdlKCk7CisgICAgICAgIFtkcmFnSW1hZ2UgX3dlYl9kaXNzb2x2
ZVRvRnJhY3Rpb246V2ViRHJhZ0ltYWdlQWxwaGFdOworICAgICAgICByZXR1cm4gZHJhZ0ltYWdl
OworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCistIChOU1JlY3QpX3NlbGVjdGlvbkRyYWdn
aW5nUmVjdAoreworICAgIC8vIE1haWwgY3VycmVudGx5IGNhbGxzIHRoaXMgbWV0aG9kLiBXZSBj
YW4gZWxpbWluYXRlIGl0IHdoZW4gTWFpbCBubyBsb25nZXIgY2FsbHMgaXQuCisgICAgcmV0dXJu
IFtzZWxmIHNlbGVjdGlvblJlY3RdOworfQorCistIChET01Ob2RlICopX2luc2VydE9yZGVyZWRM
aXN0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAg
cmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRPcmRlcmVk
TGlzdCgpLmdldCgpKSA6IG5pbDsKK30KKworLSAoRE9NTm9kZSAqKV9pbnNlcnRVbm9yZGVyZWRM
aXN0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAg
cmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRVbm9yZGVy
ZWRMaXN0KCkuZ2V0KCkpIDogbmlsOworfQorCistIChCT09MKV9jYW5JbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuSW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKK30KKworLSAoQk9PTClfY2FuRGVjcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkRlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsKCk7Cit9CisKKy0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmlu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkuZ2V0KCkpIDogbmlsOworfQorCistIChET01Ob2Rl
ICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZAoreworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQo
Y29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCku
Z2V0KCkpIDogbmlsOworfQorCistIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsVW5vcmRlcmVkCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpLmdldCgpKSA6IG5pbDsKK30KKworLSAo
dm9pZClfZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoY29yZUZyYW1lKQorICAgICAgICBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5kZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOworfQorCistICh2
b2lkKV9zZXRIaWdobGlnaHRlcjooaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPiloaWdobGlnaHRlciBv
ZlR5cGU6KE5TU3RyaW5nKil0eXBlCit7CisgICAgaWYgKCFfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJz
KQorICAgICAgICBfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5
IGFsbG9jXSBpbml0XTsKKyAgICBbX3ByaXZhdGUtPmhpZ2hsaWdodGVycyBzZXRPYmplY3Q6aGln
aGxpZ2h0ZXIgZm9yS2V5OnR5cGVdOworfQorCistICh2b2lkKV9yZW1vdmVIaWdobGlnaHRlck9m
VHlwZTooTlNTdHJpbmcqKXR5cGUKK3sKKyAgICBbX3ByaXZhdGUtPmhpZ2hsaWdodGVycyByZW1v
dmVPYmplY3RGb3JLZXk6dHlwZV07Cit9CisKKy0gKHZvaWQpX3VwZGF0ZUZvY3VzZWRBbmRBY3Rp
dmVTdGF0ZQoreworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVU
aW1lcl07CisKKyAgICBbW3NlbGYgX3dlYlZpZXddIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3Rh
dGVGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKK30KKworLSAodm9pZClfd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICBBU1NFUlQoW3Nl
bGYgX2hhc1NlbGVjdGlvbl0pOworICAgIE5TQXJyYXkgKnR5cGVzID0gW3NlbGYgcGFzdGVib2Fy
ZFR5cGVzRm9yU2VsZWN0aW9uXTsKKworICAgIC8vIERvbid0IHdyaXRlIFJURkQgdG8gdGhlIHBh
c3RlYm9hcmQgd2hlbiB0aGUgY29waWVkIGF0dHJpYnV0ZWQgc3RyaW5nIGhhcyBubyBhdHRhY2ht
ZW50cy4KKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBz
ZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOworICAgIE5TTXV0YWJsZUFycmF5ICptdXRhYmxlVHlw
ZXMgPSBuaWw7CisgICAgaWYgKCFbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRz
XSkgeworICAgICAgICBtdXRhYmxlVHlwZXMgPSBbdHlwZXMgbXV0YWJsZUNvcHldOworICAgICAg
ICBbbXV0YWJsZVR5cGVzIHJlbW92ZU9iamVjdDpOU1JURkRQYm9hcmRUeXBlXTsKKyAgICAgICAg
dHlwZXMgPSBtdXRhYmxlVHlwZXM7CisgICAgfQorCisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5
cGVzOnR5cGVzIG93bmVyOltzZWxmIF90b3BIVE1MVmlld11dOworICAgIFtzZWxmIF93cml0ZVNl
bGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQg
Y2FjaGVkQXR0cmlidXRlZFN0cmluZzphdHRyaWJ1dGVkU3RyaW5nXTsKKyAgICBbbXV0YWJsZVR5
cGVzIHJlbGVhc2VdOworfQorCistICh2b2lkKWNsb3NlCit7CisgICAgLy8gQ2hlY2sgZm9yIGEg
bmlsIF9wcml2YXRlIGhlcmUgaW4gY2FzZSB3ZSB3ZXJlIGNyZWF0ZWQgd2l0aCBpbml0V2l0aENv
ZGVyLiBJbiB0aGF0IGNhc2UsIHRoZSBXZWJWaWV3IGlzIGp1c3QgdGhyb3dpbmcKKyAgICAvLyBv
dXQgdGhlIGFyY2hpdmVkIFdlYkhUTUxWaWV3IGFuZCByZWNyZWF0aW5nIGEgbmV3IG9uZSBpZiBu
ZWVkZWQuIFNvIGNsb3NlIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBpbiB0aGF0IGNhc2Uu
CisgICAgaWYgKCFfcHJpdmF0ZSB8fCBfcHJpdmF0ZS0+Y2xvc2VkKQorICAgICAgICByZXR1cm47
CisKKyAgICBfcHJpdmF0ZS0+Y2xvc2VkID0gWUVTOworCisgICAgW3NlbGYgX2NhbmNlbFVwZGF0
ZU1vdXNlb3ZlclRpbWVyXTsKKyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlVGltZXJdOworICAgIFtzZWxmIF9jbGVhckxhc3RIaXRWaWV3SWZTZWxmXTsKKyAgICBb
c2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKKyAgICBbc2Vs
ZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKKyAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2Jz
ZXJ2ZXJzXTsKKyAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveUFsbFBsdWdp
bnNdOworICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291cmNlOm5pbF07
CisgICAgLy8gcmVtb3ZlIHRvb2x0aXBzIGJlZm9yZSBjbGVhcmluZyBfcHJpdmF0ZSBzbyByZW1v
dmVUcmFja2luZ1JlY3Q6IHdpbGwgd29yayBjb3JyZWN0bHkKKyAgICBbc2VsZiByZW1vdmVBbGxU
b29sVGlwc107CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKF9w
cml2YXRlLT5sYXllckhvc3RpbmdWaWV3KQorICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9zdG9w
cGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxmIF9mcmFtZV1dOworI2VuZGlm
CisKKyAgICBbX3ByaXZhdGUgY2xlYXJdOworCisgICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYg
X3dlYlZpZXddKTsKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcGFnZS0+ZHJhZ0NvbnRyb2xsZXIo
KS0+c2V0RHJhZ2dpbmdJbWFnZVVSTChLVVJMKCkpOworfQorCistIChCT09MKV9oYXNIVE1MRG9j
dW1lbnQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAg
ICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQgJiYgZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCk7Cit9CisKKy0gKERPTURvY3VtZW50RnJhZ21lbnQgKilf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJk
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlw
ZTooTlNTdHJpbmcgKilwYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczooTlNBcnJheSAq
KilzdWJyZXNvdXJjZXMKK3sKKyAgICBpZiAocGJvYXJkVHlwZSA9PSBXZWJBcmNoaXZlUGJvYXJk
VHlwZSkgeworICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tXZWJBcmNoaXZlIGFsbG9j
XSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5
cGVdXTsKKyAgICAgICAgaWYgKHN1YnJlc291cmNlcykKKyAgICAgICAgICAgICpzdWJyZXNvdXJj
ZXMgPSBbYXJjaGl2ZSBzdWJyZXNvdXJjZXNdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50
ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoQXJj
aGl2ZTphcmNoaXZlXTsKKyAgICAgICAgW2FyY2hpdmUgcmVsZWFzZV07CisgICAgICAgIHJldHVy
biBmcmFnbWVudDsKKyAgICB9CisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNGaWxlbmFtZXNQYm9h
cmRUeXBlKQorICAgICAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6
W3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdXTsK
KyAgICAgICAgCisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNIVE1MUGJvYXJkVHlwZSkgeworICAg
ICAgICBOU1N0cmluZyAqSFRNTFN0cmluZyA9IFtwYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6TlNI
VE1MUGJvYXJkVHlwZV07CisgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2UgTWljcm9z
b2Z0J3MgSFRNTCBwYXN0ZWJvYXJkIGRhdGEgd29yay4gU2VlIDM3Nzg3ODUuCisgICAgICAgIGlm
IChbSFRNTFN0cmluZyBoYXNQcmVmaXg6QCJWZXJzaW9uOiJdKSB7CisgICAgICAgICAgICBOU1Jh
bmdlIHJhbmdlID0gW0hUTUxTdHJpbmcgcmFuZ2VPZlN0cmluZzpAIjxodG1sIiBvcHRpb25zOk5T
Q2FzZUluc2Vuc2l0aXZlU2VhcmNoXTsKKyAgICAgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiAh
PSBOU05vdEZvdW5kKQorICAgICAgICAgICAgICAgIEhUTUxTdHJpbmcgPSBbSFRNTFN0cmluZyBz
dWJzdHJpbmdGcm9tSW5kZXg6cmFuZ2UubG9jYXRpb25dOworICAgICAgICB9CisgICAgICAgIGlm
IChbSFRNTFN0cmluZyBsZW5ndGhdID09IDApCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0
aE1hcmt1cFN0cmluZzpIVE1MU3RyaW5nIGJhc2VVUkxTdHJpbmc6bmlsXTsKKyAgICB9CisKKyAg
ICAvLyBUaGUgX2hhc0hUTUxEb2N1bWVudCBjbGF1c2UgaGVyZSBpcyBhIHdvcmthcm91bmQgZm9y
IGEgYnVnIGluIE5TQXR0cmlidXRlZFN0cmluZzogUmFkYXIgNTA1MjM2OS4KKyAgICAvLyBJZiB3
ZSBjYWxsIF9kb2N1bWVudEZyb21SYW5nZSBvbiBhbiBYTUwgZG9jdW1lbnQgd2UnbGwgZ2V0ICJz
ZXRJbm5lckhUTUw6IG1ldGhvZCBub3QgZm91bmQiLgorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBvbmNlIGJ1ZyA1MDUyMzY5IGlzIGZpeGVkLgorICAgIGlmIChbc2VsZiBfaGFzSFRNTERvY3Vt
ZW50XSAmJiBwYm9hcmRUeXBlID09IE5TUlRGUGJvYXJkVHlwZSB8fCBwYm9hcmRUeXBlID09IE5T
UlRGRFBib2FyZFR5cGUpIHsKKyAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBu
aWw7CisgICAgICAgIGlmIChwYm9hcmRUeXBlID09IE5TUlRGRFBib2FyZFR5cGUpCisgICAgICAg
ICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltw
YXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRl
czpOVUxMXTsKKyAgICAgICAgaWYgKHN0cmluZyA9PSBuaWwpCisgICAgICAgICAgICBzdHJpbmcg
PSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0
YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07CisgICAg
ICAgIGlmIChzdHJpbmcgPT0gbmlsKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAg
ICAgIAorICAgICAgICBOU0RpY3Rpb25hcnkgKmRvY3VtZW50QXR0cmlidXRlcyA9IFtbTlNEaWN0
aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICAgICAgW1tzZWxm
IGNsYXNzXSBfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uXSwg
TlNFeGNsdWRlZEVsZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGUsCisgICAgICAgICAgICBzZWxmLCBA
IldlYlJlc291cmNlSGFuZGxlciIsIG5pbF07CisgICAgICAgIE5TQXJyYXkgKnM7CisgICAgICAg
IAorICAgICAgICBCT09MIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9IFtbc2VsZiBfd2ViVmlld10g
ZGVmZXJzQ2FsbGJhY2tzXTsKKyAgICAgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCisg
ICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0NhbGxiYWNrczpZRVNdOworICAg
ICAgICAgICAgCisgICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3N0cmlu
ZyBfZG9jdW1lbnRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b2N1bWVudDpbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEF0dHJpYnV0ZXM6ZG9jdW1lbnRB
dHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdWJyZXNvdXJjZXM6JnNdOworICAgICAgICBpZiAoc3VicmVzb3VyY2VzKQorICAg
ICAgICAgICAgKnN1YnJlc291cmNlcyA9IHM7CisgICAgICAgIAorICAgICAgICBOU0VudW1lcmF0
b3IgKmUgPSBbcyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICAgICAgV2ViUmVzb3VyY2UgKnI7Cisg
ICAgICAgIHdoaWxlICgociA9IFtlIG5leHRPYmplY3RdKSkKKyAgICAgICAgICAgIFtbc2VsZiBf
ZGF0YVNvdXJjZV0gYWRkU3VicmVzb3VyY2U6cl07CisgICAgICAgIAorICAgICAgICBpZiAoIXdh
c0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAgICAgIFtbc2VsZiBfd2ViVmlld10gc2V0RGVm
ZXJzQ2FsbGJhY2tzOk5PXTsKKyAgICAgICAgCisgICAgICAgIFtkb2N1bWVudEF0dHJpYnV0ZXMg
cmVsZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFn
bWVudDsKKyAgICB9CisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNUSUZGUGJvYXJkVHlwZSkgewor
ICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0
V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS50aWZmIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAi
aW1hZ2UvdGlmZiIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgICAgIERPTURv
Y3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRG
cmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKKyAgICAgICAgW3Jlc291cmNlIHJl
bGVhc2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlmIChwYm9hcmRU
eXBlID09IE5TUERGUGJvYXJkVHlwZSkgeworICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2Ug
PSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5
cGU6TlNQREZQYm9hcmRUeXBlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChA
ImFwcGxpY2F0aW9uLnBkZiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFt
ZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdt
ZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291
cmNlOnJlc291cmNlXTsKKyAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOworICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CisgICAgfQorI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1BJQ1RQ
Ym9hcmRUeXBlKSB7CisgICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3Vy
Y2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BJQ1RQYm9h
cmRUeXBlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBpY3Qi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTUlNRVR5cGU6QCJpbWFnZS9waWN0IiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsK
KyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3Vy
Y2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOworICAgICAg
ICBbcmVzb3VyY2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9Cisj
ZW5kaWYKKyAgICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBwb3J0IHNldHRpbmcgYW5kIHJl
dHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1dCB3ZSBkb24ndCBiZWxpZXZl
CisgICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2VyIHB1dCB0eXBlcyBmb3Igd2hp
Y2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhlIHBhc3RlYm9hcmQuCisgICAg
aWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVQTkddKSB7
CisgICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGlu
aXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQTkdd
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucG5nIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVU
eXBlOkAiaW1hZ2UvcG5nIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKKyAgICAgICAg
RE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1
bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOworICAgICAgICBbcmVzb3Vy
Y2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisgICAgaWYgKHBi
b2FyZFR5cGUgPT0gTlNVUkxQYm9hcmRUeXBlKSB7CisgICAgICAgIE5TVVJMICpVUkwgPSBbTlNV
UkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisgICAgICAgIERPTURvY3VtZW50KiBk
b2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsKKyAgICAgICAgQVNTRVJUKGRv
Y3VtZW50KTsKKyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7
CisgICAgICAgIERPTUhUTUxBbmNob3JFbGVtZW50ICphbmNob3IgPSAoRE9NSFRNTEFuY2hvckVs
ZW1lbnQgKilbZG9jdW1lbnQgY3JlYXRlRWxlbWVudDpAImEiXTsKKyAgICAgICAgTlNTdHJpbmcg
KlVSTFN0cmluZyA9IFtVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ107IC8vIE9yaWdpbmFs
IGRhdGEgaXMgQVNDSUktb25seSwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcmVjb21wb3NlLgor
ICAgICAgICBpZiAoW1VSTFN0cmluZyBsZW5ndGhdID09IDApCisgICAgICAgICAgICByZXR1cm4g
bmlsOworICAgICAgICBOU1N0cmluZyAqVVJMVGl0bGVTdHJpbmcgPSBbW3Bhc3RlYm9hcmQgc3Ry
aW5nRm9yVHlwZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ107CisgICAgICAgIERPTVRleHQgKnRleHQgPSBbZG9jdW1lbnQgY3JlYXRl
VGV4dE5vZGU6VVJMVGl0bGVTdHJpbmddOworICAgICAgICBbYW5jaG9yIHNldEhyZWY6VVJMU3Ry
aW5nXTsKKyAgICAgICAgW2FuY2hvciBhcHBlbmRDaGlsZDp0ZXh0XTsKKyAgICAgICAgRE9NRG9j
dW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbZG9jdW1lbnQgY3JlYXRlRG9jdW1lbnRGcmFnbWVu
dF07CisgICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNob3JdOworICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlmIChwYm9hcmRUeXBlID09IE5TU3RyaW5nUGJvYXJk
VHlwZSkKKyAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvcmUoY29u
dGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJl
Y29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLmdldCgpKTsKKyAgICByZXR1cm4g
bmlsOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIAorLSAodm9pZClfcGF1
c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAoreyAKKyAgICBOU0FycmF5ICpzdWJ2
aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsgCisgICAgdW5zaWduZWQgaW50IHN1YnZpZXdDb3VudCA9
IFtzdWJ2aWV3cyBjb3VudF07IAorICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3SW5kZXg7IAorICAg
IAorICAgIGZvciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmlld0luZGV4IDwgc3Vidmlld0NvdW50
OyBzdWJ2aWV3SW5kZXgrKykgeyAKKyAgICAgICAgTlNWaWV3ICpzdWJ2aWV3ID0gW3N1YnZpZXdz
IG9iamVjdEF0SW5kZXg6c3Vidmlld0luZGV4XTsgCisgICAgICAgIGlmIChbc3VidmlldyBpc0tp
bmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pIAorICAgICAgICAg
ICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3VidmlldyBzdG9wVGltZXJzXTsKKyAg
ICB9IAorfSAKKyNlbmRpZiAKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKKy0g
KHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMgCit7IAorICAgIE5T
QXJyYXkgKnN1YnZpZXdzID0gW3NlbGYgc3Vidmlld3NdOyAKKyAgICB1bnNpZ25lZCBpbnQgc3Vi
dmlld0NvdW50ID0gW3N1YnZpZXdzIGNvdW50XTsgCisgICAgdW5zaWduZWQgaW50IHN1YnZpZXdJ
bmRleDsgCisgICAgCisgICAgZm9yIChzdWJ2aWV3SW5kZXggPSAwOyBzdWJ2aWV3SW5kZXggPCBz
dWJ2aWV3Q291bnQ7IHN1YnZpZXdJbmRleCsrKSB7IAorICAgICAgICBOU1ZpZXcgKnN1YnZpZXcg
PSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpzdWJ2aWV3SW5kZXhdOyAKKyAgICAgICAgaWYgKFtz
dWJ2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkg
CisgICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgKilzdWJ2aWV3IHJlc3Rh
cnRUaW1lcnNdOyAKKyAgICB9IAorfSAKKyNlbmRpZiAKKworLSAoQk9PTClfaXNVc2luZ0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgcmV0dXJuIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ICE9IG5pbDsKKyNlbHNlCisgICAg
cmV0dXJuIE5POworI2VuZGlmCit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TVmlldyAo
V2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCisKKy0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50V2Vi
SFRNTFZpZXdzVG9BcnJheTooTlNNdXRhYmxlQXJyYXkgKilhcnJheQoreworICAgIHVuc2lnbmVk
IGNvdW50ID0gW19zdWJ2aWV3cyBjb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNWaWV3ICpjaGlsZCA9IFtfc3Vidmlld3Mgb2JqZWN0
QXRJbmRleDppXTsKKyAgICAgICAgaWYgKFtjaGlsZCBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmll
dyBjbGFzc11dKQorICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDpjaGlsZF07CisgICAgICAg
IFtjaGlsZCBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmFycmF5XTsKKyAg
ICB9Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TTXV0YWJsZURpY3Rpb25hcnkgKFdl
YkhUTUxWaWV3RmlsZUludGVybmFsKQorCistICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6
KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleQoreworICAgIGlmIChvYmplY3QgPT0gbmlsKSB7Cisg
ICAgICAgIFtzZWxmIHJlbW92ZU9iamVjdEZvcktleTprZXldOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFtzZWxmIHNldE9iamVjdDpvYmplY3QgZm9yS2V5OmtleV07CisgICAgfQorfQorCitAZW5k
CisKK0BpbnRlcmZhY2UgTlNTdHJpbmcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorLSAoQk9P
TCltYXRjaGVzRXh0ZW5zaW9uRXF1aXZhbGVudDooTlNTdHJpbmcgKilleHRlbnNpb247CitAZW5k
CisKK0BpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCisK
Ky0gKEJPT0wpbWF0Y2hlc0V4dGVuc2lvbkVxdWl2YWxlbnQ6KE5TU3RyaW5nICopZXh0ZW5zaW9u
Cit7CisgICAgaWYgKFtzZWxmIGhhc1N1ZmZpeDpleHRlbnNpb25dKQorICAgICAgICByZXR1cm4g
WUVTOworICAgIGVsc2UgaWYgKFtleHRlbnNpb24gaXNFcXVhbFRvU3RyaW5nOkAianBlZyJdICYm
IFtzZWxmIGhhc1N1ZmZpeDpAImpwZyJdKQorICAgICAgICByZXR1cm4gWUVTOworICAgIHJldHVy
biBOTzsKK30KKworQGVuZAorCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKworLy8gVGhlIGZv
bGxvd2luZyBpcyBhIHdvcmthcm91bmQgZm9yCisvLyA8cmRhcjovL3Byb2JsZW0vMzQyOTYzMT4g
d2luZG93IHN0b3BzIGdldHRpbmcgbW91c2UgbW92ZWQgZXZlbnRzIGFmdGVyIGZpcnN0IHRvb2x0
aXAgYXBwZWFycworLy8gVGhlIHRyaWNrIGlzIHRvIGRlZmluZSBhIGNhdGVnb3J5IG9uIE5TVG9v
bFRpcFBhbmVsIHRoYXQgaW1wbGVtZW50cyBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czouCisv
LyBTaW5jZSB0aGUgY2F0ZWdvcnkgd2lsbCBiZSBzZWFyY2hlZCBiZWZvcmUgdGhlIHJlYWwgY2xh
c3MsIHdlJ2xsIHByZXZlbnQgdGhlIGZsYWcgZnJvbSBiZWluZworLy8gc2V0IG9uIHRoZSB0b29s
IHRpcCBwYW5lbC4KKworQGludGVyZmFjZSBOU1Rvb2xUaXBQYW5lbCA6IE5TUGFuZWwKK0BlbmQK
KworQGludGVyZmFjZSBOU1Rvb2xUaXBQYW5lbCAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1Rvb2xUaXBQYW5lbCAoV2ViSFRNTFZpZXdGaWxlSW50
ZXJuYWwpCisKKy0gKHZvaWQpc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6KEJPT0wpZmxhZwor
eworICAgIC8vIERvIG5vdGhpbmcsIHByZXZlbnRpbmcgdGhlIHRvb2wgdGlwIHBhbmVsIGZyb20g
dHJ5aW5nIHRvIGFjY2VwdCBtb3VzZS1tb3ZlZCBldmVudHMuCit9CisKK0BlbmQKKworI2VuZGlm
CisKK0BpbnRlcmZhY2UgTlNBcnJheSAoV2ViSFRNTFZpZXcpCistICh2b2lkKV93ZWJfbWFrZVBs
dWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVjdDooaWQpb2Jq
ZWN0OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcKKworKyAodm9pZClpbml0
aWFsaXplCit7CisgICAgW05TQXBwIHJlZ2lzdGVyU2VydmljZXNNZW51U2VuZFR5cGVzOltbc2Vs
ZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVyblR5cGVzOltbc2VsZiBjbGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJk
VHlwZXNdXTsKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyNpZm5kZWYgQlVJTERJ
TkdfT05fVElHRVIKKyAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25NYWluVGhyZWFkKHNlbGYpOwor
I2VuZGlmCit9CisKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZQoreworICAgIHNl
bGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV07CisgICAgaWYgKCFzZWxmKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIAorICAgIFtzZWxmIHNldEZvY3VzUmluZ1R5cGU6TlNGb2N1c1Jp
bmdUeXBlTm9uZV07CisgICAgCisgICAgLy8gTWFrZSBhbGwgZHJhd2luZyBnbyB0aHJvdWdoIHVz
IGluc3RlYWQgb2Ygc3Vidmlld3MuCisgICAgW3NlbGYgX3NldERyYXdzT3duRGVzY2VuZGFudHM6
WUVTXTsKKyAgICAKKyAgICBfcHJpdmF0ZSA9IFtbV2ViSFRNTFZpZXdQcml2YXRlIGFsbG9jXSBp
bml0XTsKKworICAgIF9wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyID0gW1tXZWJQbHVnaW5Db250
cm9sbGVyIGFsbG9jXSBpbml0V2l0aERvY3VtZW50VmlldzpzZWxmXTsKKyAgICAKKyAgICByZXR1
cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2No
ZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXZWJIVE1MVmlldyBjbGFzc10sIHNlbGYpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBjYW4ndCBhc3NlcnQgdGhhdCBjbG9zZSBoYXMg
YWxyZWFkeSBiZWVuIGNhbGxlZCBiZWNhdXNlCisgICAgLy8gdGhpcyB2aWV3IGNhbiBiZSByZW1v
dmVkIGZyb20gaXQncyBzdXBlcnZpZXcsIGV2ZW4gdGhvdWdoCisgICAgLy8gaXQgY291bGQgYmUg
bmVlZGVkIGxhdGVyLCBzbyBjbG9zZSBpZiBuZWVkZWQuCisgICAgW3NlbGYgY2xvc2VdOworICAg
IFtfcHJpdmF0ZSByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZSA9IG5pbDsKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBBU1NFUlRfTUFJTl9USFJFQUQo
KTsKKyAgICAvLyBXZSBjYW4ndCBhc3NlcnQgdGhhdCBjbG9zZSBoYXMgYWxyZWFkeSBiZWVuIGNh
bGxlZCBiZWNhdXNlCisgICAgLy8gdGhpcyB2aWV3IGNhbiBiZSByZW1vdmVkIGZyb20gaXQncyBz
dXBlcnZpZXcsIGV2ZW4gdGhvdWdoCisgICAgLy8gaXQgY291bGQgYmUgbmVlZGVkIGxhdGVyLCBz
byBjbG9zZSBpZiBuZWVkZWQuCisgICAgW3NlbGYgY2xvc2VdOworICAgIFtzdXBlciBmaW5hbGl6
ZV07Cit9CisKKy8vIFJldHVybnMgWUVTIGlmIHRoZSBkZWxlZ2F0ZSByZXR1cm5zIFlFUyAoc28g
d2Ugc2hvdWxkIGRvIG5vIG1vcmUgd29yaykuCistIChCT09MKWNhbGxEZWxlZ2F0ZURvQ29tbWFu
ZEJ5U2VsZWN0b3JJZk5lZWRlZDooU0VMKXNlbGVjdG9yCit7CisgICAgQk9PTCBjYWxsZXJBbHJl
YWR5Q2FsbGVkRGVsZWdhdGUgPSBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVj
dG9yID09IHNlbGVjdG9yOworICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2Vs
ZWN0b3IgPSAwOworICAgIGlmIChjYWxsZXJBbHJlYWR5Q2FsbGVkRGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBOTzsKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOworICAg
IHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJW
aWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOworfQorCitzdGF0aWMgU3RyaW5nIGNv
bW1hbmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQoreworICAgIC8vIENoYW5nZSBhIGZl
dyBjb21tYW5kIG5hbWVzIGludG8gb25lcyBzdXBwb3J0ZWQgYnkgV2ViQ29yZTo6RWRpdG9yLgor
ICAgIC8vIElmIHRoaXMgbGlzdCBnZXRzIHRvbyBsb25nIHdlIG1pZ2h0IGRlY2lkZSB3ZSBuZWVk
IHRvIHVzZSBhIGhhc2ggdGFibGUuCisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3I6KSB8fCBzZWxlY3RvciA9PSBAc2VsZWN0b3IoaW5zZXJ0TmV3
bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6KSkKKyAgICAgICAgcmV0dXJuICJJbnNlcnROZXdsaW5l
IjsKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydFRhYklnbm9yaW5nRmllbGRF
ZGl0b3I6KSkKKyAgICAgICAgcmV0dXJuICJJbnNlcnRUYWIiOworICAgIGlmIChzZWxlY3RvciA9
PSBAc2VsZWN0b3IocGFnZURvd246KSkKKyAgICAgICAgcmV0dXJuICJNb3ZlUGFnZURvd24iOwor
ICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb246
KSkKKyAgICAgICAgcmV0dXJuICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iOworICAg
IGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZVVwOikpCisgICAgICAgIHJldHVybiAiTW92
ZVBhZ2VVcCI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihwYWdlVXBBbmRNb2RpZnlT
ZWxlY3Rpb246KSkKKyAgICAgICAgcmV0dXJuICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9u
IjsKKworICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCisgICAgY29uc3QgY2hhciog
c2VsZWN0b3JOYW1lID0gc2VsX2dldE5hbWUoc2VsZWN0b3IpOworICAgIHNpemVfdCBzZWxlY3Rv
ck5hbWVMZW5ndGggPSBzdHJsZW4oc2VsZWN0b3JOYW1lKTsKKyAgICBpZiAoc2VsZWN0b3JOYW1l
TGVuZ3RoIDwgMiB8fCBzZWxlY3Rvck5hbWVbc2VsZWN0b3JOYW1lTGVuZ3RoIC0gMV0gIT0gJzon
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIFN0cmluZyhzZWxlY3Rvck5h
bWUsIHNlbGVjdG9yTmFtZUxlbmd0aCAtIDEpOworfQorCistIChFZGl0b3I6OkNvbW1hbmQpY29y
ZUNvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0
dXJuIEVkaXRvcjo6Q29tbWFuZCgpOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5j
b21tYW5kKGNvbW1hbmROYW1lRm9yU2VsZWN0b3Ioc2VsZWN0b3IpKTsKK30KKworLSAoRWRpdG9y
OjpDb21tYW5kKWNvcmVDb21tYW5kQnlOYW1lOihjb25zdCBjaGFyKiluYW1lCit7CisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUp
CisgICAgICAgIHJldHVybiBFZGl0b3I6OkNvbW1hbmQoKTsKKyAgICByZXR1cm4gY29yZUZyYW1l
LT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKTsKK30KKworLSAodm9pZClleGVjdXRlQ29yZUNvbW1h
bmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoW3NlbGYgY2FsbERlbGVnYXRl
RG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOnNlbGVjdG9yXSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl0uZXhlY3V0ZSgpOworfQor
CistICh2b2lkKWV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTooY29uc3QgY2hhciopbmFtZQorewor
ICAgIFtzZWxmIGNvcmVDb21tYW5kQnlOYW1lOm5hbWVdLmV4ZWN1dGUoKTsKK30KKworLy8gVGhl
c2UgY29tbWFuZHMgYXJlIGZvcndhcmRlZCB0byB0aGUgRWRpdG9yIG9iamVjdCBpbiBXZWJDb3Jl
LgorLy8gSWRlYWxseSB3ZSdkIGRvIHRoaXMgZm9yIGFsbCBlZGl0aW5nIGNvbW1hbmRzOyBtb3Jl
IG9mIHRoZSBjb2RlCisvLyBzaG91bGQgYmUgbW92ZWQgZnJvbSBoZXJlIHRvIHRoZXJlLCBhbmQg
bW9yZSBjb21tYW5kcyBzaG91bGQgYmUKKy8vIGFkZGVkIHRvIHRoaXMgbGlzdC4KKworLy8gRklY
TUU6IE1heWJlIHdlIHNob3VsZCBzZXQgdGhpbmdzIHVwIHNvIHRoYXQgYWxsIHRoZXNlIHNoYXJl
IGEgc2luZ2xlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbi4KKy8vIFRoZSBmdW5jdGlv
bnMgYXJlIGlkZW50aWNhbC4KKworI2RlZmluZSBXRUJDT1JFX0NPTU1BTkQoY29tbWFuZCkgLSAo
dm9pZCljb21tYW5kOihpZClzZW5kZXIgeyBbc2VsZiBleGVjdXRlQ29yZUNvbW1hbmRCeVNlbGVj
dG9yOl9jbWRdOyB9CisKK1dFQkNPUkVfQ09NTUFORChhbGlnbkNlbnRlcikKK1dFQkNPUkVfQ09N
TUFORChhbGlnbkp1c3RpZmllZCkKK1dFQkNPUkVfQ09NTUFORChhbGlnbkxlZnQpCitXRUJDT1JF
X0NPTU1BTkQoYWxpZ25SaWdodCkKK1dFQkNPUkVfQ09NTUFORChjb3B5KQorV0VCQ09SRV9DT01N
QU5EKGN1dCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGUpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRl
QmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlQmFja3dhcmRCeURlY29tcG9zaW5nUHJl
dmlvdXNDaGFyYWN0ZXIpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlRm9yd2FyZCkKK1dFQkNPUkVf
Q09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mTGluZSkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVU
b0JlZ2lubmluZ09mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvRW5kT2ZMaW5l
KQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgpCitXRUJDT1JFX0NPTU1B
TkQoZGVsZXRlVG9NYXJrKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVdvcmRCYWNrd2FyZCkKK1dF
QkNPUkVfQ09NTUFORChkZWxldGVXb3JkRm9yd2FyZCkKK1dFQkNPUkVfQ09NTUFORChpZ25vcmVT
cGVsbGluZykKK1dFQkNPUkVfQ09NTUFORChpbmRlbnQpCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0
QmFja3RhYikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRMaW5lQnJlYWspCitXRUJDT1JFX0NPTU1B
TkQoaW5zZXJ0TmV3bGluZSkKK1dFQkNPUkVfQ09NTUFORChpbnNlcnROZXdsaW5lSWdub3JpbmdG
aWVsZEVkaXRvcikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpCitX
RUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiKQorV0VCQ09SRV9DT01NQU5EKGluc2VydFRhYklnbm9y
aW5nRmllbGRFZGl0b3IpCitXRUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9u
TGVmdFRvUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0
dXJhbCkKK1dFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVm
dCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQobW92ZUJh
Y2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVEb3duKQorV0VC
Q09SRV9DT01NQU5EKG1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5E
KG1vdmVGb3J3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVMZWZ0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVMZWZ0
QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVQYXJhZ3JhcGhCYWNrd2Fy
ZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlUGFyYWdyYXBoRm9yd2Fy
ZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlUmlnaHQpCitXRUJDT1JF
X0NPTU1BTkQobW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0JlZ2lubmluZ09mRG9jdW1lbnQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5n
T2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdp
bm5pbmdPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9k
aWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
KQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2UpCitXRUJD
T1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbikK
K1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkRvY3VtZW50KQorV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92
ZVRvRW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNl
bGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBhcmFncmFwaCkKK1dFQkNPUkVf
Q09NTUFORChtb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVf
Q09NTUFORChtb3ZlVG9FbmRPZlNlbnRlbmNlKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9m
U2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvTGVmdEVu
ZE9mTGluZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5kT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5lKQorV0VCQ09SRV9D
T01NQU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9D
T01NQU5EKG1vdmVVcCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24p
CitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRCYWNrd2FyZCkKK1dFQkNPUkVfQ09NTUFORChtb3Zl
V29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3Jk
Rm9yd2FyZCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rp
b24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVX
b3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZFJpZ2h0
KQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJD
T1JFX0NPTU1BTkQob3V0ZGVudCkKK1dFQkNPUkVfQ09NTUFORChwYWdlRG93bikKK1dFQkNPUkVf
Q09NTUFORChwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChwYWdl
VXApCitXRUJDT1JFX0NPTU1BTkQocGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9D
T01NQU5EKHNlbGVjdEFsbCkKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RMaW5lKQorV0VCQ09SRV9D
T01NQU5EKHNlbGVjdFBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RTZW50ZW5jZSkK
K1dFQkNPUkVfQ09NTUFORChzZWxlY3RUb01hcmspCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0V29y
ZCkKK1dFQkNPUkVfQ09NTUFORChzZXRNYXJrKQorV0VCQ09SRV9DT01NQU5EKHN1YnNjcmlwdCkK
K1dFQkNPUkVfQ09NTUFORChzdXBlcnNjcmlwdCkKK1dFQkNPUkVfQ09NTUFORChzd2FwV2l0aE1h
cmspCitXRUJDT1JFX0NPTU1BTkQodHJhbnNwb3NlKQorV0VCQ09SRV9DT01NQU5EKHVuZGVybGlu
ZSkKK1dFQkNPUkVfQ09NTUFORCh1bnNjcmlwdCkKK1dFQkNPUkVfQ09NTUFORCh5YW5rKQorV0VC
Q09SRV9DT01NQU5EKHlhbmtBbmRTZWxlY3QpCisKKyN1bmRlZiBXRUJDT1JFX0NPTU1BTkQKKwor
I2RlZmluZSBDT01NQU5EX1BST0xPR1VFIGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRC
eVNlbGVjdG9ySWZOZWVkZWQ6X2NtZF0pIHJldHVybjsKKworLSAoSUJBY3Rpb24pdGFrZUZpbmRT
dHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisK
KyAgICBpZiAoIVtzZWxmIF9oYXNTZWxlY3Rpb25dKSB7CisgICAgICAgIE5TQmVlcCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgW05TUGFzdGVib2FyZCBfd2ViX3NldEZpbmRQYXN0
ZWJvYXJkU3RyaW5nOltzZWxmIHNlbGVjdGVkU3RyaW5nXSB3aXRoT3duZXI6c2VsZl07Cit9CisK
Ky0gKEJPT0wpd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQgdHlwZXM6KE5TQXJyYXkgKil0eXBlcworeworICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVU
eXBlczp0eXBlcyBvd25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsKKyAgICBbc2VsZiB3cml0ZVNl
bGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmRd
OworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJv
YXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVy
biBOTzsKKyAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSkKKyAgICAgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZCBh
bGxvd1BsYWluVGV4dDpZRVNdOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgX3Bhc3RlQXNQbGFp
blRleHRXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICByZXR1cm4gWUVTOworfQorCist
IChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0cmluZyAqKXNlbmRUeXBlIHJldHVy
blR5cGU6KE5TU3RyaW5nICopcmV0dXJuVHlwZQoreworICAgIEJPT0wgaXNTZW5kVHlwZU9LID0g
IXNlbmRUeXBlIHx8IChbW3NlbGYgcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXSBjb250YWlu
c09iamVjdDpzZW5kVHlwZV0gJiYgW3NlbGYgX2hhc1NlbGVjdGlvbl0pOworICAgIEJPT0wgaXNS
ZXR1cm5UeXBlT0sgPSAhcmV0dXJuVHlwZSB8fCAoW1tbc2VsZiBjbGFzc10gX2luc2VydGFibGVQ
YXN0ZWJvYXJkVHlwZXNdIGNvbnRhaW5zT2JqZWN0OnJldHVyblR5cGVdICYmIFtzZWxmIF9pc0Vk
aXRhYmxlXSk7CisgICAgaWYgKGlzU2VuZFR5cGVPSyAmJiBpc1JldHVyblR5cGVPSykKKyAgICAg
ICAgcmV0dXJuIHNlbGY7CisgICAgcmV0dXJuIFtbc2VsZiBuZXh0UmVzcG9uZGVyXSB2YWxpZFJl
cXVlc3RvckZvclNlbmRUeXBlOnNlbmRUeXBlIHJldHVyblR5cGU6cmV0dXJuVHlwZV07Cit9CisK
Ky8vIGp1bXBUb1NlbGVjdGlvbiBpcyB0aGUgb2xkIG5hbWUgZm9yIHdoYXQgQXBwS2l0IG5vdyBj
YWxscyBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBTYWZhcmkKKy8vIHdhcyB1c2luZyB0
aGUgb2xkIGp1bXBUb1NlbGVjdGlvbiBzZWxlY3RvciBpbiBpdHMgbWVudS4gTmV3ZXIgdmVyc2lv
bnMgb2YgU2FmYXJpIHdpbGwgdXNlIHRoZQorLy8gc2VsZWN0b3IgY2VudGVyU2VsZWN0aW9uSW5W
aXNpYmxlQXJlYS4gV2UnbGwgbGVhdmUgdGhlIG9sZCBzZWxlY3RvciBpbiBwbGFjZSBmb3IgdHdv
IHJlYXNvbnM6CisvLyAoMSkgQ29tcGF0aWJpbGl0eSBiZXR3ZWVuIG9sZGVyIFNhZmFyaSBhbmQg
bmV3ZXIgV2ViS2l0OyAoMikgb3RoZXIgV2ViS2l0LWJhc2VkIGFwcGxpY2F0aW9ucworLy8gbWln
aHQgYmUgdXNpbmcgdGhlIHNlbGVjdG9yLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBicmVhayB0aGVt
LgorLSAodm9pZClqdW1wVG9TZWxlY3Rpb246KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJP
TE9HVUUKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkK
KyAgICAgICAgY29yZUZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGln
bkNlbnRlckFsd2F5cyk7Cit9CisKKy0gKE5TQ2VsbFN0YXRlVmFsdWUpc2VsZWN0aW9uSGFzU3R5
bGU6KENTU1N0eWxlRGVjbGFyYXRpb24qKXN0eWxlCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVy
biBOU09mZlN0YXRlOworICAgIHJldHVybiBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
aW9uSGFzU3R5bGUoc3R5bGUpKTsKK30KKworLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJ
dGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRl
bQoreworICAgIFNFTCBhY3Rpb24gPSBbaXRlbSBhY3Rpb25dOworICAgIFJlZlB0cjxGcmFtZT4g
ZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworCisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIE5POworICAgIAorICAgIGlmIChEb2N1bWVudCogZG9jID0gZnJhbWUtPmRvY3VtZW50
KCkpIHsKKyAgICAgICAgaWYgKGRvYy0+aXNQbHVnaW5Eb2N1bWVudCgpKQorICAgICAgICAgICAg
cmV0dXJuIE5POworICAgICAgICBpZiAoZG9jLT5pc0ltYWdlRG9jdW1lbnQoKSkgeyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY29weTopKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmlzQ29tcGxldGUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBOTzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKGNoYW5nZVNwZWxsaW5nOikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IoX2NoYW5nZVNwZWxsaW5nRnJvbU1lbnU6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBz
ZWxlY3RvcihjaGVja1NwZWxsaW5nOikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IoY29tcGxldGU6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZUZv
bnQ6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKworICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKHNob3dHdWVzc1BhbmVsOikpIHsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKKyAgICAgICAgLy8gTWF0Y2ggT1MgWCBBcHBLaXQgYmVoYXZpb3IgZm9yIHBvc3QtVGlnZXIu
IERvbid0IGNoYW5nZSBUaWdlciBiZWhhdmlvci4KKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0
ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZD
bGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7CisgICAgICAgICAgICBCT09MIHBhbmVsU2hvd2lu
ZyA9IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxpbmdQYW5lbF0g
aXNWaXNpYmxlXTsKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRUaXRsZTpwYW5lbFNob3dpbmcK
KyAgICAgICAgICAgICAgICA/IFVJX1NUUklORygiSGlkZSBTcGVsbGluZyBhbmQgR3JhbW1hciIs
ICJtZW51IGl0ZW0gdGl0bGUiKQorICAgICAgICAgICAgICAgIDogVUlfU1RSSU5HKCJTaG93IFNw
ZWxsaW5nIGFuZCBHcmFtbWFyIiwgIm1lbnUgaXRlbSB0aXRsZSIpXTsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIAorICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uOikKKyAgICAg
ICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVm
dFRvUmlnaHQ6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDopKSB7CisgICAgICAgIE5TV3JpdGluZ0RpcmVjdGlv
biB3cml0aW5nRGlyZWN0aW9uOworCisgICAgICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNo
YW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uOikpIHsKKyAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rp
b24gPSBzdGF0aWNfY2FzdDxOU1dyaXRpbmdEaXJlY3Rpb24+KFtpdGVtIHRhZ10pOworICAgICAg
ICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09
IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDopKQorICAgICAg
ICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB3cml0aW5nRGlyZWN0aW9uID0gTlNXcml0aW5nRGly
ZWN0aW9uUmlnaHRUb0xlZnQ7CisKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNN
ZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNN
ZW51SXRlbSBjbGFzc11dKSB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KCJk
aXJlY3Rpb24iLCB3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0ID8gIkxUUiIgOiAiUlRMIiwgZWMpOworICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRl
OmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpXTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKworICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6KSkgewor
ICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAg
ICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAg
ICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6TlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBO
TzsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVCYXNlV3JpdGlu
Z0RpcmVjdGlvbjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0
ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0
ZW0gY2xhc3NdXSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0
eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eSgiZGlyZWN0
aW9uIiwgIlJUTCIsIGVjKTsKKyAgICAgICAgICAgIC8vIFRha2UgY29udHJvbCBvZiB0aGUgdGl0
bGUgb2YgdGhlIG1lbnUgaXRlbSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcvdW5jaGVja2luZyBp
dCBiZWNhdXNlCisgICAgICAgICAgICAvLyBhIGNoZWNrIHdvdWxkIGJlIGFtYmlndW91cy4KKyAg
ICAgICAgICAgIFttZW51SXRlbSBzZXRUaXRsZTpmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhh
c1N0eWxlKHN0eWxlLmdldCgpKQorICAgICAgICAgICAgICAgID8gVUlfU1RSSU5HKCJMZWZ0IHRv
IFJpZ2h0IiwgIkxlZnQgdG8gUmlnaHQgY29udGV4dCBtZW51IGl0ZW0iKQorICAgICAgICAgICAg
ICAgIDogVUlfU1RSSU5HKCJSaWdodCB0byBMZWZ0IiwgIlJpZ2h0IHRvIExlZnQgY29udGV4dCBt
ZW51IGl0ZW0iKV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsK
KyAgICB9IAorICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUF0dHJpYnV0
ZXM6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VDb2xvcjopICAg
ICAgICAKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlRm9udDopKQor
ICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRSaWNobHldOworICAgIAorICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKGNhcGl0YWxpemVXb3JkOikKKyAgICAgICAgICAgICAgIHx8IGFjdGlv
biA9PSBAc2VsZWN0b3IobG93ZXJjYXNlV29yZDopCisgICAgICAgICAgICAgICB8fCBhY3Rpb24g
PT0gQHNlbGVjdG9yKHVwcGVyY2FzZVdvcmQ6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNT
ZWxlY3Rpb25dICYmIFtzZWxmIF9pc0VkaXRhYmxlXTsKKworICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6KQorICAgICAgICAgICAgICAgfHwg
YWN0aW9uID09IEBzZWxlY3RvcihqdW1wVG9TZWxlY3Rpb246KQorICAgICAgICAgICAgICAgfHwg
YWN0aW9uID09IEBzZWxlY3Rvcihjb3B5Rm9udDopKQorICAgICAgICByZXR1cm4gW3NlbGYgX2hh
c1NlbGVjdGlvbl0gfHwgKFtzZWxmIF9pc0VkaXRhYmxlXSAmJiBbc2VsZiBfaGFzSW5zZXJ0aW9u
UG9pbnRdKTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VEb2N1bWVu
dEJhY2tncm91bmRDb2xvcjopKQorICAgICAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0Vk
aXRhYmxlXSAmJiBbc2VsZiBfY2FuRWRpdFJpY2hseV07CisgICAgCisgICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IoX2lnbm9yZVNwZWxsaW5nRnJvbU1lbnU6KQorICAgICAgICAgICAgfHwgYWN0
aW9uID09IEBzZWxlY3RvcihfbGVhcm5TcGVsbGluZ0Zyb21NZW51OikKKyAgICAgICAgICAgIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IodGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOikpCisgICAg
ICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3RvcihwYXN0ZTopIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1BsYWluVGV4
dDopKQorICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxQ
YXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSk7CisgICAgCisgICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCisgICAgICAgIHJldHVybiBmcmFt
ZSAmJiAoZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkKKyAgICAgICAgICAgIHx8IChm
cmFtZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKSk7CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
cGVyZm9ybUZpbmRQYW5lbEFjdGlvbjopKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAg
aWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51OikpCisg
ICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXTsKKyAgICAKKyNpZm5kZWYgQlVJTERJ
TkdfT05fVElHRVIKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVHcmFtbWFyQ2hl
Y2tpbmc6KSkgeworICAgICAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0
bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IHZhbGlk
YXRlIAorICAgICAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNhdXNlIHdlIGltcGxlbWVudCBp
dCBoZXJlLCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBiZWNhdXNlIHRoZSBBcHBLaXQg
CisgICAgICAgIC8vIGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisgICAgICAgIE5T
TWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21l
bnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFtt
ZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWRdID8gTlNPblN0
YXRlIDogTlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorI2VuZGlmCisK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihvcmRlckZyb250U3Vic3RpdHV0
aW9uc1BhbmVsOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRl
bSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRl
bSBjbGFzc11dKSB7CisgICAgICAgICAgICBCT09MIHBhbmVsU2hvd2luZyA9IFtbW05TU3BlbGxD
aGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3Vic3RpdHV0aW9uc1BhbmVsXSBpc1Zpc2libGVd
OworICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOnBhbmVsU2hvd2luZworICAgICAgICAg
ICAgICAgID8gVUlfU1RSSU5HKCJIaWRlIFN1YnN0aXR1dGlvbnMiLCAibWVudSBpdGVtIHRpdGxl
IikKKyAgICAgICAgICAgICAgICA6IFVJX1NUUklORygiU2hvdyBTdWJzdGl0dXRpb25zIiwgIm1l
bnUgaXRlbSB0aXRsZSIpXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVk
aXRdOworICAgIH0KKyAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVu
ZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQgd2UgbXVzdCB2YWxpZGF0ZSAKKyAgICAvLyB0aGUgc2Vs
ZWN0b3IgaGVyZSBiZWNhdXNlIHdlIGltcGxlbWVudCBpdCBoZXJlLCBhbmQgd2UgbXVzdCBpbXBs
ZW1lbnQgaXQgaGVyZSBiZWNhdXNlIHRoZSBBcHBLaXQgCisgICAgLy8gY29kZSBjaGVja3MgdGhl
IGZpcnN0IHJlc3BvbmRlci4KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVTbWFy
dEluc2VydERlbGV0ZTopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVu
dUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVu
dUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBzbWFy
dEluc2VydERlbGV0ZUVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CisgICAgICAg
IHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOikpIHsKKyAgICAgICAgTlNNZW51
SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0
ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJ
dGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkXSA/
IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRd
OworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNMaW5r
RGV0ZWN0aW9uOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRl
bSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRl
bSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21h
dGljTGlua0RldGVjdGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CisgICAg
ICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246KSkgeworICAgICAgICBOU01l
bnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51
SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVu
dUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZF0g
PyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0
XTsKKyAgICB9CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljVGV4
dFJlcGxhY2VtZW50OikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51
SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51
SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0
b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsK
KyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9CisgICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOikpIHsKKyAgICAg
ICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlm
IChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAg
ICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9u
RW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxm
IF9jYW5FZGl0XTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBFZGl0b3I6OkNvbW1hbmQgY29t
bWFuZCA9IFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjphY3Rpb25dOworICAgIGlmIChjb21t
YW5kLmlzU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNN
ZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNN
ZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOmtpdChjb21t
YW5kLnN0YXRlKCkpXTsKKyAgICAgICAgcmV0dXJuIGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAg
fQorCisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJ
dGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQoreworICAgIC8vIFRo
aXMgY2FuIGJlIGNhbGxlZCBkdXJpbmcgdGVhcmRvd24gd2hlbiBfd2ViVmlldyBpcyBuaWwuIFJl
dHVybiBOTyB3aGVuIHRoaXMgaGFwcGVucywgYmVjYXVzZSBDYWxsVUlEZWxlZ2F0ZVJldHVybmlu
Z0Jvb2xlYW4KKyAgICAvLyBhc3N1bWVzIHRoZSBXZWJWSWV3IGlzIG5vbi1uaWwuCisgICAgaWYg
KCFbc2VsZiBfd2ViVmlld10pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBCT09MIHJlc3VsdCA9
IFtzZWxmIHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6aXRlbV07Cisg
ICAgcmV0dXJuIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihyZXN1bHQsIFtzZWxmIF93
ZWJWaWV3XSwgQHNlbGVjdG9yKHdlYlZpZXc6dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpkZWZh
dWx0VmFsaWRhdGlvbjopLCBpdGVtLCByZXN1bHQpOworfQorCistIChCT09MKWFjY2VwdHNGaXJz
dFJlc3BvbmRlcgoreworICAgIC8vIERvbid0IGFjY2VwdCBmaXJzdCByZXNwb25kZXIgd2hlbiB3
ZSBmaXJzdCBjbGljayBvbiB0aGlzIHZpZXcuCisgICAgLy8gV2UgaGF2ZSB0byBwYXNzIHRoZSBl
dmVudCBkb3duIHRocm91Z2ggV2ViQ29yZSBmaXJzdCB0byBiZSBzdXJlIHdlIGRvbid0IGhpdCBh
IHN1YnZpZXcuCisgICAgLy8gRG8gYWNjZXB0IGZpcnN0IHJlc3BvbmRlciBhdCBhbnkgb3RoZXIg
dGltZSwgZm9yIGV4YW1wbGUgZnJvbSBrZXlib2FyZCBldmVudHMsCisgICAgLy8gb3IgZnJvbSBj
YWxscyBiYWNrIGZyb20gV2ViQ29yZSBvbmNlIHdlIGJlZ2luIG1vdXNlLWRvd24gZXZlbnQgaGFu
ZGxpbmcuCisgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKKyAgICBp
ZiAoW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93bgorICAgICAgICAgICAgJiYgIV9wcml2
YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50CisgICAgICAgICAgICAmJiBOU1BvaW50SW5SZWN0
KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgdmlzaWJs
ZVJlY3RdIHRvVmlldzpuaWxdKSkgeworICAgICAgICByZXR1cm4gTk87CisgICAgfQorICAgIHJl
dHVybiBZRVM7Cit9CisKKy0gKEJPT0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24KK3sKKyAg
ICAvLyBUaGlzIG1ldGhvZCBoZWxwcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgV2ViSFRNTFZp
ZXcgc2hvdWxkIG1haW50YWluCisgICAgLy8gYW4gaW5hY3RpdmUgc2VsZWN0aW9uIHdoZW4gaXQn
cyBub3QgZmlyc3QgcmVzcG9uZGVyLgorICAgIC8vIFRyYWRpdGlvbmFsbHksIHRoZXNlIHZpZXdz
IGhhdmUgbm90IG1haW50YWluZWQgc3VjaCBzZWxlY3Rpb25zLAorICAgIC8vIGNsZWFyaW5nIHRo
ZW0gd2hlbiB0aGUgdmlldyB3YXMgbm90IGZpcnN0IHJlc3BvbmRlci4gSG93ZXZlciwKKyAgICAv
LyB0byBmaXggYnVncyBsaWtlIHRoaXMgb25lOgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zNjcy
MDg4PjogIkVkaXRhYmxlIFdlYlZpZXdzIHNob3VsZCBtYWludGFpbiBhIHNlbGVjdGlvbiBldmVu
IAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGhleSdyZSBub3QgZmly
c3RSZXNwb25kZXIiCisgICAgLy8gaXQgd2FzIGRlY2lkZWQgdG8gYWRkIGEgc3dpdGNoIHRvIGFj
dCBtb3JlIGxpa2UgYW4gTlNUZXh0Vmlldy4KKworICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIG1h
aW50YWluc0luYWN0aXZlU2VsZWN0aW9uXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIC8v
IFByZWRpY3QgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGxvc2luZyBmaXJzdCByZXNwb25kZXIgc3Rh
dHVzIG9ubHkgdG8KKyAgICAvLyBnYWluIGl0IGJhY2sgYWdhaW4uIFdhbnQgdG8ga2VlcCB0aGUg
c2VsZWN0aW9uIGluIHRoYXQgY2FzZS4KKyAgICBpZCBuZXh0UmVzcG9uZGVyID0gW1tzZWxmIHdp
bmRvd10gX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmddOworICAgIGlmIChbbmV4dFJl
c3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xhc3NdXSkgeworICAgICAgICBp
ZCBjb250ZW50VmlldyA9IFtuZXh0UmVzcG9uZGVyIGNvbnRlbnRWaWV3XTsKKyAgICAgICAgaWYg
KGNvbnRlbnRWaWV3KQorICAgICAgICAgICAgbmV4dFJlc3BvbmRlciA9IGNvbnRlbnRWaWV3Owor
ICAgIH0KKyAgICBpZiAoW25leHRSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNDbGlwVmlldyBj
bGFzc11dKSB7CisgICAgICAgIGlkIGRvY3VtZW50VmlldyA9IFtuZXh0UmVzcG9uZGVyIGRvY3Vt
ZW50Vmlld107CisgICAgICAgIGlmIChkb2N1bWVudFZpZXcpCisgICAgICAgICAgICBuZXh0UmVz
cG9uZGVyID0gZG9jdW1lbnRWaWV3OworICAgIH0KKyAgICBpZiAobmV4dFJlc3BvbmRlciA9PSBz
ZWxmKQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgYm9vbCBzZWxlY3Rpb25Jc0VkaXRhYmxlID0gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9v
bCBuZXh0UmVzcG9uZGVySXNJbldlYlZpZXcgPSBbbmV4dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNz
OltOU1ZpZXcgY2xhc3NdXQorICAgICAgICAmJiBbbmV4dFJlc3BvbmRlciBpc0Rlc2NlbmRhbnRP
ZjpbW1tzZWxmIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmlld11dOworCisgICAgcmV0dXJu
IHNlbGVjdGlvbklzRWRpdGFibGUgJiYgbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3OworfQorCist
ICh2b2lkKWFkZE1vdXNlTW92ZWRPYnNlcnZlcgoreworICAgIGlmICghX3ByaXZhdGUtPmRhdGFT
b3VyY2UgfHwgIVtzZWxmIF9pc1RvcEhUTUxWaWV3XSB8fCBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91
c2VNb3ZlZE5vdGlmaWNhdGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFVubGVzcyB0
aGUgRGFzaGJvYXJkIGFza3MgdXMgdG8gZG8gdGhpcyBmb3IgYWxsIHdpbmRvd3MsIGtlZXAgYW4g
b2JzZXJ2ZXIgZ29pbmcgb25seSBmb3IgdGhlIGtleSB3aW5kb3cuCisgICAgaWYgKCEoW1tzZWxm
IHdpbmRvd10gaXNLZXlXaW5kb3ddIAorI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAg
ICAgICAgICAgIHx8IFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldlYkRhc2hi
b2FyZEJlaGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRzVG9BbGxXaW5kb3dzXQorI2VuZGlmCisg
ICAgICAgICkpCisgICAgICAgIHJldHVybjsKKworICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IobW91c2VN
b3ZlZE5vdGlmaWNhdGlvbjopCisgICAgICAgIG5hbWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9u
KCkgb2JqZWN0Om5pbF07CisgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKKyAgICBf
cHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMgPSB0cnVlOworfQorCist
ICh2b2lkKXJlbW92ZU1vdXNlTW92ZWRPYnNlcnZlcgoreworI2lmIEVOQUJMRShEQVNIQk9BUkRf
U1VQUE9SVCkKKyAgICAvLyBEb24ndCByZW1vdmUgdGhlIG9ic2VydmVyIGlmIHdlJ3JlIHJ1bm5p
bmcgdGhlIERhc2hib2FyZC4KKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfZGFzaGJvYXJkQmVo
YXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNTZW5kTW91c2VFdmVudHNUb0FsbFdpbmRv
d3NdKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworICAgIFtbc2VsZiBfd2ViVmlld10gX21v
dXNlRGlkTW92ZU92ZXJFbGVtZW50Om5pbCBtb2RpZmllckZsYWdzOjBdOworICAgIFtzZWxmIF9y
ZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHldOworfQorCistICh2b2lkKWFk
ZFN1cGVydmlld09ic2VydmVycworeworICAgIGlmIChfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2
aWV3Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNWaWV3ICpzdXBlcnZp
ZXcgPSBbc2VsZiBzdXBlcnZpZXddOworICAgIGlmICghc3VwZXJ2aWV3IHx8ICFbc2VsZiB3aW5k
b3ddKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5v
dGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsK
KyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKF9mcmFtZU9yQm91bmRzQ2hhbmdlZCkgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlm
aWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9mcmFtZU9yQm91bmRzQ2hhbmdlZCkgbmFt
ZTpOU1ZpZXdCb3VuZHNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107Cisg
ICAgCisgICAgLy8gSW4gYWRkaXRpb24gdG8gcmVnaXN0ZXJpbmcgZm9yIGZyYW1lL2JvdW5kcyBj
aGFuZ2Ugbm90aWZpY2F0aW9ucywgY2FsbCAtX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkLgorICAgIC8v
IEl0IHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgc2Nyb2xsIGFnYWluc3QgdGhlIHByZXZpb3VzIGxh
eW91dCdzIHNjcm9sbC4gIFdlIG5lZWQgdG8KKyAgICAvLyBkbyB0aGlzIGhlcmUgdG8gY2F0Y2gg
dGhlIGNhc2Ugd2hlcmUgdGhlIFdlYlZpZXcgaXMgbGFpZCBvdXQgYXQgb25lIHNpemUsIHJlbW92
ZWQgZnJvbSBpdHMKKyAgICAvLyB3aW5kb3csIHJlc2l6ZWQsIGFuZCBpbnNlcnRlZCBpbnRvIGFu
b3RoZXIgd2luZG93LiAgT3VyIGZyYW1lL2JvdW5kcyBjaGFuZ2VkIG5vdGlmaWNhdGlvbnMKKyAg
ICAvLyB3aWxsIG5vdCBiZSBzZW50IGluIHRoYXQgc2l0dWF0aW9uLCBzaW5jZSB3ZSBvbmx5IHdh
dGNoIGZvciBjaGFuZ2VzIHdoaWxlIGluIHRoZSB2aWV3IGhpZXJhcmNoeS4KKyAgICBbc2VsZiBf
ZnJhbWVPckJvdW5kc0NoYW5nZWRdOworICAgIAorICAgIF9wcml2YXRlLT5vYnNlcnZpbmdTdXBl
cnZpZXdOb3RpZmljYXRpb25zID0gdHJ1ZTsKK30KKworLSAodm9pZClhZGRXaW5kb3dPYnNlcnZl
cnMKK3sKKyAgICBpZiAoX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93
XTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5TTm90aWZp
Y2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWRCZWNvbWVLZXk6KSBuYW1lOk5TV2luZG93RGlk
QmVjb21lS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtub3RpZmljYXRpb25DZW50
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93RGlkUmVzaWduS2V5
OikgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAg
ICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KHdpbmRvd1dpbGxDbG9zZTopIG5hbWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gb2Jq
ZWN0OndpbmRvd107CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNl
bGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dXaWxsT3JkZXJPblNjcmVlbjopIG5hbWU6V0tXaW5kb3dX
aWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlvbigpIG9iamVjdDp3aW5kb3ddOworICAgIAorICAg
IF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zID0gdHJ1ZTsKK30KKworLSAo
dm9pZCl2aWV3V2lsbE1vdmVUb1N1cGVydmlldzooTlNWaWV3ICopbmV3U3VwZXJ2aWV3Cit7Cisg
ICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVyc107Cit9CisKKy0gKHZvaWQpdmlld0Rp
ZE1vdmVUb1N1cGVydmlldworeworICAgIGlmIChbc2VsZiBzdXBlcnZpZXddICE9IG5pbCkKKyAg
ICAgICAgW3NlbGYgYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKK30KKworc3RhdGljIHZvaWQgX3Vw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyQ2FsbGJhY2soQ0ZSdW5Mb29wVGltZXJSZWYg
dGltZXIsIHZvaWQgKmluZm8pCit7CisgICAgV2ViSFRNTFZpZXcgKnZpZXcgPSAoV2ViSFRNTFZp
ZXcgKilpbmZvOworICAgIFt2aWV3IF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOworfQor
CistICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdworeworICAg
IC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGFyZW4ndCBpbml0aWFsaXplZC4gIFRoaXMgaGFw
cGVucworICAgIC8vIHdoZW4gZGVjb2RpbmcgYSBXZWJWaWV3LiAgV2hlbiBXZWJWaWV3cyBhcmUg
ZGVjb2RlZCB0aGVpciBzdWJ2aWV3cworICAgIC8vIGFyZSBjcmVhdGVkIGJ5IGluaXRXaXRoQ29k
ZXI6IGFuZCBzbyB3b24ndCBiZSBub3JtYWxseQorICAgIC8vIGluaXRpYWxpemVkLiAgVGhlIHN0
dWIgdmlld3MgYXJlIGRpc2NhcmRlZCBieSBXZWJWaWV3LgorICAgIGlmICghX3ByaXZhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBTb21lIG9mIHRoZXNlIGNhbGxzIG1heSBu
b3Qgd29yayBiZWNhdXNlIHRoaXMgdmlldyBtYXkgYmUgYWxyZWFkeSByZW1vdmVkIGZyb20gaXQn
cyBzdXBlcnZpZXcuCisgICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0
aW9uYWxseV07CisgICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2VydmVyc107CisgICAgW3NlbGYg
X3JlbW92ZVN1cGVydmlld09ic2VydmVyc107CisgICAgW3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNl
b3ZlclRpbWVyXTsKKyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRl
VGltZXJdOworICAgIAorICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gc3RvcEFsbFBsdWdp
bnNdOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cKK3sKKyAgICAvLyBEb24ndCBk
byBhbnl0aGluZyBpZiB3ZSBhcmVuJ3QgaW5pdGlhbGl6ZWQuICBUaGlzIGhhcHBlbnMKKyAgICAv
LyB3aGVuIGRlY29kaW5nIGEgV2ViVmlldy4gIFdoZW4gV2ViVmlld3MgYXJlIGRlY29kZWQgdGhl
aXIgc3Vidmlld3MKKyAgICAvLyBhcmUgY3JlYXRlZCBieSBpbml0V2l0aENvZGVyOiBhbmQgc28g
d29uJ3QgYmUgbm9ybWFsbHkKKyAgICAvLyBpbml0aWFsaXplZC4gIFRoZSBzdHViIHZpZXdzIGFy
ZSBkaXNjYXJkZWQgYnkgV2ViVmlldy4KKyAgICBpZiAoIV9wcml2YXRlIHx8IF9wcml2YXRlLT5j
bG9zZWQpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgW3NlbGYgX3N0b3BBdXRvc2Ny
b2xsVGltZXJdOworICAgIGlmIChbc2VsZiB3aW5kb3ddKSB7CisgICAgICAgIF9wcml2YXRlLT5s
YXN0U2Nyb2xsUG9zaXRpb24gPSBbW3NlbGYgc3VwZXJ2aWV3XSBib3VuZHNdLm9yaWdpbjsKKyAg
ICAgICAgW3NlbGYgYWRkV2luZG93T2JzZXJ2ZXJzXTsKKyAgICAgICAgW3NlbGYgYWRkU3VwZXJ2
aWV3T2JzZXJ2ZXJzXTsKKyAgICAgICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKKwor
ICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHVwZGF0ZSwgcmF0aGVyIHRoYW4gbWFraW5nIHRoZSBj
YWxsIHJpZ2h0IG5vdy4KKyAgICAgICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHBsYWNpbmcgdGhl
IGNhcmV0IGluIHRoZSBqdXN0LWluc3RhbGxlZCB2aWV3IHJlcXVpcmVzCisgICAgICAgIC8vIHRo
ZSBIVE1ML1hNTCBkb2N1bWVudCB0byBiZSBhdmFpbGFibGUgb24gdGhlIFdlYkNvcmUgc2lkZSwg
YnV0IGl0IGlzIG5vdAorICAgICAgICAvLyBhdCB0aGUgdGltZSB0aGlzIGNvZGUgaXMgcnVubmlu
Zy4gSG93ZXZlciwgaXQgd2lsbCBiZSB0aGVyZSBvbiB0aGUgbmV4dAorICAgICAgICAvLyBjcmFu
ayBvZiB0aGUgcnVuIGxvb3AuIERvaW5nIHRoaXMgaGVscHMgdG8gbWFrZSBhIGJsaW5raW5nIGNh
cmV0IGFwcGVhciAKKyAgICAgICAgLy8gaW4gYSBuZXcsIGVtcHR5IHdpbmRvdyAiYXV0b21hdGlj
Ii4KKyAgICAgICAgaWYgKCFfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGlt
ZXIpIHsKKyAgICAgICAgICAgIENGUnVuTG9vcFRpbWVyQ29udGV4dCBjb250ZXh0ID0geyAwLCBz
ZWxmLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgICAgICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlRm9j
dXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIgPSBDRlJ1bkxvb3BUaW1lckNyZWF0ZShOVUxMLCBDRkFi
c29sdXRlVGltZUdldEN1cnJlbnQoKSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZUZvY3Vz
ZWRBbmRBY3RpdmVTdGF0ZVRpbWVyQ2FsbGJhY2ssICZjb250ZXh0KTsKKyAgICAgICAgICAgIENG
UnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgX3ByaXZhdGUtPnVwZGF0ZUZv
Y3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIHN0YXJ0QWxs
UGx1Z2luc107CisKKyAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9IE5TWmVy
b1BvaW50OworICAgIH0KK30KKworLSAodm9pZCl2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KE5T
V2luZG93ICopaG9zdFdpbmRvdworeworICAgIFtbc2VsZiBzdWJ2aWV3c10gX3dlYl9tYWtlUGx1
Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRv
dzopIHdpdGhPYmplY3Q6aG9zdFdpbmRvd107Cit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb0hv
c3RXaW5kb3cKK3sKKyAgICBbW3NlbGYgc3Vidmlld3NdIF93ZWJfbWFrZVBsdWdpblZpZXdzUGVy
Zm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdykgd2l0aE9iamVj
dDpuaWxdOworfQorCisKKy0gKHZvaWQpYWRkU3VidmlldzooTlNWaWV3ICopdmlldworeworICAg
IFtzdXBlciBhZGRTdWJ2aWV3OnZpZXddOworCisgICAgaWYgKFtXZWJQbHVnaW5Db250cm9sbGVy
IGlzUGx1Z0luVmlldzp2aWV3XSkKKyAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBh
ZGRQbHVnaW46dmlld107Cit9CisKKy0gKHZvaWQpd2lsbFJlbW92ZVN1YnZpZXc6KE5TVmlldyAq
KXN1YnZpZXcKK3sKKyAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5WaWV3OnN1
YnZpZXddKQorICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lQbHVnaW46
c3Vidmlld107CisKKyAgICBbc3VwZXIgd2lsbFJlbW92ZVN1YnZpZXc6c3Vidmlld107Cit9CisK
Ky0gKHZvaWQpcmVhcHBseVN0eWxlcworeworICAgIGlmICghX3ByaXZhdGUtPm5lZWRzVG9BcHBs
eVN0eWxlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorI2lmZGVmIExPR19USU1FUworICAgIGRv
dWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOworI2VuZGlmCisKKyAgICBp
ZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYg
KEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkKKyAgICAgICAgICAgIGNv
cmVWaWV3LT5zZXRNZWRpYVR5cGUoX3ByaXZhdGUtPnByaW50aW5nID8gInByaW50IiA6ICJzY3Jl
ZW4iKTsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1l
bnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5zZXRQcmludGluZyhfcHJpdmF0ZS0+cHJpbnRp
bmcpOworICAgICAgICBjb3JlRnJhbWUtPnJlYXBwbHlTdHlsZXMoKTsKKyAgICB9CisgICAgCisj
aWZkZWYgTE9HX1RJTUVTICAgICAgICAKKyAgICBkb3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhUaW1pbmcsICIlcyBhcHBseSBzdHls
ZSBzZWNvbmRzID0gJWYiLCBbc2VsZiBVUkxdLCB0aGlzVGltZSk7CisjZW5kaWYKKworICAgIF9w
cml2YXRlLT5uZWVkc1RvQXBwbHlTdHlsZXMgPSBOTzsKK30KKworLy8gRG8gYSBsYXlvdXQsIGJ1
dCBzZXQgdXAgYSBuZXcgZml4ZWQgd2lkdGggZm9yIHRoZSBwdXJwb3NlcyBvZiBkb2luZyBwcmlu
dGluZyBsYXlvdXQuCisvLyBtaW5QYWdlV2lkdGg9PTAgaW1wbGllcyBhIG5vbi1wcmludGluZyBs
YXlvdXQKKy0gKHZvaWQpbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lk
dGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdGluZ1ZpZXdTaXpl
OihCT09MKWFkanVzdFZpZXdTaXplCit7CisgICAgW3NlbGYgcmVhcHBseVN0eWxlc107CisgICAg
CisgICAgaWYgKCFbc2VsZiBfbmVlZHNMYXlvdXRdKQorICAgICAgICByZXR1cm47CisKKyNpZmRl
ZiBMT0dfVElNRVMgICAgICAgIAorICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0
Q3VycmVudCgpOworI2VuZGlmCisKKyAgICBMT0coVmlldywgIiVAIGRvaW5nIGxheW91dCIsIHNl
bGYpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAg
aWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChGcmFtZVZpZXcqIGNv
cmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKKyAgICAgICAgaWYgKG1pblBhZ2VXaWR0aCA+
IDAuMCkKKyAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91dFdpdGhQYWdlV2lkdGhSYW5n
ZShtaW5QYWdlV2lkdGgsIG1heFBhZ2VXaWR0aCwgYWRqdXN0Vmlld1NpemUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91dCghYWRqdXN0Vmlld1NpemUp
OworICAgICAgICAgICAgaWYgKGFkanVzdFZpZXdTaXplKQorICAgICAgICAgICAgICAgIGNvcmVW
aWV3LT5hZGp1c3RWaWV3U2l6ZSgpOworICAgICAgICB9CisgICAgfQorICAgIAorI2lmZGVmIExP
R19USU1FUyAgICAgICAgCisgICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRD
dXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5nLCAiJXMgbGF5b3V0IHNlY29uZHMgPSAl
ZiIsIFtzZWxmIFVSTF0sIHRoaXNUaW1lKTsKKyNlbmRpZgorfQorCistICh2b2lkKWxheW91dAor
eworICAgIFtzZWxmIGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lk
dGg6MC4wZiBhZGp1c3RpbmdWaWV3U2l6ZTpOT107Cit9CisKKy8vIERlbGl2ZXIgbW91c2V1cCBl
dmVudHMgdG8gdGhlIERPTSBmb3IgYnV0dG9uIDIuCistICh2b2lkKXJpZ2h0TW91c2VVcDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHdlIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wIHRoZSBldmVudCB3aWxsIGJlIHJlbGVhc2VkLgorICAgIC8vIFJl
dGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nIHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5n
IGEgcHJvYmxlbSBsYXRlciBoZXJlIG9yCisgICAgLy8gaW5zaWRlIEFwcEtpdCBjb2RlLgorICAg
IFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBbc3VwZXIgcmlnaHRNb3VzZVVw
OmV2ZW50XTsKKworICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KSkKKyAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VVcChldmVudCk7Cit9
CisKKy0gKE5TTWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHdlIHJ1biBhIG5lc3RlZCBldmVudCBsb29wIHRoZSBl
dmVudCB3aWxsIGJlIHJlbGVhc2VkLgorICAgIC8vIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVs
ZWFzaW5nIHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBsYXRlciBoZXJlIG9y
CisgICAgLy8gaW5zaWRlIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVs
ZWFzZV07CisKKyAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5n
ZTpOTyBtb3ZlTGVmdDpOT107CisKKyAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBuaWw7
CisKKyAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gTWF0Y2ggYmVoYXZpb3Igb2Ygb3RoZXIgYnJv
d3NlcnMgYnkgc2VuZGluZyBhIG1vdXNlZG93biBldmVudCBmb3IgcmlnaHQgY2xpY2tzLgorICAg
IF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gWUVTOworICAgIHBhZ2UtPmNvbnRl
eHRNZW51Q29udHJvbGxlcigpLT5jbGVhckNvbnRleHRNZW51KCk7CisgICAgY29yZUZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+bW91c2VEb3duKGV2ZW50KTsKKyAgICBCT09MIGhhbmRsZWRFdmVudCA9
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KFBsYXRmb3Jt
TW91c2VFdmVudChldmVudCkpOworICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50
ID0gTk87CisKKyAgICBpZiAoIWhhbmRsZWRFdmVudCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIC8vIFJlLWdldCBwYWdlLCBzaW5jZSBpdCBtaWdodCBoYXZlIGdvbmUgYXdheSBkdXJpbmcg
ZXZlbnQgaGFuZGxpbmcuCisgICAgcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIENvbnRleHRNZW51KiBjb3JlTWVudSA9
IHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0TWVudSgpOworICAgIGlmICgh
Y29yZU1lbnUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU0FycmF5KiBtZW51SXRlbXMg
PSBjb3JlTWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOworICAgIGlmICghbWVudUl0ZW1zKQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNVSW50ZWdlciBjb3VudCA9IFttZW51SXRlbXMg
Y291bnRdOworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU01l
bnUqIG1lbnUgPSBbW1tOU01lbnUgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBmb3Ig
KE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBbbWVudSBhZGRJdGVt
OlttZW51SXRlbXMgb2JqZWN0QXRJbmRleDppXV07CisgICAgcmV0dXJuIG1lbnU7Cit9CisKKy0g
KEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2Fy
ZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcKK3sKKyAg
ICByZXR1cm4gW3NlbGYgc2VhcmNoRm9yOnN0cmluZyBkaXJlY3Rpb246Zm9yd2FyZCBjYXNlU2Vu
c2l0aXZlOmNhc2VGbGFnIHdyYXA6d3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjpOT107Cit9CisK
Ky0gKHZvaWQpY2xlYXJGb2N1cworeworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1l
bnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUo
MCk7Cit9CisKKy0gKEJPT0wpaXNPcGFxdWUKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3
XSBkcmF3c0JhY2tncm91bmRdOworfQorCistICh2b2lkKXNldE5lZWRzRGlzcGxheTooQk9PTClm
bGFnCit7CisgICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc0Rpc3BsYXk6JUAiLCBzZWxmLCBmbGFn
ID8gQCJZRVMiIDogQCJOTyIpOworICAgIFtzdXBlciBzZXROZWVkc0Rpc3BsYXk6ZmxhZ107Cit9
CisKKy0gKHZvaWQpc2V0TmVlZHNMYXlvdXQ6IChCT09MKWZsYWcKK3sKKyAgICBMT0coVmlldywg
IiVAIHNldE5lZWRzTGF5b3V0OiVAIiwgc2VsZiwgZmxhZyA/IEAiWUVTIiA6IEAiTk8iKTsKKyAg
ICBpZiAoIWZsYWcpCisgICAgICAgIHJldHVybjsgLy8gVGhlcmUncyBubyB3YXkgdG8gc2F5IHlv
dSBkb24ndCBuZWVkIGEgbGF5b3V0LgorICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9j
dW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCkpCisgICAgICAgICAgICB2aWV3LT5zZXRO
ZWVkc0xheW91dCgpOworICAgIH0KK30KKworLSAodm9pZClzZXROZWVkc1RvQXBwbHlTdHlsZXM6
IChCT09MKWZsYWcKK3sKKyAgICBMT0coVmlldywgIiVAIHNldE5lZWRzVG9BcHBseVN0eWxlczol
QCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7CisgICAgX3ByaXZhdGUtPm5lZWRzVG9B
cHBseVN0eWxlcyA9IGZsYWc7Cit9CisKKy0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdCly
ZWN0Cit7CisgICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKKyAgICBO
U1JlY3RDbGlwKHJlY3QpOworICAgICAgICAKKyAgICBBU1NFUlQoW1tzZWxmIHN1cGVydmlld10g
aXNLaW5kT2ZDbGFzczpbV2ViQ2xpcFZpZXcgY2xhc3NdXSk7CisKKyAgICBbKFdlYkNsaXBWaWV3
ICopW3NlbGYgc3VwZXJ2aWV3XSBzZXRBZGRpdGlvbmFsQ2xpcDpyZWN0XTsKKworICAgIEB0cnkg
eworICAgICAgICBpZiAoW3NlbGYgX3RyYW5zcGFyZW50QmFja2dyb3VuZF0pIHsKKyAgICAgICAg
ICAgIFtbTlNDb2xvciBjbGVhckNvbG9yXSBzZXRdOworICAgICAgICAgICAgTlNSZWN0RmlsbCAo
cmVjdCk7CisgICAgICAgIH0KKworICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhd1JlY3Q6cmVj
dCBjb250ZW50c09ubHk6WUVTXTsKKworICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYg
X3dlYlZpZXddOworCisgICAgICAgIC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgZm9yIDxyZGFyOi8v
cHJvYmxlbS81MDIzNTQ1Pi4gV2UgY2FuIGhpdCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGRyYXdS
ZWN0IHdpbGwgYmUKKyAgICAgICAgLy8gY2FsbGVkIGFmdGVyIHRoZSBXZWJWaWV3IGhhcyBjbG9z
ZWQuIElmIHRoZSBjbGllbnQgZGlkIG5vdCBwcm9wZXJseSBjbG9zZSB0aGUgV2ViVmlldyBhbmQg
c2V0IHRoZSAKKyAgICAgICAgLy8gVUlEZWxlZ2F0ZSB0byBuaWwsIHRoZW4gdGhlIFVJRGVsZWdh
dGUgd2lsbCBiZSBzdGFsZSBhbmQgdGhpcyBjb2RlIHdpbGwgY3Jhc2guIAorICAgICAgICBzdGF0
aWMgQk9PTCB2ZXJzaW9uM09yTGF0ZXJDbGllbnQgPSBXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VC
S0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9RVUlDS0JPT0tTX1FVSVJLKTsKKyAgICAgICAgaWYg
KHZlcnNpb24zT3JMYXRlckNsaWVudCkKKyAgICAgICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRpZERyYXdSZWN0Olt3ZWJWaWV3IGNvbnZlcnRS
ZWN0OnJlY3QgZnJvbVZpZXc6c2VsZl1dOworCisgICAgICAgIGlmIChXZWJOb2RlSGlnaGxpZ2h0
ICpjdXJyZW50SGlnaGxpZ2h0ID0gW3dlYlZpZXcgY3VycmVudE5vZGVIaWdobGlnaHRdKQorICAg
ICAgICAgICAgW2N1cnJlbnRIaWdobGlnaHQgc2V0TmVlZHNVcGRhdGVJblRhcmdldFZpZXdSZWN0
OltzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3OltjdXJyZW50SGlnaGxpZ2h0IHRhcmdldFZp
ZXddXV07CisKKyAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gcmVzZXRB
ZGRpdGlvbmFsQ2xpcF07CisKKyAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFw
aGljc1N0YXRlXTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmxvY2FsRXhjZXB0aW9uKSB7
CisgICAgICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHJlc2V0QWRkaXRpb25h
bENsaXBdOworICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVd
OworICAgICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBjYXVnaHQgd2hpbGUgZHJhd2luZzogJUAi
LCBsb2NhbEV4Y2VwdGlvbik7CisgICAgICAgIFtsb2NhbEV4Y2VwdGlvbiByYWlzZV07CisgICAg
fQorfQorCistICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAoreworICAgIEFTU0VSVF9NQUlO
X1RIUkVBRCgpOworICAgIExPRyhWaWV3LCAiJUAgZHJhd2luZyIsIHNlbGYpOworCisgICAgY29u
c3QgTlNSZWN0ICpyZWN0czsKKyAgICBOU0ludGVnZXIgY291bnQ7CisgICAgW3NlbGYgZ2V0UmVj
dHNCZWluZ0RyYXduOiZyZWN0cyBjb3VudDomY291bnRdOworCisgICAgQk9PTCBzdWJ2aWV3c1dl
cmVTZXRBc2lkZSA9IF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlOworICAgIGlmIChzdWJ2aWV3
c1dlcmVTZXRBc2lkZSkKKyAgICAgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107CisKKyNpZmRl
ZiBMT0dfVElNRVMKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQo
KTsKKyNlbmRpZgorCisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX211c3REcmF3VW5pb25lZFJl
Y3Q6cmVjdCBzaW5nbGVSZWN0czpyZWN0cyBjb3VudDpjb3VudF0pCisgICAgICAgIFtzZWxmIGRy
YXdTaW5nbGVSZWN0OnJlY3RdOworICAgIGVsc2UKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICAgICAgW3NlbGYgZHJhd1NpbmdsZVJlY3Q6cmVjdHNbaV1d
OworCisjaWZkZWYgTE9HX1RJTUVTCisgICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5nLCAiJXMgZHJhdyBzZWNvbmRz
ID0gJWYiLCB3aWRnZXQtPnBhcnQoKS0+YmFzZVVSTCgpLlVSTCgpLmxhdGluMSgpLCB0aGlzVGlt
ZSk7CisjZW5kaWYKKworICAgIGlmIChzdWJ2aWV3c1dlcmVTZXRBc2lkZSkKKyAgICAgICAgW3Nl
bGYgX3NldEFzaWRlU3Vidmlld3NdOworICAgICAgICAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX25lZWRzT25lU2hvdERyYXdpbmdT
eW5jaHJvbml6YXRpb25dKSB7CisgICAgICAgIC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgc28g
dGhhdCBkcmF3aW5nIGludG8gdGhlIE5TVmlldyBhbmQKKyAgICAgICAgLy8gQ0FMYXllciB1cGRh
dGVzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgICAgIFtbc2Vs
ZiB3aW5kb3ddIGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVzaF07CisgICAgICAgIFtDQVRy
YW5zYWN0aW9uIGZsdXNoXTsKKyAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjpOT107CisgICAgfQorI2VuZGlmCit9CisKKy8vIFR1
cm4gb2ZmIHRoZSBhZGRpdGlvbmFsIGNsaXAgd2hpbGUgY29tcHV0aW5nIG91ciB2aXNpYmxlUmVj
dC4KKy0gKE5TUmVjdCl2aXNpYmxlUmVjdAoreworICAgIGlmICghKFtbc2VsZiBzdXBlcnZpZXdd
IGlzS2luZE9mQ2xhc3M6W1dlYkNsaXBWaWV3IGNsYXNzXV0pKQorICAgICAgICByZXR1cm4gW3N1
cGVyIHZpc2libGVSZWN0XTsKKyAgICAgICAgCisgICAgV2ViQ2xpcFZpZXcgKmNsaXBWaWV3ID0g
KFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XTsKKworICAgIEJPT0wgaGFzQWRkaXRpb25h
bENsaXAgPSBbY2xpcFZpZXcgaGFzQWRkaXRpb25hbENsaXBdOworICAgIGlmICghaGFzQWRkaXRp
b25hbENsaXApIHsKKyAgICAgICAgcmV0dXJuIFtzdXBlciB2aXNpYmxlUmVjdF07CisgICAgfQor
ICAgIAorICAgIE5TUmVjdCBhZGRpdGlvbmFsQ2xpcCA9IFtjbGlwVmlldyBhZGRpdGlvbmFsQ2xp
cF07CisgICAgW2NsaXBWaWV3IHJlc2V0QWRkaXRpb25hbENsaXBdOworICAgIE5TUmVjdCB2aXNp
YmxlUmVjdCA9IFtzdXBlciB2aXNpYmxlUmVjdF07CisgICAgW2NsaXBWaWV3IHNldEFkZGl0aW9u
YWxDbGlwOmFkZGl0aW9uYWxDbGlwXTsKKyAgICByZXR1cm4gdmlzaWJsZVJlY3Q7Cit9CisKKy0g
KEJPT0wpaXNGbGlwcGVkIAoreworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKHZvaWQpd2luZG93
RGlkQmVjb21lS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICgh
cHRocmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWlu
VGhyZWFkOl9jbWQgd2l0aE9iamVjdDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1dpbmRvdyAqa2V5V2luZG93ID0gW25vdGlm
aWNhdGlvbiBvYmplY3RdOworCisgICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddKQor
ICAgICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOworCisgICAgaWYgKGtleVdpbmRv
dyA9PSBbc2VsZiB3aW5kb3ddIHx8IGtleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hl
ZFNoZWV0XSkKKyAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Cit9
CisKKy0gKHZvaWQpd2luZG93RGlkUmVzaWduS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgW3NlbGYgcGVy
Zm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVjdDpub3RpZmljYXRpb24gd2Fp
dFVudGlsRG9uZTpOT107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1dpbmRvdyAq
Zm9ybWVyS2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOworCisgICAgaWYgKGZvcm1l
cktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddKQorICAgICAgICBbc2VsZiByZW1vdmVNb3VzZU1v
dmVkT2JzZXJ2ZXJdOworCisgICAgaWYgKGZvcm1lcktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3dd
IHx8IGZvcm1lcktleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkgewor
ICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKKyAgICAgICAgW19w
cml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9d
OworICAgIH0KK30KKworLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkgeworICAgICAgICBb
c2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNh
dGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFtf
cHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5P
XTsKKyAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lBbGxQbHVnaW5zXTsKK30K
KworLSAodm9pZCl3aW5kb3dXaWxsT3JkZXJPblNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3Rp
ZmljYXRpb24KK3sKKyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gc2hvdWxkVXBkYXRlV2hpbGVP
ZmZzY3JlZW5dKQorICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKK30KKworLSAo
dm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNo
YW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVu
dCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRo
ZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBj
dXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUg
V2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07
CisKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghZnJh
bWUgfHwgIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+d2hlZWxFdmVudChldmVudCkpCisgICAgICAg
IFtzdXBlciBzY3JvbGxXaGVlbDpldmVudF07Cit9CisKKy0gKEJPT0wpX2lzU2VsZWN0aW9uRXZl
bnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBjb252ZXJ0
UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07CisgICAgcmV0dXJu
IFtbW3NlbGYgZWxlbWVudEF0UG9pbnQ6cG9pbnQgYWxsb3dTaGFkb3dDb250ZW50OllFU10gb2Jq
ZWN0Rm9yS2V5OldlYkVsZW1lbnRJc1NlbGVjdGVkS2V5XSBib29sVmFsdWVdOworfQorCistIChC
T09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVk
IGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVh
c2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8g
dGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGlu
c2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKKworICAgIE5TVmlldyAqaGl0VmlldyA9IFtzZWxmIF9oaXRWaWV3Rm9yRXZlbnQ6ZXZl
bnRdOworICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFtoaXRWaWV3IGlzS2luZE9mQ2xh
c3M6W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZpZXcgOiBuaWw7CisgICAgCisj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9k
YXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvckFsd2F5c0FjY2VwdHNGaXJzdE1v
dXNlXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyNlbmRpZgorICAgIAorICAgIGlmIChoaXRIVE1M
VmlldykgeworICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBpZiAoRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW2hpdEhUTUxWaWV3IF9mcmFtZV0pKSB7CisgICAgICAgICAgICBj
b3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRBY3RpdmF0aW9uRXZlbnROdW1iZXIoW2V2ZW50
IGV2ZW50TnVtYmVyXSk7CisgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2
ZW50OmV2ZW50XTsKKyAgICAgICAgICAgIGlmIChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZl
bnQ6ZXZlbnRdKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPmV2ZW50TWF5U3RhcnREcmFnKGV2ZW50KTsKKyAgICAgICAgICAgIFtoaXRIVE1MVmll
dyBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICByZXR1cm4gW2hpdFZpZXcgYWNjZXB0c0ZpcnN0TW91c2U6ZXZlbnRd
OworfQorCistIChCT09MKXNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDooTlNFdmVu
dCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8g
dGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRj
aGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5k
IHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRo
YXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgor
ICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBOU1ZpZXcgKmhpdFZpZXcg
PSBbc2VsZiBfaGl0Vmlld0ZvckV2ZW50OmV2ZW50XTsKKyAgICBXZWJIVE1MVmlldyAqaGl0SFRN
TFZpZXcgPSBbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltzZWxmIGNsYXNzXV0gPyAoV2ViSFRNTFZp
ZXcgKiloaXRWaWV3IDogbmlsOworICAgIGlmIChoaXRIVE1MVmlldykgeworICAgICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOworICAgICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2
ZW50OmV2ZW50XSkKKyAgICAgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbaGl0
SFRNTFZpZXcgX2ZyYW1lXSkpIHsKKyAgICAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1v
dXNlRG93bkV2ZW50OmV2ZW50XTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5ldmVudE1heVN0YXJ0RHJhZyhldmVudCk7CisgICAgICAgICAgICAg
ICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpuaWxdOworICAgICAgICAgICAgfQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gW2hpdFZpZXcgc2hvdWxk
RGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OmV2ZW50XTsKK30KKworLSAodm9pZCltb3VzZURv
d246KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNw
b25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisg
ICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0
YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBw
cmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBL
aXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgUmV0YWlu
UHRyPFdlYkhUTUxWaWV3PiBwcm90ZWN0b3IgPSBzZWxmOworICAgIGlmIChbW3NlbGYgaW5wdXRD
b250ZXh0XSB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtbc2VsZiBpbnB1dENvbnRleHRd
IGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0
ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlFUzsKKworICAgIC8vIFJlY29yZCB0aGUgbW91
c2UgZG93biBwb3NpdGlvbiBzbyB3ZSBjYW4gZGV0ZXJtaW5lIGRyYWcgaHlzdGVyZXNpcy4KKyAg
ICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworCisgICAgTlNJbnB1dE1hbmFnZXIg
KmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdl
cl07CisgICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50
c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCisgICAg
ICAgIGdvdG8gZG9uZTsKKworICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0
aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKworICAgIC8vIElmIHRoZSB3ZWIgcGFnZSBoYW5k
bGVzIHRoZSBjb250ZXh0IG1lbnUgZXZlbnQgYW5kIG1lbnVGb3JFdmVudDogcmV0dXJucyBuaWws
IHdlJ2xsIGdldCBjb250cm9sIGNsaWNrIGV2ZW50cyBoZXJlLgorICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gcGFzcyB0aGVtIGFsb25nIHRvIEtIVE1MIGEgc2Vjb25kIHRpbWUuCisgICAgaWYgKCEo
W2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaykpIHsKKyAgICAgICAgX3By
aXZhdGUtPmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gTk87CisKKyAgICAgICAgLy8gRG9u
J3QgZG8gYW55IG1vdXNlb3ZlciB3aGlsZSB0aGUgbW91c2UgaXMgZG93bi4KKyAgICAgICAgW3Nl
bGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKKworICAgICAgICAvLyBMZXQgV2ViQ29y
ZSBnZXQgYSBjaGFuY2UgdG8gZGVhbCB3aXRoIHRoZSBldmVudC4gVGhpcyB3aWxsIGNhbGwgYmFj
ayB0byB1cworICAgICAgICAvLyB0byBzdGFydCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpZiBhcHBy
b3ByaWF0ZS4KKyAgICAgICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pKQorICAgICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VEb3duKGV2
ZW50KTsKKyAgICB9CisKK2RvbmU6CisgICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZl
bnQgPSBOTzsKK30KKworLSAodm9pZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilkcmFnSW1hZ2UKKyAg
ICAgICAgICAgICAgIGF0OihOU1BvaW50KWF0CisgICAgICAgICAgIG9mZnNldDooTlNTaXplKW9m
ZnNldAorICAgICAgICAgICAgZXZlbnQ6KE5TRXZlbnQgKilldmVudAorICAgICAgIHBhc3RlYm9h
cmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKKyAgICAgICAgICAgc291cmNlOihpZClzb3Vy
Y2UKKyAgICAgICAgc2xpZGVCYWNrOihCT09MKXNsaWRlQmFjaworeworICAgIEFTU0VSVChzZWxm
ID09IFtzZWxmIF90b3BIVE1MVmlld10pOworICAgIFtzdXBlciBkcmFnSW1hZ2U6ZHJhZ0ltYWdl
IGF0OmF0IG9mZnNldDpvZmZzZXQgZXZlbnQ6ZXZlbnQgcGFzdGVib2FyZDpwYXN0ZWJvYXJkIHNv
dXJjZTpzb3VyY2Ugc2xpZGVCYWNrOnNsaWRlQmFja107Cit9CisKKy0gKHZvaWQpbW91c2VEcmFn
Z2VkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVz
cG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAor
ICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJl
dGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQg
cHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBw
S2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIE5TSW5w
dXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJ
bnB1dE1hbmFnZXJdOworICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxl
TW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZl
bnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiByZXRhaW5dOworCisgICAgaWYgKCFf
cHJpdmF0ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMpIHsKKyAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgICAgIGlmIChQYWdlKiBw
YWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPm1vdXNlRHJhZ2dlZChldmVudCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBbc2VsZiByZWxlYXNlXTsKK30KKworLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFza0ZvckxvY2FsOihCT09MKWlzTG9jYWwKK3sKKyAgICBBU1NFUlQoIVtz
ZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOworICAgIAorICAgIFBhZ2Uq
IHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICBy
ZXR1cm4gTlNEcmFnT3BlcmF0aW9uTm9uZTsKKworICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Ugb3Zl
cnJpZGUgdGhlIHNvdXJjZSBwcm92aWRlZCBvcGVyYXRpb24gaGVyZT8gIFdoeSBub3QgaW4gRHJh
Z0NvbnRyb2xsZXI6OnN0YXJ0RHJhZworICAgIGlmIChwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5z
b3VyY2VEcmFnT3BlcmF0aW9uKCkgPT0gRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgICAgIHJldHVy
biBOU0RyYWdPcGVyYXRpb25HZW5lcmljIHwgTlNEcmFnT3BlcmF0aW9uQ29weTsKKworICAgIHJl
dHVybiAoTlNEcmFnT3BlcmF0aW9uKXBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNvdXJjZURyYWdP
cGVyYXRpb24oKTsKK30KKworLSAodm9pZClkcmFnZ2VkSW1hZ2U6KE5TSW1hZ2UgKilpbWFnZSBt
b3ZlZFRvOihOU1BvaW50KXNjcmVlbkxvYworeworICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXdd
IHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7CisgICAgCisgICAgTlNQb2ludCB3aW5kb3dJbWFn
ZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6c2NyZWVuTG9jXTsKKyAg
ICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93SW1hZ2VMb2M7CisgICAgCisgICAgaWYg
KFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSkpIHsKKyAgICAgICAgRHJhZ0NvbnRy
b2xsZXIqIGRyYWdDb250cm9sbGVyID0gcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKTsKKyAgICAgICAg
TlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IE5TTWFrZVBvaW50KHdpbmRvd0ltYWdlTG9jLnggKyBk
cmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLngoKSwgd2luZG93SW1hZ2VMb2MueSArIGRyYWdD
b250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueSgpKTsKKyAgICB9CisgICAgCisgICAgW1tzZWxmIF9m
cmFtZV0gX2RyYWdTb3VyY2VNb3ZlZFRvOndpbmRvd01vdXNlTG9jXTsKK30KKworLSAodm9pZClk
cmFnZ2VkSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGVuZGVkQXQ6KE5TUG9pbnQpYVBvaW50IG9w
ZXJhdGlvbjooTlNEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbgoreworICAgIEFTU0VSVCghW3NlbGYg
X3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7CisgICAgCisgICAgTlNQb2ludCB3
aW5kb3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6YVBvaW50
XTsKKyAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93SW1hZ2VMb2M7CisgICAgCisg
ICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSkpIHsKKyAgICAgICAgRHJh
Z0NvbnRyb2xsZXIqIGRyYWdDb250cm9sbGVyID0gcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKTsKKyAg
ICAgICAgd2luZG93TW91c2VMb2MgPSBOU01ha2VQb2ludCh3aW5kb3dJbWFnZUxvYy54ICsgZHJh
Z0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS54KCksIHdpbmRvd0ltYWdlTG9jLnkgKyBkcmFnQ29u
dHJvbGxlci0+ZHJhZ09mZnNldCgpLnkoKSk7CisgICAgICAgIGRyYWdDb250cm9sbGVyLT5kcmFn
RW5kZWQoKTsKKyAgICB9CisgICAgCisgICAgW1tzZWxmIF9mcmFtZV0gX2RyYWdTb3VyY2VFbmRl
ZEF0OndpbmRvd01vdXNlTG9jIG9wZXJhdGlvbjpvcGVyYXRpb25dOworICAgIAorICAgIC8vIFBy
ZXZlbnQgcXVldWVkIG1vdXNlRHJhZ2dlZCBldmVudHMgZnJvbSBjb21pbmcgYWZ0ZXIgdGhlIGRy
YWcgYW5kIGZha2UgbW91c2VVcCBldmVudC4KKyAgICBfcHJpdmF0ZS0+aWdub3JpbmdNb3VzZURy
YWdnZWRFdmVudHMgPSBZRVM7CisgICAgCisgICAgLy8gT25jZSB0aGUgZHJhZ2dpbmcgbWFjaGlu
ZXJ5IGtpY2tzIGluLCB3ZSBubyBsb25nZXIgZ2V0IG1vdXNlIGRyYWdzIG9yIHRoZSB1cCBldmVu
dC4KKyAgICAvLyBXZWJDb3JlIGV4cGVjdHMgdG8gZ2V0IGJhbGFuY2VkIGRvd24vdXAncywgc28g
d2UgbXVzdCBmYWtlIHVwIGEgbW91c2V1cC4KKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNF
dmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VVcAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjp3aW5kb3dNb3VzZUxvYworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1
cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5j
ZURhdGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVt
YmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRl
eHRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVy
OjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgIFtzZWxmIG1vdXNlVXA6ZmFrZUV2ZW50
XTsgLy8gVGhpcyB3aWxsIGFsc28gdXBkYXRlIHRoZSBtb3VzZW92ZXIgc3RhdGUuCit9CisKKy0g
KE5TQXJyYXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9uOihOU1VS
TCAqKWRyb3BEZXN0aW5hdGlvbgoreworICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBuaWw7
CisgICAgTlNVUkwgKmRyYWdnaW5nSW1hZ2VVUkwgPSBuaWw7CisgICAgCisgICAgaWYgKFdlYkNv
cmU6OkNhY2hlZEltYWdlKiB0aWZmUmVzb3VyY2UgPSBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0
YVNvdXJjZV0pIHsKKyAgICAgICAgCisgICAgICAgIFNoYXJlZEJ1ZmZlciAqYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Q2FjaGVkUmVzb3VyY2UqPih0aWZmUmVzb3VyY2UpLT5kYXRhKCk7CisgICAgICAg
IGlmICghYnVmZmVyKQorICAgICAgICAgICAgZ290byBub1Byb21pc2VkRGF0YTsKKyAgICAgICAg
CisgICAgICAgIE5TRGF0YSAqZGF0YSA9IGJ1ZmZlci0+Y3JlYXRlTlNEYXRhKCk7CisgICAgICAg
IE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gdGlmZlJlc291cmNlLT5yZXNwb25zZSgpLm5zVVJM
UmVzcG9uc2UoKTsKKyAgICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9IFtyZXNwb25zZSBVUkxdOwor
ICAgICAgICB3cmFwcGVyID0gW1tbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxl
V2l0aENvbnRlbnRzOmRhdGFdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgTlNTdHJpbmcqIGZpbGVu
YW1lID0gW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXTsKKyAgICAgICAgTlNTdHJpbmcqIHRy
dWVFeHRlbnNpb24odGlmZlJlc291cmNlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpKTsK
KyAgICAgICAgaWYgKCFbZmlsZW5hbWUgbWF0Y2hlc0V4dGVuc2lvbkVxdWl2YWxlbnQ6dHJ1ZUV4
dGVuc2lvbl0pCisgICAgICAgICAgICBmaWxlbmFtZSA9IFtbZmlsZW5hbWUgc3RyaW5nQnlBcHBl
bmRpbmdTdHJpbmc6QCIuIl0gc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6dHJ1ZUV4dGVuc2lvbl07
CisgICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKKyAgICB9
CisgICAgCitub1Byb21pc2VkRGF0YToKKyAgICAKKyAgICBpZiAoIXdyYXBwZXIpIHsKKyAgICAg
ICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKKyAg
ICAgICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKTsKKyAgICAgICAgCisgICAg
ICAgIC8vSWYgYSBsb2FkIG9jY3VycyBtaWR3YXkgdGhyb3VnaCBhIGRyYWcsIHRoZSB2aWV3IG1h
eSBiZSBkZXRhY2hlZCwgd2hpY2ggZ2l2ZXMKKyAgICAgICAgLy91cyBubyBhYmlsaXR5IHRvIGdl
dCB0byB0aGUgb3JpZ2luYWwgUGFnZSwgc28gd2UgY2Fubm90IGFjY2VzcyBhbnkgZHJhZyBzdGF0
ZQorICAgICAgICAvL0ZJWE1FOiBpcyB0aGVyZSBhIHdheSB0byByZWNvdmVyPworICAgICAgICBp
ZiAoIXBhZ2UpIAorICAgICAgICAgICAgcmV0dXJuIG5pbDsgCisgICAgICAgIAorICAgICAgICBj
b25zdCBLVVJMJiBpbWFnZVVSTCA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdnaW5nSW1h
Z2VVUkwoKTsKKyAgICAgICAgQVNTRVJUKCFpbWFnZVVSTC5pc0VtcHR5KCkpOworICAgICAgICBk
cmFnZ2luZ0ltYWdlVVJMID0gaW1hZ2VVUkw7CisKKyAgICAgICAgd3JhcHBlciA9IFtbc2VsZiBf
ZGF0YVNvdXJjZV0gX2ZpbGVXcmFwcGVyRm9yVVJMOmRyYWdnaW5nSW1hZ2VVUkxdOworICAgIH0K
KyAgICAKKyAgICBpZiAod3JhcHBlciA9PSBuaWwpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gY3JlYXRlIGltYWdlIGZpbGUuIik7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQor
CisgICAgLy8gRklYTUU6IFJlcG9ydCBhbiBlcnJvciBpZiB3ZSBmYWlsIHRvIGNyZWF0ZSBhIGZp
bGUuCisgICAgTlNTdHJpbmcgKnBhdGggPSBbW2Ryb3BEZXN0aW5hdGlvbiBwYXRoXSBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W3dyYXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdXTsKKyAg
ICBwYXRoID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2Via2l0X3BhdGhXaXRo
VW5pcXVlRmlsZW5hbWVGb3JQYXRoOnBhdGhdOworICAgIGlmICghW3dyYXBwZXIgd3JpdGVUb0Zp
bGU6cGF0aCBhdG9taWNhbGx5Ok5PIHVwZGF0ZUZpbGVuYW1lczpZRVNdKQorICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZSB2aWEgLVtOU0ZpbGVXcmFwcGVyIHdy
aXRlVG9GaWxlOmF0b21pY2FsbHk6dXBkYXRlRmlsZW5hbWVzOl0iKTsKKyAgICAKKyAgICBpZiAo
ZHJhZ2dpbmdJbWFnZVVSTCkKKyAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBfd2Via2l0X3NldE1ldGFkYXRhVVJMOltkcmFnZ2luZ0ltYWdlVVJMIGFic29sdXRlU3RyaW5n
XSByZWZlcnJlcjpuaWwgYXRQYXRoOnBhdGhdOworICAgIAorICAgIHJldHVybiBbTlNBcnJheSBh
cnJheVdpdGhPYmplY3Q6W3BhdGggbGFzdFBhdGhDb21wb25lbnRdXTsKK30KKworLSAodm9pZClt
b3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQg
cmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFu
ZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUu
IFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZl
bnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3Ig
QXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFtz
ZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOworCisgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJl
bnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07Cisg
ICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYg
W2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCisgICAgICAgIHJl
dHVybjsKKworICAgIFtzZWxmIHJldGFpbl07CisKKyAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxU
aW1lcl07CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAg
ICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAgICAgcGFnZS0+
bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5tb3VzZVVwKGV2ZW50KTsKKyAgICB9CisgICAg
W3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOworCisgICAgW3NlbGYgcmVsZWFz
ZV07Cit9CisKKy0gKHZvaWQpbW91c2VNb3ZlZE5vdGlmaWNhdGlvbjooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50Oltb
bm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJOU0V2ZW50Il1dOworfQorCisv
LyByZXR1cm5pbmcgWUVTIGZyb20gdGhpcyBtZXRob2QgaXMgdGhlIHdheSB3ZSB0ZWxsIEFwcEtp
dCB0aGF0IGl0IGlzIG9rIGZvciB0aGlzIHZpZXcKKy8vIHRvIGJlIGluIHRoZSBrZXkgbG9vcCBl
dmVuIHdoZW4gInRhYiB0byBhbGwgY29udHJvbHMiIGlzIG5vdCBvbi4KKy0gKEJPT0wpbmVlZHNQ
YW5lbFRvQmVjb21lS2V5Cit7CisgICAgcmV0dXJuIFlFUzsKK30KKworLy8gVXRpbGl0eSBmdW5j
dGlvbiB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcmV0dXJuIGFueXRoaW5nIHRocm91Z2ggdGhlIE5T
VGV4dElucHV0CisvLyBBUEkgd2hlbiBhbiBlZGl0YWJsZSByZWdpb24gaXMgbm90IGN1cnJlbnRs
eSBmb2N1c2VkLgorc3RhdGljIEJPT0wgaXNUZXh0SW5wdXQoRnJhbWUqIGNvcmVGcmFtZSkKK3sK
KyAgICByZXR1cm4gY29yZUZyYW1lICYmICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUo
KSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworfQorCitz
dGF0aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29yZUZyYW1lKQoreworICAgIHJl
dHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmll
bGQoKTsKK30KKworLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgoreworICAgIE5TU2VsZWN0
aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IE5TRGlyZWN0U2VsZWN0aW9uOworICAgIGlmICghW1tz
ZWxmIF93ZWJWaWV3XSBfaXNQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdKQorICAgICAgICBk
aXJlY3Rpb24gPSBbW3NlbGYgd2luZG93XSBrZXlWaWV3U2VsZWN0aW9uRGlyZWN0aW9uXTsKKwor
ICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOworICAgIFtzZWxmIF91cGRh
dGVGb250UGFuZWxdOworICAgIAorICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIEJPT0wgZXhw
b3NlSW5wdXRDb250ZXh0ID0gaXNUZXh0SW5wdXQoZnJhbWUpICYmICFpc0luUGFzc3dvcmRGaWVs
ZChmcmFtZSk7CisgICAgaWYgKGV4cG9zZUlucHV0Q29udGV4dCAhPSBfcHJpdmF0ZS0+ZXhwb3Nl
SW5wdXRDb250ZXh0KSB7CisgICAgICAgIF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQgPSBl
eHBvc2VJbnB1dENvbnRleHQ7CisgICAgICAgIFtOU0FwcCB1cGRhdGVXaW5kb3dzXTsKKyAgICB9
CisKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVl
KTsKKworICAgIGlmIChkaXJlY3Rpb24gPT0gTlNEaXJlY3RTZWxlY3Rpb24pCisgICAgICAgIHJl
dHVybiBZRVM7CisKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBh
Z2UpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
c2V0Rm9jdXNlZEZyYW1lKGZyYW1lKTsKKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKKyAg
ICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0SW5pdGlhbEZvY3VzKGRpcmVjdGlvbiA9PSBO
U1NlbGVjdGluZ05leHQgPyBGb2N1c0RpcmVjdGlvbkZvcndhcmQgOiBGb2N1c0RpcmVjdGlvbkJh
Y2t3YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50S2V5Ym9hcmRFdmVudCgpLmdldCgpKTsKKyAgICBy
ZXR1cm4gWUVTOworfQorCistIChCT09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCit7CisgICAgQk9P
TCByZXNpZ24gPSBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJdOworICAgIGlmIChyZXNpZ24p
IHsKKyAgICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyID0gWUVTOworICAg
ICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3Zl
TGVmdDpOT107CisgICAgICAgIGlmICghW3NlbGYgbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb25d
KSB7IAorICAgICAgICAgICAgW3NlbGYgZGVzZWxlY3RBbGxdOworICAgICAgICAgICAgaWYgKCFb
W3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1c10pCisgICAgICAg
ICAgICAgICAgW3NlbGYgY2xlYXJGb2N1c107CisgICAgICAgIH0KKyAgICAgICAgW3NlbGYgX3Vw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07CisgICAgICAgIF9wcml2YXRlLT5yZXNpZ25pbmdG
aXJzdFJlc3BvbmRlciA9IE5POworICAgIH0KKyAgICByZXR1cm4gcmVzaWduOworfQorCistICh2
b2lkKXNldERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlIAoreworICAgIEFT
U0VSVChkYXRhU291cmNlKTsKKyAgICBpZiAoX3ByaXZhdGUtPmRhdGFTb3VyY2UgIT0gZGF0YVNv
dXJjZSkgeworICAgICAgICBBU1NFUlQoIV9wcml2YXRlLT5jbG9zZWQpOworICAgICAgICBCT09M
IGhhZERhdGFTb3VyY2UgPSBfcHJpdmF0ZS0+ZGF0YVNvdXJjZSAhPSBuaWw7CisKKyAgICAgICAg
W2RhdGFTb3VyY2UgcmV0YWluXTsKKyAgICAgICAgW19wcml2YXRlLT5kYXRhU291cmNlIHJlbGVh
c2VdOworICAgICAgICBfcHJpdmF0ZS0+ZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7CisgICAgICAg
IFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291cmNlOmRhdGFTb3VyY2VdOwor
CisgICAgICAgIGlmICghaGFkRGF0YVNvdXJjZSkKKyAgICAgICAgICAgIFtzZWxmIGFkZE1vdXNl
TW92ZWRPYnNlcnZlcl07CisgICAgfQorfQorCistICh2b2lkKWRhdGFTb3VyY2VVcGRhdGVkOihX
ZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQoreworfQorCisvLyBUaGlzIGlzIGFuIG92ZXJyaWRl
IG9mIGFuIE5TQ29udHJvbCBtZXRob2QgdGhhdCB3YW50cyB0byByZXBhaW50IHRoZSBlbnRpcmUg
dmlldyB3aGVuIHRoZSB3aW5kb3cgcmVzaWducy9iZWNvbWVzCisvLyBrZXkuICBXZWJIVE1MVmll
dyBpcyBhbiBOU0NvbnRyb2wgb25seSBiZWNhdXNlIGl0IGhvc3RzIE5TQ2VsbHMgdGhhdCBhcmUg
cGFpbnRlZCBieSBXZWJDb3JlJ3MgQXF1YSB0aGVtZQorLy8gcmVuZGVyZXIgKGFuZCB0aG9zZSBj
ZWxscyBtdXN0IGJlIGhvc3RlZCBieSBhbiBlbmNsb3NpbmcgTlNDb250cm9sIGluIG9yZGVyIHRv
IHBhaW50IHByb3Blcmx5KS4KKy0gKHZvaWQpdXBkYXRlQ2VsbDooTlNDZWxsKiljZWxsCit7Cit9
CisKKy8vIERvZXMgc2V0TmVlZHNEaXNwbGF5Ok5PIGFzIGEgc2lkZSBlZmZlY3Qgd2hlbiBwcmlu
dGluZyBpcyBlbmRpbmcuCisvLyBwYWdlV2lkdGggIT0gMCBpbXBsaWVzIHdlIHdpbGwgcmVsYXlv
dXQgdG8gYSBuZXcgd2lkdGgKKy0gKHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1p
bmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOihmbG9h
dCltYXhQYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemUKK3sKKyAg
ICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAgIE5TQXJyYXkgKnN1YmZyYW1l
cyA9IFtmcmFtZSBjaGlsZEZyYW1lc107CisgICAgdW5zaWduZWQgbiA9IFtzdWJmcmFtZXMgY291
bnRdOworICAgIHVuc2lnbmVkIGk7CisgICAgZm9yIChpID0gMDsgaSAhPSBuOyArK2kpIHsKKyAg
ICAgICAgV2ViRnJhbWUgKnN1YmZyYW1lID0gW3N1YmZyYW1lcyBvYmplY3RBdEluZGV4OmldOwor
ICAgICAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtzdWJmcmFtZSBmcmFtZVZpZXddOwor
ICAgICAgICBpZiAoW1tzdWJmcmFtZSBfZGF0YVNvdXJjZV0gX2lzRG9jdW1lbnRIVE1MXSkgewor
ICAgICAgICAgICAgWyhXZWJIVE1MVmlldyAqKVtmcmFtZVZpZXcgZG9jdW1lbnRWaWV3XSBfc2V0
UHJpbnRpbmc6cHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6
MC4wZiBhZGp1c3RWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZV07CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAocHJpbnRpbmcgIT0gX3ByaXZhdGUtPnByaW50aW5nKSB7CisgICAgICAgIFtfcHJp
dmF0ZS0+cGFnZVJlY3RzIHJlbGVhc2VdOworICAgICAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0g
bmlsOworICAgICAgICBfcHJpdmF0ZS0+cHJpbnRpbmcgPSBwcmludGluZzsKKyAgICAgICAgaWYg
KCFwcmludGluZykKKyAgICAgICAgICAgIF9wcml2YXRlLT5hdm9pZGluZ1ByaW50T3JwaGFuID0g
Tk87CisgICAgICAgIFtzZWxmIHNldE5lZWRzVG9BcHBseVN0eWxlczpZRVNdOworICAgICAgICBb
c2VsZiBzZXROZWVkc0xheW91dDpZRVNdOworICAgICAgICBbc2VsZiBsYXlvdXRUb01pbmltdW1Q
YWdlV2lkdGg6bWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6bWF4UGFnZVdpZHRoIGFkanVz
dGluZ1ZpZXdTaXplOmFkanVzdFZpZXdTaXplXTsKKyAgICAgICAgaWYgKCFwcmludGluZykgewor
ICAgICAgICAgICAgLy8gQ2FuJ3QgZG8gdGhpcyB3aGVuIHN0YXJ0aW5nIHByaW50aW5nIG9yIG5l
c3RlZCBwcmludGluZyB3b24ndCB3b3JrLCBzZWUgMzQ5MTQyNy4KKyAgICAgICAgICAgIFtzZWxm
IHNldE5lZWRzRGlzcGxheTpOT107CisgICAgICAgIH0KKyAgICB9Cit9CisKKy0gKEJPT0wpY2Fu
UHJpbnRIZWFkZXJzQW5kRm9vdGVycworeworICAgIHJldHVybiBZRVM7Cit9CisKKy8vIFRoaXMg
aXMgbmVlZGVkIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgd2VidmlldyBpcyBlbWJlZGRlZCBpbiB0
aGUgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZC4KKy8vIEl0IHNob3VsZG4ndCBiZSBjYWxsZWQg
d2hlbiB0aGUgd2VidmlldyBpcyBiZWluZyBwcmludGVkIGRpcmVjdGx5LgorLSAodm9pZClhZGp1
c3RQYWdlSGVpZ2h0TmV3OihDR0Zsb2F0ICopbmV3Qm90dG9tIHRvcDooQ0dGbG9hdClvbGRUb3Ag
Ym90dG9tOihDR0Zsb2F0KW9sZEJvdHRvbSBsaW1pdDooQ0dGbG9hdClib3R0b21MaW1pdAorewor
ICAgIC8vIFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50
IHByb2Nlc3MuCisgICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3Jl
IHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLgorICAgIEJPT0wg
d2FzSW5QcmludGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7CisgICAgaWYgKCF3YXNJblBy
aW50aW5nTW9kZSkKKyAgICAgICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdp
ZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKKworICAg
IGZsb2F0IG5ld0JvdHRvbUZsb2F0ID0gKm5ld0JvdHRvbTsKKyAgICBpZiAoRnJhbWVWaWV3KiB2
aWV3ID0gY29yZShbc2VsZiBfZnJhbWVdKS0+dmlldygpKQorICAgICAgICB2aWV3LT5hZGp1c3RQ
YWdlSGVpZ2h0KCZuZXdCb3R0b21GbG9hdCwgb2xkVG9wLCBvbGRCb3R0b20sIGJvdHRvbUxpbWl0
KTsKKworI2lmZGVmIF9fTFA2NF9fCisgICAgLy8gSWYgdGhlIG5ldyBib3R0b20gaXMgZXF1YWwg
dG8gdGhlIG9sZCBib3R0b20gKHdoZW4gYm90aCBhcmUgdHJlYXRlZCBhcyBmbG9hdHMpLCB3ZSBq
dXN0IGNvcHkKKyAgICAvLyBvbGRCb3R0b20gb3ZlciB0byBuZXdCb3R0b20uIFRoaXMgcHJldmVu
dHMgcm91bmRpbmcgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4gY29udmVydGluZyBuZXdCb3R0
b21GbG9hdCB0byBhIGRvdWJsZS4KKyAgICBpZiAoZmFicygoZmxvYXQpb2xkQm90dG9tIC0gbmV3
Qm90dG9tRmxvYXQpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkpIAor
ICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOworICAgIGVsc2UKKyNlbmRpZgorICAgICAg
ICAqbmV3Qm90dG9tID0gbmV3Qm90dG9tRmxvYXQ7CisgICAgCisgICAgaWYgKCF3YXNJblByaW50
aW5nTW9kZSkgeworICAgICAgICBOU1ByaW50T3BlcmF0aW9uICpjdXJyZW5QcmludE9wZXJhdGlv
biA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dOworICAgICAgICBpZiAoY3Vy
cmVuUHJpbnRPcGVyYXRpb24pCisgICAgICAgICAgICAvLyBkZWxheSBfc2V0UHJpbnRpbmc6Tk8g
dW50aWwgYmFjayB0byBtYWluIGxvb3AgYXMgdGhpcyBtZXRob2QgbWF5IGdldCBjYWxsZWQgcmVw
ZWF0ZWRseQorICAgICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfZGVs
YXllZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6Y3VycmVuUHJpbnRPcGVyYXRpb24gYWZ0ZXJE
ZWxheTowXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gbm90IHN1cmUgaWYgdGhpcyBp
cyBhY3R1YWxseSBldmVyIGludm9rZWQsIGl0IHByb2JhYmx5IHNob3VsZG4ndCBiZQorICAgICAg
ICAgICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVt
UGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworICAgIH0KK30KKworLSAoZmxvYXQp
X2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjooTlNQcmludE9wZXJhdGlvbiAq
KXByaW50T3BlcmF0aW9uCit7CisgICAgTlNQcmludEluZm8gKnByaW50SW5mbyA9IFtwcmludE9w
ZXJhdGlvbiBwcmludEluZm9dOworICAgIHJldHVybiBbcHJpbnRJbmZvIHBhcGVyU2l6ZV0ud2lk
dGggLSBbcHJpbnRJbmZvIGxlZnRNYXJnaW5dIC0gW3ByaW50SW5mbyByaWdodE1hcmdpbl07Cit9
CisKKy0gKGZsb2F0KV9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0
aW9uICopcHJpbnRPcGVyYXRpb24KK3sKKyAgICBmbG9hdCB2aWV3V2lkdGggPSBOU1dpZHRoKFtz
ZWxmIGJvdW5kc10pOworICAgIGlmICh2aWV3V2lkdGggPCAxKSB7CisgICAgICAgIExPR19FUlJP
UigiJUAgaGFzIG5vIHdpZHRoIHdoZW4gcHJpbnRpbmciLCBzZWxmKTsKKyAgICAgICAgcmV0dXJu
IDEuMGY7CisgICAgfQorCisgICAgZmxvYXQgdXNlclNjYWxlRmFjdG9yID0gW3ByaW50T3BlcmF0
aW9uIF93ZWJfcGFnZVNldHVwU2NhbGVGYWN0b3JdOworICAgIGZsb2F0IG1heFNocmlua1RvRml0
U2NhbGVGYWN0b3IgPSAxLjBmIC8gUHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOworICAgIGZs
b2F0IHNocmlua1RvRml0U2NhbGVGYWN0b3IgPSBbc2VsZiBfYXZhaWxhYmxlUGFwZXJXaWR0aEZv
clByaW50T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXS92aWV3V2lkdGg7CisgICAgZmxvYXQgc2hy
aW5rVG9Bdm9pZE9ycGhhbiA9IF9wcml2YXRlLT5hdm9pZGluZ1ByaW50T3JwaGFuID8gKDEuMGYg
LyBQcmludGluZ09ycGhhblNocmlua0FkanVzdG1lbnQpIDogMS4wZjsKKyAgICByZXR1cm4gdXNl
clNjYWxlRmFjdG9yICogTUFYKG1heFNocmlua1RvRml0U2NhbGVGYWN0b3IsIHNocmlua1RvRml0
U2NhbGVGYWN0b3IpICogc2hyaW5rVG9Bdm9pZE9ycGhhbjsKK30KKworLy8gRklYTUUgMzQ5MTM0
NDogVGhpcyBpcyBhIHNlY3JldCBBcHBLaXQtaW50ZXJuYWwgbWV0aG9kIHRoYXQgd2UgbmVlZCB0
byBvdmVycmlkZSBpbiBvcmRlcgorLy8gdG8gZ2V0IG91ciBzaHJpbmstdG8tZml0IHRvIHdvcmsg
d2l0aCBhIGN1c3RvbSBwYWdpbmF0aW9uIHNjaGVtZS4gV2UgY2FuIGRvIHRoaXMgYmV0dGVyCisv
LyBpZiBBcHBLaXQgbWFrZXMgaXQgU1BJL0FQSS4KKy0gKENHRmxvYXQpX3Byb3ZpZGVUb3RhbFNj
YWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJh
dGlvbiAKK3sKKyAgICByZXR1cm4gW3NlbGYgX3NjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246
cHJpbnRPcGVyYXRpb25dOworfQorCisvLyBUaGlzIGlzIHVzZWQgZm9yIENhcmJvbiBwcmludGlu
Zy4gQXQgc29tZSBwb2ludCB3ZSBtaWdodCB3YW50IHRvIG1ha2UgdGhpcyBwdWJsaWMgQVBJLgor
LSAodm9pZClzZXRQYWdlV2lkdGhGb3JQcmludGluZzooZmxvYXQpcGFnZVdpZHRoCit7CisgICAg
W3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdp
ZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMg
bWluaW11bVBhZ2VXaWR0aDpwYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDpwYWdlV2lkdGggYWRq
dXN0Vmlld1NpemU6WUVTXTsKK30KKworLSAodm9pZClfZW5kUHJpbnRNb2RlCit7CisgICAgW3Nl
bGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRo
OjAuMGYgYWRqdXN0Vmlld1NpemU6WUVTXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlz
cGxheTpZRVNdOworfQorCistICh2b2lkKV9kZWxheWVkRW5kUHJpbnRNb2RlOihOU1ByaW50T3Bl
cmF0aW9uICopaW5pdGlhdGluZ09wZXJhdGlvbgoreworICAgIEFTU0VSVF9BUkcoaW5pdGlhdGlu
Z09wZXJhdGlvbiwgaW5pdGlhdGluZ09wZXJhdGlvbiAhPSBuaWwpOworICAgIE5TUHJpbnRPcGVy
YXRpb24gKmN1cnJlbnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0
aW9uXTsKKyAgICBpZiAoaW5pdGlhdGluZ09wZXJhdGlvbiA9PSBjdXJyZW50T3BlcmF0aW9uKSB7
CisgICAgICAgIC8vIFRoZSBwcmludCBvcGVyYXRpb24gaXMgc3RpbGwgdW5kZXJ3YXkuIFdlIGRv
bid0IGV4cGVjdCB0aGlzIHRvIGV2ZXIgaGFwcGVuLCBoZW5jZSB0aGUgYXNzZXJ0LCBidXQgd2Un
cmUKKyAgICAgICAgLy8gYmVpbmcgZXh0cmEgcGFyYW5vaWQgaGVyZSBzaW5jZSB0aGUgcHJpbnRp
bmcgY29kZSBpcyBzbyBmcmFnaWxlLiBEZWxheSB0aGUgY2xlYW51cAorICAgICAgICAvLyBmdXJ0
aGVyLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgW3NlbGYgcGVyZm9y
bVNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6aW5p
dGlhdGluZ09wZXJhdGlvbiBhZnRlckRlbGF5OjBdOworICAgIH0gZWxzZSBpZiAoW2N1cnJlbnRP
cGVyYXRpb24gdmlld10gPT0gc2VsZikgeworICAgICAgICAvLyBBIG5ldyBwcmludCBqb2IgaGFz
IHN0YXJ0ZWQsIGJ1dCBpdCBpcyBwcmludGluZyB0aGUgc2FtZSBXZWJIVE1MVmlldyBhZ2Fpbi4g
V2UgZG9uJ3QgZXhwZWN0CisgICAgICAgIC8vIHRoaXMgdG8gZXZlciBoYXBwZW4sIGhlbmNlIHRo
ZSBhc3NlcnQsIGJ1dCB3ZSdyZSBiZWluZyBleHRyYSBwYXJhbm9pZCBoZXJlIHNpbmNlIHRoZSBw
cmludGluZyBjb2RlIGlzIHNvCisgICAgICAgIC8vIGZyYWdpbGUuIERvIG5vdGhpbmcsIGJlY2F1
c2Ugd2UgZG9uJ3Qgd2FudCB0byBicmVhayB0aGUgcHJpbnQgam9iIGN1cnJlbnRseSBpbiBwcm9n
cmVzcywgYW5kCisgICAgICAgIC8vIHRoZSBwcmludCBqb2IgY3VycmVudGx5IGluIHByb2dyZXNz
IGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgb3duIGNsZWFudXAuCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSBwcmludCBqb2IgdGhhdCBr
aWNrZWQgb2ZmIHRoaXMgZGVsYXllZCBjYWxsIGhhcyBmaW5pc2hlZCwgYW5kIHRoaXMgdmlldyBp
cyBub3QgYmVpbmcKKyAgICAgICAgLy8gcHJpbnRlZCBhZ2Fpbi4gV2UgZXhwZWN0IHRoYXQgbm8g
b3RoZXIgcHJpbnQgam9iIGhhcyBzdGFydGVkLiBTaW5jZSB0aGlzIGRlbGF5ZWQgY2FsbCB3YXNu
J3QKKyAgICAgICAgLy8gY2FuY2VsbGVkLCBiZWdpbkRvY3VtZW50IGFuZCBlbmREb2N1bWVudCBt
dXN0IG5vdCBoYXZlIGJlZW4gY2FsbGVkLCBhbmQgd2UgbmVlZCB0byBjbGVhbiB1cAorICAgICAg
ICAvLyB0aGUgcHJpbnQgbW9kZSBoZXJlLgorICAgICAgICBBU1NFUlQoY3VycmVudE9wZXJhdGlv
biA9PSBuaWwpOworICAgICAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKKyAgICB9Cit9CisKKy8v
IFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF2YWlsYWJsZSBmb3IgcHJpbnRpbmcKKy0gKEJP
T0wpa25vd3NQYWdlUmFuZ2U6KE5TUmFuZ2VQb2ludGVyKXJhbmdlCit7CisgICAgLy8gTXVzdCBk
byB0aGlzIGV4cGxpY2l0IGRpc3BsYXkgaGVyZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHZpZXcg
bWlnaHQgcmVkaXNwbGF5IHdoaWxlIHRoZSBwcmludAorICAgIC8vIHNoZWV0IHdhcyB1cCwgdXNp
bmcgcHJpbnRlciBmb250cyAoYW5kIGxvb2tpbmcgZGlmZmVyZW50KS4KKyAgICBbc2VsZiBkaXNw
bGF5SWZOZWVkZWRdOworICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5Ok5PXTsKKyAg
ICAKKyAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhlIGxheW91
dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQKKyAgICAvLyBhY2NvcmRpbmcg
dG8gdGhlIHBhcGVyIHNpemUKKyAgICBmbG9hdCBtaW5MYXlvdXRXaWR0aCA9IDAuMGY7CisgICAg
ZmxvYXQgbWF4TGF5b3V0V2lkdGggPSAwLjBmOworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIGlm
ICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkp
IHsKKyAgICAgICAgZmxvYXQgcGFwZXJXaWR0aCA9IFtzZWxmIF9hdmFpbGFibGVQYXBlcldpZHRo
Rm9yUHJpbnRPcGVyYXRpb246W05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl1dOwor
ICAgICAgICBtaW5MYXlvdXRXaWR0aCA9IHBhcGVyV2lkdGggKiBQcmludGluZ01pbmltdW1TaHJp
bmtGYWN0b3I7CisgICAgICAgIG1heExheW91dFdpZHRoID0gcGFwZXJXaWR0aCAqIFByaW50aW5n
TWF4aW11bVNocmlua0ZhY3RvcjsKKyAgICB9CisgICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBt
aW5pbXVtUGFnZVdpZHRoOm1pbkxheW91dFdpZHRoIG1heGltdW1QYWdlV2lkdGg6bWF4TGF5b3V0
V2lkdGggYWRqdXN0Vmlld1NpemU6WUVTXTsgLy8gd2lsbCByZWxheW91dAorICAgIE5TUHJpbnRP
cGVyYXRpb24gKnByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJh
dGlvbl07CisgICAgLy8gQ2VydGFpbiB0eXBlcyBvZiBlcnJvcnMsIGluY2x1ZGluZyBpbnZhbGlk
IHBhZ2UgcmFuZ2VzLCBjYW4gY2F1c2UgYmVnaW5Eb2N1bWVudCBhbmQKKyAgICAvLyBlbmREb2N1
bWVudCB0byBiZSBza2lwcGVkIGFmdGVyIHdlJ3ZlIHB1dCBvdXJzZWx2ZXMgaW4gcHJpbnQgbW9k
ZSAoc2VlIDQxNDU5MDUpLiBJbiB0aG9zZSBjYXNlcworICAgIC8vIHdlIG5lZWQgdG8gZ2V0IG91
dCBvZiBwcmludCBtb2RlIHdpdGhvdXQgcmVseWluZyBvbiBhbnkgbW9yZSBjYWxsYmFja3MgZnJv
bSB0aGUgcHJpbnRpbmcgbWVjaGFuaXNtLgorICAgIC8vIElmIHdlIGdldCBhcyBmYXIgYXMgYmVn
aW5Eb2N1bWVudCB3aXRob3V0IHRyb3VibGUsIHRoZW4gdGhpcyBkZWxheWVkIHJlcXVlc3Qgd2ls
bCBiZSBjYW5jZWxsZWQuCisgICAgLy8gSWYgbm90IGNhbmNlbGxlZCwgdGhpcyBkZWxheWVkIGNh
bGwgd2lsbCBiZSBpbnZva2VkIGluIHRoZSBuZXh0IHBhc3MgdGhyb3VnaCB0aGUgbWFpbiBldmVu
dCBsb29wLAorICAgIC8vIHdoaWNoIGlzIGFmdGVyIGJlZ2luRG9jdW1lbnQgYW5kIGVuZERvY3Vt
ZW50IHdvdWxkIGJlIGNhbGxlZC4KKyAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9y
KF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDpwcmludE9wZXJhdGlvbiBhZnRlckRl
bGF5OjBdOworICAgIFtbc2VsZiBfd2ViVmlld10gX2FkanVzdFByaW50aW5nTWFyZ2luc0Zvckhl
YWRlckFuZEZvb3Rlcl07CisgICAgCisgICAgLy8gVGhlcmUgaXMgYSB0aGVvcmV0aWNhbCBjaGFu
Y2UgdGhhdCBzb21lb25lIGNvdWxkIGRvIHNvbWUgZHJhd2luZyBiZXR3ZWVuIGhlcmUgYW5kIGVu
ZERvY3VtZW50LAorICAgIC8vIGlmIHNvbWV0aGluZyBjYXVzZWQgc2V0TmVlZHNEaXNwbGF5IGFm
dGVyIHRoaXMgcG9pbnQuIElmIHNvLCBpdCdzIG5vdCBhIGJpZyB0cmFnZWR5LCBiZWNhdXNlCisg
ICAgLy8geW91J2Qgc2ltcGx5IHNlZSB0aGUgcHJpbnRlciBmb250cyBvbiBzY3JlZW4uIEFzIG9m
IHRoaXMgd3JpdGluZywgdGhpcyBkb2VzIG5vdCBoYXBwZW4gd2l0aCBTYWZhcmkuCisKKyAgICBy
YW5nZS0+bG9jYXRpb24gPSAxOworICAgIGZsb2F0IHRvdGFsU2NhbGVGYWN0b3IgPSBbc2VsZiBf
c2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJhdGlvbl07CisgICAgZmxvYXQg
dXNlclNjYWxlRmFjdG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJfcGFnZVNldHVwU2NhbGVGYWN0
b3JdOworICAgIFtfcHJpdmF0ZS0+cGFnZVJlY3RzIHJlbGVhc2VdOworICAgIGZsb2F0IGZ1bGxQ
YWdlSGVpZ2h0ID0gZmxvb3JmKFtzZWxmIF9jYWxjdWxhdGVQcmludEhlaWdodF0vdG90YWxTY2Fs
ZUZhY3Rvcik7CisgICAgTlNBcnJheSAqbmV3UGFnZVJlY3RzID0gW1tzZWxmIF9mcmFtZV0gX2Nv
bXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3Rvcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhlaWdodF07CisgICAgCisgICAg
Ly8gQXBwS2l0IGdldHMgYWxsIG1lc3NlZCB1cCBpZiB5b3UgZ2l2ZSBpdCBhIHplcm8tbGVuZ3Ro
IHBhZ2UgY291bnQgKHNlZSAzNTc2MzM0KSwgc28gaWYgd2UKKyAgICAvLyBoaXQgdGhhdCBjYXNl
IHdlJ2xsIHBhc3MgYWxvbmcgYSBkZWdlbmVyYXRlIDEgcGl4ZWwgc3F1YXJlIHRvIHByaW50LiBU
aGlzIHdpbGwgcHJpbnQKKyAgICAvLyBhIGJsYW5rIHBhZ2UgKHdpdGggY29ycmVjdC1sb29raW5n
IGhlYWRlciBhbmQgZm9vdGVyIGlmIHRoYXQgb3B0aW9uIGlzIG9uKSwgd2hpY2ggbWF0Y2hlcwor
ICAgIC8vIHRoZSBiZWhhdmlvciBvZiBJRSBhbmQgQ2FtaW5vIGF0IGxlYXN0LgorICAgIGlmIChb
bmV3UGFnZVJlY3RzIGNvdW50XSA9PSAwKQorICAgICAgICBuZXdQYWdlUmVjdHMgPSBbTlNBcnJh
eSBhcnJheVdpdGhPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpOU01ha2VSZWN0KDAsIDAs
IDEsIDEpXV07CisgICAgZWxzZSBpZiAoW25ld1BhZ2VSZWN0cyBjb3VudF0gPiAxKSB7CisgICAg
ICAgIC8vIElmIHRoZSBsYXN0IHBhZ2UgaXMgYSBzaG9ydCBvcnBoYW4sIHRyeSBhZGp1c3Rpbmcg
dGhlIHByaW50IGhlaWdodCBzbGlnaHRseSB0byBzZWUgaWYgdGhpcyB3aWxsIHNxdWVlemUgdGhl
CisgICAgICAgIC8vIGNvbnRlbnQgb250byBvbmUgZmV3ZXIgcGFnZS4gSWYgaXQgZG9lcywgdXNl
IHRoZSBhZGp1c3RlZCBzY2FsZS4gSWYgbm90LCB1c2UgdGhlIG9yaWdpbmFsIHNjYWxlLgorICAg
ICAgICBmbG9hdCBsYXN0UGFnZUhlaWdodCA9IE5TSGVpZ2h0KFtbbmV3UGFnZVJlY3RzIGxhc3RP
YmplY3RdIHJlY3RWYWx1ZV0pOworICAgICAgICBpZiAobGFzdFBhZ2VIZWlnaHQvZnVsbFBhZ2VI
ZWlnaHQgPCBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbykgeworICAgICAgICAgICAgTlNBcnJh
eSAqYWRqdXN0ZWRQYWdlUmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBfY29tcHV0ZVBhZ2VSZWN0c1dp
dGhQcmludFdpZHRoU2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9yCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhlaWdodCpQcmludGluZ09ycGhhblNo
cmlua0FkanVzdG1lbnRdOworICAgICAgICAgICAgLy8gVXNlIHRoZSBhZGp1c3RlZCByZWN0cyBv
bmx5IGlmIHRoZSBwYWdlIGNvdW50IHdlbnQgZG93bgorICAgICAgICAgICAgaWYgKFthZGp1c3Rl
ZFBhZ2VSZWN0cyBjb3VudF0gPCBbbmV3UGFnZVJlY3RzIGNvdW50XSkgeworICAgICAgICAgICAg
ICAgIG5ld1BhZ2VSZWN0cyA9IGFkanVzdGVkUGFnZVJlY3RzOworICAgICAgICAgICAgICAgIF9w
cml2YXRlLT5hdm9pZGluZ1ByaW50T3JwaGFuID0gWUVTOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIF9wcml2YXRlLT5wYWdlUmVjdHMgPSBbbmV3UGFnZVJlY3Rz
IHJldGFpbl07CisgICAgCisgICAgcmFuZ2UtPmxlbmd0aCA9IFtfcHJpdmF0ZS0+cGFnZVJlY3Rz
IGNvdW50XTsKKyAgICAKKyAgICByZXR1cm4gWUVTOworfQorCisvLyBSZXR1cm4gdGhlIGRyYXdp
bmcgcmVjdGFuZ2xlIGZvciBhIHBhcnRpY3VsYXIgcGFnZSBudW1iZXIKKy0gKE5TUmVjdClyZWN0
Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKK3sKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+cGFnZVJl
Y3RzIG9iamVjdEF0SW5kZXg6cGFnZSAtIDFdIHJlY3RWYWx1ZV07Cit9CisKKy0gKHZvaWQpZHJh
d1BhZ2VCb3JkZXJXaXRoU2l6ZTooTlNTaXplKWJvcmRlclNpemUKK3sKKyAgICBBU1NFUlQoTlNF
cXVhbFNpemVzKGJvcmRlclNpemUsIFtbW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlv
bl0gcHJpbnRJbmZvXSBwYXBlclNpemVdKSk7ICAgIAorICAgIFtbc2VsZiBfd2ViVmlld10gX2Ry
YXdIZWFkZXJBbmRGb290ZXJdOworfQorCistICh2b2lkKWJlZ2luRG9jdW1lbnQKK3sKKyAgICBA
dHJ5IHsKKyAgICAgICAgLy8gRnJvbSBub3cgb24gd2UnbGwgZ2V0IGEgY2hhbmNlIHRvIGNhbGwg
X2VuZFByaW50TW9kZSBpbiBlaXRoZXIgYmVnaW5Eb2N1bWVudCBvcgorICAgICAgICAvLyBlbmRE
b2N1bWVudCwgc28gd2UgY2FuIGNhbmNlbCB0aGUgImp1c3QgaW4gY2FzZSIgcGVuZGluZyBjYWxs
LgorICAgICAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFy
Z2V0OnNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0OltOU1ByaW50T3Bl
cmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dXTsKKyAgICAgICAgW3N1cGVyIGJlZ2luRG9jdW1lbnRd
OworICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKKyAgICAgICAg
Ly8gRXhjZXB0aW9uIGR1cmluZyBbc3VwZXIgYmVnaW5Eb2N1bWVudF0gbWVhbnMgdGhhdCBlbmRE
b2N1bWVudCB3aWxsIG5vdCBnZXQgY2FsbGVkLAorICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGNs
ZWFuIHVwIG91ciAicHJpbnQgbW9kZSIgaGVyZS4KKyAgICAgICAgW3NlbGYgX2VuZFByaW50TW9k
ZV07CisgICAgfQorfQorCistICh2b2lkKWVuZERvY3VtZW50Cit7CisgICAgW3N1cGVyIGVuZERv
Y3VtZW50XTsKKyAgICAvLyBOb3RlIHNhZGx5IGF0IHRoaXMgcG9pbnQgW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSBpcyBzdGlsbCBOTyAKKyAgICBbc2Vs
ZiBfZW5kUHJpbnRNb2RlXTsKK30KKworLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2Vs
ZlByb3RlY3RvciA9IHNlbGY7CisgICAgQk9PTCBldmVudFdhc1NlbnRUb1dlYkNvcmUgPSAoX3By
aXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7CisKKyAgICBCT09MIGNhbGxTdXBlciA9IE5P
OworCisgICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFzZV07CisgICAgX3ByaXZhdGUt
PmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOworCisgICAgQk9PTCBjb21wbGV0aW9uUG9w
dXBXYXNPcGVuID0gX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyICYmIFtfcHJpdmF0ZS0+Y29tcENv
bnRyb2xsZXIgcG9wdXBXaW5kb3dJc09wZW5dOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCkpIHsKKyAg
ICAgICAgLy8gV2ViQ29yZSBwcm9jZXNzZWQgYSBrZXkgZXZlbnQsIGJhaWwgb24gYW55IHByZWV4
aXN0aW5nIGNvbXBsZXRlOiBVSQorICAgICAgICBpZiAoY29tcGxldGlvblBvcHVwV2FzT3BlbikK
KyAgICAgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdl
OllFUyBtb3ZlTGVmdDpOT107CisgICAgfSBlbHNlIGlmICghX3ByaXZhdGUtPmNvbXBDb250cm9s
bGVyIHx8ICFbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGZpbHRlcktleURvd246ZXZlbnRdKSB7
CisgICAgICAgIC8vIE5vdCBjb25zdW1lZCBieSBjb21wbGV0ZTogcG9wdXAgd2luZG93CisgICAg
ICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3Zl
TGVmdDpOT107CisgICAgICAgIGNhbGxTdXBlciA9IFlFUzsKKyAgICB9CisgICAgaWYgKGNhbGxT
dXBlcikKKyAgICAgICAgW3N1cGVyIGtleURvd246ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAg
W05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNdOworfQorCistICh2b2lkKWtl
eVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVz
cG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAor
ICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJl
dGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQg
cHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBw
S2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIEJPT0wg
ZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQp
OworCisgICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoY29yZUZy
YW1lICYmICFldmVudFdhc1NlbnRUb1dlYkNvcmUpCisgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKyAgICBlbHNlCisgICAgICAgIFtzdXBlciBrZXlV
cDpldmVudF07Cit9CisKKy0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICopZXZlbnQKK3sK
KyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdp
bGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2
ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVs
ZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNp
bmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCBy
ZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUpCisgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOworICAgIAorICAgIFJldGFp
blB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7CisKKyAgICB1bnNpZ25lZCBz
aG9ydCBrZXlDb2RlID0gW2V2ZW50IGtleUNvZGVdOworCisgICAgLy9Eb24ndCBtYWtlIGFuIGV2
ZW50IGZyb20gdGhlIG51bSBsb2NrIGFuZCBmdW5jdGlvbiBrZXlzCisgICAgaWYgKGNvcmVGcmFt
ZSAmJiBrZXlDb2RlICE9IDAgJiYga2V5Q29kZSAhPSAxMCAmJiBrZXlDb2RlICE9IDYzKSB7Cisg
ICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9h
cmRFdmVudChldmVudCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBb
c3VwZXIgZmxhZ3NDaGFuZ2VkOmV2ZW50XTsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQoreworICAgIGlmIChbYXR0cmlidXRl
TmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkg
eworICAgICAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVl
XTsKKyAgICAgICAgaWYgKGFjY1RyZWUpCisgICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0OmFjY1RyZWVdOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBy
ZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGVOYW1lXTsK
K30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnQKK3sKKyAgICBpZCBhY2NU
cmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKKyAgICBpZiAoYWNjVHJl
ZSkKKyAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50
XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5T
UG9pbnQpcG9pbnQKK3sKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2li
aWxpdHlUcmVlXTsKKyAgICBpZiAoYWNjVHJlZSkgeworICAgICAgICBOU1BvaW50IHdpbmRvd0Nv
b3JkID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpwb2ludF07CisgICAgICAg
IHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpbc2VsZiBjb252ZXJ0UG9pbnQ6
d2luZG93Q29vcmQgZnJvbVZpZXc6bmlsXV07CisgICAgfQorICAgIHJldHVybiBzZWxmOworfQor
CistIChpZClfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcK
K3sKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsK
KyAgICBpZiAoIWFjY1RyZWUpCisgICAgICAgIHJldHVybiBzZWxmOworICAgIGlkIHBhcmVudCA9
IFthY2NUcmVlIF9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3VidmlldzpzdWJ2aWV3XTsKKyAgICBp
ZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAgcmV0dXJuIHBhcmVudDsKK30K
KworLSAodm9pZCljZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOihpZClzZW5kZXIKK3sKKyAg
ICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFs
aWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOworfQorCistIChOU0RhdGEgKilfc2VsZWN0aW9u
U3RhcnRGb250QXR0cmlidXRlc0FzUlRGCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJ4IgorICAgICAgICBhdHRyaWJ1
dGVzOmNvcmVGcmFtZSA/IGNvcmVGcmFtZS0+Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFy
dCgpIDogbmlsXTsKKyAgICBOU0RhdGEgKmRhdGEgPSBbc3RyaW5nIFJURkZyb21SYW5nZTpOU01h
a2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOworICAg
IFtzdHJpbmcgcmVsZWFzZV07CisgICAgcmV0dXJuIGRhdGE7Cit9CisKKy0gKE5TRGljdGlvbmFy
eSAqKV9mb250QXR0cmlidXRlc0Zyb21Gb250UGFzdGVib2FyZAoreworICAgIE5TUGFzdGVib2Fy
ZCAqZm9udFBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpOU0Zv
bnRQYm9hcmRdOworICAgIGlmIChmb250UGFzdGVib2FyZCA9PSBuaWwpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgTlNEYXRhICpkYXRhID0gW2ZvbnRQYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5T
Rm9udFBib2FyZFR5cGVdOworICAgIGlmIChkYXRhID09IG5pbCB8fCBbZGF0YSBsZW5ndGhdID09
IDApCisgICAgICAgIHJldHVybiBuaWw7CisgICAgLy8gTlNUZXh0VmlldyBkb2VzIHNvbWV0aGlu
ZyBtb3JlIGVmZmljaWVudCBieSBwYXJzaW5nIHRoZSBhdHRyaWJ1dGVzIG9ubHksIGJ1dCB0aGF0
J3Mgbm90IGF2YWlsYWJsZSBpbiBBUEkuCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcg
PSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOmRhdGEgZG9jdW1lbnRB
dHRyaWJ1dGVzOk5VTExdIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAoc3RyaW5nID09IG5pbCB8fCBb
c3RyaW5nIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW3N0
cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMSldOworfQorCistIChE
T01DU1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGUKK3sKKyAgICByZXR1cm4gW1tbc2Vs
ZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uXTsKK30KKwor
LSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAqKWNvbG9yCit7CisgICAgTlND
b2xvciAqcmdiQ29sb3IgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNl
UkdCQ29sb3JTcGFjZV07CisgICAgLy8gRklYTUU6IElmIGNvbG9yIGlzIG5vbi1uaWwgYW5kIHJn
YkNvbG9yIGlzIG5pbCwgdGhhdCBtZWFucyB3ZSBnb3Qgc29tZSBraW5kCisgICAgLy8gb2YgZmFu
Y3kgY29sb3IgdGhhdCBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gUkdCLiBDaGFuZ2luZyB0aGF0IHRv
ICJ0cmFuc3BhcmVudCIKKyAgICAvLyBtaWdodCBub3QgYmUgZ3JlYXQsIGJ1dCBpdCdzIHByb2Jh
Ymx5IE9LLgorICAgIGlmIChyZ2JDb2xvciA9PSBuaWwpCisgICAgICAgIHJldHVybiBAInRyYW5z
cGFyZW50IjsKKyAgICBmbG9hdCByID0gW3JnYkNvbG9yIHJlZENvbXBvbmVudF07CisgICAgZmxv
YXQgZyA9IFtyZ2JDb2xvciBncmVlbkNvbXBvbmVudF07CisgICAgZmxvYXQgYiA9IFtyZ2JDb2xv
ciBibHVlQ29tcG9uZW50XTsKKyAgICBmbG9hdCBhID0gW3JnYkNvbG9yIGFscGhhQ29tcG9uZW50
XTsKKyAgICBpZiAoYSA9PSAwKQorICAgICAgICByZXR1cm4gQCJ0cmFuc3BhcmVudCI7CisgICAg
aWYgKHIgPT0gMCAmJiBnID09IDAgJiYgYiA9PSAwICYmIGEgPT0gMSkKKyAgICAgICAgcmV0dXJu
IEAiYmxhY2siOworICAgIGlmIChyID09IDEgJiYgZyA9PSAxICYmIGIgPT0gMSAmJiBhID09IDEp
CisgICAgICAgIHJldHVybiBAIndoaXRlIjsKKyAgICAvLyBGSVhNRTogTG90cyBtb3JlIG5hbWVk
IGNvbG9ycy4gTWF5YmUgd2UgY291bGQgdXNlIHRoZSB0YWJsZSBpbiBXZWJDb3JlPworICAgIGlm
IChhID09IDEpCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJn
YiglLjBmLCUuMGYsJS4wZikiLCByICogMjU1LCBnICogMjU1LCBiICogMjU1XTsKKyAgICByZXR1
cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2JhKCUuMGYsJS4wZiwlLjBmLCVmKSIs
IHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFdOworfQorCistIChOU1N0cmluZyAqKV9zaGFk
b3dBc1N0cmluZzooTlNTaGFkb3cgKilzaGFkb3cKK3sKKyAgICBpZiAoc2hhZG93ID09IG5pbCkK
KyAgICAgICAgcmV0dXJuIEAibm9uZSI7CisgICAgTlNTaXplIG9mZnNldCA9IFtzaGFkb3cgc2hh
ZG93T2Zmc2V0XTsKKyAgICBmbG9hdCBibHVyUmFkaXVzID0gW3NoYWRvdyBzaGFkb3dCbHVyUmFk
aXVzXTsKKyAgICBpZiAob2Zmc2V0LndpZHRoID09IDAgJiYgb2Zmc2V0LmhlaWdodCA9PSAwICYm
IGJsdXJSYWRpdXMgPT0gMCkKKyAgICAgICAgcmV0dXJuIEAibm9uZSI7CisgICAgTlNDb2xvciAq
Y29sb3IgPSBbc2hhZG93IHNoYWRvd0NvbG9yXTsKKyAgICBpZiAoY29sb3IgPT0gbmlsKQorICAg
ICAgICByZXR1cm4gQCJub25lIjsKKyAgICAvLyBGSVhNRTogSGFuZGxlIG5vbi1pbnRlZ3JhbCB2
YWx1ZXMgaGVyZT8KKyAgICBpZiAoYmx1clJhZGl1cyA9PSAwKQorICAgICAgICByZXR1cm4gW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlLjBmcHggJS4wZnB4IiwgW3NlbGYgX2NvbG9y
QXNTdHJpbmc6Y29sb3JdLCBvZmZzZXQud2lkdGgsIG9mZnNldC5oZWlnaHRdOworICAgIHJldHVy
biBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICUuMGZweCAlLjBmcHggJS4wZnB4Iiwg
W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdLCBvZmZzZXQud2lkdGgsIG9mZnNldC5oZWlnaHQs
IGJsdXJSYWRpdXNdOworfQorCistIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJv
bUZvbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0aW9uYXJ5Cit7CisgICAgRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07CisKKyAgICBOU0Nv
bG9yICpjb2xvciA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0
dHJpYnV0ZU5hbWVdOworICAgIFtzdHlsZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W3NlbGYgX2NvbG9y
QXNTdHJpbmc6Y29sb3JdXTsKKworICAgIE5TRm9udCAqZm9udCA9IFtkaWN0aW9uYXJ5IG9iamVj
dEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoIWZvbnQpIHsKKyAgICAgICAg
W3N0eWxlIHNldEZvbnRGYW1pbHk6QCJIZWx2ZXRpY2EiXTsKKyAgICAgICAgW3N0eWxlIHNldEZv
bnRTaXplOkAiMTJweCJdOworICAgICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpAIm5vcm1hbCJd
OworICAgICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOkAibm9ybWFsIl07CisgICAgfSBlbHNlIHsK
KyAgICAgICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFu
YWdlcl07CisgICAgICAgIC8vIEZJWE1FOiBOZWVkIG1vcmUgc29waGlzdGljYXRlZCBlc2NhcGlu
ZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxlIGZhbWlseSBuYW1lcworICAgICAgICAvLyB3aXRo
IGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUgcXVvdGUgb3IgYmFja3NsYXNoIGluIHRoZWlyIG5hbWVz
LgorICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWlseTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIiclQCciLCBbZm9udCBmYW1pbHlOYW1lXV1dOworICAgICAgICBbc3R5bGUgc2V0Rm9udFNp
emU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlMC5mcHgiLCBbZm9udCBwb2ludFNpemVd
XV07CisgICAgICAgIC8vIEZJWE1FOiBNYXAgdG8gdGhlIGVudGlyZSByYW5nZSBvZiBDU1Mgd2Vp
Z2h0IHZhbHVlcy4KKyAgICAgICAgaWYgKFtmbSB3ZWlnaHRPZkZvbnQ6Zm9udF0gPj0gTUlOX0JP
TERfV0VJR0hUKQorICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6QCJib2xkIl07Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAibm9ybWFsIl07
CisgICAgICAgIGlmIChbZm0gdHJhaXRzT2ZGb250OmZvbnRdICYgTlNJdGFsaWNGb250TWFzaykK
KyAgICAgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6QCJpdGFsaWMiXTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRTdHlsZTpAIm5vcm1hbCJdOworICAgIH0KKwor
ICAgIGNvbG9yID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07CisgICAgW3N0eWxlIHNldENvbG9yOmNvbG9yID8gW3NlbGYgX2NvbG9yQXNT
dHJpbmc6Y29sb3JdIDogKE5TU3RyaW5nICopQCJibGFjayJdOworCisgICAgTlNTaGFkb3cgKnNo
YWRvdyA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOwor
ICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OltzZWxmIF9zaGFkb3dBc1N0cmluZzpzaGFkb3ddXTsK
KworICAgIGludCBzdHJpa2V0aHJvdWdoSW50ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpO
U1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKKworICAgIGludCBz
dXBlcnNjcmlwdEludCA9IFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0
dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKKyAgICBpZiAoc3VwZXJzY3JpcHRJbnQgPiAwKQorICAg
ICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1cGVyIl07CisgICAgZWxzZSBpZiAoc3Vw
ZXJzY3JpcHRJbnQgPCAwKQorICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1YiJd
OworICAgIGVsc2UKKyAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJiYXNlbGluZSJd
OworICAgIGludCB1bmRlcmxpbmVJbnQgPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TVW5k
ZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgLy8gRklYTUU6IFVuZGVy
bGluZSB3aW5zIGhlcmUgaWYgd2UgaGF2ZSBib3RoIChzZWUgYnVnIDM3OTA0NDMpLgorICAgIGlm
IChzdHJpa2V0aHJvdWdoSW50ID09IE5TVW5kZXJsaW5lU3R5bGVOb25lICYmIHVuZGVybGluZUlu
dCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKKyAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAi
LWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHByaW9yaXR5
OkAiIl07CisgICAgZWxzZSBpZiAodW5kZXJsaW5lSW50ID09IE5TVW5kZXJsaW5lU3R5bGVOb25l
KQorICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1p
bi1lZmZlY3QiIHZhbHVlOkAibGluZS10aHJvdWdoIiBwcmlvcml0eTpAIiJdOworICAgIGVsc2UK
KyAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4t
ZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6QCIiXTsKKworICAgIHJldHVybiBz
dHlsZTsKK30KKworLSAodm9pZClfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOihET01DU1NTdHlsZURl
Y2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgor
eworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZVRvU2VsZWN0aW9uKGNvcmUoc3R5bGUp
LCB1bmRvQWN0aW9uKTsKK30KKworLSAodm9pZClfYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0
aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KEVkaXRB
Y3Rpb24pdW5kb0FjdGlvbgoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlQYXJhZ3JhcGhT
dHlsZVRvU2VsZWN0aW9uKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9uKTsKK30KKworLSAoQk9PTClf
aGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBBU1NFUlQo
W3NlbGYgX3dlYlZpZXddKTsKKyAgICBpZiAoIVtbW3NlbGYgX3dlYlZpZXddIHByZWZlcmVuY2Vz
XSByZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzXSkKKyAgICAgICAgcmV0dXJuIE5P
OworICAgIAorICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAgICAgICByZXR1cm4gTk87Cisg
ICAgCisgICAgaWYgKChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0RldmljZUluZGVwZW5kZW50
TW9kaWZpZXJGbGFnc01hc2spICE9IE5TQ29tbWFuZEtleU1hc2spCisgICAgICAgIHJldHVybiBO
TzsKKyAgICAKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW2V2ZW50IGNoYXJhY3RlcnNdOworICAg
IGlmIChbc3RyaW5nIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJiIl0gPT0gTlNPcmRlcmVkU2Ft
ZSkgeworICAgICAgICBbc2VsZiBleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6IlRvZ2dsZUJvbGQi
XTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYgKFtzdHJpbmcgY2FzZUluc2Vu
c2l0aXZlQ29tcGFyZTpAImkiXSA9PSBOU09yZGVyZWRTYW1lKSB7CisgICAgICAgIFtzZWxmIGV4
ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZToiVG9nZ2xlSXRhbGljIl07CisgICAgICAgIHJldHVybiBZ
RVM7CisgICAgfQorICAgIAorICAgIHJldHVybiBOTzsKK30KKworLSAoQk9PTClwZXJmb3JtS2V5
RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0
aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29w
LCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQg
b25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50
IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0
IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAg
ICBpZiAoW3NlbGYgX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDpldmVudF0pCisgICAgICAgIHJl
dHVybiBZRVM7CisgICAgCisgICAgQk9PTCBldmVudFdhc1NlbnRUb1dlYkNvcmUgPSAoX3ByaXZh
dGUtPmtleURvd25FdmVudCA9PSBldmVudCk7CisgICAgQk9PTCByZXQgPSBOTzsKKworICAgIFtf
cHJpdmF0ZS0+a2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5rZXlEb3duRXZl
bnQgPSBbZXZlbnQgcmV0YWluXTsKKyAgICAKKyAgICBbc2VsZiByZXRhaW5dOworCisgICAgLy8g
UGFzcyBjb21tYW5kLWtleSBjb21ib3MgdGhyb3VnaCBXZWJDb3JlIGlmIHRoZXJlIGlzIGEga2V5
IGJpbmRpbmcgYXZhaWxhYmxlIGZvcgorICAgIC8vIHRoaXMgZXZlbnQuIFRoaXMgbGV0cyB3ZWIg
cGFnZXMgaGF2ZSBhIGNyYWNrIGF0IGludGVyY2VwdGluZyBjb21tYW5kLW1vZGlmaWVkIGtleXBy
ZXNzZXMuCisgICAgLy8gQnV0IGRvbid0IGRvIGl0IGlmIHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVk
IHRoZSBldmVudC4KKyAgICAvLyBQcmVzc2luZyBFc2MgcmVzdWx0cyBpbiBhIGZha2UgZXZlbnQg
YmVpbmcgc2VudCAtIGRvbid0IHBhc3MgaXQgdG8gV2ViQ29yZS4KKyAgICBpZiAoIWV2ZW50V2Fz
U2VudFRvV2ViQ29yZSAmJiBldmVudCA9PSBbTlNBcHAgY3VycmVudEV2ZW50XSAmJiBzZWxmID09
IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXSkKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgICAgICByZXQgPSBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKworICAgIGlmICghcmV0KQorICAgICAgICByZXQg
PSBbc3VwZXIgcGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOworCisgICAgW3NlbGYgcmVsZWFz
ZV07CisgICAgCisgICAgcmV0dXJuIHJldDsKK30KKworLSAodm9pZCljb3B5Rm9udDooaWQpc2Vu
ZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gUHV0IFJURiB3aXRoIGZvbnQg
YXR0cmlidXRlcyBvbiB0aGUgcGFzdGVib2FyZC4KKyAgICAvLyBNYXliZSBsYXRlciB3ZSBzaG91
bGQgYWRkIGEgcGFzdGVib2FyZCB0eXBlIHRoYXQgY29udGFpbnMgQ1NTIHRleHQgZm9yICJuYXRp
dmUiIGNvcHkgYW5kIHBhc3RlIGZvbnQuCisgICAgTlNQYXN0ZWJvYXJkICpmb250UGFzdGVib2Fy
ZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRm9udFBib2FyZF07CisgICAg
W2ZvbnRQYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNG
b250UGJvYXJkVHlwZV0gb3duZXI6bmlsXTsKKyAgICBbZm9udFBhc3RlYm9hcmQgc2V0RGF0YTpb
c2VsZiBfc2VsZWN0aW9uU3RhcnRGb250QXR0cmlidXRlc0FzUlRGXSBmb3JUeXBlOk5TRm9udFBi
b2FyZFR5cGVdOworfQorCistICh2b2lkKXBhc3RlRm9udDooaWQpc2VuZGVyCit7CisgICAgQ09N
TUFORF9QUk9MT0dVRQorCisgICAgLy8gUmVhZCBSVEYgd2l0aCBmb250IGF0dHJpYnV0ZXMgZnJv
bSB0aGUgcGFzdGVib2FyZC4KKyAgICAvLyBNYXliZSBsYXRlciB3ZSBzaG91bGQgYWRkIGEgcGFz
dGVib2FyZCB0eXBlIHRoYXQgY29udGFpbnMgQ1NTIHRleHQgZm9yICJuYXRpdmUiIGNvcHkgYW5k
IHBhc3RlIGZvbnQuCisgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5
bGVGcm9tRm9udEF0dHJpYnV0ZXM6W3NlbGYgX2ZvbnRBdHRyaWJ1dGVzRnJvbUZvbnRQYXN0ZWJv
YXJkXV0gd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblBhc3RlRm9udF07Cit9CisKKy0gKHZvaWQp
cGFzdGVBc1JpY2hUZXh0OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAg
ICAvLyBTaW5jZSByaWNoIHRleHQgYWx3YXlzIGJlYXRzIHBsYWluIHRleHQgd2hlbiBib3RoIGFy
ZSBvbiB0aGUgcGFzdGVib2FyZCwgaXQncyBub3QKKyAgICAvLyBjbGVhciBob3cgdGhpcyBpcyBk
aWZmZXJlbnQgZnJvbSBwbGFpbiBvbGQgcGFzdGUuCisgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3Rl
Ym9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gYWxsb3dQbGFpblRleHQ6Tk9d
OworfQorCistIChOU0ZvbnQgKilfb3JpZ2luYWxGb250QQoreworICAgIHJldHVybiBbW05TRm9u
dE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAiSGVsdmV0aWNhIiB0
cmFpdHM6MCB3ZWlnaHQ6U1RBTkRBUkRfV0VJR0hUIHNpemU6MTAuMGZdOworfQorCistIChOU0Zv
bnQgKilfb3JpZ2luYWxGb250QgoreworICAgIHJldHVybiBbW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAiVGltZXMiIHRyYWl0czpOU0ZvbnRJdGFsaWNU
cmFpdCB3ZWlnaHQ6U1RBTkRBUkRfQk9MRF9XRUlHSFQgc2l6ZToxMi4wZl07Cit9CisKKy0gKHZv
aWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QTooTlNG
b250ICopYSBmb250QjooTlNGb250ICopYgoreworICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gd2F5
IHRvIGRpcmVjdGx5IGFzayBOU0ZvbnRNYW5hZ2VyIHdoYXQgc3R5bGUgY2hhbmdlIGl0J3MgZ29p
bmcgdG8gZG8KKyAgICAvLyB3ZSBpbnN0ZWFkIHBhc3MgdHdvICJzcGVjaW1lbiIgZm9udHMgdG8g
aXQgYW5kIGxldCBpdCBjaGFuZ2UgdGhlbS4gV2UgdGhlbiBkZWR1Y2Ugd2hhdAorICAgIC8vIHN0
eWxlIGNoYW5nZSBpdCB3YXMgZG9pbmcgYnkgbG9va2luZyBhdCB3aGF0IGhhcHBlbmVkIHRvIGVh
Y2ggb2YgdGhlIHR3byBmb250cy4KKyAgICAvLyBTbyBpZiBpdCB3YXMgbWFraW5nIHRoZSB0ZXh0
IGJvbGQsIGJvdGggZm9udHMgd2lsbCBiZSBib2xkIGFmdGVyIHRoZSBmYWN0LgorCisgICAgaWYg
KGEgPT0gbmlsIHx8IGIgPT0gbmlsKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0ZvbnRNYW5h
Z2VyICpmbSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKworICAgIE5TRm9u
dCAqb2EgPSBbc2VsZiBfb3JpZ2luYWxGb250QV07CisKKyAgICBOU1N0cmluZyAqYUZhbWlseU5h
bWUgPSBbYSBmYW1pbHlOYW1lXTsKKyAgICBOU1N0cmluZyAqYkZhbWlseU5hbWUgPSBbYiBmYW1p
bHlOYW1lXTsKKworICAgIGludCBhUG9pbnRTaXplID0gKGludClbYSBwb2ludFNpemVdOworICAg
IGludCBiUG9pbnRTaXplID0gKGludClbYiBwb2ludFNpemVdOworCisgICAgaW50IGFXZWlnaHQg
PSBbZm0gd2VpZ2h0T2ZGb250OmFdOworICAgIGludCBiV2VpZ2h0ID0gW2ZtIHdlaWdodE9mRm9u
dDpiXTsKKworICAgIEJPT0wgYUlzSXRhbGljID0gKFtmbSB0cmFpdHNPZkZvbnQ6YV0gJiBOU0l0
YWxpY0ZvbnRNYXNrKSAhPSAwOworICAgIEJPT0wgYklzSXRhbGljID0gKFtmbSB0cmFpdHNPZkZv
bnQ6Yl0gJiBOU0l0YWxpY0ZvbnRNYXNrKSAhPSAwOworCisgICAgaWYgKFthRmFtaWx5TmFtZSBp
c0VxdWFsVG9TdHJpbmc6YkZhbWlseU5hbWVdKSB7CisgICAgICAgIE5TU3RyaW5nICpmYW1pbHlO
YW1lRm9yQ1NTID0gYUZhbWlseU5hbWU7CisKKyAgICAgICAgLy8gVGhlIGZhbWlseSBuYW1lIG1h
eSBub3QgYmUgc3BlY2lmaWMgZW5vdWdoIHRvIGdldCB1cyB0aGUgZm9udCBzcGVjaWZpZWQuCisg
ICAgICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBvbmx5IHdheSB0byBnZXQgZXhhY3RseSB3aGF0
IHdlIGFyZSBsb29raW5nIGZvciBpcyB0byB1c2UKKyAgICAgICAgLy8gdGhlIFBvc3RzY3JpcHQg
bmFtZS4KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIGZvbnQgdGhlIHNhbWUgd2F5IHRo
ZSByZW5kZXJpbmcgY29kZSB3b3VsZCBsYXRlciBpZiBpdCBlbmNvdW50ZXJlZCB0aGlzIENTUy4K
KyAgICAgICAgTlNGb250VHJhaXRNYXNrIHRyYWl0cyA9IGFJc0l0YWxpYyA/IE5TRm9udEl0YWxp
Y1RyYWl0IDogMDsKKyAgICAgICAgTlNGb250ICpmb3VuZEZvbnQgPSBXZWJDb3JlRmluZEZvbnQo
YUZhbWlseU5hbWUsIHRyYWl0cywgYVdlaWdodCwgYVBvaW50U2l6ZSk7CisKKyAgICAgICAgLy8g
SWYgd2UgZG9uJ3QgZmluZCBhIGZvbnQgd2l0aCB0aGUgc2FtZSBQb3N0c2NyaXB0IG5hbWUsIHRo
ZW4gd2UnbGwgaGF2ZSB0byB1c2UgdGhlCisgICAgICAgIC8vIFBvc3RzY3JpcHQgbmFtZSB0byBt
YWtlIHRoZSBDU1Mgc3BlY2lmaWMgZW5vdWdoLgorICAgICAgICBpZiAoIVtbZm91bmRGb250IGZv
bnROYW1lXSBpc0VxdWFsVG9TdHJpbmc6W2EgZm9udE5hbWVdXSkKKyAgICAgICAgICAgIGZhbWls
eU5hbWVGb3JDU1MgPSBbYSBmb250TmFtZV07CisKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgbW9y
ZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2FudCB0byBoYW5kbGUgZmFtaWx5
IG5hbWVzCisgICAgICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtlIHNpbmdsZSBxdW90ZSBvciBi
YWNrc2xhc2ggaW4gdGhlaXIgbmFtZXMuCisgICAgICAgIFtzdHlsZSBzZXRGb250RmFtaWx5OltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJyVAJyIsIGZhbWlseU5hbWVGb3JDU1NdXTsKKyAg
ICB9CisKKyAgICBpbnQgc29hID0gKGludClbb2EgcG9pbnRTaXplXTsKKyAgICBpZiAoYVBvaW50
U2l6ZSA9PSBiUG9pbnRTaXplKQorICAgICAgICBbc3R5bGUgc2V0Rm9udFNpemU6W05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIlZHB4IiwgYVBvaW50U2l6ZV1dOworICAgIGVsc2UgaWYgKGFQ
b2ludFNpemUgPCBzb2EpCisgICAgICAgIFtzdHlsZSBfc2V0Rm9udFNpemVEZWx0YTpAIi0xcHgi
XTsKKyAgICBlbHNlIGlmIChhUG9pbnRTaXplID4gc29hKQorICAgICAgICBbc3R5bGUgX3NldEZv
bnRTaXplRGVsdGE6QCIxcHgiXTsKKworICAgIGlmIChhV2VpZ2h0ID09IGJXZWlnaHQpCisgICAg
ICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OmFXZWlnaHQgPiBNSU5fQk9MRF9XRUlHSFQgPyBAImJv
bGQiIDogQCJub3JtYWwiXTsKKworICAgIGlmIChhSXNJdGFsaWMgPT0gYklzSXRhbGljKQorICAg
ICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOmFJc0l0YWxpYyA/IEAiaXRhbGljIiA6ICBAIm5vcm1h
bCJdOworfQorCistIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUZvbnRNYW5h
Z2VyT3BlcmF0aW9uCit7CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2Vs
ZiBfZW1wdHlTdHlsZV07CisKKyAgICBOU0ZvbnRNYW5hZ2VyICpmbSA9IFtOU0ZvbnRNYW5hZ2Vy
IHNoYXJlZEZvbnRNYW5hZ2VyXTsKKworICAgIE5TRm9udCAqb2EgPSBbc2VsZiBfb3JpZ2luYWxG
b250QV07CisgICAgTlNGb250ICpvYiA9IFtzZWxmIF9vcmlnaW5hbEZvbnRCXTsgICAgCisgICAg
W3NlbGYgX2FkZFRvU3R5bGU6c3R5bGUgZm9udEE6W2ZtIGNvbnZlcnRGb250Om9hXSBmb250Qjpb
Zm0gY29udmVydEZvbnQ6b2JdXTsKKworICAgIHJldHVybiBzdHlsZTsKK30KKworLSAodm9pZClj
aGFuZ2VGb250OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBbc2Vs
ZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Gb250TWFuYWdlck9wZXJh
dGlvbl0gd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblNldEZvbnRdOworfQorCistIChET01DU1NT
dHlsZURlY2xhcmF0aW9uICopX3N0eWxlRm9yQXR0cmlidXRlQ2hhbmdlOihpZClzZW5kZXIKK3sK
KyAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsK
KworICAgIE5TU2hhZG93ICpzaGFkb3cgPSBbW05TU2hhZG93IGFsbG9jXSBpbml0XTsKKyAgICBb
c2hhZG93IHNldFNoYWRvd09mZnNldDpOU01ha2VTaXplKDEsIDEpXTsKKworICAgIE5TRGljdGlv
bmFyeSAqb2EgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Cisg
ICAgICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRBXSwgTlNGb250QXR0cmlidXRlTmFtZSwKKyAgICAg
ICAgbmlsXTsKKyAgICBOU0RpY3Rpb25hcnkgKm9iID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5
V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICBbTlNDb2xvciBibGFja0NvbG9yXSwgTlNCYWNr
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAorICAgICAgICBbc2VsZiBfb3JpZ2luYWxGb250Ql0s
IE5TRm9udEF0dHJpYnV0ZU5hbWUsCisgICAgICAgIFtOU0NvbG9yIHdoaXRlQ29sb3JdLCBOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCisgICAgICAgIHNoYWRvdywgTlNTaGFkb3dBdHRy
aWJ1dGVOYW1lLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0
eWxlU2luZ2xlXSwgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lLAorICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDoxXSwgTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWUsCisg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdLCBO
U1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwKKyAgICAgICAgbmlsXTsKKworICAgIFtzaGFk
b3cgcmVsZWFzZV07CisKKyNpZiAwCisKK05TT2JsaXF1ZW5lc3NBdHRyaWJ1dGVOYW1lICAgICAg
ICAvKiBmbG9hdDsgc2tldyB0byBiZSBhcHBsaWVkIHRvIGdseXBocywgZGVmYXVsdCAwOiBubyBz
a2V3ICovCisgICAgLy8gZm9udC1zdHlsZSwgYnV0IHRoYXQgaXMganVzdCBhbiBvbi1vZmYgc3dp
dGNoCisKK05TRXhwYW5zaW9uQXR0cmlidXRlTmFtZSAgICAgICAgICAvKiBmbG9hdDsgbG9nIG9m
IGV4cGFuc2lvbiBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byBnbHlwaHMsIGRlZmF1bHQgMDogbm8g
ZXhwYW5zaW9uICovCisgICAgLy8gZm9udC1zdHJldGNoPworCitOU0tlcm5BdHRyaWJ1dGVOYW1l
ICAgICAgICAgICAgICAgLyogZmxvYXQsIGFtb3VudCB0byBtb2RpZnkgZGVmYXVsdCBrZXJuaW5n
LCBpZiAwLCBrZXJuaW5nIG9mZiAqLworICAgIC8vIGxldHRlci1zcGFjaW5nPyBwcm9iYWJseSBu
b3QgZ29vZCBlbm91Z2gKKworTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWUgICAgIC8qIE5T
Q29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQgY29sb3IgKi8KK05TU3RyaWtl
dGhyb3VnaENvbG9yQXR0cmlidXRlTmFtZSAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDogc2FtZSBh
cyBmb3JlZ3JvdW5kIGNvbG9yICovCisgICAgLy8gdGV4dC1kZWNvcmF0aW9uLWNvbG9yPworCitO
U0xpZ2F0dXJlQXR0cmlidXRlTmFtZSAgICAgICAgICAgLyogaW50LCBkZWZhdWx0IDE6IGRlZmF1
bHQgbGlnYXR1cmVzLCAwOiBubyBsaWdhdHVyZXMsIDI6IGFsbCBsaWdhdHVyZXMgKi8KK05TQmFz
ZWxpbmVPZmZzZXRBdHRyaWJ1dGVOYW1lICAgICAvKiBmbG9hdCwgaW4gcG9pbnRzOyBvZmZzZXQg
ZnJvbSBiYXNlbGluZSwgZGVmYXVsdCAwICovCitOU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFtZSAg
ICAgICAgLyogZmxvYXQsIGluIHBlcmNlbnQgb2YgZm9udCBwb2ludCBzaXplLCBkZWZhdWx0IDA6
IG5vIHN0cm9rZTsgcG9zaXRpdmUgZm9yIHN0cm9rZSBhbG9uZSwgbmVnYXRpdmUgZm9yIHN0cm9r
ZSBhbmQgZmlsbCAoYSB0eXBpY2FsIHZhbHVlIGZvciBvdXRsaW5lZCB0ZXh0IHdvdWxkIGJlIDMu
MCkgKi8KK05TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0NvbG9yLCBkZWZh
dWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCisgICAgLy8gbmVlZCBleHRlbnNp
b25zPworCisjZW5kaWYKKyAgICAKKyAgICBOU0RpY3Rpb25hcnkgKmEgPSBbc2VuZGVyIGNvbnZl
cnRBdHRyaWJ1dGVzOm9hXTsKKyAgICBOU0RpY3Rpb25hcnkgKmIgPSBbc2VuZGVyIGNvbnZlcnRB
dHRyaWJ1dGVzOm9iXTsKKworICAgIE5TQ29sb3IgKmNhID0gW2Egb2JqZWN0Rm9yS2V5Ok5TQmFj
a2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgTlNDb2xvciAqY2IgPSBbYiBvYmplY3RG
b3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoY2EgPT0gY2Ip
IHsKKyAgICAgICAgW3N0eWxlIHNldEJhY2tncm91bmRDb2xvcjpbc2VsZiBfY29sb3JBc1N0cmlu
ZzpjYV1dOworICAgIH0KKworICAgIFtzZWxmIF9hZGRUb1N0eWxlOnN0eWxlIGZvbnRBOlthIG9i
amVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXSBmb250QjpbYiBvYmplY3RGb3JLZXk6TlNG
b250QXR0cmlidXRlTmFtZV1dOworCisgICAgY2EgPSBbYSBvYmplY3RGb3JLZXk6TlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBjYiA9IFtiIG9iamVjdEZvcktleTpOU0ZvcmVn
cm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChjYSA9PSBjYikgeworICAgICAgICBb
c3R5bGUgc2V0Q29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y2FdXTsKKyAgICB9CisKKyAgICBO
U1NoYWRvdyAqc2hhID0gW2Egb2JqZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07Cisg
ICAgaWYgKHNoYSkKKyAgICAgICAgW3N0eWxlIHNldFRleHRTaGFkb3c6W3NlbGYgX3NoYWRvd0Fz
U3RyaW5nOnNoYV1dOworICAgIGVsc2UgaWYgKFtiIG9iamVjdEZvcktleTpOU1NoYWRvd0F0dHJp
YnV0ZU5hbWVdID09IG5pbCkKKyAgICAgICAgW3N0eWxlIHNldFRleHRTaGFkb3c6QCJub25lIl07
CisKKyAgICBpbnQgc2EgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0
cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGludCBzYiA9IFtbYiBvYmplY3RGb3JLZXk6TlNT
dHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgaWYgKHNhID09
IHNiKSB7CisgICAgICAgIGlmIChzYSA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKKyAgICAgICAg
ICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVj
dCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOyAKKyAgICAgICAgICAgIC8vIHdlIHJlYWxs
eSBtZWFuICJubyBsaW5lLXRocm91Z2giIHJhdGhlciB0aGFuICJub25lIgorICAgICAgICBlbHNl
CisgICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9u
cy1pbi1lZmZlY3QiIHZhbHVlOkAibGluZS10aHJvdWdoIiBwcmlvcml0eTpAIiJdOworICAgICAg
ICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gImFkZCBsaW5lLXRocm91Z2giIHJhdGhlciB0aGFuICJs
aW5lLXRocm91Z2giCisgICAgfQorCisgICAgc2EgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TU3VwZXJz
Y3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgc2IgPSBbW2Igb2JqZWN0Rm9yS2V5
Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgaWYgKHNhID09IHNi
KSB7CisgICAgICAgIGlmIChzYSA+IDApCisgICAgICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxB
bGlnbjpAInN1cGVyIl07CisgICAgICAgIGVsc2UgaWYgKHNhIDwgMCkKKyAgICAgICAgICAgIFtz
dHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3ViIl07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAiYmFzZWxpbmUiXTsKKyAgICB9CisKKyAgICBpbnQg
dWEgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRW
YWx1ZV07CisgICAgaW50IHViID0gW1tiIG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0
cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGlmICh1YSA9PSB1YikgeworICAgICAgICBpZiAo
dWEgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCisgICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVy
dHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJp
b3JpdHk6QCIiXTsKKyAgICAgICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJubyB1bmRlcmxpbmUi
IHJhdGhlciB0aGFuICJub25lIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBbc3R5bGUgc2V0
UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAidW5k
ZXJsaW5lIiBwcmlvcml0eTpAIiJdOworICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gImFk
ZCB1bmRlcmxpbmUiIHJhdGhlciB0aGFuICJ1bmRlcmxpbmUiCisgICAgfQorCisgICAgcmV0dXJu
IHN0eWxlOworfQorCistICh2b2lkKWNoYW5nZUF0dHJpYnV0ZXM6KGlkKXNlbmRlcgoreworICAg
IENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3Nl
bGYgX3N0eWxlRm9yQXR0cmlidXRlQ2hhbmdlOnNlbmRlcl0gd2l0aFVuZG9BY3Rpb246RWRpdEFj
dGlvbkNoYW5nZUF0dHJpYnV0ZXNdOworfQorCistIChET01DU1NTdHlsZURlY2xhcmF0aW9uICop
X3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIERP
TUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOworCisgICAg
QVNTRVJUKFtzdHlsZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKTsKKyAgICBbc3R5bGUg
cGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6W3NlbGYgX2NvbG9yQXNTdHJpbmc6
W1tOU0NvbG9yUGFuZWwgc2hhcmVkQ29sb3JQYW5lbF0gY29sb3JdXV07CisgICAgCisgICAgcmV0
dXJuIHN0eWxlOworfQorCistIChFZGl0QWN0aW9uKV91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxX
aXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0
b3Ioc2V0QmFja2dyb3VuZENvbG9yOikpCisgICAgICAgIHJldHVybiBFZGl0QWN0aW9uU2V0QmFj
a2dyb3VuZENvbG9yOyAgICAKKyAgICByZXR1cm4gRWRpdEFjdGlvblNldENvbG9yOworfQorCist
ICh2b2lkKV9jaGFuZ2VDU1NDb2xvclVzaW5nU2VsZWN0b3I6KFNFTClzZWxlY3RvciBpblJhbmdl
OihET01SYW5nZSAqKXJhbmdlCit7CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUg
PSBbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAg
V2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICBpZiAoW1t3ZWJWaWV3IF9l
ZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRBcHBseVN0eWxl
OnN0eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOnJhbmdlXSkKKyAgICAgICAgaWYgKEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICAgICAgY29yZUZyYW1lLT5l
ZGl0b3IoKS0+YXBwbHlTdHlsZShjb3JlKHN0eWxlKSwgW3NlbGYgX3VuZG9BY3Rpb25Gcm9tQ29s
b3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxlY3Rvcl0pOworfQorCistICh2b2lkKWNoYW5nZURvY3Vt
ZW50QmFja2dyb3VuZENvbG9yOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisK
KyAgICAvLyBNaW1pY2tpbmcgTlNUZXh0VmlldywgdGhpcyBtZXRob2Qgc2V0cyB0aGUgYmFja2dy
b3VuZCBjb2xvciBmb3IgdGhlCisgICAgLy8gZW50aXJlIGRvY3VtZW50LiBUaGVyZSBpcyBubyBO
U1RleHRWaWV3IEFQSSBmb3Igc2V0dGluZyB0aGUgYmFja2dyb3VuZAorICAgIC8vIGNvbG9yIG9u
IHRoZSBzZWxlY3RlZCByYW5nZSBvbmx5LiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgY3VycmVu
dGx5CisgICAgLy8gbmV2ZXIgY2FsbGVkIGZyb20gdGhlIFVJIChzZWUgY29tbWVudCBpbiBjaGFu
Z2VDb2xvcjopLgorICAgIC8vIEZJWE1FOiB0aGlzIGFjdHVhbGx5IGhhcyBubyBlZmZlY3Qgd2hl
biBjYWxsZWQsIHByb2JhYmx5IGR1ZSB0byAzNjU0ODUwLiBfZG9jdW1lbnRSYW5nZSBzZWVtcwor
ICAgIC8vIHRvIGRvIHRoZSByaWdodCB0aGluZyBiZWNhdXNlIGl0IHdvcmtzIGluIHN0YXJ0U3Bl
YWtpbmc6LCBhbmQgSSBrbm93IHNldEJhY2tncm91bmRDb2xvcjogZG9lcyB0aGUKKyAgICAvLyBy
aWdodCB0aGluZyBiZWNhdXNlIEkgdGVzdGVkIGl0IHdpdGggW3NlbGYgX3NlbGVjdGVkUmFuZ2Vd
LgorICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IGFjdHVhbGx5IGFwcGx5IHRoZSBzdHlsZSB0byB0
aGUgZW50aXJlIHJhbmdlIGhlcmUsIGJlY2F1c2UgaXQgZW5kcyB1cCBjYWxsaW5nCisgICAgLy8g
W2ZyYW1lIF9hcHBseVN0eWxlOl0sIHdoaWNoIG9wZXJhdGVzIG9uIHRoZSBjdXJyZW50IHNlbGVj
dGlvbi4gVG8gbWFrZSB0aGlzIHdvcmsgcmlnaHQsIHdlJ2xsCisgICAgLy8gbmVlZCB0byBzYXZl
IG9mZiB0aGUgc2VsZWN0aW9uLCB0ZW1wb3JhcmlseSBzZXQgaXQgdG8gdGhlIGVudGlyZSByYW5n
ZSwgbWFrZSB0aGUgY2hhbmdlLCB0aGVuCisgICAgLy8gcmVzdG9yZSB0aGUgb2xkIHNlbGVjdGlv
bi4KKyAgICBbc2VsZiBfY2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVjdG9yOkBzZWxlY3RvcihzZXRC
YWNrZ3JvdW5kQ29sb3I6KSBpblJhbmdlOltzZWxmIF9kb2N1bWVudFJhbmdlXV07Cit9CisKKy0g
KHZvaWQpY2hhbmdlQ29sb3I6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKwor
ICAgIC8vIEZJWE1FOiBpbiBOU1RleHRWaWV3LCB0aGlzIG1ldGhvZCBjYWxscyBjaGFuZ2VEb2N1
bWVudEJhY2tncm91bmRDb2xvcjogd2hlbiBhCisgICAgLy8gcHJpdmF0ZSBjYWxsIGhhcyBlYXJs
aWVyIGJlZW4gbWFkZSBieSBbTlNGb250Rm9udEVmZmVjdHNCb3ggY2hhbmdlQ29sb3I6XSwgc2Vl
IDM2NzQ0OTMuIAorICAgIC8vIEFwcEtpdCB3aWxsIGhhdmUgdG8gYmUgcmV2aXNlZCB0byBhbGxv
dyB0aGlzIHRvIHdvcmsgd2l0aCBhbnl0aGluZyB0aGF0IGlzbid0IGFuIAorICAgIC8vIE5TVGV4
dFZpZXcuIEhvd2V2ZXIsIHRoaXMgbWlnaHQgbm90IGJlIHJlcXVpcmVkIGZvciBUaWdlciwgc2lu
Y2UgdGhlIGJhY2tncm91bmQtY29sb3IgCisgICAgLy8gY2hhbmdpbmcgYm94IGluIHRoZSBmb250
IHBhbmVsIGRvZXNuJ3Qgd29yayBpbiBNYWlsICgzNjc0NDgxKSwgdGhvdWdoIGl0IGRvZXMgaW4g
VGV4dEVkaXQuCisgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVG
cm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0Q29sb3I6KV0gCisgICAgICAg
ICAgICAgICAgICB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uU2V0Q29sb3JdOworfQorCistICh2
b2lkKV9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgaWYg
KCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZyYW1lICpmcmFt
ZSA9IFtzZWxmIF9mcmFtZV07CisgICAgW3NlbGYgc2VsZWN0V29yZDpuaWxdOworICAgIE5TU3Ry
aW5nICp3b3JkID0gW1tmcmFtZSBfc2VsZWN0ZWRTdHJpbmddIHBlcmZvcm1TZWxlY3RvcjpzZWxl
Y3Rvcl07CisgICAgLy8gRklYTUU6IERvZXMgdGhpcyBuZWVkIGEgZGlmZmVyZW50IGFjdGlvbiBj
b250ZXh0IG90aGVyIHRoYW4gInR5cGVkIj8KKyAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDp3b3JkIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25UeXBl
ZF0pCisgICAgICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OndvcmQgc2VsZWN0
UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOk5PXTsKK30KKworLSAodm9pZCl1cHBlcmNhc2VX
b3JkOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBbc2VsZiBfY2hh
bmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKHVwcGVyY2FzZVN0cmluZyldOworfQor
CistICh2b2lkKWxvd2VyY2FzZVdvcmQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9H
VUUKKworICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IobG93
ZXJjYXNlU3RyaW5nKV07Cit9CisKKy0gKHZvaWQpY2FwaXRhbGl6ZVdvcmQ6KGlkKXNlbmRlcgor
eworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhT
ZWxlY3RvcjpAc2VsZWN0b3IoY2FwaXRhbGl6ZWRTdHJpbmcpXTsKK30KKworLSAodm9pZCljb21w
bGV0ZTooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYgKCFbc2Vs
ZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIV9wcml2YXRlLT5jb21wQ29u
dHJvbGxlcikKKyAgICAgICAgX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyID0gW1tXZWJUZXh0Q29t
cGxldGVDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEhUTUxWaWV3OnNlbGZdOworICAgIFtfcHJp
dmF0ZS0+Y29tcENvbnRyb2xsZXIgZG9Db21wbGV0aW9uXTsKK30KKworLSAodm9pZCljaGVja1Nw
ZWxsaW5nOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZygpOworfQorCistICh2b2lkKXNob3dH
dWVzc1BhbmVsOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBOU1Nw
ZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJd
OworICAgIGlmICghY2hlY2tlcikgeworICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVj
a2VyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgTlNQYW5lbCAqc3BlbGxp
bmdQYW5lbCA9IFtjaGVja2VyIHNwZWxsaW5nUGFuZWxdOworI2lmbmRlZiBCVUlMRElOR19PTl9U
SUdFUgorICAgIC8vIFBvc3QtVGlnZXIsIHRoaXMgbWVudSBpdGVtIGlzIGEgc2hvdy9oaWRlIHRv
Z2dsZSwgdG8gbWF0Y2ggQXBwS2l0LiBMZWF2ZSBUaWdlciBiZWhhdmlvciBhbG9uZQorICAgIC8v
IHRvIG1hdGNoIHJlc3Qgb2YgT1MgWC4KKyAgICBpZiAoW3NwZWxsaW5nUGFuZWwgaXNWaXNpYmxl
XSkgeworICAgICAgICBbc3BlbGxpbmdQYW5lbCBvcmRlck91dDpzZW5kZXJdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcodHJ1ZSk7CisgICAgW3NwZWxsaW5nUGFuZWwgb3JkZXJGcm9udDpz
ZW5kZXJdOworfQorCistICh2b2lkKV9jaGFuZ2VTcGVsbGluZ1RvV29yZDooTlNTdHJpbmcgKilu
ZXdXb3JkCit7CisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIERvbid0IGNvcnJlY3QgdG8gZW1wdHkgc3RyaW5nLiAgKEFwcEtpdCBjaGVja2VkIHRo
aXMsIHdlIG1pZ2h0IGFzIHdlbGwgdG9vLikKKyAgICBpZiAoIVtOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdKSB7CisgICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoW25ld1dvcmQgaXNFcXVh
bFRvU3RyaW5nOkAiIl0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChbc2VsZiBfc2hvdWxk
UmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2Vy
dEFjdGlvblBhc3RlZF0pCisgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQ6bmV3V29yZCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsK
K30KKworLSAodm9pZCljaGFuZ2VTcGVsbGluZzooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9Q
Uk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZVNwZWxsaW5nVG9Xb3JkOltbc2VuZGVyIHNlbGVj
dGVkQ2VsbF0gc3RyaW5nVmFsdWVdXTsKK30KKworLSAodm9pZClwZXJmb3JtRmluZFBhbmVsQWN0
aW9uOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICAvLyBJbXBsZW1l
bnRpbmcgdGhpcyB3aWxsIHByb2JhYmx5IHJlcXVpcmUgY29weWluZyBhbGwgb2YgTlNGaW5kUGFu
ZWwuaCBhbmQgLm0uCisgICAgLy8gV2UgbmVlZCAqYWxtb3N0KiB0aGUgc2FtZSB0aGluZyBhcyBB
cHBLaXQsIGJ1dCBub3QgcXVpdGUuCisgICAgTE9HX0VSUk9SKCJ1bmltcGxlbWVudGVkIik7Cit9
CisKKy0gKHZvaWQpc3RhcnRTcGVha2luZzooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9M
T0dVRQorCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAgICBET01SYW5n
ZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CisgICAgaWYgKCFyYW5nZSB8fCBbcmFu
Z2UgY29sbGFwc2VkXSkKKyAgICAgICAgcmFuZ2UgPSBbc2VsZiBfZG9jdW1lbnRSYW5nZV07Cisg
ICAgW05TQXBwIHNwZWFrU3RyaW5nOltmcmFtZSBfc3RyaW5nRm9yUmFuZ2U6cmFuZ2VdXTsKK30K
KworLSAodm9pZClzdG9wU3BlYWtpbmc6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9H
VUUKKworICAgIFtOU0FwcCBzdG9wU3BlYWtpbmc6c2VuZGVyXTsKK30KKworLSAodm9pZCl0b2dn
bGVCYXNlV3JpdGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dV
RQorCisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVG
cmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24g
PSBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247CisgICAgc3dpdGNoIChjb3JlRnJhbWUtPmJh
c2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSkgeworICAgICAgICBjYXNlIE5T
V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6CisgICAgICAgICAgICBkaXJlY3Rp
b24gPSBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb247CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgLy8gVGhlIHdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCBtZXRob2Qgd2ls
bCBuZXZlciByZXR1cm4gIm5hdHVyYWwiLiBJdAorICAgICAgICAvLyB3aWxsIGFsd2F5cyByZXR1
cm4gYSBjb25jcmV0ZSBkaXJlY3Rpb24uIFNvLCBrZWVwIHRoZSBjb21waWxlciBoYXBweSwgYW5k
IGFzc2VydCBub3QgcmVhY2hlZC4KKyAgICAgICAgY2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1
cmFsOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJhc2VXcml0aW5nRGlyZWN0aW9u
KGRpcmVjdGlvbik7Cit9CisKKy0gKHZvaWQpY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb246KGlk
KXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICghW3NlbGYgX2NhbkVk
aXRdKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRp
bmdEaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxOU1dyaXRpbmdEaXJlY3Rpb24+KFtzZW5kZXIgdGFn
XSk7CisgICAgCisgICAgLy8gV2UgZGlzYWJsZSB0aGUgbWVudSBpdGVtIHRoYXQgcGVyZm9ybXMg
dGhpcyBhY3Rpb24gYmVjYXVzZSB3ZSBjYW4ndCBpbXBsZW1lbnQKKyAgICAvLyBOU1dyaXRpbmdE
aXJlY3Rpb25OYXR1cmFsJ3MgYmVoYXZpb3IgdXNpbmcgQ1NTLgorICAgIEFTU0VSVCh3cml0aW5n
RGlyZWN0aW9uICE9IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpOworCisgICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVk
aXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbih3cml0aW5nRGlyZWN0aW9uID09IE5TV3Jp
dGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uIDog
UmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsKK30KKworc3RhdGljIEJPT0wgd3JpdGluZ0Rp
cmVjdGlvbktleUJpbmRpbmdzRW5hYmxlZCgpCit7CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgcmV0dXJuIFlFUzsK
KyNlbHNlCisgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0
YW5kYXJkVXNlckRlZmF1bHRzXTsKKyAgICByZXR1cm4gW2RlZmF1bHRzIGJvb2xGb3JLZXk6QCJO
U0FsbG93c0Jhc2VXcml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3MiXSB8fCBbZGVmYXVsdHMgYm9v
bEZvcktleTpAIkFwcGxlVGV4dERpcmVjdGlvbiJdOworI2VuZGlmCit9CisKKy0gKHZvaWQpX2No
YW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86KE5TV3JpdGluZ0RpcmVjdGlvbilkaXJlY3Rpb24K
K3sKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3Rh
dGljIEJPT0wgYmluZGluZ3NFbmFibGVkID0gd3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzRW5h
YmxlZCgpOworCisgICAgaWYgKCFiaW5kaW5nc0VuYWJsZWQpIHsKKyAgICAgICAgTlNCZWVwKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJhc2VX
cml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdo
dCA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVj
dGlvbik7Cit9CisKKy0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6
KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9jaGFuZ2VC
YXNlV3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0XTsKK30K
KworLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDooaWQpc2VuZGVy
Cit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZUJhc2VXcml0aW5n
RGlyZWN0aW9uVG86TlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnRdOworfQorCisjaWYgZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
LSAodm9pZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvTFRSOihpZClzZW5kZXIKK3sKKyAg
ICBbc2VsZiBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDpzZW5kZXJdOworfQor
CistICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG9SVEw6KGlkKXNlbmRlcgorewor
ICAgIFtzZWxmIG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OnNlbmRlcl07Cit9
CisjZW5kaWYKKworLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsOihpZClz
ZW5kZXIKK3sKKyAgICBMT0dfRVJST1IoIlNlbnQgZnJvbSAlQC4iLCBzZW5kZXIpOworfQorCisj
aWYgMAorCisvLyBDU1MgZG9lcyBub3QgaGF2ZSBhIHdheSB0byBzcGVjaWZ5IGFuIG91dGxpbmUg
Zm9udCwgd2hpY2ggbWF5IG1ha2UgdGhpcyBkaWZmaWN1bHQgdG8gaW1wbGVtZW50LgorLy8gTWF5
YmUgYSBzcGVjaWFsIGNhc2Ugb2YgdGV4dC1zaGFkb3c/CistICh2b2lkKW91dGxpbmU6KGlkKXNl
bmRlcjsKKworLy8gVGhpcyBpcyBwYXJ0IG9mIHRhYmxlIHN1cHBvcnQsIHdoaWNoIG1heSBiZSBp
biBOU1RleHRWaWV3IGZvciBUaWdlci4KKy8vIEl0J3MgcHJvYmFibHkgc2ltcGxlIHRvIGRvIHRo
ZSBlcXVpdmFsZW50IHRoaW5nIGZvciBXZWJLaXQuCistICh2b2lkKWluc2VydFRhYmxlOihpZClz
ZW5kZXI7CisKKy8vIFRoaXMgY291bGQgYmUgaW1wb3J0YW50LgorLSAodm9pZCl0b2dnbGVUcmFk
aXRpb25hbENoYXJhY3RlclNoYXBlOihpZClzZW5kZXI7CisKKy8vIEknbSBub3Qgc3VyZSB3aGF0
IHRoZSBlcXVpdmFsZW50cyBvZiB0aGVzZSBpbiB0aGUgd2ViIHdvcmxkIGFyZS4KKy0gKHZvaWQp
aW5zZXJ0TGluZVNlcGFyYXRvcjooaWQpc2VuZGVyOworLSAodm9pZClpbnNlcnRQYWdlQnJlYWs6
KGlkKXNlbmRlcjsKKworLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90IGltcGxlbWVudGVkIGluIE5T
VGV4dFZpZXcgeWV0IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZy4KKy0gKHZvaWQpY2hhbmdl
Q2FzZU9mTGV0dGVyOihpZClzZW5kZXI7CistICh2b2lkKXRyYW5zcG9zZVdvcmRzOihpZClzZW5k
ZXI7CisKKyNlbmRpZgorCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKy8vIE92ZXJyaWRl
IHRoaXMgc28gdGhhdCBBcHBLaXQgd2lsbCBzZW5kIHVzIGFycm93IGtleXMgYXMga2V5IGRvd24g
ZXZlbnRzIHNvIHdlIGNhbgorLy8gc3VwcG9ydCB0aGVtIHZpYSB0aGUga2V5IGJpbmRpbmdzIG1l
Y2hhbmlzbS4KKy0gKEJPT0wpX3dhbnRzS2V5RG93bkZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICBib29sIGhhdmVXZWJDb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworCisg
ICAgLy8gSWYgd2UgaGF2ZSBhIGZyYW1lLCBvdXIga2V5RG93biBtZXRob2Qgd2lsbCBoYW5kbGUg
a2V5IGJpbmRpbmdzIGFmdGVyIHNlbmRpbmcKKyAgICAvLyB0aGUgZXZlbnQgdGhyb3VnaCB0aGUg
RE9NLCBzbyBhc2sgQXBwS2l0IG5vdCB0byBkbyBpdHMgZWFybHkgc3BlY2lhbCBrZXkgYmluZGlu
ZworICAgIC8vIG1hcHBpbmcuIElmIHdlIGRvbid0IGhhdmUgYSBmcmFtZSwganVzdCBsZXQgdGhp
bmdzIHdvcmsgdGhlIG5vcm1hbCB3YXkgd2l0aG91dAorICAgIC8vIGEga2V5RG93bi4KKyAgICBy
ZXR1cm4gaGF2ZVdlYkNvcmVGcmFtZTsKK30KKworI2Vsc2UKKworLy8gU3VwZXItaGFjayBhbGVy
dC4KKy8vIEFsbCB0aGlzIGNvZGUgYWNjb21wbGlzaGVzIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBf
d2FudHNLZXlEb3duRm9yRXZlbnQgbWV0aG9kIGFib3ZlLgorCisvLyBSZXR1cm5zIGEgc2VsZWN0
b3Igb25seSBpZiBjYWxsZWQgd2hpbGU6CisvLyAgIDEpIGZpcnN0IHJlc3BvbmRlciBpcyBzZWxm
CisvLyAgIDIpIGhhbmRsaW5nIGEga2V5IGRvd24gZXZlbnQKKy8vICAgMykgbm90IHlldCBpbnNp
ZGUga2V5RG93bjogbWV0aG9kCisvLyAgIDQpIGtleSBpcyBhbiBhcnJvdyBrZXkKKy8vIFRoZSBz
ZWxlY3RvciBpcyB0aGUgb25lIHRoYXQgZ2V0cyBzZW50IGJ5IC1bTlNXaW5kb3cgX3Byb2Nlc3NL
ZXlib2FyZFVJS2V5XSBmb3IgdGhpcyBrZXkuCistIChTRUwpX2Fycm93S2V5RG93bkV2ZW50U2Vs
ZWN0b3JJZlByZXByb2Nlc3NpbmcKK3sKKyAgICBOU1dpbmRvdyAqdyA9IFtzZWxmIHdpbmRvd107
CisgICAgaWYgKFt3IGZpcnN0UmVzcG9uZGVyXSAhPSBzZWxmKQorICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICBOU0V2ZW50ICplID0gW3cgY3VycmVudEV2ZW50XTsKKyAgICBpZiAoW2UgdHlwZV0g
IT0gTlNLZXlEb3duKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZSA9PSBfcHJpdmF0
ZS0+a2V5RG93bkV2ZW50KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBOU1N0cmluZyAqcyA9
IFtlIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107CisgICAgaWYgKFtzIGxlbmd0aF0gPT0g
MCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3dpdGNoIChbcyBjaGFyYWN0ZXJBdEluZGV4
OjBdKSB7CisgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlvbktleToKKyAgICAgICAgICAg
IHJldHVybiBAc2VsZWN0b3IobW92ZURvd246KTsKKyAgICAgICAgY2FzZSBOU0xlZnRBcnJvd0Z1
bmN0aW9uS2V5OgorICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlTGVmdDopOworICAg
ICAgICBjYXNlIE5TUmlnaHRBcnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgcmV0dXJuIEBz
ZWxlY3Rvcihtb3ZlUmlnaHQ6KTsKKyAgICAgICAgY2FzZSBOU1VwQXJyb3dGdW5jdGlvbktleToK
KyAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZVVwOik7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgTk8gaW5z
dGVhZCBvZiBZRVMgaWYgY2FsbGVkIG9uIHRoZSBzZWxlY3RvciB0aGF0IHRoZQorLy8gX2Fycm93
S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcgbWV0aG9kIHJldHVybnMuCisvLyBU
aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpbnNpZGUgLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJk
VUlLZXldLAorLy8gYW5kIHRvZ2V0aGVyIHdpdGggdGhlIGNoYW5nZSBiZWxvdyBzaG91bGQgY2F1
c2UgdGhhdCBtZXRob2QKKy8vIHRvIHJldHVybiBOTyByYXRoZXIgdGhhbiBoYW5kbGluZyB0aGUg
a2V5LgorLy8gQWxzbyBzZXQgYSAxLXNob3QgZmxhZyBmb3IgdGhlIG5leHRSZXNwb25kZXIgY2hl
Y2sgYmVsb3cuCistIChCT09MKXJlc3BvbmRzVG9TZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7Cisg
ICAgaWYgKCFbc3VwZXIgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkKKyAgICAgICAgcmV0
dXJuIE5POworICAgIFNFTCBhcnJvd0tleVNlbGVjdG9yID0gW3NlbGYgX2Fycm93S2V5RG93bkV2
ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmddOworICAgIGlmIChzZWxlY3RvciAhPSBhcnJvd0tl
eVNlbGVjdG9yKQorICAgICAgICByZXR1cm4gWUVTOworICAgIF9wcml2YXRlLT5uZXh0UmVzcG9u
ZGVyRGlzYWJsZWRPbmNlID0gWUVTOworICAgIHJldHVybiBOTzsKK30KKworLy8gUmV0dXJucyBu
aWwgaW5zdGVhZCBvZiB0aGUgbmV4dCByZXNwb25kZXIgaWYgY2FsbGVkIHdoZW4gdGhlCisvLyBv
bmUtc2hvdCBmbGFnIGlzIHNldCwgYW5kIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVw
cm9jZXNzaW5nCisvLyByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIE5VTEwuIFRoaXMgc2hv
dWxkIG9ubHkgaGFwcGVuIGluc2lkZQorLy8gLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJkVUlL
ZXldIGFuZCB0b2dldGhlciB3aXRoIHRoZSBjaGFuZ2UgYWJvdmUKKy8vIHNob3VsZCBjYXVzZSB0
aGF0IG1ldGhvZCB0byByZXR1cm4gTk8gcmF0aGVyIHRoYW4gaGFuZGxpbmcgdGhlIGtleS4KKy0g
KE5TUmVzcG9uZGVyICopbmV4dFJlc3BvbmRlcgoreworICAgIEJPT0wgZGlzYWJsZWQgPSBfcHJp
dmF0ZS0+bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZTsKKyAgICBfcHJpdmF0ZS0+bmV4dFJlc3Bv
bmRlckRpc2FibGVkT25jZSA9IE5POworICAgIGlmIChkaXNhYmxlZCAmJiBbc2VsZiBfYXJyb3dL
ZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZ10gIT0gTlVMTCkKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICByZXR1cm4gW3N1cGVyIG5leHRSZXNwb25kZXJdOworfQorCisjZW5kaWYK
KworLSAodm9pZClfdXBkYXRlQ29udHJvbFRpbnRzCit7CisgICAgRnJhbWUqIGZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAg
IHJldHVybjsKKyAgICB2aWV3LT51cGRhdGVDb250cm9sVGludHMoKTsKK30KKworLy8gRGVzcGl0
ZSBpdHMgbmFtZSwgdGhpcyBpcyBjYWxsZWQgYXQgZGlmZmVyZW50IHRpbWVzIHRoYW4gd2luZG93
RGlkQmVjb21lS2V5IGlzLgorLy8gSXQgdGFrZXMgaW50byBhY2NvdW50IGFsbCB0aGUgb3RoZXIg
ZmFjdG9ycyB0aGF0IGRldGVybWluZSB3aGVuIE5TQ2VsbCBkcmF3cworLy8gd2l0aCBkaWZmZXJl
bnQgdGludHMsIHNvIGl0J3MgdGhlIHJpZ2h0IGNhbGwgdG8gdXNlIGZvciBjb250cm9sIHRpbnRz
LiBXZSdkIHByZWZlcgorLy8gdG8gZG8gdGhpcyB3aXRoIEFQSS4gPHJkYXI6Ly9wcm9ibGVtLzUx
MzY3NjA+CistICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGUKK3sKKyAgICBpZiAocHRocmVh
ZF9tYWluX25wKCkpCisgICAgICAgIFtzZWxmIF91cGRhdGVDb250cm9sVGludHNdOworICAgIGVs
c2UKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3Rvcihf
dXBkYXRlQ29udHJvbFRpbnRzKSB3aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKKwor
ICAgIFtzdXBlciBfd2luZG93Q2hhbmdlZEtleVN0YXRlXTsKK30KKworLSAodm9pZClvdGhlck1v
dXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKFtldmVudCBidXR0b25OdW1iZXJd
ID09IDIpCisgICAgICAgIFtzZWxmIG1vdXNlRG93bjpldmVudF07CisgICAgZWxzZQorICAgICAg
ICBbc3VwZXIgb3RoZXJNb3VzZURvd246ZXZlbnRdOworfQorCistICh2b2lkKW90aGVyTW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0g
PT0gMikKKyAgICAgICAgW3NlbGYgbW91c2VEcmFnZ2VkOmV2ZW50XTsKKyAgICBlbHNlCisgICAg
ICAgIFtzdXBlciBvdGhlck1vdXNlRHJhZ2dlZDpldmVudF07Cit9CisKKy0gKHZvaWQpb3RoZXJN
b3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0g
PT0gMikKKyAgICAgICAgW3NlbGYgbW91c2VVcDpldmVudF07CisgICAgZWxzZQorICAgICAgICBb
c3VwZXIgb3RoZXJNb3VzZVVwOmV2ZW50XTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
TlNBcnJheSAoV2ViSFRNTFZpZXcpCisKKy0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJm
b3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3QKK3sKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3Ig
PSBbc2VsZiBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnZp
ZXc7CisgICAgd2hpbGUgKCh2aWV3ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkK
KyAgICAgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcgY2xhc3NdXSkKKyAgICAgICAgICAgIFt2aWV3IHBlcmZvcm1TZWxlY3RvcjpzZWxlY3RvciB3
aXRoT2JqZWN0Om9iamVjdF07CisjZW5kaWYKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViSFRNTFZpZXcgKFdlYkludGVybmFsKQorCistICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkCit7
CisgICAgW3NlbGYgX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdlcl07CisgICAgW3NlbGYg
X3VwZGF0ZUZvbnRQYW5lbF07CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRTdGFydE5ld0tpbGxS
aW5nU2VxdWVuY2UodHJ1ZSk7Cit9CisKKy0gKHZvaWQpX3VwZGF0ZUZvbnRQYW5lbAoreworICAg
IC8vIEZJWE1FOiBOU1RleHRWaWV3IGJhaWxzIG91dCBpZiBiZWNvbWluZyBvciByZXNpZ25pbmcg
Zmlyc3QgcmVzcG9uZGVyLCBmb3Igd2hpY2ggaXQgaGFzIGl2YXIgZmxhZ3MuIE5vdAorICAgIC8v
IHN1cmUgaWYgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhci4KKyAgICAKKyAgICBpZiAo
IVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5TV2luZG93ICp3
aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIC8vIEZJWE1FOiBpcyB0aGlzIGZpcnN0LXJlc3Bv
bmRlciBjaGVjayBjb3JyZWN0PyBXaGF0IGhhcHBlbnMgaWYgYSBzdWJmcmFtZSBpcyBlZGl0YWJs
ZSBhbmQgaXMgZmlyc3QgcmVzcG9uZGVyPworICAgIGlmIChbTlNBcHAga2V5V2luZG93XSAhPSB3
aW5kb3cgfHwgW3dpbmRvdyBmaXJzdFJlc3BvbmRlcl0gIT0gc2VsZikKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNlOworICAgIE5TRm9udCAqZm9u
dCA9IG5pbDsKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
IHsKKyAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmZCA9IGNvcmVGcmFtZS0+ZWRp
dG9yKCktPmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykpCisgICAgICAgICAgICBmb250
ID0gZmQtPmdldE5TRm9udCgpOworICAgIH0KKyAgICAKKworICAgIC8vIEZJWE1FOiBmb3Igbm93
LCByZXR1cm4gYSBib2d1cyBmb250IHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGUgZW1wdHkgc2VsZWN0
aW9uIGZyb20gdGhlIG5vbi1lbXB0eQorICAgIC8vIHNlbGVjdGlvbi4gV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gcmVtb3ZlIHRoaXMgb25jZSB0aGUgcmVzdCBvZiB0aGlzIGNvZGUgd29ya3MgcHJvcGVy
bHkuCisgICAgaWYgKGZvbnQgPT0gbmlsKQorICAgICAgICBmb250ID0gW3NlbGYgX2hhc1NlbGVj
dGlvbl0gPyBbTlNGb250IG1lbnVGb250T2ZTaXplOjIzXSA6IFtOU0ZvbnQgdG9vbFRpcHNGb250
T2ZTaXplOjE3XTsKKyAgICBBU1NFUlQoZm9udCAhPSBuaWwpOworCisgICAgW1tOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBzZXRTZWxlY3RlZEZvbnQ6Zm9udCBpc011bHRpcGxlOm11
bHRpcGxlRm9udHNdOworCisgICAgLy8gRklYTUU6IHdlIGRvbid0IGtlZXAgdHJhY2sgb2Ygc2Vs
ZWN0ZWQgYXR0cmlidXRlcywgb3Igc2V0IHRoZW0gb24gdGhlIGZvbnQgcGFuZWwuIFRoaXMKKyAg
ICAvLyBhcHBlYXJzIHRvIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBVSS4gRS5nLiwgdW5kZXJsaW5l
ZCB0ZXh0IGluIE1haWwgb3IgVGV4dEVkaXQgaXMKKyAgICAvLyBub3QgcmVmbGVjdGVkIGluIHRo
ZSBmb250IHBhbmVsLiBNYXliZSBzb21lZGF5IHRoaXMgd2lsbCBjaGFuZ2UuCit9CisKKy0gKEJP
T0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCit7CisgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIHNt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYm
IGNvcmVGcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7Cit9
CisKKy0gKE5TRXZlbnQgKilfbW91c2VEb3duRXZlbnQKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUt
Pm1vdXNlRG93bkV2ZW50OworfQorCistIChpZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+KV9oaWdobGln
aHRlckZvclR5cGU6KE5TU3RyaW5nKil0eXBlCit7CisgICAgcmV0dXJuIFtfcHJpdmF0ZS0+aGln
aGxpZ2h0ZXJzIG9iamVjdEZvcktleTp0eXBlXTsKK30KKworLSAoV2ViRnJhbWUgKilfZnJhbWUK
K3sKKyAgICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXTsKK30KKworLSAo
dm9pZClwYXN0ZTooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgUmV0
YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKKyAgICBSZWZQdHI8RnJh
bWU+IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+dHJ5REhUTUxQ
YXN0ZSgpKQorICAgICAgICByZXR1cm47IC8vIERIVE1MIGRpZCB0aGUgd2hvbGUgb3BlcmF0aW9u
CisgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCkpCisgICAgICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQg
Z2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93UGxhaW5UZXh0OllFU107CisgICAgZWxzZQorICAgICAg
ICBjb3JlRnJhbWUtPmVkaXRvcigpLT5wYXN0ZUFzUGxhaW5UZXh0KCk7Cit9CisKKy0gKHZvaWQp
cGFzdGVBc1BsYWluVGV4dDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisg
ICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKyAgICBbc2VsZiBfcGFz
dGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9h
cmRdXTsKK30KKworLSAodm9pZCljbG9zZUlmTm90Q3VycmVudFZpZXcKK3sKKyAgICBpZiAoW1tb
c2VsZiBfZnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSAhPSBzZWxmKQorICAgICAgICBb
c2VsZiBjbG9zZV07Cit9CisKKy0gKERPTURvY3VtZW50RnJhZ21lbnQqKV9kb2N1bWVudEZyYWdt
ZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICByZXR1
cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGluQ29u
dGV4dDpuaWwgYWxsb3dQbGFpblRleHQ6Tk9dOworfQorCisjaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCisKKy0gKEJPT0wpaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkCit7CisgICAgLy8gRklYTUUg
NDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNr
aW5nIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBoZXJlIGJlY2F1c2UK
KyAgICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisgICAg
cmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXTsKK30KKwor
LSAodm9pZClzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICAvLyBG
SVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXIt
Y2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGhlcmUgYmVj
YXVzZQorICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4K
KyAgICBbW3NlbGYgX3dlYlZpZXddIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ6ZmxhZ107Cit9
CisKKy0gKHZvaWQpdG9nZ2xlR3JhbW1hckNoZWNraW5nOihpZClzZW5kZXIKK3sKKyAgICAvLyBG
SVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXIt
Y2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGhlcmUgYmVj
YXVzZQorICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4K
KyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUdyYW1tYXJDaGVja2luZzpzZW5kZXJdOworfQor
CisKK3N0YXRpYyBDR1BvaW50IGNvcmVHcmFwaGljc1NjcmVlblBvaW50Rm9yQXBwS2l0U2NyZWVu
UG9pbnQoTlNQb2ludCBwb2ludCkKK3sKKyAgICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2NyZWVu
IHNjcmVlbnNdOworICAgIAorICAgIGlmIChbc2NyZWVucyBjb3VudF0gPT0gMCkgeworICAgICAg
ICAvLyBZb3UgY291bGQgdGhlb3JldGljYWxseSBnZXQgaGVyZSBpZiBydW5uaW5nIHdpdGggbm8g
bW9uaXRvciwgaW4gd2hpY2ggY2FzZSBpdCBkb2Vzbid0IG1hdHRlcgorICAgICAgICAvLyBtdWNo
IHdoZXJlIHRoZSAib24tc2NyZWVuIiBwb2ludCBpcy4KKyAgICAgICAgcmV0dXJuIENHUG9pbnRN
YWtlKHBvaW50LngsIHBvaW50LnkpOworICAgIH0KKyAgICAKKyAgICAvLyBGbGlwIHRoZSB5IGNv
b3JkaW5hdGUgZnJvbSB0aGUgdG9wIG9mIHRoZSBtZW51IGJhciBzY3JlZW4gLS0gc2VlIDQ2MzYz
OTAKKyAgICByZXR1cm4gQ0dQb2ludE1ha2UocG9pbnQueCwgTlNNYXhZKFtbc2NyZWVucyBvYmpl
Y3RBdEluZGV4OjBdIGZyYW1lXSkgLSBwb2ludC55KTsKK30KKworI2VuZGlmCisKKyNpZiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
KworLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOihpZClzZW5kZXIKK3sKKyAg
ICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1Nw
ZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOworICAgIGlmICghY2hlY2tlcikgeworICAg
ICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgTlNQYW5lbCAqc3Vic3RpdHV0aW9uc1BhbmVsID0gW2NoZWNrZXIgc3Vi
c3RpdHV0aW9uc1BhbmVsXTsKKyAgICBpZiAoW3N1YnN0aXR1dGlvbnNQYW5lbCBpc1Zpc2libGVd
KSB7CisgICAgICAgIFtzdWJzdGl0dXRpb25zUGFuZWwgb3JkZXJPdXQ6c2VuZGVyXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBbc3Vic3RpdHV0aW9uc1BhbmVsIG9yZGVyRnJvbnQ6c2Vu
ZGVyXTsKK30KKworLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBm
b3IgdGhpcyBsb2dpYywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRoZXNlIG1ldGhvZHMgaGVyZSBi
ZWNhdXNlCisvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisK
Ky0gKEJPT0wpc21hcnRJbnNlcnREZWxldGVFbmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBf
d2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXTsKK30KKworLSAodm9pZClzZXRTbWFy
dEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBfd2ViVmlld10g
c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2dsZVNt
YXJ0SW5zZXJ0RGVsZXRlOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2ds
ZVNtYXJ0SW5zZXJ0RGVsZXRlOnNlbmRlcl07Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0aWNRdW90
ZVN1YnN0aXR1dGlvbkVuYWJsZWQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0QXV0b21h
dGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBbW3NlbGYgX3dl
YlZpZXddIHNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDpmbGFnXTsKK30KKwor
LSAodm9pZCl0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjooaWQpc2VuZGVyCit7Cisg
ICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjpzZW5k
ZXJdOworfQorCistIChCT09MKWlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQKK3sKKyAg
ICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
XTsKK30KKworLSAodm9pZClzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDooQk9PTClm
bGFnCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihp
ZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRl
Y3Rpb246c2VuZGVyXTsKK30KKworLSAoQk9PTClpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25F
bmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6ZmxhZ107Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0
b21hdGljRGFzaFN1YnN0aXR1dGlvbjooaWQpc2VuZGVyCit7CisgICAgW1tzZWxmIF93ZWJWaWV3
XSB0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOnNlbmRlcl07Cit9CisKKy0gKEJPT0wp
aXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBf
d2ViVmlld10gaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkXTsKK30KKworLSAodm9p
ZClzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBb
W3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ6ZmxhZ107
Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXIK
K3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDpz
ZW5kZXJdOworfQorCistIChCT09MKWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxl
ZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2dsZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyCit7CisgICAgW1tzZWxmIF93ZWJW
aWV3XSB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246c2VuZGVyXTsKK30KKworI2Vu
ZGlmCisKKy0gKHZvaWQpX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51OihpZClzZW5kZXIKK3sK
KyAgICAvLyBEaWN0aW9uYXJ5IEFQSSB3aWxsIGFjY2VwdCBhIHdoaXRlc3BhY2Utb25seSBzdHJp
bmcgYW5kIGRpc3BsYXkgVUkgYXMgaWYgaXQgd2VyZSByZWFsIHRleHQsCisgICAgLy8gc28gYmFp
bCBvdXQgZWFybHkgdG8gYXZvaWQgdGhhdC4KKyAgICBpZiAoW1tbc2VsZiBzZWxlY3RlZFN0cmlu
Z10gX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZV0gbGVuZ3RoXSA9PSAwKQorICAg
ICAgICByZXR1cm47CisKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcgPSBbc2Vs
ZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIE5TUmVjdCByZWN0ID0gY29yZUZyYW1lLT5zZWxlY3Rpb25Cb3VuZHMoKTsKKworI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFth
dHRyU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLDEpXTsKKyAgICBO
U0ZvbnQgKmZvbnQgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFt
ZV07CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJlY3Qub3JpZ2luLnkgKz0gW2ZvbnQgYXNjZW5k
ZXJdOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBbc2VsZiBzaG93RGVmaW5pdGlvbkZvckF0dHJp
YnV0ZWRTdHJpbmc6YXR0clN0cmluZyBhdFBvaW50OnJlY3Qub3JpZ2luXTsKKyAgICByZXR1cm47
CisjZW5kaWYKKworICAgIC8vIFdlIHNvZnQgbGluayB0byBnZXQgdGhlIGZ1bmN0aW9uIHRoYXQg
ZGlzcGxheXMgdGhlIGRpY3Rpb25hcnkgKGVpdGhlciBwb3AtdXAgd2luZG93IG9yIGFwcCkgdG8g
YXZvaWQgdGhlIHBlcmZvcm1hbmNlCisgICAgLy8gcGVuYWx0eSBvZiBsaW5raW5nIHRvIGFub3Ro
ZXIgZnJhbWV3b3JrLiBUaGlzIGZ1bmN0aW9uIGNoYW5nZWQgc2lnbmF0dXJlIGFzIHdlbGwgYXMg
ZnJhbWV3b3JrIGJldHdlZW4gVGlnZXIgYW5kIExlb3BhcmQsCisgICAgLy8gc28gdGhlIHR3byBj
YXNlcyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIK
KyAgICB0eXBlZGVmIE9TU3RhdHVzICgqU2VydmljZVdpbmRvd1Nob3dGdW5jdGlvbikoaWQgaW5X
b3JkU3RyaW5nLCBOU1JlY3QgaW5Xb3JkQm91bmRhcnksIFVJbnQxNiBpbkxpbmVEaXJlY3Rpb24p
OworICAgIGNvbnN0IGNoYXIgKmZyYW1ld29ya1BhdGggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYW5nQW5hbHlz
aXMuZnJhbWV3b3JrL0xhbmdBbmFseXNpcyI7CisgICAgY29uc3QgY2hhciAqZnVuY3Rpb25OYW1l
ID0gIkRDTURpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyI7CisjZWxzZQorICAgIHR5cGVkZWYg
dm9pZCAoKlNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pKGlkIHVudXNlZERpY3Rpb25hcnlSZWYs
IGlkIGluV29yZFN0cmluZywgQ0ZSYW5nZSBzZWxlY3Rpb25SYW5nZSwgaWQgdW51c2VkRm9udCwg
Q0dQb2ludCB0ZXh0T3JpZ2luLCBCb29sZWFuIHZlcnRpY2FsVGV4dCwgaWQgdW51c2VkVHJhbnNm
b3JtKTsKKyAgICBjb25zdCBjaGFyICpmcmFtZXdvcmtQYXRoID0gIi9TeXN0ZW0vTGlicmFyeS9G
cmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9ISVRvb2xib3guZnJhbWV3b3Jr
L0hJVG9vbGJveCI7CisgICAgY29uc3QgY2hhciAqZnVuY3Rpb25OYW1lID0gIkhJRGljdGlvbmFy
eVdpbmRvd1Nob3ciOworI2VuZGlmCisKKyAgICBzdGF0aWMgYm9vbCBsb29rZWRGb3JGdW5jdGlv
biA9IGZhbHNlOworICAgIHN0YXRpYyBTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uIGRpY3Rpb25h
cnlTZXJ2aWNlV2luZG93U2hvdyA9IE5VTEw7CisKKyAgICBpZiAoIWxvb2tlZEZvckZ1bmN0aW9u
KSB7CisgICAgICAgIHZvaWQqIGxhbmdBbmFseXNpc0ZyYW1ld29yayA9IGRsb3BlbihmcmFtZXdv
cmtQYXRoLCBSVExEX0xBWlkpOworICAgICAgICBBU1NFUlQobGFuZ0FuYWx5c2lzRnJhbWV3b3Jr
KTsKKyAgICAgICAgaWYgKGxhbmdBbmFseXNpc0ZyYW1ld29yaykKKyAgICAgICAgICAgIGRpY3Rp
b25hcnlTZXJ2aWNlV2luZG93U2hvdyA9IChTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uKWRsc3lt
KGxhbmdBbmFseXNpc0ZyYW1ld29yaywgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgbG9va2VkRm9y
RnVuY3Rpb24gPSB0cnVlOworICAgIH0KKworICAgIEFTU0VSVChkaWN0aW9uYXJ5U2VydmljZVdp
bmRvd1Nob3cpOworICAgIGlmICghZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KSB7CisgICAg
ICAgIE5TTG9nKEAiQ291bGRuJ3QgZmluZCB0aGUgJXMgZnVuY3Rpb24gaW4gJXMiLCBmdW5jdGlv
bk5hbWUsIGZyYW1ld29ya1BhdGgpOyAKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmZGVm
IEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gRklYTUU6IG11c3QgY2hlY2sgZm9yIHJpZ2h0LXRv
LWxlZnQgaGVyZQorICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gTlNX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CisKKyAgICAvLyBGSVhNRTogdGhlIGRpY3Rpb25h
cnkgQVBJIGV4cGVjdHMgdGhlIHJlY3QgZm9yIHRoZSBmaXJzdCBsaW5lIG9mIHNlbGVjdGlvbi4g
UGFzc2luZworICAgIC8vIHRoZSByZWN0IGZvciB0aGUgZW50aXJlIHNlbGVjdGlvbiwgYXMgd2Ug
ZG8gaGVyZSwgcG9zaXRpb25zIHRoZSBwb3AtdXAgd2luZG93IG5lYXIKKyAgICAvLyB0aGUgYm90
dG9tIG9mIHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gYXQgdGhlIHNlbGVjdGVkIHdvcmQuCisg
ICAgcmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3Om5pbF07CisgICAgcmVjdC5v
cmlnaW4gPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOnJlY3Qub3JpZ2luXTsK
KyAgICBOU0RhdGEgKmRhdGEgPSBbYXR0clN0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgZGlj
dGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KGRhdGEsIHJlY3QsICh3cml0aW5nRGlyZWN0aW9uID09
IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KSA/IDEgOiAwKTsKKyNlbHNlCisgICAgLy8g
VGhlIEhJRGljdGlvbmFyeVdpbmRvd1Nob3cgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIG9yaWdpbiwg
aW4gQ0cgc2NyZWVuIGNvb3JkaW5hdGVzLCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRleHQg
aW4gdGhlIHNlbGVjdGlvbi4KKyAgICAvLyBGSVhNRSA0OTQ1ODA4OiBXZSBhcHByb3hpbWF0ZSB0
aGlzIGluIGEgd2F5IHRoYXQgd29ya3Mgd2VsbCB3aGVuIGEgc2luZ2xlIHdvcmQgaXMgc2VsZWN0
ZWQsIGFuZCBsZXNzIHdlbGwgaW4gc29tZSBvdGhlciBjYXNlcworICAgIC8vIChidXQgbm8gd29y
c2UgdGhhbiB3ZSBkaWQgaW4gVGlnZXIpCisgICAgTlNQb2ludCB3aW5kb3dQb2ludCA9IFtzZWxm
IGNvbnZlcnRQb2ludDpyZWN0Lm9yaWdpbiB0b1ZpZXc6bmlsXTsKKyAgICBOU1BvaW50IHNjcmVl
blBvaW50ID0gW1tzZWxmIHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjp3aW5kb3dQb2ludF07
CisKKyAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cobmlsLCBhdHRyU3RyaW5nLCBDRlJh
bmdlTWFrZSgwLCBbYXR0clN0cmluZyBsZW5ndGhdKSwgbmlsLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29yZUdyYXBoaWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2lu
dChzY3JlZW5Qb2ludCksIGZhbHNlLCBuaWwpOworI2VuZGlmCit9CisKKy0gKHZvaWQpX2hvdmVy
RmVlZGJhY2tTdXNwZW5kZWRDaGFuZ2VkCit7CisgICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3Zlcldp
dGhGYWtlRXZlbnRdOworfQorCistIChCT09MKV9pbnRlcmNlcHRFZGl0aW5nS2V5RXZlbnQ6KEtl
eWJvYXJkRXZlbnQqKWV2ZW50IHNob3VsZFNhdmVDb21tYW5kOihCT09MKXNob3VsZFNhdmUKK3sK
KyAgICAvLyBBc2sgQXBwS2l0IHRvIHByb2Nlc3MgdGhlIGtleSBldmVudCAtLSBpdCB3aWxsIGNh
bGwgYmFjayB3aXRoIGVpdGhlciBpbnNlcnRUZXh0IG9yIGRvQ29tbWFuZEJ5U2VsZWN0b3IuCisg
ICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Cisg
ICAgcGFyYW1ldGVycy5ldmVudFdhc0hhbmRsZWQgPSBmYWxzZTsKKyAgICBwYXJhbWV0ZXJzLnNo
b3VsZFNhdmVDb21tYW5kID0gc2hvdWxkU2F2ZTsKKyAgICAvLyBJZiB3ZSdyZSBpbnRlcmNlcHRp
bmcgdGhlIGluaXRpYWwgSU0gY2FsbCB3ZSBhc3N1bWUgdGhhdCB0aGUgSU0gaGFzIGNvbnN1bWVk
IHRoZSBldmVudCwgCisgICAgLy8gYW5kIG9ubHkgY2hhbmdlIHRoaXMgYXNzdW1wdGlvbiBpZiBv
bmUgb2YgdGhlIE5TVGV4dElucHV0L1Jlc3BvbmRlciBjYWxsYmFja3MgaXMgdXNlZC4KKyAgICAv
LyBXZSBhc3N1bWUgdGhlIElNIHdpbGwgKm5vdCogY29uc3VtZSBob3RrZXkgc2VxdWVuY2VzCisg
ICAgcGFyYW1ldGVycy5jb25zdW1lZEJ5SU0gPSAhZXZlbnQtPm1ldGFLZXkoKSAmJiBzaG91bGRT
YXZlOworCisgICAgaWYgKGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVu
dCA9IGV2ZW50LT5rZXlFdmVudCgpKSB7CisgICAgICAgIE5TRXZlbnQgKm1hY0V2ZW50ID0gcGxh
dGZvcm1FdmVudC0+bWFjRXZlbnQoKTsKKyAgICAgICAgaWYgKFttYWNFdmVudCB0eXBlXSA9PSBO
U0tleURvd24gJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBmaWx0ZXJLZXlEb3duOm1hY0V2
ZW50XSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKFtt
YWNFdmVudCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIHBhcmFtZXRlcnMuZXZlbnQgPSBldmVudDsKKyAgICAgICAg
X3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAmcGFyYW1ldGVyczsKKyAg
ICAgICAgX3ByaXZhdGUtPnJlY2VpdmVkTk9PUCA9IE5POworICAgICAgICBjb25zdCBWZWN0b3I8
S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMgPSBldmVudC0+a2V5cHJlc3NDb21tYW5kcygpOwor
ICAgICAgICBib29sIGhhc0tleXByZXNzQ29tbWFuZCA9ICFjb21tYW5kcy5pc0VtcHR5KCk7CisK
KyAgICAgICAgLy8gRklYTUU6IGludGVycHJldEtleUV2ZW50cyBkb2Vzbid0IG1hdGNoIGFwcGxp
Y2F0aW9uIGtleSBlcXVpdmFsZW50cyAoc3VjaCBhcyBDbWQrQSksCisgICAgICAgIC8vIGFuZCBz
ZW5kcyBub29wOiBmb3IgdGhvc2UuIEFzIGEgcmVzdWx0LCB3ZSBkb24ndCBoYW5kbGUgdGhvc2Ug
ZnJvbSB3aXRoaW4gV2ViQ29yZSwKKyAgICAgICAgLy8gYnV0IHNlbmQgYSBmdWxsIHNlcXVlbmNl
IG9mIERPTSBldmVudHMsIGluY2x1ZGluZyBhbiB1bm5lZWRlZCBrZXlwcmVzcy4KKyAgICAgICAg
aWYgKHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNvbW1hbmQgfHwgIWhhc0tleXByZXNzQ29tbWFuZCkK
KyAgICAgICAgICAgIFtzZWxmIGludGVycHJldEtleUV2ZW50czpbTlNBcnJheSBhcnJheVdpdGhP
YmplY3Q6bWFjRXZlbnRdXTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzaXplX3Qgc2l6
ZSA9IGNvbW1hbmRzLnNpemUoKTsKKyAgICAgICAgICAgIC8vIEFyZSB0aGVyZSBjb21tYW5kcyB0
aGF0IHdvdWxkIGp1c3QgY2F1c2UgdGV4dCBpbnNlcnRpb24gaWYgZXhlY3V0ZWQgdmlhIEVkaXRv
cj8KKyAgICAgICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9u
IGFib3V0IG1vZGUgdG8gZGVjaWRlIGhvdyB0aGV5IHNob3VsZCBiZSB0cmVhdGVkLCBzbyB3ZSBs
ZWF2ZSBpdCB1cG9uIFdlYkNvcmUKKyAgICAgICAgICAgIC8vIHRvIGVpdGhlciBoYW5kbGUgdGhl
bSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlw
cmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGlu
c2VydHMgYSBUYWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCisgICAgICAgICAgICBib29sIGhhdmVU
ZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKFtzZWxmIGNvcmVDb21t
YW5kQnlTZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhjb21tYW5kc1tpXS5jb21tYW5kTmFt
ZSldLmlzVGV4dEluc2VydGlvbigpKQorICAgICAgICAgICAgICAgICAgICBoYXZlVGV4dEluc2Vy
dGlvbkNvbW1hbmRzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaGF2
ZVRleHRJbnNlcnRpb25Db21tYW5kcyB8fCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpDaGFyKSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRzW2ld
LmNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0OiIpCisgICAgICAgICAgICAgICAgICAgICAgICBb
c2VsZiBpbnNlcnRUZXh0OmNvbW1hbmRzW2ldLnRleHRdOworICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZiBkb0NvbW1hbmRCeVNlbGVjdG9yOk5T
U2VsZWN0b3JGcm9tU3RyaW5nKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKV07CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIF9wcml2YXRlLT5pbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKKyAgICB9CisgICAgcmV0dXJuICghX3ByaXZh
dGUtPnJlY2VpdmVkTk9PUCAmJiBwYXJhbWV0ZXJzLmV2ZW50V2FzSGFuZGxlZCkgfHwgcGFyYW1l
dGVycy5jb25zdW1lZEJ5SU07Cit9CisKKy0gKFdlYkNvcmU6OkNhY2hlZEltYWdlKilwcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZQoreworICAgIHJldHVybiBfcHJpdmF0ZS0+cHJvbWlzZWREcmFn
VElGRkRhdGFTb3VyY2U7Cit9CisKKy0gKHZvaWQpc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2U6KFdlYkNvcmU6OkNhY2hlZEltYWdlKilzb3VyY2UKK3sKKyAgICBpZiAoc291cmNlKQorICAg
ICAgICBzb3VyY2UtPmFkZENsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CisgICAgCisgICAg
aWYgKF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKKyAgICAgICAgX3ByaXZh
dGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRh
Q2xpZW50KCkpOworICAgIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IHNv
dXJjZTsKK30KKworI3VuZGVmIENPTU1BTkRfUFJPTE9HVUUKKworLSAodm9pZClfbGF5b3V0SWZO
ZWVkZWQKK3sKKyAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKKworICAg
IGlmIChfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzIHx8IFtzZWxmIF9uZWVkc0xheW91dF0p
CisgICAgICAgIFtzZWxmIGxheW91dF07Cit9CisKKy0gKHZvaWQpX3dlYl9sYXlvdXRJZk5lZWRl
ZFJlY3Vyc2l2ZQoreworICAgIFtzZWxmIF9sYXlvdXRJZk5lZWRlZF07CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7CisjZW5kaWYKKwor
ICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07CisKKyAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1M
Vmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworCisgICAgdW5zaWduZWQgY291
bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBv
YmplY3RBdEluZGV4OmldIF9sYXlvdXRJZk5lZWRlZF07CisKKyAgICBbZGVzY2VuZGFudFdlYkhU
TUxWaWV3cyByZWxlYXNlXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVy
YXRpbmdTdWJ2aWV3cyA9IE5POworI2VuZGlmCit9CisKKy0gKHZvaWQpIF9kZXN0cm95QWxsV2Vi
UGx1Z2lucworeworICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gZGVzdHJveUFsbFBsdWdp
bnNdOworfQorCistIChCT09MKV9pc1Jlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyCit7CisgICAgcmV0
dXJuIF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsKK30KKworLSAoQk9PTClfbmVl
ZHNMYXlvdXQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX25lZWRzTGF5b3V0XTsKK30K
KworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKy0gKHZvaWQpYXR0YWNoUm9vdExh
eWVyOihDQUxheWVyKilsYXllcgoreworICAgIGlmICghX3ByaXZhdGUtPmxheWVySG9zdGluZ1Zp
ZXcpIHsKKyAgICAgICAgV2ViTGF5ZXJIb3N0aW5nVmlldyogaG9zdGluZ1ZpZXcgPSBbW1dlYkxh
eWVySG9zdGluZ1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W3NlbGYgYm91bmRzXV07CisgICAg
ICAgIFtob3N0aW5nVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihOU1ZpZXdXaWR0aFNpemFibGUg
fCBOU1ZpZXdIZWlnaHRTaXphYmxlKV07CisgICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6aG9zdGlu
Z1ZpZXddOworICAgICAgICBbaG9zdGluZ1ZpZXcgcmVsZWFzZV07CisgICAgICAgIC8vIGhvc3Rp
bmdWaWV3IGlzIG93bmVkIGJ5IGJlaW5nIGEgc3VidmlldyBvZiBzZWxmCisgICAgICAgIF9wcml2
YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gaG9zdGluZ1ZpZXc7CisgICAgICAgIFtbc2VsZiBfd2Vi
Vmlld10gX3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6W3NlbGYgX2ZyYW1l
XV07CisgICAgfQorCisgICAgLy8gTWFrZSBhIGNvbnRhaW5lciBsYXllciwgd2hpY2ggd2lsbCBn
ZXQgc2l6ZWQvcG9zaXRpb25lZCBieSBBcHBLaXQgYW5kIENBCisgICAgQ0FMYXllciogdmlld0xh
eWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBz
ZXRMYXllcjp2aWV3TGF5ZXJdOworICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRX
YW50c0xheWVyOllFU107CisgICAgCisgICAgLy8gUGFyZW50IG91ciByb290IGxheWVyIGluIHRo
ZSBjb250YWluZXIgbGF5ZXIKKyAgICBbdmlld0xheWVyIGFkZFN1YmxheWVyOmxheWVyXTsKK30K
KworLSAodm9pZClkZXRhY2hSb290TGF5ZXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9z
dGluZ1ZpZXcpIHsKKyAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldExheWVy
Om5pbF07CisgICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRXYW50c0xheWVy
Ok5PXTsKKyAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHJlbW92ZUZyb21TdXBl
cnZpZXddOworICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyA9IG5pbDsKKyAgICAg
ICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RvcHBlZEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFt
ZTpbc2VsZiBfZnJhbWVdXTsKKyAgICB9Cit9CisjZW5kaWYKKworQGVuZAorCitAaW1wbGVtZW50
YXRpb24gV2ViSFRNTFZpZXcgKFdlYk5TVGV4dElucHV0U3VwcG9ydCkKKworLSAoTlNBcnJheSAq
KXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQKK3sKKyAgICBzdGF0aWMgTlNBcnJheSAqdmFs
aWRBdHRyaWJ1dGVzOworICAgIGlmICghdmFsaWRBdHRyaWJ1dGVzKSB7CisgICAgICAgIHZhbGlk
QXR0cmlidXRlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAgICAgICAg
ICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUsIE5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1
dGVOYW1lLAorICAgICAgICAgICAgTlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZSwg
TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSwgbmlsXTsKKyAgICAgICAg
Ly8gTlNUZXh0IGFsc28gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBidXQgaXQn
cworICAgICAgICAvLyBoYXJkIHRvIHRlbGwgd2hpY2ggYXJlIHJlYWxseSByZXF1aXJlZCBmb3Ig
dGV4dCBpbnB1dCB0bworICAgICAgICAvLyB3b3JrIHdlbGw7IEkgaGF2ZSBub3Qgc2VlbiBhbnkg
aW5wdXQgbWV0aG9kIG1ha2UgdXNlIG9mIHRoZW0geWV0LgorICAgICAgICAvLyAgICAgTlNGb250
QXR0cmlidXRlTmFtZSwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAorICAgICAgICAv
LyAgICAgTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLCBOU0xhbmd1YWdlQXR0cmlidXRl
TmFtZS4KKyAgICAgICAgQ0ZSZXRhaW4odmFsaWRBdHRyaWJ1dGVzKTsKKyAgICB9CisgICAgTE9H
KFRleHRJbnB1dCwgInZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQgLT4gKC4uLikiKTsKKyAg
ICByZXR1cm4gdmFsaWRBdHRyaWJ1dGVzOworfQorCistIChOU1RleHRJbnB1dENvbnRleHQgKilp
bnB1dENvbnRleHQKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA/
IFtzdXBlciBpbnB1dENvbnRleHRdIDogbmlsOworfQorCistIChOU0F0dHJpYnV0ZWRTdHJpbmcg
Kil0ZXh0U3RvcmFnZQoreworICAgIGlmICghX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCkg
eworICAgICAgICBMT0coVGV4dElucHV0LCAidGV4dFN0b3JhZ2UgLT4gbmlsIik7CisgICAgICAg
IHJldHVybiBuaWw7CisgICAgfQorICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gW3Nl
bGYgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBVSU5UX01BWCld
OworICAgIAorICAgIExPRyhUZXh0SW5wdXQsICJ0ZXh0U3RvcmFnZSAtPiBcIiVAXCIiLCByZXN1
bHQgPyBbcmVzdWx0IHN0cmluZ10gOiBAIiIpOworICAgIAorICAgIC8vIFdlIGhhdmUgdG8gcmV0
dXJuIGFuIGVtcHR5IHN0cmluZyByYXRoZXIgdGhhbiBudWxsIHRvIHByZXZlbnQgVFNNIGZyb20g
Y2FsbGluZyAtc3RyaW5nCisgICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IFtbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07Cit9CisK
Ky0gKE5TVUludGVnZXIpY2hhcmFjdGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0aGVQb2ludAor
eworICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIFdlYkZyYW1lICpm
cmFtZSA9IFtzZWxmIF9mcmFtZV07CisKKyAgICBpZiAod2luZG93KQorICAgICAgICB0aGVQb2lu
dCA9IFt3aW5kb3cgY29udmVydFNjcmVlblRvQmFzZTp0aGVQb2ludF07CisgICAgdGhlUG9pbnQg
PSBbc2VsZiBjb252ZXJ0UG9pbnQ6dGhlUG9pbnQgZnJvbVZpZXc6bmlsXTsKKworICAgIERPTVJh
bmdlICpyYW5nZSA9IFtmcmFtZSBfY2hhcmFjdGVyUmFuZ2VBdFBvaW50OnRoZVBvaW50XTsKKyAg
ICBpZiAoIXJhbmdlKSB7CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0ZXJJbmRleEZv
clBvaW50OiglZiwgJWYpIC0+IE5TTm90Rm91bmQiLCB0aGVQb2ludC54LCB0aGVQb2ludC55KTsK
KyAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFtmcmFtZSBfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOnJhbmdlXS5sb2NhdGlvbjsK
KyAgICBMT0coVGV4dElucHV0LCAiY2hhcmFjdGVySW5kZXhGb3JQb2ludDooJWYsICVmKSAtPiAl
dSIsIHRoZVBvaW50LngsIHRoZVBvaW50LnksIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU1JhbmdlKXRoZVJh
bmdlCit7ICAgIAorICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CisgICAgCisg
ICAgLy8gSnVzdCB0byBtYXRjaCBOU1RleHRWaWV3J3MgYmVoYXZpb3IuIFJlZ3Jlc3Npb24gdGVz
dHMgY2Fubm90IGRldGVjdCB0aGlzOworICAgIC8vIHRvIHJlcHJvZHVjZSwgdXNlIGEgdGVzdCBh
cHBsaWNhdGlvbiBmcm9tIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2
ODIKKyAgICAvLyAodHlwZSBzb21ldGhpbmc7IHRyeSByYW5nZXMgKDEsIC0xKSBhbmQgKDIsIC0x
KS4KKyAgICBpZiAoKHRoZVJhbmdlLmxvY2F0aW9uICsgdGhlUmFuZ2UubGVuZ3RoIDwgdGhlUmFu
Z2UubG9jYXRpb24pICYmICh0aGVSYW5nZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCAhPSAw
KSkKKyAgICAgICAgdGhlUmFuZ2UubGVuZ3RoID0gMDsKKyAgICAKKyAgICBET01SYW5nZSAqcmFu
Z2UgPSBbZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07CisgICAgaWYg
KCFyYW5nZSkgeworICAgICAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVy
UmFuZ2U6KCV1LCAldSkgLT4gKDAsIDAsIDAsIDApIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJh
bmdlLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOworICAg
IH0KKyAgICAKKyAgICBBU1NFUlQoW3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7CisgICAgQVNTRVJU
KFtyYW5nZSBlbmRDb250YWluZXJdKTsKKyAgICAKKyAgICBOU1JlY3QgcmVzdWx0UmVjdCA9IFtm
cmFtZSBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOworICAgIHJlc3VsdFJlY3QgPSBbc2Vs
ZiBjb252ZXJ0UmVjdDpyZXN1bHRSZWN0IHRvVmlldzpuaWxdOworCisgICAgTlNXaW5kb3cgKndp
bmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgcmVzdWx0UmVj
dC5vcmlnaW4gPSBbd2luZG93IGNvbnZlcnRCYXNlVG9TY3JlZW46cmVzdWx0UmVjdC5vcmlnaW5d
OworICAgIAorICAgIExPRyhUZXh0SW5wdXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZToo
JXUsICV1KSAtPiAoJWYsICVmLCAlZiwgJWYpIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdl
Lmxlbmd0aCwgcmVzdWx0UmVjdC5vcmlnaW4ueCwgcmVzdWx0UmVjdC5vcmlnaW4ueSwgcmVzdWx0
UmVjdC5zaXplLndpZHRoLCByZXN1bHRSZWN0LnNpemUuaGVpZ2h0KTsKKyAgICByZXR1cm4gcmVz
dWx0UmVjdDsKK30KKworLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdlCit7CisgICAgaWYgKCFpc1Rl
eHRJbnB1dChjb3JlKFtzZWxmIF9mcmFtZV0pKSkgeworICAgICAgICBMT0coVGV4dElucHV0LCAi
c2VsZWN0ZWRSYW5nZSAtPiAoTlNOb3RGb3VuZCwgMCkiKTsKKyAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIH0KKyAgICBOU1JhbmdlIHJlc3VsdCA9IFtbc2Vs
ZiBfZnJhbWVdIF9zZWxlY3RlZE5TUmFuZ2VdOworCisgICAgTE9HKFRleHRJbnB1dCwgInNlbGVj
dGVkUmFuZ2UgLT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKK3sKKyAgICBX
ZWJGcmFtZSAqd2ViRnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKHdlYkZyYW1lKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5T
TWFrZVJhbmdlKDAsIDApOworICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9jb252ZXJ0
VG9OU1JhbmdlOmNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKV07
CisKKyAgICBMT0coVGV4dElucHV0LCAibWFya2VkUmFuZ2UgLT4gKCV1LCAldSkiLCByZXN1bHQu
bG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5T
QXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2Up
bnNSYW5nZQoreworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOworICAgIGlmICghaXNUZXh0SW5wdXQoY29yZUZy
YW1lKSB8fCBpc0luUGFzc3dvcmRGaWVsZChjb3JlRnJhbWUpKSB7CisgICAgICAgIExPRyhUZXh0
SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5z
UmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICB9CisgICAgRE9NUmFuZ2UgKmRvbVJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9N
UmFuZ2U6bnNSYW5nZV07CisgICAgaWYgKCFkb21SYW5nZSkgeworICAgICAgICBMT0coVGV4dElu
cHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1Jh
bmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAg
fQorCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBbTlNBdHRyaWJ1dGVkU3RyaW5n
IF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpjb3JlKGRvbVJhbmdlKV07CisgICAgCisg
ICAgLy8gW05TQXR0cmlidXRlZFN0cmluZyhXZWJLaXRFeHRyYXMpIF93ZWJfYXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZTpdICBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWlsaW5nIAorICAgIC8v
IHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRP
SyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KKyAgICAvLyBUbyB3b3Jr
IGFyb3VuZCB0aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRhbnQgc3RyaW5nIHRvIHRoZSBjb3Jy
ZWN0IGxlbmd0aC4KKyAgICBpZiAoW3Jlc3VsdCBsZW5ndGhdID4gbnNSYW5nZS5sZW5ndGgpIHsK
KyAgICAgICAgQVNTRVJUKFtyZXN1bHQgbGVuZ3RoXSA9PSBuc1JhbmdlLmxlbmd0aCArIDEpOwor
ICAgICAgICBBU1NFUlQoW1tyZXN1bHQgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4Om5zUmFuZ2Uu
bGVuZ3RoXSA9PSAnXG4nIHx8IFtbcmVzdWx0IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpuc1Jh
bmdlLmxlbmd0aF0gPT0gJyAnKTsKKyAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdCBhdHRyaWJ1dGVk
U3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFuZ2UubGVuZ3RoKV07CisgICAg
fQorICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwg
JXUpIC0+IFwiJUBcIiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoLCBbcmVzdWx0
IHN0cmluZ10pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIHRlc3QgZm9yIDEwLjQgYmVj
YXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vNDI0MzQ2Mz4KKyNpZmRlZiBCVUlMRElOR19PTl9USUdF
UgorLSAobG9uZyljb252ZXJzYXRpb25JZGVudGlmaWVyCit7CisgICAgcmV0dXJuIChsb25nKXNl
bGY7Cit9CisjZWxzZQorLSAoTlNJbnRlZ2VyKWNvbnZlcnNhdGlvbklkZW50aWZpZXIKK3sKKyAg
ICByZXR1cm4gKE5TSW50ZWdlcilzZWxmOworfQorI2VuZGlmCisKKy0gKEJPT0wpaGFzTWFya2Vk
VGV4dAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IEJPT0wgcmVzdWx0ID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBv
c2l0aW9uKCk7CisgICAgTE9HKFRleHRJbnB1dCwgImhhc01hcmtlZFRleHQgLT4gJXUiLCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQpdW5tYXJrVGV4dAoreworICAg
IExPRyhUZXh0SW5wdXQsICJ1bm1hcmtUZXh0Iik7CisKKyAgICAvLyBVc2UgcG9pbnRlciB0byBn
ZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlF
dmVudHMuCisgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgX3By
aXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOworCisgICAgaWYgKHBhcmFt
ZXRlcnMpIHsKKyAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gWUVTOworICAg
ICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKKyAgICB9CisgICAgCisgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24oKTsKK30KKworc3RhdGljIHZvaWQgZXh0
cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4mIHJlc3VsdCkKK3sKKyAgICBpbnQgbGVuZ3RoID0gW1tzdHJpbmcgc3Ry
aW5nXSBsZW5ndGhdOworCisgICAgaW50IGkgPSAwOworICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7
CisgICAgICAgIE5TUmFuZ2UgcmFuZ2U7CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cnMgPSBb
c3RyaW5nIGF0dHJpYnV0ZXNBdEluZGV4OmkgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOiZyYW5nZSBp
blJhbmdlOk5TTWFrZVJhbmdlKGksIGxlbmd0aCAtIGkpXTsKKworICAgICAgICBpZiAoTlNOdW1i
ZXIgKnN0eWxlID0gW2F0dHJzIG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRl
TmFtZV0pIHsKKyAgICAgICAgICAgIENvbG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOworICAgICAg
ICAgICAgaWYgKE5TQ29sb3IgKmNvbG9yQXR0ciA9IFthdHRycyBvYmplY3RGb3JLZXk6TlNVbmRl
cmxpbmVDb2xvckF0dHJpYnV0ZU5hbWVdKQorICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JG
cm9tTlNDb2xvcihbY29sb3JBdHRyIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJH
QkNvbG9yU3BhY2VdKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoQ29tcG9zaXRpb25VbmRl
cmxpbmUocmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmFuZ2UpLCBjb2xvciwgW3N0eWxlIGlu
dFZhbHVlXSA+IDEpKTsKKyAgICAgICAgfQorCisgICAgICAgIGkgPSByYW5nZS5sb2NhdGlvbiAr
IHJhbmdlLmxlbmd0aDsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3Ry
aW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UKK3sKKyAgICBCT09MIGlzQXR0
cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5n
IGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKKworICAgIExPRyhUZXh0SW5wdXQsICJz
ZXRNYXJrZWRUZXh0OlwiJUBcIiBzZWxlY3RlZFJhbmdlOigldSwgJXUpIiwgaXNBdHRyaWJ1dGVk
U3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwg
bmV3U2VsUmFuZ2UubGVuZ3RoKTsKKworICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0
ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KKyAg
ICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBf
cHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBfcHJpdmF0ZS0+aW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CisKKyAgICBpZiAocGFyYW1ldGVycykgewor
ICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBZRVM7CisgICAgICAgIHBhcmFt
ZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POworICAgIH0KKyAgICAKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFbc2VsZiBfaXNFZGl0YWJsZV0pCisgICAgICAgIHJldHVybjsK
KworICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKKyAgICBOU1N0
cmluZyAqdGV4dCA9IHN0cmluZzsKKworICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKKyAg
ICAgICAgdW5zaWduZWQgbWFya2VkVGV4dExlbmd0aCA9IFsoTlNTdHJpbmcgKilzdHJpbmcgbGVu
Z3RoXTsKKyAgICAgICAgTlNTdHJpbmcgKnJhbmdlU3RyaW5nID0gW3N0cmluZyBhdHRyaWJ1dGU6
TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdEluZGV4OjAgbG9uZ2Vz
dEVmZmVjdGl2ZVJhbmdlOk5VTEwgaW5SYW5nZTpOU01ha2VSYW5nZSgwLCBtYXJrZWRUZXh0TGVu
Z3RoKV07CisgICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgUmVwbGFjZW1lbnRSYW5nZTogJUAi
LCByYW5nZVN0cmluZyk7CisgICAgICAgIC8vIFRoZSBBcHBLaXQgYWRkcyBhICdzZWNyZXQnIHBy
b3BlcnR5IHRvIHRoZSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgcmVwbGFjZW1lbnQgcmFuZ2Uu
CisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCByYW5nZSBpcyB0aGUgcmFuZ2Ugb2YgdGhlIHRo
ZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5ldyBzdHJpbmcuCisgICAg
ICAgIGlmIChyYW5nZVN0cmluZykKKyAgICAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3RO
U1JhbmdlOk5TUmFuZ2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07CisKKyAgICAgICAgdGV4dCA9
IFtzdHJpbmcgc3RyaW5nXTsKKyAgICAgICAgZXh0cmFjdFVuZGVybGluZXMoc3RyaW5nLCB1bmRl
cmxpbmVzKTsKKyAgICB9CisKKyAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRDb21wb3NpdGlv
bih0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdT
ZWxSYW5nZSkpOworfQorCistICh2b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3Rv
cgoreworICAgIExPRyhUZXh0SW5wdXQsICJkb0NvbW1hbmRCeVNlbGVjdG9yOlwiJXNcIiIsIHNl
bF9nZXROYW1lKHNlbGVjdG9yKSk7CisKKyAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1l
dGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCisg
ICAgLy8gVGhlIHNhbWUgY2FsbCB0byBpbnRlcnByZXRLZXlFdmVudHMgY2FuIGRvIG1vcmUgdGhh
biBvbmUgY29tbWFuZC4KKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsK
KyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0g
Tk87CisKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKG5vb3A6KSkgeworICAgICAgICBf
cHJpdmF0ZS0+cmVjZWl2ZWROT09QID0gWUVTOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy0+ZXZlbnQg
OiAwOworICAgIGJvb2wgc2hvdWxkU2F2ZUNvbW1hbmQgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRl
cnMtPnNob3VsZFNhdmVDb21tYW5kOworCisgICAgaWYgKGV2ZW50ICYmIHNob3VsZFNhdmVDb21t
YW5kKQorICAgICAgICBldmVudC0+a2V5cHJlc3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0Nv
bW1hbmQoTlNTdHJpbmdGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpKSk7CisgICAgZWxzZSB7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG9ubHkgZGlyZWN0IGNhbGxzIHRvIGRvQ29tbWFuZEJ5U2Vs
ZWN0b3I6IHNlZSB0aGUgcGFyYW1ldGVycyBieSBzZXR0aW5nIHRvIDAuCisgICAgICAgIF9wcml2
YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKKworICAgICAgICBib29sIGV2
ZW50V2FzSGFuZGxlZDsKKworICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZp
ZXddOworICAgICAgICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXSkKKyAgICAgICAgICAg
IGV2ZW50V2FzSGFuZGxlZCA9IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRWRp
dG9yOjpDb21tYW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0
b3JdOworICAgICAgICAgICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkKKyAgICAgICAgICAg
ICAgICBldmVudFdhc0hhbmRsZWQgPSBjb21tYW5kLmV4ZWN1dGUoZXZlbnQpOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgV2ViS2l0IGRvZXMgbm90IHN1cHBvcnQg
dGhpcyBjb21tYW5kLCB3ZSBuZWVkIHRvIHBhc3MgdGhlIHNlbGVjdG9yIHRvIHN1cGVyLgorICAg
ICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSBz
ZWxlY3RvcjsKKworICAgICAgICAgICAgICAgIC8vIFRoZSBzaW5rIGRvZXMgdHdvIHRoaW5nczog
MSkgVGVsbHMgdXMgaWYgdGhlIHJlc3BvbmRlciB3ZW50IHVuaGFuZGxlZCwgYW5kCisgICAgICAg
ICAgICAgICAgLy8gMikgcHJldmVudHMgYW55IE5TQmVlcDsgd2UgZG9uJ3QgZXZlciB3YW50IHRv
IGJlZXAgaGVyZS4KKyAgICAgICAgICAgICAgICBXZWJSZXNwb25kZXJDaGFpblNpbmsgKnNpbmsg
PSBbW1dlYlJlc3BvbmRlckNoYWluU2luayBhbGxvY10gaW5pdFdpdGhSZXNwb25kZXJDaGFpbjpz
ZWxmXTsKKyAgICAgICAgICAgICAgICBbc3VwZXIgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rv
cl07CisgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gIVtzaW5rIHJlY2VpdmVkVW5o
YW5kbGVkQ29tbWFuZF07CisgICAgICAgICAgICAgICAgW3NpbmsgZGV0YWNoXTsKKyAgICAgICAg
ICAgICAgICBbc2luayByZWxlYXNlXTsKKworICAgICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxl
Y3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHBhcmFtZXRlcnMpCisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5ldmVu
dFdhc0hhbmRsZWQgPSBldmVudFdhc0hhbmRsZWQ7CisKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUg
cGFyYW1ldGVycyBzbyB0aGF0IG90aGVyIGNhbGxzIHRvIGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHNl
ZSB0aGVtLAorICAgICAgICAvLyBhbmQgb3RoZXIgY29tbWFuZHMgY2FuIHBhcnRpY2lwYXRlIGlu
IHNldHRpbmcgdGhlICJldmVudFdhc0hhbmRsZWQiIGZsYWcuCisgICAgICAgIF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgICB9Cit9CisKKy0g
KHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCit7CisgICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJp
bmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOyAv
LyBPdGhlcndpc2UsIE5TU3RyaW5nCisKKyAgICBMT0coVGV4dElucHV0LCAiaW5zZXJ0VGV4dDpc
IiVAXCIiLCBpc0F0dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcpOwor
CisgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJz
ID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgX3ByaXZhdGUt
PmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOworICAgIGlmIChwYXJhbWV0ZXJzKQor
ICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKKworICAgIC8vIFdlIGRvbid0
IHN1cHBvcnQgaW5zZXJ0aW5nIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIGJ1dCBpbnB1dCBtZXRob2Rz
IGRvbid0IGFwcGVhciB0byByZXF1aXJlIHRoaXMuCisgICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIE5TU3RyaW5nICp0ZXh0OworICAgIGJvb2wg
aXNGcm9tSW5wdXRNZXRob2QgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFz
Q29tcG9zaXRpb24oKTsKKyAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CisgICAgICAgIHRl
eHQgPSBbc3RyaW5nIHN0cmluZ107CisgICAgICAgIC8vIFdlIGRlYWwgd2l0aCB0aGUgTlNUZXh0
SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgZnJvbSBOU0F0dHJp
YnV0ZWRTdHJpbmcgaGVyZQorICAgICAgICAvLyBzaW1wbHkgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5
IGF0IGxlYXN0IG9uZSBJbnB1dCBNZXRob2QgLS0gaXQgY29ycmVzb25kcyB0byB0aGUga0V2ZW50
UGFyYW1UZXh0SW5wdXRTZW5kUmVwbGFjZVJhbmdlCisgICAgICAgIC8vIGV2ZW50IGluIFRTTS4g
IFRoaXMgYmVoYXZpb3VyIG1hdGNoZXMgdGhhdCBvZiAtW1dlYkhUTUxWaWV3IHNldE1hcmtlZFRl
eHQ6c2VsZWN0ZWRSYW5nZTpdIHdoZW4gaXQgcmVjZWl2ZXMgYW4KKyAgICAgICAgLy8gTlNBdHRy
aWJ1dGVkU3RyaW5nCisgICAgICAgIE5TU3RyaW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcgYXR0
cmlidXRlOk5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDow
IGxvbmdlc3RFZmZlY3RpdmVSYW5nZTpOVUxMIGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3RleHQg
bGVuZ3RoXSldOworICAgICAgICBMT0coVGV4dElucHV0LCAiICAgIFJlcGxhY2VtZW50UmFuZ2U6
ICVAIiwgcmFuZ2VTdHJpbmcpOworICAgICAgICBpZiAocmFuZ2VTdHJpbmcpIHsKKyAgICAgICAg
ICAgIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3ROU1JhbmdlOk5TUmFuZ2VGcm9tU3RyaW5nKHJhbmdl
U3RyaW5nKV07CisgICAgICAgICAgICBpc0Zyb21JbnB1dE1ldGhvZCA9IFlFUzsKKyAgICAgICAg
fQorICAgIH0gZWxzZQorICAgICAgICB0ZXh0ID0gc3RyaW5nOworCisgICAgYm9vbCBldmVudEhh
bmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoW3RleHQgbGVuZ3RoXSkgeworICAgICAgICBLZXlib2Fy
ZEV2ZW50KiBldmVudCA9IHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7CisKKyAg
ICAgICAgLy8gaW5zZXJ0VGV4dCBjYW4gYmUgY2FsbGVkIGZyb20gYW4gaW5wdXQgbWV0aG9kIG9y
IGZyb20gbm9ybWFsIGtleSBldmVudCBwcm9jZXNzaW5nCisgICAgICAgIC8vIElmIGl0cyBmcm9t
IG5vcm1hbCBrZXkgZXZlbnQgcHJvY2Vzc2luZywgd2UgbWF5IG5lZWQgdG8gc2F2ZSB0aGUgYWN0
aW9uIHRvIHBlcmZvcm0gaXQgbGF0ZXIuCisgICAgICAgIC8vIElmIGl0cyBmcm9tIGFuIGlucHV0
IG1ldGhvZCwgdGhlbiB3ZSBzaG91bGQgZ28gYWhlYWQgYW5kIGluc2VydCB0aGUgdGV4dCBub3cu
ICAKKyAgICAgICAgLy8gV2UgYXNzdW1lIGl0J3MgZnJvbSB0aGUgaW5wdXQgbWV0aG9kIGlmIHdl
IGhhdmUgbWFya2VkIHRleHQuCisgICAgICAgIC8vIEZJWE1FOiBJbiB0aGVvcnksIHRoaXMgY291
bGQgYmUgd3JvbmcgZm9yIHNvbWUgaW5wdXQgbWV0aG9kcywgc28gd2Ugc2hvdWxkIHRyeSB0byBm
aW5kCisgICAgICAgIC8vIGFub3RoZXIgd2F5IHRvIGRldGVybWluZSBpZiB0aGUgY2FsbCBpcyBm
cm9tIHRoZSBpbnB1dCBtZXRob2QKKyAgICAgICAgYm9vbCBzaG91bGRTYXZlQ29tbWFuZCA9IHBh
cmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+c2hvdWxkU2F2ZUNvbW1hbmQ7CisgICAgICAgIGlmIChl
dmVudCAmJiBzaG91bGRTYXZlQ29tbWFuZCAmJiAhaXNGcm9tSW5wdXRNZXRob2QpIHsKKyAgICAg
ICAgICAgIGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuYXBwZW5kKEtleXByZXNzQ29tbWFuZCgi
aW5zZXJ0VGV4dDoiLCB0ZXh0KSk7CisgICAgICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBldmVudFRleHQgPSB0ZXh0OworICAgICAg
ICBldmVudFRleHQucmVwbGFjZShOU0JhY2tUYWJDaGFyYWN0ZXIsIE5TVGFiQ2hhcmFjdGVyKTsg
Ly8gc2FtZSB0aGluZyBpcyBkb25lIGluIEtleUV2ZW50TWFjLm1tIGluIFdlYkNvcmUKKyAgICAg
ICAgaWYgKGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpIHsKKyAg
ICAgICAgICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkKKyAg
ICAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRU
ZXh0KGV2ZW50VGV4dCwgZXZlbnQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRv
cigpLT5jb25maXJtQ29tcG9zaXRpb24oZXZlbnRUZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIXBhcmFtZXRlcnMpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoaXNGcm9tSW5wdXRNZXRob2QpIHsKKyAgICAgICAgLy8gQWxsb3cgZG9D
b21tYW5kQnlTZWxlY3RvcjogdG8gYmUgY2FsbGVkIGFmdGVyIGluc2VydFRleHQ6IGJ5IHJlc2V0
dGluZyBpbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzCisgICAgICAgIF9wcml2YXRlLT5pbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVy
cy0+Y29uc3VtZWRCeUlNID0gWUVTOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IGV2ZW50SGFuZGxlZDsKK30KKworLSAodm9p
ZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCit7CisgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKworICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0ID0gaXNUZXh0SW5wdXQoY29yZUZy
YW1lKSAmJiAhaXNJblBhc3N3b3JkRmllbGQoY29yZUZyYW1lKTsKKyAgICBpZiAoZXhwb3NlSW5w
dXRDb250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKKyAgICAgICAgX3By
aXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKKyAgICAgICAg
Ly8gTGV0IEFwcEtpdCBjYWNoZSBhIHBvdGVudGlhbGx5IGNoYW5nZWQgaW5wdXQgY29udGV4dC4K
KyAgICAgICAgLy8gV2ViQ29yZSByb3V0aW5lbHkgc2V0cyB0aGUgc2VsZWN0aW9uIHRvIE5vbmUg
d2hlbiBlZGl0aW5nLCBhbmQgSU1zIGJlY29tZSB1bmhhcHB5IHdoZW4gYW4gaW5wdXQgY29udGV4
dCBzdWRkZW5seSB0dXJucyBuaWwsIHNlZSBidWcgMjYwMDkuCisgICAgICAgIGlmICghY29yZUZy
YW1lIHx8ICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSkKKyAgICAgICAgICAgIFtO
U0FwcCB1cGRhdGVXaW5kb3dzXTsKKyAgICB9CisKKyAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9y
KCktPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjb3JlRnJh
bWUtPmVkaXRvcigpLT5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBzdGFydDsKKyAgICB1bnNpZ25lZCBlbmQ7CisgICAg
aWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHN0YXJ0LCBl
bmQpKQorICAgICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdIG1hcmtl
ZFRleHRTZWxlY3Rpb25DaGFuZ2VkOk5TTWFrZVJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCkgY2xp
ZW50OnNlbGZdOworICAgIGVsc2UgeworICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25m
aXJtQ29tcG9zaXRpb25XaXRob3V0RGlzdHVyYmluZ1NlbGVjdGlvbigpOworICAgICAgICBbW05T
SW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdIG1hcmtlZFRleHRBYmFuZG9uZWQ6c2Vs
Zl07CisgICAgfQorfQorCitAZW5kCisKKy8qCisgICAgVGhpcyBjbGFzcyBydW5zIHRoZSBzaG93
IGZvciBoYW5kaW5nIHRoZSBjb21wbGV0ZTogTlNUZXh0VmlldyBvcGVyYXRpb24uICBJdCBjb3Vu
dHMgb24gaXRzIEhUTUwgdmlldworICAgIHRvIGNhbGwgZW5kUmV2ZXJ0aW5nQ2hhbmdlOiB3aGVu
ZXZlciB0aGUgY3VycmVudCBjb21wbGV0aW9uIG5lZWRzIHRvIGJlIGFib3J0ZWQuCisgCisgICAg
VGhlIGNsYXNzIGlzIGluIG9uZSBvZiB0d28gbW9kZXM6ICBQb3B1cFdpbmRvdyBzaG93aW5nLCBv
ciBub3QuICBJdCBpcyBzaG93biB3aGVuIGEgY29tcGxldGlvbiB5aWVsZHMKKyAgICBtb3JlIHRo
YW4gb25lIG1hdGNoLiAgSWYgYSBjb21wbGV0aW9uIHlpZWxkcyBvbmUgb3IgemVybyBtYXRjaGVz
LCBpdCBpcyBub3Qgc2hvd24sIGFuZCAqKnRoZXJlIGlzIG5vCisgICAgc3RhdGUgY2FycmllZCBh
Y3Jvc3MgdG8gdGhlIG5leHQgY29tcGxldGlvbioqLgorICovCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJUZXh0Q29tcGxldGVDb250cm9sbGVyCisKKy0gKGlkKWluaXRXaXRoSFRNTFZpZXc6KFdlYkhU
TUxWaWV3ICopdmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CisgICAgaWYgKCFzZWxm
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIF92aWV3ID0gdmlldzsKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19wb3B1cFdpbmRvdyByZWxlYXNlXTsK
KyAgICBbX2NvbXBsZXRpb25zIHJlbGVhc2VdOworICAgIFtfb3JpZ2luYWxTdHJpbmcgcmVsZWFz
ZV07CisgICAgCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCistICh2b2lkKV9pbnNlcnRNYXRj
aDooTlNTdHJpbmcgKiltYXRjaAoreworICAgIC8vIEZJWE1FOiAzNzY5NjU0IC0gV2Ugc2hvdWxk
IHByZXNlcnZlIGNhc2Ugb2Ygc3RyaW5nIGJlaW5nIGluc2VydGVkLCBldmVuIGluIHByZWZpeCAo
YnV0IHRoZW4gYWxzbyBiZQorICAgIC8vIGFibGUgdG8gcmV2ZXJ0IHRoYXQpLiAgTWltaWMgTlNU
ZXh0LgorICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVdOworICAgIE5TU3RyaW5n
ICpuZXdUZXh0ID0gW21hdGNoIHN1YnN0cmluZ0Zyb21JbmRleDpwcmVmaXhMZW5ndGhdOworICAg
IFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1RleHQgc2VsZWN0UmVwbGFjZW1l
bnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Cit9CisKKy8vIG1vc3RseSBsaWZ0ZWQgZnJvbSBOU1Rl
eHRWaWV3X0tleUJpbmRpbmcubQorLSAodm9pZClfYnVpbGRVSQoreworICAgIE5TUmVjdCBzY3Jv
bGxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgMTAwLCAxMDApOworICAgIE5TUmVjdCB0YWJsZUZy
YW1lID0gTlNaZXJvUmVjdDsgICAgCisgICAgdGFibGVGcmFtZS5zaXplID0gW05TU2Nyb2xsVmll
dyBjb250ZW50U2l6ZUZvckZyYW1lU2l6ZTpzY3JvbGxGcmFtZS5zaXplIGhhc0hvcml6b250YWxT
Y3JvbGxlcjpOTyBoYXNWZXJ0aWNhbFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TTm9Cb3JkZXJd
OworICAgIC8vIEFkZGVkIGNhc3QgdG8gd29yayBhcm91bmQgcHJvYmxlbSB3aXRoIG11bHRpcGxl
IEZvdW5kYXRpb24gaW5pdFdpdGhJZGVudGlmaWVyOiBtZXRob2RzIHdpdGggZGlmZmVyZW50IHBh
cmFtZXRlciB0eXBlcy4KKyAgICBOU1RhYmxlQ29sdW1uICpjb2x1bW4gPSBbKE5TVGFibGVDb2x1
bW4gKilbTlNUYWJsZUNvbHVtbiBhbGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOltOU051bWJlciBu
dW1iZXJXaXRoSW50OjBdXTsKKyAgICBbY29sdW1uIHNldFdpZHRoOnRhYmxlRnJhbWUuc2l6ZS53
aWR0aF07CisgICAgW2NvbHVtbiBzZXRFZGl0YWJsZTpOT107CisgICAgCisgICAgX3RhYmxlVmll
dyA9IFtbTlNUYWJsZVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6dGFibGVGcmFtZV07CisgICAg
W190YWJsZVZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGVdOworICAg
IFtfdGFibGVWaWV3IGFkZFRhYmxlQ29sdW1uOmNvbHVtbl07CisgICAgW2NvbHVtbiByZWxlYXNl
XTsKKyAgICBbX3RhYmxlVmlldyBzZXRHcmlkU3R5bGVNYXNrOk5TVGFibGVWaWV3R3JpZE5vbmVd
OworICAgIFtfdGFibGVWaWV3IHNldENvcm5lclZpZXc6bmlsXTsKKyAgICBbX3RhYmxlVmlldyBz
ZXRIZWFkZXJWaWV3Om5pbF07CisgICAgW190YWJsZVZpZXcgc2V0Q29sdW1uQXV0b3Jlc2l6aW5n
U3R5bGU6TlNUYWJsZVZpZXdVbmlmb3JtQ29sdW1uQXV0b3Jlc2l6aW5nU3R5bGVdOworICAgIFtf
dGFibGVWaWV3IHNldERlbGVnYXRlOnNlbGZdOworICAgIFtfdGFibGVWaWV3IHNldERhdGFTb3Vy
Y2U6c2VsZl07CisgICAgW190YWJsZVZpZXcgc2V0VGFyZ2V0OnNlbGZdOworICAgIFtfdGFibGVW
aWV3IHNldERvdWJsZUFjdGlvbjpAc2VsZWN0b3IodGFibGVBY3Rpb246KV07CisgICAgCisgICAg
TlNTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gW1tOU1Njcm9sbFZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6c2Nyb2xsRnJhbWVdOworICAgIFtzY3JvbGxWaWV3IHNldEJvcmRlclR5cGU6TlNOb0Jv
cmRlcl07CisgICAgW3Njcm9sbFZpZXcgc2V0SGFzVmVydGljYWxTY3JvbGxlcjpZRVNdOworICAg
IFtzY3JvbGxWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNW
aWV3SGVpZ2h0U2l6YWJsZV07CisgICAgW3Njcm9sbFZpZXcgc2V0RG9jdW1lbnRWaWV3Ol90YWJs
ZVZpZXddOworICAgIFtfdGFibGVWaWV3IHJlbGVhc2VdOworICAgIAorICAgIF9wb3B1cFdpbmRv
dyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJlY3Q6c2Nyb2xsRnJhbWUgc3R5
bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZl
cmVkIGRlZmVyOk5PXTsKKyAgICBbX3BvcHVwV2luZG93IHNldEFscGhhVmFsdWU6MC44OGZdOwor
ICAgIFtfcG9wdXBXaW5kb3cgc2V0Q29udGVudFZpZXc6c2Nyb2xsVmlld107CisgICAgW3Njcm9s
bFZpZXcgcmVsZWFzZV07CisgICAgW19wb3B1cFdpbmRvdyBzZXRIYXNTaGFkb3c6WUVTXTsKKyAg
ICBbX3BvcHVwV2luZG93IHNldE9uZVNob3Q6WUVTXTsKKyAgICBbX3BvcHVwV2luZG93IF9zZXRG
b3JjZUFjdGl2ZUNvbnRyb2xzOllFU107CisgICAgW19wb3B1cFdpbmRvdyBzZXRSZWxlYXNlZFdo
ZW5DbG9zZWQ6Tk9dOworfQorCisvLyBtb3N0bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlC
aW5kaW5nLm0KKy0gKHZvaWQpX3BsYWNlUG9wdXBXaW5kb3c6KE5TUG9pbnQpdG9wTGVmdAorewor
ICAgIGludCBudW1iZXJUb1Nob3cgPSBbX2NvbXBsZXRpb25zIGNvdW50XTsKKyAgICBpZiAobnVt
YmVyVG9TaG93ID4gMjApIHsKKyAgICAgICAgbnVtYmVyVG9TaG93ID0gMjA7CisgICAgfQorCisg
ICAgTlNSZWN0IHdpbmRvd0ZyYW1lOworICAgIE5TUG9pbnQgd29yZFN0YXJ0ID0gdG9wTGVmdDsK
KyAgICB3aW5kb3dGcmFtZS5vcmlnaW4gPSBbW192aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1Nj
cmVlbjpbX3ZpZXcgY29udmVydFBvaW50OndvcmRTdGFydCB0b1ZpZXc6bmlsXV07CisgICAgd2lu
ZG93RnJhbWUuc2l6ZS5oZWlnaHQgPSBudW1iZXJUb1Nob3cgKiBbX3RhYmxlVmlldyByb3dIZWln
aHRdICsgKG51bWJlclRvU2hvdyArIDEpICogW190YWJsZVZpZXcgaW50ZXJjZWxsU3BhY2luZ10u
aGVpZ2h0OworICAgIHdpbmRvd0ZyYW1lLm9yaWdpbi55IC09IHdpbmRvd0ZyYW1lLnNpemUuaGVp
Z2h0OworICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlv
bmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTIuMGZdLCBO
U0ZvbnRBdHRyaWJ1dGVOYW1lLCBuaWxdOworICAgIGZsb2F0IG1heFdpZHRoID0gMC4wZjsKKyAg
ICBpbnQgbWF4SW5kZXggPSAtMTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVt
YmVyVG9TaG93OyBpKyspIHsKKyAgICAgICAgZmxvYXQgd2lkdGggPSBjZWlsZihbW19jb21wbGV0
aW9ucyBvYmplY3RBdEluZGV4OmldIHNpemVXaXRoQXR0cmlidXRlczphdHRyaWJ1dGVzXS53aWR0
aCk7CisgICAgICAgIGlmICh3aWR0aCA+IG1heFdpZHRoKSB7CisgICAgICAgICAgICBtYXhXaWR0
aCA9IHdpZHRoOworICAgICAgICAgICAgbWF4SW5kZXggPSBpOworICAgICAgICB9CisgICAgfQor
ICAgIHdpbmRvd0ZyYW1lLnNpemUud2lkdGggPSAxMDA7CisgICAgaWYgKG1heEluZGV4ID49IDAp
IHsKKyAgICAgICAgbWF4V2lkdGggPSBjZWlsZihbTlNTY3JvbGxWaWV3IGZyYW1lU2l6ZUZvckNv
bnRlbnRTaXplOk5TTWFrZVNpemUobWF4V2lkdGgsIDEwMC4wZikgaGFzSG9yaXpvbnRhbFNjcm9s
bGVyOk5PIGhhc1ZlcnRpY2FsU2Nyb2xsZXI6WUVTIGJvcmRlclR5cGU6TlNOb0JvcmRlcl0ud2lk
dGgpOworICAgICAgICBtYXhXaWR0aCA9IGNlaWxmKFtOU1dpbmRvdyBmcmFtZVJlY3RGb3JDb250
ZW50UmVjdDpOU01ha2VSZWN0KDAuMGYsIDAuMGYsIG1heFdpZHRoLCAxMDAuMGYpIHN0eWxlTWFz
azpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrXS5zaXplLndpZHRoKTsKKyAgICAgICAgbWF4V2lkdGgg
Kz0gNS4wZjsKKyAgICAgICAgd2luZG93RnJhbWUuc2l6ZS53aWR0aCA9IE1BWChtYXhXaWR0aCwg
d2luZG93RnJhbWUuc2l6ZS53aWR0aCk7CisgICAgICAgIG1heFdpZHRoID0gTUlOKDQwMC4wZiwg
d2luZG93RnJhbWUuc2l6ZS53aWR0aCk7CisgICAgfQorICAgIFtfcG9wdXBXaW5kb3cgc2V0RnJh
bWU6d2luZG93RnJhbWUgZGlzcGxheTpOT107CisgICAgCisgICAgW190YWJsZVZpZXcgcmVsb2Fk
RGF0YV07CisgICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJbmRleFNldCBpbmRl
eFNldFdpdGhJbmRleDowXSBieUV4dGVuZGluZ1NlbGVjdGlvbjpOT107CisgICAgW190YWJsZVZp
ZXcgc2Nyb2xsUm93VG9WaXNpYmxlOjBdOworICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsK
KyAgICBbX3BvcHVwV2luZG93IHNldExldmVsOk5TUG9wVXBNZW51V2luZG93TGV2ZWxdOworICAg
IFtfcG9wdXBXaW5kb3cgb3JkZXJGcm9udDpuaWxdOyAgICAKKyAgICBbW192aWV3IHdpbmRvd10g
YWRkQ2hpbGRXaW5kb3c6X3BvcHVwV2luZG93IG9yZGVyZWQ6TlNXaW5kb3dBYm92ZV07Cit9CisK
Ky0gKHZvaWQpZG9Db21wbGV0aW9uCit7CisgICAgaWYgKCFfcG9wdXBXaW5kb3cpIHsKKyAgICAg
ICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXTsKKyAgICAgICAgaWYgKCFjaGVja2VyKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
Ik5vIE5TU3BlbGxDaGVja2VyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KKyAgICAgICAgV2ViRnJhbWUgKmZy
YW1lID0gW192aWV3IF9mcmFtZV07CisgICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQo
Y29yZShmcmFtZSktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAg
ICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVu
dFNlbGVjdGlvbjpTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQKKyAgICAgICAgICAgIGRpcmVj
dGlvbjpTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCBncmFudWxhcml0eTpXb3JkR3JhbnVs
YXJpdHldOworICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdl
XTsKKyAgICAgICAgW3ByZWZpeCBzZXRFbmQ6W3NlbGVjdGlvbiBzdGFydENvbnRhaW5lcl0gb2Zm
c2V0OltzZWxlY3Rpb24gc3RhcnRPZmZzZXRdXTsKKworICAgICAgICAvLyBSZWplY3Qgc29tZSBO
T1AgY2FzZXMKKyAgICAgICAgaWYgKFtwcmVmaXggY29sbGFwc2VkXSkgeworICAgICAgICAgICAg
TlNCZWVwKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgTlNTdHJp
bmcgKnByZWZpeFN0ciA9IFtmcmFtZSBfc3RyaW5nRm9yUmFuZ2U6cHJlZml4XTsKKyAgICAgICAg
TlNTdHJpbmcgKnRyaW1tZWRQcmVmaXggPSBbcHJlZml4U3RyIHN0cmluZ0J5VHJpbW1pbmdDaGFy
YWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVy
U2V0XV07CisgICAgICAgIGlmIChbdHJpbW1lZFByZWZpeCBsZW5ndGhdID09IDApIHsKKyAgICAg
ICAgICAgIE5TQmVlcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHByZWZpeExlbmd0aCA9IFtwcmVmaXhTdHIgbGVuZ3RoXTsKKworICAgICAgICAvLyBMb29rdXAg
bWF0Y2hlcworICAgICAgICBbX2NvbXBsZXRpb25zIHJlbGVhc2VdOworICAgICAgICBfY29tcGxl
dGlvbnMgPSBbY2hlY2tlciBjb21wbGV0aW9uc0ZvclBhcnRpYWxXb3JkUmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgW3ByZWZpeFN0ciBsZW5ndGhdKSBpblN0cmluZzpwcmVmaXhTdHIgbGFuZ3VhZ2U6bmls
IGluU3BlbGxEb2N1bWVudFdpdGhUYWc6W1tfdmlldyBfd2ViVmlld10gc3BlbGxDaGVja2VyRG9j
dW1lbnRUYWddXTsKKyAgICAgICAgW19jb21wbGV0aW9ucyByZXRhaW5dOworICAgIAorICAgICAg
ICBpZiAoIV9jb21wbGV0aW9ucyB8fCBbX2NvbXBsZXRpb25zIGNvdW50XSA9PSAwKSB7CisgICAg
ICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgfSBlbHNlIGlmIChbX2NvbXBsZXRpb25zIGNvdW50
XSA9PSAxKSB7CisgICAgICAgICAgICBbc2VsZiBfaW5zZXJ0TWF0Y2g6W19jb21wbGV0aW9ucyBv
YmplY3RBdEluZGV4OjBdXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
X29yaWdpbmFsU3RyaW5nKTsgICAgICAgLy8gdGhpcyBzaG91bGQgb25seSBiZSBzZXQgSUZGIHdl
IGhhdmUgYSBwb3B1cCB3aW5kb3cKKyAgICAgICAgICAgIF9vcmlnaW5hbFN0cmluZyA9IFtbZnJh
bWUgX3N0cmluZ0ZvclJhbmdlOnNlbGVjdGlvbl0gcmV0YWluXTsKKyAgICAgICAgICAgIFtzZWxm
IF9idWlsZFVJXTsKKyAgICAgICAgICAgIE5TUmVjdCB3b3JkUmVjdCA9IFtmcmFtZSBfY2FyZXRS
ZWN0QXROb2RlOlt3aG9sZVdvcmQgc3RhcnRDb250YWluZXJdIG9mZnNldDpbd2hvbGVXb3JkIHN0
YXJ0T2Zmc2V0XSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbV07CisgICAg
ICAgICAgICAvLyArMSB0byBiZSB1bmRlciB0aGUgd29yZCwgbm90IHRoZSBjYXJldAorICAgICAg
ICAgICAgLy8gRklYTUUgLSAzNzY5NjUyIC0gV3JvbmcgcG9zaXRpb25pbmcgZm9yIHJpZ2h0IHRv
IGxlZnQgbGFuZ3VhZ2VzLiAgV2Ugc2hvdWxkIGxpbmUgdXAgdGhlIHVwcGVyCisgICAgICAgICAg
ICAvLyByaWdodCBjb3JuZXIgd2l0aCB0aGUgY2FyZXQgaW5zdGVhZCBvZiB1cHBlciBsZWZ0LCBh
bmQgdGhlICsxIHdvdWxkIGJlIGEgLTEuCisgICAgICAgICAgICBOU1BvaW50IHdvcmRMb3dlckxl
ZnQgPSB7IE5TTWluWCh3b3JkUmVjdCkrMSwgTlNNYXhZKHdvcmRSZWN0KSB9OworICAgICAgICAg
ICAgW3NlbGYgX3BsYWNlUG9wdXBXaW5kb3c6d29yZExvd2VyTGVmdF07CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0
Ok5PXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZW5kUmV2ZXJ0aW5nQ2hhbmdlOihCT09MKXJldmVy
dENoYW5nZSBtb3ZlTGVmdDooQk9PTClnb0xlZnQKK3sKKyAgICBpZiAoX3BvcHVwV2luZG93KSB7
CisgICAgICAgIC8vIHRlYXIgZG93biBVSQorICAgICAgICBbW192aWV3IHdpbmRvd10gcmVtb3Zl
Q2hpbGRXaW5kb3c6X3BvcHVwV2luZG93XTsKKyAgICAgICAgW19wb3B1cFdpbmRvdyBvcmRlck91
dDpzZWxmXTsKKyAgICAgICAgLy8gTXVzdCBhdXRvcmVsZWFzZSBiZWNhdXNlIGV2ZW50IHRyYWNr
aW5nIGNvZGUgbWF5IGJlIG9uIHRoZSBzdGFjayB0b3VjaGluZyBVSQorICAgICAgICBbX3BvcHVw
V2luZG93IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgX3BvcHVwV2luZG93ID0gbmlsOworCisgICAg
ICAgIGlmIChyZXZlcnRDaGFuZ2UpIHsKKyAgICAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtf
dmlldyBfZnJhbWVdOworICAgICAgICAgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRl
eHQ6X29yaWdpbmFsU3RyaW5nIHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9d
OworICAgICAgICB9IGVsc2UgaWYgKFtfdmlldyBfaGFzU2VsZWN0aW9uXSkgeworICAgICAgICAg
ICAgaWYgKGdvTGVmdCkKKyAgICAgICAgICAgICAgICBbX3ZpZXcgbW92ZUJhY2t3YXJkOm5pbF07
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW192aWV3IG1vdmVGb3J3YXJkOm5p
bF07CisgICAgICAgIH0KKyAgICAgICAgW19vcmlnaW5hbFN0cmluZyByZWxlYXNlXTsKKyAgICAg
ICAgX29yaWdpbmFsU3RyaW5nID0gbmlsOworICAgIH0KKyAgICAvLyBlbHNlIHRoZXJlIGlzIG5v
IHN0YXRlIHRvIGFib3J0IGlmIHRoZSB3aW5kb3cgd2FzIG5vdCB1cAorfQorCistIChCT09MKXBv
cHVwV2luZG93SXNPcGVuCit7CisgICAgcmV0dXJuIF9wb3B1cFdpbmRvdyAhPSBuaWw7Cit9CisK
Ky8vIFdlYkhUTUxWaWV3IGdpdmVzIHVzIGEgY3JhY2sgYXQga2V5IGV2ZW50cyBpdCBzZWVzLiBS
ZXR1cm4gd2hldGhlciB3ZSBjb25zdW1lZCB0aGUgZXZlbnQuCisvLyBUaGUgZmVhdHVyZXMgZm9y
IHRoZSB2YXJpb3VzIGtleXMgbWltaWMgTlNUZXh0Vmlldy4KKy0gKEJPT0wpZmlsdGVyS2V5RG93
bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKCFfcG9wdXBXaW5kb3cpCisgICAgICAgIHJl
dHVybiBOTzsKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmlu
Z01vZGlmaWVyc107CisgICAgaWYgKCFbc3RyaW5nIGxlbmd0aF0pCisgICAgICAgIHJldHVybiBO
TzsKKyAgICB1bmljaGFyIGMgPSBbc3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgaWYg
KGMgPT0gTlNVcEFycm93RnVuY3Rpb25LZXkpIHsKKyAgICAgICAgaW50IHNlbGVjdGVkUm93ID0g
W190YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOworICAgICAgICBpZiAoMCA8IHNlbGVjdGVkUm93KSB7
CisgICAgICAgICAgICBbX3RhYmxlVmlldyBzZWxlY3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGlu
ZGV4U2V0V2l0aEluZGV4OnNlbGVjdGVkUm93IC0gMV0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9d
OworICAgICAgICAgICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxlOnNlbGVjdGVkUm93
IC0gMV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYgKGMg
PT0gTlNEb3duQXJyb3dGdW5jdGlvbktleSkgeworICAgICAgICBpbnQgc2VsZWN0ZWRSb3cgPSBb
X3RhYmxlVmlldyBzZWxlY3RlZFJvd107CisgICAgICAgIGlmIChzZWxlY3RlZFJvdyA8IChpbnQp
W19jb21wbGV0aW9ucyBjb3VudF0gLSAxKSB7CisgICAgICAgICAgICBbX3RhYmxlVmlldyBzZWxl
Y3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OnNlbGVjdGVkUm93ICsg
MV0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9dOworICAgICAgICAgICAgW190YWJsZVZpZXcgc2Ny
b2xsUm93VG9WaXNpYmxlOnNlbGVjdGVkUm93ICsgMV07CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIFlFUzsKKyAgICB9CisgICAgaWYgKGMgPT0gTlNSaWdodEFycm93RnVuY3Rpb25LZXkgfHwg
YyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdCcpIHsKKyAgICAgICAgLy8gRklYTUU6
IFdoYXQgYWJvdXQgYmFja3RhYj8KKyAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5P
IG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYgKGMgPT0g
TlNMZWZ0QXJyb3dGdW5jdGlvbktleSkgeworICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFu
Z2U6Tk8gbW92ZUxlZnQ6WUVTXTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYg
KGMgPT0gMHgxQiB8fCBjID09IE5TRjVGdW5jdGlvbktleSkgeworICAgICAgICAvLyBGSVhNRTog
RjU/CisgICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwor
ICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9PSAnICcgfHwgYyA+PSAweDIx
ICYmIGMgPD0gMHgyRiB8fCBjID49IDB4M0EgJiYgYyA8PSAweDQwIHx8IGMgPj0gMHg1QiAmJiBj
IDw9IDB4NjAgfHwgYyA+PSAweDdCICYmIGMgPD0gMHg3RCkgeworICAgICAgICAvLyBGSVhNRTog
SXMgdGhlIGFib3ZlIGxpc3Qgb2Yga2V5cyByZWFsbHkgZGVmaW5pdGl2ZT8KKyAgICAgICAgLy8g
T3JpZ2luYWxseSB0aGlzIGNvZGUgY2FsbGVkIGlzcHVuY3Q7IGFyZW4ndCB0aGVyZSBvdGhlciBw
dW5jdHVhdGlvbiBrZXlzIG9uIGludGVybmF0aW9uYWwga2V5Ym9hcmRzPworICAgICAgICBbc2Vs
ZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgICAgICByZXR1cm4gTk87
IC8vIGxldCB0aGUgY2hhciBnZXQgaW5zZXJ0ZWQKKyAgICB9CisgICAgcmV0dXJuIE5POworfQor
CistICh2b2lkKV9yZWZsZWN0U2VsZWN0aW9uCit7CisgICAgaW50IHNlbGVjdGVkUm93ID0gW190
YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOworICAgIEFTU0VSVChzZWxlY3RlZFJvdyA+PSAwICYmIHNl
bGVjdGVkUm93IDwgKGludClbX2NvbXBsZXRpb25zIGNvdW50XSk7CisgICAgW3NlbGYgX2luc2Vy
dE1hdGNoOltfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDpzZWxlY3RlZFJvd11dOworfQorCist
ICh2b2lkKXRhYmxlQWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBbc2VsZiBfcmVmbGVjdFNlbGVj
dGlvbl07CisgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKK30K
KworLSAoTlNJbnRlZ2VyKW51bWJlck9mUm93c0luVGFibGVWaWV3OihOU1RhYmxlVmlldyAqKXRh
YmxlVmlldworeworICAgIHJldHVybiBbX2NvbXBsZXRpb25zIGNvdW50XTsKK30KKworLSAoaWQp
dGFibGVWaWV3OihOU1RhYmxlVmlldyAqKXRhYmxlVmlldyBvYmplY3RWYWx1ZUZvclRhYmxlQ29s
dW1uOihOU1RhYmxlQ29sdW1uICopdGFibGVDb2x1bW4gcm93OihOU0ludGVnZXIpcm93Cit7Cisg
ICAgcmV0dXJuIFtfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDpyb3ddOworfQorCistICh2b2lk
KXRhYmxlVmlld1NlbGVjdGlvbkRpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRp
b24KK3sKKyAgICBbc2VsZiBfcmVmbGVjdFNlbGVjdGlvbl07Cit9CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJEb2N1bWVudFByaXZhdGVQcm90b2NvbHMpCisKKy0g
KE5TUmVjdClzZWxlY3Rpb25SZWN0Cit7CisgICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKQor
ICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uQm91bmRzKCk7Cisg
ICAgcmV0dXJuIE5TWmVyb1JlY3Q7Cit9CisKKy0gKE5TQXJyYXkgKilzZWxlY3Rpb25UZXh0UmVj
dHMKK3sKKyAgICBpZiAoIVtzZWxmIF9oYXNTZWxlY3Rpb25dKQorICAgICAgICByZXR1cm4gbmls
OworICAgIAorICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGxpc3Q7CisgICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlv
blRleHRSZWN0cyhsaXN0KTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LnNpemUoKTsKKyAg
ICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRX
aXRoQ2FwYWNpdHk6c2l6ZV0gYXV0b3JlbGVhc2VdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCisgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVl
V2l0aFJlY3Q6bGlzdFtpXV1dOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5T
VmlldyAqKXNlbGVjdGlvblZpZXcKK3sKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoTlNJbWFn
ZSAqKXNlbGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAor
eworICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKKyAgICAgICAgcmV0dXJuIGNvcmUoW3Nl
bGYgX2ZyYW1lXSktPnNlbGVjdGlvbkltYWdlKGZvcmNlQmxhY2tUZXh0KTsKKyAgICByZXR1cm4g
bmlsOworfQorCistIChOU1JlY3Qpc2VsZWN0aW9uSW1hZ2VSZWN0Cit7CisgICAgaWYgKFtzZWxm
IF9oYXNTZWxlY3Rpb25dKQorICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2Vs
ZWN0aW9uQm91bmRzKCk7CisgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Cit9CisKKy0gKE5TQXJyYXkg
KilwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24KK3sKKyAgICBpZiAoW3NlbGYgX2NhblNtYXJ0
Q29weU9yRGVsZXRlXSkgeworICAgICAgICBOU011dGFibGVBcnJheSAqdHlwZXMgPSBbW1tbc2Vs
ZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gbXV0YWJsZUNvcHldIGF1dG9yZWxl
YXNlXTsKKyAgICAgICAgW3R5cGVzIGFkZE9iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07
CisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gW1tz
ZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXTsKKyAgICB9Cit9CisKKy0gKHZv
aWQpd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9Q
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgW3NlbGYgX3dyaXRl
U2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2Fy
ZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOm5pbF07Cit9CisKKy0gKHZvaWQpc2VsZWN0QWxsCit7
CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKGNv
cmVGcmFtZSkKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0QWxsKCk7Cit9
CisKKy0gKHZvaWQpZGVzZWxlY3RBbGwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAg
IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyKCk7Cit9CisKKy0gKE5TU3RyaW5nICopc3Ry
aW5nCit7CisgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9zdHJpbmdGb3JSYW5nZTpbc2VsZiBf
ZG9jdW1lbnRSYW5nZV1dOworfQorCistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfYXR0cmlidXRl
U3RyaW5nRnJvbURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCit7CisgICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOworI2lmICFMT0dfRElTQUJMRUQgICAgICAgIAorICAg
IGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOworI2VuZGlmICAgIAor
ICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIF9pbml0
V2l0aERPTVJhbmdlOnJhbmdlXSBhdXRvcmVsZWFzZV07CisjaWYgIUxPR19ESVNBQkxFRAorICAg
IGRvdWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Cisg
ICAgTE9HKFRpbWluZywgImNyZWF0aW5nIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2VsZWN0aW9u
IHRvb2sgJWYgc2Vjb25kcy4iLCBkdXJhdGlvbik7CisjZW5kaWYKKyAgICByZXR1cm4gYXR0cmli
dXRlZFN0cmluZzsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmlu
ZworeworICAgIERPTURvY3VtZW50ICpkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3Vt
ZW50XTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBf
YXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dOwor
ICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgeworICAgICAgICBEb2N1bWVudCogY29yZURvY3Vt
ZW50ID0gY29yZShkb2N1bWVudCk7CisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbTlNBdHRy
aWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpSYW5nZTo6Y3JlYXRl
KGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVu
dC0+Y2hpbGROb2RlQ291bnQoKSkuZ2V0KCldOworICAgIH0KKyAgICByZXR1cm4gYXR0cmlidXRl
ZFN0cmluZzsKK30KKworLSAoTlNTdHJpbmcgKilzZWxlY3RlZFN0cmluZworeworICAgIHJldHVy
biBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0ZWRTdHJpbmddOworfQorCistIChOU0F0dHJpYnV0ZWRT
dHJpbmcgKilzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICBOU0F0dHJpYnV0ZWRTdHJp
bmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdl
OltzZWxmIF9zZWxlY3RlZFJhbmdlXV07CisgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7Cisg
ICAgICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgICAgICBp
ZiAoY29yZUZyYW1lKSB7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmli
dXRlZFN0cmluZ0Zyb21SYW5nZTpyYW5nZS5nZXQoKV07CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Cit9CisKKy0gKEJPT0wpc3VwcG9ydHNUZXh0RW5jb2Rp
bmcKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcg
KilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNl
RmxhZyB3cmFwOihCT09MKXdyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNl
bGVjdGlvbgoreworICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQorICAgICAgICByZXR1cm4gTk87
CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJu
IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNl
RmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rpb24pOworfQorCitAZW5kCisKK0BpbXBsZW1l
bnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRJbnRlcm5hbFByb3RvY29scykKKworLSAo
TlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICByZXR1
cm4gW3NlbGYgZWxlbWVudEF0UG9pbnQ6cG9pbnQgYWxsb3dTaGFkb3dDb250ZW50Ok5PXTsKK30K
KworLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgYWxsb3dT
aGFkb3dDb250ZW50OihCT09MKWFsbG93Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRl
c3RSZXN1bHQ6Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQo
SW50UG9pbnQocG9pbnQpLCBhbGxvdyldIGF1dG9yZWxlYXNlXTsKK30KKworLSAoTlNVSW50ZWdl
ciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6
KEJPT0wpY2FzZUZsYWcgbGltaXQ6KE5TVUludGVnZXIpbGltaXQKK3sKKyAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0
KHN0cmluZywgY2FzZUZsYWcsIGxpbWl0KTsKK30KKworLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0
Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCit7CisgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICBjb3JlRnJhbWUtPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQo
bmV3VmFsdWUpOworfQorCistIChCT09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQK
K3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1
cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZCgpOworfQorCistICh2b2lkKXVubWFya0FsbFRleHRNYXRjaGVzCit7CisgICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50
KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGRvY3VtZW50LT5y
ZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworfQorCistIChOU0FycmF5
ICopcmVjdHNGb3JUZXh0TWF0Y2hlcworeworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gW05TQXJy
YXkgYXJyYXldOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwor
CisgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzID0gZG9jdW1lbnQtPnJlbmRlcmVkUmVjdHNGb3JN
YXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIHVuc2lnbmVkIGNvdW50ID0g
cmVjdHMuc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IGNvdW50OyArK2luZGV4KQorICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RzW2luZGV4XV1dOyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitAZW5kCisKKy8vIFRoaXMgaXMgdXNlZCBieSBBcHBLaXQgYW5kIGlzIGluY2x1ZGVk
IGhlcmUgc28gdGhhdCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgaXMgb25seSBkZWZpbmVkIG9uY2Uu
CitAaW1wbGVtZW50YXRpb24gTlNVUkwgKFdlYkRhdGFVUkwpCisKKysgKE5TVVJMICopX3dlYl91
bmlxdWVXZWJEYXRhVVJMCit7CisgICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCk7CisgICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJp
bmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Cisg
ICAgQ0ZSZWxlYXNlKFVVSURSZWYpOworICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0
cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8vJUAiLCBXZWJEYXRhUHJvdG9j
b2xTY2hlbWUsIFVVSURTdHJpbmddXTsKKyAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7CisgICAg
cmV0dXJuIFVSTDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViUmVzcG9uZGVyQ2hh
aW5TaW5rCisKKy0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVyICopY2hh
aW4KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIF9sYXN0UmVzcG9uZGVySW5DaGFp
biA9IGNoYWluOworICAgIHdoaWxlIChOU1Jlc3BvbmRlciAqbmV4dCA9IFtfbGFzdFJlc3BvbmRl
ckluQ2hhaW4gbmV4dFJlc3BvbmRlcl0pCisgICAgICAgIF9sYXN0UmVzcG9uZGVySW5DaGFpbiA9
IG5leHQ7CisgICAgW19sYXN0UmVzcG9uZGVySW5DaGFpbiBzZXROZXh0UmVzcG9uZGVyOnNlbGZd
OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRldGFjaAoreworICAgIFtfbGFzdFJl
c3BvbmRlckluQ2hhaW4gc2V0TmV4dFJlc3BvbmRlcjpuaWxdOworICAgIF9sYXN0UmVzcG9uZGVy
SW5DaGFpbiA9IG5pbDsKK30KKworLSAoQk9PTClyZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQKK3sK
KyAgICByZXR1cm4gX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsKK30KKworLSAodm9pZClub1Jl
c3BvbmRlckZvcjooU0VMKXNlbGVjdG9yCit7CisgICAgX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFu
ZCA9IFlFUzsKK30KKworLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IK
K3sKKyAgICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOworfQorCistIChCT09MKXRy
eVRvUGVyZm9ybTooU0VMKWFjdGlvbiB3aXRoOihpZClvYmplY3QKK3sKKyAgICBfcmVjZWl2ZWRV
bmhhbmRsZWRDb21tYW5kID0gWUVTOworICAgIHJldHVybiBZRVM7Cit9CisKK0BlbmQKSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgJ
KHJldmlzaW9uIDQ0MjkyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9u
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY0MzMgKzEsNDUgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogICAgICAgICAgIChDKSAyMDA2LCAyMDA3IEdyYWhhbSBEZW5u
aXMgKGdyYWhhbS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCiAgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaW1wb3J0ICJXZWJIVE1MVmlldy5oIgotCi0jaW1wb3J0ICJE
T01DU1NTdHlsZURlY2xhcmF0aW9uSW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTURvY3VtZW50RnJh
Z21lbnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NRG9jdW1lbnRJbnRlcm5hbC5oIgotI2ltcG9y
dCAiRE9NTm9kZUludGVybmFsLmgiCi0jaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCi0jaW1w
b3J0ICJXZWJBcmNoaXZlLmgiCi0jaW1wb3J0ICJXZWJDbGlwVmlldy5oIgotI2ltcG9ydCAiV2Vi
RE9NT3BlcmF0aW9uc0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJEYXRhU291cmNlSW50ZXJuYWwu
aCIKLSNpbXBvcnQgIldlYkRlZmF1bHRVSURlbGVnYXRlLmgiCi0jaW1wb3J0ICJXZWJEb2N1bWVu
dEludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaCIKLSNpbXBv
cnQgIldlYkVkaXRpbmdEZWxlZ2F0ZS5oIgotI2ltcG9ydCAiV2ViRWxlbWVudERpY3Rpb25hcnku
aCIKLSNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkZyYW1lUHJpdmF0
ZS5oIgotI2ltcG9ydCAiV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkhUTUxS
ZXByZXNlbnRhdGlvblByaXZhdGUuaCIKLSNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIK
LSNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFz
LmgiCi0jaW1wb3J0ICJXZWJLaXRWZXJzaW9uQ2hlY2tzLmgiCi0jaW1wb3J0ICJXZWJMb2NhbGl6
YWJsZVN0cmluZ3MuaCIKLSNpbXBvcnQgIldlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgot
I2ltcG9ydCAiV2ViTlNFdmVudEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4
dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNJbWFnZUV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNPYmpl
Y3RFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TUGFzdGVib2FyZEV4dHJhcy5oIgotI2ltcG9ydCAi
V2ViTlNQcmludE9wZXJhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIK
LSNpbXBvcnQgIldlYk5TVmlld0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5W
aWV3LmgiCi0jaW1wb3J0ICJXZWJOb2RlSGlnaGxpZ2h0LmgiCi0jaW1wb3J0ICJXZWJQbHVnaW5D
b250cm9sbGVyLmgiCi0jaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgotI2ltcG9ydCAiV2ViUHJl
ZmVyZW5jZXNQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJSZXNvdXJjZVByaXZhdGUuaCIKLSNpbXBv
cnQgIldlYlN0cmluZ1RydW5jYXRvci5oIgotI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgot
I2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlZpZXdJbnRlcm5h
bC5oIgotI2ltcG9ydCA8QXBwS2l0L05TQWNjZXNzaWJpbGl0eS5oPgotI2ltcG9ydCA8QXBwbGlj
YXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NhY2hlZEltYWdl
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NhY2hlZFJlc291cmNlQ2xpZW50Lmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0NvbG9yTWFjLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Q29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9E
b2N1bWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0RyYWdDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9FZGl0b3JEZWxldGVBY3Rpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RWxlbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvRXhjZXB0aW9uSGFuZGxlcnMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9MZWdhY3lXZWJB
cmNoaXZlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1JhbmdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZv
bnREYXRhLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RleHQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2Vi
Q29yZU9iakNFeHRyYXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRleHRSZW5kZXJlci5o
PgotI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KLSNpbXBvcnQgPFdlYktpdC9ET00uaD4KLSNp
bXBvcnQgPFdlYktpdC9ET01FeHRlbnNpb25zLmg+Ci0jaW1wb3J0IDxXZWJLaXQvRE9NUHJpdmF0
ZS5oPgotI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jaW1wb3J0IDxkbGZjbi5o
PgotI2ltcG9ydCA8bGltaXRzPgotI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
Lmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0jaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgV1RGOwotCi1AaW50ZXJm
YWNlIE5TV2luZG93IChCb3JkZXJWaWV3QWNjZXNzKQotLSAoTlNWaWV3Kilfd2ViX2JvcmRlclZp
ZXc7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykK
LS0gKE5TVmlldyopX3dlYl9ib3JkZXJWaWV3Ci17Ci0gICAgcmV0dXJuIF9ib3JkZXJWaWV3Owot
fQotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlJlc3BvbmRlckNoYWluU2luayA6IE5TUmVzcG9uZGVy
IHsKLSAgICBOU1Jlc3BvbmRlciogX2xhc3RSZXNwb25kZXJJbkNoYWluOwotICAgIEJPT0wgX3Jl
Y2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsKLX0KLS0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46
KE5TUmVzcG9uZGVyICopY2hhaW47Ci0tICh2b2lkKWRldGFjaDsKLS0gKEJPT0wpcmVjZWl2ZWRV
bmhhbmRsZWRDb21tYW5kOwotQGVuZAotCi1zdGF0aWMgSU1QIG9sZFNldEN1cnNvcklNUCA9IE5V
TEw7Ci0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotCi1zdGF0aWMgSU1QIG9sZFJlc2V0Q3Vy
c29yUmVjdHNJTVAgPSBOVUxMOwotc3RhdGljIEJPT0wgY2FuU2V0Q3Vyc29yID0gWUVTOwotCi1z
dGF0aWMgdm9pZCByZXNldEN1cnNvclJlY3RzKE5TV2luZG93KiBzZWxmLCBTRUwgY21kKQotewot
ICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBtb3VzZUxvY2F0aW9uT3V0c2lkZU9mRXZlbnRTdHJl
YW1dOwotICAgIE5TVmlldyogdmlldyA9IFtbc2VsZiBfd2ViX2JvcmRlclZpZXddIGhpdFRlc3Q6
cG9pbnRdOwotICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
KSB7Ci0gICAgICAgIFdlYkhUTUxWaWV3ICpodG1sVmlldyA9IChXZWJIVE1MVmlldyopdmlldzsK
LSAgICAgICAgTlNQb2ludCBsb2NhbFBvaW50ID0gW2h0bWxWaWV3IGNvbnZlcnRQb2ludDpwb2lu
dCBmcm9tVmlldzpuaWxdOwotICAgICAgICBOU0RpY3Rpb25hcnkgKmRpY3QgPSBbaHRtbFZpZXcg
ZWxlbWVudEF0UG9pbnQ6bG9jYWxQb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOwotICAgICAg
ICBET01FbGVtZW50ICplbGVtZW50ID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRET01O
b2RlS2V5XTsKLSAgICAgICAgaWYgKCFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MQXBw
bGV0RWxlbWVudCBjbGFzc11dICYmICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MT2Jq
ZWN0RWxlbWVudCBjbGFzc11dICYmCi0gICAgICAgICAgICAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFz
czpbRE9NSFRNTEVtYmVkRWxlbWVudCBjbGFzc11dKQotICAgICAgICAgICAgY2FuU2V0Q3Vyc29y
ID0gTk87Ci0gICAgfQotICAgIG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAoc2VsZiwgY21kKTsKLSAg
ICBjYW5TZXRDdXJzb3IgPSBZRVM7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldEN1cnNvcihOU0N1cnNv
ciogc2VsZiwgU0VMIGNtZCkKLXsKLSAgICBpZiAoY2FuU2V0Q3Vyc29yKQotICAgICAgICBvbGRT
ZXRDdXJzb3JJTVAoc2VsZiwgY21kKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIHZvaWQgc2V0Q3Vy
c29yKE5TV2luZG93KiBzZWxmLCBTRUwgY21kLCBOU1BvaW50IHBvaW50KQotewotICAgIE5TVmll
dyogdmlldyA9IFtbc2VsZiBfd2ViX2JvcmRlclZpZXddIGhpdFRlc3Q6cG9pbnRdOwotICAgIGlm
IChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7Ci0gICAgICAgIFdl
YkhUTUxWaWV3ICpodG1sVmlldyA9IChXZWJIVE1MVmlldyopdmlldzsKLSAgICAgICAgTlNQb2lu
dCBsb2NhbFBvaW50ID0gW2h0bWxWaWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxd
OwotICAgICAgICBOU0RpY3Rpb25hcnkgKmRpY3QgPSBbaHRtbFZpZXcgZWxlbWVudEF0UG9pbnQ6
bG9jYWxQb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOwotICAgICAgICBET01FbGVtZW50ICpl
bGVtZW50ID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRET01Ob2RlS2V5XTsKLSAgICAg
ICAgaWYgKCFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MQXBwbGV0RWxlbWVudCBjbGFz
c11dICYmICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MT2JqZWN0RWxlbWVudCBjbGFz
c11dICYmCi0gICAgICAgICAgICAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEVtYmVk
RWxlbWVudCBjbGFzc11dKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBvbGRTZXRD
dXJzb3JJTVAoc2VsZiwgY21kLCBwb2ludCk7Ci19Ci0KLSNlbmRpZgotCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotCi1AaW50ZXJmYWNlIFdlYkxheWVySG9zdGluZ1ZpZXcgOiBO
U1ZpZXcKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkxheWVySG9zdGluZ1ZpZXcKLQotLy8g
RW1wdHkgTlNWaWV3cyBpbnRlcmNlcHQgcmlnaHRNb3VzZURvd246IHRvIGRvIGNvbnRleHQgbWVu
dSBoYW5kbGluZywgYnV0IHdlIG5lZWQgdGhlIFdlYkxheWVySG9zdGluZ1ZpZXcgdG8KLS8vIGxl
dCByaWdodCBtb3VzZSBjbGlja3MgdGhyb3VnaC4KLS0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5T
RXZlbnQgKilldmVudAotewotICAgIFtbc2VsZiBuZXh0UmVzcG9uZGVyXSBwZXJmb3JtU2VsZWN0
b3I6X2NtZCB3aXRoT2JqZWN0OmV2ZW50XTsKLX0KLQotQGVuZAotCi0jZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotCi1leHRlcm4gIkMiIHsKLQotLy8gTmVlZCB0byBkZWNs
YXJlIHRoZXNlIGF0dHJpYnV0ZSBuYW1lcyBiZWNhdXNlIEFwcEtpdCBleHBvcnRzIHRoZW0gYnV0
IGRvZXMgbm90IG1ha2UgdGhlbSBhdmFpbGFibGUgaW4gQVBJIG9yIFNQSSBoZWFkZXJzLgotCi1l
eHRlcm4gTlNTdHJpbmcgKk5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWU7Ci1leHRl
cm4gTlNTdHJpbmcgKk5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWU7Ci0K
LX0KLQotQGludGVyZmFjZSBOU1ZpZXcgKFdlYk5TVmlld0RldGFpbHMpCi0tICh2b2lkKV9yZWN1
cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zp
c2libGVSZWN0OihCT09MKWlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihO
U1ZpZXcgKil2aXNpYmxlVmlldyB0b3BWaWV3OihCT09MKXRvcFZpZXc7Ci0tICh2b2lkKV9yZWN1
cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3VzOihCT09MKW5lZWRzTG9ja0ZvY3VzIHZp
c1JlY3Q6KE5TUmVjdCl2aXNSZWN0OwotLSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJlY3Vyc2Ug
ZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdCBpbkNvbnRleHQ6
KE5TR3JhcGhpY3NDb250ZXh0ICopY29udGV4dCB0b3BWaWV3OihCT09MKXRvcFZpZXc7Ci0tIChO
U1JlY3QpX2RpcnR5UmVjdDsKLS0gKHZvaWQpX3NldERyYXdzT3duRGVzY2VuZGFudHM6KEJPT0wp
ZHJhd3NPd25EZXNjZW5kYW50czsKLS0gKHZvaWQpX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1
ZUFuY2VzdG9yczsKLS0gKHZvaWQpX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZTsKLUBlbmQKLQotQGlu
dGVyZmFjZSBOU0FwcGxpY2F0aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0YWlscykKLS0gKHZvaWQp
c3BlYWtTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TV2lu
ZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCi0tIChpZClfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJl
c2lnbmluZzsKLS0gKHZvaWQpX3NldEZvcmNlQWN0aXZlQ29udHJvbHM6KEJPT0wpZmxhZzsKLUBl
bmQKLQotQGludGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKFdlYk5TQXR0cmlidXRlZFN0cmlu
Z0RldGFpbHMpCi0tIChpZClfaW5pdFdpdGhET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKLS0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2Ug
ZG9jdW1lbnQ6KERPTURvY3VtZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0Rp
Y3Rpb25hcnkgKilkaWN0IHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7Ci1A
ZW5kCi0KLUBpbnRlcmZhY2UgTlNTcGVsbENoZWNrZXIgKFdlYk5TU3BlbGxDaGVja2VyRGV0YWls
cykKLS0gKHZvaWQpbGVhcm5Xb3JkOihOU1N0cmluZyAqKXdvcmQ7Ci1AZW5kCi0KLS8vIEJ5IGlt
YWdpbmcgdG8gYSB3aWR0aCBhIGxpdHRsZSB3aWRlciB0aGFuIHRoZSBhdmFpbGFibGUgcGl4ZWxz
LAotLy8gdGhpbiBwYWdlcyB3aWxsIGJlIHNjYWxlZCBkb3duIGEgbGl0dGxlLCBtYXRjaGluZyB0
aGUgd2F5IHRoZXkKLS8vIHByaW50IGluIElFIGFuZCBDYW1pbm8uIFRoaXMgbGV0cyB0aGVtIHVz
ZSBmZXdlciBzaGVldHMgdGhhbiB0aGV5Ci0vLyB3b3VsZCBvdGhlcndpc2UsIHdoaWNoIGlzIHBy
ZXN1bWFibHkgd2h5IG90aGVyIGJyb3dzZXJzIGRvIHRoaXMuCi0vLyBXaWRlIHBhZ2VzIHdpbGwg
YmUgc2NhbGVkIGRvd24gbW9yZSB0aGFuIHRoaXMuCi0jZGVmaW5lIFByaW50aW5nTWluaW11bVNo
cmlua0ZhY3RvciAgICAgMS4yNWYKLQotLy8gVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyBob3cgc21h
bGwgd2UgYXJlIHdpbGxpbmcgdG8gcmVkdWNlIHRoZSBwYWdlIGNvbnRlbnQKLS8vIGluIG9yZGVy
IHRvIGFjY29tbW9kYXRlIHRoZSB3aWRlc3QgbGluZS4gSWYgdGhlIHBhZ2Ugd291bGQgaGF2ZSB0
byBiZQotLy8gcmVkdWNlZCBzbWFsbGVyIHRvIG1ha2UgdGhlIHdpZGVzdCBsaW5lIGZpdCwgd2Ug
anVzdCBjbGlwIGluc3RlYWQgKHRoaXMKLS8vIGJlaGF2aW9yIG1hdGNoZXMgTWFjSUUgYW5kIE1v
emlsbGEsIGF0IGxlYXN0KQotI2RlZmluZSBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgICAg
IDIuMGYKLQotLy8gVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyBob3cgc2hvcnQgdGhlIGxhc3QgcHJp
bnRlZCBwYWdlIG9mIGEgbXVsdGktcGFnZSBwcmludCBzZXNzaW9uCi0vLyBjYW4gYmUgYmVmb3Jl
IHdlIHRyeSB0byBzaHJpbmsgdGhlIHNjYWxlIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgbnVtYmVy
IG9mIHBhZ2VzLCBhbmQKLS8vIHRodXMgZWxpbWluYXRlIHRoZSBvcnBoYW4uCi0jZGVmaW5lIExh
c3RQcmludGVkUGFnZU9ycGhhblJhdGlvICAgICAgMC4xZgotCi0vLyBUaGlzIG51bWJlciBkZXRl
cm1pbmVzIHRoZSBhbW91bnQgdGhlIHNjYWxlIGZhY3RvciBpcyBhZGp1c3RlZCB0byB0cnkgdG8g
ZWxpbWluYXRlIG9ycGhhbnMuCi0vLyBJdCBoYXMgbm8gZGlyZWN0IG1hdGhlbWF0aWNhbCByZWxh
dGlvbnNoaXAgdG8gTGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0aW8sIGR1ZSB0byB2YXJpYWJsZQot
Ly8gbnVtYmVycyBvZiBwYWdlcywgbG9naWMgdG8gYXZvaWQgYnJlYWtpbmcgZWxlbWVudHMsIGFu
ZCBDU1Mtc3VwcGxpZWQgaGFyZCBwYWdlIGJyZWFrcy4KLSNkZWZpbmUgUHJpbnRpbmdPcnBoYW5T
aHJpbmtBZGp1c3RtZW50ICAxLjFmCi0KLSNkZWZpbmUgQVVUT1NDUk9MTF9JTlRFUlZBTCAgICAg
ICAgICAgICAwLjFmCi0KLSNkZWZpbmUgRFJBR19MQUJFTF9CT1JERVJfWCAgICAgICAgICAgICA0
LjBmCi0vL0tlZXAgYm9yZGVyX3kgaW4gc3luY2ggd2l0aCBEcmFnQ29udHJvbGxlcjo6TGlua0Ry
YWdCb3JkZXJJbnNldAotI2RlZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9ZICAgICAgICAgICAgIDIu
MGYKLSNkZWZpbmUgRFJBR19MQUJFTF9SQURJVVMgICAgICAgICAgICAgICA1LjBmCi0jZGVmaW5l
IERSQUdfTEFCRUxfQk9SREVSX1lfT0ZGU0VUICAgICAgICAgICAgICAyLjBmCi0KLSNkZWZpbmUg
TUlOX0RSQUdfTEFCRUxfV0lEVEhfQkVGT1JFX0NMSVAgICAgICAgIDEyMC4wZgotI2RlZmluZSBN
QVhfRFJBR19MQUJFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMzIwLjBmCi0KLSNkZWZpbmUg
RFJBR19MSU5LX0xBQkVMX0ZPTlRfU0laRSAgIDExLjBmCi0jZGVmaW5lIERSQUdfTElOS19VUkxf
Rk9OVF9TSVpFICAgMTAuMGYKLQotLy8gQW55IG5vbi16ZXJvIHZhbHVlIHdpbGwgZG8sIGJ1dCB1
c2luZyBzb21ldGhpbmcgcmVjb2duaXphYmxlIG1pZ2h0IGhlbHAgdXMgZGVidWcgc29tZSBkYXku
Ci0jZGVmaW5lIFRSQUNLSU5HX1JFQ1RfVEFHIDB4QkFERkFDRQotCi0vLyBGSVhNRTogVGhpcyBj
b25zdGFudCBpcyBjb3BpZWQgZnJvbSBBcHBLaXQncyBfTlhTbWFydFBhc3RlIGNvbnN0YW50Lgot
I2RlZmluZSBXZWJTbWFydFBhc3RlUGJvYXJkVHlwZSBAIk5lWFQgc21hcnQgcGFzdGUgcGFzdGVi
b2FyZCB0eXBlIgotCi0jZGVmaW5lIFNUQU5EQVJEX1dFSUdIVCA1Ci0jZGVmaW5lIE1JTl9CT0xE
X1dFSUdIVCA3Ci0jZGVmaW5lIFNUQU5EQVJEX0JPTERfV0VJR0hUIDkKLQotLy8gRmFrZSBVUkwg
c2NoZW1lLgotI2RlZmluZSBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwi
Ci0KLS8vIDxyZGFyOi8vcHJvYmxlbS80OTg1NTI0PiBSZWZlcmVuY2VzIHRvIFdlYkNvcmVTY3Jv
bGxWaWV3IGFzIGEgc3VidmlldyBvZiBhIFdlYkhUTUxWaWV3IG1heSBiZSBwcmVzZW50Ci0vLyBp
biBzb21lIE5JQiBmaWxlcywgc28gTlNVbmFyY2hpdmVyIG11c3QgYmUgc3RpbGwgYWJsZSB0byBs
b29rIHVwIHRoaXMgbm93LXVudXNlZCBjbGFzcy4KLUBpbnRlcmZhY2UgV2ViQ29yZVNjcm9sbFZp
ZXcgOiBOU1Njcm9sbFZpZXcKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkNvcmVTY3JvbGxW
aWV3Ci1AZW5kCi0KLS8vIGlmIFlFUywgZG8gdGhlIHN0YW5kYXJkIE5TVmlldyBoaXQgdGVzdCAo
d2hpY2ggY2FuJ3QgZ2l2ZSB0aGUgcmlnaHQgcmVzdWx0IHdoZW4gSFRNTCBvdmVybGFwcyBhIHZp
ZXcpCi1zdGF0aWMgQk9PTCBmb3JjZU5TVmlld0hpdFRlc3Q7CitAY2xhc3MgV2ViVmlldzsKK0Bj
bGFzcyBXZWJIVE1MVmlldzsKIAotLy8gaWYgWUVTLCBkbyB0aGUgInRvcCBXZWJIVE1MVmlldyIg
aGl0IHRlc3QgKHdoaWNoIHdlJ2QgbGlrZSB0byBkbyBhbGwgdGhlIHRpbWUgYnV0IGNhbid0IGJl
Y2F1c2Ugb2YgSmF2YSByZXF1aXJlbWVudHMgW3NlZSBidWcgNDM0OTcyMV0pCi1zdGF0aWMgQk9P
TCBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdDsKLQotc3RhdGljIFdlYkhUTUxWaWV3ICpsYXN0SGl0
VmlldzsKLQotLy8gV2UgbmVlZCB0aGlzIHRvIGJlIGFibGUgdG8gc2FmZWx5IHJlZmVyZW5jZSB0
aGUgQ2FjaGVkSW1hZ2UgZm9yIHRoZSBwcm9taXNlZCBkcmFnIGRhdGEKLXN0YXRpYyBDYWNoZWRS
ZXNvdXJjZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkKLXsKLSAgICBzdGF0aWMgQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50ID0gbmV3IENhY2hlZFJl
c291cmNlQ2xpZW50OwotICAgIHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudDsKLX0K
LQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0tIChC
T09MKV9pbWFnZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRoczsKLS0gKERPTURvY3VtZW50
RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQg
KilwYXN0ZWJvYXJkIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0IGFsbG93UGxhaW5UZXh0
OihCT09MKWFsbG93UGxhaW5UZXh0OwotLSAoTlNTdHJpbmcgKilfcGxhaW5UZXh0RnJvbVBhc3Rl
Ym9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7Ci0tICh2b2lkKV9wYXN0ZVdpdGhQYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OihCT09MKWFs
bG93UGxhaW5UZXh0OwotLSAodm9pZClfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwotLSAodm9pZClfcmVtb3ZlTW91c2VNb3ZlZE9ic2Vy
dmVyVW5jb25kaXRpb25hbGx5OwotLSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzOwot
LSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzOwotLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJh
Z21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZToo
RE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247
Ci0tIChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQgcmVwbGFjaW5nRE9N
UmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24p
YWN0aW9uOwotLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmlu
ZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uOwotLSAoZmxv
YXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0OwotLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZTsK
LS0gKEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwotLSAoTlNWaWV3
ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50OwotLSAodm9pZClfd3JpdGVTZWxl
Y3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmli
dXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmc7Ci0tIChET01SYW5nZSAqKV9kb2N1bWVudFJh
bmdlOwotLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKLS0gKFdl
YkhUTUxWaWV3ICopX3RvcEhUTUxWaWV3OwotLSAoQk9PTClfaXNUb3BIVE1MVmlldzsKLS0gKHZv
aWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmU7Ci0tICh2b2lkKV93ZWJfc2V0UHJpbnRp
bmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemU7Ci0tICh2b2lkKV93ZWJfY2xlYXJQcmlu
dGluZ01vZGVSZWN1cnNpdmU7Ci1AZW5kCi0KLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLQotQGludGVyZmFjZSBXZWJIVE1M
VmlldyAoV2ViSFRNTFZpZXdUZXh0Q2hlY2tpbmdJbnRlcm5hbCkKLS0gKHZvaWQpb3JkZXJGcm9u
dFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyOwotLSAoQk9PTClzbWFydEluc2VydERlbGV0
ZUVuYWJsZWQ7Ci0tICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDooQk9PTClmbGFn
OwotLSAodm9pZCl0b2dnbGVTbWFydEluc2VydERlbGV0ZTooaWQpc2VuZGVyOwotLSAoQk9PTClp
c0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDsKLS0gKHZvaWQpc2V0QXV0b21hdGlj
UXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZUF1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uOihpZClzZW5kZXI7Ci0tIChCT09MKWlzQXV0b21hdGljTGlu
a0RldGVjdGlvbkVuYWJsZWQ7Ci0tICh2b2lkKXNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFi
bGVkOihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KGlk
KXNlbmRlcjsKLS0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDsKLS0g
KHZvaWQpc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0g
KHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjooaWQpc2VuZGVyOwotLSAoQk9P
TClpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ7Ci0tICh2b2lkKXNldEF1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudEVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKHZvaWQpdG9nZ2xlQXV0b21h
dGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXI7Ci0tIChCT09MKWlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZDsKLS0gKHZvaWQpc2V0QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0Nv
cnJlY3Rpb246KGlkKXNlbmRlcjsKLUBlbmQKLQotI2VuZGlmCi0KLUBpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFdlYkZvcndhcmREZWNsYXJhdGlvbikgLy8gRklYTUU6IFB1dCB0aGlzIGluIGEgbm9y
bWFsIGNhdGVnb3J5IGFuZCBzdG9wIGRvaW5nIHRoZSBmb3J3YXJkIGRlY2xhcmF0aW9uIHRyaWNr
LgotLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDoo
ZmxvYXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBh
ZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZTsKLUBlbmQKLQotQGNsYXNzIE5TVGV4
dElucHV0Q29udGV4dDsKLUBpbnRlcmZhY2UgTlNSZXNwb25kZXIgKEFwcEtpdERldGFpbHMpCi0t
IChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2Ug
TlNPYmplY3QgKE5TVGV4dElucHV0Q29udGV4dERldGFpbHMpCi0tIChCT09MKXdhbnRzVG9IYW5k
bGVNb3VzZUV2ZW50czsKLS0gKEJPT0wpaGFuZGxlTW91c2VFdmVudDooTlNFdmVudCAqKWV2ZW50
OwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJOU1RleHRJbnB1dFN1cHBvcnQp
IDxOU1RleHRJbnB1dD4KLS0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdlcjsK
LUBlbmQKLQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRWRpdGluZ1N0eWxlU3VwcG9ydCkK
LS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlTdHlsZTsKLS0gKE5TU3RyaW5nICop
X2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcjsKLUBlbmQKLQotQGludGVyZmFjZSBOU1Zp
ZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAodm9pZClfd2ViX2FkZERlc2NlbmRhbnRX
ZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVBcnJheSAqKSBhcnJheTsKLUBlbmQKLQotQGlu
dGVyZmFjZSBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLS0g
KHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleTooaWQpa2V5Owot
QGVuZAotCi0vLyBIYW5kbGVzIHRoZSBjb21wbGV0ZTogdGV4dCBjb21tYW5kCi1AaW50ZXJmYWNl
IFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TlNUYWJsZVZpZXdEZWxlZ2F0
ZSwgTlNUYWJsZVZpZXdEYXRhU291cmNlPiB7CitAaW50ZXJmYWNlIFdlYlRleHRDb21wbGV0aW9u
Q29udHJvbGxlciA6IE5TT2JqZWN0IDxOU1RhYmxlVmlld0RlbGVnYXRlLCBOU1RhYmxlVmlld0Rh
dGFTb3VyY2U+IHsKIEBwcml2YXRlCi0gICAgV2ViSFRNTFZpZXcgKl92aWV3OworICAgIFdlYlZp
ZXcgKl92aWV3OworICAgIFdlYkhUTUxWaWV3ICpfaHRtbFZpZXc7CiAgICAgTlNXaW5kb3cgKl9w
b3B1cFdpbmRvdzsKICAgICBOU1RhYmxlVmlldyAqX3RhYmxlVmlldzsKICAgICBOU0FycmF5ICpf
Y29tcGxldGlvbnM7CiAgICAgTlNTdHJpbmcgKl9vcmlnaW5hbFN0cmluZzsKICAgICBpbnQgcHJl
Zml4TGVuZ3RoOwogfQotLSAoaWQpaW5pdFdpdGhIVE1MVmlldzooV2ViSFRNTFZpZXcgKil2aWV3
OworLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopdmlldyBIVE1MVmlldzooV2ViSFRN
TFZpZXcgKilodG1sVmlldzsKIC0gKHZvaWQpZG9Db21wbGV0aW9uOwogLSAodm9pZCllbmRSZXZl
cnRpbmdDaGFuZ2U6KEJPT0wpcmV2ZXJ0Q2hhbmdlIG1vdmVMZWZ0OihCT09MKWdvTGVmdDsKIC0g
KEJPT0wpcG9wdXBXaW5kb3dJc09wZW47CiAtIChCT09MKWZpbHRlcktleURvd246KE5TRXZlbnQg
KilldmVudDsKIC0gKHZvaWQpX3JlZmxlY3RTZWxlY3Rpb247CiBAZW5kCi0KLXN0cnVjdCBXZWJI
VE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgewotICAgIEtleWJvYXJkRXZlbnQq
IGV2ZW50OwotICAgIEJPT0wgZXZlbnRXYXNIYW5kbGVkOwotICAgIEJPT0wgc2hvdWxkU2F2ZUNv
bW1hbmQ7Ci0gICAgLy8gVGhlIElucHV0IE1ldGhvZCBtYXkgY29uc3VtZSBhbiBldmVudCBhbmQg
bm90IHRlbGwgdXMsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3ZSBzaG91bGQgbm90IGJ1YmJsZSB0
aGUgZXZlbnQgdXAgdGhlIERPTQotICAgIEJPT0wgY29uc3VtZWRCeUlNOwotfTsKLQotQGludGVy
ZmFjZSBXZWJIVE1MVmlld1ByaXZhdGUgOiBOU09iamVjdCB7Ci1AcHVibGljCi0gICAgQk9PTCBj
bG9zZWQ7Ci0gICAgQk9PTCBuZWVkc1RvQXBwbHlTdHlsZXM7Ci0gICAgQk9PTCBpZ25vcmluZ01v
dXNlRHJhZ2dlZEV2ZW50czsKLSAgICBCT09MIHByaW50aW5nOwotICAgIEJPT0wgYXZvaWRpbmdQ
cmludE9ycGhhbjsKLSAgICBCT09MIG9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zOwot
ICAgIEJPT0wgb2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9uczsKLSAgICBCT09MIG9ic2Vy
dmluZ1dpbmRvd05vdGlmaWNhdGlvbnM7Ci0gICAgQk9PTCByZXNpZ25pbmdGaXJzdFJlc3BvbmRl
cjsKLSAgICAKLSAgICBpZCBzYXZlZFN1YnZpZXdzOwotICAgIEJPT0wgc3Vidmlld3NTZXRBc2lk
ZTsKLSAgICAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgTlNWaWV3ICps
YXllckhvc3RpbmdWaWV3OwotI2VuZGlmCi0KLSAgICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsg
Ly8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCi0gICAgQk9PTCBoYW5kbGluZ01vdXNl
RG93bkV2ZW50OwotICAgIE5TRXZlbnQgKmtleURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5k
bGluZyB0aGUgZXZlbnQuCi0KLSAgICAvLyBBIFdlYkhUTUxWaWV3IGhhcyBhIHNpbmdsZSBpbnB1
dCBjb250ZXh0LCBidXQgd2UgcmV0dXJuIG5pbCB3aGVuIGluIG5vbi1lZGl0YWJsZSBjb250ZW50
IHRvIGF2b2lkIG1ha2luZyBpbnB1dCBtZXRob2RzIGRvIHRoZWlyIHdvcmsuCi0gICAgLy8gVGhp
cyBzdGF0ZSBpcyBzYXZlZCBlYWNoIHRpbWUgc2VsZWN0aW9uIGNoYW5nZXMsIGJlY2F1c2UgY29t
cHV0aW5nIGl0IGNhdXNlcyBzdHlsZSByZWNhbGMsIHdoaWNoIGlzIG5vdCBhbHdheXMgc2FmZSB0
byBkby4KLSAgICBCT09MIGV4cG9zZUlucHV0Q29udGV4dDsKLQotICAgIE5TUG9pbnQgbGFzdFNj
cm9sbFBvc2l0aW9uOwotCi0gICAgV2ViUGx1Z2luQ29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxl
cjsKLSAgICAKLSAgICBOU1N0cmluZyAqdG9vbFRpcDsKLSAgICBOU1Rvb2xUaXBUYWcgbGFzdFRv
b2xUaXBUYWc7Ci0gICAgaWQgdHJhY2tpbmdSZWN0T3duZXI7Ci0gICAgdm9pZCAqdHJhY2tpbmdS
ZWN0VXNlckRhdGE7Ci0gICAgCi0gICAgTlNUaW1lciAqYXV0b3Njcm9sbFRpbWVyOwotICAgIE5T
RXZlbnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7Ci0gICAgCi0gICAgTlNBcnJheSAqcGFnZVJl
Y3RzOwotCi0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqaGlnaGxpZ2h0ZXJzOwotCi0jaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKLSAgICBCT09MIG5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7Ci0j
ZW5kaWYKLSAgICAKLSAgICBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyICpjb21wQ29udHJvbGxl
cjsKLSAgICAKLSAgICBCT09MIHRyYW5zcGFyZW50QmFja2dyb3VuZDsKLQotICAgIFdlYkhUTUxW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogaW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVyczsKLSAgICBCT09MIHJlY2VpdmVkTk9PUDsKLSAgICAKLSAgICBXZWJEYXRhU291cmNlICpk
YXRhU291cmNlOwotICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBwcm9taXNlZERyYWdUSUZGRGF0
YVNvdXJjZTsKLSAgICAKLSAgICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVGb2N1c2VkQW5kQWN0
aXZlU3RhdGVUaW1lcjsKLSAgICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVNb3VzZW92ZXJUaW1l
cjsKLQotICAgIFNFTCBzZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3I7Ci0KLSNpZm5kZWYg
TkRFQlVHCi0gICAgQk9PTCBlbnVtZXJhdGluZ1N1YnZpZXdzOwotI2VuZGlmCi19Ci0tICh2b2lk
KWNsZWFyOwotQGVuZAotCi1zdGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3Rh
dGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIEZhbHNlVHJpU3RhdGU6
Ci0gICAgICAgICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKLSAgICAgICAgY2FzZSBUcnVlVHJpU3Rh
dGU6Ci0gICAgICAgICAgICByZXR1cm4gTlNPblN0YXRlOwotICAgICAgICBjYXNlIE1peGVkVHJp
U3RhdGU6Ci0gICAgICAgICAgICByZXR1cm4gTlNNaXhlZFN0YXRlOwotICAgIH0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTlNPZmZTdGF0ZTsKLX0KLQotQGltcGxlbWVu
dGF0aW9uIFdlYkhUTUxWaWV3UHJpdmF0ZQotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSAgICBK
U0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAg
ICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25NYWluVGhyZWFkKHNlbGYpOwotI2VuZGlmCi0KLSAgICBp
ZiAoIW9sZFNldEN1cnNvcklNUCkgewotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgICAg
IE1ldGhvZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNDdXJz
b3IgY2xhc3NdLCBAc2VsZWN0b3Ioc2V0KSk7Ci0jZWxzZQotICAgICAgICBNZXRob2Qgc2V0Q3Vy
c29yTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TV2luZG93IGNsYXNzXSwgQHNl
bGVjdG9yKF9zZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uOikpOwotI2VuZGlmCi0gICAgICAgIEFT
U0VSVChzZXRDdXJzb3JNZXRob2QpOwotCi0gICAgICAgIG9sZFNldEN1cnNvcklNUCA9IG1ldGhv
ZF9zZXRJbXBsZW1lbnRhdGlvbihzZXRDdXJzb3JNZXRob2QsIChJTVApc2V0Q3Vyc29yKTsKLSAg
ICAgICAgQVNTRVJUKG9sZFNldEN1cnNvcklNUCk7Ci0gICAgfQotICAgIAotI2lmZGVmIEJVSUxE
SU5HX09OX1RJR0VSCi0gICAgaWYgKCFvbGRSZXNldEN1cnNvclJlY3RzSU1QKSB7Ci0gICAgICAg
IE1ldGhvZCByZXNldEN1cnNvclJlY3RzTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2Qo
W05TV2luZG93IGNsYXNzXSwgQHNlbGVjdG9yKHJlc2V0Q3Vyc29yUmVjdHMpKTsKLSAgICAgICAg
QVNTRVJUKHJlc2V0Q3Vyc29yUmVjdHNNZXRob2QpOwotICAgICAgICBvbGRSZXNldEN1cnNvclJl
Y3RzSU1QID0gbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKHJlc2V0Q3Vyc29yUmVjdHNNZXRob2Qs
IChJTVApcmVzZXRDdXJzb3JSZWN0cyk7Ci0gICAgICAgIEFTU0VSVChvbGRSZXNldEN1cnNvclJl
Y3RzSU1QKTsKLSAgICB9Ci0jZW5kaWYKLQotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBp
ZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dlYkhUTUxWaWV3
UHJpdmF0ZSBjbGFzc10sIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIWF1
dG9zY3JvbGxUaW1lcik7Ci0gICAgQVNTRVJUKCFhdXRvc2Nyb2xsVHJpZ2dlckV2ZW50KTsKLSAg
ICBBU1NFUlQoIXVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKLSAgICBBU1NFUlQo
IXVwZGF0ZU1vdXNlb3ZlclRpbWVyKTsKLSAgICAKLSAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFz
ZV07Ci0gICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBbcGx1Z2luQ29udHJvbGxlciBy
ZWxlYXNlXTsKLSAgICBbdG9vbFRpcCByZWxlYXNlXTsKLSAgICBbY29tcENvbnRyb2xsZXIgcmVs
ZWFzZV07Ci0gICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07Ci0gICAgW2hpZ2hsaWdodGVycyByZWxl
YXNlXTsKLSAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCi0gICAgICAgIHByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkp
OwotCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAg
QVNTRVJUX01BSU5fVEhSRUFEKCk7Ci0KLSAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UpCi0gICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJv
bWlzZWREYXRhQ2xpZW50KCkpOwotCi0gICAgW3N1cGVyIGZpbmFsaXplXTsKLX0KLQotLSAodm9p
ZCljbGVhcgotewotICAgIFttb3VzZURvd25FdmVudCByZWxlYXNlXTsKLSAgICBba2V5RG93bkV2
ZW50IHJlbGVhc2VdOwotICAgIFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwotICAgIFt0b29s
VGlwIHJlbGVhc2VdOwotICAgIFtjb21wQ29udHJvbGxlciByZWxlYXNlXTsKLSAgICBbZGF0YVNv
dXJjZSByZWxlYXNlXTsKLSAgICBbaGlnaGxpZ2h0ZXJzIHJlbGVhc2VdOwotICAgIGlmIChwcm9t
aXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKLSAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0KLSAgICBtb3VzZURvd25F
dmVudCA9IG5pbDsKLSAgICBrZXlEb3duRXZlbnQgPSBuaWw7Ci0gICAgcGx1Z2luQ29udHJvbGxl
ciA9IG5pbDsKLSAgICB0b29sVGlwID0gbmlsOwotICAgIGNvbXBDb250cm9sbGVyID0gbmlsOwot
ICAgIGRhdGFTb3VyY2UgPSBuaWw7Ci0gICAgaGlnaGxpZ2h0ZXJzID0gbmlsOwotICAgIHByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlID0gMDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICBsYXllckhvc3RpbmdWaWV3ID0gbmlsOwotI2VuZGlmCi19Ci0KLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQot
LSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRSYW5nZQotewotICAgIHJldHVybiBbW1tzZWxmIF9mcmFt
ZV0gRE9NRG9jdW1lbnRdIF9kb2N1bWVudFJhbmdlXTsKLX0KLQotLSAoQk9PTClfaW1hZ2VFeGlz
dHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHMKLXsKLSAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0
b3IgPSBbcGF0aHMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgTlNTdHJpbmcgKnBhdGg7Ci0gICAg
Ci0gICAgd2hpbGUgKChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgewot
ICAgICAgICBOU1N0cmluZyAqTUlNRVR5cGUgPSBXS0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKFtw
YXRoIHBhdGhFeHRlbnNpb25dKTsKLSAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKE1JTUVUeXBlKSkKLSAgICAgICAgICAgIHJldHVy
biBZRVM7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBOTzsKLX0KLQotLSAoV2ViRGF0YVNvdXJj
ZSAqKV9kYXRhU291cmNlCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5kYXRhU291cmNlOwotfQot
Ci0tIChXZWJWaWV3ICopX3dlYlZpZXcKLXsKLSAgICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291
cmNlIF93ZWJWaWV3XTsKLX0KLQotLSAoV2ViRnJhbWVWaWV3ICopX2ZyYW1lVmlldwotewotICAg
IHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXSBmcmFtZVZpZXddOwotfQot
Ci0tIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6KE5T
QXJyYXkgKilwYXRocwotewotICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50OwotICAg
IE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAg
ICBOU011dGFibGVBcnJheSAqZG9tTm9kZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XTsKLSAgICBOU1N0cmluZyAqcGF0aDsKLSAgICAKLSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVy
YXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0gICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5
cGVzOyBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0
aGlzIHdpbGwKLSAgICAgICAgLy8gYmUgcGFzdGVkIGFzIHZpc2libGUgdGV4dC4KLSAgICAgICAg
TlNTdHJpbmcgKnVybCA9IFtbW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoXSBfd2Via2l0X2Nh
bm9uaWNhbGl6ZV0gX3dlYl91c2VyVmlzaWJsZVN0cmluZ107Ci0gICAgICAgIFtkb21Ob2RlcyBh
ZGRPYmplY3Q6W1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVUZXh0Tm9kZTogdXJs
XV07Ci0gICAgfQotICAgIAotICAgIGZyYWdtZW50ID0gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50
RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6ZG9tTm9kZXNdOyAKLSAgICAKLSAgICBbZG9t
Tm9kZXMgcmVsZWFzZV07Ci0gICAgCi0gICAgcmV0dXJuIFtmcmFnbWVudCBmaXJzdENoaWxkXSAh
PSBuaWwgPyBmcmFnbWVudCA6IG5pbDsKLX0KLQotKyAoTlNBcnJheSAqKV9leGNsdWRlZEVsZW1l
bnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24KLXsKLSAgICBzdGF0aWMgTlNBcnJheSAq
ZWxlbWVudHMgPSBuaWw7Ci0gICAgaWYgKGVsZW1lbnRzID09IG5pbCkgewotICAgICAgICBlbGVt
ZW50cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgLy8g
T21pdCBzdHlsZSBzaW5jZSB3ZSB3YW50IHN0eWxlIHRvIGJlIGlubGluZSBzbyB0aGUgZnJhZ21l
bnQgY2FuIGJlIGVhc2lseSBpbnNlcnRlZC4KLSAgICAgICAgICAgIEAic3R5bGUiLAotICAgICAg
ICAgICAgLy8gT21pdCB4bWwgc28gdGhlIHJlc3VsdCBpcyBub3QgWEhUTUwuCi0gICAgICAgICAg
ICBAInhtbCIsIAotICAgICAgICAgICAgLy8gT21pdCB0YWdzIHRoYXQgd2lsbCBnZXQgc3RyaXBw
ZWQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVudCBhbnl3YXkuCi0gICAgICAgICAgICBAImRv
Y3R5cGUiLCBAImh0bWwiLCBAImhlYWQiLCBAImJvZHkiLAotICAgICAgICAgICAgLy8gT21pdCBk
ZXByZWNhdGVkIHRhZ3MuCi0gICAgICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNl
bnRlciIsIEAiZGlyIiwgQCJmb250IiwgQCJpc2luZGV4IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJp
a2UiLCBAInUiLAotICAgICAgICAgICAgLy8gT21pdCBvYmplY3Qgc28gbm8gZmlsZSBhdHRhY2ht
ZW50cyBhcmUgcGFydCBvZiB0aGUgZnJhZ21lbnQuCi0gICAgICAgICAgICBAIm9iamVjdCIsIG5p
bF07Ci0gICAgICAgIENGUmV0YWluKGVsZW1lbnRzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1l
bnRzOwotfQotCi1zdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJp
bmcgKnJlbGF0aXZlUGFydCkKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0
cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsK
LSAgICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRo
U3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQ
cm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0XV07Ci0gICAgQ0ZSZWxlYXNl
KFVVSURTdHJpbmcpOwotCi0gICAgcmV0dXJuIFVSTDsKLX0KLQotLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlYm9hcmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0Ci17Ci0g
ICAgTlNBcnJheSAqdHlwZXMgPSBbcGFzdGVib2FyZCB0eXBlc107Ci0gICAgRE9NRG9jdW1lbnRG
cmFnbWVudCAqZnJhZ21lbnQgPSBuaWw7Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
OldlYkFyY2hpdmVQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6V2ViQXJjaGl2ZVBib2Fy
ZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Q29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaWYgKFt0eXBlcyBjb250
YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9
IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU0Zp
bGVuYW1lc1Bib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21l
bnQ7Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0hUTUxQYm9hcmRUeXBl
XSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0
ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvclR5cGU6TlNIVE1MUGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0g
ICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TUlRGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0
OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLQotICAgIGlmIChbdHlw
ZXMgY29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50
ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5T
UlRGRFBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdICYmCi0g
ICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6
cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAg
cmV0dXJuIGZyYWdtZW50OwotCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1BERlBi
b2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1BERlBib2FyZFR5cGUKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6
MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSNpZiBkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgaWYgKFt0eXBlcyBj
b250YWluc09iamVjdDpOU1BJQ1RQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBb
c2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNQSUNU
UGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSNl
bmRpZgotCi0gICAgLy8gT25seSAxMC41IGFuZCBoaWdoZXIgc3VwcG9ydCBzZXR0aW5nIGFuZCBy
ZXRyaWV2aW5nIHBhc3RlYm9hcmQgdHlwZXMgd2l0aCBVVElzLCBidXQgd2UgZG9uJ3QgYmVsaWV2
ZQotICAgIC8vIHRoYXQgYW55IGFwcGxpY2F0aW9ucyBvbiBUaWdlciBwdXQgdHlwZXMgZm9yIHdo
aWNoIHdlIG9ubHkgaGF2ZSBhIFVUSSwgbGlrZSBQTkcsIG9uIHRoZSBwYXN0ZWJvYXJkLgotICAg
IGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nKilrVVRUeXBlUE5HXSAmJgotICAg
ICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBh
c3RlYm9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvclR5cGU6KE5TU3RyaW5nKilrVVRUeXBlUE5HCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OwotICAgICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TVVJMUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0
OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICAgICAgCi0gICAg
aWYgKGFsbG93UGxhaW5UZXh0ICYmIFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2Fy
ZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJv
bVBhc3RlYm9hcmQ6cGFzdGVib2FyZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczow
XSkpIHsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
bmlsOwotfQotCi0tIChOU1N0cmluZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0
ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIE5TQXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9hcmQg
dHlwZXNdOwotICAgIAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9h
cmRUeXBlXSkKLSAgICAgICAgcmV0dXJuIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3Ry
aW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107Ci0g
ICAgCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gbmlsOwotICAg
IE5TU3RyaW5nICpzdHJpbmc7Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRG
RFBib2FyZFR5cGVdKQotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQ
Ym9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07Ci0gICAgaWYgKGF0dHJpYnV0ZWRT
dHJpbmcgPT0gbmlsICYmIFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdKQot
ICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1l
bnRBdHRyaWJ1dGVzOk5VTExdOwotICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nICE9IG5pbCkgewot
ICAgICAgICBzdHJpbmcgPSBbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjb3B5XTsKLSAgICAg
ICAgW2F0dHJpYnV0ZWRTdHJpbmcgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBbc3RyaW5nIGF1
dG9yZWxlYXNlXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpO
U0ZpbGVuYW1lc1Bib2FyZFR5cGVdKSB7Ci0gICAgICAgIHN0cmluZyA9IFtbcGFzdGVib2FyZCBw
cm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gY29tcG9uZW50c0pvaW5l
ZEJ5U3RyaW5nOkAiXG4iXTsKLSAgICAgICAgaWYgKHN0cmluZyAhPSBuaWwpCi0gICAgICAgICAg
ICByZXR1cm4gc3RyaW5nOwotICAgIH0KLSAgICAKLSAgICBOU1VSTCAqVVJMOwotICAgIAotICAg
IGlmICgoVVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdKSkgewotICAg
ICAgICBzdHJpbmcgPSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwotICAgICAgICBpZiAo
W3N0cmluZyBsZW5ndGhdID4gMCkKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6
KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFp
blRleHQKLXsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5d
OwotICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotCi0g
ICAgRE9NUmFuZ2UgKnJhbmdlID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOwotICAgIERPTURvY3Vt
ZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVi
b2FyZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWlu
VGV4dF07Ci0gICAgaWYgKGZyYWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpm
cmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0
QWN0aW9uUGFzdGVkXSkKLSAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltz
ZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxl
Ok5PXTsKLQotICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOm5pbF07Ci0gICAg
W3dlYlZpZXcgcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBbW3NlbGYgX3dlYlZpZXddIHJldGFpbl07Ci0gICAgW3dlYlZpZXcgX3NldEluc2VydGlv
blBhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0KLSAgICBOU1N0cmluZyAqdGV4dCA9IFtzZWxmIF9w
bGFpblRleHRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLSAgICBpZiAoW3NlbGYgX3Nob3Vs
ZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0ZXh0IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRB
Y3Rpb25QYXN0ZWRdKQotICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OnRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXV07Ci0KLSAgICBbd2ViVmlldyBf
c2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpuaWxdOwotICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwotfQot
Ci0tICh2b2lkKV9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHkKLXsKLSAg
ICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNh
dGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXS01vdXNlTW92ZWROb3Rp
ZmljYXRpb24oKSBvYmplY3Q6bmlsXTsKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3Zl
ZE5vdGlmaWNhdGlvbnMgPSBmYWxzZTsKLX0KLQotLSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3T2Jz
ZXJ2ZXJzCi17Ci0gICAgaWYgKCFfcHJpdmF0ZSB8fCAhX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVy
dmlld05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU1ZpZXcgKnN1
cGVydmlldyA9IFtzZWxmIHN1cGVydmlld107Ci0gICAgaWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxm
IHdpbmRvd10pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRl
ciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5T
Vmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOwotICAgIFtu
b3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0JvdW5kc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICAKLSAgICBfcHJpdmF0
ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucyA9IGZhbHNlOwotfQotCi0tICh2b2lk
KV9yZW1vdmVXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5vYnNlcnZpbmdX
aW5kb3dOb3RpZmljYXRpb25zKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNXaW5kb3cg
KndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0g
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25D
ZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZp
Y2F0aW9uIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2
ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkUmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxd
OwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2lu
ZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtub3RpZmljYXRp
b25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldLV2luZG93V2lsbE9yZGVyT25TY3Jl
ZW5Ob3RpZmljYXRpb24oKSBvYmplY3Q6d2luZG93XTsKLSAgICAKLSAgICBfcHJpdmF0ZS0+b2Jz
ZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucyA9IGZhbHNlOwotfQotCi0tIChCT09MKV9zaG91bGRJ
bnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RP
TVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9u
KWFjdGlvbgotewotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAg
RE9NTm9kZSAqY2hpbGQgPSBbZnJhZ21lbnQgZmlyc3RDaGlsZF07Ci0gICAgaWYgKFtmcmFnbWVu
dCBsYXN0Q2hpbGRdID09IGNoaWxkICYmIFtjaGlsZCBpc0tpbmRPZkNsYXNzOltET01DaGFyYWN0
ZXJEYXRhIGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0
ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6WyhET01DaGFyYWN0
ZXJEYXRhICopY2hpbGQgZGF0YV0gcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246
YWN0aW9uXTsKLSAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJd
IHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnROb2RlOmZyYWdtZW50IHJlcGxhY2luZ0RPTVJh
bmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Ci19Ci0KLS0gKEJPT0wpX3Nob3VsZEluc2Vy
dFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5n
ZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KLXsKLSAgICBXZWJWaWV3
ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRp
bmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6dGV4
dCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOwotfQotCi0tIChC
T09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZl
bkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KLXsKLSAgICByZXR1cm4gW3NlbGYg
X3Nob3VsZEluc2VydFRleHQ6dGV4dCByZXBsYWNpbmdET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRS
YW5nZV0gZ2l2ZW5BY3Rpb246YWN0aW9uXTsKLX0KLQotLy8gQ2FsY3VsYXRlIHRoZSB2ZXJ0aWNh
bCBzaXplIG9mIHRoZSB2aWV3IHRoYXQgZml0cyBvbiBhIHNpbmdsZSBwYWdlCi0tIChmbG9hdClf
Y2FsY3VsYXRlUHJpbnRIZWlnaHQKLXsKLSAgICAvLyBPYnRhaW4gdGhlIHByaW50IGluZm8gb2Jq
ZWN0IGZvciB0aGUgY3VycmVudCBvcGVyYXRpb24KLSAgICBOU1ByaW50SW5mbyAqcGkgPSBbW05T
UHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl0gcHJpbnRJbmZvXTsKLSAgICAKLSAgICAv
LyBDYWxjdWxhdGUgdGhlIHBhZ2UgaGVpZ2h0IGluIHBvaW50cwotICAgIE5TU2l6ZSBwYXBlclNp
emUgPSBbcGkgcGFwZXJTaXplXTsKLSAgICByZXR1cm4gcGFwZXJTaXplLmhlaWdodCAtIFtwaSB0
b3BNYXJnaW5dIC0gW3BpIGJvdHRvbU1hcmdpbl07Ci19Ci0KLS0gKERPTVJhbmdlICopX3NlbGVj
dGVkUmFuZ2UKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
LSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCkpIDogbmlsOwotfQotCi0tIChCT09MKV9zaG91bGREZWxldGVS
YW5nZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3Io
KS0+c2hvdWxkRGVsZXRlUmFuZ2UoY29yZShyYW5nZSkpOwotfQotCi0tIChOU1ZpZXcgKilfaGl0
Vmlld0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBVc3VhbGx5LCB3ZSBoYWNr
IEFLJ3MgaGl0VGVzdCBtZXRob2QgdG8gY2F0Y2ggYWxsIGV2ZW50cyBhdCB0aGUgdG9wbW9zdCBX
ZWJIVE1MVmlldy4gIAotICAgIC8vIENhbGxlcnMgb2YgdGhpcyBtZXRob2QsIGhvd2V2ZXIsIHdh
bnQgdG8gcXVlcnkgdGhlIGRlZXBlc3QgdmlldyBpbnN0ZWFkLgotICAgIGZvcmNlTlNWaWV3SGl0
VGVzdCA9IFlFUzsKLSAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbW1tzZWxmIHdpbmRvd10gY29udGVu
dFZpZXddIGhpdFRlc3Q6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddXTsKLSAgICBmb3JjZU5TVmll
d0hpdFRlc3QgPSBOTzsgICAgCi0gICAgcmV0dXJuIGhpdFZpZXc7Ci19Ci0KLS0gKHZvaWQpX3dy
aXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihO
U0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgLy8gUHV0IEhUTUwg
b24gdGhlIHBhc3RlYm9hcmQuCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNo
aXZlUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgaWYgKFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBj
b3JlQXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oY29yZShb
c2VsZiBfZnJhbWVdKSkpIHsKLSAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBk
YXRhID0gY29yZUFyY2hpdmUgPyBjb3JlQXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkg
OiAwKQotICAgICAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6KE5TRGF0YSAqKWRhdGEu
Z2V0KCkgZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgLy8gUHV0IHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZCAo
UlRGL1JURkQgZm9ybWF0KS4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBi
b2FyZFR5cGVdKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCkgewotICAg
ICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmlu
Z107Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICBOU0RhdGEgKlJURkREYXRhID0gW2F0dHJp
YnV0ZWRTdHJpbmcgUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmlu
ZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQg
c2V0RGF0YTpSVEZERGF0YSBmb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdOwotICAgIH0gICAgICAg
IAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSkgewotICAg
ICAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBuaWwpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0
ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkgewotICAg
ICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmli
dXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnNdOwotICAgICAgICB9Ci0g
ICAgICAgIE5TRGF0YSAqUlRGRGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkZyb21SYW5nZTpO
U01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0
ZXM6bmlsXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZEYXRhIGZvclR5cGU6TlNS
VEZQYm9hcmRUeXBlXTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUHV0IHBsYWluIHN0cmluZyBvbiB0
aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJv
YXJkVHlwZV0pIHsKLSAgICAgICAgLy8gTWFwICZuYnNwOyB0byBhIHBsYWluIG9sZCBzcGFjZSBi
ZWNhdXNlIHRoaXMgaXMgYmV0dGVyIGZvciBzb3VyY2UgY29kZSwgb3RoZXIgYnJvd3NlcnMgZG8g
aXQsCi0gICAgICAgIC8vIGFuZCBiZWNhdXNlIEhUTUwgZm9yY2VzIHlvdSB0byBkbyB0aGlzIGFu
eSB0aW1lIHlvdSB3YW50IHR3byBzcGFjZXMgaW4gYSByb3cuCi0gICAgICAgIE5TTXV0YWJsZVN0
cmluZyAqcyA9IFtbc2VsZiBzZWxlY3RlZFN0cmluZ10gbXV0YWJsZUNvcHldOwotICAgICAgICBj
b25zdCB1bmljaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOwotICAgICAgICBO
U1N0cmluZyAqTm9uQnJlYWtpbmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hh
cmFjdGVyczomTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07Ci0gICAgICAgIFtz
IHJlcGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgd2l0aFN0
cmluZzpAIiAiIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBbcyBsZW5ndGhdKV07Ci0g
ICAgICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzpzIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBl
XTsKLSAgICAgICAgW3MgcmVsZWFzZV07Ci0gICAgfQotICAgIAotICAgIGlmIChbc2VsZiBfY2Fu
U21hcnRDb3B5T3JEZWxldGVdICYmIFt0eXBlcyBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3Rl
UGJvYXJkVHlwZV0pIHsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpuaWwgZm9yVHlwZTpX
ZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07Ci0gICAgfQotfQotCi0tICh2b2lkKV9zZXRNb3VzZURv
d25FdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgQVNTRVJUKCFldmVudCB8fCBbZXZlbnQg
dHlwZV0gPT0gTlNMZWZ0TW91c2VEb3duIHx8IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VE
b3duIHx8IFtldmVudCB0eXBlXSA9PSBOU090aGVyTW91c2VEb3duKTsKLQotICAgIGlmIChldmVu
dCA9PSBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtl
dmVudCByZXRhaW5dOwotICAgIFtfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgcmVsZWFzZV07Ci0g
ICAgX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50ID0gZXZlbnQ7Ci19Ci0KLS0gKHZvaWQpX2NhbmNl
bFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyCi17Ci0gICAgaWYgKF9wcml2YXRlLT51
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcikgewotICAgICAgICBDRlJ1bkxvb3BUaW1l
ckludmFsaWRhdGUoX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsK
LSAgICAgICAgQ0ZSZWxlYXNlKF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVU
aW1lcik7Ci0gICAgICAgIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1l
ciA9IE5VTEw7Ci0gICAgfQotfQotCi0tICh2b2lkKV9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1l
cgotewotICAgIGlmIChfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpIHsKLSAgICAgICAg
Q0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcik7
Ci0gICAgICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpOwotICAg
ICAgICBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIgPSBOVUxMOwotICAgIH0KLX0KLQot
LSAoV2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXcKLXsKLSAgICAvLyBGSVhNRTogdGhpcyBjYW4g
ZmFpbCBpZiB0aGUgZGF0YVNvdXJjZSBpcyBuaWwsIHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUgV2Vi
VmlldyBpcyB0ZWFyaW5nIGRvd24gZnJvbSB0aGUgd2luZG93IGNsb3NpbmcuCi0gICAgV2ViSFRN
TFZpZXcgKnZpZXcgPSAoV2ViSFRNTFZpZXcgKilbW1tbX3ByaXZhdGUtPmRhdGFTb3VyY2UgX3dl
YlZpZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIEFTU0VSVCh2
aWV3KTsKLSAgICBBU1NFUlQoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSk7Ci0gICAgcmV0dXJuIHZpZXc7Ci19Ci0KLS0gKEJPT0wpX2lzVG9wSFRNTFZpZXcKLXsKLSAg
ICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBjYWNoZWQgYm9vbGVhbiB0aGF0IGRvZXNuJ3Qg
cmVseSBvbiBfdG9wSFRNTFZpZXcgc2luY2UgdGhhdCBjYW4gZmFpbCAoc2VlIF90b3BIVE1MVmll
dykuCi0gICAgcmV0dXJuIHNlbGYgPT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKLX0KLQotLSAodm9p
ZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZQotewotICAgIFtzZWxmIF9zZXRQcmludGlu
ZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RW
aWV3U2l6ZTpOT107Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5n
U3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50
V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2Vs
ZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1M
Vmlld3NdOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBj
b3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAg
IFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpZ
RVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3
U2l6ZTpOT107Ci0KLSAgICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lm
bmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2Vu
ZGlmCi19Ci0KLS0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZQotewotICAg
IFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VX
aWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJp
dmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxl
QXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XTsKLQotICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6
ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5k
YW50V2ViSFRNTFZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkKLSAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6
aV0gX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRo
OjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0gICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
cmVsZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vi
dmlld3MgPSBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVj
dXJzaXZlQW5kQWRqdXN0Vmlld1NpemUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1p
bmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6
WUVTXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3
cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1M
Vmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLQotICAgIFtzZWxmIF93ZWJf
YWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107
Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgW1tkZXNj
ZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5nOllFUyBtaW5p
bXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllF
U107Ci0KLSAgICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBO
REVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCi19
Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJQcml2YXRlKQotCi0r
IChOU0FycmF5ICopc3VwcG9ydGVkTUlNRVR5cGVzCi17Ci0gICAgcmV0dXJuIFtXZWJIVE1MUmVw
cmVzZW50YXRpb24gc3VwcG9ydGVkTUlNRVR5cGVzXTsKLX0KLQotKyAoTlNBcnJheSAqKXN1cHBv
cnRlZEltYWdlTUlNRVR5cGVzCi17Ci0gICAgcmV0dXJuIFtXZWJIVE1MUmVwcmVzZW50YXRpb24g
c3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXNdOwotfQotCi0rIChOU0FycmF5ICopc3VwcG9ydGVkTm9u
SW1hZ2VNSU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBw
b3J0ZWROb25JbWFnZU1JTUVUeXBlc107Ci19Ci0KLSsgKE5TQXJyYXkgKil1bnN1cHBvcnRlZFRl
eHRNSU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKLSAg
ICAgICAgQCJ0ZXh0L2NhbGVuZGFyIiwgICAgICAgLy8gaUNhbAotICAgICAgICBAInRleHQveC1j
YWxlbmRhciIsCi0gICAgICAgIEAidGV4dC94LXZjYWxlbmRhciIsCi0gICAgICAgIEAidGV4dC92
Y2FsZW5kYXIiLAotICAgICAgICBAInRleHQvdmNhcmQiLCAgICAgICAgICAvLyB2Q2FyZAotICAg
ICAgICBAInRleHQveC12Y2FyZCIsCi0gICAgICAgIEAidGV4dC9kaXJlY3RvcnkiLAotICAgICAg
ICBAInRleHQvbGRpZiIsICAgICAgICAgICAvLyBOZXRzY2FwZSBBZGRyZXNzIEJvb2sKLSAgICAg
ICAgQCJ0ZXh0L3FpZiIsICAgICAgICAgICAgLy8gUXVpY2tlbgotICAgICAgICBAInRleHQveC1x
aWYiLAotICAgICAgICBAInRleHQveC1jc3YiLCAgICAgICAgICAvLyBDU1YgKGZvciBBZGRyZXNz
IEJvb2sgYW5kIE1pY3Jvc29mdCBPdXRsb29rKQotICAgICAgICBAInRleHQveC12Y2YiLCAgICAg
ICAgICAvLyB2Q2FyZCB0eXBlIHVzZWQgaW4gU3VuIGFmZmluaXR5IGFwcAotICAgICAgICBAInRl
eHQvcnRmIiwgICAgICAgICAgICAvLyBSaWNoIFRleHQgRm9ybWF0Ci0gICAgICAgIG5pbF07Ci19
Ci0KLSsgKHZvaWQpX3Bvc3RGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdl
ZEV2ZW50Ci17Ci0gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yOiA8cmRhcjovL3Byb2Js
ZW0vMjk4MTYxOT4gTlNSZXNwb25kZXJfUHJpdmF0ZSBzaG91bGQgaW5jbHVkZSBub3RpZmljYXRp
b24gZm9yIEZsYWdzQ2hhbmdlZAotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1v
dXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgbG9jYXRpb246W1tmbGFnc0No
YW5nZWRFdmVudCB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2Nh
dGlvbl1dCi0gICAgICAgIG1vZGlmaWVyRmxhZ3M6W2ZsYWdzQ2hhbmdlZEV2ZW50IG1vZGlmaWVy
RmxhZ3NdCi0gICAgICAgIHRpbWVzdGFtcDpbZmxhZ3NDaGFuZ2VkRXZlbnQgdGltZXN0YW1wXQot
ICAgICAgICB3aW5kb3dOdW1iZXI6W2ZsYWdzQ2hhbmdlZEV2ZW50IHdpbmRvd051bWJlcl0KLSAg
ICAgICAgY29udGV4dDpbZmxhZ3NDaGFuZ2VkRXZlbnQgY29udGV4dF0KLSAgICAgICAgZXZlbnRO
dW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07Ci0KLSAgICAvLyBQcmV0ZW5kIGl0J3Mg
YSBtb3VzZSBtb3ZlLgotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0K
LSAgICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkg
b2JqZWN0OnNlbGYKLSAgICAgICAgdXNlckluZm86W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdDpmYWtlRXZlbnQgZm9yS2V5OkAiTlNFdmVudCJdXTsKLX0KLQotLSAoaWQpX2JyaWRn
ZQotewotICAgIC8vIFRoaXMgbWV0aG9kIGV4aXN0cyB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5
IHdpdGggTGVvcGFyZCdzIERpY3Rpb25hcnkuYXBwLCBzaW5jZSBpdAotICAgIC8vIGNhbGxzIF9i
cmlkZ2UgdG8gZ2V0IGFjY2VzcyB0byBjb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6IGFuZCBjb252
ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6LgotICAgIC8vIFJldHVybiB0aGUgV2ViRnJhbWUsIHdoaWNo
IGltcGxlbWVudHMgdGhlIGNvbXBhdGliaWxpdHkgbWV0aG9kcy4gPHJkYXI6Ly9wcm9ibGVtLzYw
MDIxNjA+Ci0gICAgcmV0dXJuIFtzZWxmIF9mcmFtZV07Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZU1v
dXNlb3ZlcldpdGhGYWtlRXZlbnQKLXsKLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVy
VGltZXJdOwotICAgIAotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZl
bnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgbG9jYXRpb246W1tzZWxmIHdpbmRvd10g
Y29udmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KLSAgICAgICAgbW9k
aWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KLSAgICAgICAg
dGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQotICAgICAg
ICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250
ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQotICAgICAgICBldmVudE51bWJlcjow
IGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKLSAgICAKLSAgICBbc2VsZiBfdXBkYXRlTW91c2Vv
dmVyV2l0aEV2ZW50OmZha2VFdmVudF07Ci19Ci0KLXN0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92
ZXJUaW1lckNhbGxiYWNrKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkICppbmZvKQotewot
ICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICopaW5mbzsKLSAgICAKLSAgICBb
dmlldyBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07Ci19Ci0KLS0gKHZvaWQpX2ZyYW1l
T3JCb3VuZHNDaGFuZ2VkCi17Ci0gICAgTlNQb2ludCBvcmlnaW4gPSBbW3NlbGYgc3VwZXJ2aWV3
XSBib3VuZHNdLm9yaWdpbjsKLSAgICBpZiAoIU5TRXF1YWxQb2ludHMoX3ByaXZhdGUtPmxhc3RT
Y3JvbGxQb3NpdGlvbiwgb3JpZ2luKSkgewotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKLSAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxl
ciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotICAgICAgICAKLSAgICAgICAg
V2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICAgICAgW1t3ZWJWaWV3IF9V
SURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlkU2Nyb2xsRG9jdW1lbnRJbkZy
YW1lVmlldzpbc2VsZiBfZnJhbWVWaWV3XV07Ci0gICAgfQotICAgIF9wcml2YXRlLT5sYXN0U2Ny
b2xsUG9zaXRpb24gPSBvcmlnaW47Ci0KLSAgICBpZiAoW3NlbGYgd2luZG93XSAmJiAhX3ByaXZh
dGUtPmNsb3NlZCAmJiAhX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyKSB7Ci0gICAgICAg
IENGUnVuTG9vcFRpbWVyQ29udGV4dCBjb250ZXh0ID0geyAwLCBzZWxmLCBOVUxMLCBOVUxMLCBO
VUxMIH07Ci0gICAgICAgIAotICAgICAgICAvLyBVc2UgYSAxMDBtcyBkZWxheSBzbyB0aGF0IHRo
ZSBzeW50aGV0aWMgbW91c2Ugb3ZlciB1cGRhdGUgZG9lc24ndCBjYXVzZSBjdXJzb3IgdGhyYXNo
aW5nIHdoZW4gcGFnZXMgYXJlIGxvYWRpbmcKLSAgICAgICAgLy8gYW5kIHNjcm9sbGluZyByYXBp
ZGx5IGJhY2sgdG8gYmFjay4KLSAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVy
ID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUoTlVMTCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
KyAwLjEsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWNrLCAmY29u
dGV4dCk7Ci0gICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
X3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwot
ICAgIH0KLX0KLQotLSAodm9pZClfc2V0QXNpZGVTdWJ2aWV3cwotewotICAgIEFTU0VSVCghX3By
aXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwotICAgIEFTU0VSVChfcHJpdmF0ZS0+c2F2ZWRTdWJ2
aWV3cyA9PSBuaWwpOwotICAgIF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID0gX3N1YnZpZXdzOwot
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAvLyBXZSBuZWVkIHRvIGtlZXAg
dGhlIGxheWVyLWhvc3RpbmcgdmlldyBpbiB0aGUgc3Vidmlld3MsIG90aGVyd2lzZSB0aGUgbGF5
ZXJzIGZsYXNoLgotICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewotICAgICAg
ICBOU0FycmF5KiBuZXdTdWJ2aWV3cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3Rz
Ol9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3LCBuaWxdOwotICAgICAgICBfc3Vidmlld3MgPSBu
ZXdTdWJ2aWV3czsKLSAgICB9IGVsc2UKLSAgICAgICAgX3N1YnZpZXdzID0gbmlsOwotI2Vsc2UK
LSAgICBfc3Vidmlld3MgPSBuaWw7Ci0jZW5kaWYgICAgCi0gICAgX3ByaXZhdGUtPnN1YnZpZXdz
U2V0QXNpZGUgPSBZRVM7Ci0gfQotIAotIC0gKHZvaWQpX3Jlc3RvcmVTdWJ2aWV3cwotIHsKLSAg
ICBBU1NFUlQoX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKLSAg
ICAgICAgW19zdWJ2aWV3cyByZWxlYXNlXTsKLSAgICAgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUt
PnNhdmVkU3Vidmlld3M7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKF9zdWJ2aWV3cyA9
PSBuaWwpOwotICAgICAgICBfc3Vidmlld3MgPSBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKLSAg
ICB9Ci0jZWxzZQotICAgIEFTU0VSVChfc3Vidmlld3MgPT0gbmlsKTsKLSAgICBfc3Vidmlld3Mg
PSBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKLSNlbmRpZiAgICAKLSAgICBfcHJpdmF0ZS0+c2F2
ZWRTdWJ2aWV3cyA9IG5pbDsKLSAgICBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSA9IE5POwot
fQotCi0jaWZuZGVmIE5ERUJVRwotCi0tICh2b2lkKWRpZEFkZFN1YnZpZXc6KE5TVmlldyAqKXN1
YnZpZXcKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MpCi0gICAgICAg
IExPRyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVzIHdhcyBhZGRlZCBkdXJpbmcgc3VidmlldyBl
bnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1vZGUgY2hhbmdlLiBUaGlzIHZpZXcg
bWlnaHQgcGFpbnQgd2l0aG91dCBmaXJzdCByZWNlaXZpbmcgbGF5b3V0LiIsIG9iamVjdF9nZXRD
bGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Ci19Ci0KLS0gKHZvaWQpd2lsbFJlbW92ZVN1YnZp
ZXc6KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICAvLyBIYXZlIHRvIG51bGwtY2hlY2sgX3ByaXZh
dGUsIHNpbmNlIHRoaXMgY2FuIGJlIGNhbGxlZCB2aWEgLWRlYWxsb2Mgd2hlbgotICAgIC8vIGNs
ZWFuaW5nIHVwIHRoZSB0aGUgbGF5ZXJIb3N0aW5nVmlldy4KLSAgICBpZiAoX3ByaXZhdGUgJiYg
X3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MpCi0gICAgICAgIExPRyhWaWV3LCAiQSB2aWV3
IG9mIGNsYXNzICVzIHdhcyByZW1vdmVkIGR1cmluZyBzdWJ2aWV3IGVudW1lcmF0aW9uIGZvciBs
YXlvdXQgb3IgcHJpbnRpbmcgbW9kZSBjaGFuZ2UuIFdlIHdpbGwgc3RpbGwgZG8gbGF5b3V0IG9y
IHRoZSBwcmludGluZyBtb2RlIGNoYW5nZSBldmVuIHRob3VnaCB0aGlzIHZpZXcgaXMgbm8gbG9u
Z2VyIGluIHRoZSB2aWV3IGhpZXJhcmNoeS4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3
IGNsYXNzXSkpOwotfQotCi0jZW5kaWYKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLS8v
IFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgYXJlIGFib3V0IHRvIGRyYXcsIGJ1dCBiZWZvcmUgb3Vy
IGRpcnR5IHJlY3QgaXMgcHJvcGFnYXRlZCB0byBvdXIgYW5jZXN0b3JzLgotLy8gVGhhdCdzIHRo
ZSBwZXJmZWN0IHRpbWUgdG8gZG8gYSBsYXlvdXQsIGV4Y2VwdCB0aGF0IGlkZWFsbHkgd2UnZCB3
YW50IHRvIGJlIHN1cmUgdGhhdCB3ZSdyZSBkaXJ0eQotLy8gYmVmb3JlIGRvaW5nIGl0LiBBcyBh
IGNvbXByb21pc2UsIHdoZW4gd2UncmUgb3BhcXVlIHdlIGRvIHRoZSBsYXlvdXQgb25seSB3aGVu
IGFjdHVhbGx5IGFza2VkIHRvCi0vLyBkcmF3LCBidXQgd2hlbiB3ZSdyZSB0cmFuc3BhcmVudCB3
ZSBkbyB0aGUgbGF5b3V0IGF0IHRoaXMgc3RhZ2Ugc28gdmlld3MgYmVoaW5kIHVzIGtub3cgdGhh
dCB0aGV5Ci0vLyBuZWVkIHRvIGJlIHJlZHJhd24gKGluIGNhc2UgdGhlIGxheW91dCBjYXVzZXMg
c29tZSB0aGluZ3MgdG8gZ2V0IGRpcnRpZWQpLgotLSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0
c1RvT3BhcXVlQW5jZXN0b3JzCi17Ci0gICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFj
a2dyb3VuZF0pCi0gICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwot
ICAgIFtzdXBlciBfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3JzXTsKLX0KLQot
I2Vsc2UKLQotLSAodm9pZCl2aWV3V2lsbERyYXcKLXsKLSAgICAvLyBPbiB3aW5kb3cgY2xvc2Ug
d2Ugd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZGF0YXNvdXJjZSBpcyBuaWwsIHRoZW4gaGl0IGFu
IGFzc2VydCBpbiBfdG9wSFRNTFZpZXcKLSAgICAvLyBTbyBjaGVjayBpZiB0aGUgZGF0YVNvdXJj
ZSBpcyBuaWwgYmVmb3JlIGNhbGxpbmcgW3NlbGYgX2lzVG9wSFRNTFZpZXddLCB0aGlzIGNhbiBi
ZSByZW1vdmVkCi0gICAgLy8gb25jZSB0aGUgRklYTUUgaW4gX2lzVG9wSFRNTFZpZXcgaXMgZml4
ZWQuCi0gICAgaWYgKF9wcml2YXRlLT5kYXRhU291cmNlICYmIFtzZWxmIF9pc1RvcEhUTUxWaWV3
XSkKLSAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0gICAgW3N1
cGVyIHZpZXdXaWxsRHJhd107Ci19Ci0KLSNlbmRpZgotCi0vLyBEb24ndCBsZXQgQXBwS2l0IGV2
ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJlIG9mIHRoYXQuCi0tICh2b2lkKV9yZWN1cnNp
dmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2li
bGVSZWN0OihCT09MKWlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1Zp
ZXcgKil2aXNpYmxlVmlldyB0b3BWaWV3OihCT09MKXRvcFZpZXcKLXsKLSAgICAvLyBUaGlzIGhl
bHBzIHdoZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9jZXNzLgotICAg
IC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGluZywgdGhl
biB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KLSAgICBCT09MIHdhc0luUHJpbnRpbmdN
b2RlID0gX3ByaXZhdGUtPnByaW50aW5nOwotICAgIEJPT0wgaXNQcmludGluZyA9ICFbTlNHcmFw
aGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dOwotICAgIGlmIChpc1By
aW50aW5nKSB7Ci0gICAgICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgICAgICBb
c2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0jaWZuZGVmIEJVSUxESU5HX09O
X1RJR0VSCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVk
ZWRSZWN1cnNpdmVdOwotI2VuZGlmCi0gICAgfSBlbHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkK
LSAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0KLSNpZmRl
ZiBCVUlMRElOR19PTl9USUdFUgotCi0gICAgLy8gQmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZl
IHZpZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxheW91dCBoZXJlLgotICAgIFtzZWxmIF93ZWJf
bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotICAgIFtfc3Vidmlld3MgbWFrZU9iamVjdHNQZXJm
b3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3Rv
cnMpXTsKLQotI2VuZGlmCi0KLSAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107Ci0gICAgW3N1
cGVyIF9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OnJlY3QgaXNW
aXNpYmxlUmVjdDppc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzp2aXNpYmxl
VmlldyB0b3BWaWV3OnRvcFZpZXddOwotICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOwotCi0g
ICAgaWYgKHdhc0luUHJpbnRpbmdNb2RlICE9IGlzUHJpbnRpbmcpIHsKLSAgICAgICAgaWYgKHdh
c0luUHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVS
ZWN1cnNpdmVdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJp
bnRpbmdNb2RlUmVjdXJzaXZlXTsKLSAgICB9Ci19Ci0KLS8vIERvbid0IGxldCBBcHBLaXQgZXZl
biBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KLS0gKHZvaWQpX3JlY3Vyc2l2
ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVj
dDooTlNSZWN0KXZpc1JlY3QKLXsKLSAgICBCT09MIG5lZWRUb1NldEFzaWRlU3Vidmlld3MgPSAh
X3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGU7Ci0KLSAgICBCT09MIHdhc0luUHJpbnRpbmdNb2Rl
ID0gX3ByaXZhdGUtPnByaW50aW5nOwotICAgIEJPT0wgaXNQcmludGluZyA9ICFbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dOwotCi0gICAgaWYgKG5lZWRU
b1NldEFzaWRlU3Vidmlld3MpIHsKLSAgICAgICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50
IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4KLSAgICAgICAgLy8gSWYgdGhlIFdl
YkhUTUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2
ZXIgaGF2ZSB0byBkbyB0aGlzLgotICAgICAgICBpZiAoaXNQcmludGluZykgewotICAgICAgICAg
ICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX3Nl
dFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJl
Y3Vyc2l2ZV07Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkK
LSAgICAgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwotCi0j
aWZkZWYgQlVJTERJTkdfT05fVElHRVIKLQotICAgICAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMg
bm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhlcmUuCi0gICAgICAg
IE5TUmVjdCBib3VuZHNCZWZvcmVMYXlvdXQgPSBbc2VsZiBib3VuZHNdOwotICAgICAgICBpZiAo
IU5TSXNFbXB0eVJlY3QodmlzUmVjdCkpCi0gICAgICAgICAgICBbc2VsZiBfd2ViX2xheW91dElm
TmVlZGVkUmVjdXJzaXZlXTsKLQotICAgICAgICAvLyBJZiBsYXlvdXQgY2hhbmdlcyB0aGUgdmll
dydzIGJvdW5kcywgdGhlbiB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgdmlzUmVjdC4KLSAgICAg
ICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhlIHZpc1JlY3QgcGFzc2VkIHRvIHVzIHdhcyBiYXNlZCBv
biB0aGUgYm91bmRzIGF0IHRoZSB0aW1lCi0gICAgICAgIC8vIHdlIHdlcmUgY2FsbGVkLiBUaGlz
IG1ldGhvZCBpcyBvbmx5IGRpc3BsYXllZCB0byBkcmF3ICJhbGwiLCBzbyBpdCdzIHNhZmUKLSAg
ICAgICAgLy8gdG8ganVzdCBjYWxsIHZpc2libGVSZWN0IHRvIGNvbXB1dGUgdGhlIGVudGlyZSBy
ZWN0YW5nbGUuCi0gICAgICAgIGlmICghTlNFcXVhbFJlY3RzKGJvdW5kc0JlZm9yZUxheW91dCwg
W3NlbGYgYm91bmRzXSkpCi0gICAgICAgICAgICB2aXNSZWN0ID0gW3NlbGYgdmlzaWJsZVJlY3Rd
OwotCi0jZW5kaWYKLQotICAgICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107Ci0gICAgfQot
Ci0gICAgW3N1cGVyIF9yZWN1cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3VzOm5lZWRz
TG9ja0ZvY3VzIHZpc1JlY3Q6dmlzUmVjdF07Ci0KLSAgICBpZiAobmVlZFRvU2V0QXNpZGVTdWJ2
aWV3cykgewotICAgICAgICBpZiAod2FzSW5QcmludGluZ01vZGUgIT0gaXNQcmludGluZykgewot
ICAgICAgICAgICAgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgICAgIFtzZWxm
IF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOwotICAgIH0KLX0KLQotLy8g
RG9uJ3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0
LgotLSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09w
YWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdCBpbkNvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0ICop
Y29udGV4dCB0b3BWaWV3OihCT09MKXRvcFZpZXcKLXsKLSNpZmRlZiBCVUlMRElOR19PTl9USUdF
UiAKLSAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMgbm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5l
ZWQgdG8gZG8gbGF5b3V0IGhlcmUuCi0gICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vy
c2l2ZV07Ci0jZW5kaWYKLQotICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKLSAgICBbc3Vw
ZXIgX3JlY3Vyc2l2ZTpyZWN1cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OmRpc3BsYXlS
ZWN0IGluQ29udGV4dDpjb250ZXh0IHRvcFZpZXc6dG9wVmlld107Ci0gICAgW3NlbGYgX3Jlc3Rv
cmVTdWJ2aWV3c107Ci19Ci0KLS0gKEJPT0wpX2luc2lkZUFub3RoZXJIVE1MVmlldwotewotICAg
IHJldHVybiBzZWxmICE9IFtzZWxmIF90b3BIVE1MVmlld107Ci19Ci0KLS0gKE5TVmlldyAqKWhp
dFRlc3Q6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICAvLyBXZWJIVE1MVmlldyBvYmplY3RzIGhhbmRs
ZSBhbGwgZXZlbnRzIGZvciBvYmplY3RzIGluc2lkZSB0aGVtLgotICAgIC8vIFRvIGdldCB0aG9z
ZSBldmVudHMsIHdlIHByZXZlbnQgaGl0IHRlc3RpbmcgZnJvbSBBcHBLaXQuCi0KLSAgICAvLyBC
dXQgdGhlcmUgYXJlIHRocmVlIGV4Y2VwdGlvbnMgdG8gdGhpczoKLSAgICAvLyAgIDEpIEZvciBy
aWdodCBtb3VzZSBjbGlja3MgYW5kIGNvbnRyb2wgY2xpY2tzIHdlIGRvbid0IHlldCBoYXZlIGFu
IGltcGxlbWVudGF0aW9uCi0gICAgLy8gICAgICB0aGF0IHdvcmtzIGZvciBuZXN0ZWQgdmlld3Ms
IHNvIHdlIGxldCB0aGUgaGl0IHRlc3RpbmcgZ28gdGhyb3VnaCB0aGUKLSAgICAvLyAgICAgIHN0
YW5kYXJkIE5TVmlldyBjb2RlIHBhdGggKG5lZWRzIHRvIGJlIGZpeGVkLCBzZWUgYnVnIDQzNjE2
MTgpLgotICAgIC8vICAgMikgSmF2YSBkZXBlbmRzIG9uIGRvaW5nIGEgaGl0IHRlc3QgaW5zaWRl
IGl0J3MgbW91c2UgbW92ZWQgaGFuZGxpbmcsCi0gICAgLy8gICAgICBzbyB3ZSBsZXQgdGhlIGhp
dCB0ZXN0aW5nIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkIE5TVmlldyBjb2RlIHBhdGgKLSAgICAv
LyAgICAgIHdoZW4gdGhlIGN1cnJlbnQgZXZlbnQgaXMgYSBtb3VzZSBtb3ZlIChleGNlcHQgd2hl
biB3ZSBhcmUgY2FsbGluZwotICAgIC8vICAgICAgZnJvbSBfdXBkYXRlTW91c2VvdmVyV2l0aEV2
ZW50LCBzbyB3ZSBoYXZlIHRvIHVzZSBhIGdsb2JhbCwKLSAgICAvLyAgICAgIGZvcmNlV2ViSFRN
TFZpZXdIaXRUZXN0LCBmb3IgdGhhdCkKLSAgICAvLyAgIDMpIFRoZSBhY2NlcHRzRmlyc3RNb3Vz
ZTogYW5kIHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDogbWV0aG9kcwotICAgIC8v
ICAgICAgYm90aCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBjaGVjayB3aXRoIGlu
c2lkZSB0aGUgV2ViSFRNTFZpZXcuCi0gICAgLy8gICAgICBUaGV5IHVzZSBhIGdsb2JhbCB0byBj
aGFuZ2UgdGhlIGJlaGF2aW9yIG9mIGhpdFRlc3Q6IHNvIHRoZXkgY2FuIGdldCB0aGUKLSAgICAv
LyAgICAgIHJpZ2h0IHZpZXcuIFRoZSBnbG9iYWwgaXMgZm9yY2VOU1ZpZXdIaXRUZXN0IGFuZCB0
aGUgbWV0aG9kIHRoZXkgdXNlIHRvCi0gICAgLy8gICAgICBkbyB0aGUgaGl0IHRlc3RpbmcgaXMg
X2hpdFZpZXdGb3JFdmVudDouIChCdXQgdGhpcyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseQotICAg
IC8vICAgICAgd2hlbiB0aGVyZSBpcyBIVE1MIG92ZXJsYXBwaW5nIHRoZSB2aWV3LCBzZWUgYnVn
IDQzNjE2MjYpCi0gICAgLy8gICA0KSBOU0FjY2Vzc2liaWxpdHlIaXRUZXN0IHJlbGllcyBvbiB0
aGlzIGZvciBjaGVja2luZyB0aGUgY3Vyc29yIHBvc2l0aW9uLgotICAgIC8vICAgICAgT3VyIGNo
ZWNrIGZvciB0aGF0IGlzIHdoZXRoZXIgdGhlIGV2ZW50IGlzIE5TRmxhZ3NDaGFuZ2VkLiAgVGhp
cyB3b3JrcwotICAgIC8vICAgICAgZm9yIFZvaWNlT3ZlcidzIGNudGwtb3B0LWY1IGNvbW1hbmQg
KG1vdmUgZm9jdXMgdG8gaXRlbSB1bmRlciBjdXJzb3IpCi0gICAgLy8gICAgICBhbmQgRGljdGlv
bmFyeSdzIGNtZC1jbnRsLUQgKG9wZW4gZGljdGlvbmFyeSBwb3B1cCBmb3IgaXRlbSB1bmRlciBj
dXJzb3IpLgotICAgIC8vICAgICAgVGhpcyBpcyBvZiBjb3Vyc2UgYSBoYWNrLgotCi0gICAgQk9P
TCBjYXB0dXJlSGl0c09uU3Vidmlld3M7Ci0gICAgaWYgKGZvcmNlTlNWaWV3SGl0VGVzdCkKLSAg
ICAgICAgY2FwdHVyZUhpdHNPblN1YnZpZXdzID0gTk87Ci0gICAgZWxzZSBpZiAoZm9yY2VXZWJI
VE1MVmlld0hpdFRlc3QpCi0gICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9IFlFUzsKLSAg
ICBlbHNlIHsKLSAgICAgICAgTlNFdmVudCAqZXZlbnQgPSBbW3NlbGYgd2luZG93XSBjdXJyZW50
RXZlbnRdOwotICAgICAgICBjYXB0dXJlSGl0c09uU3Vidmlld3MgPSAhKFtldmVudCB0eXBlXSA9
PSBOU01vdXNlTW92ZWQKLSAgICAgICAgICAgIHx8IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91
c2VEb3duCi0gICAgICAgICAgICB8fCAoW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biAm
JiAoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaykgIT0gMCkKLSAgICAg
ICAgICAgIHx8IFtldmVudCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCk7Ci0gICAgfQotCi0gICAg
aWYgKCFjYXB0dXJlSGl0c09uU3Vidmlld3MpCi0gICAgICAgIHJldHVybiBbc3VwZXIgaGl0VGVz
dDpwb2ludF07Ci0gICAgaWYgKFtbc2VsZiBzdXBlcnZpZXddIG1vdXNlOnBvaW50IGluUmVjdDpb
c2VsZiBmcmFtZV1dKQotICAgICAgICByZXR1cm4gc2VsZjsKLSAgICByZXR1cm4gbmlsOwotfQot
Ci0tICh2b2lkKV9jbGVhckxhc3RIaXRWaWV3SWZTZWxmCi17Ci0gICAgaWYgKGxhc3RIaXRWaWV3
ID09IHNlbGYpCi0gICAgICAgIGxhc3RIaXRWaWV3ID0gbmlsOwotfQotCi0tIChOU1RyYWNraW5n
UmVjdFRhZylhZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2Vy
RGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZQotewotICAg
IEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKLSAgICBfcHJpdmF0
ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsKLSAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0
VXNlckRhdGEgPSBkYXRhOwotICAgIHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsKLX0KLQotLSAo
TlNUcmFja2luZ1JlY3RUYWcpX2FkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlk
KW93bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5z
aWRlIHVzZVRyYWNraW5nTnVtOihpbnQpdGFnCi17Ci0gICAgQVNTRVJUKHRhZyA9PSAwIHx8IHRh
ZyA9PSBUUkFDS0lOR19SRUNUX1RBRyk7Ci0gICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1Jl
Y3RPd25lciA9PSBuaWwpOwotICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVy
OwotICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9IGRhdGE7Ci0gICAgcmV0dXJu
IFRSQUNLSU5HX1JFQ1RfVEFHOwotfQotCi0tICh2b2lkKV9hZGRUcmFja2luZ1JlY3RzOihOU1Jl
Y3QgKilyZWN0cyBvd25lcjooaWQpb3duZXIgdXNlckRhdGFMaXN0Oih2b2lkICoqKXVzZXJEYXRh
TGlzdCBhc3N1bWVJbnNpZGVMaXN0OihCT09MICopYXNzdW1lSW5zaWRlTGlzdCB0cmFja2luZ051
bXM6KE5TVHJhY2tpbmdSZWN0VGFnICopdHJhY2tpbmdOdW1zIGNvdW50OihpbnQpY291bnQKLXsK
LSAgICBBU1NFUlQoY291bnQgPT0gMSk7Ci0gICAgQVNTRVJUKHRyYWNraW5nTnVtc1swXSA9PSAw
IHx8IHRyYWNraW5nTnVtc1swXSA9PSBUUkFDS0lOR19SRUNUX1RBRyk7Ci0gICAgQVNTRVJUKF9w
cml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOwotICAgIF9wcml2YXRlLT50cmFja2lu
Z1JlY3RPd25lciA9IG93bmVyOwotICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9
IHVzZXJEYXRhTGlzdFswXTsKLSAgICB0cmFja2luZ051bXNbMF0gPSBUUkFDS0lOR19SRUNUX1RB
RzsKLX0KLQotLSAodm9pZClyZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRh
ZwotewotICAgIGlmICh0YWcgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChf
cHJpdmF0ZSAmJiAodGFnID09IFRSQUNLSU5HX1JFQ1RfVEFHKSkgewotICAgICAgICBfcHJpdmF0
ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBuaWw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKF9wcml2YXRlICYmICh0YWcgPT0gX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnKSkg
ewotICAgICAgICBbc3VwZXIgcmVtb3ZlVHJhY2tpbmdSZWN0OnRhZ107Ci0gICAgICAgIF9wcml2
YXRlLT5sYXN0VG9vbFRpcFRhZyA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgLy8gSWYgYW55IG90aGVyIHRyYWNraW5nIHJlY3QgaXMgYmVpbmcgcmVtb3ZlZCwgd2UgZG9u
J3Qga25vdyBob3cgaXQgd2FzIGNyZWF0ZWQKLSAgICAvLyBhbmQgaXQncyBwb3NzaWJsZSB0aGVy
ZSdzIGEgbGVhayBpbnZvbHZlZCAoc2VlIDM1MDAyMTcpCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZVRyYWNraW5nUmVjdHM6KE5TVHJhY2tpbmdSZWN0VGFn
ICopdGFncyBjb3VudDooaW50KWNvdW50Ci17Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50IHRhZyA9IHRhZ3NbaV07Ci0gICAgICAgIGlm
ICh0YWcgPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQodGFnID09
IFRSQUNLSU5HX1JFQ1RfVEFHKTsKLSAgICAgICAgaWYgKF9wcml2YXRlICE9IG5pbCkgewotICAg
ICAgICAgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gbmlsOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi0tICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkCi17Ci0gICAgLy8gTm90
aGluZyBtYXR0ZXJzIGV4Y2VwdCB3aW5kb3csIHRyYWNraW5nTnVtYmVyLCBhbmQgdXNlckRhdGEu
Ci0gICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgZW50ZXJFeGl0RXZlbnRXaXRoVHlw
ZTpOU01vdXNlRXhpdGVkCi0gICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KDAsIDApCi0gICAg
ICAgIG1vZGlmaWVyRmxhZ3M6MAotICAgICAgICB0aW1lc3RhbXA6MAotICAgICAgICB3aW5kb3dO
dW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0Ok5VTEwK
LSAgICAgICAgZXZlbnROdW1iZXI6MAotICAgICAgICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19S
RUNUX1RBRwotICAgICAgICB1c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFd
OwotICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFeGl0ZWQ6ZmFrZUV2ZW50
XTsKLX0KLQotLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWQKLXsKLSAgICAvLyBOb3Ro
aW5nIG1hdHRlcnMgZXhjZXB0IHdpbmRvdywgdHJhY2tpbmdOdW1iZXIsIGFuZCB1c2VyRGF0YS4K
LSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBlbnRlckV4aXRFdmVudFdpdGhUeXBl
Ok5TTW91c2VFbnRlcmVkCi0gICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KDAsIDApCi0gICAg
ICAgIG1vZGlmaWVyRmxhZ3M6MAotICAgICAgICB0aW1lc3RhbXA6MAotICAgICAgICB3aW5kb3dO
dW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0Ok5VTEwK
LSAgICAgICAgZXZlbnROdW1iZXI6MAotICAgICAgICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19S
RUNUX1RBRwotICAgICAgICB1c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFd
OwotICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFbnRlcmVkOmZha2VFdmVu
dF07Ci19Ci0KLS0gKHZvaWQpX3NldFRvb2xUaXA6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAg
TlNTdHJpbmcgKnRvb2xUaXAgPSBbc3RyaW5nIGxlbmd0aF0gPT0gMCA/IG5pbCA6IHN0cmluZzsK
LSAgICBOU1N0cmluZyAqb2xkVG9vbFRpcCA9IF9wcml2YXRlLT50b29sVGlwOwotICAgIGlmICgo
dG9vbFRpcCA9PSBuaWwgfHwgb2xkVG9vbFRpcCA9PSBuaWwpID8gdG9vbFRpcCA9PSBvbGRUb29s
VGlwIDogW3Rvb2xUaXAgaXNFcXVhbFRvU3RyaW5nOm9sZFRvb2xUaXBdKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKG9sZFRvb2xUaXApIHsKLSAgICAgICAgW3NlbGYgX3NlbmRU
b29sVGlwTW91c2VFeGl0ZWRdOwotICAgICAgICBbb2xkVG9vbFRpcCByZWxlYXNlXTsKLSAgICB9
Ci0gICAgX3ByaXZhdGUtPnRvb2xUaXAgPSBbdG9vbFRpcCBjb3B5XTsKLSAgICBpZiAodG9vbFRp
cCkgewotICAgICAgICAvLyBTZWUgcmFkYXIgMzUwMDIxNyBmb3Igd2h5IHdlIHJlbW92ZSBhbGwg
dG9vbHRpcHMgcmF0aGVyIHRoYW4ganVzdCB0aGUgc2luZ2xlIG9uZSB3ZSBjcmVhdGVkLgotICAg
ICAgICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107Ci0gICAgICAgIE5TUmVjdCB3aWRlT3BlblJl
Y3QgPSBOU01ha2VSZWN0KC0xMDAwMDAsIC0xMDAwMDAsIDIwMDAwMCwgMjAwMDAwKTsKLSAgICAg
ICAgX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnID0gW3NlbGYgYWRkVG9vbFRpcFJlY3Q6d2lkZU9w
ZW5SZWN0IG93bmVyOnNlbGYgdXNlckRhdGE6TlVMTF07Ci0gICAgICAgIFtzZWxmIF9zZW5kVG9v
bFRpcE1vdXNlRW50ZXJlZF07Ci0gICAgfQotfQotCi0tIChOU1N0cmluZyAqKXZpZXc6KE5TVmll
dyAqKXZpZXcgc3RyaW5nRm9yVG9vbFRpcDooTlNUb29sVGlwVGFnKXRhZyBwb2ludDooTlNQb2lu
dClwb2ludCB1c2VyRGF0YToodm9pZCAqKWRhdGEKLXsKLSAgICByZXR1cm4gW1tfcHJpdmF0ZS0+
dG9vbFRpcCBjb3B5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZU1vdXNlb3Zl
cldpdGhFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKF9wcml2YXRlLT5jbG9zZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbW2V2ZW50IHdp
bmRvd10gY29udGVudFZpZXddOwotICAgIE5TUG9pbnQgbG9jYXRpb25Gb3JIaXRUZXN0ID0gW1tj
b250ZW50VmlldyBzdXBlcnZpZXddIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRv
d10gZnJvbVZpZXc6bmlsXTsKLSAgICAKLSAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCA9IFlF
UzsKLSAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbY29udGVudFZpZXcgaGl0VGVzdDpsb2NhdGlvbkZv
ckhpdFRlc3RdOwotICAgIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0ID0gTk87Ci0gICAgCi0gICAg
V2ViSFRNTFZpZXcgKnZpZXcgPSBuaWw7Ci0gICAgaWYgKFtoaXRWaWV3IGlzS2luZE9mQ2xhc3M6
W1dlYkhUTUxWaWV3IGNsYXNzXV0gJiYgIVtbKFdlYkhUTUxWaWV3ICopaGl0VmlldyBfd2ViVmll
d10gaXNIb3ZlckZlZWRiYWNrU3VzcGVuZGVkXSkKLSAgICAgICAgdmlldyA9IChXZWJIVE1MVmll
dyAqKWhpdFZpZXc7ICAgIAotCi0gICAgaWYgKHZpZXcpCi0gICAgICAgIFt2aWV3IHJldGFpbl07
Ci0KLSAgICBpZiAobGFzdEhpdFZpZXcgIT0gdmlldyAmJiBsYXN0SGl0VmlldyAmJiBbbGFzdEhp
dFZpZXcgX2ZyYW1lXSkgewotICAgICAgICAvLyBJZiB3ZSBhcmUgbW92aW5nIG91dCBvZiBhIHZp
ZXcgKG9yIGZyYW1lKSwgbGV0J3MgcHJldGVuZCB0aGUgbW91c2UgbW92ZWQKLSAgICAgICAgLy8g
YWxsIHRoZSB3YXkgb3V0IG9mIHRoYXQgdmlldy4gQnV0IHdlIGhhdmUgdG8gYWNjb3VudCBmb3Ig
c2Nyb2xsaW5nLCBiZWNhdXNlCi0gICAgICAgIC8vIGtodG1sIGRvZXNuJ3QgdW5kZXJzdGFuZCBv
dXIgY2xpcHBpbmcuCi0gICAgICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtbW1tsYXN0SGl0Vmll
dyBfZnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIGRvY3VtZW50VmlzaWJsZVJlY3RdOwot
ICAgICAgICBmbG9hdCB5U2Nyb2xsID0gdmlzaWJsZVJlY3Qub3JpZ2luLnk7Ci0gICAgICAgIGZs
b2F0IHhTY3JvbGwgPSB2aXNpYmxlUmVjdC5vcmlnaW4ueDsKLQotICAgICAgICBldmVudCA9IFtO
U0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhdGlvbjpOU01ha2VQb2ludCgtMSAtIHhTY3JvbGwsIC0xIC0geVNjcm9sbCAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRF
dmVudF0gbW9kaWZpZXJGbGFnc10KLSAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6
W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93TnVtYmVyOltbdmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0
XQotICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHBy
ZXNzdXJlOjBdOwotICAgICAgICBpZiAoRnJhbWUqIGxhc3RIaXRDb3JlRnJhbWUgPSBjb3JlKFts
YXN0SGl0VmlldyBfZnJhbWVdKSkKLSAgICAgICAgICAgIGxhc3RIaXRDb3JlRnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKLSAgICB9Ci0KLSAgICBsYXN0SGl0VmlldyA9
IHZpZXc7Ci0KLSAgICBpZiAodmlldykgewotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3ZpZXcgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKLQotICAgICAgICBbdmlldyByZWxlYXNlXTsKLSAgICB9
Ci19Ci0KLS8vIGtlZXAgaW4gc3luYyB3aXRoIFdlYlBhc3RlYm9hcmRIZWxwZXI6Omluc2VydGFi
bGVQYXN0ZWJvYXJkVHlwZXMKLSsgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBl
cwotewotICAgIHN0YXRpYyBOU0FycmF5ICp0eXBlcyA9IG5pbDsKLSAgICBpZiAoIXR5cGVzKSB7
Ci0gICAgICAgIHR5cGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2ViQXJj
aGl2ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwg
TlNUSUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAotI2lmIGRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIE5T
UElDVFBib2FyZFR5cGUsCi0jZW5kaWYKLSAgICAgICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNS
VEZEUGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29s
b3JQYm9hcmRUeXBlLCBrVVRUeXBlUE5HLCBuaWxdOwotICAgICAgICBDRlJldGFpbih0eXBlcyk7
Ci0gICAgfQotICAgIHJldHVybiB0eXBlczsKLX0KLQotKyAoTlNBcnJheSAqKV9zZWxlY3Rpb25Q
YXN0ZWJvYXJkVHlwZXMKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHB1dCBkYXRhIGZvciBO
U0hUTUxQYm9hcmRUeXBlIG9uIHRoZSBwYXN0ZWJvYXJkIGJ1dCBNaWNyb3NvZnQgRXhjZWwgZG9l
c24ndCBsaWtlIG91ciBmb3JtYXQgb2YgSFRNTCAoMzY0MDQyMykuCi0gICAgcmV0dXJuIFtOU0Fy
cmF5IGFycmF5V2l0aE9iamVjdHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5
cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBuaWxdOwotfQotCi0tIChO
U0ltYWdlICopX2RyYWdJbWFnZUZvclVSTDooTlNTdHJpbmcqKXVybFN0cmluZyB3aXRoTGFiZWw6
KE5TU3RyaW5nKilsYWJlbAotewotICAgIEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKLSAgICBC
T09MIGNsaXBVUkxTdHJpbmcgPSBOTywgY2xpcExhYmVsU3RyaW5nID0gTk87Ci0gICAgCi0gICAg
aWYgKCFsYWJlbCkgewotICAgICAgICBkcmF3VVJMU3RyaW5nID0gTk87Ci0gICAgICAgIGxhYmVs
ID0gdXJsU3RyaW5nOwotICAgIH0KLSAgICAKLSAgICBOU0ZvbnQgKmxhYmVsRm9udCA9IFtbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6W05TRm9udCBzeXN0ZW1G
b250T2ZTaXplOkRSQUdfTElOS19MQUJFTF9GT05UX1NJWkVdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRyYWl0Ok5TQm9s
ZEZvbnRNYXNrXTsKLSAgICBOU0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNp
emU6IERSQUdfTElOS19VUkxfRk9OVF9TSVpFXTsKLSAgICBOU1NpemUgbGFiZWxTaXplOwotICAg
IGxhYmVsU2l6ZS53aWR0aCA9IFtsYWJlbCBfd2ViX3dpZHRoV2l0aEZvbnQ6IGxhYmVsRm9udF07
Ci0gICAgbGFiZWxTaXplLmhlaWdodCA9IFtsYWJlbEZvbnQgYXNjZW5kZXJdIC0gW2xhYmVsRm9u
dCBkZXNjZW5kZXJdOwotICAgIGlmIChsYWJlbFNpemUud2lkdGggPiBNQVhfRFJBR19MQUJFTF9X
SURUSCl7Ci0gICAgICAgIGxhYmVsU2l6ZS53aWR0aCA9IE1BWF9EUkFHX0xBQkVMX1dJRFRIOwot
ICAgICAgICBjbGlwTGFiZWxTdHJpbmcgPSBZRVM7Ci0gICAgfQotICAgIAotICAgIE5TU2l6ZSBp
bWFnZVNpemUsIHVybFN0cmluZ1NpemU7Ci0gICAgaW1hZ2VTaXplLndpZHRoID0gbGFiZWxTaXpl
LndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGY7Ci0gICAgaW1hZ2VTaXplLmhlaWdo
dCA9IGxhYmVsU2l6ZS5oZWlnaHQgKyBEUkFHX0xBQkVMX0JPUkRFUl9ZICogMi4wZjsKLSAgICBp
ZiAoZHJhd1VSTFN0cmluZykgewotICAgICAgICB1cmxTdHJpbmdTaXplLndpZHRoID0gW3VybFN0
cmluZyBfd2ViX3dpZHRoV2l0aEZvbnQ6IHVybEZvbnRdOwotICAgICAgICB1cmxTdHJpbmdTaXpl
LmhlaWdodCA9IFt1cmxGb250IGFzY2VuZGVyXSAtIFt1cmxGb250IGRlc2NlbmRlcl07Ci0gICAg
ICAgIGltYWdlU2l6ZS5oZWlnaHQgKz0gdXJsU3RyaW5nU2l6ZS5oZWlnaHQ7Ci0gICAgICAgIGlm
ICh1cmxTdHJpbmdTaXplLndpZHRoID4gTUFYX0RSQUdfTEFCRUxfV0lEVEgpIHsKLSAgICAgICAg
ICAgIGltYWdlU2l6ZS53aWR0aCA9IE1BWChNQVhfRFJBR19MQUJFTF9XSURUSCArIERSQUdfTEFC
RUxfQk9SREVSX1ggKiAyLjBmLCBNSU5fRFJBR19MQUJFTF9XSURUSF9CRUZPUkVfQ0xJUCk7Ci0g
ICAgICAgICAgICBjbGlwVVJMU3RyaW5nID0gWUVTOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaW1hZ2VTaXplLndpZHRoID0gTUFYKGxhYmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxf
Qk9SREVSX1ggKiAyLjBmLCB1cmxTdHJpbmdTaXplLndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJf
WCAqIDIuMGYpOwotICAgICAgICB9Ci0gICAgfQotICAgIE5TSW1hZ2UgKmRyYWdJbWFnZSA9IFtb
W05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTogaW1hZ2VTaXplXSBhdXRvcmVsZWFzZV07Ci0g
ICAgW2RyYWdJbWFnZSBsb2NrRm9jdXNdOwotICAgIAotICAgIFtbTlNDb2xvciBjb2xvcldpdGhE
ZXZpY2VSZWQ6IDAuN2YgZ3JlZW46IDAuN2YgYmx1ZTogMC43ZiBhbHBoYTogMC44Zl0gc2V0XTsK
LSAgICAKLSAgICAvLyBEcmFnIGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzLwotICAg
IE5TQmV6aWVyUGF0aCAqcGF0aCA9IFtOU0JlemllclBhdGggYmV6aWVyUGF0aF07Ci0gICAgW3Bh
dGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAuMGYsIDAuMGYs
IERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07Ci0g
ICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIGlt
YWdlU2l6ZS5oZWlnaHQgLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFE
SVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07Ci0gICAgW3BhdGggYXBwZW5k
QmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERS
QUdfTEFCRUxfUkFESVVTICogMi4wZiwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfUkFE
SVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAq
IDIuMGYpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFr
ZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCAwLjBmLCBE
UkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZildOwotICAg
IAotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdChEUkFHX0xB
QkVMX1JBRElVUywgMC4wZiwgaW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAy
LjBmLCBpbWFnZVNpemUuaGVpZ2h0KV07Ci0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhS
ZWN0OiBOU01ha2VSZWN0KDAuMGYsIERSQUdfTEFCRUxfUkFESVVTLCBEUkFHX0xBQkVMX1JBRElV
UyArIDEwLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gMi4wZiAqIERSQUdfTEFCRUxfUkFESVVTKV07
Ci0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6
ZS53aWR0aCAtIERSQUdfTEFCRUxfUkFESVVTIC0gMjAuMGYsIERSQUdfTEFCRUxfUkFESVVTLCBE
UkFHX0xBQkVMX1JBRElVUyArIDIwLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gMi4wZiAqIERSQUdf
TEFCRUxfUkFESVVTKV07Ci0gICAgW3BhdGggZmlsbF07Ci0gICAgCi0gICAgTlNDb2xvciAqdG9w
Q29sb3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowLjBmIGFscGhhOjAuNzVmXTsK
LSAgICBOU0NvbG9yICpib3R0b21Db2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRl
OjEuMGYgYWxwaGE6MC41Zl07Ci0gICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKLSAgICAgICAgaWYg
KGNsaXBVUkxTdHJpbmcpCi0gICAgICAgICAgICB1cmxTdHJpbmcgPSBbV2ViU3RyaW5nVHJ1bmNh
dG9yIGNlbnRlclRydW5jYXRlU3RyaW5nOiB1cmxTdHJpbmcgdG9XaWR0aDppbWFnZVNpemUud2lk
dGggLSAoRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYpIHdpdGhGb250OnVybEZvbnRdOwotICAg
ICAgICAKLSAgICAgICAgW3VybFN0cmluZyBfd2ViX2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQ
b2ludChEUkFHX0xBQkVMX0JPUkRFUl9YLCBEUkFHX0xBQkVMX0JPUkRFUl9ZIC0gW3VybEZvbnQg
ZGVzY2VuZGVyXSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoVG9wQ29sb3I6
dG9wQ29sb3IgYm90dG9tQ29sb3I6Ym90dG9tQ29sb3IgZm9udDp1cmxGb250XTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKGNsaXBMYWJlbFN0cmluZykKLSAgICAgICAgbGFiZWwgPSBbV2ViU3RyaW5n
VHJ1bmNhdG9yIHJpZ2h0VHJ1bmNhdGVTdHJpbmc6IGxhYmVsIHRvV2lkdGg6aW1hZ2VTaXplLndp
ZHRoIC0gKERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKSB3aXRoRm9udDpsYWJlbEZvbnRdOwot
ICAgIFtsYWJlbCBfd2ViX2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQb2ludCAoRFJBR19MQUJF
TF9CT1JERVJfWCwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfQk9SREVSX1lfT0ZGU0VU
IC0gW2xhYmVsRm9udCBwb2ludFNpemVdKQotICAgICAgICAgICAgICAgICAgICAgIHdpdGhUb3BD
b2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21Db2xvciBmb250OmxhYmVsRm9udF07Ci0g
ICAgCi0gICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1c107Ci0gICAgCi0gICAgcmV0dXJuIGRyYWdJ
bWFnZTsKLX0KLQotLSAoTlNJbWFnZSAqKV9kcmFnSW1hZ2VGb3JMaW5rRWxlbWVudDooTlNEaWN0
aW9uYXJ5ICopZWxlbWVudAotewotICAgIE5TVVJMICpsaW5rVVJMID0gW2VsZW1lbnQgb2JqZWN0
Rm9yS2V5OiBXZWJFbGVtZW50TGlua1VSTEtleV07Ci0gICAgCi0gICAgTlNTdHJpbmcgKmxhYmVs
ID0gW2VsZW1lbnQgb2JqZWN0Rm9yS2V5OiBXZWJFbGVtZW50TGlua0xhYmVsS2V5XTsKLSAgICBO
U1N0cmluZyAqdXJsU3RyaW5nID0gW2xpbmtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107Ci0g
ICAgcmV0dXJuIFtzZWxmIF9kcmFnSW1hZ2VGb3JVUkw6dXJsU3RyaW5nIHdpdGhMYWJlbDpsYWJl
bF07Ci19Ci0KLS0gKHZvaWQpcGFzdGVib2FyZENoYW5nZWRPd25lcjooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZAotewotICAgIFtzZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBd
OwotfQotCi0tICh2b2lkKXBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgcHJv
dmlkZURhdGFGb3JUeXBlOihOU1N0cmluZyAqKXR5cGUKLXsKLSAgICBpZiAoW3R5cGUgaXNFcXVh
bDpOU1JURkRQYm9hcmRUeXBlXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0
OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgewotICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0g
W1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6
V2ViQXJjaGl2ZVBib2FyZFR5cGVdXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgX3dlYl93cml0ZVBy
b21pc2VkUlRGREZyb21BcmNoaXZlOmFyY2hpdmUgY29udGFpbnNJbWFnZTpbW3Bhc3RlYm9hcmQg
dHlwZXNdIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdXTsKLSAgICAgICAgW2FyY2hp
dmUgcmVsZWFzZV07Ci0gICAgfSBlbHNlIGlmIChbdHlwZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5
cGVdICYmIFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXSkgewotICAgICAgICBpZiAo
SW1hZ2UqIGltYWdlID0gW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdLT5pbWFnZSgp
KQotICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJ
RkZSZXByZXNlbnRhdGlvbigpIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07Ci0gICAgICAgIFtz
ZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBdOwotICAgIH0KLX0KLQotLSAodm9p
ZClfaGFuZGxlQXV0b3Njcm9sbEZvck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50IAoteyAK
LSAgICBbc2VsZiBhdXRvc2Nyb2xsOmV2ZW50XTsgCi0gICAgW3NlbGYgX3N0YXJ0QXV0b3Njcm9s
bFRpbWVyOmV2ZW50XTsgCi19IAotCi0tIChXZWJQbHVnaW5Db250cm9sbGVyICopX3BsdWdpbkNv
bnRyb2xsZXIKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXI7Ci19Ci0K
LS0gKHZvaWQpX2xheW91dEZvclByaW50aW5nCi17Ci0gICAgLy8gU2V0IHByaW50aW5nIG1vZGUg
dGVtcG9yYXJpbHkgc28gd2UgY2FuIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdmlldy4gVGhpcyB3
aWxsIGFsbG93Ci0gICAgLy8gQXBwS2l0J3MgcGFnaW5hdGlvbiBjb2RlIHRvIHVzZSB0aGUgY29y
cmVjdCBoZWlnaHQgZm9yIHRoZSBwYWdlIGNvbnRlbnQuIExlYXZpbmcgcHJpbnRpbmcKLSAgICAv
LyBtb2RlIG9uIGluZGVmaW5pdGVseSB3b3VsZCBpbnRlcmZlcmUgd2l0aCBNYWlsJ3MgcHJpbnRp
bmcgbWVjaGFuaXNtIChhdCBsZWFzdCksIHNvIHdlIGp1c3QKLSAgICAvLyB0dXJuIGl0IG9mZiBh
Z2FpbiBhZnRlciBhZGp1c3RpbmcgdGhlIHNpemUuCi0gICAgW3NlbGYgX3dlYl9zZXRQcmludGlu
Z01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZV07Ci0gICAgW3NlbGYgX3dlYl9jbGVhclBy
aW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci19Ci0KLS0gKHZvaWQpX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5n
OihOU1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOihET01SYW5nZSAqKXJhbmdl
VG9SZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJpbmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3Ry
aW5nOihOU1N0cmluZyAqKilhZnRlclN0cmluZwotewotICAgIGlmICghcGFzdGVTdHJpbmcgfHwg
IXJhbmdlVG9SZXBsYWNlIHx8ICFbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZF0pIHsKLSAgICAgICAgaWYgKGJlZm9yZVN0cmluZykKLSAgICAgICAgICAgICpiZWZvcmVT
dHJpbmcgPSBuaWw7Ci0gICAgICAgIGlmIChhZnRlclN0cmluZykKLSAgICAgICAgICAgICphZnRl
clN0cmluZyA9IG5pbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBbW3NlbGYg
X2ZyYW1lXSBfc21hcnRJbnNlcnRGb3JTdHJpbmc6cGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6
cmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOmJlZm9yZVN0cmluZyBhZnRlclN0cmluZzphZnRl
clN0cmluZ107Ci19Ci0KLS0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10g
c21hcnRJbnNlcnREZWxldGVFbmFibGVkXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5z
T2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKLX0KLQotLSAodm9pZClfc3RhcnRBdXRv
c2Nyb2xsVGltZXI6IChOU0V2ZW50ICopdHJpZ2dlckV2ZW50Ci17Ci0gICAgaWYgKF9wcml2YXRl
LT5hdXRvc2Nyb2xsVGltZXIgPT0gbmlsKSB7Ci0gICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xs
VGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFsOkFVVE9TQ1JP
TExfSU5URVJWQUwKLSAgICAgICAgICAgIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihf
YXV0b3Njcm9sbCkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOwotICAgICAgICBf
cHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9IFt0cmlnZ2VyRXZlbnQgcmV0YWluXTsK
LSAgICB9Ci19Ci0KLS8vIEZJWE1FOiBfc2VsZWN0aW9uUmVjdCBpcyBkZXByZWNhdGVkIGluIGZh
dm9yIG9mIHNlbGVjdGlvblJlY3QsIHdoaWNoIGlzIGluIHByb3RvY29sIFdlYkRvY3VtZW50U2Vs
ZWN0aW9uLgotLy8gV2UgY2FuJ3QgcmVtb3ZlIHRoaXMgeWV0IGJlY2F1c2UgaXQncyBzdGlsbCBp
biB1c2UgYnkgTWFpbC4KLS0gKE5TUmVjdClfc2VsZWN0aW9uUmVjdAotewotICAgIHJldHVybiBb
c2VsZiBzZWxlY3Rpb25SZWN0XTsKLX0KLQotLSAodm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcgot
ewotICAgIE5TVGltZXIgKnRpbWVyID0gX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lcjsKLSAgICBf
cHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gbmlsOwotICAgIFtfcHJpdmF0ZS0+YXV0b3Njcm9s
bFRyaWdnZXJFdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJF
dmVudCA9IG5pbDsKLSAgICBbdGltZXIgaW52YWxpZGF0ZV07Ci0gICAgW3RpbWVyIHJlbGVhc2Vd
OwotfQotCi0tICh2b2lkKV9hdXRvc2Nyb2xsCi17Ci0gICAgLy8gR3VhcmFudGVlIHRoYXQgdGhl
IGF1dG9zY3JvbGwgdGltZXIgaXMgaW52YWxpZGF0ZWQsIGV2ZW4gaWYgd2UgZG9uJ3QgcmVjZWl2
ZQotICAgIC8vIGEgbW91c2UgdXAgZXZlbnQuCi0gICAgQk9PTCBpc1N0aWxsRG93biA9IENHRXZl
bnRTb3VyY2VCdXR0b25TdGF0ZShrQ0dFdmVudFNvdXJjZVN0YXRlQ29tYmluZWRTZXNzaW9uU3Rh
dGUsIGtDR01vdXNlQnV0dG9uTGVmdCk7ICAgCi0gICAgaWYgKCFpc1N0aWxsRG93bil7Ci0gICAg
ICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpO
U0xlZnRNb3VzZURyYWdnZWQKLSAgICAgICAgbG9jYXRpb246W1tzZWxmIHdpbmRvd10gY29udmVy
dFNjcmVlblRvQmFzZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KLSAgICAgICAgbW9kaWZpZXJG
bGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KLSAgICAgICAgdGltZXN0
YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQotICAgICAgICB3aW5k
b3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0Oltb
TlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQotICAgICAgICBldmVudE51bWJlcjowIGNsaWNr
Q291bnQ6MCBwcmVzc3VyZTowXTsKLSAgICBbc2VsZiBtb3VzZURyYWdnZWQ6ZmFrZUV2ZW50XTsK
LX0KLQotLSAoQk9PTClfY2FuRWRpdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3Io
KS0+Y2FuRWRpdCgpOwotfQotCi0tIChCT09MKV9jYW5FZGl0UmljaGx5Ci17Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAm
JiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci19Ci0KLS0gKEJPT0wpX2Nh
bkFsdGVyQ3VycmVudFNlbGVjdGlvbgotewotICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9u
T3JJbnNlcnRpb25Qb2ludF0gJiYgW3NlbGYgX2lzRWRpdGFibGVdOwotfQotCi0tIChCT09MKV9o
YXNTZWxlY3Rpb24KLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFu
Z2UoKTsKLX0KLQotLSAoQk9PTClfaGFzU2VsZWN0aW9uT3JJbnNlcnRpb25Qb2ludAotewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldE9yUmFuZ2UoKTsKLX0KLQot
LSAoQk9PTClfaGFzSW5zZXJ0aW9uUG9pbnQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzQ2FyZXQoKTsKLX0KLQotLSAoQk9PTClfaXNFZGl0YWJsZQotewotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKLX0KLQot
LSAoQk9PTClfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT50
cmFuc3BhcmVudEJhY2tncm91bmQ7Ci19Ci0KLS0gKHZvaWQpX3NldFRyYW5zcGFyZW50QmFja2dy
b3VuZDooQk9PTClmCi17Ci0gICAgX3ByaXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZCA9IGY7
Ci19Ci0KLS0gKE5TSW1hZ2UgKilfc2VsZWN0aW9uRHJhZ2dpbmdJbWFnZQotewotICAgIGlmIChb
c2VsZiBfaGFzU2VsZWN0aW9uXSkgewotICAgICAgICBOU0ltYWdlICpkcmFnSW1hZ2UgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25JbWFnZSgpOwotICAgICAgICBbZHJhZ0ltYWdlIF93
ZWJfZGlzc29sdmVUb0ZyYWN0aW9uOldlYkRyYWdJbWFnZUFscGhhXTsKLSAgICAgICAgcmV0dXJu
IGRyYWdJbWFnZTsKLSAgICB9Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNSZWN0KV9zZWxl
Y3Rpb25EcmFnZ2luZ1JlY3QKLXsKLSAgICAvLyBNYWlsIGN1cnJlbnRseSBjYWxscyB0aGlzIG1l
dGhvZC4gV2UgY2FuIGVsaW1pbmF0ZSBpdCB3aGVuIE1haWwgbm8gbG9uZ2VyIGNhbGxzIGl0Lgot
ICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0XTsKLX0KLQotLSAoRE9NTm9kZSAqKV9pbnNl
cnRPcmRlcmVkTGlzdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5z
ZXJ0T3JkZXJlZExpc3QoKS5nZXQoKSkgOiBuaWw7Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5zZXJ0
VW5vcmRlcmVkTGlzdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5z
ZXJ0VW5vcmRlcmVkTGlzdCgpLmdldCgpKSA6IG5pbDsKLX0KLQotLSAoQk9PTClfY2FuSW5jcmVh
c2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCkt
PmNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7Ci19Ci0KLS0gKEJPT0wpX2NhbkRlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigp
LT5jYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwotfQotCi0tIChET01Ob2RlICopX2lu
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVk
aXRvcigpLT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpLmdldCgpKSA6IG5pbDsKLX0KLQot
LSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQKLXsKLSAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZy
YW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
T3JkZXJlZCgpLmdldCgpKSA6IG5pbDsKLX0KLQotLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbFVub3JkZXJlZAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0
b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKS5nZXQoKSkgOiBuaWw7
Ci19Ci0KLS0gKHZvaWQpX2RlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCi17Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKGNvcmVGcmFtZSkKLSAg
ICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsK
LX0KLQotLSAodm9pZClfc2V0SGlnaGxpZ2h0ZXI6KGlkPFdlYkhUTUxIaWdobGlnaHRlcj4paGln
aGxpZ2h0ZXIgb2ZUeXBlOihOU1N0cmluZyopdHlwZQotewotICAgIGlmICghX3ByaXZhdGUtPmhp
Z2hsaWdodGVycykKLSAgICAgICAgX3ByaXZhdGUtPmhpZ2hsaWdodGVycyA9IFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgW19wcml2YXRlLT5oaWdobGlnaHRlcnMgc2V0
T2JqZWN0OmhpZ2hsaWdodGVyIGZvcktleTp0eXBlXTsKLX0KLQotLSAodm9pZClfcmVtb3ZlSGln
aGxpZ2h0ZXJPZlR5cGU6KE5TU3RyaW5nKil0eXBlCi17Ci0gICAgW19wcml2YXRlLT5oaWdobGln
aHRlcnMgcmVtb3ZlT2JqZWN0Rm9yS2V5OnR5cGVdOwotfQotCi0tICh2b2lkKV91cGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGUKLXsKLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFj
dGl2ZVN0YXRlVGltZXJdOwotCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBfdXBkYXRlRm9jdXNlZEFu
ZEFjdGl2ZVN0YXRlRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci19Ci0KLS0gKHZvaWQpX3dyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAg
QVNTRVJUKFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtzZWxm
IHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbl07Ci0KLSAgICAvLyBEb24ndCB3cml0ZSBSVEZE
IHRvIHRoZSBwYXN0ZWJvYXJkIHdoZW4gdGhlIGNvcGllZCBhdHRyaWJ1dGVkIHN0cmluZyBoYXMg
bm8gYXR0YWNobWVudHMuCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
ID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKLSAgICBOU011dGFibGVBcnJheSAq
bXV0YWJsZVR5cGVzID0gbmlsOwotICAgIGlmICghW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNB
dHRhY2htZW50c10pIHsKLSAgICAgICAgbXV0YWJsZVR5cGVzID0gW3R5cGVzIG11dGFibGVDb3B5
XTsKLSAgICAgICAgW211dGFibGVUeXBlcyByZW1vdmVPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV07
Ci0gICAgICAgIHR5cGVzID0gbXV0YWJsZVR5cGVzOwotICAgIH0KLQotICAgIFtwYXN0ZWJvYXJk
IGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsKLSAgICBbc2Vs
ZiBfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpw
YXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107Ci0gICAg
W211dGFibGVUeXBlcyByZWxlYXNlXTsKLX0KLQotLSAodm9pZCljbG9zZQotewotICAgIC8vIENo
ZWNrIGZvciBhIG5pbCBfcHJpdmF0ZSBoZXJlIGluIGNhc2Ugd2Ugd2VyZSBjcmVhdGVkIHdpdGgg
aW5pdFdpdGhDb2Rlci4gSW4gdGhhdCBjYXNlLCB0aGUgV2ViVmlldyBpcyBqdXN0IHRocm93aW5n
Ci0gICAgLy8gb3V0IHRoZSBhcmNoaXZlZCBXZWJIVE1MVmlldyBhbmQgcmVjcmVhdGluZyBhIG5l
dyBvbmUgaWYgbmVlZGVkLiBTbyBjbG9zZSBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaW4g
dGhhdCBjYXNlLgotICAgIGlmICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgX3ByaXZhdGUtPmNsb3NlZCA9IFlFUzsKLQotICAgIFtzZWxmIF9j
YW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07Ci0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3Vz
ZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsKLSAgICBbc2VsZiBfY2xlYXJMYXN0SGl0Vmlld0lmU2Vs
Zl07Ci0gICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07
Ci0gICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2VydmVyc107Ci0gICAgW3NlbGYgX3JlbW92ZVN1
cGVydmlld09ic2VydmVyc107Ci0gICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIGRlc3Ry
b3lBbGxQbHVnaW5zXTsKLSAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNv
dXJjZTpuaWxdOwotICAgIC8vIHJlbW92ZSB0b29sdGlwcyBiZWZvcmUgY2xlYXJpbmcgX3ByaXZh
dGUgc28gcmVtb3ZlVHJhY2tpbmdSZWN0OiB3aWxsIHdvcmsgY29ycmVjdGx5Ci0gICAgW3NlbGYg
cmVtb3ZlQWxsVG9vbFRpcHNdOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQot
ICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykKLSAgICAgICAgW1tzZWxmIF93ZWJW
aWV3XSBfc3RvcHBlZEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVd
XTsKLSNlbmRpZgotCi0gICAgW19wcml2YXRlIGNsZWFyXTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBj
b3JlKFtzZWxmIF93ZWJWaWV3XSk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBhZ2UtPmRyYWdD
b250cm9sbGVyKCktPnNldERyYWdnaW5nSW1hZ2VVUkwoS1VSTCgpKTsKLX0KLQotLSAoQk9PTClf
aGFzSFRNTERvY3VtZW50Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50ICYmIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpOwotfQotCi0tIChET01Eb2N1bWVudEZy
YWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvclR5cGU6KE5TU3RyaW5nICopcGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6
KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzCi17Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gV2ViQXJj
aGl2ZVBib2FyZFR5cGUpIHsKLSAgICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJj
aGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hp
dmVQYm9hcmRUeXBlXV07Ci0gICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCi0gICAgICAgICAgICAq
c3VicmVzb3VyY2VzID0gW2FyY2hpdmUgc3VicmVzb3VyY2VzXTsKLSAgICAgICAgRE9NRG9jdW1l
bnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdt
ZW50V2l0aEFyY2hpdmU6YXJjaGl2ZV07Ci0gICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOwotICAg
ICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TRmls
ZW5hbWVzUGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50
V2l0aFBhdGhzOltwYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9h
cmRUeXBlXV07Ci0gICAgICAgIAotICAgIGlmIChwYm9hcmRUeXBlID09IE5TSFRNTFBib2FyZFR5
cGUpIHsKLSAgICAgICAgTlNTdHJpbmcgKkhUTUxTdHJpbmcgPSBbcGFzdGVib2FyZCBzdHJpbmdG
b3JUeXBlOk5TSFRNTFBib2FyZFR5cGVdOwotICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBt
YWtlIE1pY3Jvc29mdCdzIEhUTUwgcGFzdGVib2FyZCBkYXRhIHdvcmsuIFNlZSAzNzc4Nzg1Lgot
ICAgICAgICBpZiAoW0hUTUxTdHJpbmcgaGFzUHJlZml4OkAiVmVyc2lvbjoiXSkgewotICAgICAg
ICAgICAgTlNSYW5nZSByYW5nZSA9IFtIVE1MU3RyaW5nIHJhbmdlT2ZTdHJpbmc6QCI8aHRtbCIg
b3B0aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF07Ci0gICAgICAgICAgICBpZiAocmFuZ2Uu
bG9jYXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgICAgICBIVE1MU3RyaW5nID0gW0hU
TUxTdHJpbmcgc3Vic3RyaW5nRnJvbUluZGV4OnJhbmdlLmxvY2F0aW9uXTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoW0hUTUxTdHJpbmcgbGVuZ3RoXSA9PSAwKQotICAgICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRG
cmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6SFRNTFN0cmluZyBiYXNlVVJMU3RyaW5nOm5pbF07Ci0g
ICAgfQotCi0gICAgLy8gVGhlIF9oYXNIVE1MRG9jdW1lbnQgY2xhdXNlIGhlcmUgaXMgYSB3b3Jr
YXJvdW5kIGZvciBhIGJ1ZyBpbiBOU0F0dHJpYnV0ZWRTdHJpbmc6IFJhZGFyIDUwNTIzNjkuCi0g
ICAgLy8gSWYgd2UgY2FsbCBfZG9jdW1lbnRGcm9tUmFuZ2Ugb24gYW4gWE1MIGRvY3VtZW50IHdl
J2xsIGdldCAic2V0SW5uZXJIVE1MOiBtZXRob2Qgbm90IGZvdW5kIi4KLSAgICAvLyBGSVhNRTog
UmVtb3ZlIHRoaXMgb25jZSBidWcgNTA1MjM2OSBpcyBmaXhlZC4KLSAgICBpZiAoW3NlbGYgX2hh
c0hUTUxEb2N1bWVudF0gJiYgcGJvYXJkVHlwZSA9PSBOU1JURlBib2FyZFR5cGUgfHwgcGJvYXJk
VHlwZSA9PSBOU1JURkRQYm9hcmRUeXBlKSB7Ci0gICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
c3RyaW5nID0gbmlsOwotICAgICAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1JURkRQYm9hcmRUeXBl
KQotICAgICAgICAgICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVu
dEF0dHJpYnV0ZXM6TlVMTF07Ci0gICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQotICAgICAgICAg
ICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0
ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5V
TExdOwotICAgICAgICBpZiAoc3RyaW5nID09IG5pbCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7
Ci0gICAgICAgICAgICAKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICpkb2N1bWVudEF0dHJpYnV0ZXMg
PSBbW05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAg
ICAgIFtbc2VsZiBjbGFzc10gX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29u
dmVyc2lvbl0sIE5TRXhjbHVkZWRFbGVtZW50c0RvY3VtZW50QXR0cmlidXRlLAotICAgICAgICAg
ICAgc2VsZiwgQCJXZWJSZXNvdXJjZUhhbmRsZXIiLCBuaWxdOwotICAgICAgICBOU0FycmF5ICpz
OwotICAgICAgICAKLSAgICAgICAgQk9PTCB3YXNEZWZlcnJpbmdDYWxsYmFja3MgPSBbW3NlbGYg
X3dlYlZpZXddIGRlZmVyc0NhbGxiYWNrc107Ci0gICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2Fs
bGJhY2tzKQotICAgICAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6
WUVTXTsKLSAgICAgICAgICAgIAotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVu
dCA9IFtzdHJpbmcgX2RvY3VtZW50RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVu
Z3RoXSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQ6W1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRBdHRyaWJ1dGVz
OmRvY3VtZW50QXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOiZzXTsKLSAgICAgICAgaWYgKHN1YnJlc291
cmNlcykKLSAgICAgICAgICAgICpzdWJyZXNvdXJjZXMgPSBzOwotICAgICAgICAKLSAgICAgICAg
TlNFbnVtZXJhdG9yICplID0gW3Mgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgICAgIFdlYlJlc291
cmNlICpyOwotICAgICAgICB3aGlsZSAoKHIgPSBbZSBuZXh0T2JqZWN0XSkpCi0gICAgICAgICAg
ICBbW3NlbGYgX2RhdGFTb3VyY2VdIGFkZFN1YnJlc291cmNlOnJdOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCi0gICAgICAgICAgICBbW3NlbGYgX3dlYlZp
ZXddIHNldERlZmVyc0NhbGxiYWNrczpOT107Ci0gICAgICAgIAotICAgICAgICBbZG9jdW1lbnRB
dHRyaWJ1dGVzIHJlbGVhc2VdOwotICAgICAgICBbc3RyaW5nIHJlbGVhc2VdOwotICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TVElGRlBib2Fy
ZFR5cGUpIHsKLSAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBh
bGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TVElGRlBib2FyZFR5
cGVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
SU1FVHlwZTpAImltYWdlL3RpZmYiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAg
ICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0g
X2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFty
ZXNvdXJjZSByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBp
ZiAocGJvYXJkVHlwZSA9PSBOU1BERlBib2FyZFR5cGUpIHsKLSAgICAgICAgV2ViUmVzb3VyY2Ug
KnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJk
IGRhdGFGb3JUeXBlOk5TUERGUGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxh
dGl2ZVBhcnQoQCJhcHBsaWNhdGlvbi5wZGYiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYi
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRF
bmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdt
ZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRo
SW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKLSAg
ICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgaWYgKHBib2FyZFR5cGUg
PT0gTlNQSUNUUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBb
W1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6
TlNQSUNUUGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJp
bWFnZS5waWN0IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvcGljdCIgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVO
YW1lOm5pbF07Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxm
IF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNl
XTsKLSAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
Ci0gICAgfQotI2VuZGlmCi0gICAgLy8gT25seSAxMC41IGFuZCBoaWdoZXIgc3VwcG9ydCBzZXR0
aW5nIGFuZCByZXRyaWV2aW5nIHBhc3RlYm9hcmQgdHlwZXMgd2l0aCBVVElzLCBidXQgd2UgZG9u
J3QgYmVsaWV2ZQotICAgIC8vIHRoYXQgYW55IGFwcGxpY2F0aW9ucyBvbiBUaWdlciBwdXQgdHlw
ZXMgZm9yIHdoaWNoIHdlIG9ubHkgaGF2ZSBhIFVUSSwgbGlrZSBQTkcsIG9uIHRoZSBwYXN0ZWJv
YXJkLgotICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRU
eXBlUE5HXSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNl
IGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6KE5TU3RyaW5nKilr
VVRUeXBlUE5HXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBu
ZyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBNSU1FVHlwZTpAImltYWdlL3BuZyIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07
Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291
cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKLSAgICAg
ICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQot
ICAgIGlmIChwYm9hcmRUeXBlID09IE5TVVJMUGJvYXJkVHlwZSkgewotICAgICAgICBOU1VSTCAq
VVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotICAgICAgICBET01E
b2N1bWVudCogZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07Ci0gICAgICAg
IEFTU0VSVChkb2N1bWVudCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICBy
ZXR1cm4gbmlsOwotICAgICAgICBET01IVE1MQW5jaG9yRWxlbWVudCAqYW5jaG9yID0gKERPTUhU
TUxBbmNob3JFbGVtZW50ICopW2RvY3VtZW50IGNyZWF0ZUVsZW1lbnQ6QCJhIl07Ci0gICAgICAg
IE5TU3RyaW5nICpVUkxTdHJpbmcgPSBbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddOyAv
LyBPcmlnaW5hbCBkYXRhIGlzIEFTQ0lJLW9ubHksIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJl
Y29tcG9zZS4KLSAgICAgICAgaWYgKFtVUkxTdHJpbmcgbGVuZ3RoXSA9PSAwKQotICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAgICAgTlNTdHJpbmcgKlVSTFRpdGxlU3RyaW5nID0gW1twYXN0
ZWJvYXJkIHN0cmluZ0ZvclR5cGU6V2ViVVJMTmFtZVBib2FyZFR5cGVdIHByZWNvbXBvc2VkU3Ry
aW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwotICAgICAgICBET01UZXh0ICp0ZXh0ID0gW2RvY3Vt
ZW50IGNyZWF0ZVRleHROb2RlOlVSTFRpdGxlU3RyaW5nXTsKLSAgICAgICAgW2FuY2hvciBzZXRI
cmVmOlVSTFN0cmluZ107Ci0gICAgICAgIFthbmNob3IgYXBwZW5kQ2hpbGQ6dGV4dF07Ci0gICAg
ICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW2RvY3VtZW50IGNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnRdOwotICAgICAgICBbZnJhZ21lbnQgYXBwZW5kQ2hpbGQ6YW5jaG9yXTsKLSAg
ICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0
cmluZ1Bib2FyZFR5cGUpCi0gICAgICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2Fy
ZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKS5nZXQoKSk7Ci0g
ICAgcmV0dXJuIG5pbDsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKLS0g
KHZvaWQpX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAKLXsgCi0gICAgTlNB
cnJheSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2aWV3c107IAotICAgIHVuc2lnbmVkIGludCBzdWJ2
aWV3Q291bnQgPSBbc3Vidmlld3MgY291bnRdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0lu
ZGV4OyAKLSAgICAKLSAgICBmb3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1
YnZpZXdDb3VudDsgc3Vidmlld0luZGV4KyspIHsgCi0gICAgICAgIE5TVmlldyAqc3VidmlldyA9
IFtzdWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1YnZpZXdJbmRleF07IAotICAgICAgICBpZiAoW3N1
YnZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAK
LSAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgc3RvcFRp
bWVyc107Ci0gICAgfSAKLX0gCi0jZW5kaWYgCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkgCi0tICh2b2lkKV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAot
eyAKLSAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsgCi0gICAgdW5zaWdu
ZWQgaW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3cyBjb3VudF07IAotICAgIHVuc2lnbmVkIGlu
dCBzdWJ2aWV3SW5kZXg7IAotICAgIAotICAgIGZvciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmll
d0luZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3SW5kZXgrKykgeyAKLSAgICAgICAgTlNWaWV3
ICpzdWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6c3Vidmlld0luZGV4XTsgCi0gICAg
ICAgIGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3
IGNsYXNzXV0pIAotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3Vi
dmlldyByZXN0YXJ0VGltZXJzXTsgCi0gICAgfSAKLX0gCi0jZW5kaWYgCi0KLS0gKEJPT0wpX2lz
VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotICAgIHJldHVybiBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyAhPSBuaWw7Ci0j
ZWxzZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotCi0tICh2b2lkKV93ZWJfYWRkRGVz
Y2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICopYXJyYXkKLXsKLSAg
ICB1bnNpZ25lZCBjb3VudCA9IFtfc3Vidmlld3MgY291bnRdOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TVmlldyAqY2hpbGQgPSBbX3N1YnZp
ZXdzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChbY2hpbGQgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6Y2hpbGRd
OwotICAgICAgICBbY2hpbGQgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTph
cnJheV07Ci0gICAgfQotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU011dGFibGVEaWN0
aW9uYXJ5IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQotLSAodm9pZClfd2ViX3NldE9iamVj
dElmTm90TmlsOihpZClvYmplY3QgZm9yS2V5OihpZClrZXkKLXsKLSAgICBpZiAob2JqZWN0ID09
IG5pbCkgewotICAgICAgICBbc2VsZiByZW1vdmVPYmplY3RGb3JLZXk6a2V5XTsKLSAgICB9IGVs
c2UgewotICAgICAgICBbc2VsZiBzZXRPYmplY3Q6b2JqZWN0IGZvcktleTprZXldOwotICAgIH0K
LX0KLQotQGVuZAotCi1AaW50ZXJmYWNlIE5TU3RyaW5nIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5h
bCkKLS0gKEJPT0wpbWF0Y2hlc0V4dGVuc2lvbkVxdWl2YWxlbnQ6KE5TU3RyaW5nICopZXh0ZW5z
aW9uOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKFdlYkhUTUxWaWV3RmlsZUlu
dGVybmFsKQotCi0tIChCT09MKW1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50OihOU1N0cmluZyAq
KWV4dGVuc2lvbgotewotICAgIGlmIChbc2VsZiBoYXNTdWZmaXg6ZXh0ZW5zaW9uXSkKLSAgICAg
ICAgcmV0dXJuIFlFUzsKLSAgICBlbHNlIGlmIChbZXh0ZW5zaW9uIGlzRXF1YWxUb1N0cmluZzpA
ImpwZWciXSAmJiBbc2VsZiBoYXNTdWZmaXg6QCJqcGciXSkKLSAgICAgICAgcmV0dXJuIFlFUzsK
LSAgICByZXR1cm4gTk87Ci19Ci0KLUBlbmQKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0K
LS8vIFRoZSBmb2xsb3dpbmcgaXMgYSB3b3JrYXJvdW5kIGZvcgotLy8gPHJkYXI6Ly9wcm9ibGVt
LzM0Mjk2MzE+IHdpbmRvdyBzdG9wcyBnZXR0aW5nIG1vdXNlIG1vdmVkIGV2ZW50cyBhZnRlciBm
aXJzdCB0b29sdGlwIGFwcGVhcnMKLS8vIFRoZSB0cmljayBpcyB0byBkZWZpbmUgYSBjYXRlZ29y
eSBvbiBOU1Rvb2xUaXBQYW5lbCB0aGF0IGltcGxlbWVudHMgc2V0QWNjZXB0c01vdXNlTW92ZWRF
dmVudHM6LgotLy8gU2luY2UgdGhlIGNhdGVnb3J5IHdpbGwgYmUgc2VhcmNoZWQgYmVmb3JlIHRo
ZSByZWFsIGNsYXNzLCB3ZSdsbCBwcmV2ZW50IHRoZSBmbGFnIGZyb20gYmVpbmcKLS8vIHNldCBv
biB0aGUgdG9vbCB0aXAgcGFuZWwuCi0KLUBpbnRlcmZhY2UgTlNUb29sVGlwUGFuZWwgOiBOU1Bh
bmVsCi1AZW5kCi0KLUBpbnRlcmZhY2UgTlNUb29sVGlwUGFuZWwgKFdlYkhUTUxWaWV3RmlsZUlu
dGVybmFsKQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNUb29sVGlwUGFuZWwgKFdlYkhUTUxW
aWV3RmlsZUludGVybmFsKQotCi0tICh2b2lkKXNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOihC
T09MKWZsYWcKLXsKLSAgICAvLyBEbyBub3RoaW5nLCBwcmV2ZW50aW5nIHRoZSB0b29sIHRpcCBw
YW5lbCBmcm9tIHRyeWluZyB0byBhY2NlcHQgbW91c2UtbW92ZWQgZXZlbnRzLgotfQotCi1AZW5k
Ci0KLSNlbmRpZgotCi1AaW50ZXJmYWNlIE5TQXJyYXkgKFdlYkhUTUxWaWV3KQotLSAodm9pZClf
d2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmpl
Y3Q6KGlkKW9iamVjdDsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3Ci0KLSsg
KHZvaWQpaW5pdGlhbGl6ZQotewotICAgIFtOU0FwcCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRU
eXBlczpbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlczpbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxl
UGFzdGVib2FyZFR5cGVzXV07Ci0gICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0jaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRocmVh
ZChzZWxmKTsKLSNlbmRpZgotfQotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBbc2VsZiBzZXRGb2N1c1JpbmdUeXBl
Ok5TRm9jdXNSaW5nVHlwZU5vbmVdOwotICAgIAotICAgIC8vIE1ha2UgYWxsIGRyYXdpbmcgZ28g
dGhyb3VnaCB1cyBpbnN0ZWFkIG9mIHN1YnZpZXdzLgotICAgIFtzZWxmIF9zZXREcmF3c093bkRl
c2NlbmRhbnRzOllFU107Ci0gICAgCi0gICAgX3ByaXZhdGUgPSBbW1dlYkhUTUxWaWV3UHJpdmF0
ZSBhbGxvY10gaW5pdF07Ci0KLSAgICBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciA9IFtbV2Vi
UGx1Z2luQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEb2N1bWVudFZpZXc6c2VsZl07Ci0gICAg
Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIGlmIChXZWJD
b3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbV2ViSFRNTFZpZXcgY2xhc3Nd
LCBzZWxmKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgY2FuJ3QgYXNzZXJ0IHRoYXQg
Y2xvc2UgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgYmVjYXVzZQotICAgIC8vIHRoaXMgdmlldyBj
YW4gYmUgcmVtb3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2aWV3LCBldmVuIHRob3VnaAotICAgIC8vIGl0
IGNvdWxkIGJlIG5lZWRlZCBsYXRlciwgc28gY2xvc2UgaWYgbmVlZGVkLgotICAgIFtzZWxmIGNs
b3NlXTsKLSAgICBbX3ByaXZhdGUgcmVsZWFzZV07Ci0gICAgX3ByaXZhdGUgPSBuaWw7Ci0gICAg
W3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAgQVNTRVJUX01B
SU5fVEhSRUFEKCk7Ci0gICAgLy8gV2UgY2FuJ3QgYXNzZXJ0IHRoYXQgY2xvc2UgaGFzIGFscmVh
ZHkgYmVlbiBjYWxsZWQgYmVjYXVzZQotICAgIC8vIHRoaXMgdmlldyBjYW4gYmUgcmVtb3ZlZCBm
cm9tIGl0J3Mgc3VwZXJ2aWV3LCBldmVuIHRob3VnaAotICAgIC8vIGl0IGNvdWxkIGJlIG5lZWRl
ZCBsYXRlciwgc28gY2xvc2UgaWYgbmVlZGVkLgotICAgIFtzZWxmIGNsb3NlXTsKLSAgICBbc3Vw
ZXIgZmluYWxpemVdOwotfQotCi0vLyBSZXR1cm5zIFlFUyBpZiB0aGUgZGVsZWdhdGUgcmV0dXJu
cyBZRVMgKHNvIHdlIHNob3VsZCBkbyBubyBtb3JlIHdvcmspLgotLSAoQk9PTCljYWxsRGVsZWdh
dGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6KFNFTClzZWxlY3RvcgotewotICAgIEJPT0wg
Y2FsbGVyQWxyZWFkeUNhbGxlZERlbGVnYXRlID0gX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21t
YW5kQnlTZWxlY3RvciA9PSBzZWxlY3RvcjsKLSAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0Nv
bW1hbmRCeVNlbGVjdG9yID0gMDsKLSAgICBpZiAoY2FsbGVyQWxyZWFkeUNhbGxlZERlbGVnYXRl
KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJW
aWV3XTsKLSAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKLX0KLQotc3RhdGlj
IFN0cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKLXsKLSAgICAvLyBD
aGFuZ2UgYSBmZXcgY29tbWFuZCBuYW1lcyBpbnRvIG9uZXMgc3VwcG9ydGVkIGJ5IFdlYkNvcmU6
OkVkaXRvci4KLSAgICAvLyBJZiB0aGlzIGxpc3QgZ2V0cyB0b28gbG9uZyB3ZSBtaWdodCBkZWNp
ZGUgd2UgbmVlZCB0byB1c2UgYSBoYXNoIHRhYmxlLgotICAgIGlmIChzZWxlY3RvciA9PSBAc2Vs
ZWN0b3IoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yOikgfHwgc2VsZWN0b3IgPT0gQHNlbGVjdG9y
KGluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yOikpCi0gICAgICAgIHJldHVybiAiSW5z
ZXJ0TmV3bGluZSI7Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNlcnRUYWJJZ25v
cmluZ0ZpZWxkRWRpdG9yOikpCi0gICAgICAgIHJldHVybiAiSW5zZXJ0VGFiIjsKLSAgICBpZiAo
c2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VEb3duOikpCi0gICAgICAgIHJldHVybiAiTW92ZVBh
Z2VEb3duIjsKLSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VEb3duQW5kTW9kaWZ5
U2VsZWN0aW9uOikpCi0gICAgICAgIHJldHVybiAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0
aW9uIjsKLSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VVcDopKQotICAgICAgICBy
ZXR1cm4gIk1vdmVQYWdlVXAiOwotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uOikpCi0gICAgICAgIHJldHVybiAiTW92ZVBhZ2VVcEFuZE1vZGlm
eVNlbGVjdGlvbiI7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgotICAgIGNv
bnN0IGNoYXIqIHNlbGVjdG9yTmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKLSAgICBzaXpl
X3Qgc2VsZWN0b3JOYW1lTGVuZ3RoID0gc3RybGVuKHNlbGVjdG9yTmFtZSk7Ci0gICAgaWYgKHNl
bGVjdG9yTmFtZUxlbmd0aCA8IDIgfHwgc2VsZWN0b3JOYW1lW3NlbGVjdG9yTmFtZUxlbmd0aCAt
IDFdICE9ICc6JykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBTdHJpbmco
c2VsZWN0b3JOYW1lLCBzZWxlY3Rvck5hbWVMZW5ndGggLSAxKTsKLX0KLQotLSAoRWRpdG9yOjpD
b21tYW5kKWNvcmVDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0g
ICAgICAgIHJldHVybiBFZGl0b3I6OkNvbW1hbmQoKTsKLSAgICByZXR1cm4gY29yZUZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZUZvclNlbGVjdG9yKHNlbGVjdG9yKSk7Ci19Ci0K
LS0gKEVkaXRvcjo6Q29tbWFuZCljb3JlQ29tbWFuZEJ5TmFtZTooY29uc3QgY2hhciopbmFtZQot
ewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICgh
Y29yZUZyYW1lKQotICAgICAgICByZXR1cm4gRWRpdG9yOjpDb21tYW5kKCk7Ci0gICAgcmV0dXJu
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSk7Ci19Ci0KLS0gKHZvaWQpZXhlY3V0
ZUNvcmVDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgaWYgKFtzZWxmIGNh
bGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDpzZWxlY3Rvcl0pCi0gICAgICAg
IHJldHVybjsKLSAgICBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdLmV4ZWN1
dGUoKTsKLX0KLQotLSAodm9pZClleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6KGNvbnN0IGNoYXIq
KW5hbWUKLXsKLSAgICBbc2VsZiBjb3JlQ29tbWFuZEJ5TmFtZTpuYW1lXS5leGVjdXRlKCk7Ci19
Ci0KLS8vIFRoZXNlIGNvbW1hbmRzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIEVkaXRvciBvYmplY3Qg
aW4gV2ViQ29yZS4KLS8vIElkZWFsbHkgd2UnZCBkbyB0aGlzIGZvciBhbGwgZWRpdGluZyBjb21t
YW5kczsgbW9yZSBvZiB0aGUgY29kZQotLy8gc2hvdWxkIGJlIG1vdmVkIGZyb20gaGVyZSB0byB0
aGVyZSwgYW5kIG1vcmUgY29tbWFuZHMgc2hvdWxkIGJlCi0vLyBhZGRlZCB0byB0aGlzIGxpc3Qu
Ci0KLS8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgc2V0IHRoaW5ncyB1cCBzbyB0aGF0IGFsbCB0
aGVzZSBzaGFyZSBhIHNpbmdsZSBtZXRob2QgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24uCi0vLyBU
aGUgZnVuY3Rpb25zIGFyZSBpZGVudGljYWwuCi0KLSNkZWZpbmUgV0VCQ09SRV9DT01NQU5EKGNv
bW1hbmQpIC0gKHZvaWQpY29tbWFuZDooaWQpc2VuZGVyIHsgW3NlbGYgZXhlY3V0ZUNvcmVDb21t
YW5kQnlTZWxlY3RvcjpfY21kXTsgfQotCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25DZW50ZXIpCi1X
RUJDT1JFX0NPTU1BTkQoYWxpZ25KdXN0aWZpZWQpCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25MZWZ0
KQotV0VCQ09SRV9DT01NQU5EKGFsaWduUmlnaHQpCi1XRUJDT1JFX0NPTU1BTkQoY29weSkKLVdF
QkNPUkVfQ09NTUFORChjdXQpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlKQotV0VCQ09SRV9DT01N
QU5EKGRlbGV0ZUJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJkQnlEZWNv
bXBvc2luZ1ByZXZpb3VzQ2hhcmFjdGVyKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUZvcndhcmQp
Ci1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUpCi1XRUJDT1JFX0NPTU1B
TkQoZGVsZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVU
b0VuZE9mTGluZSkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0VuZE9mUGFyYWdyYXBoKQotV0VC
Q09SRV9DT01NQU5EKGRlbGV0ZVRvTWFyaykKLVdFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkQmFj
a3dhcmQpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlV29yZEZvcndhcmQpCi1XRUJDT1JFX0NPTU1B
TkQoaWdub3JlU3BlbGxpbmcpCi1XRUJDT1JFX0NPTU1BTkQoaW5kZW50KQotV0VCQ09SRV9DT01N
QU5EKGluc2VydEJhY2t0YWIpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TGluZUJyZWFrKQotV0VC
Q09SRV9DT01NQU5EKGluc2VydE5ld2xpbmUpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGlu
ZUlnbm9yaW5nRmllbGRFZGl0b3IpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yKQotV0VCQ09SRV9DT01NQU5EKGluc2VydFRhYikKLVdFQkNPUkVfQ09NTUFORChpbnNl
cnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yKQotV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGlu
Z0RpcmVjdGlvbkxlZnRUb1JpZ2h0KQotV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0Rp
cmVjdGlvbk5hdHVyYWwpCi1XRUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9u
UmlnaHRUb0xlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkKQotV0VCQ09SRV9DT01N
QU5EKG1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3Zl
RG93bikKLVdFQkNPUkVfQ09NTUFORChtb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNP
UkVfQ09NTUFORChtb3ZlRm9yd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlRm9yd2FyZEFuZE1v
ZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlTGVmdCkKLVdFQkNPUkVfQ09NTUFO
RChtb3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlUGFyYWdy
YXBoQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFn
cmFwaEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0
KQotV0VCQ09SRV9DT01NQU5EKG1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVf
Q09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50KQotV0VCQ09SRV9DT01NQU5EKG1vdmVU
b0JlZ2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQo
bW92ZVRvQmVnaW5uaW5nT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09m
TGluZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdP
ZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFu
ZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlNlbnRl
bmNlKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2VBbmRNb2RpZnlT
ZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZEb2N1bWVudCkKLVdFQkNPUkVf
Q09NTUFORChtb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9D
T01NQU5EKG1vdmVUb0VuZE9mTGluZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmVB
bmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGgp
Ci1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24p
Ci1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50ZW5jZSkKLVdFQkNPUkVfQ09NTUFORCht
b3ZlVG9FbmRPZlNlbnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0xlZnRFbmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZUFu
ZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9SaWdodEVuZE9mTGluZSkK
LVdFQkNPUkVfQ09NTUFORChtb3ZlVG9SaWdodEVuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikK
LVdFQkNPUkVfQ09NTUFORChtb3ZlVXApCi1XRUJDT1JFX0NPTU1BTkQobW92ZVVwQW5kTW9kaWZ5
U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkQmFja3dhcmQpCi1XRUJDT1JFX0NP
TU1BTkQobW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFO
RChtb3ZlV29yZEZvcndhcmQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkQW5kTW9k
aWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdCkKLVdFQkNPUkVfQ09N
TUFORChtb3ZlV29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92
ZVdvcmRSaWdodCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0
aW9uKQotV0VCQ09SRV9DT01NQU5EKG91dGRlbnQpCi1XRUJDT1JFX0NPTU1BTkQocGFnZURvd24p
Ci1XRUJDT1JFX0NPTU1BTkQocGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NP
TU1BTkQocGFnZVVwKQotV0VCQ09SRV9DT01NQU5EKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbikK
LVdFQkNPUkVfQ09NTUFORChzZWxlY3RBbGwpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0TGluZSkK
LVdFQkNPUkVfQ09NTUFORChzZWxlY3RQYXJhZ3JhcGgpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0
U2VudGVuY2UpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0VG9NYXJrKQotV0VCQ09SRV9DT01NQU5E
KHNlbGVjdFdvcmQpCi1XRUJDT1JFX0NPTU1BTkQoc2V0TWFyaykKLVdFQkNPUkVfQ09NTUFORChz
dWJzY3JpcHQpCi1XRUJDT1JFX0NPTU1BTkQoc3VwZXJzY3JpcHQpCi1XRUJDT1JFX0NPTU1BTkQo
c3dhcFdpdGhNYXJrKQotV0VCQ09SRV9DT01NQU5EKHRyYW5zcG9zZSkKLVdFQkNPUkVfQ09NTUFO
RCh1bmRlcmxpbmUpCi1XRUJDT1JFX0NPTU1BTkQodW5zY3JpcHQpCi1XRUJDT1JFX0NPTU1BTkQo
eWFuaykKLVdFQkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0KQotCi0jdW5kZWYgV0VCQ09SRV9D
T01NQU5ECi0KLSNkZWZpbmUgQ09NTUFORF9QUk9MT0dVRSBpZiAoW3NlbGYgY2FsbERlbGVnYXRl
RG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOl9jbWRdKSByZXR1cm47Ci0KLS0gKElCQWN0aW9u
KXRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9Q
Uk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkgewotICAgICAgICBOU0Jl
ZXAoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtOU1Bhc3RlYm9hcmQgX3dlYl9z
ZXRGaW5kUGFzdGVib2FyZFN0cmluZzpbc2VsZiBzZWxlY3RlZFN0cmluZ10gd2l0aE93bmVyOnNl
bGZdOwotfQotCi0tIChCT09MKXdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkIHR5cGVzOihOU0FycmF5ICopdHlwZXMKLXsKLSAgICBbcGFzdGVib2Fy
ZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3NlbGYgX3RvcEhUTUxWaWV3XV07Ci0gICAgW3Nl
bGYgd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpw
YXN0ZWJvYXJkXTsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKXJlYWRTZWxlY3Rpb25G
cm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAg
ICAgICByZXR1cm4gTk87Ci0gICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVu
dFJpY2hseUVkaXRhYmxlKCkpCi0gICAgICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOnBh
c3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6WUVTXTsKLSAgICBlbHNlCi0gICAgICAgIFtzZWxmIF9w
YXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0gICAgcmV0dXJuIFlF
UzsKLX0KLQotLSAoaWQpdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTooTlNTdHJpbmcgKilzZW5k
VHlwZSByZXR1cm5UeXBlOihOU1N0cmluZyAqKXJldHVyblR5cGUKLXsKLSAgICBCT09MIGlzU2Vu
ZFR5cGVPSyA9ICFzZW5kVHlwZSB8fCAoW1tzZWxmIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlv
bl0gY29udGFpbnNPYmplY3Q6c2VuZFR5cGVdICYmIFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsKLSAg
ICBCT09MIGlzUmV0dXJuVHlwZU9LID0gIXJldHVyblR5cGUgfHwgKFtbW3NlbGYgY2xhc3NdIF9p
bnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzXSBjb250YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBb
c2VsZiBfaXNFZGl0YWJsZV0pOwotICAgIGlmIChpc1NlbmRUeXBlT0sgJiYgaXNSZXR1cm5UeXBl
T0spCi0gICAgICAgIHJldHVybiBzZWxmOwotICAgIHJldHVybiBbW3NlbGYgbmV4dFJlc3BvbmRl
cl0gdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpzZW5kVHlwZSByZXR1cm5UeXBlOnJldHVyblR5
cGVdOwotfQotCi0vLyBqdW1wVG9TZWxlY3Rpb24gaXMgdGhlIG9sZCBuYW1lIGZvciB3aGF0IEFw
cEtpdCBub3cgY2FsbHMgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYS4gU2FmYXJpCi0vLyB3
YXMgdXNpbmcgdGhlIG9sZCBqdW1wVG9TZWxlY3Rpb24gc2VsZWN0b3IgaW4gaXRzIG1lbnUuIE5l
d2VyIHZlcnNpb25zIG9mIFNhZmFyaSB3aWxsIHVzZSB0aGUKLS8vIHNlbGVjdG9yIGNlbnRlclNl
bGVjdGlvbkluVmlzaWJsZUFyZWEuIFdlJ2xsIGxlYXZlIHRoZSBvbGQgc2VsZWN0b3IgaW4gcGxh
Y2UgZm9yIHR3byByZWFzb25zOgotLy8gKDEpIENvbXBhdGliaWxpdHkgYmV0d2VlbiBvbGRlciBT
YWZhcmkgYW5kIG5ld2VyIFdlYktpdDsgKDIpIG90aGVyIFdlYktpdC1iYXNlZCBhcHBsaWNhdGlv
bnMKLS8vIG1pZ2h0IGJlIHVzaW5nIHRoZSBzZWxlY3RvciwgYW5kIHdlIGRvbid0IHdhbnQgdG8g
YnJlYWsgdGhlbS4KLS0gKHZvaWQpanVtcFRvU2VsZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBD
T01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOwotfQotCi0tIChOU0NlbGxTdGF0ZVZhbHVlKXNlbGVj
dGlvbkhhc1N0eWxlOihDU1NTdHlsZURlY2xhcmF0aW9uKilzdHlsZQotewotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAg
ICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKLSAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+ZWRpdG9y
KCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlKSk7Ci19Ci0KLS0gKEJPT0wpdmFsaWRhdGVVc2Vy
SW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFj
ZUl0ZW0+KWl0ZW0KLXsKLSAgICBTRUwgYWN0aW9uID0gW2l0ZW0gYWN0aW9uXTsKLSAgICBSZWZQ
dHI8RnJhbWU+IGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLQotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IGZyYW1l
LT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGlmIChkb2MtPmlzUGx1Z2luRG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgaWYgKGRvYy0+aXNJbWFnZURvY3VtZW50KCkp
IHsgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNvcHk6
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5pc0NvbXBsZXRlKCk7
Ci0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWN0
aW9uID09IEBzZWxlY3RvcihjaGFuZ2VTcGVsbGluZzopCi0gICAgICAgICAgICB8fCBhY3Rpb24g
PT0gQHNlbGVjdG9yKF9jaGFuZ2VTcGVsbGluZ0Zyb21NZW51OikKLSAgICAgICAgICAgIHx8IGFj
dGlvbiA9PSBAc2VsZWN0b3IoY2hlY2tTcGVsbGluZzopCi0gICAgICAgICAgICB8fCBhY3Rpb24g
PT0gQHNlbGVjdG9yKGNvbXBsZXRlOikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IocGFzdGVGb250OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0KLSAgICBp
ZiAoYWN0aW9uID09IEBzZWxlY3RvcihzaG93R3Vlc3NQYW5lbDopKSB7Ci0jaWZuZGVmIEJVSUxE
SU5HX09OX1RJR0VSCi0gICAgICAgIC8vIE1hdGNoIE9TIFggQXBwS2l0IGJlaGF2aW9yIGZvciBw
b3N0LVRpZ2VyLiBEb24ndCBjaGFuZ2UgVGlnZXIgYmVoYXZpb3IuCi0gICAgICAgIE5TTWVudUl0
ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVt
IGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgQk9PTCBw
YW5lbFNob3dpbmcgPSBbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHNwZWxs
aW5nUGFuZWxdIGlzVmlzaWJsZV07Ci0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6cGFu
ZWxTaG93aW5nCi0gICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkhpZGUgU3BlbGxpbmcgYW5k
IEdyYW1tYXIiLCAibWVudSBpdGVtIHRpdGxlIikKLSAgICAgICAgICAgICAgICA6IFVJX1NUUklO
RygiU2hvdyBTcGVsbGluZyBhbmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKV07Ci0gICAg
ICAgIH0KLSNlbmRpZgotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlv
bjopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0OikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
bWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6KSkgewotICAgICAgICBOU1dyaXRp
bmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbjsKLQotICAgICAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3RvcihjaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjopKSB7Ci0gICAgICAgICAgICB3cml0
aW5nRGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8TlNXcml0aW5nRGlyZWN0aW9uPihbaXRlbSB0YWdd
KTsKLSAgICAgICAgICAgIGlmICh3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlv
bk5hdHVyYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICB9IGVsc2UgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6
KSkKLSAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IE5T
V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwotCi0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJ
dGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9m
Q2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxl
RGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgp
OwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eSgiZGlyZWN0aW9uIiwgd3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rp
b25MZWZ0VG9SaWdodCA/ICJMVFIiIDogIlJUTCIsIGVjKTsKLSAgICAgICAgICAgIFttZW51SXRl
bSBzZXRTdGF0ZTpmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgp
KV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0K
LSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25OYXR1
cmFsOikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0
ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFz
c11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOk5TT2ZmU3RhdGVdOwotICAgICAg
ICByZXR1cm4gTk87Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xl
QmFzZVdyaXRpbmdEaXJlY3Rpb246KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9
IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNz
OltOU01lbnVJdGVtIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xh
cmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoImRpcmVjdGlvbiIsICJSVEwiLCBlYyk7Ci0gICAgICAgICAgICAvLyBUYWtlIGNvbnRyb2wg
b2YgdGhlIHRpdGxlIG9mIHRoZSBtZW51IGl0ZW0gaW5zdGVhZCBvZiBqdXN0IGNoZWNraW5nL3Vu
Y2hlY2tpbmcgaXQgYmVjYXVzZQotICAgICAgICAgICAgLy8gYSBjaGVjayB3b3VsZCBiZSBhbWJp
Z3VvdXMuCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6ZnJhbWUtPmVkaXRvcigpLT5z
ZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkKLSAgICAgICAgICAgICAgICA/IFVJX1NUUklO
RygiTGVmdCB0byBSaWdodCIsICJMZWZ0IHRvIFJpZ2h0IGNvbnRleHQgbWVudSBpdGVtIikKLSAg
ICAgICAgICAgICAgICA6IFVJX1NUUklORygiUmlnaHQgdG8gTGVmdCIsICJSaWdodCB0byBMZWZ0
IGNvbnRleHQgbWVudSBpdGVtIildOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbc2VsZiBf
Y2FuRWRpdF07Ci0gICAgfSAKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFu
Z2VBdHRyaWJ1dGVzOikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdl
Q29sb3I6KSAgICAgICAgCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5n
ZUZvbnQ6KSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKLSAgICAKLSAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjYXBpdGFsaXplV29yZDopCi0gICAgICAgICAgICAg
ICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGxvd2VyY2FzZVdvcmQ6KQotICAgICAgICAgICAgICAg
fHwgYWN0aW9uID09IEBzZWxlY3Rvcih1cHBlcmNhc2VXb3JkOikpCi0gICAgICAgIHJldHVybiBb
c2VsZiBfaGFzU2VsZWN0aW9uXSAmJiBbc2VsZiBfaXNFZGl0YWJsZV07Ci0KLSAgICBpZiAoYWN0
aW9uID09IEBzZWxlY3RvcihjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOikKLSAgICAgICAg
ICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoanVtcFRvU2VsZWN0aW9uOikKLSAgICAgICAg
ICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY29weUZvbnQ6KSkKLSAgICAgICAgcmV0dXJu
IFtzZWxmIF9oYXNTZWxlY3Rpb25dIHx8IChbc2VsZiBfaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2hh
c0luc2VydGlvblBvaW50XSk7Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hh
bmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6KSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBfd2Vi
Vmlld10gaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2NhbkVkaXRSaWNobHldOwotICAgIAotICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKF9pZ25vcmVTcGVsbGluZ0Zyb21NZW51OikKLSAgICAgICAg
ICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoX2xlYXJuU3BlbGxpbmdGcm9tTWVudTopCi0gICAg
ICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlv
bjopKQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07Ci0gICAgCi0gICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGU6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3Rl
QXNQbGFpblRleHQ6KSkKLSAgICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCkt
PmNhbkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkpOwotICAgIAot
ICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlQXNSaWNoVGV4dDopKQotICAgICAgICBy
ZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxQYXN0ZSgpCi0gICAgICAg
ICAgICB8fCAoZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkpOwotICAgIAotICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHBlcmZvcm1GaW5kUGFuZWxBY3Rpb246KSkKLSAgICAgICAgcmV0dXJuIE5POwot
ICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9sb29rVXBJbkRpY3Rpb25hcnlGcm9t
TWVudTopKQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07Ci0gICAgCi0jaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xl
R3JhbW1hckNoZWNraW5nOikpIHsKLSAgICAgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBp
cyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2Ug
bXVzdCB2YWxpZGF0ZSAKLSAgICAgICAgLy8gdGhlIHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3ZSBp
bXBsZW1lbnQgaXQgaGVyZSwgYW5kIHdlIG11c3QgaW1wbGVtZW50IGl0IGhlcmUgYmVjYXVzZSB0
aGUgQXBwS2l0IAotICAgICAgICAvLyBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgot
ICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAg
ICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAg
ICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
XSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0K
LSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Iob3JkZXJGcm9u
dFN1YnN0aXR1dGlvbnNQYW5lbDopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgQk9PTCBwYW5lbFNob3dpbmcgPSBb
W1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHN1YnN0aXR1dGlvbnNQYW5lbF0g
aXNWaXNpYmxlXTsKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRUaXRsZTpwYW5lbFNob3dpbmcK
LSAgICAgICAgICAgICAgICA/IFVJX1NUUklORygiSGlkZSBTdWJzdGl0dXRpb25zIiwgIm1lbnUg
aXRlbSB0aXRsZSIpCi0gICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlNob3cgU3Vic3RpdHV0
aW9ucyIsICJtZW51IGl0ZW0gdGl0bGUiKV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtz
ZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0
aGUgYm90dGxlbmVjayBmb3IgdGhpcyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCi0gICAg
Ly8gdGhlIHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3ZSBpbXBsZW1lbnQgaXQgaGVyZSwgYW5kIHdl
IG11c3QgaW1wbGVtZW50IGl0IGhlcmUgYmVjYXVzZSB0aGUgQXBwS2l0IAotICAgIC8vIGNvZGUg
Y2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
dG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRl
bSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNs
YXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6
W3NlbGYgc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVd
OwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjopKSB7Ci0gICAg
ICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBp
ZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAg
ICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9u
RW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxm
IF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0
b21hdGljTGlua0RldGVjdGlvbjopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2Vs
ZiBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3Rh
dGVdOwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0
aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOikpIHsKLSAg
ICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAg
IGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAg
ICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2Vs
ZiBfY2FuRWRpdF07Ci0gICAgfQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1
dG9tYXRpY1RleHRSZXBsYWNlbWVudDopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVt
ID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xh
c3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpb
c2VsZiBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNP
ZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjop
KSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwot
ICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkK
LSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1NwZWxsaW5n
Q29ycmVjdGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJl
dHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgRWRpdG9yOjpD
b21tYW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6YWN0aW9uXTsKLSAg
ICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJ
dGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9m
Q2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0
ZTpraXQoY29tbWFuZC5zdGF0ZSgpKV07Ci0gICAgICAgIHJldHVybiBjb21tYW5kLmlzRW5hYmxl
ZCgpOwotICAgIH0KLQotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpdmFsaWRhdGVVc2Vy
SW50ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KLXsK
LSAgICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZHVyaW5nIHRlYXJkb3duIHdoZW4gX3dlYlZpZXcg
aXMgbmlsLiBSZXR1cm4gTk8gd2hlbiB0aGlzIGhhcHBlbnMsIGJlY2F1c2UgQ2FsbFVJRGVsZWdh
dGVSZXR1cm5pbmdCb29sZWFuCi0gICAgLy8gYXNzdW1lcyB0aGUgV2ViVklldyBpcyBub24tbmls
LgotICAgIGlmICghW3NlbGYgX3dlYlZpZXddKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgQk9P
TCByZXN1bHQgPSBbc2VsZiB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRl
Oml0ZW1dOwotICAgIHJldHVybiBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4ocmVzdWx0
LCBbc2VsZiBfd2ViVmlld10sIEBzZWxlY3Rvcih3ZWJWaWV3OnZhbGlkYXRlVXNlckludGVyZmFj
ZUl0ZW06ZGVmYXVsdFZhbGlkYXRpb246KSwgaXRlbSwgcmVzdWx0KTsKLX0KLQotLSAoQk9PTClh
Y2NlcHRzRmlyc3RSZXNwb25kZXIKLXsKLSAgICAvLyBEb24ndCBhY2NlcHQgZmlyc3QgcmVzcG9u
ZGVyIHdoZW4gd2UgZmlyc3QgY2xpY2sgb24gdGhpcyB2aWV3LgotICAgIC8vIFdlIGhhdmUgdG8g
cGFzcyB0aGUgZXZlbnQgZG93biB0aHJvdWdoIFdlYkNvcmUgZmlyc3QgdG8gYmUgc3VyZSB3ZSBk
b24ndCBoaXQgYSBzdWJ2aWV3LgotICAgIC8vIERvIGFjY2VwdCBmaXJzdCByZXNwb25kZXIgYXQg
YW55IG90aGVyIHRpbWUsIGZvciBleGFtcGxlIGZyb20ga2V5Ym9hcmQgZXZlbnRzLAotICAgIC8v
IG9yIGZyb20gY2FsbHMgYmFjayBmcm9tIFdlYkNvcmUgb25jZSB3ZSBiZWdpbiBtb3VzZS1kb3du
IGV2ZW50IGhhbmRsaW5nLgotICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVu
dF07Ci0gICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24KLSAgICAgICAgICAg
ICYmICFfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudAotICAgICAgICAgICAgJiYgTlNQ
b2ludEluUmVjdChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtzZWxmIGNvbnZlcnRSZWN0Oltz
ZWxmIHZpc2libGVSZWN0XSB0b1ZpZXc6bmlsXSkpIHsKLSAgICAgICAgcmV0dXJuIE5POwotICAg
IH0KLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKW1haW50YWluc0luYWN0aXZlU2VsZWN0
aW9uCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgaGVscHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhl
IFdlYkhUTUxWaWV3IHNob3VsZCBtYWludGFpbgotICAgIC8vIGFuIGluYWN0aXZlIHNlbGVjdGlv
biB3aGVuIGl0J3Mgbm90IGZpcnN0IHJlc3BvbmRlci4KLSAgICAvLyBUcmFkaXRpb25hbGx5LCB0
aGVzZSB2aWV3cyBoYXZlIG5vdCBtYWludGFpbmVkIHN1Y2ggc2VsZWN0aW9ucywKLSAgICAvLyBj
bGVhcmluZyB0aGVtIHdoZW4gdGhlIHZpZXcgd2FzIG5vdCBmaXJzdCByZXNwb25kZXIuIEhvd2V2
ZXIsCi0gICAgLy8gdG8gZml4IGJ1Z3MgbGlrZSB0aGlzIG9uZToKLSAgICAvLyA8cmRhcjovL3By
b2JsZW0vMzY3MjA4OD46ICJFZGl0YWJsZSBXZWJWaWV3cyBzaG91bGQgbWFpbnRhaW4gYSBzZWxl
Y3Rpb24gZXZlbiAKLSAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZXkn
cmUgbm90IGZpcnN0UmVzcG9uZGVyIgotICAgIC8vIGl0IHdhcyBkZWNpZGVkIHRvIGFkZCBhIHN3
aXRjaCB0byBhY3QgbW9yZSBsaWtlIGFuIE5TVGV4dFZpZXcuCi0KLSAgICBpZiAoW1tzZWxmIF93
ZWJWaWV3XSBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pCi0gICAgICAgIHJldHVybiBZRVM7
Ci0KLSAgICAvLyBQcmVkaWN0IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBsb3NpbmcgZmlyc3QgcmVz
cG9uZGVyIHN0YXR1cyBvbmx5IHRvCi0gICAgLy8gZ2FpbiBpdCBiYWNrIGFnYWluLiBXYW50IHRv
IGtlZXAgdGhlIHNlbGVjdGlvbiBpbiB0aGF0IGNhc2UuCi0gICAgaWQgbmV4dFJlc3BvbmRlciA9
IFtbc2VsZiB3aW5kb3ddIF9uZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nXTsKLSAgICBp
ZiAoW25leHRSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pIHsK
LSAgICAgICAgaWQgY29udGVudFZpZXcgPSBbbmV4dFJlc3BvbmRlciBjb250ZW50Vmlld107Ci0g
ICAgICAgIGlmIChjb250ZW50VmlldykKLSAgICAgICAgICAgIG5leHRSZXNwb25kZXIgPSBjb250
ZW50VmlldzsKLSAgICB9Ci0gICAgaWYgKFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05T
Q2xpcFZpZXcgY2xhc3NdXSkgewotICAgICAgICBpZCBkb2N1bWVudFZpZXcgPSBbbmV4dFJlc3Bv
bmRlciBkb2N1bWVudFZpZXddOwotICAgICAgICBpZiAoZG9jdW1lbnRWaWV3KQotICAgICAgICAg
ICAgbmV4dFJlc3BvbmRlciA9IGRvY3VtZW50VmlldzsKLSAgICB9Ci0gICAgaWYgKG5leHRSZXNw
b25kZXIgPT0gc2VsZikKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9
IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
OwotICAgIGJvb2wgbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3ID0gW25leHRSZXNwb25kZXIgaXNL
aW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0KLSAgICAgICAgJiYgW25leHRSZXNwb25kZXIgaXNE
ZXNjZW5kYW50T2Y6W1tbc2VsZiBfd2ViVmlld10gbWFpbkZyYW1lXSBmcmFtZVZpZXddXTsKLQot
ICAgIHJldHVybiBzZWxlY3Rpb25Jc0VkaXRhYmxlICYmIG5leHRSZXNwb25kZXJJc0luV2ViVmll
dzsKLX0KLQotLSAodm9pZClhZGRNb3VzZU1vdmVkT2JzZXJ2ZXIKLXsKLSAgICBpZiAoIV9wcml2
YXRlLT5kYXRhU291cmNlIHx8ICFbc2VsZiBfaXNUb3BIVE1MVmlld10gfHwgX3ByaXZhdGUtPm9i
c2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBVbmxlc3MgdGhlIERhc2hib2FyZCBhc2tzIHVzIHRvIGRvIHRoaXMgZm9yIGFsbCB3aW5kb3dz
LCBrZWVwIGFuIG9ic2VydmVyIGdvaW5nIG9ubHkgZm9yIHRoZSBrZXkgd2luZG93LgotICAgIGlm
ICghKFtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSAKLSNpZiBFTkFCTEUoREFTSEJPQVJEX1NV
UFBPUlQpCi0gICAgICAgICAgICB8fCBbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlv
cjpXZWJEYXNoYm9hcmRCZWhhdmlvckFsd2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10K
LSNlbmRpZgotICAgICAgICApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVj
dG9yKG1vdXNlTW92ZWROb3RpZmljYXRpb246KQotICAgICAgICBuYW1lOldLTW91c2VNb3ZlZE5v
dGlmaWNhdGlvbigpIG9iamVjdDpuaWxdOwotICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdl
ZF07Ci0gICAgX3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zID0gdHJ1
ZTsKLX0KLQotLSAodm9pZClyZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXIKLXsKLSNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCi0gICAgLy8gRG9uJ3QgcmVtb3ZlIHRoZSBvYnNlcnZlciBpZiB3
ZSdyZSBydW5uaW5nIHRoZSBEYXNoYm9hcmQuCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rh
c2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRz
VG9BbGxXaW5kb3dzXSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBbW3NlbGYgX3dl
YlZpZXddIF9tb3VzZURpZE1vdmVPdmVyRWxlbWVudDpuaWwgbW9kaWZpZXJGbGFnczowXTsKLSAg
ICBbc2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKLX0KLQot
LSAodm9pZClhZGRTdXBlcnZpZXdPYnNlcnZlcnMKLXsKLSAgICBpZiAoX3ByaXZhdGUtPm9ic2Vy
dmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVmll
dyAqc3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3XTsKLSAgICBpZiAoIXN1cGVydmlldyB8fCAh
W3NlbGYgd2luZG93XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TTm90aWZpY2F0aW9u
Q2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVs
dENlbnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVj
dG9yOkBzZWxlY3RvcihfZnJhbWVPckJvdW5kc0NoYW5nZWQpIG5hbWU6TlNWaWV3RnJhbWVEaWRD
aGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107Ci0gICAgW25vdGlmaWNhdGlvbkNl
bnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZnJhbWVPckJvdW5kc0No
YW5nZWQpIG5hbWU6TlNWaWV3Qm91bmRzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBl
cnZpZXddOwotICAgIAotICAgIC8vIEluIGFkZGl0aW9uIHRvIHJlZ2lzdGVyaW5nIGZvciBmcmFt
ZS9ib3VuZHMgY2hhbmdlIG5vdGlmaWNhdGlvbnMsIGNhbGwgLV9mcmFtZU9yQm91bmRzQ2hhbmdl
ZC4KLSAgICAvLyBJdCB3aWxsIGNoZWNrIHRoZSBjdXJyZW50IHNjcm9sbCBhZ2FpbnN0IHRoZSBw
cmV2aW91cyBsYXlvdXQncyBzY3JvbGwuICBXZSBuZWVkIHRvCi0gICAgLy8gZG8gdGhpcyBoZXJl
IHRvIGNhdGNoIHRoZSBjYXNlIHdoZXJlIHRoZSBXZWJWaWV3IGlzIGxhaWQgb3V0IGF0IG9uZSBz
aXplLCByZW1vdmVkIGZyb20gaXRzCi0gICAgLy8gd2luZG93LCByZXNpemVkLCBhbmQgaW5zZXJ0
ZWQgaW50byBhbm90aGVyIHdpbmRvdy4gIE91ciBmcmFtZS9ib3VuZHMgY2hhbmdlZCBub3RpZmlj
YXRpb25zCi0gICAgLy8gd2lsbCBub3QgYmUgc2VudCBpbiB0aGF0IHNpdHVhdGlvbiwgc2luY2Ug
d2Ugb25seSB3YXRjaCBmb3IgY2hhbmdlcyB3aGlsZSBpbiB0aGUgdmlldyBoaWVyYXJjaHkuCi0g
ICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKLSAgICAKLSAgICBfcHJpdmF0ZS0+b2Jz
ZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucyA9IHRydWU7Ci19Ci0KLS0gKHZvaWQpYWRkV2lu
ZG93T2JzZXJ2ZXJzCi17Ci0gICAgaWYgKF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmlj
YXRpb25zKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93RGlkQmVjb21lS2V5OikgbmFtZTpO
U1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZp
Y2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0Rp
ZFJlc2lnbktleTopIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0
Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3Rvcih3aW5kb3dXaWxsQ2xvc2U6KSBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZp
Y2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbE9yZGVyT25TY3JlZW46KSBuYW1l
OldLV2luZG93V2lsbE9yZGVyT25TY3JlZW5Ob3RpZmljYXRpb24oKSBvYmplY3Q6d2luZG93XTsK
LSAgICAKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucyA9IHRydWU7
Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9TdXBlcnZpZXc6KE5TVmlldyAqKW5ld1N1cGVy
dmlldwotewotICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwotfQotCi0tICh2
b2lkKXZpZXdEaWRNb3ZlVG9TdXBlcnZpZXcKLXsKLSAgICBpZiAoW3NlbGYgc3VwZXJ2aWV3XSAh
PSBuaWwpCi0gICAgICAgIFtzZWxmIGFkZFN1cGVydmlld09ic2VydmVyc107Ci19Ci0KLXN0YXRp
YyB2b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lckNhbGxiYWNrKENGUnVuTG9v
cFRpbWVyUmVmIHRpbWVyLCB2b2lkICppbmZvKQotewotICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0g
KFdlYkhUTUxWaWV3ICopaW5mbzsKLSAgICBbdmlldyBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0
YXRlXTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5k
b3cKLXsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBhcmVuJ3QgaW5pdGlhbGl6ZWQu
ICBUaGlzIGhhcHBlbnMKLSAgICAvLyB3aGVuIGRlY29kaW5nIGEgV2ViVmlldy4gIFdoZW4gV2Vi
Vmlld3MgYXJlIGRlY29kZWQgdGhlaXIgc3Vidmlld3MKLSAgICAvLyBhcmUgY3JlYXRlZCBieSBp
bml0V2l0aENvZGVyOiBhbmQgc28gd29uJ3QgYmUgbm9ybWFsbHkKLSAgICAvLyBpbml0aWFsaXpl
ZC4gIFRoZSBzdHViIHZpZXdzIGFyZSBkaXNjYXJkZWQgYnkgV2ViVmlldy4KLSAgICBpZiAoIV9w
cml2YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogU29tZSBvZiB0aGVzZSBj
YWxscyBtYXkgbm90IHdvcmsgYmVjYXVzZSB0aGlzIHZpZXcgbWF5IGJlIGFscmVhZHkgcmVtb3Zl
ZCBmcm9tIGl0J3Mgc3VwZXJ2aWV3LgotICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2
ZXJVbmNvbmRpdGlvbmFsbHldOwotICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNlcnZlcnNdOwot
ICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwotICAgIFtzZWxmIF9jYW5jZWxV
cGRhdGVNb3VzZW92ZXJUaW1lcl07Ci0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZVRpbWVyXTsKLSAgICAKLSAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIHN0
b3BBbGxQbHVnaW5zXTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Ci17Ci0gICAg
Ly8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgYXJlbid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBw
ZW5zCi0gICAgLy8gd2hlbiBkZWNvZGluZyBhIFdlYlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBk
ZWNvZGVkIHRoZWlyIHN1YnZpZXdzCi0gICAgLy8gYXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2Rl
cjogYW5kIHNvIHdvbid0IGJlIG5vcm1hbGx5Ci0gICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1
YiB2aWV3cyBhcmUgZGlzY2FyZGVkIGJ5IFdlYlZpZXcuCi0gICAgaWYgKCFfcHJpdmF0ZSB8fCBf
cHJpdmF0ZS0+Y2xvc2VkKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIFtzZWxmIF9z
dG9wQXV0b3Njcm9sbFRpbWVyXTsKLSAgICBpZiAoW3NlbGYgd2luZG93XSkgewotICAgICAgICBf
cHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5v
cmlnaW47Ci0gICAgICAgIFtzZWxmIGFkZFdpbmRvd09ic2VydmVyc107Ci0gICAgICAgIFtzZWxm
IGFkZFN1cGVydmlld09ic2VydmVyc107Ci0gICAgICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNl
cnZlcl07Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB1cGRhdGUsIHJhdGhlciB0aGFuIG1h
a2luZyB0aGUgY2FsbCByaWdodCBub3cuCi0gICAgICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCBw
bGFjaW5nIHRoZSBjYXJldCBpbiB0aGUganVzdC1pbnN0YWxsZWQgdmlldyByZXF1aXJlcwotICAg
ICAgICAvLyB0aGUgSFRNTC9YTUwgZG9jdW1lbnQgdG8gYmUgYXZhaWxhYmxlIG9uIHRoZSBXZWJD
b3JlIHNpZGUsIGJ1dCBpdCBpcyBub3QKLSAgICAgICAgLy8gYXQgdGhlIHRpbWUgdGhpcyBjb2Rl
IGlzIHJ1bm5pbmcuIEhvd2V2ZXIsIGl0IHdpbGwgYmUgdGhlcmUgb24gdGhlIG5leHQKLSAgICAg
ICAgLy8gY3Jhbmsgb2YgdGhlIHJ1biBsb29wLiBEb2luZyB0aGlzIGhlbHBzIHRvIG1ha2UgYSBi
bGlua2luZyBjYXJldCBhcHBlYXIgCi0gICAgICAgIC8vIGluIGEgbmV3LCBlbXB0eSB3aW5kb3cg
ImF1dG9tYXRpYyIuCi0gICAgICAgIGlmICghX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3Rp
dmVTdGF0ZVRpbWVyKSB7Ci0gICAgICAgICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4
dCA9IHsgMCwgc2VsZiwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICAgICAgICAgICAgX3ByaXZhdGUt
PnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUo
TlVMTCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCksIDAsIDAsIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF91
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lckNhbGxiYWNrLCAmY29udGV4dCk7Ci0gICAg
ICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRl
LT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lciwga0NGUnVuTG9vcERlZmF1bHRNb2Rl
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVy
XSBzdGFydEFsbFBsdWdpbnNdOwotCi0gICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRp
b24gPSBOU1plcm9Qb2ludDsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0
V2luZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cKLXsKLSAgICBbW3NlbGYgc3Vidmlld3NdIF93
ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3V2lsbE1vdmVU
b0hvc3RXaW5kb3c6KSB3aXRoT2JqZWN0Omhvc3RXaW5kb3ddOwotfQotCi0tICh2b2lkKXZpZXdE
aWRNb3ZlVG9Ib3N0V2luZG93Ci17Ci0gICAgW1tzZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVn
aW5WaWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iodmlld0RpZE1vdmVUb0hvc3RXaW5kb3cp
IHdpdGhPYmplY3Q6bmlsXTsKLX0KLQotCi0tICh2b2lkKWFkZFN1YnZpZXc6KE5TVmlldyAqKXZp
ZXcKLXsKLSAgICBbc3VwZXIgYWRkU3Vidmlldzp2aWV3XTsKLQotICAgIGlmIChbV2ViUGx1Z2lu
Q29udHJvbGxlciBpc1BsdWdJblZpZXc6dmlld10pCi0gICAgICAgIFtbc2VsZiBfcGx1Z2luQ29u
dHJvbGxlcl0gYWRkUGx1Z2luOnZpZXddOwotfQotCi0tICh2b2lkKXdpbGxSZW1vdmVTdWJ2aWV3
OihOU1ZpZXcgKilzdWJ2aWV3Ci17Ci0gICAgaWYgKFtXZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1
Z0luVmlldzpzdWJ2aWV3XSkKLSAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0
cm95UGx1Z2luOnN1YnZpZXddOwotCi0gICAgW3N1cGVyIHdpbGxSZW1vdmVTdWJ2aWV3OnN1YnZp
ZXddOwotfQotCi0tICh2b2lkKXJlYXBwbHlTdHlsZXMKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5u
ZWVkc1RvQXBwbHlTdHlsZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSNpZmRlZiBMT0dfVElN
RVMKLSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSNlbmRp
ZgotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0g
ICAgICAgIGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpCi0gICAg
ICAgICAgICBjb3JlVmlldy0+c2V0TWVkaWFUeXBlKF9wcml2YXRlLT5wcmludGluZyA/ICJwcmlu
dCIgOiAic2NyZWVuIik7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJh
bWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudC0+c2V0UHJpbnRpbmcoX3ByaXZh
dGUtPnByaW50aW5nKTsKLSAgICAgICAgY29yZUZyYW1lLT5yZWFwcGx5U3R5bGVzKCk7Ci0gICAg
fQotICAgIAotI2lmZGVmIExPR19USU1FUyAgICAgICAgCi0gICAgZG91YmxlIHRoaXNUaW1lID0g
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICBMT0coVGltaW5nLCAiJXMg
YXBwbHkgc3R5bGUgc2Vjb25kcyA9ICVmIiwgW3NlbGYgVVJMXSwgdGhpc1RpbWUpOwotI2VuZGlm
Ci0KLSAgICBfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzID0gTk87Ci19Ci0KLS8vIERvIGEg
bGF5b3V0LCBidXQgc2V0IHVwIGEgbmV3IGZpeGVkIHdpZHRoIGZvciB0aGUgcHVycG9zZXMgb2Yg
ZG9pbmcgcHJpbnRpbmcgbGF5b3V0LgotLy8gbWluUGFnZVdpZHRoPT0wIGltcGxpZXMgYSBub24t
cHJpbnRpbmcgbGF5b3V0Ci0tICh2b2lkKWxheW91dFRvTWluaW11bVBhZ2VXaWR0aDooZmxvYXQp
bWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3Rp
bmdWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZQotewotICAgIFtzZWxmIHJlYXBwbHlTdHls
ZXNdOwotICAgIAotICAgIGlmICghW3NlbGYgX25lZWRzTGF5b3V0XSkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWZkZWYgTE9HX1RJTUVTICAgICAgICAKLSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29s
dXRlVGltZUdldEN1cnJlbnQoKTsKLSNlbmRpZgotCi0gICAgTE9HKFZpZXcsICIlQCBkb2luZyBs
YXlvdXQiLCBzZWxmKTsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRnJh
bWVWaWV3KiBjb3JlVmlldyA9IGNvcmVGcmFtZS0+dmlldygpKSB7Ci0gICAgICAgIGlmIChtaW5Q
YWdlV2lkdGggPiAwLjApCi0gICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXRXaXRoUGFn
ZVdpZHRoUmFuZ2UobWluUGFnZVdpZHRoLCBtYXhQYWdlV2lkdGgsIGFkanVzdFZpZXdTaXplKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXQoIWFkanVz
dFZpZXdTaXplKTsKLSAgICAgICAgICAgIGlmIChhZGp1c3RWaWV3U2l6ZSkKLSAgICAgICAgICAg
ICAgICBjb3JlVmlldy0+YWRqdXN0Vmlld1NpemUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSNpZmRlZiBMT0dfVElNRVMgICAgICAgIAotICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Ci0gICAgTE9HKFRpbWluZywgIiVzIGxheW91dCBz
ZWNvbmRzID0gJWYiLCBbc2VsZiBVUkxdLCB0aGlzVGltZSk7Ci0jZW5kaWYKLX0KLQotLSAodm9p
ZClsYXlvdXQKLXsKLSAgICBbc2VsZiBsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhp
bXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0aW5nVmlld1NpemU6Tk9dOwotfQotCi0vLyBEZWxpdmVy
IG1vdXNldXAgZXZlbnRzIHRvIHRoZSBET00gZm9yIGJ1dHRvbiAyLgotLSAodm9pZClyaWdodE1v
dXNlVXA6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBp
ZiB3ZSBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCB0aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNlZC4K
LSAgICAvLyBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZyBwcmV2ZW50cyB0aGF0IGZy
b20gY2F1c2luZyBhIHByb2JsZW0gbGF0ZXIgaGVyZSBvcgotICAgIC8vIGluc2lkZSBBcHBLaXQg
Y29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgW3N1cGVyIHJp
Z2h0TW91c2VVcDpldmVudF07Ci0KLSAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlVXAo
ZXZlbnQpOwotfQotCi0tIChOU01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAot
ewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB3ZSBydW4gYSBuZXN0ZWQgZXZlbnQg
bG9vcCB0aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNlZC4KLSAgICAvLyBSZXRhaW5pbmcgYW5kIHRo
ZW4gYXV0b3JlbGVhc2luZyBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gbGF0
ZXIgaGVyZSBvcgotICAgIC8vIGluc2lkZSBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFp
bl0gYXV0b3JlbGVhc2VdOwotCi0gICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZl
cnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotCi0gICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOwotICAgIGlm
ICghcGFnZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIE1hdGNoIGJlaGF2aW9yIG9m
IG90aGVyIGJyb3dzZXJzIGJ5IHNlbmRpbmcgYSBtb3VzZWRvd24gZXZlbnQgZm9yIHJpZ2h0IGNs
aWNrcy4KLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlFUzsKLSAgICBw
YWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwotICAgIGNv
cmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRG93bihldmVudCk7Ci0gICAgQk9PTCBoYW5k
bGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVu
dChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3Vz
ZURvd25FdmVudCA9IE5POwotCi0gICAgaWYgKCFoYW5kbGVkRXZlbnQpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0KLSAgICAvLyBSZS1nZXQgcGFnZSwgc2luY2UgaXQgbWlnaHQgaGF2ZSBnb25lIGF3
YXkgZHVyaW5nIGV2ZW50IGhhbmRsaW5nLgotICAgIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsK
LSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBDb250ZXh0TWVudSog
Y29yZU1lbnUgPSBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKTsK
LSAgICBpZiAoIWNvcmVNZW51KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNBcnJheSog
bWVudUl0ZW1zID0gY29yZU1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKTsKLSAgICBpZiAoIW1l
bnVJdGVtcykKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TVUludGVnZXIgY291bnQgPSBb
bWVudUl0ZW1zIGNvdW50XTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgTlNNZW51KiBtZW51ID0gW1tbTlNNZW51IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07
Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgW21l
bnUgYWRkSXRlbTpbbWVudUl0ZW1zIG9iamVjdEF0SW5kZXg6aV1dOwotICAgIHJldHVybiBtZW51
OwotfQotCi0tIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihC
T09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBG
bGFnCi17Ci0gICAgcmV0dXJuIFtzZWxmIHNlYXJjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndh
cmQgY2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyB3cmFwOndyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246
Tk9dOwotfQotCi0tICh2b2lkKWNsZWFyRm9jdXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBp
ZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG9jdW1lbnQtPnNldEZv
Y3VzZWROb2RlKDApOwotfQotCi0tIChCT09MKWlzT3BhcXVlCi17Ci0gICAgcmV0dXJuIFtbc2Vs
ZiBfd2ViVmlld10gZHJhd3NCYWNrZ3JvdW5kXTsKLX0KLQotLSAodm9pZClzZXROZWVkc0Rpc3Bs
YXk6KEJPT0wpZmxhZwotewotICAgIExPRyhWaWV3LCAiJUAgc2V0TmVlZHNEaXNwbGF5OiVAIiwg
c2VsZiwgZmxhZyA/IEAiWUVTIiA6IEAiTk8iKTsKLSAgICBbc3VwZXIgc2V0TmVlZHNEaXNwbGF5
OmZsYWddOwotfQotCi0tICh2b2lkKXNldE5lZWRzTGF5b3V0OiAoQk9PTClmbGFnCi17Ci0gICAg
TE9HKFZpZXcsICIlQCBzZXROZWVkc0xheW91dDolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBA
Ik5PIik7Ci0gICAgaWYgKCFmbGFnKQotICAgICAgICByZXR1cm47IC8vIFRoZXJlJ3Mgbm8gd2F5
IHRvIHNheSB5b3UgZG9uJ3QgbmVlZCBhIGxheW91dC4KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYg
ZnJhbWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKQotICAgICAgICAgICAg
dmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpc2V0TmVlZHNUb0Fw
cGx5U3R5bGVzOiAoQk9PTClmbGFnCi17Ci0gICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc1RvQXBw
bHlTdHlsZXM6JUAiLCBzZWxmLCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOwotICAgIF9wcml2YXRl
LT5uZWVkc1RvQXBwbHlTdHlsZXMgPSBmbGFnOwotfQotCi0tICh2b2lkKWRyYXdTaW5nbGVSZWN0
OihOU1JlY3QpcmVjdAotewotICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0
ZV07Ci0gICAgTlNSZWN0Q2xpcChyZWN0KTsKLSAgICAgICAgCi0gICAgQVNTRVJUKFtbc2VsZiBz
dXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNsaXBWaWV3IGNsYXNzXV0pOwotCi0gICAgWyhX
ZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gc2V0QWRkaXRpb25hbENsaXA6cmVjdF07Ci0K
LSAgICBAdHJ5IHsKLSAgICAgICAgaWYgKFtzZWxmIF90cmFuc3BhcmVudEJhY2tncm91bmRdKSB7
Ci0gICAgICAgICAgICBbW05TQ29sb3IgY2xlYXJDb2xvcl0gc2V0XTsKLSAgICAgICAgICAgIE5T
UmVjdEZpbGwgKHJlY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1tzZWxmIF9mcmFtZV0gX2Ry
YXdSZWN0OnJlY3QgY29udGVudHNPbmx5OllFU107Ci0KLSAgICAgICAgV2ViVmlldyAqd2ViVmll
dyA9IFtzZWxmIF93ZWJWaWV3XTsKLQotICAgICAgICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGZv
ciA8cmRhcjovL3Byb2JsZW0vNTAyMzU0NT4uIFdlIGNhbiBoaXQgYSByYWNlIGNvbmRpdGlvbiB3
aGVyZSBkcmF3UmVjdCB3aWxsIGJlCi0gICAgICAgIC8vIGNhbGxlZCBhZnRlciB0aGUgV2ViVmll
dyBoYXMgY2xvc2VkLiBJZiB0aGUgY2xpZW50IGRpZCBub3QgcHJvcGVybHkgY2xvc2UgdGhlIFdl
YlZpZXcgYW5kIHNldCB0aGUgCi0gICAgICAgIC8vIFVJRGVsZWdhdGUgdG8gbmlsLCB0aGVuIHRo
ZSBVSURlbGVnYXRlIHdpbGwgYmUgc3RhbGUgYW5kIHRoaXMgY29kZSB3aWxsIGNyYXNoLiAKLSAg
ICAgICAgc3RhdGljIEJPT0wgdmVyc2lvbjNPckxhdGVyQ2xpZW50ID0gV2ViS2l0TGlua2VkT25P
ckFmdGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfUVVJQ0tCT09LU19RVUlSSyk7Ci0g
ICAgICAgIGlmICh2ZXJzaW9uM09yTGF0ZXJDbGllbnQpCi0gICAgICAgICAgICBbW3dlYlZpZXcg
X1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWREcmF3UmVjdDpbd2ViVmll
dyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3OnNlbGZdXTsKLQotICAgICAgICBpZiAoV2ViTm9k
ZUhpZ2hsaWdodCAqY3VycmVudEhpZ2hsaWdodCA9IFt3ZWJWaWV3IGN1cnJlbnROb2RlSGlnaGxp
Z2h0XSkKLSAgICAgICAgICAgIFtjdXJyZW50SGlnaGxpZ2h0IHNldE5lZWRzVXBkYXRlSW5UYXJn
ZXRWaWV3UmVjdDpbc2VsZiBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpbY3VycmVudEhpZ2hsaWdo
dCB0YXJnZXRWaWV3XV1dOwotCi0gICAgICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZp
ZXddIHJlc2V0QWRkaXRpb25hbENsaXBdOwotCi0gICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCBy
ZXN0b3JlR3JhcGhpY3NTdGF0ZV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpsb2NhbEV4
Y2VwdGlvbikgewotICAgICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNl
dEFkZGl0aW9uYWxDbGlwXTsKLSAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFw
aGljc1N0YXRlXTsKLSAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gY2F1Z2h0IHdoaWxlIGRy
YXdpbmc6ICVAIiwgbG9jYWxFeGNlcHRpb24pOwotICAgICAgICBbbG9jYWxFeGNlcHRpb24gcmFp
c2VdOwotICAgIH0KLX0KLQotLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBB
U1NFUlRfTUFJTl9USFJFQUQoKTsKLSAgICBMT0coVmlldywgIiVAIGRyYXdpbmciLCBzZWxmKTsK
LQotICAgIGNvbnN0IE5TUmVjdCAqcmVjdHM7Ci0gICAgTlNJbnRlZ2VyIGNvdW50OwotICAgIFtz
ZWxmIGdldFJlY3RzQmVpbmdEcmF3bjomcmVjdHMgY291bnQ6JmNvdW50XTsKLQotICAgIEJPT0wg
c3Vidmlld3NXZXJlU2V0QXNpZGUgPSBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZTsKLSAgICBp
ZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCi0gICAgICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3Nd
OwotCi0jaWZkZWYgTE9HX1RJTUVTCi0gICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCk7Ci0jZW5kaWYKLQotICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9tdXN0RHJh
d1VuaW9uZWRSZWN0OnJlY3Qgc2luZ2xlUmVjdHM6cmVjdHMgY291bnQ6Y291bnRdKQotICAgICAg
ICBbc2VsZiBkcmF3U2luZ2xlUmVjdDpyZWN0XTsKLSAgICBlbHNlCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0
OnJlY3RzW2ldXTsKLQotI2lmZGVmIExPR19USU1FUwotICAgIGRvdWJsZSB0aGlzVGltZSA9IENG
QWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Ci0gICAgTE9HKFRpbWluZywgIiVzIGRy
YXcgc2Vjb25kcyA9ICVmIiwgd2lkZ2V0LT5wYXJ0KCktPmJhc2VVUkwoKS5VUkwoKS5sYXRpbjEo
KSwgdGhpc1RpbWUpOwotI2VuZGlmCi0KLSAgICBpZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCi0g
ICAgICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKLSAgICAgICAgCi0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9uZWVkc09uZVNo
b3REcmF3aW5nU3luY2hyb25pemF0aW9uXSkgewotICAgICAgICAvLyBEaXNhYmxlIHNjcmVlbiB1
cGRhdGVzIHNvIHRoYXQgZHJhd2luZyBpbnRvIHRoZSBOU1ZpZXcgYW5kCi0gICAgICAgIC8vIENB
TGF5ZXIgdXBkYXRlcyBhcHBlYXIgb24gdGhlIHNjcmVlbiBhdCB0aGUgc2FtZSB0aW1lLgotICAg
ICAgICBbW3NlbGYgd2luZG93XSBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOwotICAg
ICAgICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3Nl
dE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb246Tk9dOwotICAgIH0KLSNlbmRpZgot
fQotCi0vLyBUdXJuIG9mZiB0aGUgYWRkaXRpb25hbCBjbGlwIHdoaWxlIGNvbXB1dGluZyBvdXIg
dmlzaWJsZVJlY3QuCi0tIChOU1JlY3QpdmlzaWJsZVJlY3QKLXsKLSAgICBpZiAoIShbW3NlbGYg
c3VwZXJ2aWV3XSBpc0tpbmRPZkNsYXNzOltXZWJDbGlwVmlldyBjbGFzc11dKSkKLSAgICAgICAg
cmV0dXJuIFtzdXBlciB2aXNpYmxlUmVjdF07Ci0gICAgICAgIAotICAgIFdlYkNsaXBWaWV3ICpj
bGlwVmlldyA9IChXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld107Ci0KLSAgICBCT09MIGhh
c0FkZGl0aW9uYWxDbGlwID0gW2NsaXBWaWV3IGhhc0FkZGl0aW9uYWxDbGlwXTsKLSAgICBpZiAo
IWhhc0FkZGl0aW9uYWxDbGlwKSB7Ci0gICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3Rd
OwotICAgIH0KLSAgICAKLSAgICBOU1JlY3QgYWRkaXRpb25hbENsaXAgPSBbY2xpcFZpZXcgYWRk
aXRpb25hbENsaXBdOwotICAgIFtjbGlwVmlldyByZXNldEFkZGl0aW9uYWxDbGlwXTsKLSAgICBO
U1JlY3QgdmlzaWJsZVJlY3QgPSBbc3VwZXIgdmlzaWJsZVJlY3RdOwotICAgIFtjbGlwVmlldyBz
ZXRBZGRpdGlvbmFsQ2xpcDphZGRpdGlvbmFsQ2xpcF07Ci0gICAgcmV0dXJuIHZpc2libGVSZWN0
OwotfQotCi0tIChCT09MKWlzRmxpcHBlZCAKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2
b2lkKXdpbmRvd0RpZEJlY29tZUtleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsK
LSAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7Ci0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxl
Y3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERv
bmU6Tk9dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNXaW5kb3cgKmtleVdpbmRv
dyA9IFtub3RpZmljYXRpb24gb2JqZWN0XTsKLQotICAgIGlmIChrZXlXaW5kb3cgPT0gW3NlbGYg
d2luZG93XSkKLSAgICAgICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKLQotICAgIGlm
IChrZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8fCBrZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRv
d10gYXR0YWNoZWRTaGVldF0pCi0gICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZl
U3RhdGVdOwotfQotCi0tICh2b2lkKXdpbmRvd0RpZFJlc2lnbktleTooTlNOb3RpZmljYXRpb24g
Kilub3RpZmljYXRpb24KLXsKLSAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7Ci0gICAgICAg
IFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZp
Y2F0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
TlNXaW5kb3cgKmZvcm1lcktleVdpbmRvdyA9IFtub3RpZmljYXRpb24gb2JqZWN0XTsKLQotICAg
IGlmIChmb3JtZXJLZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSkKLSAgICAgICAgW3NlbGYgcmVt
b3ZlTW91c2VNb3ZlZE9ic2VydmVyXTsKLQotICAgIGlmIChmb3JtZXJLZXlXaW5kb3cgPT0gW3Nl
bGYgd2luZG93XSB8fCBmb3JtZXJLZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRT
aGVldF0pIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci0g
ICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1v
dmVMZWZ0Ok5PXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsK
LSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVj
dDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBt
b3ZlTGVmdDpOT107Ci0gICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1
Z2luc107Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0
aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIHNob3VsZFVw
ZGF0ZVdoaWxlT2Zmc2NyZWVuXSkKLSAgICAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5OllFU107
Ci19Ci0KLS0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRo
ZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBu
ZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQg
cmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAg
ICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2Js
ZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0
b3JlbGVhc2VdOwotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPndoZWVsRXZlbnQoZXZlbnQp
KQotICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6ZXZlbnRdOwotfQotCi0tIChCT09MKV9pc1Nl
bGVjdGlvbkV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBOU1BvaW50IHBvaW50ID0gW3Nl
bGYgY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwot
ICAgIHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVu
dDpZRVNdIG9iamVjdEZvcktleTpXZWJFbGVtZW50SXNTZWxlY3RlZEtleV0gYm9vbFZhbHVlXTsK
LX0KLQotLSAoQk9PTClhY2NlcHRzRmlyc3RNb3VzZTooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1
biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBt
aWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2lu
ZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEg
cHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWlu
XSBhdXRvcmVsZWFzZV07Ci0KLSAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbc2VsZiBfaGl0Vmlld0Zv
ckV2ZW50OmV2ZW50XTsKLSAgICBXZWJIVE1MVmlldyAqaGl0SFRNTFZpZXcgPSBbaGl0VmlldyBp
c0tpbmRPZkNsYXNzOltzZWxmIGNsYXNzXV0gPyAoV2ViSFRNTFZpZXcgKiloaXRWaWV3IDogbmls
OwotICAgIAotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICBpZiAoW1tzZWxmIF93
ZWJWaWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNBY2Nl
cHRzRmlyc3RNb3VzZV0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0jZW5kaWYKLSAgICAKLSAgICBp
ZiAoaGl0SFRNTFZpZXcpIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAg
aWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkgewotICAg
ICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0QWN0aXZhdGlvbkV2ZW50TnVt
YmVyKFtldmVudCBldmVudE51bWJlcl0pOwotICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRN
b3VzZURvd25FdmVudDpldmVudF07Ci0gICAgICAgICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1Nl
bGVjdGlvbkV2ZW50OmV2ZW50XSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5ldmVudE1heVN0YXJ0RHJhZyhldmVudCk7Ci0gICAgICAgICAgICBb
aGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIFtoaXRWaWV3IGFjY2VwdHNGaXJzdE1v
dXNlOmV2ZW50XTsKLX0KLQotLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZl
bnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNw
b25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0g
ICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0
YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBw
cmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBL
aXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgTlNWaWV3
ICpoaXRWaWV3ID0gW3NlbGYgX2hpdFZpZXdGb3JFdmVudDpldmVudF07Ci0gICAgV2ViSFRNTFZp
ZXcgKmhpdEhUTUxWaWV3ID0gW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8g
KFdlYkhUTUxWaWV3ICopaGl0VmlldyA6IG5pbDsKLSAgICBpZiAoaGl0SFRNTFZpZXcpIHsKLSAg
ICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNT
ZWxlY3Rpb25FdmVudDpldmVudF0pCi0gICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW2hpdEhUTUxWaWV3IF9mcmFtZV0pKSB7Ci0gICAgICAgICAgICAgICAgW2hpdEhUTUxW
aWV3IF9zZXRNb3VzZURvd25FdmVudDpldmVudF07Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZlbnRNYXlTdGFydERyYWcoZXZlbnQpOwotICAg
ICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIFtoaXRW
aWV3IHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDpldmVudF07Ci19Ci0KLS0gKHZv
aWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNl
IHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxv
b3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9s
ZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJl
bnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJL
aXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQot
ICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gcHJvdGVjdG9yID0gc2VsZjsKLSAgICBpZiAoW1tz
ZWxmIGlucHV0Q29udGV4dF0gd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5w
dXRDb250ZXh0XSBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBZRVM7Ci0KLSAgICAvLyBSZWNv
cmQgdGhlIG1vdXNlIGRvd24gcG9zaXRpb24gc28gd2UgY2FuIGRldGVybWluZSBkcmFnIGh5c3Rl
cmVzaXMuCi0gICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKLQotICAgIE5TSW5w
dXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJ
bnB1dE1hbmFnZXJdOwotICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxl
TW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZl
bnRdKQotICAgICAgICBnb3RvIGRvbmU7Ci0KLSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVy
IGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0KLSAgICAvLyBJZiB0aGUgd2Vi
IHBhZ2UgaGFuZGxlcyB0aGUgY29udGV4dCBtZW51IGV2ZW50IGFuZCBtZW51Rm9yRXZlbnQ6IHJl
dHVybnMgbmlsLCB3ZSdsbCBnZXQgY29udHJvbCBjbGljayBldmVudHMgaGVyZS4KLSAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIHBhc3MgdGhlbSBhbG9uZyB0byBLSFRNTCBhIHNlY29uZCB0aW1lLgot
ICAgIGlmICghKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spKSB7Ci0g
ICAgICAgIF9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5POwotCi0gICAg
ICAgIC8vIERvbid0IGRvIGFueSBtb3VzZW92ZXIgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCi0g
ICAgICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07Ci0KLSAgICAgICAgLy8g
TGV0IFdlYkNvcmUgZ2V0IGEgY2hhbmNlIHRvIGRlYWwgd2l0aCB0aGUgZXZlbnQuIFRoaXMgd2ls
bCBjYWxsIGJhY2sgdG8gdXMKLSAgICAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGlt
ZXIgaWYgYXBwcm9wcmlhdGUuCi0gICAgICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKSkKLSAgICAgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1v
dXNlRG93bihldmVudCk7Ci0gICAgfQotCi1kb25lOgotICAgIF9wcml2YXRlLT5oYW5kbGluZ01v
dXNlRG93bkV2ZW50ID0gTk87Ci19Ci0KLS0gKHZvaWQpZHJhZ0ltYWdlOihOU0ltYWdlICopZHJh
Z0ltYWdlCi0gICAgICAgICAgICAgICBhdDooTlNQb2ludClhdAotICAgICAgICAgICBvZmZzZXQ6
KE5TU2l6ZSlvZmZzZXQKLSAgICAgICAgICAgIGV2ZW50OihOU0V2ZW50ICopZXZlbnQKLSAgICAg
ICBwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi0gICAgICAgICAgIHNvdXJj
ZTooaWQpc291cmNlCi0gICAgICAgIHNsaWRlQmFjazooQk9PTClzbGlkZUJhY2sKLXsKLSAgICBB
U1NFUlQoc2VsZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddKTsKLSAgICBbc3VwZXIgZHJhZ0ltYWdl
OmRyYWdJbWFnZSBhdDphdCBvZmZzZXQ6b2Zmc2V0IGV2ZW50OmV2ZW50IHBhc3RlYm9hcmQ6cGFz
dGVib2FyZCBzb3VyY2U6c291cmNlIHNsaWRlQmFjazpzbGlkZUJhY2tdOwotfQotCi0tICh2b2lk
KW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5j
ZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBs
b29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBv
bGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJy
ZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2Vi
S2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0K
LSAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdl
ciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKLSAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2Fu
dHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5kbGVNb3Vz
ZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3NlbGYgcmV0YWluXTsKLQot
ICAgIGlmICghX3ByaXZhdGUtPmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzKSB7Ci0gICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAgICAgICAgICBp
ZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgcGFnZS0+bWFp
bkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5tb3VzZURyYWdnZWQoZXZlbnQpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgW3NlbGYgcmVsZWFzZV07Ci19Ci0KLS0gKE5TRHJhZ09wZXJhdGlvbilk
cmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tGb3JMb2NhbDooQk9PTClpc0xvY2FsCi17Ci0gICAg
QVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKLSAgICAK
LSAgICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuIE5TRHJhZ09wZXJhdGlvbk5vbmU7Ci0KLSAgICAvLyBGSVhNRTogV2h5
IGRvIHdlIG92ZXJyaWRlIHRoZSBzb3VyY2UgcHJvdmlkZWQgb3BlcmF0aW9uIGhlcmU/ICBXaHkg
bm90IGluIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcKLSAgICBpZiAocGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS0+c291cmNlRHJhZ09wZXJhdGlvbigpID09IERyYWdPcGVyYXRpb25Ob25lKQotICAg
ICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uR2VuZXJpYyB8IE5TRHJhZ09wZXJhdGlvbkNvcHk7
Ci0KLSAgICByZXR1cm4gKE5TRHJhZ09wZXJhdGlvbilwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5z
b3VyY2VEcmFnT3BlcmF0aW9uKCk7Ci19Ci0KLS0gKHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdl
ICopaW1hZ2UgbW92ZWRUbzooTlNQb2ludClzY3JlZW5Mb2MKLXsKLSAgICBBU1NFUlQoIVtzZWxm
IF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOwotICAgIAotICAgIE5TUG9pbnQg
d2luZG93SW1hZ2VMb2MgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnNjcmVl
bkxvY107Ci0gICAgTlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IHdpbmRvd0ltYWdlTG9jOwotICAg
IAotICAgIGlmIChQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pKSB7Ci0gICAgICAg
IERyYWdDb250cm9sbGVyKiBkcmFnQ29udHJvbGxlciA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCk7
Ci0gICAgICAgIE5TUG9pbnQgd2luZG93TW91c2VMb2MgPSBOU01ha2VQb2ludCh3aW5kb3dJbWFn
ZUxvYy54ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS54KCksIHdpbmRvd0ltYWdlTG9j
LnkgKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLnkoKSk7Ci0gICAgfQotICAgIAotICAg
IFtbc2VsZiBfZnJhbWVdIF9kcmFnU291cmNlTW92ZWRUbzp3aW5kb3dNb3VzZUxvY107Ci19Ci0K
LS0gKHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdlICopYW5JbWFnZSBlbmRlZEF0OihOU1BvaW50
KWFQb2ludCBvcGVyYXRpb246KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KLXsKLSAgICBBU1NF
UlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOwotICAgIAotICAg
IE5TUG9pbnQgd2luZG93SW1hZ2VMb2MgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9C
YXNlOmFQb2ludF07Ci0gICAgTlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IHdpbmRvd0ltYWdlTG9j
OwotICAgIAotICAgIGlmIChQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pKSB7Ci0g
ICAgICAgIERyYWdDb250cm9sbGVyKiBkcmFnQ29udHJvbGxlciA9IHBhZ2UtPmRyYWdDb250cm9s
bGVyKCk7Ci0gICAgICAgIHdpbmRvd01vdXNlTG9jID0gTlNNYWtlUG9pbnQod2luZG93SW1hZ2VM
b2MueCArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueCgpLCB3aW5kb3dJbWFnZUxvYy55
ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS55KCkpOwotICAgICAgICBkcmFnQ29udHJv
bGxlci0+ZHJhZ0VuZGVkKCk7Ci0gICAgfQotICAgIAotICAgIFtbc2VsZiBfZnJhbWVdIF9kcmFn
U291cmNlRW5kZWRBdDp3aW5kb3dNb3VzZUxvYyBvcGVyYXRpb246b3BlcmF0aW9uXTsKLSAgICAK
LSAgICAvLyBQcmV2ZW50IHF1ZXVlZCBtb3VzZURyYWdnZWQgZXZlbnRzIGZyb20gY29taW5nIGFm
dGVyIHRoZSBkcmFnIGFuZCBmYWtlIG1vdXNlVXAgZXZlbnQuCi0gICAgX3ByaXZhdGUtPmlnbm9y
aW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gWUVTOwotICAgIAotICAgIC8vIE9uY2UgdGhlIGRyYWdn
aW5nIG1hY2hpbmVyeSBraWNrcyBpbiwgd2Ugbm8gbG9uZ2VyIGdldCBtb3VzZSBkcmFncyBvciB0
aGUgdXAgZXZlbnQuCi0gICAgLy8gV2ViQ29yZSBleHBlY3RzIHRvIGdldCBiYWxhbmNlZCBkb3du
L3VwJ3MsIHNvIHdlIG11c3QgZmFrZSB1cCBhIG1vdXNldXAuCi0gICAgTlNFdmVudCAqZmFrZUV2
ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlVXAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246d2luZG93TW91c2VM
b2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6
W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2lu
Y2VSZWZlcmVuY2VEYXRlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2
ZW50XSBjb250ZXh0XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKLSAgICBbc2VsZiBtb3VzZVVw
OmZha2VFdmVudF07IC8vIFRoaXMgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgbW91c2VvdmVyIHN0YXRl
LgotfQotCi0tIChOU0FycmF5ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5h
dGlvbjooTlNVUkwgKilkcm9wRGVzdGluYXRpb24KLXsKLSAgICBOU0ZpbGVXcmFwcGVyICp3cmFw
cGVyID0gbmlsOwotICAgIE5TVVJMICpkcmFnZ2luZ0ltYWdlVVJMID0gbmlsOwotICAgIAotICAg
IGlmIChXZWJDb3JlOjpDYWNoZWRJbWFnZSogdGlmZlJlc291cmNlID0gW3NlbGYgcHJvbWlzZWRE
cmFnVElGRkRhdGFTb3VyY2VdKSB7Ci0gICAgICAgIAotICAgICAgICBTaGFyZWRCdWZmZXIgKmJ1
ZmZlciA9IHN0YXRpY19jYXN0PENhY2hlZFJlc291cmNlKj4odGlmZlJlc291cmNlKS0+ZGF0YSgp
OwotICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIGdvdG8gbm9Qcm9taXNlZERhdGE7
Ci0gICAgICAgIAotICAgICAgICBOU0RhdGEgKmRhdGEgPSBidWZmZXItPmNyZWF0ZU5TRGF0YSgp
OwotICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IHRpZmZSZXNvdXJjZS0+cmVzcG9u
c2UoKS5uc1VSTFJlc3BvbnNlKCk7Ci0gICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBbcmVzcG9u
c2UgVVJMXTsKLSAgICAgICAgd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRS
ZWd1bGFyRmlsZVdpdGhDb250ZW50czpkYXRhXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIE5TU3Ry
aW5nKiBmaWxlbmFtZSA9IFtyZXNwb25zZSBzdWdnZXN0ZWRGaWxlbmFtZV07Ci0gICAgICAgIE5T
U3RyaW5nKiB0cnVlRXh0ZW5zaW9uKHRpZmZSZXNvdXJjZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRl
bnNpb24oKSk7Ci0gICAgICAgIGlmICghW2ZpbGVuYW1lIG1hdGNoZXNFeHRlbnNpb25FcXVpdmFs
ZW50OnRydWVFeHRlbnNpb25dKQotICAgICAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0
cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVF
eHRlbnNpb25dOwotICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFt
ZV07Ci0gICAgfQotICAgIAotbm9Qcm9taXNlZERhdGE6Ci0gICAgCi0gICAgaWYgKCF3cmFwcGVy
KSB7Ci0gICAgICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxW
aWV3XSk7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7Ci0gICAg
ICAgIAotICAgICAgICAvL0lmIGEgbG9hZCBvY2N1cnMgbWlkd2F5IHRocm91Z2ggYSBkcmFnLCB0
aGUgdmlldyBtYXkgYmUgZGV0YWNoZWQsIHdoaWNoIGdpdmVzCi0gICAgICAgIC8vdXMgbm8gYWJp
bGl0eSB0byBnZXQgdG8gdGhlIG9yaWdpbmFsIFBhZ2UsIHNvIHdlIGNhbm5vdCBhY2Nlc3MgYW55
IGRyYWcgc3RhdGUKLSAgICAgICAgLy9GSVhNRTogaXMgdGhlcmUgYSB3YXkgdG8gcmVjb3Zlcj8K
LSAgICAgICAgaWYgKCFwYWdlKSAKLSAgICAgICAgICAgIHJldHVybiBuaWw7IAotICAgICAgICAK
LSAgICAgICAgY29uc3QgS1VSTCYgaW1hZ2VVUkwgPSBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5k
cmFnZ2luZ0ltYWdlVVJMKCk7Ci0gICAgICAgIEFTU0VSVCghaW1hZ2VVUkwuaXNFbXB0eSgpKTsK
LSAgICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9IGltYWdlVVJMOwotCi0gICAgICAgIHdyYXBwZXIg
PSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9maWxlV3JhcHBlckZvclVSTDpkcmFnZ2luZ0ltYWdlVVJM
XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKHdyYXBwZXIgPT0gbmlsKSB7Ci0gICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBmaWxlLiIpOwotICAgICAgICByZXR1cm4gbmls
OwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBSZXBvcnQgYW4gZXJyb3IgaWYgd2UgZmFpbCB0byBj
cmVhdGUgYSBmaWxlLgotICAgIE5TU3RyaW5nICpwYXRoID0gW1tkcm9wRGVzdGluYXRpb24gcGF0
aF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50Olt3cmFwcGVyIHByZWZlcnJlZEZpbGVu
YW1lXV07Ci0gICAgcGF0aCA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtp
dF9wYXRoV2l0aFVuaXF1ZUZpbGVuYW1lRm9yUGF0aDpwYXRoXTsKLSAgICBpZiAoIVt3cmFwcGVy
IHdyaXRlVG9GaWxlOnBhdGggYXRvbWljYWxseTpOTyB1cGRhdGVGaWxlbmFtZXM6WUVTXSkKLSAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGltYWdlIGZpbGUgdmlhIC1bTlNGaWxl
V3JhcHBlciB3cml0ZVRvRmlsZTphdG9taWNhbGx5OnVwZGF0ZUZpbGVuYW1lczpdIik7Ci0gICAg
Ci0gICAgaWYgKGRyYWdnaW5nSW1hZ2VVUkwpCi0gICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl0gX3dlYmtpdF9zZXRNZXRhZGF0YVVSTDpbZHJhZ2dpbmdJbWFnZVVSTCBhYnNv
bHV0ZVN0cmluZ10gcmVmZXJyZXI6bmlsIGF0UGF0aDpwYXRoXTsKLSAgICAKLSAgICByZXR1cm4g
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltwYXRoIGxhc3RQYXRoQ29tcG9uZW50XV07Ci19Ci0K
LS0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNo
YW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVu
dCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRo
ZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBj
dXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUg
V2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07
Ci0KLSAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKLQotICAgIE5TSW5wdXRNYW5h
Z2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1h
bmFnZXJdOwotICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VF
dmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiByZXRhaW5dOwotCi0gICAgW3NlbGYgX3N0b3BB
dXRvc2Nyb2xsVGltZXJdOwotICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pKSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
ICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VVcChldmVudCk7Ci0g
ICAgfQotICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKLQotICAgIFtz
ZWxmIHJlbGVhc2VdOwotfQotCi0tICh2b2lkKW1vdXNlTW92ZWROb3RpZmljYXRpb246KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3Zlcldp
dGhFdmVudDpbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAiTlNFdmVudCJd
XTsKLX0KLQotLy8gcmV0dXJuaW5nIFlFUyBmcm9tIHRoaXMgbWV0aG9kIGlzIHRoZSB3YXkgd2Ug
dGVsbCBBcHBLaXQgdGhhdCBpdCBpcyBvayBmb3IgdGhpcyB2aWV3Ci0vLyB0byBiZSBpbiB0aGUg
a2V5IGxvb3AgZXZlbiB3aGVuICJ0YWIgdG8gYWxsIGNvbnRyb2xzIiBpcyBub3Qgb24uCi0tIChC
T09MKW5lZWRzUGFuZWxUb0JlY29tZUtleQotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8vIFV0
aWxpdHkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHdlIGRvbid0IHJldHVybiBhbnl0aGluZyB0aHJv
dWdoIHRoZSBOU1RleHRJbnB1dAotLy8gQVBJIHdoZW4gYW4gZWRpdGFibGUgcmVnaW9uIGlzIG5v
dCBjdXJyZW50bHkgZm9jdXNlZC4KLXN0YXRpYyBCT09MIGlzVGV4dElucHV0KEZyYW1lKiBjb3Jl
RnJhbWUpCi17Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiAhY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNOb25lKCkgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUo
KTsKLX0KLQotc3RhdGljIEJPT0wgaXNJblBhc3N3b3JkRmllbGQoRnJhbWUqIGNvcmVGcmFtZSkK
LXsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5Q
YXNzd29yZEZpZWxkKCk7Ci19Ci0KLS0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKLXsKLSAg
ICBOU1NlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBOU0RpcmVjdFNlbGVjdGlvbjsKLSAg
ICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX2lzUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkK
LSAgICAgICAgZGlyZWN0aW9uID0gW1tzZWxmIHdpbmRvd10ga2V5Vmlld1NlbGVjdGlvbkRpcmVj
dGlvbl07Ci0KLSAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKLSAgICBb
c2VsZiBfdXBkYXRlRm9udFBhbmVsXTsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAg
ICBCT09MIGV4cG9zZUlucHV0Q29udGV4dCA9IGlzVGV4dElucHV0KGZyYW1lKSAmJiAhaXNJblBh
c3N3b3JkRmllbGQoZnJhbWUpOwotICAgIGlmIChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZh
dGUtPmV4cG9zZUlucHV0Q29udGV4dCkgewotICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRD
b250ZXh0ID0gZXhwb3NlSW5wdXRDb250ZXh0OwotICAgICAgICBbTlNBcHAgdXBkYXRlV2luZG93
c107Ci0gICAgfQotCi0gICAgZnJhbWUtPmVkaXRvcigpLT5zZXRTdGFydE5ld0tpbGxSaW5nU2Vx
dWVuY2UodHJ1ZSk7Ci0KLSAgICBpZiAoZGlyZWN0aW9uID09IE5TRGlyZWN0U2VsZWN0aW9uKQot
ICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0g
ICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCktPnNldEZvY3VzZWRGcmFtZShmcmFtZSk7Ci0gICAgaWYgKERvY3VtZW50KiBkb2N1
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZE5v
ZGUoMCk7Ci0gICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEluaXRpYWxGb2N1cyhkaXJl
Y3Rpb24gPT0gTlNTZWxlY3RpbmdOZXh0ID8gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkIDogRm9jdXNE
aXJlY3Rpb25CYWNrd2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudEtleWJvYXJkRXZlbnQoKS5nZXQo
KSk7Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgot
ewotICAgIEJPT0wgcmVzaWduID0gW3N1cGVyIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKLSAgICBp
ZiAocmVzaWduKSB7Ci0gICAgICAgIF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9
IFlFUzsKLSAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFu
Z2U6Tk8gbW92ZUxlZnQ6Tk9dOwotICAgICAgICBpZiAoIVtzZWxmIG1haW50YWluc0luYWN0aXZl
U2VsZWN0aW9uXSkgeyAKLSAgICAgICAgICAgIFtzZWxmIGRlc2VsZWN0QWxsXTsKLSAgICAgICAg
ICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBfaXNQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNd
KQotICAgICAgICAgICAgICAgIFtzZWxmIGNsZWFyRm9jdXNdOwotICAgICAgICB9Ci0gICAgICAg
IFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOwotICAgICAgICBfcHJpdmF0ZS0+
cmVzaWduaW5nRmlyc3RSZXNwb25kZXIgPSBOTzsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc2lnbjsK
LX0KLQotLSAodm9pZClzZXREYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZSAK
LXsKLSAgICBBU1NFUlQoZGF0YVNvdXJjZSk7Ci0gICAgaWYgKF9wcml2YXRlLT5kYXRhU291cmNl
ICE9IGRhdGFTb3VyY2UpIHsKLSAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+Y2xvc2VkKTsKLSAg
ICAgICAgQk9PTCBoYWREYXRhU291cmNlID0gX3ByaXZhdGUtPmRhdGFTb3VyY2UgIT0gbmlsOwot
Ci0gICAgICAgIFtkYXRhU291cmNlIHJldGFpbl07Ci0gICAgICAgIFtfcHJpdmF0ZS0+ZGF0YVNv
dXJjZSByZWxlYXNlXTsKLSAgICAgICAgX3ByaXZhdGUtPmRhdGFTb3VyY2UgPSBkYXRhU291cmNl
OwotICAgICAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpkYXRh
U291cmNlXTsKLQotICAgICAgICBpZiAoIWhhZERhdGFTb3VyY2UpCi0gICAgICAgICAgICBbc2Vs
ZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOwotICAgIH0KLX0KLQotLSAodm9pZClkYXRhU291cmNl
VXBkYXRlZDooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKLXsKLX0KLQotLy8gVGhpcyBpcyBh
biBvdmVycmlkZSBvZiBhbiBOU0NvbnRyb2wgbWV0aG9kIHRoYXQgd2FudHMgdG8gcmVwYWludCB0
aGUgZW50aXJlIHZpZXcgd2hlbiB0aGUgd2luZG93IHJlc2lnbnMvYmVjb21lcwotLy8ga2V5LiAg
V2ViSFRNTFZpZXcgaXMgYW4gTlNDb250cm9sIG9ubHkgYmVjYXVzZSBpdCBob3N0cyBOU0NlbGxz
IHRoYXQgYXJlIHBhaW50ZWQgYnkgV2ViQ29yZSdzIEFxdWEgdGhlbWUKLS8vIHJlbmRlcmVyIChh
bmQgdGhvc2UgY2VsbHMgbXVzdCBiZSBob3N0ZWQgYnkgYW4gZW5jbG9zaW5nIE5TQ29udHJvbCBp
biBvcmRlciB0byBwYWludCBwcm9wZXJseSkuCi0tICh2b2lkKXVwZGF0ZUNlbGw6KE5TQ2VsbCop
Y2VsbAotewotfQotCi0vLyBEb2VzIHNldE5lZWRzRGlzcGxheTpOTyBhcyBhIHNpZGUgZWZmZWN0
IHdoZW4gcHJpbnRpbmcgaXMgZW5kaW5nLgotLy8gcGFnZVdpZHRoICE9IDAgaW1wbGllcyB3ZSB3
aWxsIHJlbGF5b3V0IHRvIGEgbmV3IHdpZHRoCi0tICh2b2lkKV9zZXRQcmludGluZzooQk9PTClw
cmludGluZyBtaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VX
aWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdT
aXplCi17Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICBOU0FycmF5
ICpzdWJmcmFtZXMgPSBbZnJhbWUgY2hpbGRGcmFtZXNdOwotICAgIHVuc2lnbmVkIG4gPSBbc3Vi
ZnJhbWVzIGNvdW50XTsKLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgIT0gbjsg
KytpKSB7Ci0gICAgICAgIFdlYkZyYW1lICpzdWJmcmFtZSA9IFtzdWJmcmFtZXMgb2JqZWN0QXRJ
bmRleDppXTsKLSAgICAgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbc3ViZnJhbWUgZnJh
bWVWaWV3XTsKLSAgICAgICAgaWYgKFtbc3ViZnJhbWUgX2RhdGFTb3VyY2VdIF9pc0RvY3VtZW50
SFRNTF0pIHsKLSAgICAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilbZnJhbWVWaWV3IGRvY3VtZW50
Vmlld10gX3NldFByaW50aW5nOnByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVt
UGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6YWRqdXN0Vmlld1NpemVdOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKHByaW50aW5nICE9IF9wcml2YXRlLT5wcmludGluZykgewotICAg
ICAgICBbX3ByaXZhdGUtPnBhZ2VSZWN0cyByZWxlYXNlXTsKLSAgICAgICAgX3ByaXZhdGUtPnBh
Z2VSZWN0cyA9IG5pbDsKLSAgICAgICAgX3ByaXZhdGUtPnByaW50aW5nID0gcHJpbnRpbmc7Ci0g
ICAgICAgIGlmICghcHJpbnRpbmcpCi0gICAgICAgICAgICBfcHJpdmF0ZS0+YXZvaWRpbmdQcmlu
dE9ycGhhbiA9IE5POwotICAgICAgICBbc2VsZiBzZXROZWVkc1RvQXBwbHlTdHlsZXM6WUVTXTsK
LSAgICAgICAgW3NlbGYgc2V0TmVlZHNMYXlvdXQ6WUVTXTsKLSAgICAgICAgW3NlbGYgbGF5b3V0
VG9NaW5pbXVtUGFnZVdpZHRoOm1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOm1heFBhZ2VX
aWR0aCBhZGp1c3RpbmdWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZV07Ci0gICAgICAgIGlmICghcHJp
bnRpbmcpIHsKLSAgICAgICAgICAgIC8vIENhbid0IGRvIHRoaXMgd2hlbiBzdGFydGluZyBwcmlu
dGluZyBvciBuZXN0ZWQgcHJpbnRpbmcgd29uJ3Qgd29yaywgc2VlIDM0OTE0MjcuCi0gICAgICAg
ICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6Tk9dOwotICAgICAgICB9Ci0gICAgfQotfQotCi0t
IChCT09MKWNhblByaW50SGVhZGVyc0FuZEZvb3RlcnMKLXsKLSAgICByZXR1cm4gWUVTOwotfQot
Ci0vLyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHdlYnZpZXcgaXMgZW1i
ZWRkZWQgaW4gdGhlIHZpZXcgdGhhdCdzIGJlaW5nIHByaW50ZWQuCi0vLyBJdCBzaG91bGRuJ3Qg
YmUgY2FsbGVkIHdoZW4gdGhlIHdlYnZpZXcgaXMgYmVpbmcgcHJpbnRlZCBkaXJlY3RseS4KLS0g
KHZvaWQpYWRqdXN0UGFnZUhlaWdodE5ldzooQ0dGbG9hdCAqKW5ld0JvdHRvbSB0b3A6KENHRmxv
YXQpb2xkVG9wIGJvdHRvbTooQ0dGbG9hdClvbGRCb3R0b20gbGltaXQ6KENHRmxvYXQpYm90dG9t
TGltaXQKLXsKLSAgICAvLyBUaGlzIGhlbHBzIHdoZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBhIGxh
cmdlciBwcmludCBwcm9jZXNzLgotICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMg
d2hhdCB3ZSdyZSBwcmludGluZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4K
LSAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0gX3ByaXZhdGUtPnByaW50aW5nOwotICAgIGlm
ICghd2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWlu
aW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpO
T107Ci0KLSAgICBmbG9hdCBuZXdCb3R0b21GbG9hdCA9ICpuZXdCb3R0b207Ci0gICAgaWYgKEZy
YW1lVmlldyogdmlldyA9IGNvcmUoW3NlbGYgX2ZyYW1lXSktPnZpZXcoKSkKLSAgICAgICAgdmll
dy0+YWRqdXN0UGFnZUhlaWdodCgmbmV3Qm90dG9tRmxvYXQsIG9sZFRvcCwgb2xkQm90dG9tLCBi
b3R0b21MaW1pdCk7Ci0KLSNpZmRlZiBfX0xQNjRfXwotICAgIC8vIElmIHRoZSBuZXcgYm90dG9t
IGlzIGVxdWFsIHRvIHRoZSBvbGQgYm90dG9tICh3aGVuIGJvdGggYXJlIHRyZWF0ZWQgYXMgZmxv
YXRzKSwgd2UganVzdCBjb3B5Ci0gICAgLy8gb2xkQm90dG9tIG92ZXIgdG8gbmV3Qm90dG9tLiBU
aGlzIHByZXZlbnRzIHJvdW5kaW5nIGVycm9ycyB0aGF0IGNhbiBvY2N1ciB3aGVuIGNvbnZlcnRp
bmcgbmV3Qm90dG9tRmxvYXQgdG8gYSBkb3VibGUuCi0gICAgaWYgKGZhYnMoKGZsb2F0KW9sZEJv
dHRvbSAtIG5ld0JvdHRvbUZsb2F0KSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBz
aWxvbigpKSAKLSAgICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKLSAgICBlbHNlCi0jZW5k
aWYKLSAgICAgICAgKm5ld0JvdHRvbSA9IG5ld0JvdHRvbUZsb2F0OwotICAgIAotICAgIGlmICgh
d2FzSW5QcmludGluZ01vZGUpIHsKLSAgICAgICAgTlNQcmludE9wZXJhdGlvbiAqY3VycmVuUHJp
bnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKLSAgICAg
ICAgaWYgKGN1cnJlblByaW50T3BlcmF0aW9uKQotICAgICAgICAgICAgLy8gZGVsYXkgX3NldFBy
aW50aW5nOk5PIHVudGlsIGJhY2sgdG8gbWFpbiBsb29wIGFzIHRoaXMgbWV0aG9kIG1heSBnZXQg
Y2FsbGVkIHJlcGVhdGVkbHkKLSAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2Vs
ZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRoT2JqZWN0OmN1cnJlblByaW50T3BlcmF0
aW9uIGFmdGVyRGVsYXk6MF07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIC8vIG5vdCBzdXJl
IGlmIHRoaXMgaXMgYWN0dWFsbHkgZXZlciBpbnZva2VkLCBpdCBwcm9iYWJseSBzaG91bGRuJ3Qg
YmUKLSAgICAgICAgICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAu
MGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLSAgICB9Ci19Ci0K
LS0gKGZsb2F0KV9hdmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRP
cGVyYXRpb24gKilwcmludE9wZXJhdGlvbgotewotICAgIE5TUHJpbnRJbmZvICpwcmludEluZm8g
PSBbcHJpbnRPcGVyYXRpb24gcHJpbnRJbmZvXTsKLSAgICByZXR1cm4gW3ByaW50SW5mbyBwYXBl
clNpemVdLndpZHRoIC0gW3ByaW50SW5mbyBsZWZ0TWFyZ2luXSAtIFtwcmludEluZm8gcmlnaHRN
YXJnaW5dOwotfQotCi0tIChmbG9hdClfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjooTlNQ
cmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uCi17Ci0gICAgZmxvYXQgdmlld1dpZHRoID0g
TlNXaWR0aChbc2VsZiBib3VuZHNdKTsKLSAgICBpZiAodmlld1dpZHRoIDwgMSkgewotICAgICAg
ICBMT0dfRVJST1IoIiVAIGhhcyBubyB3aWR0aCB3aGVuIHByaW50aW5nIiwgc2VsZik7Ci0gICAg
ICAgIHJldHVybiAxLjBmOwotICAgIH0KLQotICAgIGZsb2F0IHVzZXJTY2FsZUZhY3RvciA9IFtw
cmludE9wZXJhdGlvbiBfd2ViX3BhZ2VTZXR1cFNjYWxlRmFjdG9yXTsKLSAgICBmbG9hdCBtYXhT
aHJpbmtUb0ZpdFNjYWxlRmFjdG9yID0gMS4wZiAvIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3Rv
cjsKLSAgICBmbG9hdCBzaHJpbmtUb0ZpdFNjYWxlRmFjdG9yID0gW3NlbGYgX2F2YWlsYWJsZVBh
cGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJhdGlvbl0vdmlld1dpZHRoOwotICAg
IGZsb2F0IHNocmlua1RvQXZvaWRPcnBoYW4gPSBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhh
biA/ICgxLjBmIC8gUHJpbnRpbmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50KSA6IDEuMGY7Ci0gICAg
cmV0dXJuIHVzZXJTY2FsZUZhY3RvciAqIE1BWChtYXhTaHJpbmtUb0ZpdFNjYWxlRmFjdG9yLCBz
aHJpbmtUb0ZpdFNjYWxlRmFjdG9yKSAqIHNocmlua1RvQXZvaWRPcnBoYW47Ci19Ci0KLS8vIEZJ
WE1FIDM0OTEzNDQ6IFRoaXMgaXMgYSBzZWNyZXQgQXBwS2l0LWludGVybmFsIG1ldGhvZCB0aGF0
IHdlIG5lZWQgdG8gb3ZlcnJpZGUgaW4gb3JkZXIKLS8vIHRvIGdldCBvdXIgc2hyaW5rLXRvLWZp
dCB0byB3b3JrIHdpdGggYSBjdXN0b20gcGFnaW5hdGlvbiBzY2hlbWUuIFdlIGNhbiBkbyB0aGlz
IGJldHRlcgotLy8gaWYgQXBwS2l0IG1ha2VzIGl0IFNQSS9BUEkuCi0tIChDR0Zsb2F0KV9wcm92
aWRlVG90YWxTY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICop
cHJpbnRPcGVyYXRpb24gCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50
T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXTsKLX0KLQotLy8gVGhpcyBpcyB1c2VkIGZvciBDYXJi
b24gcHJpbnRpbmcuIEF0IHNvbWUgcG9pbnQgd2UgbWlnaHQgd2FudCB0byBtYWtlIHRoaXMgcHVi
bGljIEFQSS4KLS0gKHZvaWQpc2V0UGFnZVdpZHRoRm9yUHJpbnRpbmc6KGZsb2F0KXBhZ2VXaWR0
aAotewotICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4
aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLSAgICBbc2VsZiBfc2V0UHJp
bnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6cGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6cGFn
ZVdpZHRoIGFkanVzdFZpZXdTaXplOllFU107Ci19Ci0KLS0gKHZvaWQpX2VuZFByaW50TW9kZQot
ewotICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11
bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllFU107Ci0gICAgW1tzZWxmIHdpbmRvd10g
c2V0QXV0b2Rpc3BsYXk6WUVTXTsKLX0KLQotLSAodm9pZClfZGVsYXllZEVuZFByaW50TW9kZToo
TlNQcmludE9wZXJhdGlvbiAqKWluaXRpYXRpbmdPcGVyYXRpb24KLXsKLSAgICBBU1NFUlRfQVJH
KGluaXRpYXRpbmdPcGVyYXRpb24sIGluaXRpYXRpbmdPcGVyYXRpb24gIT0gbmlsKTsKLSAgICBO
U1ByaW50T3BlcmF0aW9uICpjdXJyZW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3Vy
cmVudE9wZXJhdGlvbl07Ci0gICAgaWYgKGluaXRpYXRpbmdPcGVyYXRpb24gPT0gY3VycmVudE9w
ZXJhdGlvbikgewotICAgICAgICAvLyBUaGUgcHJpbnQgb3BlcmF0aW9uIGlzIHN0aWxsIHVuZGVy
d2F5LiBXZSBkb24ndCBleHBlY3QgdGhpcyB0byBldmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2Vy
dCwgYnV0IHdlJ3JlCi0gICAgICAgIC8vIGJlaW5nIGV4dHJhIHBhcmFub2lkIGhlcmUgc2luY2Ug
dGhlIHByaW50aW5nIGNvZGUgaXMgc28gZnJhZ2lsZS4gRGVsYXkgdGhlIGNsZWFudXAKLSAgICAg
ICAgLy8gZnVydGhlci4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRo
T2JqZWN0OmluaXRpYXRpbmdPcGVyYXRpb24gYWZ0ZXJEZWxheTowXTsKLSAgICB9IGVsc2UgaWYg
KFtjdXJyZW50T3BlcmF0aW9uIHZpZXddID09IHNlbGYpIHsKLSAgICAgICAgLy8gQSBuZXcgcHJp
bnQgam9iIGhhcyBzdGFydGVkLCBidXQgaXQgaXMgcHJpbnRpbmcgdGhlIHNhbWUgV2ViSFRNTFZp
ZXcgYWdhaW4uIFdlIGRvbid0IGV4cGVjdAotICAgICAgICAvLyB0aGlzIHRvIGV2ZXIgaGFwcGVu
LCBoZW5jZSB0aGUgYXNzZXJ0LCBidXQgd2UncmUgYmVpbmcgZXh0cmEgcGFyYW5vaWQgaGVyZSBz
aW5jZSB0aGUgcHJpbnRpbmcgY29kZSBpcyBzbwotICAgICAgICAvLyBmcmFnaWxlLiBEbyBub3Ro
aW5nLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlIHByaW50IGpvYiBjdXJyZW50
bHkgaW4gcHJvZ3Jlc3MsIGFuZAotICAgICAgICAvLyB0aGUgcHJpbnQgam9iIGN1cnJlbnRseSBp
biBwcm9ncmVzcyBpcyByZXNwb25zaWJsZSBmb3IgaXRzIG93biBjbGVhbnVwLgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGUgcHJpbnQg
am9iIHRoYXQga2lja2VkIG9mZiB0aGlzIGRlbGF5ZWQgY2FsbCBoYXMgZmluaXNoZWQsIGFuZCB0
aGlzIHZpZXcgaXMgbm90IGJlaW5nCi0gICAgICAgIC8vIHByaW50ZWQgYWdhaW4uIFdlIGV4cGVj
dCB0aGF0IG5vIG90aGVyIHByaW50IGpvYiBoYXMgc3RhcnRlZC4gU2luY2UgdGhpcyBkZWxheWVk
IGNhbGwgd2Fzbid0Ci0gICAgICAgIC8vIGNhbmNlbGxlZCwgYmVnaW5Eb2N1bWVudCBhbmQgZW5k
RG9jdW1lbnQgbXVzdCBub3QgaGF2ZSBiZWVuIGNhbGxlZCwgYW5kIHdlIG5lZWQgdG8gY2xlYW4g
dXAKLSAgICAgICAgLy8gdGhlIHByaW50IG1vZGUgaGVyZS4KLSAgICAgICAgQVNTRVJUKGN1cnJl
bnRPcGVyYXRpb24gPT0gbmlsKTsKLSAgICAgICAgW3NlbGYgX2VuZFByaW50TW9kZV07Ci0gICAg
fQotfQotCi0vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhdmFpbGFibGUgZm9yIHByaW50
aW5nCi0tIChCT09MKWtub3dzUGFnZVJhbmdlOihOU1JhbmdlUG9pbnRlcilyYW5nZQotewotICAg
IC8vIE11c3QgZG8gdGhpcyBleHBsaWNpdCBkaXNwbGF5IGhlcmUsIGJlY2F1c2Ugb3RoZXJ3aXNl
IHRoZSB2aWV3IG1pZ2h0IHJlZGlzcGxheSB3aGlsZSB0aGUgcHJpbnQKLSAgICAvLyBzaGVldCB3
YXMgdXAsIHVzaW5nIHByaW50ZXIgZm9udHMgKGFuZCBsb29raW5nIGRpZmZlcmVudCkuCi0gICAg
W3NlbGYgZGlzcGxheUlmTmVlZGVkXTsKLSAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxh
eTpOT107Ci0gICAgCi0gICAgLy8gSWYgd2UgYXJlIGEgZnJhbWVzZXQganVzdCBwcmludCB3aXRo
IHRoZSBsYXlvdXQgd2UgaGF2ZSBvbnNjcmVlbiwgb3RoZXJ3aXNlIHJlbGF5b3V0Ci0gICAgLy8g
YWNjb3JkaW5nIHRvIHRoZSBwYXBlciBzaXplCi0gICAgZmxvYXQgbWluTGF5b3V0V2lkdGggPSAw
LjBmOwotICAgIGZsb2F0IG1heExheW91dFdpZHRoID0gMC4wZjsKLSAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBO
TzsKLSAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNG
cmFtZVNldCgpKSB7Ci0gICAgICAgIGZsb2F0IHBhcGVyV2lkdGggPSBbc2VsZiBfYXZhaWxhYmxl
UGFwZXJXaWR0aEZvclByaW50T3BlcmF0aW9uOltOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVy
YXRpb25dXTsKLSAgICAgICAgbWluTGF5b3V0V2lkdGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdN
aW5pbXVtU2hyaW5rRmFjdG9yOwotICAgICAgICBtYXhMYXlvdXRXaWR0aCA9IHBhcGVyV2lkdGgg
KiBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7Ci0gICAgfQotICAgIFtzZWxmIF9zZXRQcmlu
dGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDptaW5MYXlvdXRXaWR0aCBtYXhpbXVtUGFnZVdpZHRo
Om1heExheW91dFdpZHRoIGFkanVzdFZpZXdTaXplOllFU107IC8vIHdpbGwgcmVsYXlvdXQKLSAg
ICBOU1ByaW50T3BlcmF0aW9uICpwcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1
cnJlbnRPcGVyYXRpb25dOwotICAgIC8vIENlcnRhaW4gdHlwZXMgb2YgZXJyb3JzLCBpbmNsdWRp
bmcgaW52YWxpZCBwYWdlIHJhbmdlcywgY2FuIGNhdXNlIGJlZ2luRG9jdW1lbnQgYW5kCi0gICAg
Ly8gZW5kRG9jdW1lbnQgdG8gYmUgc2tpcHBlZCBhZnRlciB3ZSd2ZSBwdXQgb3Vyc2VsdmVzIGlu
IHByaW50IG1vZGUgKHNlZSA0MTQ1OTA1KS4gSW4gdGhvc2UgY2FzZXMKLSAgICAvLyB3ZSBuZWVk
IHRvIGdldCBvdXQgb2YgcHJpbnQgbW9kZSB3aXRob3V0IHJlbHlpbmcgb24gYW55IG1vcmUgY2Fs
bGJhY2tzIGZyb20gdGhlIHByaW50aW5nIG1lY2hhbmlzbS4KLSAgICAvLyBJZiB3ZSBnZXQgYXMg
ZmFyIGFzIGJlZ2luRG9jdW1lbnQgd2l0aG91dCB0cm91YmxlLCB0aGVuIHRoaXMgZGVsYXllZCBy
ZXF1ZXN0IHdpbGwgYmUgY2FuY2VsbGVkLgotICAgIC8vIElmIG5vdCBjYW5jZWxsZWQsIHRoaXMg
ZGVsYXllZCBjYWxsIHdpbGwgYmUgaW52b2tlZCBpbiB0aGUgbmV4dCBwYXNzIHRocm91Z2ggdGhl
IG1haW4gZXZlbnQgbG9vcCwKLSAgICAvLyB3aGljaCBpcyBhZnRlciBiZWdpbkRvY3VtZW50IGFu
ZCBlbmREb2N1bWVudCB3b3VsZCBiZSBjYWxsZWQuCi0gICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6cHJpbnRPcGVyYXRp
b24gYWZ0ZXJEZWxheTowXTsKLSAgICBbW3NlbGYgX3dlYlZpZXddIF9hZGp1c3RQcmludGluZ01h
cmdpbnNGb3JIZWFkZXJBbmRGb290ZXJdOwotICAgIAotICAgIC8vIFRoZXJlIGlzIGEgdGhlb3Jl
dGljYWwgY2hhbmNlIHRoYXQgc29tZW9uZSBjb3VsZCBkbyBzb21lIGRyYXdpbmcgYmV0d2VlbiBo
ZXJlIGFuZCBlbmREb2N1bWVudCwKLSAgICAvLyBpZiBzb21ldGhpbmcgY2F1c2VkIHNldE5lZWRz
RGlzcGxheSBhZnRlciB0aGlzIHBvaW50LiBJZiBzbywgaXQncyBub3QgYSBiaWcgdHJhZ2VkeSwg
YmVjYXVzZQotICAgIC8vIHlvdSdkIHNpbXBseSBzZWUgdGhlIHByaW50ZXIgZm9udHMgb24gc2Ny
ZWVuLiBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMgZG9lcyBub3QgaGFwcGVuIHdpdGggU2FmYXJp
LgotCi0gICAgcmFuZ2UtPmxvY2F0aW9uID0gMTsKLSAgICBmbG9hdCB0b3RhbFNjYWxlRmFjdG9y
ID0gW3NlbGYgX3NjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRpb25dOwot
ICAgIGZsb2F0IHVzZXJTY2FsZUZhY3RvciA9IFtwcmludE9wZXJhdGlvbiBfd2ViX3BhZ2VTZXR1
cFNjYWxlRmFjdG9yXTsKLSAgICBbX3ByaXZhdGUtPnBhZ2VSZWN0cyByZWxlYXNlXTsKLSAgICBm
bG9hdCBmdWxsUGFnZUhlaWdodCA9IGZsb29yZihbc2VsZiBfY2FsY3VsYXRlUHJpbnRIZWlnaHRd
L3RvdGFsU2NhbGVGYWN0b3IpOwotICAgIE5TQXJyYXkgKm5ld1BhZ2VSZWN0cyA9IFtbc2VsZiBf
ZnJhbWVdIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhTY2FsZUZhY3Rvcjp1c2VyU2Nh
bGVGYWN0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHRdOwot
ICAgIAotICAgIC8vIEFwcEtpdCBnZXRzIGFsbCBtZXNzZWQgdXAgaWYgeW91IGdpdmUgaXQgYSB6
ZXJvLWxlbmd0aCBwYWdlIGNvdW50IChzZWUgMzU3NjMzNCksIHNvIGlmIHdlCi0gICAgLy8gaGl0
IHRoYXQgY2FzZSB3ZSdsbCBwYXNzIGFsb25nIGEgZGVnZW5lcmF0ZSAxIHBpeGVsIHNxdWFyZSB0
byBwcmludC4gVGhpcyB3aWxsIHByaW50Ci0gICAgLy8gYSBibGFuayBwYWdlICh3aXRoIGNvcnJl
Y3QtbG9va2luZyBoZWFkZXIgYW5kIGZvb3RlciBpZiB0aGF0IG9wdGlvbiBpcyBvbiksIHdoaWNo
IG1hdGNoZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgSUUgYW5kIENhbWlubyBhdCBsZWFzdC4K
LSAgICBpZiAoW25ld1BhZ2VSZWN0cyBjb3VudF0gPT0gMCkKLSAgICAgICAgbmV3UGFnZVJlY3Rz
ID0gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNNYWtl
UmVjdCgwLCAwLCAxLCAxKV1dOwotICAgIGVsc2UgaWYgKFtuZXdQYWdlUmVjdHMgY291bnRdID4g
MSkgewotICAgICAgICAvLyBJZiB0aGUgbGFzdCBwYWdlIGlzIGEgc2hvcnQgb3JwaGFuLCB0cnkg
YWRqdXN0aW5nIHRoZSBwcmludCBoZWlnaHQgc2xpZ2h0bHkgdG8gc2VlIGlmIHRoaXMgd2lsbCBz
cXVlZXplIHRoZQotICAgICAgICAvLyBjb250ZW50IG9udG8gb25lIGZld2VyIHBhZ2UuIElmIGl0
IGRvZXMsIHVzZSB0aGUgYWRqdXN0ZWQgc2NhbGUuIElmIG5vdCwgdXNlIHRoZSBvcmlnaW5hbCBz
Y2FsZS4KLSAgICAgICAgZmxvYXQgbGFzdFBhZ2VIZWlnaHQgPSBOU0hlaWdodChbW25ld1BhZ2VS
ZWN0cyBsYXN0T2JqZWN0XSByZWN0VmFsdWVdKTsKLSAgICAgICAgaWYgKGxhc3RQYWdlSGVpZ2h0
L2Z1bGxQYWdlSGVpZ2h0IDwgTGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0aW8pIHsKLSAgICAgICAg
ICAgIE5TQXJyYXkgKmFkanVzdGVkUGFnZVJlY3RzID0gW1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQ
YWdlUmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvcgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHQqUHJpbnRp
bmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50XTsKLSAgICAgICAgICAgIC8vIFVzZSB0aGUgYWRqdXN0
ZWQgcmVjdHMgb25seSBpZiB0aGUgcGFnZSBjb3VudCB3ZW50IGRvd24KLSAgICAgICAgICAgIGlm
IChbYWRqdXN0ZWRQYWdlUmVjdHMgY291bnRdIDwgW25ld1BhZ2VSZWN0cyBjb3VudF0pIHsKLSAg
ICAgICAgICAgICAgICBuZXdQYWdlUmVjdHMgPSBhZGp1c3RlZFBhZ2VSZWN0czsKLSAgICAgICAg
ICAgICAgICBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhhbiA9IFlFUzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gW25l
d1BhZ2VSZWN0cyByZXRhaW5dOwotICAgIAotICAgIHJhbmdlLT5sZW5ndGggPSBbX3ByaXZhdGUt
PnBhZ2VSZWN0cyBjb3VudF07Ci0gICAgCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLy8gUmV0dXJu
IHRoZSBkcmF3aW5nIHJlY3RhbmdsZSBmb3IgYSBwYXJ0aWN1bGFyIHBhZ2UgbnVtYmVyCi0tIChO
U1JlY3QpcmVjdEZvclBhZ2U6KE5TSW50ZWdlcilwYWdlCi17Ci0gICAgcmV0dXJuIFtbX3ByaXZh
dGUtPnBhZ2VSZWN0cyBvYmplY3RBdEluZGV4OnBhZ2UgLSAxXSByZWN0VmFsdWVdOwotfQotCi0t
ICh2b2lkKWRyYXdQYWdlQm9yZGVyV2l0aFNpemU6KE5TU2l6ZSlib3JkZXJTaXplCi17Ci0gICAg
QVNTRVJUKE5TRXF1YWxTaXplcyhib3JkZXJTaXplLCBbW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJl
bnRPcGVyYXRpb25dIHByaW50SW5mb10gcGFwZXJTaXplXSkpOyAgICAKLSAgICBbW3NlbGYgX3dl
YlZpZXddIF9kcmF3SGVhZGVyQW5kRm9vdGVyXTsKLX0KLQotLSAodm9pZCliZWdpbkRvY3VtZW50
Ci17Ci0gICAgQHRyeSB7Ci0gICAgICAgIC8vIEZyb20gbm93IG9uIHdlJ2xsIGdldCBhIGNoYW5j
ZSB0byBjYWxsIF9lbmRQcmludE1vZGUgaW4gZWl0aGVyIGJlZ2luRG9jdW1lbnQgb3IKLSAgICAg
ICAgLy8gZW5kRG9jdW1lbnQsIHNvIHdlIGNhbiBjYW5jZWwgdGhlICJqdXN0IGluIGNhc2UiIHBl
bmRpbmcgY2FsbC4KLSAgICAgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVl
c3RzV2l0aFRhcmdldDpzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpb
TlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXV07Ci0gICAgICAgIFtzdXBlciBiZWdp
bkRvY3VtZW50XTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmxvY2FsRXhjZXB0aW9uKSB7
Ci0gICAgICAgIC8vIEV4Y2VwdGlvbiBkdXJpbmcgW3N1cGVyIGJlZ2luRG9jdW1lbnRdIG1lYW5z
IHRoYXQgZW5kRG9jdW1lbnQgd2lsbCBub3QgZ2V0IGNhbGxlZCwKLSAgICAgICAgLy8gc28gd2Ug
bmVlZCB0byBjbGVhbiB1cCBvdXIgInByaW50IG1vZGUiIGhlcmUuCi0gICAgICAgIFtzZWxmIF9l
bmRQcmludE1vZGVdOwotICAgIH0KLX0KLQotLSAodm9pZCllbmREb2N1bWVudAotewotICAgIFtz
dXBlciBlbmREb2N1bWVudF07Ci0gICAgLy8gTm90ZSBzYWRseSBhdCB0aGlzIHBvaW50IFtOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl0gaXMgc3RpbGwgTk8g
Ci0gICAgW3NlbGYgX2VuZFByaW50TW9kZV07Ci19Ci0KLS0gKHZvaWQpa2V5RG93bjooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8g
dGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRj
aGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5k
IHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRo
YXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgot
ICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBSZXRhaW5QdHI8V2ViSFRN
TFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJD
b3JlID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQpOwotCi0gICAgQk9PTCBjYWxs
U3VwZXIgPSBOTzsKLQotICAgIFtfcHJpdmF0ZS0+a2V5RG93bkV2ZW50IHJlbGVhc2VdOwotICAg
IF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKLQotICAgIEJPT0wgY29t
cGxldGlvblBvcHVwV2FzT3BlbiA9IF9wcml2YXRlLT5jb21wQ29udHJvbGxlciAmJiBbX3ByaXZh
dGUtPmNvbXBDb250cm9sbGVyIHBvcHVwV2luZG93SXNPcGVuXTsKLSAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29y
ZSAmJiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZl
bnQpKSB7Ci0gICAgICAgIC8vIFdlYkNvcmUgcHJvY2Vzc2VkIGEga2V5IGV2ZW50LCBiYWlsIG9u
IGFueSBwcmVleGlzdGluZyBjb21wbGV0ZTogVUkKLSAgICAgICAgaWYgKGNvbXBsZXRpb25Qb3B1
cFdhc09wZW4pCi0gICAgICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVy
dGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwotICAgIH0gZWxzZSBpZiAoIV9wcml2YXRlLT5j
b21wQ29udHJvbGxlciB8fCAhW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBmaWx0ZXJLZXlEb3du
OmV2ZW50XSkgewotICAgICAgICAvLyBOb3QgY29uc3VtZWQgYnkgY29tcGxldGU6IHBvcHVwIHdp
bmRvdwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5n
ZTpZRVMgbW92ZUxlZnQ6Tk9dOwotICAgICAgICBjYWxsU3VwZXIgPSBZRVM7Ci0gICAgfQotICAg
IGlmIChjYWxsU3VwZXIpCi0gICAgICAgIFtzdXBlciBrZXlEb3duOmV2ZW50XTsKLSAgICBlbHNl
Ci0gICAgICAgIFtOU0N1cnNvciBzZXRIaWRkZW5VbnRpbE1vdXNlTW92ZXM6WUVTXTsKLX0KLQot
LSAodm9pZClrZXlVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5j
ZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBs
b29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBv
bGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJy
ZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2Vi
S2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0K
LSAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50
ID09IGV2ZW50KTsKLQotICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9
IHNlbGY7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
aWYgKGNvcmVGcmFtZSAmJiAhZXZlbnRXYXNTZW50VG9XZWJDb3JlKQotICAgICAgICBjb3JlRnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7Ci0gICAgZWxzZQotICAgICAgICBb
c3VwZXIga2V5VXA6ZXZlbnRdOwotfQotCi0tICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAq
KWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhp
cyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGlu
ZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRo
ZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQg
ZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAg
IFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBjb3JlRnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKLSAgICAK
LSAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotCi0gICAg
dW5zaWduZWQgc2hvcnQga2V5Q29kZSA9IFtldmVudCBrZXlDb2RlXTsKLQotICAgIC8vRG9uJ3Qg
bWFrZSBhbiBldmVudCBmcm9tIHRoZSBudW0gbG9jayBhbmQgZnVuY3Rpb24ga2V5cwotICAgIGlm
IChjb3JlRnJhbWUgJiYga2V5Q29kZSAhPSAwICYmIGtleUNvZGUgIT0gMTAgJiYga2V5Q29kZSAh
PSA2MykgewotICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0
Zm9ybUtleWJvYXJkRXZlbnQoZXZlbnQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAg
ICAgCi0gICAgW3N1cGVyIGZsYWdzQ2hhbmdlZDpldmVudF07Ci19Ci0KLS0gKGlkKWFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKLXsKLSAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0
dHJpYnV0ZV0pIHsKLSAgICAgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3Np
YmlsaXR5VHJlZV07Ci0gICAgICAgIGlmIChhY2NUcmVlKQotICAgICAgICAgICAgcmV0dXJuIFtO
U0FycmF5IGFycmF5V2l0aE9iamVjdDphY2NUcmVlXTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICB9Ci0gICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmli
dXRlTmFtZV07Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50Ci17Ci0g
ICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07Ci0gICAg
aWYgKGFjY1RyZWUpCi0gICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5Rm9jdXNl
ZFVJRWxlbWVudF07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlI
aXRUZXN0OihOU1BvaW50KXBvaW50Ci17Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVd
IF9hY2Nlc3NpYmlsaXR5VHJlZV07Ci0gICAgaWYgKGFjY1RyZWUpIHsKLSAgICAgICAgTlNQb2lu
dCB3aW5kb3dDb29yZCA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6cG9pbnRd
OwotICAgICAgICByZXR1cm4gW2FjY1RyZWUgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6W3NlbGYgY29u
dmVydFBvaW50OndpbmRvd0Nvb3JkIGZyb21WaWV3Om5pbF1dOwotICAgIH0KLSAgICByZXR1cm4g
c2VsZjsKLX0KLQotLSAoaWQpX2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcg
KilzdWJ2aWV3Ci17Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmls
aXR5VHJlZV07Ci0gICAgaWYgKCFhY2NUcmVlKQotICAgICAgICByZXR1cm4gc2VsZjsKLSAgICBp
ZCBwYXJlbnQgPSBbYWNjVHJlZSBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6c3Vidmll
d107Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiBzZWxmOwotICAgIHJldHVybiBw
YXJlbnQ7Ci19Ci0KLS0gKHZvaWQpY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQpc2Vu
ZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPnJldmVhbFNlbGVjdGlv
bihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKLX0KLQotLSAoTlNEYXRhICop
X3NlbGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNBc1JURgotewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5n
ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAieCIKLSAgICAg
ICAgYXR0cmlidXRlczpjb3JlRnJhbWUgPyBjb3JlRnJhbWUtPmZvbnRBdHRyaWJ1dGVzRm9yU2Vs
ZWN0aW9uU3RhcnQoKSA6IG5pbF07Ci0gICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBSVEZGcm9t
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6
bmlsXTsKLSAgICBbc3RyaW5nIHJlbGVhc2VdOwotICAgIHJldHVybiBkYXRhOwotfQotCi0tIChO
U0RpY3Rpb25hcnkgKilfZm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmQKLXsKLSAgICBO
U1Bhc3RlYm9hcmQgKmZvbnRQYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0
aE5hbWU6TlNGb250UGJvYXJkXTsKLSAgICBpZiAoZm9udFBhc3RlYm9hcmQgPT0gbmlsKQotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIE5TRGF0YSAqZGF0YSA9IFtmb250UGFzdGVib2FyZCBkYXRh
Rm9yVHlwZTpOU0ZvbnRQYm9hcmRUeXBlXTsKLSAgICBpZiAoZGF0YSA9PSBuaWwgfHwgW2RhdGEg
bGVuZ3RoXSA9PSAwKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIC8vIE5TVGV4dFZpZXcgZG9l
cyBzb21ldGhpbmcgbW9yZSBlZmZpY2llbnQgYnkgcGFyc2luZyB0aGUgYXR0cmlidXRlcyBvbmx5
LCBidXQgdGhhdCdzIG5vdCBhdmFpbGFibGUgaW4gQVBJLgotICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqc3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpkYXRh
IGRvY3VtZW50QXR0cmlidXRlczpOVUxMXSBhdXRvcmVsZWFzZV07Ci0gICAgaWYgKHN0cmluZyA9
PSBuaWwgfHwgW3N0cmluZyBsZW5ndGhdID09IDApCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
cmV0dXJuIFtzdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpXTsK
LX0KLQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9lbXB0eVN0eWxlCi17Ci0gICAgcmV0
dXJuIFtbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gY3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlv
bl07Ci19Ci0KLS0gKE5TU3RyaW5nICopX2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcgot
ewotICAgIE5TQ29sb3IgKnJnYkNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFt
ZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwotICAgIC8vIEZJWE1FOiBJZiBjb2xvciBpcyBub24t
bmlsIGFuZCByZ2JDb2xvciBpcyBuaWwsIHRoYXQgbWVhbnMgd2UgZ290IHNvbWUga2luZAotICAg
IC8vIG9mIGZhbmN5IGNvbG9yIHRoYXQgY2FuJ3QgYmUgY29udmVydGVkIHRvIFJHQi4gQ2hhbmdp
bmcgdGhhdCB0byAidHJhbnNwYXJlbnQiCi0gICAgLy8gbWlnaHQgbm90IGJlIGdyZWF0LCBidXQg
aXQncyBwcm9iYWJseSBPSy4KLSAgICBpZiAocmdiQ29sb3IgPT0gbmlsKQotICAgICAgICByZXR1
cm4gQCJ0cmFuc3BhcmVudCI7Ci0gICAgZmxvYXQgciA9IFtyZ2JDb2xvciByZWRDb21wb25lbnRd
OwotICAgIGZsb2F0IGcgPSBbcmdiQ29sb3IgZ3JlZW5Db21wb25lbnRdOwotICAgIGZsb2F0IGIg
PSBbcmdiQ29sb3IgYmx1ZUNvbXBvbmVudF07Ci0gICAgZmxvYXQgYSA9IFtyZ2JDb2xvciBhbHBo
YUNvbXBvbmVudF07Ci0gICAgaWYgKGEgPT0gMCkKLSAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJl
bnQiOwotICAgIGlmIChyID09IDAgJiYgZyA9PSAwICYmIGIgPT0gMCAmJiBhID09IDEpCi0gICAg
ICAgIHJldHVybiBAImJsYWNrIjsKLSAgICBpZiAociA9PSAxICYmIGcgPT0gMSAmJiBiID09IDEg
JiYgYSA9PSAxKQotICAgICAgICByZXR1cm4gQCJ3aGl0ZSI7Ci0gICAgLy8gRklYTUU6IExvdHMg
bW9yZSBuYW1lZCBjb2xvcnMuIE1heWJlIHdlIGNvdWxkIHVzZSB0aGUgdGFibGUgaW4gV2ViQ29y
ZT8KLSAgICBpZiAoYSA9PSAxKQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCJyZ2IoJS4wZiwlLjBmLCUuMGYpIiwgciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07
Ci0gICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiYSglLjBmLCUuMGYs
JS4wZiwlZikiLCByICogMjU1LCBnICogMjU1LCBiICogMjU1LCBhXTsKLX0KLQotLSAoTlNTdHJp
bmcgKilfc2hhZG93QXNTdHJpbmc6KE5TU2hhZG93ICopc2hhZG93Ci17Ci0gICAgaWYgKHNoYWRv
dyA9PSBuaWwpCi0gICAgICAgIHJldHVybiBAIm5vbmUiOwotICAgIE5TU2l6ZSBvZmZzZXQgPSBb
c2hhZG93IHNoYWRvd09mZnNldF07Ci0gICAgZmxvYXQgYmx1clJhZGl1cyA9IFtzaGFkb3cgc2hh
ZG93Qmx1clJhZGl1c107Ci0gICAgaWYgKG9mZnNldC53aWR0aCA9PSAwICYmIG9mZnNldC5oZWln
aHQgPT0gMCAmJiBibHVyUmFkaXVzID09IDApCi0gICAgICAgIHJldHVybiBAIm5vbmUiOwotICAg
IE5TQ29sb3IgKmNvbG9yID0gW3NoYWRvdyBzaGFkb3dDb2xvcl07Ci0gICAgaWYgKGNvbG9yID09
IG5pbCkKLSAgICAgICAgcmV0dXJuIEAibm9uZSI7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBub24t
aW50ZWdyYWwgdmFsdWVzIGhlcmU/Ci0gICAgaWYgKGJsdXJSYWRpdXMgPT0gMCkKLSAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJS4wZnB4ICUuMGZweCIsIFtz
ZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXSwgb2Zmc2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0XTsK
LSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlLjBmcHggJS4wZnB4
ICUuMGZweCIsIFtzZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXSwgb2Zmc2V0LndpZHRoLCBvZmZz
ZXQuaGVpZ2h0LCBibHVyUmFkaXVzXTsKLX0KLQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAq
KV9zdHlsZUZyb21Gb250QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeQotewot
ICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOwot
Ci0gICAgTlNDb2xvciAqY29sb3IgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNCYWNrZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBbc3R5bGUgc2V0QmFja2dyb3VuZENvbG9yOltz
ZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXV07Ci0KLSAgICBOU0ZvbnQgKmZvbnQgPSBbZGljdGlv
bmFyeSBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKCFmb250KSB7
Ci0gICAgICAgIFtzdHlsZSBzZXRGb250RmFtaWx5OkAiSGVsdmV0aWNhIl07Ci0gICAgICAgIFtz
dHlsZSBzZXRGb250U2l6ZTpAIjEycHgiXTsKLSAgICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6
QCJub3JtYWwiXTsKLSAgICAgICAgW3N0eWxlIHNldEZvbnRTdHlsZTpAIm5vcm1hbCJdOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hh
cmVkRm9udE1hbmFnZXJdOwotICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0
ZWQgZXNjYXBpbmcgY29kZSBpZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKLSAgICAg
ICAgLy8gd2l0aCBjaGFyYWN0ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0
aGVpciBuYW1lcy4KLSAgICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCInJUAnIiwgW2ZvbnQgZmFtaWx5TmFtZV1dXTsKLSAgICAgICAgW3N0eWxl
IHNldEZvbnRTaXplOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJTAuZnB4IiwgW2ZvbnQg
cG9pbnRTaXplXV1dOwotICAgICAgICAvLyBGSVhNRTogTWFwIHRvIHRoZSBlbnRpcmUgcmFuZ2Ug
b2YgQ1NTIHdlaWdodCB2YWx1ZXMuCi0gICAgICAgIGlmIChbZm0gd2VpZ2h0T2ZGb250OmZvbnRd
ID49IE1JTl9CT0xEX1dFSUdIVCkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAi
Ym9sZCJdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpA
Im5vcm1hbCJdOwotICAgICAgICBpZiAoW2ZtIHRyYWl0c09mRm9udDpmb250XSAmIE5TSXRhbGlj
Rm9udE1hc2spCi0gICAgICAgICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOkAiaXRhbGljIl07Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6QCJub3JtYWwiXTsK
LSAgICB9Ci0KLSAgICBjb2xvciA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZvcmVncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIFtzdHlsZSBzZXRDb2xvcjpjb2xvciA/IFtzZWxm
IF9jb2xvckFzU3RyaW5nOmNvbG9yXSA6IChOU1N0cmluZyAqKUAiYmxhY2siXTsKLQotICAgIE5T
U2hhZG93ICpzaGFkb3cgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1
dGVOYW1lXTsKLSAgICBbc3R5bGUgc2V0VGV4dFNoYWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6
c2hhZG93XV07Ci0KLSAgICBpbnQgc3RyaWtldGhyb3VnaEludCA9IFtbZGljdGlvbmFyeSBvYmpl
Y3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0K
LSAgICBpbnQgc3VwZXJzY3JpcHRJbnQgPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3Vw
ZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0gICAgaWYgKHN1cGVyc2NyaXB0SW50
ID4gMCkKLSAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdXBlciJdOwotICAgIGVs
c2UgaWYgKHN1cGVyc2NyaXB0SW50IDwgMCkKLSAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxp
Z246QCJzdWIiXTsKLSAgICBlbHNlCi0gICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAi
YmFzZWxpbmUiXTsKLSAgICBpbnQgdW5kZXJsaW5lSW50ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZv
cktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIC8vIEZJ
WE1FOiBVbmRlcmxpbmUgd2lucyBoZXJlIGlmIHdlIGhhdmUgYm90aCAoc2VlIGJ1ZyAzNzkwNDQz
KS4KLSAgICBpZiAoc3RyaWtldGhyb3VnaEludCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSAmJiB1
bmRlcmxpbmVJbnQgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCi0gICAgICAgIFtzdHlsZSBzZXRQ
cm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25l
IiBwcmlvcml0eTpAIiJdOwotICAgIGVsc2UgaWYgKHVuZGVybGluZUludCA9PSBOU1VuZGVybGlu
ZVN0eWxlTm9uZSkKLSAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVj
b3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsK
LSAgICBlbHNlCi0gICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29y
YXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRlcmxpbmUiIHByaW9yaXR5OkAiIl07Ci0KLSAg
ICByZXR1cm4gc3R5bGU7Ci19Ci0KLS0gKHZvaWQpX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjooRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihFZGl0QWN0aW9uKXVu
ZG9BY3Rpb24KLXsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihj
b3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7Ci19Ci0KLS0gKHZvaWQpX2FwcGx5UGFyYWdyYXBoU3R5
bGVUb1NlbGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0
aW9uOihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KLXsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5
UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7Ci19Ci0K
LS0gKEJPT0wpX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0g
ICAgQVNTRVJUKFtzZWxmIF93ZWJWaWV3XSk7Ci0gICAgaWYgKCFbW1tzZWxmIF93ZWJWaWV3XSBw
cmVmZXJlbmNlc10gcmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50c10pCi0gICAgICAg
IHJldHVybiBOTzsKLSAgICAKLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0
dXJuIE5POwotICAgIAotICAgIGlmICgoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJ
bmRlcGVuZGVudE1vZGlmaWVyRmxhZ3NNYXNrKSAhPSBOU0NvbW1hbmRLZXlNYXNrKQotICAgICAg
ICByZXR1cm4gTk87Ci0gICAgCi0gICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0
ZXJzXTsKLSAgICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiYiJdID09IE5T
T3JkZXJlZFNhbWUpIHsKLSAgICAgICAgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOiJU
b2dnbGVCb2xkIl07Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIGlmIChbc3RyaW5n
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJpIl0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAg
ICBbc2VsZiBleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6IlRvZ2dsZUl0YWxpYyJdOwotICAgICAg
ICByZXR1cm4gWUVTOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKEJPT0wp
cGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3Mg
YSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQg
ZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFz
ZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0
aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5z
aWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVh
c2VdOwotCi0gICAgaWYgKFtzZWxmIF9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6ZXZlbnRdKQot
ICAgICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3Jl
ID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQpOwotICAgIEJPT0wgcmV0ID0gTk87
Ci0KLSAgICBbX3ByaXZhdGUtPmtleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+
a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07Ci0gICAgCi0gICAgW3NlbGYgcmV0YWluXTsK
LQotICAgIC8vIFBhc3MgY29tbWFuZC1rZXkgY29tYm9zIHRocm91Z2ggV2ViQ29yZSBpZiB0aGVy
ZSBpcyBhIGtleSBiaW5kaW5nIGF2YWlsYWJsZSBmb3IKLSAgICAvLyB0aGlzIGV2ZW50LiBUaGlz
IGxldHMgd2ViIHBhZ2VzIGhhdmUgYSBjcmFjayBhdCBpbnRlcmNlcHRpbmcgY29tbWFuZC1tb2Rp
ZmllZCBrZXlwcmVzc2VzLgotICAgIC8vIEJ1dCBkb24ndCBkbyBpdCBpZiB3ZSBoYXZlIGFscmVh
ZHkgaGFuZGxlZCB0aGUgZXZlbnQuCi0gICAgLy8gUHJlc3NpbmcgRXNjIHJlc3VsdHMgaW4gYSBm
YWtlIGV2ZW50IGJlaW5nIHNlbnQgLSBkb24ndCBwYXNzIGl0IHRvIFdlYkNvcmUuCi0gICAgaWYg
KCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgZXZlbnQgPT0gW05TQXBwIGN1cnJlbnRFdmVudF0g
JiYgc2VsZiA9PSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl0pCi0gICAgICAgIGlmIChG
cmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICAgICAgcmV0ID0gZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7Ci0KLSAgICBpZiAoIXJldCkKLSAg
ICAgICAgcmV0ID0gW3N1cGVyIHBlcmZvcm1LZXlFcXVpdmFsZW50OmV2ZW50XTsKLQotICAgIFtz
ZWxmIHJlbGVhc2VdOwotICAgIAotICAgIHJldHVybiByZXQ7Ci19Ci0KLS0gKHZvaWQpY29weUZv
bnQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIFB1dCBSVEYg
d2l0aCBmb250IGF0dHJpYnV0ZXMgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgLy8gTWF5YmUgbGF0
ZXIgd2Ugc2hvdWxkIGFkZCBhIHBhc3RlYm9hcmQgdHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0
IGZvciAibmF0aXZlIiBjb3B5IGFuZCBwYXN0ZSBmb250LgotICAgIE5TUGFzdGVib2FyZCAqZm9u
dFBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpOU0ZvbnRQYm9h
cmRdOwotICAgIFtmb250UGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6W05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0Ok5TRm9udFBib2FyZFR5cGVdIG93bmVyOm5pbF07Ci0gICAgW2ZvbnRQYXN0ZWJvYXJk
IHNldERhdGE6W3NlbGYgX3NlbGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNBc1JURl0gZm9yVHlw
ZTpOU0ZvbnRQYm9hcmRUeXBlXTsKLX0KLQotLSAodm9pZClwYXN0ZUZvbnQ6KGlkKXNlbmRlcgot
ewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIFJlYWQgUlRGIHdpdGggZm9udCBhdHRy
aWJ1dGVzIGZyb20gdGhlIHBhc3RlYm9hcmQuCi0gICAgLy8gTWF5YmUgbGF0ZXIgd2Ugc2hvdWxk
IGFkZCBhIHBhc3RlYm9hcmQgdHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0IGZvciAibmF0aXZl
IiBjb3B5IGFuZCBwYXN0ZSBmb250LgotICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246
W3NlbGYgX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVzOltzZWxmIF9mb250QXR0cmlidXRlc0Zyb21G
b250UGFzdGVib2FyZF1dIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25QYXN0ZUZvbnRdOwotfQot
Ci0tICh2b2lkKXBhc3RlQXNSaWNoVGV4dDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9M
T0dVRQotCi0gICAgLy8gU2luY2UgcmljaCB0ZXh0IGFsd2F5cyBiZWF0cyBwbGFpbiB0ZXh0IHdo
ZW4gYm90aCBhcmUgb24gdGhlIHBhc3RlYm9hcmQsIGl0J3Mgbm90Ci0gICAgLy8gY2xlYXIgaG93
IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gcGxhaW4gb2xkIHBhc3RlLgotICAgIFtzZWxmIF9wYXN0
ZVdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93UGxh
aW5UZXh0Ok5PXTsKLX0KLQotLSAoTlNGb250ICopX29yaWdpbmFsRm9udEEKLXsKLSAgICByZXR1
cm4gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0aEZhbWlseTpAIkhl
bHZldGljYSIgdHJhaXRzOjAgd2VpZ2h0OlNUQU5EQVJEX1dFSUdIVCBzaXplOjEwLjBmXTsKLX0K
LQotLSAoTlNGb250ICopX29yaWdpbmFsRm9udEIKLXsKLSAgICByZXR1cm4gW1tOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0aEZhbWlseTpAIlRpbWVzIiB0cmFpdHM6TlNG
b250SXRhbGljVHJhaXQgd2VpZ2h0OlNUQU5EQVJEX0JPTERfV0VJR0hUIHNpemU6MTIuMGZdOwot
fQotCi0tICh2b2lkKV9hZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUg
Zm9udEE6KE5TRm9udCAqKWEgZm9udEI6KE5TRm9udCAqKWIKLXsKLSAgICAvLyBTaW5jZSB0aGVy
ZSdzIG5vIHdheSB0byBkaXJlY3RseSBhc2sgTlNGb250TWFuYWdlciB3aGF0IHN0eWxlIGNoYW5n
ZSBpdCdzIGdvaW5nIHRvIGRvCi0gICAgLy8gd2UgaW5zdGVhZCBwYXNzIHR3byAic3BlY2ltZW4i
IGZvbnRzIHRvIGl0IGFuZCBsZXQgaXQgY2hhbmdlIHRoZW0uIFdlIHRoZW4gZGVkdWNlIHdoYXQK
LSAgICAvLyBzdHlsZSBjaGFuZ2UgaXQgd2FzIGRvaW5nIGJ5IGxvb2tpbmcgYXQgd2hhdCBoYXBw
ZW5lZCB0byBlYWNoIG9mIHRoZSB0d28gZm9udHMuCi0gICAgLy8gU28gaWYgaXQgd2FzIG1ha2lu
ZyB0aGUgdGV4dCBib2xkLCBib3RoIGZvbnRzIHdpbGwgYmUgYm9sZCBhZnRlciB0aGUgZmFjdC4K
LQotICAgIGlmIChhID09IG5pbCB8fCBiID09IG5pbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
TlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0K
LSAgICBOU0ZvbnQgKm9hID0gW3NlbGYgX29yaWdpbmFsRm9udEFdOwotCi0gICAgTlNTdHJpbmcg
KmFGYW1pbHlOYW1lID0gW2EgZmFtaWx5TmFtZV07Ci0gICAgTlNTdHJpbmcgKmJGYW1pbHlOYW1l
ID0gW2IgZmFtaWx5TmFtZV07Ci0KLSAgICBpbnQgYVBvaW50U2l6ZSA9IChpbnQpW2EgcG9pbnRT
aXplXTsKLSAgICBpbnQgYlBvaW50U2l6ZSA9IChpbnQpW2IgcG9pbnRTaXplXTsKLQotICAgIGlu
dCBhV2VpZ2h0ID0gW2ZtIHdlaWdodE9mRm9udDphXTsKLSAgICBpbnQgYldlaWdodCA9IFtmbSB3
ZWlnaHRPZkZvbnQ6Yl07Ci0KLSAgICBCT09MIGFJc0l0YWxpYyA9IChbZm0gdHJhaXRzT2ZGb250
OmFdICYgTlNJdGFsaWNGb250TWFzaykgIT0gMDsKLSAgICBCT09MIGJJc0l0YWxpYyA9IChbZm0g
dHJhaXRzT2ZGb250OmJdICYgTlNJdGFsaWNGb250TWFzaykgIT0gMDsKLQotICAgIGlmIChbYUZh
bWlseU5hbWUgaXNFcXVhbFRvU3RyaW5nOmJGYW1pbHlOYW1lXSkgewotICAgICAgICBOU1N0cmlu
ZyAqZmFtaWx5TmFtZUZvckNTUyA9IGFGYW1pbHlOYW1lOwotCi0gICAgICAgIC8vIFRoZSBmYW1p
bHkgbmFtZSBtYXkgbm90IGJlIHNwZWNpZmljIGVub3VnaCB0byBnZXQgdXMgdGhlIGZvbnQgc3Bl
Y2lmaWVkLgotICAgICAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgb25seSB3YXkgdG8gZ2V0IGV4
YWN0bHkgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdG8gdXNlCi0gICAgICAgIC8vIHRoZSBQ
b3N0c2NyaXB0IG5hbWUuCi0gICAgICAgIAotICAgICAgICAvLyBGaW5kIHRoZSBmb250IHRoZSBz
YW1lIHdheSB0aGUgcmVuZGVyaW5nIGNvZGUgd291bGQgbGF0ZXIgaWYgaXQgZW5jb3VudGVyZWQg
dGhpcyBDU1MuCi0gICAgICAgIE5TRm9udFRyYWl0TWFzayB0cmFpdHMgPSBhSXNJdGFsaWMgPyBO
U0ZvbnRJdGFsaWNUcmFpdCA6IDA7Ci0gICAgICAgIE5TRm9udCAqZm91bmRGb250ID0gV2ViQ29y
ZUZpbmRGb250KGFGYW1pbHlOYW1lLCB0cmFpdHMsIGFXZWlnaHQsIGFQb2ludFNpemUpOwotCi0g
ICAgICAgIC8vIElmIHdlIGRvbid0IGZpbmQgYSBmb250IHdpdGggdGhlIHNhbWUgUG9zdHNjcmlw
dCBuYW1lLCB0aGVuIHdlJ2xsIGhhdmUgdG8gdXNlIHRoZQotICAgICAgICAvLyBQb3N0c2NyaXB0
IG5hbWUgdG8gbWFrZSB0aGUgQ1NTIHNwZWNpZmljIGVub3VnaC4KLSAgICAgICAgaWYgKCFbW2Zv
dW5kRm9udCBmb250TmFtZV0gaXNFcXVhbFRvU3RyaW5nOlthIGZvbnROYW1lXV0pCi0gICAgICAg
ICAgICBmYW1pbHlOYW1lRm9yQ1NTID0gW2EgZm9udE5hbWVdOwotCi0gICAgICAgIC8vIEZJWE1F
OiBOZWVkIG1vcmUgc29waGlzdGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFu
ZGxlIGZhbWlseSBuYW1lcwotICAgICAgICAvLyB3aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUg
cXVvdGUgb3IgYmFja3NsYXNoIGluIHRoZWlyIG5hbWVzLgotICAgICAgICBbc3R5bGUgc2V0Rm9u
dEZhbWlseTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiclQCciLCBmYW1pbHlOYW1lRm9y
Q1NTXV07Ci0gICAgfQotCi0gICAgaW50IHNvYSA9IChpbnQpW29hIHBvaW50U2l6ZV07Ci0gICAg
aWYgKGFQb2ludFNpemUgPT0gYlBvaW50U2l6ZSkKLSAgICAgICAgW3N0eWxlIHNldEZvbnRTaXpl
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWRweCIsIGFQb2ludFNpemVdXTsKLSAgICBl
bHNlIGlmIChhUG9pbnRTaXplIDwgc29hKQotICAgICAgICBbc3R5bGUgX3NldEZvbnRTaXplRGVs
dGE6QCItMXB4Il07Ci0gICAgZWxzZSBpZiAoYVBvaW50U2l6ZSA+IHNvYSkKLSAgICAgICAgW3N0
eWxlIF9zZXRGb250U2l6ZURlbHRhOkAiMXB4Il07Ci0KLSAgICBpZiAoYVdlaWdodCA9PSBiV2Vp
Z2h0KQotICAgICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDphV2VpZ2h0ID4gTUlOX0JPTERfV0VJ
R0hUID8gQCJib2xkIiA6IEAibm9ybWFsIl07Ci0KLSAgICBpZiAoYUlzSXRhbGljID09IGJJc0l0
YWxpYykKLSAgICAgICAgW3N0eWxlIHNldEZvbnRTdHlsZTphSXNJdGFsaWMgPyBAIml0YWxpYyIg
OiAgQCJub3JtYWwiXTsKLX0KLQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZy
b21Gb250TWFuYWdlck9wZXJhdGlvbgotewotICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0
eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOwotCi0gICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0KLSAgICBOU0ZvbnQgKm9hID0gW3NlbGYg
X29yaWdpbmFsRm9udEFdOwotICAgIE5TRm9udCAqb2IgPSBbc2VsZiBfb3JpZ2luYWxGb250Ql07
ICAgIAotICAgIFtzZWxmIF9hZGRUb1N0eWxlOnN0eWxlIGZvbnRBOltmbSBjb252ZXJ0Rm9udDpv
YV0gZm9udEI6W2ZtIGNvbnZlcnRGb250Om9iXV07Ci0KLSAgICByZXR1cm4gc3R5bGU7Ci19Ci0K
LS0gKHZvaWQpY2hhbmdlRm9udDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQot
Ci0gICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udE1h
bmFnZXJPcGVyYXRpb25dIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25TZXRGb250XTsKLX0KLQot
LSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZvckF0dHJpYnV0ZUNoYW5nZTooaWQp
c2VuZGVyCi17Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1w
dHlTdHlsZV07Ci0KLSAgICBOU1NoYWRvdyAqc2hhZG93ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5p
dF07Ci0gICAgW3NoYWRvdyBzZXRTaGFkb3dPZmZzZXQ6TlNNYWtlU2l6ZSgxLCAxKV07Ci0KLSAg
ICBOU0RpY3Rpb25hcnkgKm9hID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNB
bmRLZXlzOgotICAgICAgICBbc2VsZiBfb3JpZ2luYWxGb250QV0sIE5TRm9udEF0dHJpYnV0ZU5h
bWUsCi0gICAgICAgIG5pbF07Ci0gICAgTlNEaWN0aW9uYXJ5ICpvYiA9IFtOU0RpY3Rpb25hcnkg
ZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgW05TQ29sb3IgYmxhY2tDb2xv
cl0sIE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKLSAgICAgICAgW3NlbGYgX29yaWdp
bmFsRm9udEJdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLAotICAgICAgICBbTlNDb2xvciB3aGl0ZUNv
bG9yXSwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICBzaGFkb3csIE5T
U2hhZG93QXR0cmlidXRlTmFtZSwKLSAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6TlNV
bmRlcmxpbmVTdHlsZVNpbmdsZV0sIE5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZSwK
LSAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MV0sIE5TU3VwZXJzY3JpcHRBdHRyaWJ1
dGVOYW1lLAotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0eWxl
U2luZ2xlXSwgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIG5pbF07Ci0K
LSAgICBbc2hhZG93IHJlbGVhc2VdOwotCi0jaWYgMAotCi1OU09ibGlxdWVuZXNzQXR0cmlidXRl
TmFtZSAgICAgICAgLyogZmxvYXQ7IHNrZXcgdG8gYmUgYXBwbGllZCB0byBnbHlwaHMsIGRlZmF1
bHQgMDogbm8gc2tldyAqLwotICAgIC8vIGZvbnQtc3R5bGUsIGJ1dCB0aGF0IGlzIGp1c3QgYW4g
b24tb2ZmIHN3aXRjaAotCi1OU0V4cGFuc2lvbkF0dHJpYnV0ZU5hbWUgICAgICAgICAgLyogZmxv
YXQ7IGxvZyBvZiBleHBhbnNpb24gZmFjdG9yIHRvIGJlIGFwcGxpZWQgdG8gZ2x5cGhzLCBkZWZh
dWx0IDA6IG5vIGV4cGFuc2lvbiAqLwotICAgIC8vIGZvbnQtc3RyZXRjaD8KLQotTlNLZXJuQXR0
cmlidXRlTmFtZSAgICAgICAgICAgICAgIC8qIGZsb2F0LCBhbW91bnQgdG8gbW9kaWZ5IGRlZmF1
bHQga2VybmluZywgaWYgMCwga2VybmluZyBvZmYgKi8KLSAgICAvLyBsZXR0ZXItc3BhY2luZz8g
cHJvYmFibHkgbm90IGdvb2QgZW5vdWdoCi0KLU5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1l
ICAgICAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICov
Ci1OU1N0cmlrZXRocm91Z2hDb2xvckF0dHJpYnV0ZU5hbWUgLyogTlNDb2xvciwgZGVmYXVsdCBu
aWw6IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAqLwotICAgIC8vIHRleHQtZGVjb3JhdGlvbi1j
b2xvcj8KLQotTlNMaWdhdHVyZUF0dHJpYnV0ZU5hbWUgICAgICAgICAgIC8qIGludCwgZGVmYXVs
dCAxOiBkZWZhdWx0IGxpZ2F0dXJlcywgMDogbm8gbGlnYXR1cmVzLCAyOiBhbGwgbGlnYXR1cmVz
ICovCi1OU0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRlTmFtZSAgICAgLyogZmxvYXQsIGluIHBvaW50
czsgb2Zmc2V0IGZyb20gYmFzZWxpbmUsIGRlZmF1bHQgMCAqLwotTlNTdHJva2VXaWR0aEF0dHJp
YnV0ZU5hbWUgICAgICAgIC8qIGZsb2F0LCBpbiBwZXJjZW50IG9mIGZvbnQgcG9pbnQgc2l6ZSwg
ZGVmYXVsdCAwOiBubyBzdHJva2U7IHBvc2l0aXZlIGZvciBzdHJva2UgYWxvbmUsIG5lZ2F0aXZl
IGZvciBzdHJva2UgYW5kIGZpbGwgKGEgdHlwaWNhbCB2YWx1ZSBmb3Igb3V0bGluZWQgdGV4dCB3
b3VsZCBiZSAzLjApICovCi1OU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgICAgLyogTlND
b2xvciwgZGVmYXVsdCBuaWw6IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAqLwotICAgIC8vIG5l
ZWQgZXh0ZW5zaW9ucz8KLQotI2VuZGlmCi0gICAgCi0gICAgTlNEaWN0aW9uYXJ5ICphID0gW3Nl
bmRlciBjb252ZXJ0QXR0cmlidXRlczpvYV07Ci0gICAgTlNEaWN0aW9uYXJ5ICpiID0gW3NlbmRl
ciBjb252ZXJ0QXR0cmlidXRlczpvYl07Ci0KLSAgICBOU0NvbG9yICpjYSA9IFthIG9iamVjdEZv
cktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIE5TQ29sb3IgKmNiID0g
W2Igb2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgaWYg
KGNhID09IGNiKSB7Ci0gICAgICAgIFtzdHlsZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W3NlbGYgX2Nv
bG9yQXNTdHJpbmc6Y2FdXTsKLSAgICB9Ci0KLSAgICBbc2VsZiBfYWRkVG9TdHlsZTpzdHlsZSBm
b250QTpbYSBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV0gZm9udEI6W2Igb2JqZWN0
Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdXTsKLQotICAgIGNhID0gW2Egb2JqZWN0Rm9yS2V5
Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgY2IgPSBbYiBvYmplY3RGb3JL
ZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoY2EgPT0gY2IpIHsK
LSAgICAgICAgW3N0eWxlIHNldENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNhXV07Ci0gICAg
fQotCi0gICAgTlNTaGFkb3cgKnNoYSA9IFthIG9iamVjdEZvcktleTpOU1NoYWRvd0F0dHJpYnV0
ZU5hbWVdOwotICAgIGlmIChzaGEpCi0gICAgICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OltzZWxm
IF9zaGFkb3dBc1N0cmluZzpzaGFdXTsKLSAgICBlbHNlIGlmIChbYiBvYmplY3RGb3JLZXk6TlNT
aGFkb3dBdHRyaWJ1dGVOYW1lXSA9PSBuaWwpCi0gICAgICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93
OkAibm9uZSJdOwotCi0gICAgaW50IHNhID0gW1thIG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91
Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpbnQgc2IgPSBbW2Igb2JqZWN0
Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAg
IGlmIChzYSA9PSBzYikgewotICAgICAgICBpZiAoc2EgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUp
Ci0gICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9u
cy1pbi1lZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsgCi0gICAgICAgICAgICAv
LyB3ZSByZWFsbHkgbWVhbiAibm8gbGluZS10aHJvdWdoIiByYXRoZXIgdGhhbiAibm9uZSIKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQt
ZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIi
XTsKLSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJhZGQgbGluZS10aHJvdWdoIiByYXRo
ZXIgdGhhbiAibGluZS10aHJvdWdoIgotICAgIH0KLQotICAgIHNhID0gW1thIG9iamVjdEZvcktl
eTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIHNiID0gW1tiIG9i
amVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIGlm
IChzYSA9PSBzYikgewotICAgICAgICBpZiAoc2EgPiAwKQotICAgICAgICAgICAgW3N0eWxlIHNl
dFZlcnRpY2FsQWxpZ246QCJzdXBlciJdOwotICAgICAgICBlbHNlIGlmIChzYSA8IDApCi0gICAg
ICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1YiJdOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAImJhc2VsaW5lIl07Ci0gICAgfQot
Ci0gICAgaW50IHVhID0gW1thIG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRl
TmFtZV0gaW50VmFsdWVdOwotICAgIGludCB1YiA9IFtbYiBvYmplY3RGb3JLZXk6TlNVbmRlcmxp
bmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpZiAodWEgPT0gdWIpIHsKLSAg
ICAgICAgaWYgKHVhID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQotICAgICAgICAgICAgW3N0eWxl
IHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpA
Im5vbmUiIHByaW9yaXR5OkAiIl07Ci0gICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAibm8g
dW5kZXJsaW5lIiByYXRoZXIgdGhhbiAibm9uZSIKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
W3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2
YWx1ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6QCIiXTsKLSAgICAgICAgICAgIC8vIHdlIHJlYWxs
eSBtZWFuICJhZGQgdW5kZXJsaW5lIiByYXRoZXIgdGhhbiAidW5kZXJsaW5lIgotICAgIH0KLQot
ICAgIHJldHVybiBzdHlsZTsKLX0KLQotLSAodm9pZCljaGFuZ2VBdHRyaWJ1dGVzOihpZClzZW5k
ZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uOltzZWxmIF9zdHlsZUZvckF0dHJpYnV0ZUNoYW5nZTpzZW5kZXJdIHdpdGhVbmRvQWN0
aW9uOkVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzXTsKLX0KLQotLSAoRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqKV9zdHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IK
LXsKLSAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxl
XTsKLQotICAgIEFTU0VSVChbc3R5bGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSk7Ci0g
ICAgW3N0eWxlIHBlcmZvcm1TZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0OltzZWxmIF9jb2xv
ckFzU3RyaW5nOltbTlNDb2xvclBhbmVsIHNoYXJlZENvbG9yUGFuZWxdIGNvbG9yXV1dOwotICAg
IAotICAgIHJldHVybiBzdHlsZTsKLX0KLQotLSAoRWRpdEFjdGlvbilfdW5kb0FjdGlvbkZyb21D
b2xvclBhbmVsV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBpZiAoc2VsZWN0b3Ig
PT0gQHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xvcjopKQotICAgICAgICByZXR1cm4gRWRpdEFj
dGlvblNldEJhY2tncm91bmRDb2xvcjsgICAgCi0gICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRDb2xv
cjsKLX0KLQotLSAodm9pZClfY2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVjdG9yOihTRUwpc2VsZWN0
b3IgaW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIERPTUNTU1N0eWxlRGVjbGFyYXRp
b24gKnN0eWxlID0gW3NlbGYgX3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0
b3JdOwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgaWYgKFtb
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxk
QXBwbHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5ET01SYW5nZTpyYW5nZV0pCi0gICAgICAgIGlm
IChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgICAgIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoY29yZShzdHlsZSksIFtzZWxmIF91bmRvQWN0
aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdKTsKLX0KLQotLSAodm9pZClj
aGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9Q
Uk9MT0dVRQotCi0gICAgLy8gTWltaWNraW5nIE5TVGV4dFZpZXcsIHRoaXMgbWV0aG9kIHNldHMg
dGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZQotICAgIC8vIGVudGlyZSBkb2N1bWVudC4gVGhl
cmUgaXMgbm8gTlNUZXh0VmlldyBBUEkgZm9yIHNldHRpbmcgdGhlIGJhY2tncm91bmQKLSAgICAv
LyBjb2xvciBvbiB0aGUgc2VsZWN0ZWQgcmFuZ2Ugb25seS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9k
IGlzIGN1cnJlbnRseQotICAgIC8vIG5ldmVyIGNhbGxlZCBmcm9tIHRoZSBVSSAoc2VlIGNvbW1l
bnQgaW4gY2hhbmdlQ29sb3I6KS4KLSAgICAvLyBGSVhNRTogdGhpcyBhY3R1YWxseSBoYXMgbm8g
ZWZmZWN0IHdoZW4gY2FsbGVkLCBwcm9iYWJseSBkdWUgdG8gMzY1NDg1MC4gX2RvY3VtZW50UmFu
Z2Ugc2VlbXMKLSAgICAvLyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYmVjYXVzZSBpdCB3b3JrcyBp
biBzdGFydFNwZWFraW5nOiwgYW5kIEkga25vdyBzZXRCYWNrZ3JvdW5kQ29sb3I6IGRvZXMgdGhl
Ci0gICAgLy8gcmlnaHQgdGhpbmcgYmVjYXVzZSBJIHRlc3RlZCBpdCB3aXRoIFtzZWxmIF9zZWxl
Y3RlZFJhbmdlXS4KLSAgICAvLyBGSVhNRTogVGhpcyB3b24ndCBhY3R1YWxseSBhcHBseSB0aGUg
c3R5bGUgdG8gdGhlIGVudGlyZSByYW5nZSBoZXJlLCBiZWNhdXNlIGl0IGVuZHMgdXAgY2FsbGlu
ZwotICAgIC8vIFtmcmFtZSBfYXBwbHlTdHlsZTpdLCB3aGljaCBvcGVyYXRlcyBvbiB0aGUgY3Vy
cmVudCBzZWxlY3Rpb24uIFRvIG1ha2UgdGhpcyB3b3JrIHJpZ2h0LCB3ZSdsbAotICAgIC8vIG5l
ZWQgdG8gc2F2ZSBvZmYgdGhlIHNlbGVjdGlvbiwgdGVtcG9yYXJpbHkgc2V0IGl0IHRvIHRoZSBl
bnRpcmUgcmFuZ2UsIG1ha2UgdGhlIGNoYW5nZSwgdGhlbgotICAgIC8vIHJlc3RvcmUgdGhlIG9s
ZCBzZWxlY3Rpb24uCi0gICAgW3NlbGYgX2NoYW5nZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjpAc2Vs
ZWN0b3Ioc2V0QmFja2dyb3VuZENvbG9yOikgaW5SYW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1d
OwotfQotCi0tICh2b2lkKWNoYW5nZUNvbG9yOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BS
T0xPR1VFCi0KLSAgICAvLyBGSVhNRTogaW4gTlNUZXh0VmlldywgdGhpcyBtZXRob2QgY2FsbHMg
Y2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6IHdoZW4gYQotICAgIC8vIHByaXZhdGUgY2Fs
bCBoYXMgZWFybGllciBiZWVuIG1hZGUgYnkgW05TRm9udEZvbnRFZmZlY3RzQm94IGNoYW5nZUNv
bG9yOl0sIHNlZSAzNjc0NDkzLiAKLSAgICAvLyBBcHBLaXQgd2lsbCBoYXZlIHRvIGJlIHJldmlz
ZWQgdG8gYWxsb3cgdGhpcyB0byB3b3JrIHdpdGggYW55dGhpbmcgdGhhdCBpc24ndCBhbiAKLSAg
ICAvLyBOU1RleHRWaWV3LiBIb3dldmVyLCB0aGlzIG1pZ2h0IG5vdCBiZSByZXF1aXJlZCBmb3Ig
VGlnZXIsIHNpbmNlIHRoZSBiYWNrZ3JvdW5kLWNvbG9yIAotICAgIC8vIGNoYW5naW5nIGJveCBp
biB0aGUgZm9udCBwYW5lbCBkb2Vzbid0IHdvcmsgaW4gTWFpbCAoMzY3NDQ4MSksIHRob3VnaCBp
dCBkb2VzIGluIFRleHRFZGl0LgotICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3Nl
bGYgX3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbG9yOild
IAotICAgICAgICAgICAgICAgICAgd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblNldENvbG9yXTsK
LX0KLQotLSAodm9pZClfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6KFNFTClzZWxlY3Rvcgot
ewotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAgIFtzZWxmIHNlbGVjdFdvcmQ6bmlsXTsK
LSAgICBOU1N0cmluZyAqd29yZCA9IFtbZnJhbWUgX3NlbGVjdGVkU3RyaW5nXSBwZXJmb3JtU2Vs
ZWN0b3I6c2VsZWN0b3JdOwotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCBhIGRpZmZlcmVu
dCBhY3Rpb24gY29udGV4dCBvdGhlciB0aGFuICJ0eXBlZCI/Ci0gICAgaWYgKFtzZWxmIF9zaG91
bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6d29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0
QWN0aW9uVHlwZWRdKQotICAgICAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3
b3JkIHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpOT107Ci19Ci0KLS0gKHZvaWQp
dXBwZXJjYXNlV29yZDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAg
W3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBzZWxlY3Rvcih1cHBlcmNhc2VTdHJp
bmcpXTsKLX0KLQotLSAodm9pZClsb3dlcmNhc2VXb3JkOihpZClzZW5kZXIKLXsKLSAgICBDT01N
QU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNl
bGVjdG9yKGxvd2VyY2FzZVN0cmluZyldOwotfQotCi0tICh2b2lkKWNhcGl0YWxpemVXb3JkOihp
ZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfY2hhbmdlV29y
ZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKGNhcGl0YWxpemVkU3RyaW5nKV07Ci19Ci0KLS0g
KHZvaWQpY29tcGxldGU6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAg
IGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFfcHJpdmF0
ZS0+Y29tcENvbnRyb2xsZXIpCi0gICAgICAgIF9wcml2YXRlLT5jb21wQ29udHJvbGxlciA9IFtb
V2ViVGV4dENvbXBsZXRlQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhIVE1MVmlldzpzZWxmXTsK
LSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGRvQ29tcGxldGlvbl07Ci19Ci0KLS0gKHZv
aWQpY2hlY2tTcGVsbGluZzooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0g
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBj
b3JlRnJhbWUtPmVkaXRvcigpLT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoKTsKLX0KLQotLSAo
dm9pZClzaG93R3Vlc3NQYW5lbDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQot
Ci0gICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXTsKLSAgICBpZiAoIWNoZWNrZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJObyBO
U1NwZWxsQ2hlY2tlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIE5TUGFu
ZWwgKnNwZWxsaW5nUGFuZWwgPSBbY2hlY2tlciBzcGVsbGluZ1BhbmVsXTsKLSNpZm5kZWYgQlVJ
TERJTkdfT05fVElHRVIKLSAgICAvLyBQb3N0LVRpZ2VyLCB0aGlzIG1lbnUgaXRlbSBpcyBhIHNo
b3cvaGlkZSB0b2dnbGUsIHRvIG1hdGNoIEFwcEtpdC4gTGVhdmUgVGlnZXIgYmVoYXZpb3IgYWxv
bmUKLSAgICAvLyB0byBtYXRjaCByZXN0IG9mIE9TIFguCi0gICAgaWYgKFtzcGVsbGluZ1BhbmVs
IGlzVmlzaWJsZV0pIHsKLSAgICAgICAgW3NwZWxsaW5nUGFuZWwgb3JkZXJPdXQ6c2VuZGVyXTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHRydWUpOwotICAgIFtzcGVsbGluZ1BhbmVsIG9y
ZGVyRnJvbnQ6c2VuZGVyXTsKLX0KLQotLSAodm9pZClfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6KE5T
U3RyaW5nICopbmV3V29yZAotewotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBEb24ndCBjb3JyZWN0IHRvIGVtcHR5IHN0cmluZy4gIChBcHBLaXQg
Y2hlY2tlZCB0aGlzLCB3ZSBtaWdodCBhcyB3ZWxsIHRvby4pCi0gICAgaWYgKCFbTlNTcGVsbENo
ZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSkgewotICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3Bl
bGxDaGVja2VyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFtuZXdX
b3JkIGlzRXF1YWxUb1N0cmluZzpAIiJdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoW3Nl
bGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3JkIGdpdmVuQWN0aW9uOldl
YlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQotICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFj
ZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVw
bGFjZTpOT107Ci19Ci0KLS0gKHZvaWQpY2hhbmdlU3BlbGxpbmc6KGlkKXNlbmRlcgotewotICAg
IENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VTcGVsbGluZ1RvV29yZDpbW3Nl
bmRlciBzZWxlY3RlZENlbGxdIHN0cmluZ1ZhbHVlXV07Ci19Ci0KLS0gKHZvaWQpcGVyZm9ybUZp
bmRQYW5lbEFjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAg
Ly8gSW1wbGVtZW50aW5nIHRoaXMgd2lsbCBwcm9iYWJseSByZXF1aXJlIGNvcHlpbmcgYWxsIG9m
IE5TRmluZFBhbmVsLmggYW5kIC5tLgotICAgIC8vIFdlIG5lZWQgKmFsbW9zdCogdGhlIHNhbWUg
dGhpbmcgYXMgQXBwS2l0LCBidXQgbm90IHF1aXRlLgotICAgIExPR19FUlJPUigidW5pbXBsZW1l
bnRlZCIpOwotfQotCi0tICh2b2lkKXN0YXJ0U3BlYWtpbmc6KGlkKXNlbmRlcgotewotICAgIENP
TU1BTkRfUFJPTE9HVUUKLQotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0g
ICAgRE9NUmFuZ2UgKnJhbmdlID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOwotICAgIGlmICghcmFu
Z2UgfHwgW3JhbmdlIGNvbGxhcHNlZF0pCi0gICAgICAgIHJhbmdlID0gW3NlbGYgX2RvY3VtZW50
UmFuZ2VdOwotICAgIFtOU0FwcCBzcGVha1N0cmluZzpbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnJh
bmdlXV07Ci19Ci0KLS0gKHZvaWQpc3RvcFNwZWFraW5nOihpZClzZW5kZXIKLXsKLSAgICBDT01N
QU5EX1BST0xPR1VFCi0KLSAgICBbTlNBcHAgc3RvcFNwZWFraW5nOnNlbmRlcl07Ci19Ci0KLS0g
KHZvaWQpdG9nZ2xlQmFzZVdyaXRpbmdEaXJlY3Rpb246KGlkKXNlbmRlcgotewotICAgIENPTU1B
TkRfUFJPTE9HVUUKLQotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
aWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdyaXRpbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uID0gUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uOwotICAgIHN3aXRjaCAoY29y
ZUZyYW1lLT5iYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkpIHsKLSAgICAg
ICAgY2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OgotICAgICAgICAg
ICAgZGlyZWN0aW9uID0gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIC8vIFRoZSB3cml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQg
bWV0aG9kIHdpbGwgbmV2ZXIgcmV0dXJuICJuYXR1cmFsIi4gSXQKLSAgICAgICAgLy8gd2lsbCBh
bHdheXMgcmV0dXJuIGEgY29uY3JldGUgZGlyZWN0aW9uLiBTbywga2VlcCB0aGUgY29tcGlsZXIg
aGFwcHksIGFuZCBhc3NlcnQgbm90IHJlYWNoZWQuCi0gICAgICAgIGNhc2UgTlNXcml0aW5nRGly
ZWN0aW9uTmF0dXJhbDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGlu
Z0RpcmVjdGlvbihkaXJlY3Rpb24pOwotfQotCi0tICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGly
ZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtz
ZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TV3JpdGluZ0RpcmVj
dGlvbiB3cml0aW5nRGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8TlNXcml0aW5nRGlyZWN0aW9uPihb
c2VuZGVyIHRhZ10pOwotICAgIAotICAgIC8vIFdlIGRpc2FibGUgdGhlIG1lbnUgaXRlbSB0aGF0
IHBlcmZvcm1zIHRoaXMgYWN0aW9uIGJlY2F1c2Ugd2UgY2FuJ3QgaW1wbGVtZW50Ci0gICAgLy8g
TlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCdzIGJlaGF2aW9yIHVzaW5nIENTUy4KLSAgICBBU1NF
UlQod3JpdGluZ0RpcmVjdGlvbiAhPSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKTsKLQotICAg
IGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29y
ZUZyYW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24od3JpdGluZ0RpcmVjdGlv
biA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/IExlZnRUb1JpZ2h0V3JpdGluZ0Rp
cmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBCT09M
IHdyaXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5nc0VuYWJsZWQoKQotewotI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIHJl
dHVybiBZRVM7Ci0jZWxzZQotICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107Ci0gICAgcmV0dXJuIFtkZWZhdWx0cyBib29s
Rm9yS2V5OkAiTlNBbGxvd3NCYXNlV3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzIl0gfHwgW2Rl
ZmF1bHRzIGJvb2xGb3JLZXk6QCJBcHBsZVRleHREaXJlY3Rpb24iXTsKLSNlbmRpZgotfQotCi0t
ICh2b2lkKV9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvOihOU1dyaXRpbmdEaXJlY3Rpb24p
ZGlyZWN0aW9uCi17Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsK
LQotICAgIHN0YXRpYyBCT09MIGJpbmRpbmdzRW5hYmxlZCA9IHdyaXRpbmdEaXJlY3Rpb25LZXlC
aW5kaW5nc0VuYWJsZWQoKTsKLQotICAgIGlmICghYmluZGluZ3NFbmFibGVkKSB7Ci0gICAgICAg
IE5TQmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigp
LT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihkaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9u
TGVmdFRvUmlnaHQgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdy
aXRpbmdEaXJlY3Rpb24pOwotfQotCi0tICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxl
ZnRUb1JpZ2h0OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2Vs
ZiBfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzpOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9S
aWdodF07Ci19Ci0KLS0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VC
YXNlV3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKLX0K
LQotI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKLS0gKHZvaWQpY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25Ub0xUUjooaWQpc2Vu
ZGVyCi17Ci0gICAgW3NlbGYgbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6c2Vu
ZGVyXTsKLX0KLQotLSAodm9pZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvUlRMOihpZClz
ZW5kZXIKLXsKLSAgICBbc2VsZiBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDpz
ZW5kZXJdOwotfQotI2VuZGlmCi0KLS0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTmF0
dXJhbDooaWQpc2VuZGVyCi17Ci0gICAgTE9HX0VSUk9SKCJTZW50IGZyb20gJUAuIiwgc2VuZGVy
KTsKLX0KLQotI2lmIDAKLQotLy8gQ1NTIGRvZXMgbm90IGhhdmUgYSB3YXkgdG8gc3BlY2lmeSBh
biBvdXRsaW5lIGZvbnQsIHdoaWNoIG1heSBtYWtlIHRoaXMgZGlmZmljdWx0IHRvIGltcGxlbWVu
dC4KLS8vIE1heWJlIGEgc3BlY2lhbCBjYXNlIG9mIHRleHQtc2hhZG93PwotLSAodm9pZClvdXRs
aW5lOihpZClzZW5kZXI7Ci0KLS8vIFRoaXMgaXMgcGFydCBvZiB0YWJsZSBzdXBwb3J0LCB3aGlj
aCBtYXkgYmUgaW4gTlNUZXh0VmlldyBmb3IgVGlnZXIuCi0vLyBJdCdzIHByb2JhYmx5IHNpbXBs
ZSB0byBkbyB0aGUgZXF1aXZhbGVudCB0aGluZyBmb3IgV2ViS2l0LgotLSAodm9pZClpbnNlcnRU
YWJsZTooaWQpc2VuZGVyOwotCi0vLyBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC4KLS0gKHZvaWQp
dG9nZ2xlVHJhZGl0aW9uYWxDaGFyYWN0ZXJTaGFwZTooaWQpc2VuZGVyOwotCi0vLyBJJ20gbm90
IHN1cmUgd2hhdCB0aGUgZXF1aXZhbGVudHMgb2YgdGhlc2UgaW4gdGhlIHdlYiB3b3JsZCBhcmUu
Ci0tICh2b2lkKWluc2VydExpbmVTZXBhcmF0b3I6KGlkKXNlbmRlcjsKLS0gKHZvaWQpaW5zZXJ0
UGFnZUJyZWFrOihpZClzZW5kZXI7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBpbXBsZW1l
bnRlZCBpbiBOU1RleHRWaWV3IHlldCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCi0tICh2
b2lkKWNoYW5nZUNhc2VPZkxldHRlcjooaWQpc2VuZGVyOwotLSAodm9pZCl0cmFuc3Bvc2VXb3Jk
czooaWQpc2VuZGVyOwotCi0jZW5kaWYKLQotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0v
LyBPdmVycmlkZSB0aGlzIHNvIHRoYXQgQXBwS2l0IHdpbGwgc2VuZCB1cyBhcnJvdyBrZXlzIGFz
IGtleSBkb3duIGV2ZW50cyBzbyB3ZSBjYW4KLS8vIHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBi
aW5kaW5ncyBtZWNoYW5pc20uCi0tIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVu
dCAqKWV2ZW50Ci17Ci0gICAgYm9vbCBoYXZlV2ViQ29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBmcmFtZSwgb3VyIGtleURvd24gbWV0aG9kIHdp
bGwgaGFuZGxlIGtleSBiaW5kaW5ncyBhZnRlciBzZW5kaW5nCi0gICAgLy8gdGhlIGV2ZW50IHRo
cm91Z2ggdGhlIERPTSwgc28gYXNrIEFwcEtpdCBub3QgdG8gZG8gaXRzIGVhcmx5IHNwZWNpYWwg
a2V5IGJpbmRpbmcKLSAgICAvLyBtYXBwaW5nLiBJZiB3ZSBkb24ndCBoYXZlIGEgZnJhbWUsIGp1
c3QgbGV0IHRoaW5ncyB3b3JrIHRoZSBub3JtYWwgd2F5IHdpdGhvdXQKLSAgICAvLyBhIGtleURv
d24uCi0gICAgcmV0dXJuIGhhdmVXZWJDb3JlRnJhbWU7Ci19Ci0KLSNlbHNlCi0KLS8vIFN1cGVy
LWhhY2sgYWxlcnQuCi0vLyBBbGwgdGhpcyBjb2RlIGFjY29tcGxpc2hlcyB0aGUgc2FtZSB0aGlu
ZyBhcyB0aGUgX3dhbnRzS2V5RG93bkZvckV2ZW50IG1ldGhvZCBhYm92ZS4KLQotLy8gUmV0dXJu
cyBhIHNlbGVjdG9yIG9ubHkgaWYgY2FsbGVkIHdoaWxlOgotLy8gICAxKSBmaXJzdCByZXNwb25k
ZXIgaXMgc2VsZgotLy8gICAyKSBoYW5kbGluZyBhIGtleSBkb3duIGV2ZW50Ci0vLyAgIDMpIG5v
dCB5ZXQgaW5zaWRlIGtleURvd246IG1ldGhvZAotLy8gICA0KSBrZXkgaXMgYW4gYXJyb3cga2V5
Ci0vLyBUaGUgc2VsZWN0b3IgaXMgdGhlIG9uZSB0aGF0IGdldHMgc2VudCBieSAtW05TV2luZG93
IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0gZm9yIHRoaXMga2V5LgotLSAoU0VMKV9hcnJvd0tleURv
d25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nCi17Ci0gICAgTlNXaW5kb3cgKncgPSBbc2Vs
ZiB3aW5kb3ddOwotICAgIGlmIChbdyBmaXJzdFJlc3BvbmRlcl0gIT0gc2VsZikKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgTlNFdmVudCAqZSA9IFt3IGN1cnJlbnRFdmVudF07Ci0gICAgaWYg
KFtlIHR5cGVdICE9IE5TS2V5RG93bikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGUg
PT0gX3ByaXZhdGUtPmtleURvd25FdmVudCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgTlNT
dHJpbmcgKnMgPSBbZSBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOwotICAgIGlmIChbcyBs
ZW5ndGhdID09IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHN3aXRjaCAoW3MgY2hhcmFj
dGVyQXRJbmRleDowXSkgewotICAgICAgICBjYXNlIE5TRG93bkFycm93RnVuY3Rpb25LZXk6Ci0g
ICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVEb3duOik7Ci0gICAgICAgIGNhc2UgTlNM
ZWZ0QXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZUxl
ZnQ6KTsKLSAgICAgICAgY2FzZSBOU1JpZ2h0QXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAg
IHJldHVybiBAc2VsZWN0b3IobW92ZVJpZ2h0Oik7Ci0gICAgICAgIGNhc2UgTlNVcEFycm93RnVu
Y3Rpb25LZXk6Ci0gICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVVcDopOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0vLyBSZXR1
cm5zIE5PIGluc3RlYWQgb2YgWUVTIGlmIGNhbGxlZCBvbiB0aGUgc2VsZWN0b3IgdGhhdCB0aGUK
LS8vIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nIG1ldGhvZCByZXR1
cm5zLgotLy8gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW5zaWRlIC1bTlNXaW5kb3cgX3Byb2Nl
c3NLZXlib2FyZFVJS2V5XSwKLS8vIGFuZCB0b2dldGhlciB3aXRoIHRoZSBjaGFuZ2UgYmVsb3cg
c2hvdWxkIGNhdXNlIHRoYXQgbWV0aG9kCi0vLyB0byByZXR1cm4gTk8gcmF0aGVyIHRoYW4gaGFu
ZGxpbmcgdGhlIGtleS4KLS8vIEFsc28gc2V0IGEgMS1zaG90IGZsYWcgZm9yIHRoZSBuZXh0UmVz
cG9uZGVyIGNoZWNrIGJlbG93LgotLSAoQk9PTClyZXNwb25kc1RvU2VsZWN0b3I6KFNFTClzZWxl
Y3RvcgotewotICAgIGlmICghW3N1cGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICBTRUwgYXJyb3dLZXlTZWxlY3RvciA9IFtzZWxmIF9hcnJv
d0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nXTsKLSAgICBpZiAoc2VsZWN0b3Ig
IT0gYXJyb3dLZXlTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICBfcHJpdmF0ZS0+
bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZSA9IFlFUzsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS8v
IFJldHVybnMgbmlsIGluc3RlYWQgb2YgdGhlIG5leHQgcmVzcG9uZGVyIGlmIGNhbGxlZCB3aGVu
IHRoZQotLy8gb25lLXNob3QgZmxhZyBpcyBzZXQsIGFuZCBfYXJyb3dLZXlEb3duRXZlbnRTZWxl
Y3RvcklmUHJlcHJvY2Vzc2luZwotLy8gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiBOVUxM
LiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpbnNpZGUKLS8vIC1bTlNXaW5kb3cgX3Byb2Nlc3NL
ZXlib2FyZFVJS2V5XSBhbmQgdG9nZXRoZXIgd2l0aCB0aGUgY2hhbmdlIGFib3ZlCi0vLyBzaG91
bGQgY2F1c2UgdGhhdCBtZXRob2QgdG8gcmV0dXJuIE5PIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRo
ZSBrZXkuCi0tIChOU1Jlc3BvbmRlciAqKW5leHRSZXNwb25kZXIKLXsKLSAgICBCT09MIGRpc2Fi
bGVkID0gX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7Ci0gICAgX3ByaXZhdGUt
Pm5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2UgPSBOTzsKLSAgICBpZiAoZGlzYWJsZWQgJiYgW3Nl
bGYgX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmddICE9IE5VTEwpCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtzdXBlciBuZXh0UmVzcG9uZGVyXTsKLX0K
LQotI2VuZGlmCi0KLS0gKHZvaWQpX3VwZGF0ZUNvbnRyb2xUaW50cwotewotICAgIEZyYW1lKiBm
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3
KQotICAgICAgICByZXR1cm47Ci0gICAgdmlldy0+dXBkYXRlQ29udHJvbFRpbnRzKCk7Ci19Ci0K
LS8vIERlc3BpdGUgaXRzIG5hbWUsIHRoaXMgaXMgY2FsbGVkIGF0IGRpZmZlcmVudCB0aW1lcyB0
aGFuIHdpbmRvd0RpZEJlY29tZUtleSBpcy4KLS8vIEl0IHRha2VzIGludG8gYWNjb3VudCBhbGwg
dGhlIG90aGVyIGZhY3RvcnMgdGhhdCBkZXRlcm1pbmUgd2hlbiBOU0NlbGwgZHJhd3MKLS8vIHdp
dGggZGlmZmVyZW50IHRpbnRzLCBzbyBpdCdzIHRoZSByaWdodCBjYWxsIHRvIHVzZSBmb3IgY29u
dHJvbCB0aW50cy4gV2UnZCBwcmVmZXIKLS8vIHRvIGRvIHRoaXMgd2l0aCBBUEkuIDxyZGFyOi8v
cHJvYmxlbS81MTM2NzYwPgotLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlCi17Ci0gICAg
aWYgKHB0aHJlYWRfbWFpbl9ucCgpKQotICAgICAgICBbc2VsZiBfdXBkYXRlQ29udHJvbFRpbnRz
XTsKLSAgICBlbHNlCi0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpA
c2VsZWN0b3IoX3VwZGF0ZUNvbnRyb2xUaW50cykgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9u
ZTpOT107Ci0KLSAgICBbc3VwZXIgX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZV07Ci19Ci0KLS0gKHZv
aWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAotewotICAgIGlmIChbZXZlbnQgYnV0
dG9uTnVtYmVyXSA9PSAyKQotICAgICAgICBbc2VsZiBtb3VzZURvd246ZXZlbnRdOwotICAgIGVs
c2UKLSAgICAgICAgW3N1cGVyIG90aGVyTW91c2VEb3duOmV2ZW50XTsKLX0KLQotLSAodm9pZClv
dGhlck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKFtldmVudCBidXR0
b25OdW1iZXJdID09IDIpCi0gICAgICAgIFtzZWxmIG1vdXNlRHJhZ2dlZDpldmVudF07Ci0gICAg
ZWxzZQotICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZURyYWdnZWQ6ZXZlbnRdOwotfQotCi0tICh2
b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKFtldmVudCBidXR0
b25OdW1iZXJdID09IDIpCi0gICAgICAgIFtzZWxmIG1vdXNlVXA6ZXZlbnRdOwotICAgIGVsc2UK
LSAgICAgICAgW3N1cGVyIG90aGVyTW91c2VVcDpldmVudF07Ci19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIE5TQXJyYXkgKFdlYkhUTUxWaWV3KQotCi0tICh2b2lkKV93ZWJfbWFrZVBsdWdp
blZpZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVjdDooaWQpb2JqZWN0
Ci17Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlNFbnVtZXJhdG9yICpl
bnVtZXJhdG9yID0gW3NlbGYgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgV2ViTmV0c2NhcGVQbHVn
aW5WaWV3ICp2aWV3OwotICAgIHdoaWxlICgodmlldyA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3Rd
KSAhPSBuaWwpCi0gICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2Nh
cGVQbHVnaW5WaWV3IGNsYXNzXV0pCi0gICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6
c2VsZWN0b3Igd2l0aE9iamVjdDpvYmplY3RdOwotI2VuZGlmCi19Ci0KLUBlbmQKLQotQGltcGxl
bWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJJbnRlcm5hbCkKLQotLSAodm9pZClfc2VsZWN0aW9u
Q2hhbmdlZAotewotICAgIFtzZWxmIF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdOwot
ICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0U3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwotfQotCi0tICh2b2lkKV91cGRhdGVGb250UGFu
ZWwKLXsKLSAgICAvLyBGSVhNRTogTlNUZXh0VmlldyBiYWlscyBvdXQgaWYgYmVjb21pbmcgb3Ig
cmVzaWduaW5nIGZpcnN0IHJlc3BvbmRlciwgZm9yIHdoaWNoIGl0IGhhcyBpdmFyIGZsYWdzLiBO
b3QKLSAgICAvLyBzdXJlIGlmIHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIuCi0gICAg
Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBO
U1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICAvLyBGSVhNRTogaXMgdGhpcyBm
aXJzdC1yZXNwb25kZXIgY2hlY2sgY29ycmVjdD8gV2hhdCBoYXBwZW5zIGlmIGEgc3ViZnJhbWUg
aXMgZWRpdGFibGUgYW5kIGlzIGZpcnN0IHJlc3BvbmRlcj8KLSAgICBpZiAoW05TQXBwIGtleVdp
bmRvd10gIT0gd2luZG93IHx8IFt3aW5kb3cgZmlyc3RSZXNwb25kZXJdICE9IHNlbGYpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKLSAgICBO
U0ZvbnQgKmZvbnQgPSBuaWw7Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pKSB7Ci0gICAgICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogZmQgPSBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQotICAgICAg
ICAgICAgZm9udCA9IGZkLT5nZXROU0ZvbnQoKTsKLSAgICB9Ci0gICAgCi0KLSAgICAvLyBGSVhN
RTogZm9yIG5vdywgcmV0dXJuIGEgYm9ndXMgZm9udCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlIGVt
cHR5IHNlbGVjdGlvbiBmcm9tIHRoZSBub24tZW1wdHkKLSAgICAvLyBzZWxlY3Rpb24uIFdlIHNo
b3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIG9uY2UgdGhlIHJlc3Qgb2YgdGhpcyBjb2RlIHdv
cmtzIHByb3Blcmx5LgotICAgIGlmIChmb250ID09IG5pbCkKLSAgICAgICAgZm9udCA9IFtzZWxm
IF9oYXNTZWxlY3Rpb25dID8gW05TRm9udCBtZW51Rm9udE9mU2l6ZToyM10gOiBbTlNGb250IHRv
b2xUaXBzRm9udE9mU2l6ZToxN107Ci0gICAgQVNTRVJUKGZvbnQgIT0gbmlsKTsKLQotICAgIFtb
TlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gc2V0U2VsZWN0ZWRGb250OmZvbnQgaXNN
dWx0aXBsZTptdWx0aXBsZUZvbnRzXTsKLQotICAgIC8vIEZJWE1FOiB3ZSBkb24ndCBrZWVwIHRy
YWNrIG9mIHNlbGVjdGVkIGF0dHJpYnV0ZXMsIG9yIHNldCB0aGVtIG9uIHRoZSBmb250IHBhbmVs
LiBUaGlzCi0gICAgLy8gYXBwZWFycyB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgVUkuIEUuZy4s
IHVuZGVybGluZWQgdGV4dCBpbiBNYWlsIG9yIFRleHRFZGl0IGlzCi0gICAgLy8gbm90IHJlZmxl
Y3RlZCBpbiB0aGUgZm9udCBwYW5lbC4gTWF5YmUgc29tZWRheSB0aGlzIHdpbGwgY2hhbmdlLgot
fQotCi0tIChCT09MKV9jYW5TbWFydENvcHlPckRlbGV0ZQotewotICAgIGlmICghW1tzZWxmIF93
ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdKQotICAgICAgICByZXR1cm4gTk87Ci0g
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNv
cmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51
bGFyaXR5OwotfQotCi0tIChOU0V2ZW50ICopX21vdXNlRG93bkV2ZW50Ci17Ci0gICAgcmV0dXJu
IF9wcml2YXRlLT5tb3VzZURvd25FdmVudDsKLX0KLQotLSAoaWQ8V2ViSFRNTEhpZ2hsaWdodGVy
PilfaGlnaGxpZ2h0ZXJGb3JUeXBlOihOU1N0cmluZyopdHlwZQotewotICAgIHJldHVybiBbX3By
aXZhdGUtPmhpZ2hsaWdodGVycyBvYmplY3RGb3JLZXk6dHlwZV07Ci19Ci0KLS0gKFdlYkZyYW1l
ICopX2ZyYW1lCi17Ci0gICAgcmV0dXJuIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV07
Ci19Ci0KLS0gKHZvaWQpcGFzdGU6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUK
LQotICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7Ci0gICAg
UmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICgh
Y29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCkt
PnRyeURIVE1MUGFzdGUoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBESFRNTCBkaWQgdGhlIHdob2xl
IG9wZXJhdGlvbgotICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpKQotICAgICAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQ
YXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpZRVNdOwotICAgIGVs
c2UKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+cGFzdGVBc1BsYWluVGV4dCgpOwotfQot
Ci0tICh2b2lkKXBhc3RlQXNQbGFpblRleHQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJP
TE9HVUUKLQotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0gICAg
W3NlbGYgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVy
YWxQYXN0ZWJvYXJkXV07Ci19Ci0KLS0gKHZvaWQpY2xvc2VJZk5vdEN1cnJlbnRWaWV3Ci17Ci0g
ICAgaWYgKFtbW3NlbGYgX2ZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gIT0gc2VsZikK
LSAgICAgICAgW3NlbGYgY2xvc2VdOwotfQotCi0tIChET01Eb2N1bWVudEZyYWdtZW50KilfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17
Ci0gICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVi
b2FyZCBpbkNvbnRleHQ6bmlsIGFsbG93UGxhaW5UZXh0Ok5PXTsKLX0KLQotI2lmbmRlZiBCVUlM
RElOR19PTl9USUdFUgotCi0tIChCT09MKWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAotewotICAg
IC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3Jh
bW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVy
ZSBiZWNhdXNlCi0gICAgLy8gdGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9u
ZGVyLgotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZF07Ci19Ci0KLS0gKHZvaWQpc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDooQk9PTClmbGFnCi17
Ci0gICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhp
cyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhv
ZCBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCBy
ZXNwb25kZXIuCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
OmZsYWddOwotfQotCi0tICh2b2lkKXRvZ2dsZUdyYW1tYXJDaGVja2luZzooaWQpc2VuZGVyCi17
Ci0gICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhp
cyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhv
ZCBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCBy
ZXNwb25kZXIuCi0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6c2Vu
ZGVyXTsKLX0KLQotCi1zdGF0aWMgQ0dQb2ludCBjb3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvckFw
cEtpdFNjcmVlblBvaW50KE5TUG9pbnQgcG9pbnQpCi17Ci0gICAgTlNBcnJheSAqc2NyZWVucyA9
IFtOU1NjcmVlbiBzY3JlZW5zXTsKLSAgICAKLSAgICBpZiAoW3NjcmVlbnMgY291bnRdID09IDAp
IHsKLSAgICAgICAgLy8gWW91IGNvdWxkIHRoZW9yZXRpY2FsbHkgZ2V0IGhlcmUgaWYgcnVubmlu
ZyB3aXRoIG5vIG1vbml0b3IsIGluIHdoaWNoIGNhc2UgaXQgZG9lc24ndCBtYXR0ZXIKLSAgICAg
ICAgLy8gbXVjaCB3aGVyZSB0aGUgIm9uLXNjcmVlbiIgcG9pbnQgaXMuCi0gICAgICAgIHJldHVy
biBDR1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRmxp
cCB0aGUgeSBjb29yZGluYXRlIGZyb20gdGhlIHRvcCBvZiB0aGUgbWVudSBiYXIgc2NyZWVuIC0t
IHNlZSA0NjM2MzkwCi0gICAgcmV0dXJuIENHUG9pbnRNYWtlKHBvaW50LngsIE5TTWF4WShbW3Nj
cmVlbnMgb2JqZWN0QXRJbmRleDowXSBmcmFtZV0pIC0gcG9pbnQueSk7Ci19Ci0KLSNlbmRpZgot
Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpCi0KLS0gKHZvaWQpb3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2Vu
ZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgTlNTcGVsbENoZWNrZXIgKmNoZWNr
ZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKLSAgICBpZiAoIWNoZWNr
ZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIE5TUGFuZWwgKnN1YnN0aXR1dGlvbnNQYW5lbCA9IFtj
aGVja2VyIHN1YnN0aXR1dGlvbnNQYW5lbF07Ci0gICAgaWYgKFtzdWJzdGl0dXRpb25zUGFuZWwg
aXNWaXNpYmxlXSkgewotICAgICAgICBbc3Vic3RpdHV0aW9uc1BhbmVsIG9yZGVyT3V0OnNlbmRl
cl07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgW3N1YnN0aXR1dGlvbnNQYW5lbCBvcmRl
ckZyb250OnNlbmRlcl07Ci19Ci0KLS8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJv
dHRsZW5lY2sgZm9yIHRoaXMgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0aGVzZSBtZXRo
b2RzIGhlcmUgYmVjYXVzZQotLy8gdGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVz
cG9uZGVyLgotCi0tIChCT09MKXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZAotewotICAgIHJldHVy
biBbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF07Ci19Ci0KLS0gKHZv
aWQpc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYg
X3dlYlZpZXddIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9p
ZCl0b2dnbGVTbWFydEluc2VydERlbGV0ZTooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJW
aWV3XSB0b2dnbGVTbWFydEluc2VydERlbGV0ZTpzZW5kZXJdOwotfQotCi0tIChCT09MKWlzQXV0
b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2Vi
Vmlld10gaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdOwotfQotCi0tICh2b2lk
KXNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAg
W1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6Zmxh
Z107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246KGlkKXNl
bmRlcgotewotICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0
dXRpb246c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFi
bGVkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uRW5hYmxlZF07Ci19Ci0KLS0gKHZvaWQpc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJs
ZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljTGlua0Rl
dGVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uOnNlbmRlcl07Ci19Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldEF1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXdd
IHNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOmZsYWddOwotfQotCi0tICh2b2lk
KXRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246KGlkKXNlbmRlcgotewotICAgIFtbc2Vs
ZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjpzZW5kZXJdOwotfQot
Ci0tIChCT09MKWlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZAotewotICAgIHJldHVy
biBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF07Ci19
Ci0KLS0gKHZvaWQpc2V0QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDooQk9PTClmbGFn
Ci17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFi
bGVkOmZsYWddOwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDoo
aWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNUZXh0UmVw
bGFjZW1lbnQ6c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1Nw
ZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldEF1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10g
c2V0QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9p
ZCl0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcgotewotICAgIFtb
c2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOnNlbmRlcl07
Ci19Ci0KLSNlbmRpZgotCi0tICh2b2lkKV9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTooaWQp
c2VuZGVyCi17Ci0gICAgLy8gRGljdGlvbmFyeSBBUEkgd2lsbCBhY2NlcHQgYSB3aGl0ZXNwYWNl
LW9ubHkgc3RyaW5nIGFuZCBkaXNwbGF5IFVJIGFzIGlmIGl0IHdlcmUgcmVhbCB0ZXh0LAotICAg
IC8vIHNvIGJhaWwgb3V0IGVhcmx5IHRvIGF2b2lkIHRoYXQuCi0gICAgaWYgKFtbW3NlbGYgc2Vs
ZWN0ZWRTdHJpbmddIF93ZWJraXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2VdIGxlbmd0aF0g
PT0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3Ry
aW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKLQotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBOU1JlY3QgcmVjdCA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uQm91bmRz
KCk7Ci0KLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBOU0RpY3Rpb25hcnkgKmF0dHJp
YnV0ZXMgPSBbYXR0clN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwx
KV07Ci0gICAgTlNGb250ICpmb250ID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0
dHJpYnV0ZU5hbWVdOwotICAgIGlmIChmb250KQotICAgICAgICByZWN0Lm9yaWdpbi55ICs9IFtm
b250IGFzY2VuZGVyXTsKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
ICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgW3NlbGYgc2hvd0RlZmluaXRp
b25Gb3JBdHRyaWJ1dGVkU3RyaW5nOmF0dHJTdHJpbmcgYXRQb2ludDpyZWN0Lm9yaWdpbl07Ci0g
ICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICAvLyBXZSBzb2Z0IGxpbmsgdG8gZ2V0IHRoZSBmdW5j
dGlvbiB0aGF0IGRpc3BsYXlzIHRoZSBkaWN0aW9uYXJ5IChlaXRoZXIgcG9wLXVwIHdpbmRvdyBv
ciBhcHApIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZQotICAgIC8vIHBlbmFsdHkgb2YgbGlua2lu
ZyB0byBhbm90aGVyIGZyYW1ld29yay4gVGhpcyBmdW5jdGlvbiBjaGFuZ2VkIHNpZ25hdHVyZSBh
cyB3ZWxsIGFzIGZyYW1ld29yayBiZXR3ZWVuIFRpZ2VyIGFuZCBMZW9wYXJkLAotICAgIC8vIHNv
IHRoZSB0d28gY2FzZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4KLQotI2lmZGVmIEJVSUxESU5H
X09OX1RJR0VSCi0gICAgdHlwZWRlZiBPU1N0YXR1cyAoKlNlcnZpY2VXaW5kb3dTaG93RnVuY3Rp
b24pKGlkIGluV29yZFN0cmluZywgTlNSZWN0IGluV29yZEJvdW5kYXJ5LCBVSW50MTYgaW5MaW5l
RGlyZWN0aW9uKTsKLSAgICBjb25zdCBjaGFyICpmcmFtZXdvcmtQYXRoID0gIi9TeXN0ZW0vTGli
cmFyeS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3Mv
TGFuZ0FuYWx5c2lzLmZyYW1ld29yay9MYW5nQW5hbHlzaXMiOwotICAgIGNvbnN0IGNoYXIgKmZ1
bmN0aW9uTmFtZSA9ICJEQ01EaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3ciOwotI2Vsc2UKLSAg
ICB0eXBlZGVmIHZvaWQgKCpTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uKShpZCB1bnVzZWREaWN0
aW9uYXJ5UmVmLCBpZCBpbldvcmRTdHJpbmcsIENGUmFuZ2Ugc2VsZWN0aW9uUmFuZ2UsIGlkIHVu
dXNlZEZvbnQsIENHUG9pbnQgdGV4dE9yaWdpbiwgQm9vbGVhbiB2ZXJ0aWNhbFRleHQsIGlkIHVu
dXNlZFRyYW5zZm9ybSk7Ci0gICAgY29uc3QgY2hhciAqZnJhbWV3b3JrUGF0aCA9ICIvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrL0ZyYW1ld29ya3MvSElUb29sYm94
LmZyYW1ld29yay9ISVRvb2xib3giOwotICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uTmFtZSA9ICJI
SURpY3Rpb25hcnlXaW5kb3dTaG93IjsKLSNlbmRpZgotCi0gICAgc3RhdGljIGJvb2wgbG9va2Vk
Rm9yRnVuY3Rpb24gPSBmYWxzZTsKLSAgICBzdGF0aWMgU2VydmljZVdpbmRvd1Nob3dGdW5jdGlv
biBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cgPSBOVUxMOwotCi0gICAgaWYgKCFsb29rZWRG
b3JGdW5jdGlvbikgewotICAgICAgICB2b2lkKiBsYW5nQW5hbHlzaXNGcmFtZXdvcmsgPSBkbG9w
ZW4oZnJhbWV3b3JrUGF0aCwgUlRMRF9MQVpZKTsKLSAgICAgICAgQVNTRVJUKGxhbmdBbmFseXNp
c0ZyYW1ld29yayk7Ci0gICAgICAgIGlmIChsYW5nQW5hbHlzaXNGcmFtZXdvcmspCi0gICAgICAg
ICAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cgPSAoU2VydmljZVdpbmRvd1Nob3dGdW5j
dGlvbilkbHN5bShsYW5nQW5hbHlzaXNGcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAg
IGxvb2tlZEZvckZ1bmN0aW9uID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGljdGlvbmFy
eVNlcnZpY2VXaW5kb3dTaG93KTsKLSAgICBpZiAoIWRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hv
dykgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGZpbmQgdGhlICVzIGZ1bmN0aW9uIGluICVz
IiwgZnVuY3Rpb25OYW1lLCBmcmFtZXdvcmtQYXRoKTsgCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIC8vIEZJWE1FOiBtdXN0IGNoZWNrIGZv
ciByaWdodC10by1sZWZ0IGhlcmUKLSAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVj
dGlvbiA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OwotCi0gICAgLy8gRklYTUU6IHRo
ZSBkaWN0aW9uYXJ5IEFQSSBleHBlY3RzIHRoZSByZWN0IGZvciB0aGUgZmlyc3QgbGluZSBvZiBz
ZWxlY3Rpb24uIFBhc3NpbmcKLSAgICAvLyB0aGUgcmVjdCBmb3IgdGhlIGVudGlyZSBzZWxlY3Rp
b24sIGFzIHdlIGRvIGhlcmUsIHBvc2l0aW9ucyB0aGUgcG9wLXVwIHdpbmRvdyBuZWFyCi0gICAg
Ly8gdGhlIGJvdHRvbSBvZiB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGF0IHRoZSBzZWxlY3Rl
ZCB3b3JkLgotICAgIHJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpuaWxdOwot
ICAgIHJlY3Qub3JpZ2luID0gW1tzZWxmIHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpyZWN0
Lm9yaWdpbl07Ci0gICAgTlNEYXRhICpkYXRhID0gW2F0dHJTdHJpbmcgUlRGRnJvbVJhbmdlOk5T
TWFrZVJhbmdlKDAsIFthdHRyU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxd
OwotICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyhkYXRhLCByZWN0LCAod3JpdGluZ0Rp
cmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCkgPyAxIDogMCk7Ci0jZWxz
ZQotICAgIC8vIFRoZSBISURpY3Rpb25hcnlXaW5kb3dTaG93IGZ1bmN0aW9uIHJlcXVpcmVzIHRo
ZSBvcmlnaW4sIGluIENHIHNjcmVlbiBjb29yZGluYXRlcywgb2YgdGhlIGZpcnN0IGNoYXJhY3Rl
ciBvZiB0ZXh0IGluIHRoZSBzZWxlY3Rpb24uCi0gICAgLy8gRklYTUUgNDk0NTgwODogV2UgYXBw
cm94aW1hdGUgdGhpcyBpbiBhIHdheSB0aGF0IHdvcmtzIHdlbGwgd2hlbiBhIHNpbmdsZSB3b3Jk
IGlzIHNlbGVjdGVkLCBhbmQgbGVzcyB3ZWxsIGluIHNvbWUgb3RoZXIgY2FzZXMKLSAgICAvLyAo
YnV0IG5vIHdvcnNlIHRoYW4gd2UgZGlkIGluIFRpZ2VyKQotICAgIE5TUG9pbnQgd2luZG93UG9p
bnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6cmVjdC5vcmlnaW4gdG9WaWV3Om5pbF07Ci0gICAgTlNQ
b2ludCBzY3JlZW5Qb2ludCA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2lu
ZG93UG9pbnRdOwotCi0gICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KG5pbCwgYXR0clN0
cmluZywgQ0ZSYW5nZU1ha2UoMCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSksIG5pbCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVHcmFwaGljc1NjcmVlblBvaW50Rm9yQXBwS2l0
U2NyZWVuUG9pbnQoc2NyZWVuUG9pbnQpLCBmYWxzZSwgbmlsKTsKLSNlbmRpZgotfQotCi0tICh2
b2lkKV9ob3ZlckZlZWRiYWNrU3VzcGVuZGVkQ2hhbmdlZAotewotICAgIFtzZWxmIF91cGRhdGVN
b3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKLX0KLQotLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tl
eUV2ZW50OihLZXlib2FyZEV2ZW50KilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91
bGRTYXZlCi17Ci0gICAgLy8gQXNrIEFwcEtpdCB0byBwcm9jZXNzIHRoZSBrZXkgZXZlbnQgLS0g
aXQgd2lsbCBjYWxsIGJhY2sgd2l0aCBlaXRoZXIgaW5zZXJ0VGV4dCBvciBkb0NvbW1hbmRCeVNl
bGVjdG9yLgotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyBwYXJh
bWV0ZXJzOwotICAgIHBhcmFtZXRlcnMuZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7Ci0gICAgcGFy
YW1ldGVycy5zaG91bGRTYXZlQ29tbWFuZCA9IHNob3VsZFNhdmU7Ci0gICAgLy8gSWYgd2UncmUg
aW50ZXJjZXB0aW5nIHRoZSBpbml0aWFsIElNIGNhbGwgd2UgYXNzdW1lIHRoYXQgdGhlIElNIGhh
cyBjb25zdW1lZCB0aGUgZXZlbnQsIAotICAgIC8vIGFuZCBvbmx5IGNoYW5nZSB0aGlzIGFzc3Vt
cHRpb24gaWYgb25lIG9mIHRoZSBOU1RleHRJbnB1dC9SZXNwb25kZXIgY2FsbGJhY2tzIGlzIHVz
ZWQuCi0gICAgLy8gV2UgYXNzdW1lIHRoZSBJTSB3aWxsICpub3QqIGNvbnN1bWUgaG90a2V5IHNl
cXVlbmNlcwotICAgIHBhcmFtZXRlcnMuY29uc3VtZWRCeUlNID0gIWV2ZW50LT5tZXRhS2V5KCkg
JiYgc2hvdWxkU2F2ZTsKLQotICAgIGlmIChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBs
YXRmb3JtRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKSkgewotICAgICAgICBOU0V2ZW50ICptYWNF
dmVudCA9IHBsYXRmb3JtRXZlbnQtPm1hY0V2ZW50KCk7Ci0gICAgICAgIGlmIChbbWFjRXZlbnQg
dHlwZV0gPT0gTlNLZXlEb3duICYmIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5
RG93bjptYWNFdmVudF0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChbbWFjRXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBwYXJhbWV0ZXJzLmV2ZW50ID0gZXZlbnQ7
Ci0gICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gJnBhcmFt
ZXRlcnM7Ci0gICAgICAgIF9wcml2YXRlLT5yZWNlaXZlZE5PT1AgPSBOTzsKLSAgICAgICAgY29u
c3QgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzID0gZXZlbnQtPmtleXByZXNzQ29t
bWFuZHMoKTsKLSAgICAgICAgYm9vbCBoYXNLZXlwcmVzc0NvbW1hbmQgPSAhY29tbWFuZHMuaXNF
bXB0eSgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBpbnRlcnByZXRLZXlFdmVudHMgZG9lc24ndCBt
YXRjaCBhcHBsaWNhdGlvbiBrZXkgZXF1aXZhbGVudHMgKHN1Y2ggYXMgQ21kK0EpLAotICAgICAg
ICAvLyBhbmQgc2VuZHMgbm9vcDogZm9yIHRob3NlLiBBcyBhIHJlc3VsdCwgd2UgZG9uJ3QgaGFu
ZGxlIHRob3NlIGZyb20gd2l0aGluIFdlYkNvcmUsCi0gICAgICAgIC8vIGJ1dCBzZW5kIGEgZnVs
bCBzZXF1ZW5jZSBvZiBET00gZXZlbnRzLCBpbmNsdWRpbmcgYW4gdW5uZWVkZWQga2V5cHJlc3Mu
Ci0gICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZFNhdmVDb21tYW5kIHx8ICFoYXNLZXlwcmVz
c0NvbW1hbmQpCi0gICAgICAgICAgICBbc2VsZiBpbnRlcnByZXRLZXlFdmVudHM6W05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0Om1hY0V2ZW50XV07Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
c2l6ZV90IHNpemUgPSBjb21tYW5kcy5zaXplKCk7Ci0gICAgICAgICAgICAvLyBBcmUgdGhlcmUg
Y29tbWFuZHMgdGhhdCB3b3VsZCBqdXN0IGNhdXNlIHRleHQgaW5zZXJ0aW9uIGlmIGV4ZWN1dGVk
IHZpYSBFZGl0b3I/Ci0gICAgICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBp
bmZvcm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgdGhleSBzaG91bGQgYmUgdHJlYXRl
ZCwgc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlCi0gICAgICAgICAgICAvLyB0byBlaXRoZXIg
aGFuZGxlIHRoZW0gaW1tZWRpYXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3Ig
bGV0IGEga2V5cHJlc3MgZXZlbnQgYmUgZ2VuZXJhdGVkCi0gICAgICAgICAgICAvLyAoZS5nLiBU
YWIgdGhhdCBpbnNlcnRzIGEgVGFiIGNoYXJhY3Rlciwgb3IgRW50ZXIpLgotICAgICAgICAgICAg
Ym9vbCBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChbc2Vs
ZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoY29tbWFuZHNbaV0u
Y29tbWFuZE5hbWUpXS5pc1RleHRJbnNlcnRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgaGF2
ZVRleHRJbnNlcnRpb25Db21tYW5kcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoIWhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgfHwgcGxhdGZvcm1FdmVudC0+dHlwZSgp
ID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhcikgewotICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
b21tYW5kc1tpXS5jb21tYW5kTmFtZSA9PSAiaW5zZXJ0VGV4dDoiKQotICAgICAgICAgICAgICAg
ICAgICAgICAgW3NlbGYgaW5zZXJ0VGV4dDpjb21tYW5kc1tpXS50ZXh0XTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYgZG9Db21tYW5kQnlT
ZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhjb21tYW5kc1tpXS5jb21tYW5kTmFtZSldOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBfcHJp
dmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0gICAgfQotICAgIHJldHVy
biAoIV9wcml2YXRlLT5yZWNlaXZlZE5PT1AgJiYgcGFyYW1ldGVycy5ldmVudFdhc0hhbmRsZWQp
IHx8IHBhcmFtZXRlcnMuY29uc3VtZWRCeUlNOwotfQotCi0tIChXZWJDb3JlOjpDYWNoZWRJbWFn
ZSopcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnBy
b21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwotfQotCi0tICh2b2lkKXNldFByb21pc2VkRHJhZ1RJ
RkZEYXRhU291cmNlOihXZWJDb3JlOjpDYWNoZWRJbWFnZSopc291cmNlCi17Ci0gICAgaWYgKHNv
dXJjZSkKLSAgICAgICAgc291cmNlLT5hZGRDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwot
ICAgIAotICAgIGlmIChfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCi0gICAg
ICAgIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHBy
b21pc2VkRGF0YUNsaWVudCgpKTsKLSAgICBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFT
b3VyY2UgPSBzb3VyY2U7Ci19Ci0KLSN1bmRlZiBDT01NQU5EX1BST0xPR1VFCi0KLS0gKHZvaWQp
X2xheW91dElmTmVlZGVkCi17Ci0gICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lk
ZSk7Ci0KLSAgICBpZiAoX3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyB8fCBbc2VsZiBfbmVl
ZHNMYXlvdXRdKQotICAgICAgICBbc2VsZiBsYXlvdXRdOwotfQotCi0tICh2b2lkKV93ZWJfbGF5
b3V0SWZOZWVkZWRSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfbGF5b3V0SWZOZWVkZWRdOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwot
I2VuZGlmCi0KLSAgICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotCi0gICAgW3NlbGYgX3dlYl9hZGREZXNjZW5k
YW50V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKLQotICAgIHVu
c2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rlc2NlbmRhbnRXZWJI
VE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfbGF5b3V0SWZOZWVkZWRdOwotCi0gICAgW2Rlc2Nl
bmRhbnRXZWJIVE1MVmlld3MgcmVsZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZh
dGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKSBfZGVz
dHJveUFsbFdlYlBsdWdpbnMKLXsKLSAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ry
b3lBbGxQbHVnaW5zXTsKLX0KLQotLSAoQk9PTClfaXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcgot
ewotICAgIHJldHVybiBfcHJpdmF0ZS0+cmVzaWduaW5nRmlyc3RSZXNwb25kZXI7Ci19Ci0KLS0g
KEJPT0wpX25lZWRzTGF5b3V0Ci17Ci0gICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9uZWVkc0xh
eW91dF07Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0tICh2b2lkKWF0
dGFjaFJvb3RMYXllcjooQ0FMYXllciopbGF5ZXIKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5sYXll
ckhvc3RpbmdWaWV3KSB7Ci0gICAgICAgIFdlYkxheWVySG9zdGluZ1ZpZXcqIGhvc3RpbmdWaWV3
ID0gW1tXZWJMYXllckhvc3RpbmdWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzZWxmIGJvdW5k
c11dOwotICAgICAgICBbaG9zdGluZ1ZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooTlNWaWV3V2lk
dGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZSldOwotICAgICAgICBbc2VsZiBhZGRTdWJ2
aWV3Omhvc3RpbmdWaWV3XTsKLSAgICAgICAgW2hvc3RpbmdWaWV3IHJlbGVhc2VdOwotICAgICAg
ICAvLyBob3N0aW5nVmlldyBpcyBvd25lZCBieSBiZWluZyBhIHN1YnZpZXcgb2Ygc2VsZgotICAg
ICAgICBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyA9IGhvc3RpbmdWaWV3OwotICAgICAgICBb
W3NlbGYgX3dlYlZpZXddIF9zdGFydGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltz
ZWxmIF9mcmFtZV1dOwotICAgIH0KLQotICAgIC8vIE1ha2UgYSBjb250YWluZXIgbGF5ZXIsIHdo
aWNoIHdpbGwgZ2V0IHNpemVkL3Bvc2l0aW9uZWQgYnkgQXBwS2l0IGFuZCBDQQotICAgIENBTGF5
ZXIqIHZpZXdMYXllciA9IFtDQUxheWVyIGxheWVyXTsKLSAgICBbX3ByaXZhdGUtPmxheWVySG9z
dGluZ1ZpZXcgc2V0TGF5ZXI6dmlld0xheWVyXTsKLSAgICBbX3ByaXZhdGUtPmxheWVySG9zdGlu
Z1ZpZXcgc2V0V2FudHNMYXllcjpZRVNdOwotICAgIAotICAgIC8vIFBhcmVudCBvdXIgcm9vdCBs
YXllciBpbiB0aGUgY29udGFpbmVyIGxheWVyCi0gICAgW3ZpZXdMYXllciBhZGRTdWJsYXllcjps
YXllcl07Ci19Ci0KLS0gKHZvaWQpZGV0YWNoUm9vdExheWVyCi17Ci0gICAgaWYgKF9wcml2YXRl
LT5sYXllckhvc3RpbmdWaWV3KSB7Ci0gICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmll
dyBzZXRMYXllcjpuaWxdOwotICAgICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0
V2FudHNMYXllcjpOT107Ci0gICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgPSBu
aWw7Ci0gICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci0gICAgfQotfQotI2VuZGlmCi0KLUBlbmQKLQot
QGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJOU1RleHRJbnB1dFN1cHBvcnQpCi0KLS0g
KE5TQXJyYXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0Ci17Ci0gICAgc3RhdGljIE5T
QXJyYXkgKnZhbGlkQXR0cmlidXRlczsKLSAgICBpZiAoIXZhbGlkQXR0cmlidXRlcykgewotICAg
ICAgICB2YWxpZEF0dHJpYnV0ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoK
LSAgICAgICAgICAgIE5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lLCBOU1VuZGVybGluZUNv
bG9yQXR0cmlidXRlTmFtZSwKLSAgICAgICAgICAgIE5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJp
YnV0ZU5hbWUsIE5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUsIG5pbF07
Ci0gICAgICAgIC8vIE5TVGV4dCBhbHNvIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRl
cywgYnV0IGl0J3MKLSAgICAgICAgLy8gaGFyZCB0byB0ZWxsIHdoaWNoIGFyZSByZWFsbHkgcmVx
dWlyZWQgZm9yIHRleHQgaW5wdXQgdG8KLSAgICAgICAgLy8gd29yayB3ZWxsOyBJIGhhdmUgbm90
IHNlZW4gYW55IGlucHV0IG1ldGhvZCBtYWtlIHVzZSBvZiB0aGVtIHlldC4KLSAgICAgICAgLy8g
ICAgIE5TRm9udEF0dHJpYnV0ZU5hbWUsIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwK
LSAgICAgICAgLy8gICAgIE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwgTlNMYW5ndWFn
ZUF0dHJpYnV0ZU5hbWUuCi0gICAgICAgIENGUmV0YWluKHZhbGlkQXR0cmlidXRlcyk7Ci0gICAg
fQotICAgIExPRyhUZXh0SW5wdXQsICJ2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0IC0+ICgu
Li4pIik7Ci0gICAgcmV0dXJuIHZhbGlkQXR0cmlidXRlczsKLX0KLQotLSAoTlNUZXh0SW5wdXRD
b250ZXh0ICopaW5wdXRDb250ZXh0Ci17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5leHBvc2VJbnB1
dENvbnRleHQgPyBbc3VwZXIgaW5wdXRDb250ZXh0XSA6IG5pbDsKLX0KLQotLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nICopdGV4dFN0b3JhZ2UKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5leHBvc2VJbnB1
dENvbnRleHQpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgInRleHRTdG9yYWdlIC0+IG5pbCIp
OwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJl
c3VsdCA9IFtzZWxmIGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
VUlOVF9NQVgpXTsKLSAgICAKLSAgICBMT0coVGV4dElucHV0LCAidGV4dFN0b3JhZ2UgLT4gXCIl
QFwiIiwgcmVzdWx0ID8gW3Jlc3VsdCBzdHJpbmddIDogQCIiKTsKLSAgICAKLSAgICAvLyBXZSBo
YXZlIHRvIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgcmF0aGVyIHRoYW4gbnVsbCB0byBwcmV2ZW50
IFRTTSBmcm9tIGNhbGxpbmcgLXN0cmluZwotICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBb
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVh
c2VdOwotfQotCi0tIChOU1VJbnRlZ2VyKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQp
dGhlUG9pbnQKLXsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBX
ZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotCi0gICAgaWYgKHdpbmRvdykKLSAgICAg
ICAgdGhlUG9pbnQgPSBbd2luZG93IGNvbnZlcnRTY3JlZW5Ub0Jhc2U6dGhlUG9pbnRdOwotICAg
IHRoZVBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OnRoZVBvaW50IGZyb21WaWV3Om5pbF07Ci0K
LSAgICBET01SYW5nZSAqcmFuZ2UgPSBbZnJhbWUgX2NoYXJhY3RlclJhbmdlQXRQb2ludDp0aGVQ
b2ludF07Ci0gICAgaWYgKCFyYW5nZSkgewotICAgICAgICBMT0coVGV4dElucHV0LCAiY2hhcmFj
dGVySW5kZXhGb3JQb2ludDooJWYsICVmKSAtPiBOU05vdEZvdW5kIiwgdGhlUG9pbnQueCwgdGhl
UG9pbnQueSk7Ci0gICAgICAgIHJldHVybiBOU05vdEZvdW5kOwotICAgIH0KLSAgICAKLSAgICB1
bnNpZ25lZCByZXN1bHQgPSBbZnJhbWUgX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTpyYW5nZV0u
bG9jYXRpb247Ci0gICAgTE9HKFRleHRJbnB1dCwgImNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KCVm
LCAlZikgLT4gJXUiLCB0aGVQb2ludC54LCB0aGVQb2ludC55LCByZXN1bHQpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLS0gKE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlNS
YW5nZSl0aGVSYW5nZQoteyAgICAKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVd
OwotICAgIAotICAgIC8vIEp1c3QgdG8gbWF0Y2ggTlNUZXh0VmlldydzIGJlaGF2aW9yLiBSZWdy
ZXNzaW9uIHRlc3RzIGNhbm5vdCBkZXRlY3QgdGhpczsKLSAgICAvLyB0byByZXByb2R1Y2UsIHVz
ZSBhIHRlc3QgYXBwbGljYXRpb24gZnJvbSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NjgyCi0gICAgLy8gKHR5cGUgc29tZXRoaW5nOyB0cnkgcmFuZ2VzICgxLCAtMSkg
YW5kICgyLCAtMSkuCi0gICAgaWYgKCh0aGVSYW5nZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0
aCA8IHRoZVJhbmdlLmxvY2F0aW9uKSAmJiAodGhlUmFuZ2UubG9jYXRpb24gKyB0aGVSYW5nZS5s
ZW5ndGggIT0gMCkpCi0gICAgICAgIHRoZVJhbmdlLmxlbmd0aCA9IDA7Ci0gICAgCi0gICAgRE9N
UmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2Vd
OwotICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZv
ckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICgwLCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0
aW9uLCB0aGVSYW5nZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAw
LCAwKTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwot
ICAgIEFTU0VSVChbcmFuZ2UgZW5kQ29udGFpbmVyXSk7Ci0gICAgCi0gICAgTlNSZWN0IHJlc3Vs
dFJlY3QgPSBbZnJhbWUgX2ZpcnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsKLSAgICByZXN1bHRS
ZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6cmVzdWx0UmVjdCB0b1ZpZXc6bmlsXTsKLQotICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIGlmICh3aW5kb3cpCi0gICAgICAg
IHJlc3VsdFJlY3Qub3JpZ2luID0gW3dpbmRvdyBjb252ZXJ0QmFzZVRvU2NyZWVuOnJlc3VsdFJl
Y3Qub3JpZ2luXTsKLSAgICAKLSAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFj
dGVyUmFuZ2U6KCV1LCAldSkgLT4gKCVmLCAlZiwgJWYsICVmKSIsIHRoZVJhbmdlLmxvY2F0aW9u
LCB0aGVSYW5nZS5sZW5ndGgsIHJlc3VsdFJlY3Qub3JpZ2luLngsIHJlc3VsdFJlY3Qub3JpZ2lu
LnksIHJlc3VsdFJlY3Quc2l6ZS53aWR0aCwgcmVzdWx0UmVjdC5zaXplLmhlaWdodCk7Ci0gICAg
cmV0dXJuIHJlc3VsdFJlY3Q7Ci19Ci0KLS0gKE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZQotewotICAg
IGlmICghaXNUZXh0SW5wdXQoY29yZShbc2VsZiBfZnJhbWVdKSkpIHsKLSAgICAgICAgTE9HKFRl
eHRJbnB1dCwgInNlbGVjdGVkUmFuZ2UgLT4gKE5TTm90Rm91bmQsIDApIik7Ci0gICAgICAgIHJl
dHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLSAgICB9Ci0gICAgTlNSYW5nZSByZXN1
bHQgPSBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0ZWROU1JhbmdlXTsKLQotICAgIExPRyhUZXh0SW5w
dXQsICJzZWxlY3RlZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQu
bGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChOU1JhbmdlKW1hcmtlZFJhbmdl
Ci17Ci0gICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZSh3ZWJGcmFtZSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAg
IHJldHVybiBOU01ha2VSYW5nZSgwLCAwKTsKLSAgICBOU1JhbmdlIHJlc3VsdCA9IFt3ZWJGcmFt
ZSBfY29udmVydFRvTlNSYW5nZTpjb3JlRnJhbWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdl
KCkuZ2V0KCldOwotCi0gICAgTE9HKFRleHRJbnB1dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUp
IiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdl
OihOU1JhbmdlKW5zUmFuZ2UKLXsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVd
OwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKGZyYW1lKTsKLSAgICBpZiAoIWlzVGV4dElu
cHV0KGNvcmVGcmFtZSkgfHwgaXNJblBhc3N3b3JkRmllbGQoY29yZUZyYW1lKSkgewotICAgICAg
ICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAt
PiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7Ci0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgfQotICAgIERPTVJhbmdlICpkb21SYW5nZSA9IFtmcmFtZSBfY29udmVydE5T
UmFuZ2VUb0RPTVJhbmdlOm5zUmFuZ2VdOwotICAgIGlmICghZG9tUmFuZ2UpIHsKLSAgICAgICAg
TE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4g
bmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4g
bmlsOwotICAgIH0KLQotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gW05TQXR0cmli
dXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6Y29yZShkb21SYW5nZSld
OwotICAgIAotICAgIC8vIFtOU0F0dHJpYnV0ZWRTdHJpbmcoV2ViS2l0RXh0cmFzKSBfd2ViX2F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6XSAgaW5zaXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGlu
ZyAKLSAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVh
a3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+Ci0gICAg
Ly8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50IHN0cmluZyB0
byB0aGUgY29ycmVjdCBsZW5ndGguCi0gICAgaWYgKFtyZXN1bHQgbGVuZ3RoXSA+IG5zUmFuZ2Uu
bGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChbcmVzdWx0IGxlbmd0aF0gPT0gbnNSYW5nZS5sZW5n
dGggKyAxKTsKLSAgICAgICAgQVNTRVJUKFtbcmVzdWx0IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRl
eDpuc1JhbmdlLmxlbmd0aF0gPT0gJ1xuJyB8fCBbW3Jlc3VsdCBzdHJpbmddIGNoYXJhY3RlckF0
SW5kZXg6bnNSYW5nZS5sZW5ndGhdID09ICcgJyk7Ci0gICAgICAgIHJlc3VsdCA9IFtyZXN1bHQg
YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBuc1JhbmdlLmxlbmd0
aCldOwotICAgIH0KLSAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21S
YW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0
aCwgW3Jlc3VsdCBzdHJpbmddKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyB0ZXN0IGZv
ciAxMC40IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9ibGVtLzQyNDM0NjM+Ci0jaWZkZWYgQlVJTERJ
TkdfT05fVElHRVIKLS0gKGxvbmcpY29udmVyc2F0aW9uSWRlbnRpZmllcgotewotICAgIHJldHVy
biAobG9uZylzZWxmOwotfQotI2Vsc2UKLS0gKE5TSW50ZWdlciljb252ZXJzYXRpb25JZGVudGlm
aWVyCi17Ci0gICAgcmV0dXJuIChOU0ludGVnZXIpc2VsZjsKLX0KLSNlbmRpZgotCi0tIChCT09M
KWhhc01hcmtlZFRleHQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBCT09MIHJlc3VsdCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigp
LT5oYXNDb21wb3NpdGlvbigpOwotICAgIExPRyhUZXh0SW5wdXQsICJoYXNNYXJrZWRUZXh0IC0+
ICV1IiwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tICh2b2lkKXVubWFya1Rl
eHQKLXsKLSAgICBMT0coVGV4dElucHV0LCAidW5tYXJrVGV4dCIpOwotCi0gICAgLy8gVXNlIHBv
aW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50
ZXJwcmV0S2V5RXZlbnRzLgotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJz
OwotICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKLQotICAg
IGlmIChwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9
IFlFUzsKLSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87Ci0gICAgfQotICAg
IAotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0
b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiByZXN1bHQpCi17Ci0gICAgaW50IGxlbmd0aCA9IFtb
c3RyaW5nIHN0cmluZ10gbGVuZ3RoXTsKLQotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSAoaSA8
IGxlbmd0aCkgewotICAgICAgICBOU1JhbmdlIHJhbmdlOwotICAgICAgICBOU0RpY3Rpb25hcnkg
KmF0dHJzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJbmRleDppIGxvbmdlc3RFZmZlY3RpdmVSYW5n
ZTomcmFuZ2UgaW5SYW5nZTpOU01ha2VSYW5nZShpLCBsZW5ndGggLSBpKV07Ci0KLSAgICAgICAg
aWYgKE5TTnVtYmVyICpzdHlsZSA9IFthdHRycyBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHls
ZUF0dHJpYnV0ZU5hbWVdKSB7Ci0gICAgICAgICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFj
azsKLSAgICAgICAgICAgIGlmIChOU0NvbG9yICpjb2xvckF0dHIgPSBbYXR0cnMgb2JqZWN0Rm9y
S2V5Ok5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lXSkKLSAgICAgICAgICAgICAgICBjb2xv
ciA9IGNvbG9yRnJvbU5TQ29sb3IoW2NvbG9yQXR0ciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6
TlNEZXZpY2VSR0JDb2xvclNwYWNlXSk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKENvbXBv
c2l0aW9uVW5kZXJsaW5lKHJhbmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKHJhbmdlKSwgY29sb3Is
IFtzdHlsZSBpbnRWYWx1ZV0gPiAxKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpID0gcmFuZ2Uu
bG9jYXRpb24gKyByYW5nZS5sZW5ndGg7Ci0gICAgfQotfQotCi0tICh2b2lkKXNldE1hcmtlZFRl
eHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCi17Ci0gICAg
Qk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmli
dXRlZFN0cmluZyBjbGFzc11dOyAvLyBPdGhlcndpc2UsIE5TU3RyaW5nCi0KLSAgICBMT0coVGV4
dElucHV0LCAic2V0TWFya2VkVGV4dDpcIiVAXCIgc2VsZWN0ZWRSYW5nZTooJXUsICV1KSIsIGlz
QXR0cmlidXRlZFN0cmluZyA/IFtzdHJpbmcgc3RyaW5nXSA6IHN0cmluZywgbmV3U2VsUmFuZ2Uu
bG9jYXRpb24sIG5ld1NlbFJhbmdlLmxlbmd0aCk7Ci0KLSAgICAvLyBVc2UgcG9pbnRlciB0byBn
ZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlF
dmVudHMuCi0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgX3By
aXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOwotCi0gICAgaWYgKHBhcmFt
ZXRlcnMpIHsKLSAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gWUVTOwotICAg
ICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKLSAgICB9Ci0gICAgCi0gICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghW3NlbGYgX2lzRWRpdGFibGVdKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7
Ci0gICAgTlNTdHJpbmcgKnRleHQgPSBzdHJpbmc7Ci0KLSAgICBpZiAoaXNBdHRyaWJ1dGVkU3Ry
aW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1hcmtlZFRleHRMZW5ndGggPSBbKE5TU3RyaW5nICop
c3RyaW5nIGxlbmd0aF07Ci0gICAgICAgIE5TU3RyaW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcg
YXR0cmlidXRlOk5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRl
eDowIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTpOVUxMIGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbWFy
a2VkVGV4dExlbmd0aCldOwotICAgICAgICBMT0coVGV4dElucHV0LCAiICAgIFJlcGxhY2VtZW50
UmFuZ2U6ICVAIiwgcmFuZ2VTdHJpbmcpOwotICAgICAgICAvLyBUaGUgQXBwS2l0IGFkZHMgYSAn
c2VjcmV0JyBwcm9wZXJ0eSB0byB0aGUgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHJlcGxhY2Vt
ZW50IHJhbmdlLgotICAgICAgICAvLyBUaGUgcmVwbGFjZW1lbnQgcmFuZ2UgaXMgdGhlIHJhbmdl
IG9mIHRoZSB0aGUgdGV4dCB0aGF0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuZXcgc3Ry
aW5nLgotICAgICAgICBpZiAocmFuZ2VTdHJpbmcpCi0gICAgICAgICAgICBbW3NlbGYgX2ZyYW1l
XSBfc2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0cmluZyhyYW5nZVN0cmluZyldOwotCi0gICAg
ICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107Ci0gICAgICAgIGV4dHJhY3RVbmRlcmxpbmVzKHN0
cmluZywgdW5kZXJsaW5lcyk7Ci0gICAgfQotCi0gICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0
Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgbmV3U2VsUmFuZ2UubG9jYXRpb24sIE5TTWF4
UmFuZ2UobmV3U2VsUmFuZ2UpKTsKLX0KLQotLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihT
RUwpc2VsZWN0b3IKLXsKLSAgICBMT0coVGV4dElucHV0LCAiZG9Db21tYW5kQnlTZWxlY3Rvcjpc
IiVzXCIiLCBzZWxfZ2V0TmFtZShzZWxlY3RvcikpOwotCi0gICAgLy8gVXNlIHBvaW50ZXIgdG8g
Z2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5
RXZlbnRzLgotICAgIC8vIFRoZSBzYW1lIGNhbGwgdG8gaW50ZXJwcmV0S2V5RXZlbnRzIGNhbiBk
byBtb3JlIHRoYW4gb25lIGNvbW1hbmQuCi0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnM7Ci0gICAgaWYgKHBhcmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1
bWVkQnlJTSA9IE5POwotCi0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rvcihub29wOikpIHsK
LSAgICAgICAgX3ByaXZhdGUtPnJlY2VpdmVkTk9PUCA9IFlFUzsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEtleWJvYXJkRXZlbnQqIGV2ZW50ID0gcGFyYW1ldGVycyA/IHBhcmFtZXRl
cnMtPmV2ZW50IDogMDsKLSAgICBib29sIHNob3VsZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAm
JiBwYXJhbWV0ZXJzLT5zaG91bGRTYXZlQ29tbWFuZDsKLQotICAgIGlmIChldmVudCAmJiBzaG91
bGRTYXZlQ29tbWFuZCkKLSAgICAgICAgZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQo
S2V5cHJlc3NDb21tYW5kKE5TU3RyaW5nRnJvbVNlbGVjdG9yKHNlbGVjdG9yKSkpOwotICAgIGVs
c2UgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBvbmx5IGRpcmVjdCBjYWxscyB0byBkb0Nv
bW1hbmRCeVNlbGVjdG9yOiBzZWUgdGhlIHBhcmFtZXRlcnMgYnkgc2V0dGluZyB0byAwLgotICAg
ICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0KLSAgICAg
ICAgYm9vbCBldmVudFdhc0hhbmRsZWQ7Ci0KLSAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtz
ZWxmIF93ZWJWaWV3XTsKLSAgICAgICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl0pCi0g
ICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSB0cnVlOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVj
dG9yOnNlbGVjdG9yXTsKLSAgICAgICAgICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpCi0g
ICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8vIElmIFdlYktpdCBkb2VzIG5v
dCBzdXBwb3J0IHRoaXMgY29tbWFuZCwgd2UgbmVlZCB0byBwYXNzIHRoZSBzZWxlY3RvciB0byBz
dXBlci4KLSAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNl
bGVjdG9yID0gc2VsZWN0b3I7Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGUgc2luayBkb2VzIHR3
byB0aGluZ3M6IDEpIFRlbGxzIHVzIGlmIHRoZSByZXNwb25kZXIgd2VudCB1bmhhbmRsZWQsIGFu
ZAotICAgICAgICAgICAgICAgIC8vIDIpIHByZXZlbnRzIGFueSBOU0JlZXA7IHdlIGRvbid0IGV2
ZXIgd2FudCB0byBiZWVwIGhlcmUuCi0gICAgICAgICAgICAgICAgV2ViUmVzcG9uZGVyQ2hhaW5T
aW5rICpzaW5rID0gW1tXZWJSZXNwb25kZXJDaGFpblNpbmsgYWxsb2NdIGluaXRXaXRoUmVzcG9u
ZGVyQ2hhaW46c2VsZl07Ci0gICAgICAgICAgICAgICAgW3N1cGVyIGRvQ29tbWFuZEJ5U2VsZWN0
b3I6c2VsZWN0b3JdOwotICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9ICFbc2luayBy
ZWNlaXZlZFVuaGFuZGxlZENvbW1hbmRdOwotICAgICAgICAgICAgICAgIFtzaW5rIGRldGFjaF07
Ci0gICAgICAgICAgICAgICAgW3NpbmsgcmVsZWFzZV07Ci0KLSAgICAgICAgICAgICAgICBfcHJp
dmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gMDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJhbWV0ZXJzKQotICAgICAgICAgICAgcGFyYW1l
dGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gZXZlbnRXYXNIYW5kbGVkOwotCi0gICAgICAgIC8vIFJl
c3RvcmUgdGhlIHBhcmFtZXRlcnMgc28gdGhhdCBvdGhlciBjYWxscyB0byBkb0NvbW1hbmRCeVNl
bGVjdG9yOiBzZWUgdGhlbSwKLSAgICAgICAgLy8gYW5kIG90aGVyIGNvbW1hbmRzIGNhbiBwYXJ0
aWNpcGF0ZSBpbiBzZXR0aW5nIHRoZSAiZXZlbnRXYXNIYW5kbGVkIiBmbGFnLgotICAgICAgICBf
cHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAg
fQotfQotCi0tICh2b2lkKWluc2VydFRleHQ6KGlkKXN0cmluZwotewotICAgIEJPT0wgaXNBdHRy
aWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcg
Y2xhc3NdXTsgLy8gT3RoZXJ3aXNlLCBOU1N0cmluZwotCi0gICAgTE9HKFRleHRJbnB1dCwgImlu
c2VydFRleHQ6XCIlQFwiIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDog
c3RyaW5nKTsKLQotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyog
cGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAg
IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKLSAgICBpZiAocGFy
YW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87Ci0KLSAgICAv
LyBXZSBkb24ndCBzdXBwb3J0IGluc2VydGluZyBhbiBhdHRyaWJ1dGVkIHN0cmluZyBidXQgaW5w
dXQgbWV0aG9kcyBkb24ndCBhcHBlYXIgdG8gcmVxdWlyZSB0aGlzLgotICAgIFJlZlB0cjxGcmFt
ZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBOU1N0cmluZyAqdGV4dDsK
LSAgICBib29sIGlzRnJvbUlucHV0TWV0aG9kID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRp
dG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7Ci0gICAgaWYgKGlzQXR0cmlidXRlZFN0cmluZykgewot
ICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOwotICAgICAgICAvLyBXZSBkZWFsIHdpdGgg
dGhlIE5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIGZy
b20gTlNBdHRyaWJ1dGVkU3RyaW5nIGhlcmUKLSAgICAgICAgLy8gc2ltcGx5IGJlY2F1c2UgaXQg
aXMgdXNlZCBieSBhdCBsZWFzdCBvbmUgSW5wdXQgTWV0aG9kIC0tIGl0IGNvcnJlc29uZHMgdG8g
dGhlIGtFdmVudFBhcmFtVGV4dElucHV0U2VuZFJlcGxhY2VSYW5nZQotICAgICAgICAvLyBldmVu
dCBpbiBUU00uICBUaGlzIGJlaGF2aW91ciBtYXRjaGVzIHRoYXQgb2YgLVtXZWJIVE1MVmlldyBz
ZXRNYXJrZWRUZXh0OnNlbGVjdGVkUmFuZ2U6XSB3aGVuIGl0IHJlY2VpdmVzIGFuCi0gICAgICAg
IC8vIE5TQXR0cmlidXRlZFN0cmluZwotICAgICAgICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBb
c3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1l
IGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0aXZlUmFuZ2U6TlVMTCBpblJhbmdlOk5TTWFrZVJhbmdl
KDAsIFt0ZXh0IGxlbmd0aF0pXTsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgIiAgICBSZXBsYWNl
bWVudFJhbmdlOiAlQCIsIHJhbmdlU3RyaW5nKTsKLSAgICAgICAgaWYgKHJhbmdlU3RyaW5nKSB7
Ci0gICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0
cmluZyhyYW5nZVN0cmluZyldOwotICAgICAgICAgICAgaXNGcm9tSW5wdXRNZXRob2QgPSBZRVM7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgdGV4dCA9IHN0cmluZzsKLQotICAgIGJv
b2wgZXZlbnRIYW5kbGVkID0gZmFsc2U7Ci0gICAgaWYgKFt0ZXh0IGxlbmd0aF0pIHsKLSAgICAg
ICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy0+ZXZlbnQg
OiAwOwotCi0gICAgICAgIC8vIGluc2VydFRleHQgY2FuIGJlIGNhbGxlZCBmcm9tIGFuIGlucHV0
IG1ldGhvZCBvciBmcm9tIG5vcm1hbCBrZXkgZXZlbnQgcHJvY2Vzc2luZwotICAgICAgICAvLyBJ
ZiBpdHMgZnJvbSBub3JtYWwga2V5IGV2ZW50IHByb2Nlc3NpbmcsIHdlIG1heSBuZWVkIHRvIHNh
dmUgdGhlIGFjdGlvbiB0byBwZXJmb3JtIGl0IGxhdGVyLgotICAgICAgICAvLyBJZiBpdHMgZnJv
bSBhbiBpbnB1dCBtZXRob2QsIHRoZW4gd2Ugc2hvdWxkIGdvIGFoZWFkIGFuZCBpbnNlcnQgdGhl
IHRleHQgbm93LiAgCi0gICAgICAgIC8vIFdlIGFzc3VtZSBpdCdzIGZyb20gdGhlIGlucHV0IG1l
dGhvZCBpZiB3ZSBoYXZlIG1hcmtlZCB0ZXh0LgotICAgICAgICAvLyBGSVhNRTogSW4gdGhlb3J5
LCB0aGlzIGNvdWxkIGJlIHdyb25nIGZvciBzb21lIGlucHV0IG1ldGhvZHMsIHNvIHdlIHNob3Vs
ZCB0cnkgdG8gZmluZAotICAgICAgICAvLyBhbm90aGVyIHdheSB0byBkZXRlcm1pbmUgaWYgdGhl
IGNhbGwgaXMgZnJvbSB0aGUgaW5wdXQgbWV0aG9kCi0gICAgICAgIGJvb2wgc2hvdWxkU2F2ZUNv
bW1hbmQgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMtPnNob3VsZFNhdmVDb21tYW5kOwotICAg
ICAgICBpZiAoZXZlbnQgJiYgc2hvdWxkU2F2ZUNvbW1hbmQgJiYgIWlzRnJvbUlucHV0TWV0aG9k
KSB7Ci0gICAgICAgICAgICBldmVudC0+a2V5cHJlc3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVz
c0NvbW1hbmQoImluc2VydFRleHQ6IiwgdGV4dCkpOwotICAgICAgICAgICAgX3ByaXZhdGUtPmlu
dGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgZXZlbnRUZXh0ID0gdGV4
dDsKLSAgICAgICAgZXZlbnRUZXh0LnJlcGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNo
YXJhY3Rlcik7IC8vIHNhbWUgdGhpbmcgaXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJD
b3JlCi0gICAgICAgIGlmIChjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRp
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0
aW9uKCkpCi0gICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gY29yZUZyYW1lLT5lZGl0b3Io
KS0+aW5zZXJ0VGV4dChldmVudFRleHQsIGV2ZW50KTsKLSAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29yZUZy
YW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKGV2ZW50VGV4dCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKCFwYXJhbWV0ZXJzKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGlzRnJvbUlucHV0TWV0aG9kKSB7Ci0gICAgICAgIC8v
IEFsbG93IGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHRvIGJlIGNhbGxlZCBhZnRlciBpbnNlcnRUZXh0
OiBieSByZXNldHRpbmcgaW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycwotICAgICAgICBfcHJp
dmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgICAg
IHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IFlFUzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBldmVudEhhbmRsZWQ7Ci19
Ci0KLS0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdlcgotewotICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBCT09MIGV4cG9zZUlucHV0Q29udGV4dCA9IGlzVGV4dElu
cHV0KGNvcmVGcmFtZSkgJiYgIWlzSW5QYXNzd29yZEZpZWxkKGNvcmVGcmFtZSk7Ci0gICAgaWYg
KGV4cG9zZUlucHV0Q29udGV4dCAhPSBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7Ci0g
ICAgICAgIF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQgPSBleHBvc2VJbnB1dENvbnRleHQ7
Ci0gICAgICAgIC8vIExldCBBcHBLaXQgY2FjaGUgYSBwb3RlbnRpYWxseSBjaGFuZ2VkIGlucHV0
IGNvbnRleHQuCi0gICAgICAgIC8vIFdlYkNvcmUgcm91dGluZWx5IHNldHMgdGhlIHNlbGVjdGlv
biB0byBOb25lIHdoZW4gZWRpdGluZywgYW5kIElNcyBiZWNvbWUgdW5oYXBweSB3aGVuIGFuIGlu
cHV0IGNvbnRleHQgc3VkZGVubHkgdHVybnMgbmlsLCBzZWUgYnVnIDI2MDA5LgotICAgICAgICBp
ZiAoIWNvcmVGcmFtZSB8fCAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpCi0gICAg
ICAgICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107Ci0gICAgfQotCi0gICAgaWYgKCFjb3JlRnJh
bWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+aWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2Uo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgc3RhcnQ7Ci0gICAgdW5zaWduZWQg
ZW5kOwotICAgIGlmIChjb3JlRnJhbWUtPmVkaXRvcigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlv
bihzdGFydCwgZW5kKSkKLSAgICAgICAgW1tOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5h
Z2VyXSBtYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdlZDpOU01ha2VSYW5nZShzdGFydCwgZW5kIC0g
c3RhcnQpIGNsaWVudDpzZWxmXTsKLSAgICBlbHNlIHsKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0
b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uV2l0aG91dERpc3R1cmJpbmdTZWxlY3Rpb24oKTsKLSAg
ICAgICAgW1tOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0QWJh
bmRvbmVkOnNlbGZdOwotICAgIH0KLX0KLQotQGVuZAotCi0vKgotICAgIFRoaXMgY2xhc3MgcnVu
cyB0aGUgc2hvdyBmb3IgaGFuZGluZyB0aGUgY29tcGxldGU6IE5TVGV4dFZpZXcgb3BlcmF0aW9u
LiAgSXQgY291bnRzIG9uIGl0cyBIVE1MIHZpZXcKLSAgICB0byBjYWxsIGVuZFJldmVydGluZ0No
YW5nZTogd2hlbmV2ZXIgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBuZWVkcyB0byBiZSBhYm9ydGVk
LgotIAotICAgIFRoZSBjbGFzcyBpcyBpbiBvbmUgb2YgdHdvIG1vZGVzOiAgUG9wdXBXaW5kb3cg
c2hvd2luZywgb3Igbm90LiAgSXQgaXMgc2hvd24gd2hlbiBhIGNvbXBsZXRpb24geWllbGRzCi0g
ICAgbW9yZSB0aGFuIG9uZSBtYXRjaC4gIElmIGEgY29tcGxldGlvbiB5aWVsZHMgb25lIG9yIHpl
cm8gbWF0Y2hlcywgaXQgaXMgbm90IHNob3duLCBhbmQgKip0aGVyZSBpcyBubwotICAgIHN0YXRl
IGNhcnJpZWQgYWNyb3NzIHRvIHRoZSBuZXh0IGNvbXBsZXRpb24qKi4KLSAqLwotCi1AaW1wbGVt
ZW50YXRpb24gV2ViVGV4dENvbXBsZXRlQ29udHJvbGxlcgotCi0tIChpZClpbml0V2l0aEhUTUxW
aWV3OihXZWJIVE1MVmlldyAqKXZpZXcKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAg
IGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBfdmlldyA9IHZpZXc7Ci0gICAg
cmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfcG9wdXBXaW5kb3cg
cmVsZWFzZV07Ci0gICAgW19jb21wbGV0aW9ucyByZWxlYXNlXTsKLSAgICBbX29yaWdpbmFsU3Ry
aW5nIHJlbGVhc2VdOwotICAgIAotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClf
aW5zZXJ0TWF0Y2g6KE5TU3RyaW5nICopbWF0Y2gKLXsKLSAgICAvLyBGSVhNRTogMzc2OTY1NCAt
IFdlIHNob3VsZCBwcmVzZXJ2ZSBjYXNlIG9mIHN0cmluZyBiZWluZyBpbnNlcnRlZCwgZXZlbiBp
biBwcmVmaXggKGJ1dCB0aGVuIGFsc28gYmUKLSAgICAvLyBhYmxlIHRvIHJldmVydCB0aGF0KS4g
IE1pbWljIE5TVGV4dC4KLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKLSAg
ICBOU1N0cmluZyAqbmV3VGV4dCA9IFttYXRjaCBzdWJzdHJpbmdGcm9tSW5kZXg6cHJlZml4TGVu
Z3RoXTsKLSAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNlbGVj
dFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwotfQotCi0vLyBtb3N0bHkgbGlmdGVk
IGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0KLS0gKHZvaWQpX2J1aWxkVUkKLXsKLSAgICBO
U1JlY3Qgc2Nyb2xsRnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIDEwMCwgMTAwKTsKLSAgICBOU1Jl
Y3QgdGFibGVGcmFtZSA9IE5TWmVyb1JlY3Q7ICAgIAotICAgIHRhYmxlRnJhbWUuc2l6ZSA9IFtO
U1Njcm9sbFZpZXcgY29udGVudFNpemVGb3JGcmFtZVNpemU6c2Nyb2xsRnJhbWUuc2l6ZSBoYXNI
b3Jpem9udGFsU2Nyb2xsZXI6Tk8gaGFzVmVydGljYWxTY3JvbGxlcjpZRVMgYm9yZGVyVHlwZTpO
U05vQm9yZGVyXTsKLSAgICAvLyBBZGRlZCBjYXN0IHRvIHdvcmsgYXJvdW5kIHByb2JsZW0gd2l0
aCBtdWx0aXBsZSBGb3VuZGF0aW9uIGluaXRXaXRoSWRlbnRpZmllcjogbWV0aG9kcyB3aXRoIGRp
ZmZlcmVudCBwYXJhbWV0ZXIgdHlwZXMuCi0gICAgTlNUYWJsZUNvbHVtbiAqY29sdW1uID0gWyhO
U1RhYmxlQ29sdW1uICopW05TVGFibGVDb2x1bW4gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDowXV07Ci0gICAgW2NvbHVtbiBzZXRXaWR0aDp0YWJsZUZy
YW1lLnNpemUud2lkdGhdOwotICAgIFtjb2x1bW4gc2V0RWRpdGFibGU6Tk9dOwotICAgIAotICAg
IF90YWJsZVZpZXcgPSBbW05TVGFibGVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnRhYmxlRnJh
bWVdOwotICAgIFtfdGFibGVWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXph
YmxlXTsKLSAgICBbX3RhYmxlVmlldyBhZGRUYWJsZUNvbHVtbjpjb2x1bW5dOwotICAgIFtjb2x1
bW4gcmVsZWFzZV07Ci0gICAgW190YWJsZVZpZXcgc2V0R3JpZFN0eWxlTWFzazpOU1RhYmxlVmll
d0dyaWROb25lXTsKLSAgICBbX3RhYmxlVmlldyBzZXRDb3JuZXJWaWV3Om5pbF07Ci0gICAgW190
YWJsZVZpZXcgc2V0SGVhZGVyVmlldzpuaWxdOwotICAgIFtfdGFibGVWaWV3IHNldENvbHVtbkF1
dG9yZXNpemluZ1N0eWxlOk5TVGFibGVWaWV3VW5pZm9ybUNvbHVtbkF1dG9yZXNpemluZ1N0eWxl
XTsKLSAgICBbX3RhYmxlVmlldyBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3RhYmxlVmlldyBz
ZXREYXRhU291cmNlOnNlbGZdOwotICAgIFtfdGFibGVWaWV3IHNldFRhcmdldDpzZWxmXTsKLSAg
ICBbX3RhYmxlVmlldyBzZXREb3VibGVBY3Rpb246QHNlbGVjdG9yKHRhYmxlQWN0aW9uOildOwot
ICAgIAotICAgIE5TU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IFtbTlNTY3JvbGxWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOnNjcm9sbEZyYW1lXTsKLSAgICBbc2Nyb2xsVmlldyBzZXRCb3JkZXJU
eXBlOk5TTm9Cb3JkZXJdOwotICAgIFtzY3JvbGxWaWV3IHNldEhhc1ZlcnRpY2FsU2Nyb2xsZXI6
WUVTXTsKLSAgICBbc2Nyb2xsVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6
YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwotICAgIFtzY3JvbGxWaWV3IHNldERvY3VtZW50
VmlldzpfdGFibGVWaWV3XTsKLSAgICBbX3RhYmxlVmlldyByZWxlYXNlXTsKLSAgICAKLSAgICBf
cG9wdXBXaW5kb3cgPSBbW05TV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OnNjcm9s
bEZyYW1lIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5n
U3RvcmVCdWZmZXJlZCBkZWZlcjpOT107Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRBbHBoYVZhbHVl
OjAuODhmXTsKLSAgICBbX3BvcHVwV2luZG93IHNldENvbnRlbnRWaWV3OnNjcm9sbFZpZXddOwot
ICAgIFtzY3JvbGxWaWV3IHJlbGVhc2VdOwotICAgIFtfcG9wdXBXaW5kb3cgc2V0SGFzU2hhZG93
OllFU107Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRPbmVTaG90OllFU107Ci0gICAgW19wb3B1cFdp
bmRvdyBfc2V0Rm9yY2VBY3RpdmVDb250cm9sczpZRVNdOwotICAgIFtfcG9wdXBXaW5kb3cgc2V0
UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKLX0KLQotLy8gbW9zdGx5IGxpZnRlZCBmcm9tIE5TVGV4
dFZpZXdfS2V5QmluZGluZy5tCi0tICh2b2lkKV9wbGFjZVBvcHVwV2luZG93OihOU1BvaW50KXRv
cExlZnQKLXsKLSAgICBpbnQgbnVtYmVyVG9TaG93ID0gW19jb21wbGV0aW9ucyBjb3VudF07Ci0g
ICAgaWYgKG51bWJlclRvU2hvdyA+IDIwKSB7Ci0gICAgICAgIG51bWJlclRvU2hvdyA9IDIwOwot
ICAgIH0KLQotICAgIE5TUmVjdCB3aW5kb3dGcmFtZTsKLSAgICBOU1BvaW50IHdvcmRTdGFydCA9
IHRvcExlZnQ7Ci0gICAgd2luZG93RnJhbWUub3JpZ2luID0gW1tfdmlldyB3aW5kb3ddIGNvbnZl
cnRCYXNlVG9TY3JlZW46W192aWV3IGNvbnZlcnRQb2ludDp3b3JkU3RhcnQgdG9WaWV3Om5pbF1d
OwotICAgIHdpbmRvd0ZyYW1lLnNpemUuaGVpZ2h0ID0gbnVtYmVyVG9TaG93ICogW190YWJsZVZp
ZXcgcm93SGVpZ2h0XSArIChudW1iZXJUb1Nob3cgKyAxKSAqIFtfdGFibGVWaWV3IGludGVyY2Vs
bFNwYWNpbmddLmhlaWdodDsKLSAgICB3aW5kb3dGcmFtZS5vcmlnaW4ueSAtPSB3aW5kb3dGcmFt
ZS5zaXplLmhlaWdodDsKLSAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbTlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXpl
OjEyLjBmXSwgTlNGb250QXR0cmlidXRlTmFtZSwgbmlsXTsKLSAgICBmbG9hdCBtYXhXaWR0aCA9
IDAuMGY7Ci0gICAgaW50IG1heEluZGV4ID0gLTE7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0g
MDsgaSA8IG51bWJlclRvU2hvdzsgaSsrKSB7Ci0gICAgICAgIGZsb2F0IHdpZHRoID0gY2VpbGYo
W1tfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDppXSBzaXplV2l0aEF0dHJpYnV0ZXM6YXR0cmli
dXRlc10ud2lkdGgpOwotICAgICAgICBpZiAod2lkdGggPiBtYXhXaWR0aCkgewotICAgICAgICAg
ICAgbWF4V2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgIG1heEluZGV4ID0gaTsKLSAgICAgICAg
fQotICAgIH0KLSAgICB3aW5kb3dGcmFtZS5zaXplLndpZHRoID0gMTAwOwotICAgIGlmIChtYXhJ
bmRleCA+PSAwKSB7Ci0gICAgICAgIG1heFdpZHRoID0gY2VpbGYoW05TU2Nyb2xsVmlldyBmcmFt
ZVNpemVGb3JDb250ZW50U2l6ZTpOU01ha2VTaXplKG1heFdpZHRoLCAxMDAuMGYpIGhhc0hvcml6
b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNhbFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TTm9C
b3JkZXJdLndpZHRoKTsKLSAgICAgICAgbWF4V2lkdGggPSBjZWlsZihbTlNXaW5kb3cgZnJhbWVS
ZWN0Rm9yQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgwLjBmLCAwLjBmLCBtYXhXaWR0aCwgMTAwLjBm
KSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFza10uc2l6ZS53aWR0aCk7Ci0gICAgICAg
IG1heFdpZHRoICs9IDUuMGY7Ci0gICAgICAgIHdpbmRvd0ZyYW1lLnNpemUud2lkdGggPSBNQVgo
bWF4V2lkdGgsIHdpbmRvd0ZyYW1lLnNpemUud2lkdGgpOwotICAgICAgICBtYXhXaWR0aCA9IE1J
Tig0MDAuMGYsIHdpbmRvd0ZyYW1lLnNpemUud2lkdGgpOwotICAgIH0KLSAgICBbX3BvcHVwV2lu
ZG93IHNldEZyYW1lOndpbmRvd0ZyYW1lIGRpc3BsYXk6Tk9dOwotICAgIAotICAgIFtfdGFibGVW
aWV3IHJlbG9hZERhdGFdOwotICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4ZXM6W05TSW5k
ZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6MF0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9dOwotICAg
IFtfdGFibGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTowXTsKLSAgICBbc2VsZiBfcmVmbGVjdFNl
bGVjdGlvbl07Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRMZXZlbDpOU1BvcFVwTWVudVdpbmRvd0xl
dmVsXTsKLSAgICBbX3BvcHVwV2luZG93IG9yZGVyRnJvbnQ6bmlsXTsgICAgCi0gICAgW1tfdmll
dyB3aW5kb3ddIGFkZENoaWxkV2luZG93Ol9wb3B1cFdpbmRvdyBvcmRlcmVkOk5TV2luZG93QWJv
dmVdOwotfQotCi0tICh2b2lkKWRvQ29tcGxldGlvbgotewotICAgIGlmICghX3BvcHVwV2luZG93
KSB7Ci0gICAgICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNo
YXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgICAgIGlmICghY2hlY2tlcikgewotICAgICAgICAgICAg
TE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVtCi0gICAgICAgIFdl
YkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVdOwotICAgICAgICBET01SYW5nZSAqc2VsZWN0
aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSk7Ci0gICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ECi0gICAgICAg
ICAgICBkaXJlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQgZ3JhbnVsYXJpdHk6
V29yZEdyYW51bGFyaXR5XTsKLSAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQg
Y2xvbmVSYW5nZV07Ci0gICAgICAgIFtwcmVmaXggc2V0RW5kOltzZWxlY3Rpb24gc3RhcnRDb250
YWluZXJdIG9mZnNldDpbc2VsZWN0aW9uIHN0YXJ0T2Zmc2V0XV07Ci0KLSAgICAgICAgLy8gUmVq
ZWN0IHNvbWUgTk9QIGNhc2VzCi0gICAgICAgIGlmIChbcHJlZml4IGNvbGxhcHNlZF0pIHsKLSAg
ICAgICAgICAgIE5TQmVlcCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIE5TU3RyaW5nICpwcmVmaXhTdHIgPSBbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnByZWZpeF07
Ci0gICAgICAgIE5TU3RyaW5nICp0cmltbWVkUHJlZml4ID0gW3ByZWZpeFN0ciBzdHJpbmdCeVRy
aW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGlu
ZUNoYXJhY3RlclNldF1dOwotICAgICAgICBpZiAoW3RyaW1tZWRQcmVmaXggbGVuZ3RoXSA9PSAw
KSB7Ci0gICAgICAgICAgICBOU0JlZXAoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBwcmVmaXhMZW5ndGggPSBbcHJlZml4U3RyIGxlbmd0aF07Ci0KLSAgICAgICAg
Ly8gTG9va3VwIG1hdGNoZXMKLSAgICAgICAgW19jb21wbGV0aW9ucyByZWxlYXNlXTsKLSAgICAg
ICAgX2NvbXBsZXRpb25zID0gW2NoZWNrZXIgY29tcGxldGlvbnNGb3JQYXJ0aWFsV29yZFJhbmdl
Ok5TTWFrZVJhbmdlKDAsIFtwcmVmaXhTdHIgbGVuZ3RoXSkgaW5TdHJpbmc6cHJlZml4U3RyIGxh
bmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOltbX3ZpZXcgX3dlYlZpZXddIHNwZWxs
Q2hlY2tlckRvY3VtZW50VGFnXV07Ci0gICAgICAgIFtfY29tcGxldGlvbnMgcmV0YWluXTsKLSAg
ICAKLSAgICAgICAgaWYgKCFfY29tcGxldGlvbnMgfHwgW19jb21wbGV0aW9ucyBjb3VudF0gPT0g
MCkgewotICAgICAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoW19jb21wbGV0
aW9ucyBjb3VudF0gPT0gMSkgewotICAgICAgICAgICAgW3NlbGYgX2luc2VydE1hdGNoOltfY29t
cGxldGlvbnMgb2JqZWN0QXRJbmRleDowXV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIV9vcmlnaW5hbFN0cmluZyk7ICAgICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgYmUg
c2V0IElGRiB3ZSBoYXZlIGEgcG9wdXAgd2luZG93Ci0gICAgICAgICAgICBfb3JpZ2luYWxTdHJp
bmcgPSBbW2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpzZWxlY3Rpb25dIHJldGFpbl07Ci0gICAgICAg
ICAgICBbc2VsZiBfYnVpbGRVSV07Ci0gICAgICAgICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJh
bWUgX2NhcmV0UmVjdEF0Tm9kZTpbd2hvbGVXb3JkIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3do
b2xlV29yZCBzdGFydE9mZnNldF0gYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJl
YW1dOwotICAgICAgICAgICAgLy8gKzEgdG8gYmUgdW5kZXIgdGhlIHdvcmQsIG5vdCB0aGUgY2Fy
ZXQKLSAgICAgICAgICAgIC8vIEZJWE1FIC0gMzc2OTY1MiAtIFdyb25nIHBvc2l0aW9uaW5nIGZv
ciByaWdodCB0byBsZWZ0IGxhbmd1YWdlcy4gIFdlIHNob3VsZCBsaW5lIHVwIHRoZSB1cHBlcgot
ICAgICAgICAgICAgLy8gcmlnaHQgY29ybmVyIHdpdGggdGhlIGNhcmV0IGluc3RlYWQgb2YgdXBw
ZXIgbGVmdCwgYW5kIHRoZSArMSB3b3VsZCBiZSBhIC0xLgotICAgICAgICAgICAgTlNQb2ludCB3
b3JkTG93ZXJMZWZ0ID0geyBOU01pblgod29yZFJlY3QpKzEsIE5TTWF4WSh3b3JkUmVjdCkgfTsK
LSAgICAgICAgICAgIFtzZWxmIF9wbGFjZVBvcHVwV2luZG93OndvcmRMb3dlckxlZnRdOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllF
UyBtb3ZlTGVmdDpOT107Ci0gICAgfQotfQotCi0tICh2b2lkKWVuZFJldmVydGluZ0NoYW5nZToo
Qk9PTClyZXZlcnRDaGFuZ2UgbW92ZUxlZnQ6KEJPT0wpZ29MZWZ0Ci17Ci0gICAgaWYgKF9wb3B1
cFdpbmRvdykgewotICAgICAgICAvLyB0ZWFyIGRvd24gVUkKLSAgICAgICAgW1tfdmlldyB3aW5k
b3ddIHJlbW92ZUNoaWxkV2luZG93Ol9wb3B1cFdpbmRvd107Ci0gICAgICAgIFtfcG9wdXBXaW5k
b3cgb3JkZXJPdXQ6c2VsZl07Ci0gICAgICAgIC8vIE11c3QgYXV0b3JlbGVhc2UgYmVjYXVzZSBl
dmVudCB0cmFja2luZyBjb2RlIG1heSBiZSBvbiB0aGUgc3RhY2sgdG91Y2hpbmcgVUkKLSAgICAg
ICAgW19wb3B1cFdpbmRvdyBhdXRvcmVsZWFzZV07Ci0gICAgICAgIF9wb3B1cFdpbmRvdyA9IG5p
bDsKLQotICAgICAgICBpZiAocmV2ZXJ0Q2hhbmdlKSB7Ci0gICAgICAgICAgICBXZWJGcmFtZSAq
ZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKLSAgICAgICAgICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRS
ZXBsYWNlOk5PXTsKLSAgICAgICAgfSBlbHNlIGlmIChbX3ZpZXcgX2hhc1NlbGVjdGlvbl0pIHsK
LSAgICAgICAgICAgIGlmIChnb0xlZnQpCi0gICAgICAgICAgICAgICAgW192aWV3IG1vdmVCYWNr
d2FyZDpuaWxdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFtfdmlldyBtb3Zl
Rm9yd2FyZDpuaWxdOwotICAgICAgICB9Ci0gICAgICAgIFtfb3JpZ2luYWxTdHJpbmcgcmVsZWFz
ZV07Ci0gICAgICAgIF9vcmlnaW5hbFN0cmluZyA9IG5pbDsKLSAgICB9Ci0gICAgLy8gZWxzZSB0
aGVyZSBpcyBubyBzdGF0ZSB0byBhYm9ydCBpZiB0aGUgd2luZG93IHdhcyBub3QgdXAKLX0KLQot
LSAoQk9PTClwb3B1cFdpbmRvd0lzT3BlbgotewotICAgIHJldHVybiBfcG9wdXBXaW5kb3cgIT0g
bmlsOwotfQotCi0vLyBXZWJIVE1MVmlldyBnaXZlcyB1cyBhIGNyYWNrIGF0IGtleSBldmVudHMg
aXQgc2Vlcy4gUmV0dXJuIHdoZXRoZXIgd2UgY29uc3VtZWQgdGhlIGV2ZW50LgotLy8gVGhlIGZl
YXR1cmVzIGZvciB0aGUgdmFyaW91cyBrZXlzIG1pbWljIE5TVGV4dFZpZXcuCi0tIChCT09MKWZp
bHRlcktleURvd246KE5TRXZlbnQgKilldmVudAotewotICAgIGlmICghX3BvcHVwV2luZG93KQot
ICAgICAgICByZXR1cm4gTk87Ci0gICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0
ZXJzSWdub3JpbmdNb2RpZmllcnNdOwotICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQotICAgICAg
ICByZXR1cm4gTk87Ci0gICAgdW5pY2hhciBjID0gW3N0cmluZyBjaGFyYWN0ZXJBdEluZGV4OjBd
OwotICAgIGlmIChjID09IE5TVXBBcnJvd0Z1bmN0aW9uS2V5KSB7Ci0gICAgICAgIGludCBzZWxl
Y3RlZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVkUm93XTsKLSAgICAgICAgaWYgKDAgPCBzZWxl
Y3RlZFJvdykgewotICAgICAgICAgICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJ
bmRleFNldCBpbmRleFNldFdpdGhJbmRleDpzZWxlY3RlZFJvdyAtIDFdIGJ5RXh0ZW5kaW5nU2Vs
ZWN0aW9uOk5PXTsKLSAgICAgICAgICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTpz
ZWxlY3RlZFJvdyAtIDFdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQot
ICAgIGlmIChjID09IE5TRG93bkFycm93RnVuY3Rpb25LZXkpIHsKLSAgICAgICAgaW50IHNlbGVj
dGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOwotICAgICAgICBpZiAoc2VsZWN0ZWRS
b3cgPCAoaW50KVtfY29tcGxldGlvbnMgY291bnRdIC0gMSkgewotICAgICAgICAgICAgW190YWJs
ZVZpZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDpzZWxl
Y3RlZFJvdyArIDFdIGJ5RXh0ZW5kaW5nU2VsZWN0aW9uOk5PXTsKLSAgICAgICAgICAgIFtfdGFi
bGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTpzZWxlY3RlZFJvdyArIDFdOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIGlmIChjID09IE5TUmlnaHRBcnJvd0Z1bmN0
aW9uS2V5IHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAnXHQnKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBXaGF0IGFib3V0IGJhY2t0YWI/Ci0gICAgICAgIFtzZWxmIGVuZFJldmVydGlu
Z0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAg
IGlmIChjID09IE5TTGVmdEFycm93RnVuY3Rpb25LZXkpIHsKLSAgICAgICAgW3NlbGYgZW5kUmV2
ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0OllFU107Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAg
fQotICAgIGlmIChjID09IDB4MUIgfHwgYyA9PSBOU0Y1RnVuY3Rpb25LZXkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IEY1PwotICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVM
ZWZ0Ok5PXTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMgPT0gJyAnIHx8
IGMgPj0gMHgyMSAmJiBjIDw9IDB4MkYgfHwgYyA+PSAweDNBICYmIGMgPD0gMHg0MCB8fCBjID49
IDB4NUIgJiYgYyA8PSAweDYwIHx8IGMgPj0gMHg3QiAmJiBjIDw9IDB4N0QpIHsKLSAgICAgICAg
Ly8gRklYTUU6IElzIHRoZSBhYm92ZSBsaXN0IG9mIGtleXMgcmVhbGx5IGRlZmluaXRpdmU/Ci0g
ICAgICAgIC8vIE9yaWdpbmFsbHkgdGhpcyBjb2RlIGNhbGxlZCBpc3B1bmN0OyBhcmVuJ3QgdGhl
cmUgb3RoZXIgcHVuY3R1YXRpb24ga2V5cyBvbiBpbnRlcm5hdGlvbmFsIGtleWJvYXJkcz8KLSAg
ICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLSAgICAgICAg
cmV0dXJuIE5POyAvLyBsZXQgdGhlIGNoYXIgZ2V0IGluc2VydGVkCi0gICAgfQotICAgIHJldHVy
biBOTzsKLX0KLQotLSAodm9pZClfcmVmbGVjdFNlbGVjdGlvbgotewotICAgIGludCBzZWxlY3Rl
ZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVkUm93XTsKLSAgICBBU1NFUlQoc2VsZWN0ZWRSb3cg
Pj0gMCAmJiBzZWxlY3RlZFJvdyA8IChpbnQpW19jb21wbGV0aW9ucyBjb3VudF0pOwotICAgIFtz
ZWxmIF9pbnNlcnRNYXRjaDpbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRSb3dd
XTsKLX0KLQotLSAodm9pZCl0YWJsZUFjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYgX3Jl
ZmxlY3RTZWxlY3Rpb25dOwotICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVm
dDpOT107Ci19Ci0KLS0gKE5TSW50ZWdlciludW1iZXJPZlJvd3NJblRhYmxlVmlldzooTlNUYWJs
ZVZpZXcgKil0YWJsZVZpZXcKLXsKLSAgICByZXR1cm4gW19jb21wbGV0aW9ucyBjb3VudF07Ci19
Ci0KLS0gKGlkKXRhYmxlVmlldzooTlNUYWJsZVZpZXcgKil0YWJsZVZpZXcgb2JqZWN0VmFsdWVG
b3JUYWJsZUNvbHVtbjooTlNUYWJsZUNvbHVtbiAqKXRhYmxlQ29sdW1uIHJvdzooTlNJbnRlZ2Vy
KXJvdwotewotICAgIHJldHVybiBbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6cm93XTsKLX0K
LQotLSAodm9pZCl0YWJsZVZpZXdTZWxlY3Rpb25EaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOwotfQotCi1AZW5k
Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRQcml2YXRlUHJvdG9j
b2xzKQotCi0tIChOU1JlY3Qpc2VsZWN0aW9uUmVjdAotewotICAgIGlmIChbc2VsZiBfaGFzU2Vs
ZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJv
dW5kcygpOwotICAgIHJldHVybiBOU1plcm9SZWN0OwotfQotCi0tIChOU0FycmF5ICopc2VsZWN0
aW9uVGV4dFJlY3RzCi17Ci0gICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBsaXN0OwotICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1l
LT5zZWxlY3Rpb25UZXh0UmVjdHMobGlzdCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbGlzdC5z
aXplKCk7Ci0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aENhcGFjaXR5OnNpemVdIGF1dG9yZWxlYXNlXTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNW
YWx1ZSB2YWx1ZVdpdGhSZWN0Omxpc3RbaV1dXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi0tIChOU1ZpZXcgKilzZWxlY3Rpb25WaWV3Ci17Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0K
LS0gKE5TSW1hZ2UgKilzZWxlY3Rpb25JbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VC
bGFja1RleHQKLXsKLSAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCi0gICAgICAgIHJldHVy
biBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25JbWFnZShmb3JjZUJsYWNrVGV4dCk7Ci0g
ICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNSZWN0KXNlbGVjdGlvbkltYWdlUmVjdAotewotICAg
IGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2Zy
YW1lXSktPnNlbGVjdGlvbkJvdW5kcygpOwotICAgIHJldHVybiBOU1plcm9SZWN0OwotfQotCi0t
IChOU0FycmF5ICopcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uCi17Ci0gICAgaWYgKFtzZWxm
IF9jYW5TbWFydENvcHlPckRlbGV0ZV0pIHsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVz
ID0gW1tbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIG11dGFibGVDb3B5
XSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIFt0eXBlcyBhZGRPYmplY3Q6V2ViU21hcnRQYXN0ZVBi
b2FyZFR5cGVdOwotICAgICAgICByZXR1cm4gdHlwZXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
cmV0dXJuIFtbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc107Ci0gICAgfQot
fQotCi0tICh2b2lkKXdyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAq
KXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIFtz
ZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJk
OnBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzpuaWxdOwotfQotCi0tICh2b2lkKXNl
bGVjdEFsbAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwot
ICAgIGlmIChjb3JlRnJhbWUpCi0gICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVj
dEFsbCgpOwotfQotCi0tICh2b2lkKWRlc2VsZWN0QWxsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJl
dHVybjsKLSAgICBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5jbGVhcigpOwotfQotCi0tIChOU1N0
cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfc3RyaW5nRm9yUmFu
Z2U6W3NlbGYgX2RvY3VtZW50UmFuZ2VdXTsKLX0KLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
X2F0dHJpYnV0ZVN0cmluZ0Zyb21ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKLSNpZiAhTE9HX0RJU0FCTEVEICAg
ICAgICAKLSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSNl
bmRpZiAgICAKLSAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBfaW5pdFdpdGhET01SYW5nZTpyYW5nZV0gYXV0b3JlbGVhc2VdOwotI2lmICFMT0dfRElT
QUJMRUQKLSAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAt
IHN0YXJ0OwotICAgIExPRyhUaW1pbmcsICJjcmVhdGluZyBhdHRyaWJ1dGVkIHN0cmluZyBmcm9t
IHNlbGVjdGlvbiB0b29rICVmIHNlY29uZHMuIiwgZHVyYXRpb24pOwotI2VuZGlmCi0gICAgcmV0
dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJp
YnV0ZWRTdHJpbmcKLXsKLSAgICBET01Eb2N1bWVudCAqZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1l
XSBET01Eb2N1bWVudF07Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
ID0gW3NlbGYgX2F0dHJpYnV0ZVN0cmluZ0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50
UmFuZ2VdXTsKLSAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgRG9jdW1lbnQq
IGNvcmVEb2N1bWVudCA9IGNvcmUoZG9jdW1lbnQpOwotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5n
ID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6UmFu
Z2U6OmNyZWF0ZShjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudCwgMCwgY29yZURvY3VtZW50LCBj
b3JlRG9jdW1lbnQtPmNoaWxkTm9kZUNvdW50KCkpLmdldCgpXTsKLSAgICB9Ci0gICAgcmV0dXJu
IGF0dHJpYnV0ZWRTdHJpbmc7Ci19Ci0KLS0gKE5TU3RyaW5nICopc2VsZWN0ZWRTdHJpbmcKLXsK
LSAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0gX3NlbGVjdGVkU3RyaW5nXTsKLX0KLQotLSAoTlNB
dHRyaWJ1dGVkU3RyaW5nICopc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZVN0cmluZ0Zy
b21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dOwotICAgIGlmICghYXR0cmlidXRlZFN0
cmluZykgewotICAgICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
LSAgICAgICAgaWYgKGNvcmVGcmFtZSkgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBf
d2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6cmFuZ2UuZ2V0KCldOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOwotfQotCi0tIChCT09MKXN1cHBvcnRz
VGV4dEVuY29kaW5nCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTClzZWFyY2hGb3I6
KE5TU3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6
KEJPT0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09M
KXN0YXJ0SW5TZWxlY3Rpb24KLXsKLSAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKLSAgICAgICAg
cmV0dXJuIE5POwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwot
ICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9y
d2FyZCwgY2FzZUZsYWcsIHdyYXBGbGFnLCBzdGFydEluU2VsZWN0aW9uKTsKLX0KLQotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkRvY3VtZW50SW50ZXJuYWxQcm90b2Nv
bHMpCi0KLS0gKE5TRGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBvaW50Ci17
Ci0gICAgcmV0dXJuIFtzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVu
dDpOT107Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBv
aW50IGFsbG93U2hhZG93Q29udGVudDooQk9PTClhbGxvdwotewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICBy
ZXR1cm4gbmlsOwotICAgIHJldHVybiBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5p
dFdpdGhIaXRUZXN0UmVzdWx0OmNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1
bHRBdFBvaW50KEludFBvaW50KHBvaW50KSwgYWxsb3cpXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0g
KE5TVUludGVnZXIpbWFya0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNl
U2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0Ci17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJh
bWUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb3JlRnJhbWUtPm1hcmtBbGxNYXRj
aGVzRm9yVGV4dChzdHJpbmcsIGNhc2VGbGFnLCBsaW1pdCk7Ci19Ci0KLS0gKHZvaWQpc2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZDooQk9PTCluZXdWYWx1ZQotewotICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQot
ICAgICAgICByZXR1cm47Ci0gICAgY29yZUZyYW1lLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkKG5ld1ZhbHVlKTsKLX0KLQotLSAoQk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPm1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWQoKTsKLX0KLQotLSAodm9pZCl1bm1hcmtBbGxUZXh0TWF0Y2hlcwotewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZy
YW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1l
LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBk
b2N1bWVudC0+cmVtb3ZlTWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLX0KLQot
LSAoTlNBcnJheSAqKXJlY3RzRm9yVGV4dE1hdGNoZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0
dXJuIFtOU0FycmF5IGFycmF5XTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUt
PmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIFtOU0FycmF5
IGFycmF5XTsKLQotICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0cyA9IGRvY3VtZW50LT5yZW5kZXJl
ZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICB1bnNpZ25l
ZCBjb3VudCA9IHJlY3RzLnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05T
TXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgKytpbmRleCkKLSAgICAgICAgW3Jlc3VsdCBhZGRP
YmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpyZWN0c1tpbmRleF1dXTsgICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotQGVuZAotCi0vLyBUaGlzIGlzIHVzZWQgYnkgQXBwS2l0IGFuZCBp
cyBpbmNsdWRlZCBoZXJlIHNvIHRoYXQgV2ViRGF0YVByb3RvY29sU2NoZW1lIGlzIG9ubHkgZGVm
aW5lZCBvbmNlLgotQGltcGxlbWVudGF0aW9uIE5TVVJMIChXZWJEYXRhVVJMKQotCi0rIChOU1VS
TCAqKV93ZWJfdW5pcXVlV2ViRGF0YVVSTAotewotICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZV
VUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpVVUlEU3RyaW5n
ID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVV
SURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJMID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVAIiwgV2Vi
RGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nXV07Ci0gICAgQ0ZSZWxlYXNlKFVVSURTdHJp
bmcpOwotICAgIHJldHVybiBVUkw7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlJl
c3BvbmRlckNoYWluU2luawotCi0tIChpZClpbml0V2l0aFJlc3BvbmRlckNoYWluOihOU1Jlc3Bv
bmRlciAqKWNoYWluCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBfbGFzdFJlc3Bv
bmRlckluQ2hhaW4gPSBjaGFpbjsKLSAgICB3aGlsZSAoTlNSZXNwb25kZXIgKm5leHQgPSBbX2xh
c3RSZXNwb25kZXJJbkNoYWluIG5leHRSZXNwb25kZXJdKQotICAgICAgICBfbGFzdFJlc3BvbmRl
ckluQ2hhaW4gPSBuZXh0OwotICAgIFtfbGFzdFJlc3BvbmRlckluQ2hhaW4gc2V0TmV4dFJlc3Bv
bmRlcjpzZWxmXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZXRhY2gKLXsKLSAg
ICBbX2xhc3RSZXNwb25kZXJJbkNoYWluIHNldE5leHRSZXNwb25kZXI6bmlsXTsKLSAgICBfbGFz
dFJlc3BvbmRlckluQ2hhaW4gPSBuaWw7Ci19Ci0KLS0gKEJPT0wpcmVjZWl2ZWRVbmhhbmRsZWRD
b21tYW5kCi17Ci0gICAgcmV0dXJuIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQ7Ci19Ci0KLS0g
KHZvaWQpbm9SZXNwb25kZXJGb3I6KFNFTClzZWxlY3RvcgotewotICAgIF9yZWNlaXZlZFVuaGFu
ZGxlZENvbW1hbmQgPSBZRVM7Ci19Ci0KLS0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VM
KXNlbGVjdG9yCi17Ci0gICAgX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZCA9IFlFUzsKLX0KLQot
LSAoQk9PTCl0cnlUb1BlcmZvcm06KFNFTClhY3Rpb24gd2l0aDooaWQpb2JqZWN0Ci17Ci0gICAg
X3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZCA9IFlFUzsKLSAgICByZXR1cm4gWUVTOwotfQotCi1A
ZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVy
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIubW0JKHJldmlzaW9uIDQ0MjkyKQkoZnJvbSBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW06NDQyOTIpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQzMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgKEMpIDIwMDYsIDIwMDcgR3JhaGFtIERl
bm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiV2ViSFRNTFZpZXcuaCIK
KworI2ltcG9ydCAiRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkludGVybmFsLmgiCisjaW1wb3J0ICJE
T01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTURvY3VtZW50SW50ZXJu
YWwuaCIKKyNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NUmFuZ2VJbnRl
cm5hbC5oIgorI2ltcG9ydCAiV2ViQXJjaGl2ZS5oIgorI2ltcG9ydCAiV2ViQ2xpcFZpZXcuaCIK
KyNpbXBvcnQgIldlYkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRGF0YVNv
dXJjZUludGVybmFsLmgiCisjaW1wb3J0ICJXZWJEZWZhdWx0VUlEZWxlZ2F0ZS5oIgorI2ltcG9y
dCAiV2ViRG9jdW1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRHluYW1pY1Njcm9sbEJhcnNW
aWV3LmgiCisjaW1wb3J0ICJXZWJFZGl0aW5nRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkVsZW1l
bnREaWN0aW9uYXJ5LmgiCisjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCisjaW1wb3J0ICJX
ZWJGcmFtZVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYkZyYW1lVmlld0ludGVybmFsLmgiCisjaW1w
b3J0ICJXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRlLmgiCisjaW1wb3J0ICJXZWJIVE1MVmll
d0ludGVybmFsLmgiCisjaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCisjaW1wb3J0ICJXZWJLaXRO
U1N0cmluZ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViS2l0VmVyc2lvbkNoZWNrcy5oIgorI2ltcG9y
dCAiV2ViTG9jYWxpemFibGVTdHJpbmdzLmgiCisjaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJp
bmdFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TRXZlbnRFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5T
RmlsZU1hbmFnZXJFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TSW1hZ2VFeHRyYXMuaCIKKyNpbXBv
cnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU1Bhc3RlYm9hcmRFeHRyYXMu
aCIKKyNpbXBvcnQgIldlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5T
VVJMRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU1ZpZXdFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5l
dHNjYXBlUGx1Z2luVmlldy5oIgorI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodC5oIgorI2ltcG9y
dCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgorI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXMuaCIKKyNp
bXBvcnQgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViUmVzb3VyY2VQcml2
YXRlLmgiCisjaW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0b3IuaCIKKyNpbXBvcnQgIldlYlR5cGVz
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRlLmgiCisjaW1wb3J0ICJX
ZWJWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vzc2liaWxpdHkuaD4KKyNp
bXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9DYWNoZWRJbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRSZXNvdXJjZUNsaWVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0
TWVudS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVu
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9FZGl0b3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yRGVsZXRlQWN0aW9uLmg+CisjaW1w
b3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXZlbnRIYW5kbGVyLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlvbkhhbmRsZXJzLmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0Zsb2F0UmVjdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5o
PgorI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0lt
YWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1L
ZXlib2FyZEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9TZWxlY3Rpb25Db250
cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9TaW1wbGVGb250RGF0YS5oPgorI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVU
ZXh0UmVuZGVyZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvbWFya3VwLmg+CisjaW1wb3J0IDxXZWJL
aXQvRE9NLmg+CisjaW1wb3J0IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5oPgorI2ltcG9ydCA8V2Vi
S2l0L0RPTVByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2lt
cG9ydCA8ZGxmY24uaD4KKyNpbXBvcnQgPGxpbWl0cz4KKyNpbXBvcnQgPHJ1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5oPgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdU
RjsKKworQGludGVyZmFjZSBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKKy0gKE5TVmlldyop
X3dlYl9ib3JkZXJWaWV3OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gTlNXaW5kb3cgKEJvcmRl
clZpZXdBY2Nlc3MpCistIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldworeworICAgIHJldHVybiBf
Ym9yZGVyVmlldzsKK30KK0BlbmQKKworQGludGVyZmFjZSBXZWJSZXNwb25kZXJDaGFpblNpbmsg
OiBOU1Jlc3BvbmRlciB7CisgICAgTlNSZXNwb25kZXIqIF9sYXN0UmVzcG9uZGVySW5DaGFpbjsK
KyAgICBCT09MIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQ7Cit9CistIChpZClpbml0V2l0aFJl
c3BvbmRlckNoYWluOihOU1Jlc3BvbmRlciAqKWNoYWluOworLSAodm9pZClkZXRhY2g7CistIChC
T09MKXJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsKK0BlbmQKKworc3RhdGljIElNUCBvbGRTZXRD
dXJzb3JJTVAgPSBOVUxMOworCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKworc3RhdGljIElN
UCBvbGRSZXNldEN1cnNvclJlY3RzSU1QID0gTlVMTDsKK3N0YXRpYyBCT09MIGNhblNldEN1cnNv
ciA9IFlFUzsKKworc3RhdGljIHZvaWQgcmVzZXRDdXJzb3JSZWN0cyhOU1dpbmRvdyogc2VsZiwg
U0VMIGNtZCkKK3sKKyAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgbW91c2VMb2NhdGlvbk91dHNp
ZGVPZkV2ZW50U3RyZWFtXTsKKyAgICBOU1ZpZXcqIHZpZXcgPSBbW3NlbGYgX3dlYl9ib3JkZXJW
aWV3XSBoaXRUZXN0OnBvaW50XTsKKyAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRN
TFZpZXcgY2xhc3NdXSkgeworICAgICAgICBXZWJIVE1MVmlldyAqaHRtbFZpZXcgPSAoV2ViSFRN
TFZpZXcqKXZpZXc7CisgICAgICAgIE5TUG9pbnQgbG9jYWxQb2ludCA9IFtodG1sVmlldyBjb252
ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0
ID0gW2h0bWxWaWV3IGVsZW1lbnRBdFBvaW50OmxvY2FsUG9pbnQgYWxsb3dTaGFkb3dDb250ZW50
Ok5PXTsKKyAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtkaWN0IG9iamVjdEZvcktleTpX
ZWJFbGVtZW50RE9NTm9kZUtleV07CisgICAgICAgIGlmICghW2VsZW1lbnQgaXNLaW5kT2ZDbGFz
czpbRE9NSFRNTEFwcGxldEVsZW1lbnQgY2xhc3NdXSAmJiAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFz
czpbRE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdXSAmJgorICAgICAgICAgICAgIVtlbGVtZW50
IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxFbWJlZEVsZW1lbnQgY2xhc3NdXSkKKyAgICAgICAgICAg
IGNhblNldEN1cnNvciA9IE5POworICAgIH0KKyAgICBvbGRSZXNldEN1cnNvclJlY3RzSU1QKHNl
bGYsIGNtZCk7CisgICAgY2FuU2V0Q3Vyc29yID0gWUVTOworfQorCitzdGF0aWMgdm9pZCBzZXRD
dXJzb3IoTlNDdXJzb3IqIHNlbGYsIFNFTCBjbWQpCit7CisgICAgaWYgKGNhblNldEN1cnNvcikK
KyAgICAgICAgb2xkU2V0Q3Vyc29ySU1QKHNlbGYsIGNtZCk7Cit9CisKKyNlbHNlCisKK3N0YXRp
YyB2b2lkIHNldEN1cnNvcihOU1dpbmRvdyogc2VsZiwgU0VMIGNtZCwgTlNQb2ludCBwb2ludCkK
K3sKKyAgICBOU1ZpZXcqIHZpZXcgPSBbW3NlbGYgX3dlYl9ib3JkZXJWaWV3XSBoaXRUZXN0OnBv
aW50XTsKKyAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkg
eworICAgICAgICBXZWJIVE1MVmlldyAqaHRtbFZpZXcgPSAoV2ViSFRNTFZpZXcqKXZpZXc7Cisg
ICAgICAgIE5TUG9pbnQgbG9jYWxQb2ludCA9IFtodG1sVmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQg
ZnJvbVZpZXc6bmlsXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0ID0gW2h0bWxWaWV3IGVs
ZW1lbnRBdFBvaW50OmxvY2FsUG9pbnQgYWxsb3dTaGFkb3dDb250ZW50Ok5PXTsKKyAgICAgICAg
RE9NRWxlbWVudCAqZWxlbWVudCA9IFtkaWN0IG9iamVjdEZvcktleTpXZWJFbGVtZW50RE9NTm9k
ZUtleV07CisgICAgICAgIGlmICghW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEFwcGxl
dEVsZW1lbnQgY2xhc3NdXSAmJiAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTE9iamVj
dEVsZW1lbnQgY2xhc3NdXSAmJgorICAgICAgICAgICAgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6
W0RPTUhUTUxFbWJlZEVsZW1lbnQgY2xhc3NdXSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgb2xkU2V0Q3Vyc29ySU1QKHNlbGYsIGNtZCwgcG9pbnQpOworfQorCisjZW5kaWYKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworQGludGVyZmFjZSBXZWJMYXllckhv
c3RpbmdWaWV3IDogTlNWaWV3CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJMYXllckhvc3Rp
bmdWaWV3CisKKy8vIEVtcHR5IE5TVmlld3MgaW50ZXJjZXB0IHJpZ2h0TW91c2VEb3duOiB0byBk
byBjb250ZXh0IG1lbnUgaGFuZGxpbmcsIGJ1dCB3ZSBuZWVkIHRoZSBXZWJMYXllckhvc3RpbmdW
aWV3IHRvCisvLyBsZXQgcmlnaHQgbW91c2UgY2xpY2tzIHRocm91Z2guCistICh2b2lkKXJpZ2h0
TW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBbW3NlbGYgbmV4dFJlc3BvbmRlcl0g
cGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpldmVudF07Cit9CisKK0BlbmQKKworI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworZXh0ZXJuICJDIiB7CisKKy8v
IE5lZWQgdG8gZGVjbGFyZSB0aGVzZSBhdHRyaWJ1dGUgbmFtZXMgYmVjYXVzZSBBcHBLaXQgZXhw
b3J0cyB0aGVtIGJ1dCBkb2VzIG5vdCBtYWtlIHRoZW0gYXZhaWxhYmxlIGluIEFQSSBvciBTUEkg
aGVhZGVycy4KKworZXh0ZXJuIE5TU3RyaW5nICpOU01hcmtlZENsYXVzZVNlZ21lbnRBdHRyaWJ1
dGVOYW1lOworZXh0ZXJuIE5TU3RyaW5nICpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRy
aWJ1dGVOYW1lOworCit9CisKK0BpbnRlcmZhY2UgTlNWaWV3IChXZWJOU1ZpZXdEZXRhaWxzKQor
LSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTooTlNS
ZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVS
ZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3Owor
LSAodm9pZClfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czooQk9PTCluZWVk
c0xvY2tGb2N1cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVjdDsKKy0gKHZvaWQpX3JlY3Vyc2l2ZToo
Qk9PTClyZWN1cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxheVJl
Y3QgaW5Db250ZXh0OihOU0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQgdG9wVmlldzooQk9PTCl0
b3BWaWV3OworLSAoTlNSZWN0KV9kaXJ0eVJlY3Q7CistICh2b2lkKV9zZXREcmF3c093bkRlc2Nl
bmRhbnRzOihCT09MKWRyYXdzT3duRGVzY2VuZGFudHM7CistICh2b2lkKV9wcm9wYWdhdGVEaXJ0
eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnM7CistICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGU7
CitAZW5kCisKK0BpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNBcHBsaWNhdGlvbkRldGFp
bHMpCistICh2b2lkKXNwZWFrU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKK0BlbmQKKworQGlu
dGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQorLSAoaWQpX25ld0ZpcnN0UmVz
cG9uZGVyQWZ0ZXJSZXNpZ25pbmc7CistICh2b2lkKV9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOihC
T09MKWZsYWc7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChXZWJOU0F0
dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQorLSAoaWQpX2luaXRXaXRoRE9NUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2U7CistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJvbVJhbmdlOihO
U1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01Eb2N1bWVudCAqKWRvY3VtZW50IGRvY3VtZW50QXR0
cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3Vi
cmVzb3VyY2VzOworQGVuZAorCitAaW50ZXJmYWNlIE5TU3BlbGxDaGVja2VyIChXZWJOU1NwZWxs
Q2hlY2tlckRldGFpbHMpCistICh2b2lkKWxlYXJuV29yZDooTlNTdHJpbmcgKil3b3JkOworQGVu
ZAorCisvLyBCeSBpbWFnaW5nIHRvIGEgd2lkdGggYSBsaXR0bGUgd2lkZXIgdGhhbiB0aGUgYXZh
aWxhYmxlIHBpeGVscywKKy8vIHRoaW4gcGFnZXMgd2lsbCBiZSBzY2FsZWQgZG93biBhIGxpdHRs
ZSwgbWF0Y2hpbmcgdGhlIHdheSB0aGV5CisvLyBwcmludCBpbiBJRSBhbmQgQ2FtaW5vLiBUaGlz
IGxldHMgdGhlbSB1c2UgZmV3ZXIgc2hlZXRzIHRoYW4gdGhleQorLy8gd291bGQgb3RoZXJ3aXNl
LCB3aGljaCBpcyBwcmVzdW1hYmx5IHdoeSBvdGhlciBicm93c2VycyBkbyB0aGlzLgorLy8gV2lk
ZSBwYWdlcyB3aWxsIGJlIHNjYWxlZCBkb3duIG1vcmUgdGhhbiB0aGlzLgorI2RlZmluZSBQcmlu
dGluZ01pbmltdW1TaHJpbmtGYWN0b3IgICAgIDEuMjVmCisKKy8vIFRoaXMgbnVtYmVyIGRldGVy
bWluZXMgaG93IHNtYWxsIHdlIGFyZSB3aWxsaW5nIHRvIHJlZHVjZSB0aGUgcGFnZSBjb250ZW50
CisvLyBpbiBvcmRlciB0byBhY2NvbW1vZGF0ZSB0aGUgd2lkZXN0IGxpbmUuIElmIHRoZSBwYWdl
IHdvdWxkIGhhdmUgdG8gYmUKKy8vIHJlZHVjZWQgc21hbGxlciB0byBtYWtlIHRoZSB3aWRlc3Qg
bGluZSBmaXQsIHdlIGp1c3QgY2xpcCBpbnN0ZWFkICh0aGlzCisvLyBiZWhhdmlvciBtYXRjaGVz
IE1hY0lFIGFuZCBNb3ppbGxhLCBhdCBsZWFzdCkKKyNkZWZpbmUgUHJpbnRpbmdNYXhpbXVtU2hy
aW5rRmFjdG9yICAgICAyLjBmCisKKy8vIFRoaXMgbnVtYmVyIGRldGVybWluZXMgaG93IHNob3J0
IHRoZSBsYXN0IHByaW50ZWQgcGFnZSBvZiBhIG11bHRpLXBhZ2UgcHJpbnQgc2Vzc2lvbgorLy8g
Y2FuIGJlIGJlZm9yZSB3ZSB0cnkgdG8gc2hyaW5rIHRoZSBzY2FsZSBpbiBvcmRlciB0byByZWR1
Y2UgdGhlIG51bWJlciBvZiBwYWdlcywgYW5kCisvLyB0aHVzIGVsaW1pbmF0ZSB0aGUgb3JwaGFu
LgorI2RlZmluZSBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbyAgICAgIDAuMWYKKworLy8gVGhp
cyBudW1iZXIgZGV0ZXJtaW5lcyB0aGUgYW1vdW50IHRoZSBzY2FsZSBmYWN0b3IgaXMgYWRqdXN0
ZWQgdG8gdHJ5IHRvIGVsaW1pbmF0ZSBvcnBoYW5zLgorLy8gSXQgaGFzIG5vIGRpcmVjdCBtYXRo
ZW1hdGljYWwgcmVsYXRpb25zaGlwIHRvIExhc3RQcmludGVkUGFnZU9ycGhhblJhdGlvLCBkdWUg
dG8gdmFyaWFibGUKKy8vIG51bWJlcnMgb2YgcGFnZXMsIGxvZ2ljIHRvIGF2b2lkIGJyZWFraW5n
IGVsZW1lbnRzLCBhbmQgQ1NTLXN1cHBsaWVkIGhhcmQgcGFnZSBicmVha3MuCisjZGVmaW5lIFBy
aW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0bWVudCAgMS4xZgorCisjZGVmaW5lIEFVVE9TQ1JPTExf
SU5URVJWQUwgICAgICAgICAgICAgMC4xZgorCisjZGVmaW5lIERSQUdfTEFCRUxfQk9SREVSX1gg
ICAgICAgICAgICAgNC4wZgorLy9LZWVwIGJvcmRlcl95IGluIHN5bmNoIHdpdGggRHJhZ0NvbnRy
b2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQKKyNkZWZpbmUgRFJBR19MQUJFTF9CT1JERVJfWSAg
ICAgICAgICAgICAyLjBmCisjZGVmaW5lIERSQUdfTEFCRUxfUkFESVVTICAgICAgICAgICAgICAg
NS4wZgorI2RlZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9ZX09GRlNFVCAgICAgICAgICAgICAgMi4w
ZgorCisjZGVmaW5lIE1JTl9EUkFHX0xBQkVMX1dJRFRIX0JFRk9SRV9DTElQICAgICAgICAxMjAu
MGYKKyNkZWZpbmUgTUFYX0RSQUdfTEFCRUxfV0lEVEggICAgICAgICAgICAgICAgICAgIDMyMC4w
ZgorCisjZGVmaW5lIERSQUdfTElOS19MQUJFTF9GT05UX1NJWkUgICAxMS4wZgorI2RlZmluZSBE
UkFHX0xJTktfVVJMX0ZPTlRfU0laRSAgIDEwLjBmCisKKy8vIEFueSBub24temVybyB2YWx1ZSB3
aWxsIGRvLCBidXQgdXNpbmcgc29tZXRoaW5nIHJlY29nbml6YWJsZSBtaWdodCBoZWxwIHVzIGRl
YnVnIHNvbWUgZGF5LgorI2RlZmluZSBUUkFDS0lOR19SRUNUX1RBRyAweEJBREZBQ0UKKworLy8g
RklYTUU6IFRoaXMgY29uc3RhbnQgaXMgY29waWVkIGZyb20gQXBwS2l0J3MgX05YU21hcnRQYXN0
ZSBjb25zdGFudC4KKyNkZWZpbmUgV2ViU21hcnRQYXN0ZVBib2FyZFR5cGUgQCJOZVhUIHNtYXJ0
IHBhc3RlIHBhc3RlYm9hcmQgdHlwZSIKKworI2RlZmluZSBTVEFOREFSRF9XRUlHSFQgNQorI2Rl
ZmluZSBNSU5fQk9MRF9XRUlHSFQgNworI2RlZmluZSBTVEFOREFSRF9CT0xEX1dFSUdIVCA5CisK
Ky8vIEZha2UgVVJMIHNjaGVtZS4KKyNkZWZpbmUgV2ViRGF0YVByb3RvY29sU2NoZW1lIEAid2Vi
a2l0LWZha2UtdXJsIgorCisvLyA8cmRhcjovL3Byb2JsZW0vNDk4NTUyND4gUmVmZXJlbmNlcyB0
byBXZWJDb3JlU2Nyb2xsVmlldyBhcyBhIHN1YnZpZXcgb2YgYSBXZWJIVE1MVmlldyBtYXkgYmUg
cHJlc2VudAorLy8gaW4gc29tZSBOSUIgZmlsZXMsIHNvIE5TVW5hcmNoaXZlciBtdXN0IGJlIHN0
aWxsIGFibGUgdG8gbG9vayB1cCB0aGlzIG5vdy11bnVzZWQgY2xhc3MuCitAaW50ZXJmYWNlIFdl
YkNvcmVTY3JvbGxWaWV3IDogTlNTY3JvbGxWaWV3CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJDb3JlU2Nyb2xsVmlldworQGVuZAorCisvLyBpZiBZRVMsIGRvIHRoZSBzdGFuZGFyZCBOU1Zp
ZXcgaGl0IHRlc3QgKHdoaWNoIGNhbid0IGdpdmUgdGhlIHJpZ2h0IHJlc3VsdCB3aGVuIEhUTUwg
b3ZlcmxhcHMgYSB2aWV3KQorc3RhdGljIEJPT0wgZm9yY2VOU1ZpZXdIaXRUZXN0OworCisvLyBp
ZiBZRVMsIGRvIHRoZSAidG9wIFdlYkhUTUxWaWV3IiBoaXQgdGVzdCAod2hpY2ggd2UnZCBsaWtl
IHRvIGRvIGFsbCB0aGUgdGltZSBidXQgY2FuJ3QgYmVjYXVzZSBvZiBKYXZhIHJlcXVpcmVtZW50
cyBbc2VlIGJ1ZyA0MzQ5NzIxXSkKK3N0YXRpYyBCT09MIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0
OworCitzdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3OworCisvLyBXZSBuZWVkIHRoaXMg
dG8gYmUgYWJsZSB0byBzYWZlbHkgcmVmZXJlbmNlIHRoZSBDYWNoZWRJbWFnZSBmb3IgdGhlIHBy
b21pc2VkIGRyYWcgZGF0YQorc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBwcm9taXNlZERh
dGFDbGllbnQoKQoreworICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCogc3RhdGljQ2Fj
aGVkUmVzb3VyY2VDbGllbnQgPSBuZXcgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7CisgICAgcmV0dXJu
IHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50OworfQorCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3
IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKy0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczoo
TlNBcnJheSAqKXBhdGhzOworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdt
ZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgaW5Db250ZXh0OihE
T01SYW5nZSAqKWNvbnRleHQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7Cist
IChOU1N0cmluZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZDsKKy0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7CistICh2b2lkKV9w
YXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7
CistICh2b2lkKV9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHk7CistICh2
b2lkKV9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnM7CistICh2b2lkKV9yZW1vdmVXaW5kb3dPYnNl
cnZlcnM7CistIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0
aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKEJPT0wpX3Nob3VsZEluc2VydFRl
eHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBn
aXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247CistIChCT09MKV9zaG91bGRS
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2Vi
Vmlld0luc2VydEFjdGlvbilhY3Rpb247CistIChmbG9hdClfY2FsY3VsYXRlUHJpbnRIZWlnaHQ7
CistIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlOworLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2U7CistIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2
ZW50ICopZXZlbnQ7CistICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6
KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQg
Y2FjaGVkQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0
cmluZzsKKy0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2U7CistICh2b2lkKV9zZXRNb3VzZURv
d25FdmVudDooTlNFdmVudCAqKWV2ZW50OworLSAoV2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXc7
CistIChCT09MKV9pc1RvcEhUTUxWaWV3OworLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJl
Y3Vyc2l2ZTsKKy0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RW
aWV3U2l6ZTsKKy0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKK0BlbmQK
KworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQorCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld1RleHRDaGVj
a2luZ0ludGVybmFsKQorLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOihpZClz
ZW5kZXI7CistIChCT09MKXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKKy0gKHZvaWQpc2V0U21h
cnRJbnNlcnREZWxldGVFbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2dsZVNtYXJ0SW5z
ZXJ0RGVsZXRlOihpZClzZW5kZXI7CistIChCT09MKWlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRp
b25FbmFibGVkOworLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6
KEJPT0wpZmxhZzsKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246KGlk
KXNlbmRlcjsKKy0gKEJPT0wpaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDsKKy0gKHZv
aWQpc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKKy0gKHZvaWQp
dG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjooaWQpc2VuZGVyOworLSAoQk9PTClpc0F1dG9t
YXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOworLSAodm9pZClzZXRBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNo
U3Vic3RpdHV0aW9uOihpZClzZW5kZXI7CistIChCT09MKWlzQXV0b21hdGljVGV4dFJlcGxhY2Vt
ZW50RW5hYmxlZDsKKy0gKHZvaWQpc2V0QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDoo
Qk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KGlkKXNl
bmRlcjsKKy0gKEJPT0wpaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOworLSAo
dm9pZClzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7Cist
ICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyOworQGVu
ZAorCisjZW5kaWYKKworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRm9yd2FyZERlY2xhcmF0
aW9uKSAvLyBGSVhNRTogUHV0IHRoaXMgaW4gYSBub3JtYWwgY2F0ZWdvcnkgYW5kIHN0b3AgZG9p
bmcgdGhlIGZvcndhcmQgZGVjbGFyYXRpb24gdHJpY2suCistICh2b2lkKV9zZXRQcmludGluZzoo
Qk9PTClwcmludGluZyBtaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11
bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVz
dFZpZXdTaXplOworQGVuZAorCitAY2xhc3MgTlNUZXh0SW5wdXRDb250ZXh0OworQGludGVyZmFj
ZSBOU1Jlc3BvbmRlciAoQXBwS2l0RGV0YWlscykKKy0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlu
cHV0Q29udGV4dDsKK0BlbmQKKworQGludGVyZmFjZSBOU09iamVjdCAoTlNUZXh0SW5wdXRDb250
ZXh0RGV0YWlscykKKy0gKEJPT0wpd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzOworLSAoQk9PTClo
YW5kbGVNb3VzZUV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CitAZW5kCisKK0BpbnRlcmZhY2UgV2Vi
SFRNTFZpZXcgKFdlYk5TVGV4dElucHV0U3VwcG9ydCkgPE5TVGV4dElucHV0PgorLSAodm9pZClf
dXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyOworQGVuZAorCitAaW50ZXJmYWNlIFdlYkhU
TUxWaWV3IChXZWJFZGl0aW5nU3R5bGVTdXBwb3J0KQorLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlv
biAqKV9lbXB0eVN0eWxlOworLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAq
KWNvbG9yOworQGVuZAorCitAaW50ZXJmYWNlIE5TVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJu
YWwpCistICh2b2lkKV93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0
YWJsZUFycmF5ICopIGFycmF5OworQGVuZAorCitAaW50ZXJmYWNlIE5TTXV0YWJsZURpY3Rpb25h
cnkgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorLSAodm9pZClfd2ViX3NldE9iamVjdElmTm90
TmlsOihpZClvYmplY3QgZm9yS2V5OihpZClrZXk7CitAZW5kCisKKy8vIEhhbmRsZXMgdGhlIGNv
bXBsZXRlOiB0ZXh0IGNvbW1hbmQKK0BpbnRlcmZhY2UgV2ViVGV4dENvbXBsZXRlQ29udHJvbGxl
ciA6IE5TT2JqZWN0IDxOU1RhYmxlVmlld0RlbGVnYXRlLCBOU1RhYmxlVmlld0RhdGFTb3VyY2U+
IHsKK0Bwcml2YXRlCisgICAgV2ViSFRNTFZpZXcgKl92aWV3OworICAgIE5TV2luZG93ICpfcG9w
dXBXaW5kb3c7CisgICAgTlNUYWJsZVZpZXcgKl90YWJsZVZpZXc7CisgICAgTlNBcnJheSAqX2Nv
bXBsZXRpb25zOworICAgIE5TU3RyaW5nICpfb3JpZ2luYWxTdHJpbmc7CisgICAgaW50IHByZWZp
eExlbmd0aDsKK30KKy0gKGlkKWluaXRXaXRoSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopdmlldzsK
Ky0gKHZvaWQpZG9Db21wbGV0aW9uOworLSAodm9pZCllbmRSZXZlcnRpbmdDaGFuZ2U6KEJPT0wp
cmV2ZXJ0Q2hhbmdlIG1vdmVMZWZ0OihCT09MKWdvTGVmdDsKKy0gKEJPT0wpcG9wdXBXaW5kb3dJ
c09wZW47CistIChCT09MKWZpbHRlcktleURvd246KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQp
X3JlZmxlY3RTZWxlY3Rpb247CitAZW5kCisKK3N0cnVjdCBXZWJIVE1MVmlld0ludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMgeworICAgIEtleWJvYXJkRXZlbnQqIGV2ZW50OworICAgIEJPT0wg
ZXZlbnRXYXNIYW5kbGVkOworICAgIEJPT0wgc2hvdWxkU2F2ZUNvbW1hbmQ7CisgICAgLy8gVGhl
IElucHV0IE1ldGhvZCBtYXkgY29uc3VtZSBhbiBldmVudCBhbmQgbm90IHRlbGwgdXMsIGluCisg
ICAgLy8gd2hpY2ggY2FzZSB3ZSBzaG91bGQgbm90IGJ1YmJsZSB0aGUgZXZlbnQgdXAgdGhlIERP
TQorICAgIEJPT0wgY29uc3VtZWRCeUlNOworfTsKKworQGludGVyZmFjZSBXZWJIVE1MVmlld1By
aXZhdGUgOiBOU09iamVjdCB7CitAcHVibGljCisgICAgQk9PTCBjbG9zZWQ7CisgICAgQk9PTCBu
ZWVkc1RvQXBwbHlTdHlsZXM7CisgICAgQk9PTCBpZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50czsK
KyAgICBCT09MIHByaW50aW5nOworICAgIEJPT0wgYXZvaWRpbmdQcmludE9ycGhhbjsKKyAgICBC
T09MIG9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zOworICAgIEJPT0wgb2JzZXJ2aW5n
U3VwZXJ2aWV3Tm90aWZpY2F0aW9uczsKKyAgICBCT09MIG9ic2VydmluZ1dpbmRvd05vdGlmaWNh
dGlvbnM7CisgICAgQk9PTCByZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsKKyAgICAKKyAgICBpZCBz
YXZlZFN1YnZpZXdzOworICAgIEJPT0wgc3Vidmlld3NTZXRBc2lkZTsKKyAgICAKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgTlNWaWV3ICpsYXllckhvc3RpbmdWaWV3Owor
I2VuZGlmCisKKyAgICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5k
bGluZyB0aGUgZXZlbnQuCisgICAgQk9PTCBoYW5kbGluZ01vdXNlRG93bkV2ZW50OworICAgIE5T
RXZlbnQgKmtleURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCisK
KyAgICAvLyBBIFdlYkhUTUxWaWV3IGhhcyBhIHNpbmdsZSBpbnB1dCBjb250ZXh0LCBidXQgd2Ug
cmV0dXJuIG5pbCB3aGVuIGluIG5vbi1lZGl0YWJsZSBjb250ZW50IHRvIGF2b2lkIG1ha2luZyBp
bnB1dCBtZXRob2RzIGRvIHRoZWlyIHdvcmsuCisgICAgLy8gVGhpcyBzdGF0ZSBpcyBzYXZlZCBl
YWNoIHRpbWUgc2VsZWN0aW9uIGNoYW5nZXMsIGJlY2F1c2UgY29tcHV0aW5nIGl0IGNhdXNlcyBz
dHlsZSByZWNhbGMsIHdoaWNoIGlzIG5vdCBhbHdheXMgc2FmZSB0byBkby4KKyAgICBCT09MIGV4
cG9zZUlucHV0Q29udGV4dDsKKworICAgIE5TUG9pbnQgbGFzdFNjcm9sbFBvc2l0aW9uOworCisg
ICAgV2ViUGx1Z2luQ29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxlcjsKKyAgICAKKyAgICBOU1N0
cmluZyAqdG9vbFRpcDsKKyAgICBOU1Rvb2xUaXBUYWcgbGFzdFRvb2xUaXBUYWc7CisgICAgaWQg
dHJhY2tpbmdSZWN0T3duZXI7CisgICAgdm9pZCAqdHJhY2tpbmdSZWN0VXNlckRhdGE7CisgICAg
CisgICAgTlNUaW1lciAqYXV0b3Njcm9sbFRpbWVyOworICAgIE5TRXZlbnQgKmF1dG9zY3JvbGxU
cmlnZ2VyRXZlbnQ7CisgICAgCisgICAgTlNBcnJheSAqcGFnZVJlY3RzOworCisgICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqaGlnaGxpZ2h0ZXJzOworCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIK
KyAgICBCT09MIG5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7CisjZW5kaWYKKyAgICAKKyAgICBX
ZWJUZXh0Q29tcGxldGVDb250cm9sbGVyICpjb21wQ29udHJvbGxlcjsKKyAgICAKKyAgICBCT09M
IHRyYW5zcGFyZW50QmFja2dyb3VuZDsKKworICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycyogaW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKKyAgICBCT09MIHJl
Y2VpdmVkTk9PUDsKKyAgICAKKyAgICBXZWJEYXRhU291cmNlICpkYXRhU291cmNlOworICAgIFdl
YkNvcmU6OkNhY2hlZEltYWdlKiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKKyAgICAKKyAg
ICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcjsKKyAg
ICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVNb3VzZW92ZXJUaW1lcjsKKworICAgIFNFTCBzZWxl
Y3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3I7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgQk9PTCBl
bnVtZXJhdGluZ1N1YnZpZXdzOworI2VuZGlmCit9CistICh2b2lkKWNsZWFyOworQGVuZAorCitz
dGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNo
IChzdGF0ZSkgeworICAgICAgICBjYXNlIEZhbHNlVHJpU3RhdGU6CisgICAgICAgICAgICByZXR1
cm4gTlNPZmZTdGF0ZTsKKyAgICAgICAgY2FzZSBUcnVlVHJpU3RhdGU6CisgICAgICAgICAgICBy
ZXR1cm4gTlNPblN0YXRlOworICAgICAgICBjYXNlIE1peGVkVHJpU3RhdGU6CisgICAgICAgICAg
ICByZXR1cm4gTlNNaXhlZFN0YXRlOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gTlNPZmZTdGF0ZTsKK30KKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3
UHJpdmF0ZQorCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJl
YWRpbmcoKTsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBXZWJDb3JlT2JqQ0ZpbmFs
aXplT25NYWluVGhyZWFkKHNlbGYpOworI2VuZGlmCisKKyAgICBpZiAoIW9sZFNldEN1cnNvcklN
UCkgeworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAgIE1ldGhvZCBzZXRDdXJzb3JN
ZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNDdXJzb3IgY2xhc3NdLCBAc2VsZWN0
b3Ioc2V0KSk7CisjZWxzZQorICAgICAgICBNZXRob2Qgc2V0Q3Vyc29yTWV0aG9kID0gY2xhc3Nf
Z2V0SW5zdGFuY2VNZXRob2QoW05TV2luZG93IGNsYXNzXSwgQHNlbGVjdG9yKF9zZXRDdXJzb3JG
b3JNb3VzZUxvY2F0aW9uOikpOworI2VuZGlmCisgICAgICAgIEFTU0VSVChzZXRDdXJzb3JNZXRo
b2QpOworCisgICAgICAgIG9sZFNldEN1cnNvcklNUCA9IG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlv
bihzZXRDdXJzb3JNZXRob2QsIChJTVApc2V0Q3Vyc29yKTsKKyAgICAgICAgQVNTRVJUKG9sZFNl
dEN1cnNvcklNUCk7CisgICAgfQorICAgIAorI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAg
aWYgKCFvbGRSZXNldEN1cnNvclJlY3RzSU1QKSB7CisgICAgICAgIE1ldGhvZCByZXNldEN1cnNv
clJlY3RzTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TV2luZG93IGNsYXNzXSwg
QHNlbGVjdG9yKHJlc2V0Q3Vyc29yUmVjdHMpKTsKKyAgICAgICAgQVNTRVJUKHJlc2V0Q3Vyc29y
UmVjdHNNZXRob2QpOworICAgICAgICBvbGRSZXNldEN1cnNvclJlY3RzSU1QID0gbWV0aG9kX3Nl
dEltcGxlbWVudGF0aW9uKHJlc2V0Q3Vyc29yUmVjdHNNZXRob2QsIChJTVApcmVzZXRDdXJzb3JS
ZWN0cyk7CisgICAgICAgIEFTU0VSVChvbGRSZXNldEN1cnNvclJlY3RzSU1QKTsKKyAgICB9Cisj
ZW5kaWYKKworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hl
ZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dlYkhUTUxWaWV3UHJpdmF0ZSBjbGFzc10sIHNl
bGYpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoIWF1dG9zY3JvbGxUaW1lcik7Cisg
ICAgQVNTRVJUKCFhdXRvc2Nyb2xsVHJpZ2dlckV2ZW50KTsKKyAgICBBU1NFUlQoIXVwZGF0ZUZv
Y3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKKyAgICBBU1NFUlQoIXVwZGF0ZU1vdXNlb3ZlclRp
bWVyKTsKKyAgICAKKyAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFzZV07CisgICAgW2tleURvd25F
dmVudCByZWxlYXNlXTsKKyAgICBbcGx1Z2luQ29udHJvbGxlciByZWxlYXNlXTsKKyAgICBbdG9v
bFRpcCByZWxlYXNlXTsKKyAgICBbY29tcENvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgW2RhdGFT
b3VyY2UgcmVsZWFzZV07CisgICAgW2hpZ2hsaWdodGVycyByZWxlYXNlXTsKKyAgICBpZiAocHJv
bWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCisgICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOworCisgICAgW3N1cGVyIGRl
YWxsb2NdOworfQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFE
KCk7CisKKyAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCisgICAgICAgIHByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkp
OworCisgICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworLSAodm9pZCljbGVhcgoreworICAgIFtt
b3VzZURvd25FdmVudCByZWxlYXNlXTsKKyAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAg
IFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOworICAgIFt0b29sVGlwIHJlbGVhc2VdOworICAg
IFtjb21wQ29udHJvbGxlciByZWxlYXNlXTsKKyAgICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKKyAg
ICBbaGlnaGxpZ2h0ZXJzIHJlbGVhc2VdOworICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZSkKKyAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChw
cm9taXNlZERhdGFDbGllbnQoKSk7CisKKyAgICBtb3VzZURvd25FdmVudCA9IG5pbDsKKyAgICBr
ZXlEb3duRXZlbnQgPSBuaWw7CisgICAgcGx1Z2luQ29udHJvbGxlciA9IG5pbDsKKyAgICB0b29s
VGlwID0gbmlsOworICAgIGNvbXBDb250cm9sbGVyID0gbmlsOworICAgIGRhdGFTb3VyY2UgPSBu
aWw7CisgICAgaGlnaGxpZ2h0ZXJzID0gbmlsOworICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291
cmNlID0gMDsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBsYXllckhv
c3RpbmdWaWV3ID0gbmlsOworI2VuZGlmCit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YkhUTUxWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKworLSAoRE9NUmFuZ2UgKilfZG9j
dW1lbnRSYW5nZQoreworICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIF9k
b2N1bWVudFJhbmdlXTsKK30KKworLSAoQk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5
ICopcGF0aHMKK3sKKyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbcGF0aHMgb2JqZWN0
RW51bWVyYXRvcl07CisgICAgTlNTdHJpbmcgKnBhdGg7CisgICAgCisgICAgd2hpbGUgKChwYXRo
ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgeworICAgICAgICBOU1N0cmluZyAq
TUlNRVR5cGUgPSBXS0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKFtwYXRoIHBhdGhFeHRlbnNpb25d
KTsKKyAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJj
ZU1JTUVUeXBlKE1JTUVUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAg
IAorICAgIHJldHVybiBOTzsKK30KKworLSAoV2ViRGF0YVNvdXJjZSAqKV9kYXRhU291cmNlCit7
CisgICAgcmV0dXJuIF9wcml2YXRlLT5kYXRhU291cmNlOworfQorCistIChXZWJWaWV3ICopX3dl
YlZpZXcKK3sKKyAgICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291cmNlIF93ZWJWaWV3XTsKK30K
KworLSAoV2ViRnJhbWVWaWV3ICopX2ZyYW1lVmlldworeworICAgIHJldHVybiBbW19wcml2YXRl
LT5kYXRhU291cmNlIHdlYkZyYW1lXSBmcmFtZVZpZXddOworfQorCistIChET01Eb2N1bWVudEZy
YWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6KE5TQXJyYXkgKilwYXRocworewor
ICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50OworICAgIE5TRW51bWVyYXRvciAqZW51
bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBOU011dGFibGVBcnJheSAq
ZG9tTm9kZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKyAgICBOU1N0cmluZyAq
cGF0aDsKKyAgICAKKyAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkg
IT0gbmlsKSB7CisgICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVzOyBfd2ViX3VzZXJWaXNp
YmxlU3RyaW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlzIHdpbGwKKyAgICAgICAg
Ly8gYmUgcGFzdGVkIGFzIHZpc2libGUgdGV4dC4KKyAgICAgICAgTlNTdHJpbmcgKnVybCA9IFtb
W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoXSBfd2Via2l0X2Nhbm9uaWNhbGl6ZV0gX3dlYl91
c2VyVmlzaWJsZVN0cmluZ107CisgICAgICAgIFtkb21Ob2RlcyBhZGRPYmplY3Q6W1tbc2VsZiBf
ZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVUZXh0Tm9kZTogdXJsXV07CisgICAgfQorICAgIAor
ICAgIGZyYWdtZW50ID0gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNB
c1BhcmFncmFwaHM6ZG9tTm9kZXNdOyAKKyAgICAKKyAgICBbZG9tTm9kZXMgcmVsZWFzZV07Cisg
ICAgCisgICAgcmV0dXJuIFtmcmFnbWVudCBmaXJzdENoaWxkXSAhPSBuaWwgPyBmcmFnbWVudCA6
IG5pbDsKK30KKworKyAoTlNBcnJheSAqKV9leGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0
cmluZ0NvbnZlcnNpb24KK3sKKyAgICBzdGF0aWMgTlNBcnJheSAqZWxlbWVudHMgPSBuaWw7Cisg
ICAgaWYgKGVsZW1lbnRzID09IG5pbCkgeworICAgICAgICBlbGVtZW50cyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzOgorICAgICAgICAgICAgLy8gT21pdCBzdHlsZSBzaW5jZSB3
ZSB3YW50IHN0eWxlIHRvIGJlIGlubGluZSBzbyB0aGUgZnJhZ21lbnQgY2FuIGJlIGVhc2lseSBp
bnNlcnRlZC4KKyAgICAgICAgICAgIEAic3R5bGUiLAorICAgICAgICAgICAgLy8gT21pdCB4bWwg
c28gdGhlIHJlc3VsdCBpcyBub3QgWEhUTUwuCisgICAgICAgICAgICBAInhtbCIsIAorICAgICAg
ICAgICAgLy8gT21pdCB0YWdzIHRoYXQgd2lsbCBnZXQgc3RyaXBwZWQgd2hlbiBjb252ZXJ0ZWQg
dG8gYSBmcmFnbWVudCBhbnl3YXkuCisgICAgICAgICAgICBAImRvY3R5cGUiLCBAImh0bWwiLCBA
ImhlYWQiLCBAImJvZHkiLAorICAgICAgICAgICAgLy8gT21pdCBkZXByZWNhdGVkIHRhZ3MuCisg
ICAgICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJm
b250IiwgQCJpc2luZGV4IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAorICAgICAg
ICAgICAgLy8gT21pdCBvYmplY3Qgc28gbm8gZmlsZSBhdHRhY2htZW50cyBhcmUgcGFydCBvZiB0
aGUgZnJhZ21lbnQuCisgICAgICAgICAgICBAIm9iamVjdCIsIG5pbF07CisgICAgICAgIENGUmV0
YWluKGVsZW1lbnRzKTsKKyAgICB9CisgICAgcmV0dXJuIGVsZW1lbnRzOworfQorCitzdGF0aWMg
TlNVUkwqIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJpbmcgKnJlbGF0aXZlUGFydCkK
K3sKKyAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0KTsKKyAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNGVVVJRENyZWF0
ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKKyAgICBDRlJlbGVhc2UoVVVJ
RFJlZik7CisgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgVVVJ
RFN0cmluZywgcmVsYXRpdmVQYXJ0XV07CisgICAgQ0ZSZWxlYXNlKFVVSURTdHJpbmcpOworCisg
ICAgcmV0dXJuIFVSTDsKK30KKworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OihET01SYW5n
ZSAqKWNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs
bG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0Cit7CisgICAgTlNBcnJheSAqdHlwZXMg
PSBbcGFzdGVib2FyZCB0eXBlc107CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQg
PSBuaWw7CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hpdmVQYm9hcmRU
eXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6
MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVu
YW1lc1Bib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZy
YWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4
dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgCisgICAgaWYg
KFt0eXBlcyBjb250YWluc09iamVjdDpOU0hUTUxQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJh
Z21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5
cGU6TlNIVE1MUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFn
bWVudDsKKyAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJkVHlw
ZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisg
ICAgICAgIHJldHVybiBmcmFnbWVudDsKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6
TlNSVEZEUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUlRGRFBib2FyZFR5cGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpj
b250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJy
ZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisKKyAgICBpZiAoW3R5cGVz
IGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9
IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1RJ
RkZQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50Owor
CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1BERlBib2FyZFR5cGVdICYmCisgICAg
ICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFz
dGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yVHlwZTpOU1BERlBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CisKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1BJ
Q1RQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFn
bWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNQSUNUUGJvYXJkVHlwZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRl
eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291
cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyNlbmRpZgorCisgICAgLy8gT25s
eSAxMC41IGFuZCBoaWdoZXIgc3VwcG9ydCBzZXR0aW5nIGFuZCByZXRyaWV2aW5nIHBhc3RlYm9h
cmQgdHlwZXMgd2l0aCBVVElzLCBidXQgd2UgZG9uJ3QgYmVsaWV2ZQorICAgIC8vIHRoYXQgYW55
IGFwcGxpY2F0aW9ucyBvbiBUaWdlciBwdXQgdHlwZXMgZm9yIHdoaWNoIHdlIG9ubHkgaGF2ZSBh
IFVUSSwgbGlrZSBQTkcsIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6KE5TU3RyaW5nKilrVVRUeXBlUE5HXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBb
c2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6KE5TU3Ry
aW5nKilrVVRUeXBlUE5HCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50
OworICAgICAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVVJMUGJvYXJkVHlw
ZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisg
ICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgCisgICAgaWYgKGFsbG93UGxhaW5UZXh0
ICYmIFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdICYmCisgICAgICAg
IChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVi
b2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpIHsKKyAgICAgICAgcmV0
dXJuIGZyYWdtZW50OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCistIChOU1N0
cmluZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2Fy
ZAoreworICAgIE5TQXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9hcmQgdHlwZXNdOworICAgIAorICAg
IGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkKKyAgICAgICAg
cmV0dXJuIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJl
Y29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgCisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gbmlsOworICAgIE5TU3RyaW5nICpzdHJpbmc7
CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKQorICAg
ICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVu
dEF0dHJpYnV0ZXM6TlVMTF07CisgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmlsICYmIFt0
eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdKQorICAgICAgICBhdHRyaWJ1dGVk
U3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExd
OworICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nICE9IG5pbCkgeworICAgICAgICBzdHJpbmcgPSBb
W2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjb3B5XTsKKyAgICAgICAgW2F0dHJpYnV0ZWRTdHJp
bmcgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBbc3RyaW5nIGF1dG9yZWxlYXNlXTsKKyAgICB9
CisgICAgCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5
cGVdKSB7CisgICAgICAgIHN0cmluZyA9IFtbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JUeXBl
Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gY29tcG9uZW50c0pvaW5lZEJ5U3RyaW5nOkAiXG4iXTsK
KyAgICAgICAgaWYgKHN0cmluZyAhPSBuaWwpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nOwor
ICAgIH0KKyAgICAKKyAgICBOU1VSTCAqVVJMOworICAgIAorICAgIGlmICgoVVJMID0gW05TVVJM
IFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdKSkgeworICAgICAgICBzdHJpbmcgPSBbVVJM
IF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAgICAgICBpZiAoW3N0cmluZyBsZW5ndGhdID4g
MCkKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorICAgIAorICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQKK3sKKyAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5dOworICAgIFt3ZWJWaWV3IF9z
ZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworCisgICAgRE9NUmFuZ2UgKnJhbmdl
ID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOworICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdt
ZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGlu
Q29udGV4dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWluVGV4dF07CisgICAgaWYgKGZy
YWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpmcmFnbWVudCByZXBsYWNpbmdE
T01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKKyAg
ICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21l
bnQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5PXTsKKworICAgIFt3ZWJW
aWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOm5pbF07CisgICAgW3dlYlZpZXcgcmVsZWFzZV07
Cit9CisKKy0gKHZvaWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAoreworICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW3NlbGYgX3dlYlZp
ZXddIHJldGFpbl07CisgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVi
b2FyZF07CisKKyAgICBOU1N0cmluZyAqdGV4dCA9IFtzZWxmIF9wbGFpblRleHRGcm9tUGFzdGVi
b2FyZDpwYXN0ZWJvYXJkXTsKKyAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dDp0ZXh0IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQorICAg
ICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgc2VsZWN0
UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFydFJlcGxhY2VXaXRoUGFz
dGVib2FyZDpwYXN0ZWJvYXJkXV07CisKKyAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVi
b2FyZDpuaWxdOworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworfQorCistICh2b2lkKV9yZW1vdmVN
b3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHkKK3sKKyAgICBpZiAoIV9wcml2YXRlIHx8
ICFfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXS01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6
bmlsXTsKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMgPSBm
YWxzZTsKK30KKworLSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzCit7CisgICAgaWYg
KCFfcHJpdmF0ZSB8fCAhX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1ZpZXcgKnN1cGVydmlldyA9IFtzZWxmIHN1
cGVydmlld107CisgICAgaWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdpbmRvd10pCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2Vu
dGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOworICAgIFtub3RpZmlj
YXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOworICAgIFtub3RpZmljYXRpb25DZW50ZXIg
cmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0JvdW5kc0RpZENoYW5nZU5vdGlmaWNhdGlv
biBvYmplY3Q6c3VwZXJ2aWV3XTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2
aWV3Tm90aWZpY2F0aW9ucyA9IGZhbHNlOworfQorCistICh2b2lkKV9yZW1vdmVXaW5kb3dPYnNl
cnZlcnMKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25z
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdp
bmRvd107CisgICAgaWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU05v
dGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2
ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxd
OworICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2lu
ZG93RGlkUmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtub3RpZmljYXRp
b25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZp
Y2F0aW9uIG9iamVjdDp3aW5kb3ddOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2Jz
ZXJ2ZXI6c2VsZiBuYW1lOldLV2luZG93V2lsbE9yZGVyT25TY3JlZW5Ob3RpZmljYXRpb24oKSBv
YmplY3Q6d2luZG93XTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZp
Y2F0aW9ucyA9IGZhbHNlOworfQorCistIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9N
RG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAq
KXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAgIFdl
YlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgRE9NTm9kZSAqY2hpbGQgPSBb
ZnJhZ21lbnQgZmlyc3RDaGlsZF07CisgICAgaWYgKFtmcmFnbWVudCBsYXN0Q2hpbGRdID09IGNo
aWxkICYmIFtjaGlsZCBpc0tpbmRPZkNsYXNzOltET01DaGFyYWN0ZXJEYXRhIGNsYXNzXV0pCisg
ICAgICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6WyhET01DaGFyYWN0ZXJEYXRhICopY2hpbGQgZGF0
YV0gcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKKyAgICByZXR1
cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBz
aG91bGRJbnNlcnROb2RlOmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0
aW9uOmFjdGlvbl07Cit9CisKKy0gKEJPT0wpX3Nob3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICop
dGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2Vi
Vmlld0luc2VydEFjdGlvbilhY3Rpb24KK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYg
X3dlYlZpZXddOworICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6dGV4dCByZXBsYWNpbmdET01SYW5n
ZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOworfQorCistIChCT09MKV9zaG91bGRSZXBsYWNl
U2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmlld0lu
c2VydEFjdGlvbilhY3Rpb24KK3sKKyAgICByZXR1cm4gW3NlbGYgX3Nob3VsZEluc2VydFRleHQ6
dGV4dCByZXBsYWNpbmdET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV0gZ2l2ZW5BY3Rpb246
YWN0aW9uXTsKK30KKworLy8gQ2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSB2aWV3
IHRoYXQgZml0cyBvbiBhIHNpbmdsZSBwYWdlCistIChmbG9hdClfY2FsY3VsYXRlUHJpbnRIZWln
aHQKK3sKKyAgICAvLyBPYnRhaW4gdGhlIHByaW50IGluZm8gb2JqZWN0IGZvciB0aGUgY3VycmVu
dCBvcGVyYXRpb24KKyAgICBOU1ByaW50SW5mbyAqcGkgPSBbW05TUHJpbnRPcGVyYXRpb24gY3Vy
cmVudE9wZXJhdGlvbl0gcHJpbnRJbmZvXTsKKyAgICAKKyAgICAvLyBDYWxjdWxhdGUgdGhlIHBh
Z2UgaGVpZ2h0IGluIHBvaW50cworICAgIE5TU2l6ZSBwYXBlclNpemUgPSBbcGkgcGFwZXJTaXpl
XTsKKyAgICByZXR1cm4gcGFwZXJTaXplLmhlaWdodCAtIFtwaSB0b3BNYXJnaW5dIC0gW3BpIGJv
dHRvbU1hcmdpbl07Cit9CisKKy0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2UKK3sKKyAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZy
YW1lID8ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCkpIDogbmlsOworfQorCistIChCT09MKV9zaG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKily
YW5nZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2hvdWxkRGVsZXRlUmFu
Z2UoY29yZShyYW5nZSkpOworfQorCistIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2
ZW50ICopZXZlbnQKK3sKKyAgICAvLyBVc3VhbGx5LCB3ZSBoYWNrIEFLJ3MgaGl0VGVzdCBtZXRo
b2QgdG8gY2F0Y2ggYWxsIGV2ZW50cyBhdCB0aGUgdG9wbW9zdCBXZWJIVE1MVmlldy4gIAorICAg
IC8vIENhbGxlcnMgb2YgdGhpcyBtZXRob2QsIGhvd2V2ZXIsIHdhbnQgdG8gcXVlcnkgdGhlIGRl
ZXBlc3QgdmlldyBpbnN0ZWFkLgorICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IFlFUzsKKyAgICBO
U1ZpZXcgKmhpdFZpZXcgPSBbW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddIGhpdFRlc3Q6W2V2
ZW50IGxvY2F0aW9uSW5XaW5kb3ddXTsKKyAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBOTzsgICAg
CisgICAgcmV0dXJuIGhpdFZpZXc7Cit9CisKKy0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uV2l0aFBh
c3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJk
ICopcGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcg
KilhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgLy8gUHV0IEhUTUwgb24gdGhlIHBhc3RlYm9hcmQu
CisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsK
KyAgICAgICAgaWYgKFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjb3JlQXJjaGl2ZSA9IExlZ2Fj
eVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oY29yZShbc2VsZiBfZnJhbWVdKSkpIHsK
KyAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gY29yZUFyY2hpdmUg
PyBjb3JlQXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkgOiAwKQorICAgICAgICAgICAg
ICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6KE5TRGF0YSAqKWRhdGEuZ2V0KCkgZm9yVHlwZTpXZWJB
cmNoaXZlUGJvYXJkVHlwZV07CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUHV0IHRo
ZSBhdHRyaWJ1dGVkIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZCAoUlRGL1JURkQgZm9ybWF0KS4K
KyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdKSB7CisgICAg
ICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCkgeworICAgICAgICAgICAgYXR0cmlidXRl
ZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107CisgICAgICAgIH0gICAg
ICAgIAorICAgICAgICBOU0RhdGEgKlJURkREYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGREZy
b21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6bmlsXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZERGF0YSBm
b3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdOworICAgIH0gICAgICAgIAorICAgIGlmIChbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSkgeworICAgICAgICBpZiAoYXR0cmlidXRl
ZFN0cmluZyA9PSBuaWwpIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBz
ZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOworICAgICAgICB9CisgICAgICAgIGlmIChbYXR0cmli
dXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkgeworICAgICAgICAgICAgYXR0cmlidXRl
ZFN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBw
aW5nQXR0YWNobWVudENoYXJhY3RlcnNdOworICAgICAgICB9CisgICAgICAgIE5TRGF0YSAqUlRG
RGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0
cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKKyAgICAgICAg
W3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZEYXRhIGZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXTsKKyAg
ICB9CisgICAgCisgICAgLy8gUHV0IHBsYWluIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZC4KKyAg
ICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pIHsKKyAgICAg
ICAgLy8gTWFwICZuYnNwOyB0byBhIHBsYWluIG9sZCBzcGFjZSBiZWNhdXNlIHRoaXMgaXMgYmV0
dGVyIGZvciBzb3VyY2UgY29kZSwgb3RoZXIgYnJvd3NlcnMgZG8gaXQsCisgICAgICAgIC8vIGFu
ZCBiZWNhdXNlIEhUTUwgZm9yY2VzIHlvdSB0byBkbyB0aGlzIGFueSB0aW1lIHlvdSB3YW50IHR3
byBzcGFjZXMgaW4gYSByb3cuCisgICAgICAgIE5TTXV0YWJsZVN0cmluZyAqcyA9IFtbc2VsZiBz
ZWxlY3RlZFN0cmluZ10gbXV0YWJsZUNvcHldOworICAgICAgICBjb25zdCB1bmljaGFyIE5vbkJy
ZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOworICAgICAgICBOU1N0cmluZyAqTm9uQnJlYWtp
bmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczomTm9uQnJlYWtp
bmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07CisgICAgICAgIFtzIHJlcGxhY2VPY2N1cnJlbmNl
c09mU3RyaW5nOk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgd2l0aFN0cmluZzpAIiAiIG9wdGlvbnM6
MCByYW5nZTpOU01ha2VSYW5nZSgwLCBbcyBsZW5ndGhdKV07CisgICAgICAgIFtwYXN0ZWJvYXJk
IHNldFN0cmluZzpzIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXTsKKyAgICAgICAgW3MgcmVs
ZWFzZV07CisgICAgfQorICAgIAorICAgIGlmIChbc2VsZiBfY2FuU21hcnRDb3B5T3JEZWxldGVd
ICYmIFt0eXBlcyBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV0pIHsKKyAg
ICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpuaWwgZm9yVHlwZTpXZWJTbWFydFBhc3RlUGJvYXJk
VHlwZV07CisgICAgfQorfQorCistICh2b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAq
KWV2ZW50Cit7CisgICAgQVNTRVJUKCFldmVudCB8fCBbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91
c2VEb3duIHx8IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VEb3duIHx8IFtldmVudCB0eXBl
XSA9PSBOU090aGVyTW91c2VEb3duKTsKKworICAgIGlmIChldmVudCA9PSBfcHJpdmF0ZS0+bW91
c2VEb3duRXZlbnQpCisgICAgICAgIHJldHVybjsKKworICAgIFtldmVudCByZXRhaW5dOworICAg
IFtfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgcmVsZWFzZV07CisgICAgX3ByaXZhdGUtPm1vdXNl
RG93bkV2ZW50ID0gZXZlbnQ7Cit9CisKKy0gKHZvaWQpX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZVRpbWVyCit7CisgICAgaWYgKF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0
aXZlU3RhdGVUaW1lcikgeworICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUoX3ByaXZh
dGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKKyAgICAgICAgQ0ZSZWxlYXNl
KF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcik7CisgICAgICAgIF9w
cml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lciA9IE5VTEw7CisgICAgfQor
fQorCistICh2b2lkKV9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcgoreworICAgIGlmIChfcHJp
dmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpIHsKKyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZh
bGlkYXRlKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcik7CisgICAgICAgIENGUmVsZWFz
ZShfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpOworICAgICAgICBfcHJpdmF0ZS0+dXBk
YXRlTW91c2VvdmVyVGltZXIgPSBOVUxMOworICAgIH0KK30KKworLSAoV2ViSFRNTFZpZXcgKilf
dG9wSFRNTFZpZXcKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBjYW4gZmFpbCBpZiB0aGUgZGF0YVNv
dXJjZSBpcyBuaWwsIHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUgV2ViVmlldyBpcyB0ZWFyaW5nIGRv
d24gZnJvbSB0aGUgd2luZG93IGNsb3NpbmcuCisgICAgV2ViSFRNTFZpZXcgKnZpZXcgPSAoV2Vi
SFRNTFZpZXcgKilbW1tbX3ByaXZhdGUtPmRhdGFTb3VyY2UgX3dlYlZpZXddIG1haW5GcmFtZV0g
ZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAgIEFTU0VSVCh2aWV3KTsKKyAgICBBU1NFUlQo
W3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7CisgICAgcmV0dXJuIHZp
ZXc7Cit9CisKKy0gKEJPT0wpX2lzVG9wSFRNTFZpZXcKK3sKKyAgICAvLyBGSVhNRTogdGhpcyBz
aG91bGQgYmUgYSBjYWNoZWQgYm9vbGVhbiB0aGF0IGRvZXNuJ3QgcmVseSBvbiBfdG9wSFRNTFZp
ZXcgc2luY2UgdGhhdCBjYW4gZmFpbCAoc2VlIF90b3BIVE1MVmlldykuCisgICAgcmV0dXJuIHNl
bGYgPT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKK30KKworLSAodm9pZClfd2ViX3NldFByaW50aW5n
TW9kZVJlY3Vyc2l2ZQoreworICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VX
aWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyNp
Zm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Cisj
ZW5kaWYKKworICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisKKyAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRh
bnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworCisgICAgdW5z
aWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIFtbZGVzY2VuZGFudFdlYkhU
TUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0
aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyAgICBb
ZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBf
cHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POworI2VuZGlmCit9CisKKy0gKHZvaWQp
X3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZQoreworICAgIFtzZWxmIF9zZXRQcmludGlu
ZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZp
ZXdTaXplOk5PXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdT
dWJ2aWV3cyA9IFlFUzsKKyNlbmRpZgorCisgICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRX
ZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKworICAgIFtzZWxm
IF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxW
aWV3c107CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNv
dW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
W1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5nOk5P
IG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1Np
emU6Tk9dOworCisgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgcmVsZWFzZV07CisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsKKyNlbmRp
ZgorfQorCistICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmll
d1NpemUKK3sKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4w
ZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6WUVTXTsKKworI2lmbmRlZiBO
REVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKKyNlbmRpZgor
CisgICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJs
ZUFycmF5IGFsbG9jXSBpbml0XTsKKworICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhU
TUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107CisKKyAgICB1bnNpZ25lZCBj
b3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdz
IG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYg
bWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllFU107CisKKyAgICBbZGVzY2Vu
ZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0
ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POworI2VuZGlmCit9CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJQcml2YXRlKQorCisrIChOU0FycmF5ICopc3VwcG9y
dGVkTUlNRVR5cGVzCit7CisgICAgcmV0dXJuIFtXZWJIVE1MUmVwcmVzZW50YXRpb24gc3VwcG9y
dGVkTUlNRVR5cGVzXTsKK30KKworKyAoTlNBcnJheSAqKXN1cHBvcnRlZEltYWdlTUlNRVR5cGVz
Cit7CisgICAgcmV0dXJuIFtXZWJIVE1MUmVwcmVzZW50YXRpb24gc3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZXNdOworfQorCisrIChOU0FycmF5ICopc3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZXMKK3sK
KyAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWROb25JbWFnZU1JTUVU
eXBlc107Cit9CisKKysgKE5TQXJyYXkgKil1bnN1cHBvcnRlZFRleHRNSU1FVHlwZXMKK3sKKyAg
ICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKKyAgICAgICAgQCJ0ZXh0L2NhbGVu
ZGFyIiwgICAgICAgLy8gaUNhbAorICAgICAgICBAInRleHQveC1jYWxlbmRhciIsCisgICAgICAg
IEAidGV4dC94LXZjYWxlbmRhciIsCisgICAgICAgIEAidGV4dC92Y2FsZW5kYXIiLAorICAgICAg
ICBAInRleHQvdmNhcmQiLCAgICAgICAgICAvLyB2Q2FyZAorICAgICAgICBAInRleHQveC12Y2Fy
ZCIsCisgICAgICAgIEAidGV4dC9kaXJlY3RvcnkiLAorICAgICAgICBAInRleHQvbGRpZiIsICAg
ICAgICAgICAvLyBOZXRzY2FwZSBBZGRyZXNzIEJvb2sKKyAgICAgICAgQCJ0ZXh0L3FpZiIsICAg
ICAgICAgICAgLy8gUXVpY2tlbgorICAgICAgICBAInRleHQveC1xaWYiLAorICAgICAgICBAInRl
eHQveC1jc3YiLCAgICAgICAgICAvLyBDU1YgKGZvciBBZGRyZXNzIEJvb2sgYW5kIE1pY3Jvc29m
dCBPdXRsb29rKQorICAgICAgICBAInRleHQveC12Y2YiLCAgICAgICAgICAvLyB2Q2FyZCB0eXBl
IHVzZWQgaW4gU3VuIGFmZmluaXR5IGFwcAorICAgICAgICBAInRleHQvcnRmIiwgICAgICAgICAg
ICAvLyBSaWNoIFRleHQgRm9ybWF0CisgICAgICAgIG5pbF07Cit9CisKKysgKHZvaWQpX3Bvc3RG
bGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2ZW50Cit7CisgICAgLy8g
VGhpcyBpcyBhIHdvcmthcm91bmQgZm9yOiA8cmRhcjovL3Byb2JsZW0vMjk4MTYxOT4gTlNSZXNw
b25kZXJfUHJpdmF0ZSBzaG91bGQgaW5jbHVkZSBub3RpZmljYXRpb24gZm9yIEZsYWdzQ2hhbmdl
ZAorICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpO
U01vdXNlTW92ZWQKKyAgICAgICAgbG9jYXRpb246W1tmbGFnc0NoYW5nZWRFdmVudCB3aW5kb3dd
IGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlvbl1dCisgICAgICAgIG1v
ZGlmaWVyRmxhZ3M6W2ZsYWdzQ2hhbmdlZEV2ZW50IG1vZGlmaWVyRmxhZ3NdCisgICAgICAgIHRp
bWVzdGFtcDpbZmxhZ3NDaGFuZ2VkRXZlbnQgdGltZXN0YW1wXQorICAgICAgICB3aW5kb3dOdW1i
ZXI6W2ZsYWdzQ2hhbmdlZEV2ZW50IHdpbmRvd051bWJlcl0KKyAgICAgICAgY29udGV4dDpbZmxh
Z3NDaGFuZ2VkRXZlbnQgY29udGV4dF0KKyAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50
OjAgcHJlc3N1cmU6MF07CisKKyAgICAvLyBQcmV0ZW5kIGl0J3MgYSBtb3VzZSBtb3ZlLgorICAg
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KKyAgICAgICAgcG9zdE5vdGlm
aWNhdGlvbk5hbWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0OnNlbGYKKyAgICAg
ICAgdXNlckluZm86W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpmYWtlRXZlbnQg
Zm9yS2V5OkAiTlNFdmVudCJdXTsKK30KKworLSAoaWQpX2JyaWRnZQoreworICAgIC8vIFRoaXMg
bWV0aG9kIGV4aXN0cyB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggTGVvcGFyZCdzIERp
Y3Rpb25hcnkuYXBwLCBzaW5jZSBpdAorICAgIC8vIGNhbGxzIF9icmlkZ2UgdG8gZ2V0IGFjY2Vz
cyB0byBjb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6IGFuZCBjb252ZXJ0RE9NUmFuZ2VUb05TUmFu
Z2U6LgorICAgIC8vIFJldHVybiB0aGUgV2ViRnJhbWUsIHdoaWNoIGltcGxlbWVudHMgdGhlIGNv
bXBhdGliaWxpdHkgbWV0aG9kcy4gPHJkYXI6Ly9wcm9ibGVtLzYwMDIxNjA+CisgICAgcmV0dXJu
IFtzZWxmIF9mcmFtZV07Cit9CisKKy0gKHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZl
bnQKK3sKKyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOworICAgIAorICAg
IE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNl
TW92ZWQKKyAgICAgICAgbG9jYXRpb246W1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFz
ZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KKyAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBw
IGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAgdGltZXN0YW1wOltOU0RhdGUg
dGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQorICAgICAgICB3aW5kb3dOdW1iZXI6W1tz
ZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQorICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVu
dEV2ZW50XSBjb250ZXh0XQorICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVz
c3VyZTowXTsKKyAgICAKKyAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OmZha2VF
dmVudF07Cit9CisKK3N0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWNrKENG
UnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkICppbmZvKQoreworICAgIFdlYkhUTUxWaWV3ICp2
aWV3ID0gKFdlYkhUTUxWaWV3ICopaW5mbzsKKyAgICAKKyAgICBbdmlldyBfdXBkYXRlTW91c2Vv
dmVyV2l0aEZha2VFdmVudF07Cit9CisKKy0gKHZvaWQpX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkCit7
CisgICAgTlNQb2ludCBvcmlnaW4gPSBbW3NlbGYgc3VwZXJ2aWV3XSBib3VuZHNdLm9yaWdpbjsK
KyAgICBpZiAoIU5TRXF1YWxQb2ludHMoX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiwgb3Jp
Z2luKSkgeworICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpCisgICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kU2Nyb2xsRXZl
bnQoKTsKKyAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFu
Z2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgICAgICAKKyAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9
IFtzZWxmIF93ZWJWaWV3XTsKKyAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3OndlYlZpZXcgZGlkU2Nyb2xsRG9jdW1lbnRJbkZyYW1lVmlldzpbc2VsZiBfZnJh
bWVWaWV3XV07CisgICAgfQorICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBvcmln
aW47CisKKyAgICBpZiAoW3NlbGYgd2luZG93XSAmJiAhX3ByaXZhdGUtPmNsb3NlZCAmJiAhX3By
aXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVyQ29u
dGV4dCBjb250ZXh0ID0geyAwLCBzZWxmLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgICAgICAgIAor
ICAgICAgICAvLyBVc2UgYSAxMDBtcyBkZWxheSBzbyB0aGF0IHRoZSBzeW50aGV0aWMgbW91c2Ug
b3ZlciB1cGRhdGUgZG9lc24ndCBjYXVzZSBjdXJzb3IgdGhyYXNoaW5nIHdoZW4gcGFnZXMgYXJl
IGxvYWRpbmcKKyAgICAgICAgLy8gYW5kIHNjcm9sbGluZyByYXBpZGx5IGJhY2sgdG8gYmFjay4K
KyAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyID0gQ0ZSdW5Mb29wVGltZXJD
cmVhdGUoTlVMTCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyAwLjEsIDAsIDAsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWNrLCAmY29udGV4dCk7CisgICAgICAgIENG
UnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgX3ByaXZhdGUtPnVwZGF0ZU1v
dXNlb3ZlclRpbWVyLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAgIH0KK30KKworLSAodm9p
ZClfc2V0QXNpZGVTdWJ2aWV3cworeworICAgIEFTU0VSVCghX3ByaXZhdGUtPnN1YnZpZXdzU2V0
QXNpZGUpOworICAgIEFTU0VSVChfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3cyA9PSBuaWwpOworICAg
IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID0gX3N1YnZpZXdzOworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdGhlIGxheWVyLWhvc3Rpbmcg
dmlldyBpbiB0aGUgc3Vidmlld3MsIG90aGVyd2lzZSB0aGUgbGF5ZXJzIGZsYXNoLgorICAgIGlm
IChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgeworICAgICAgICBOU0FycmF5KiBuZXdTdWJ2
aWV3cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOl9wcml2YXRlLT5sYXllckhv
c3RpbmdWaWV3LCBuaWxdOworICAgICAgICBfc3Vidmlld3MgPSBuZXdTdWJ2aWV3czsKKyAgICB9
IGVsc2UKKyAgICAgICAgX3N1YnZpZXdzID0gbmlsOworI2Vsc2UKKyAgICBfc3Vidmlld3MgPSBu
aWw7CisjZW5kaWYgICAgCisgICAgX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUgPSBZRVM7Cisg
fQorIAorIC0gKHZvaWQpX3Jlc3RvcmVTdWJ2aWV3cworIHsKKyAgICBBU1NFUlQoX3ByaXZhdGUt
PnN1YnZpZXdzU2V0QXNpZGUpOworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKKyAgICAgICAgW19zdWJ2aWV3cyBy
ZWxlYXNlXTsKKyAgICAgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNhdmVkU3Vidmlld3M7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKF9zdWJ2aWV3cyA9PSBuaWwpOworICAgICAgICBf
c3Vidmlld3MgPSBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKKyAgICB9CisjZWxzZQorICAgIEFT
U0VSVChfc3Vidmlld3MgPT0gbmlsKTsKKyAgICBfc3Vidmlld3MgPSBfcHJpdmF0ZS0+c2F2ZWRT
dWJ2aWV3czsKKyNlbmRpZiAgICAKKyAgICBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3cyA9IG5pbDsK
KyAgICBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSA9IE5POworfQorCisjaWZuZGVmIE5ERUJV
RworCistICh2b2lkKWRpZEFkZFN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKK3sKKyAgICBpZiAo
X3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MpCisgICAgICAgIExPRyhWaWV3LCAiQSB2aWV3
IG9mIGNsYXNzICVzIHdhcyBhZGRlZCBkdXJpbmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5
b3V0IG9yIHByaW50aW5nIG1vZGUgY2hhbmdlLiBUaGlzIHZpZXcgbWlnaHQgcGFpbnQgd2l0aG91
dCBmaXJzdCByZWNlaXZpbmcgbGF5b3V0LiIsIG9iamVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcg
Y2xhc3NdKSk7Cit9CisKKy0gKHZvaWQpd2lsbFJlbW92ZVN1YnZpZXc6KE5TVmlldyAqKXN1YnZp
ZXcKK3sKKyAgICAvLyBIYXZlIHRvIG51bGwtY2hlY2sgX3ByaXZhdGUsIHNpbmNlIHRoaXMgY2Fu
IGJlIGNhbGxlZCB2aWEgLWRlYWxsb2Mgd2hlbgorICAgIC8vIGNsZWFuaW5nIHVwIHRoZSB0aGUg
bGF5ZXJIb3N0aW5nVmlldy4KKyAgICBpZiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPmVudW1lcmF0
aW5nU3Vidmlld3MpCisgICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVzIHdhcyBy
ZW1vdmVkIGR1cmluZyBzdWJ2aWV3IGVudW1lcmF0aW9uIGZvciBsYXlvdXQgb3IgcHJpbnRpbmcg
bW9kZSBjaGFuZ2UuIFdlIHdpbGwgc3RpbGwgZG8gbGF5b3V0IG9yIHRoZSBwcmludGluZyBtb2Rl
IGNoYW5nZSBldmVuIHRob3VnaCB0aGlzIHZpZXcgaXMgbm8gbG9uZ2VyIGluIHRoZSB2aWV3IGhp
ZXJhcmNoeS4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNsYXNzXSkpOworfQorCisj
ZW5kaWYKKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKy8vIFRoaXMgaXMgY2FsbGVkIHdo
ZW4gd2UgYXJlIGFib3V0IHRvIGRyYXcsIGJ1dCBiZWZvcmUgb3VyIGRpcnR5IHJlY3QgaXMgcHJv
cGFnYXRlZCB0byBvdXIgYW5jZXN0b3JzLgorLy8gVGhhdCdzIHRoZSBwZXJmZWN0IHRpbWUgdG8g
ZG8gYSBsYXlvdXQsIGV4Y2VwdCB0aGF0IGlkZWFsbHkgd2UnZCB3YW50IHRvIGJlIHN1cmUgdGhh
dCB3ZSdyZSBkaXJ0eQorLy8gYmVmb3JlIGRvaW5nIGl0LiBBcyBhIGNvbXByb21pc2UsIHdoZW4g
d2UncmUgb3BhcXVlIHdlIGRvIHRoZSBsYXlvdXQgb25seSB3aGVuIGFjdHVhbGx5IGFza2VkIHRv
CisvLyBkcmF3LCBidXQgd2hlbiB3ZSdyZSB0cmFuc3BhcmVudCB3ZSBkbyB0aGUgbGF5b3V0IGF0
IHRoaXMgc3RhZ2Ugc28gdmlld3MgYmVoaW5kIHVzIGtub3cgdGhhdCB0aGV5CisvLyBuZWVkIHRv
IGJlIHJlZHJhd24gKGluIGNhc2UgdGhlIGxheW91dCBjYXVzZXMgc29tZSB0aGluZ3MgdG8gZ2V0
IGRpcnRpZWQpLgorLSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3Jz
Cit7CisgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFja2dyb3VuZF0pCisgICAgICAg
IFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworICAgIFtzdXBlciBfcHJvcGFn
YXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3JzXTsKK30KKworI2Vsc2UKKworLSAodm9pZCl2
aWV3V2lsbERyYXcKK3sKKyAgICAvLyBPbiB3aW5kb3cgY2xvc2Ugd2Ugd2lsbCBiZSBjYWxsZWQg
d2hlbiB0aGUgZGF0YXNvdXJjZSBpcyBuaWwsIHRoZW4gaGl0IGFuIGFzc2VydCBpbiBfdG9wSFRN
TFZpZXcKKyAgICAvLyBTbyBjaGVjayBpZiB0aGUgZGF0YVNvdXJjZSBpcyBuaWwgYmVmb3JlIGNh
bGxpbmcgW3NlbGYgX2lzVG9wSFRNTFZpZXddLCB0aGlzIGNhbiBiZSByZW1vdmVkCisgICAgLy8g
b25jZSB0aGUgRklYTUUgaW4gX2lzVG9wSFRNTFZpZXcgaXMgZml4ZWQuCisgICAgaWYgKF9wcml2
YXRlLT5kYXRhU291cmNlICYmIFtzZWxmIF9pc1RvcEhUTUxWaWV3XSkKKyAgICAgICAgW3NlbGYg
X3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisgICAgW3N1cGVyIHZpZXdXaWxsRHJhd107
Cit9CisKKyNlbmRpZgorCisvLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4g
V2UgdGFrZSBjYXJlIG9mIHRoYXQuCistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVl
ZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0OihCT09MKWlzVmlz
aWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2aXNpYmxlVmlldyB0
b3BWaWV3OihCT09MKXRvcFZpZXcKK3sKKyAgICAvLyBUaGlzIGhlbHBzIHdoZW4gd2UgcHJpbnQg
YXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9jZXNzLgorICAgIC8vIElmIHRoZSBXZWJIVE1M
VmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGluZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhh
dmUgdG8gZG8gdGhpcy4KKyAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0gX3ByaXZhdGUtPnBy
aW50aW5nOworICAgIEJPT0wgaXNQcmludGluZyA9ICFbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHREcmF3aW5nVG9TY3JlZW5dOworICAgIGlmIChpc1ByaW50aW5nKSB7CisgICAgICAg
IGlmICghd2FzSW5QcmludGluZ01vZGUpCisgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50
aW5nTW9kZVJlY3Vyc2l2ZV07CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworI2Vu
ZGlmCisgICAgfSBlbHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgW3NlbGYgX3dl
Yl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07CisKKyNpZmRlZiBCVUlMRElOR19PTl9USUdF
UgorCisgICAgLy8gQmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZpZXdXaWxsRHJhdyB3ZSBu
ZWVkIHRvIGRvIGxheW91dCBoZXJlLgorICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1
cnNpdmVdOworICAgIFtfc3Vidmlld3MgbWFrZU9iamVjdHNQZXJmb3JtU2VsZWN0b3I6QHNlbGVj
dG9yKF9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnMpXTsKKworI2VuZGlmCisK
KyAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107CisgICAgW3N1cGVyIF9yZWN1cnNpdmVEaXNw
bGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OnJlY3QgaXNWaXNpYmxlUmVjdDppc1Zpc2li
bGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzp2aXNpYmxlVmlldyB0b3BWaWV3OnRvcFZp
ZXddOworICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOworCisgICAgaWYgKHdhc0luUHJpbnRp
bmdNb2RlICE9IGlzUHJpbnRpbmcpIHsKKyAgICAgICAgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQor
ICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZl
XTsKKyAgICB9Cit9CisKKy8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBX
ZSB0YWtlIGNhcmUgb2YgdGhhdC4KKy0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdp
dGhMb2NrRm9jdXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDooTlNSZWN0KXZpc1JlY3QK
K3sKKyAgICBCT09MIG5lZWRUb1NldEFzaWRlU3Vidmlld3MgPSAhX3ByaXZhdGUtPnN1YnZpZXdz
U2V0QXNpZGU7CisKKyAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0gX3ByaXZhdGUtPnByaW50
aW5nOworICAgIEJPT0wgaXNQcmludGluZyA9ICFbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENv
bnRleHREcmF3aW5nVG9TY3JlZW5dOworCisgICAgaWYgKG5lZWRUb1NldEFzaWRlU3Vidmlld3Mp
IHsKKyAgICAgICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50IGFzIHBhcnQgb2YgYSBsYXJn
ZXIgcHJpbnQgcHJvY2Vzcy4KKyAgICAgICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0c2VsZiBp
cyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBkbyB0aGlz
LgorICAgICAgICBpZiAoaXNQcmludGluZykgeworICAgICAgICAgICAgaWYgKCF3YXNJblByaW50
aW5nTW9kZSkKKyAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vy
c2l2ZV07CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisjZW5kaWYK
KyAgICAgICAgfSBlbHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgICAgIFtzZWxm
IF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOworCisjaWZkZWYgQlVJTERJTkdfT05f
VElHRVIKKworICAgICAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMgbm90IGhhdmUgdmlld1dpbGxE
cmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhlcmUuCisgICAgICAgIE5TUmVjdCBib3VuZHNCZWZv
cmVMYXlvdXQgPSBbc2VsZiBib3VuZHNdOworICAgICAgICBpZiAoIU5TSXNFbXB0eVJlY3Qodmlz
UmVjdCkpCisgICAgICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsK
KworICAgICAgICAvLyBJZiBsYXlvdXQgY2hhbmdlcyB0aGUgdmlldydzIGJvdW5kcywgdGhlbiB3
ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgdmlzUmVjdC4KKyAgICAgICAgLy8gVGhhdCdzIGJlY2F1
c2UgdGhlIHZpc1JlY3QgcGFzc2VkIHRvIHVzIHdhcyBiYXNlZCBvbiB0aGUgYm91bmRzIGF0IHRo
ZSB0aW1lCisgICAgICAgIC8vIHdlIHdlcmUgY2FsbGVkLiBUaGlzIG1ldGhvZCBpcyBvbmx5IGRp
c3BsYXllZCB0byBkcmF3ICJhbGwiLCBzbyBpdCdzIHNhZmUKKyAgICAgICAgLy8gdG8ganVzdCBj
YWxsIHZpc2libGVSZWN0IHRvIGNvbXB1dGUgdGhlIGVudGlyZSByZWN0YW5nbGUuCisgICAgICAg
IGlmICghTlNFcXVhbFJlY3RzKGJvdW5kc0JlZm9yZUxheW91dCwgW3NlbGYgYm91bmRzXSkpCisg
ICAgICAgICAgICB2aXNSZWN0ID0gW3NlbGYgdmlzaWJsZVJlY3RdOworCisjZW5kaWYKKworICAg
ICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107CisgICAgfQorCisgICAgW3N1cGVyIF9yZWN1
cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3VzOm5lZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6
dmlzUmVjdF07CisKKyAgICBpZiAobmVlZFRvU2V0QXNpZGVTdWJ2aWV3cykgeworICAgICAgICBp
ZiAod2FzSW5QcmludGluZ01vZGUgIT0gaXNQcmludGluZykgeworICAgICAgICAgICAgaWYgKHdh
c0luUHJpbnRpbmdNb2RlKQorICAgICAgICAgICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdN
b2RlUmVjdXJzaXZlXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbc2VsZiBf
d2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKyAgICAgICAgfQorCisgICAgICAgIFtz
ZWxmIF9yZXN0b3JlU3Vidmlld3NdOworICAgIH0KK30KKworLy8gRG9uJ3QgbGV0IEFwcEtpdCBl
dmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0LgorLSAodm9pZClfcmVjdXJz
aXZlOihCT09MKXJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClkaXNw
bGF5UmVjdCBpbkNvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0ICopY29udGV4dCB0b3BWaWV3OihC
T09MKXRvcFZpZXcKK3sKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUiAKKyAgICAvLyBCZWNhdXNl
IFRpZ2VyIGRvZXMgbm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhl
cmUuCisgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisjZW5kaWYKKwor
ICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKKyAgICBbc3VwZXIgX3JlY3Vyc2l2ZTpyZWN1
cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OmRpc3BsYXlSZWN0IGluQ29udGV4dDpjb250
ZXh0IHRvcFZpZXc6dG9wVmlld107CisgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107Cit9CisK
Ky0gKEJPT0wpX2luc2lkZUFub3RoZXJIVE1MVmlldworeworICAgIHJldHVybiBzZWxmICE9IFtz
ZWxmIF90b3BIVE1MVmlld107Cit9CisKKy0gKE5TVmlldyAqKWhpdFRlc3Q6KE5TUG9pbnQpcG9p
bnQKK3sKKyAgICAvLyBXZWJIVE1MVmlldyBvYmplY3RzIGhhbmRsZSBhbGwgZXZlbnRzIGZvciBv
YmplY3RzIGluc2lkZSB0aGVtLgorICAgIC8vIFRvIGdldCB0aG9zZSBldmVudHMsIHdlIHByZXZl
bnQgaGl0IHRlc3RpbmcgZnJvbSBBcHBLaXQuCisKKyAgICAvLyBCdXQgdGhlcmUgYXJlIHRocmVl
IGV4Y2VwdGlvbnMgdG8gdGhpczoKKyAgICAvLyAgIDEpIEZvciByaWdodCBtb3VzZSBjbGlja3Mg
YW5kIGNvbnRyb2wgY2xpY2tzIHdlIGRvbid0IHlldCBoYXZlIGFuIGltcGxlbWVudGF0aW9uCisg
ICAgLy8gICAgICB0aGF0IHdvcmtzIGZvciBuZXN0ZWQgdmlld3MsIHNvIHdlIGxldCB0aGUgaGl0
IHRlc3RpbmcgZ28gdGhyb3VnaCB0aGUKKyAgICAvLyAgICAgIHN0YW5kYXJkIE5TVmlldyBjb2Rl
IHBhdGggKG5lZWRzIHRvIGJlIGZpeGVkLCBzZWUgYnVnIDQzNjE2MTgpLgorICAgIC8vICAgMikg
SmF2YSBkZXBlbmRzIG9uIGRvaW5nIGEgaGl0IHRlc3QgaW5zaWRlIGl0J3MgbW91c2UgbW92ZWQg
aGFuZGxpbmcsCisgICAgLy8gICAgICBzbyB3ZSBsZXQgdGhlIGhpdCB0ZXN0aW5nIGdvIHRocm91
Z2ggdGhlIHN0YW5kYXJkIE5TVmlldyBjb2RlIHBhdGgKKyAgICAvLyAgICAgIHdoZW4gdGhlIGN1
cnJlbnQgZXZlbnQgaXMgYSBtb3VzZSBtb3ZlIChleGNlcHQgd2hlbiB3ZSBhcmUgY2FsbGluZwor
ICAgIC8vICAgICAgZnJvbSBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50LCBzbyB3ZSBoYXZlIHRv
IHVzZSBhIGdsb2JhbCwKKyAgICAvLyAgICAgIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0LCBmb3Ig
dGhhdCkKKyAgICAvLyAgIDMpIFRoZSBhY2NlcHRzRmlyc3RNb3VzZTogYW5kIHNob3VsZERlbGF5
V2luZG93T3JkZXJpbmdGb3JFdmVudDogbWV0aG9kcworICAgIC8vICAgICAgYm90aCBuZWVkIHRv
IGZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBjaGVjayB3aXRoIGluc2lkZSB0aGUgV2ViSFRNTFZp
ZXcuCisgICAgLy8gICAgICBUaGV5IHVzZSBhIGdsb2JhbCB0byBjaGFuZ2UgdGhlIGJlaGF2aW9y
IG9mIGhpdFRlc3Q6IHNvIHRoZXkgY2FuIGdldCB0aGUKKyAgICAvLyAgICAgIHJpZ2h0IHZpZXcu
IFRoZSBnbG9iYWwgaXMgZm9yY2VOU1ZpZXdIaXRUZXN0IGFuZCB0aGUgbWV0aG9kIHRoZXkgdXNl
IHRvCisgICAgLy8gICAgICBkbyB0aGUgaGl0IHRlc3RpbmcgaXMgX2hpdFZpZXdGb3JFdmVudDou
IChCdXQgdGhpcyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseQorICAgIC8vICAgICAgd2hlbiB0aGVy
ZSBpcyBIVE1MIG92ZXJsYXBwaW5nIHRoZSB2aWV3LCBzZWUgYnVnIDQzNjE2MjYpCisgICAgLy8g
ICA0KSBOU0FjY2Vzc2liaWxpdHlIaXRUZXN0IHJlbGllcyBvbiB0aGlzIGZvciBjaGVja2luZyB0
aGUgY3Vyc29yIHBvc2l0aW9uLgorICAgIC8vICAgICAgT3VyIGNoZWNrIGZvciB0aGF0IGlzIHdo
ZXRoZXIgdGhlIGV2ZW50IGlzIE5TRmxhZ3NDaGFuZ2VkLiAgVGhpcyB3b3JrcworICAgIC8vICAg
ICAgZm9yIFZvaWNlT3ZlcidzIGNudGwtb3B0LWY1IGNvbW1hbmQgKG1vdmUgZm9jdXMgdG8gaXRl
bSB1bmRlciBjdXJzb3IpCisgICAgLy8gICAgICBhbmQgRGljdGlvbmFyeSdzIGNtZC1jbnRsLUQg
KG9wZW4gZGljdGlvbmFyeSBwb3B1cCBmb3IgaXRlbSB1bmRlciBjdXJzb3IpLgorICAgIC8vICAg
ICAgVGhpcyBpcyBvZiBjb3Vyc2UgYSBoYWNrLgorCisgICAgQk9PTCBjYXB0dXJlSGl0c09uU3Vi
dmlld3M7CisgICAgaWYgKGZvcmNlTlNWaWV3SGl0VGVzdCkKKyAgICAgICAgY2FwdHVyZUhpdHNP
blN1YnZpZXdzID0gTk87CisgICAgZWxzZSBpZiAoZm9yY2VXZWJIVE1MVmlld0hpdFRlc3QpCisg
ICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9IFlFUzsKKyAgICBlbHNlIHsKKyAgICAgICAg
TlNFdmVudCAqZXZlbnQgPSBbW3NlbGYgd2luZG93XSBjdXJyZW50RXZlbnRdOworICAgICAgICBj
YXB0dXJlSGl0c09uU3Vidmlld3MgPSAhKFtldmVudCB0eXBlXSA9PSBOU01vdXNlTW92ZWQKKyAg
ICAgICAgICAgIHx8IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VEb3duCisgICAgICAgICAg
ICB8fCAoW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biAmJiAoW2V2ZW50IG1vZGlmaWVy
RmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaykgIT0gMCkKKyAgICAgICAgICAgIHx8IFtldmVudCB0
eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCk7CisgICAgfQorCisgICAgaWYgKCFjYXB0dXJlSGl0c09u
U3Vidmlld3MpCisgICAgICAgIHJldHVybiBbc3VwZXIgaGl0VGVzdDpwb2ludF07CisgICAgaWYg
KFtbc2VsZiBzdXBlcnZpZXddIG1vdXNlOnBvaW50IGluUmVjdDpbc2VsZiBmcmFtZV1dKQorICAg
ICAgICByZXR1cm4gc2VsZjsKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9jbGVhckxh
c3RIaXRWaWV3SWZTZWxmCit7CisgICAgaWYgKGxhc3RIaXRWaWV3ID09IHNlbGYpCisgICAgICAg
IGxhc3RIaXRWaWV3ID0gbmlsOworfQorCistIChOU1RyYWNraW5nUmVjdFRhZylhZGRUcmFja2lu
Z1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEg
YXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZQoreworICAgIEFTU0VSVChfcHJpdmF0ZS0+
dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKKyAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3du
ZXIgPSBvd25lcjsKKyAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGEgPSBkYXRhOwor
ICAgIHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsKK30KKworLSAoTlNUcmFja2luZ1JlY3RUYWcp
X2FkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2
b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRlIHVzZVRyYWNraW5nTnVt
OihpbnQpdGFnCit7CisgICAgQVNTRVJUKHRhZyA9PSAwIHx8IHRhZyA9PSBUUkFDS0lOR19SRUNU
X1RBRyk7CisgICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOwor
ICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVyOworICAgIF9wcml2YXRlLT50
cmFja2luZ1JlY3RVc2VyRGF0YSA9IGRhdGE7CisgICAgcmV0dXJuIFRSQUNLSU5HX1JFQ1RfVEFH
OworfQorCistICh2b2lkKV9hZGRUcmFja2luZ1JlY3RzOihOU1JlY3QgKilyZWN0cyBvd25lcjoo
aWQpb3duZXIgdXNlckRhdGFMaXN0Oih2b2lkICoqKXVzZXJEYXRhTGlzdCBhc3N1bWVJbnNpZGVM
aXN0OihCT09MICopYXNzdW1lSW5zaWRlTGlzdCB0cmFja2luZ051bXM6KE5TVHJhY2tpbmdSZWN0
VGFnICopdHJhY2tpbmdOdW1zIGNvdW50OihpbnQpY291bnQKK3sKKyAgICBBU1NFUlQoY291bnQg
PT0gMSk7CisgICAgQVNTRVJUKHRyYWNraW5nTnVtc1swXSA9PSAwIHx8IHRyYWNraW5nTnVtc1sw
XSA9PSBUUkFDS0lOR19SRUNUX1RBRyk7CisgICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1Jl
Y3RPd25lciA9PSBuaWwpOworICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVy
OworICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9IHVzZXJEYXRhTGlzdFswXTsK
KyAgICB0cmFja2luZ051bXNbMF0gPSBUUkFDS0lOR19SRUNUX1RBRzsKK30KKworLSAodm9pZCly
ZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRhZworeworICAgIGlmICh0YWcg
PT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChfcHJpdmF0ZSAmJiAodGFnID09
IFRSQUNLSU5HX1JFQ1RfVEFHKSkgeworICAgICAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3du
ZXIgPSBuaWw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKF9wcml2YXRl
ICYmICh0YWcgPT0gX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnKSkgeworICAgICAgICBbc3VwZXIg
cmVtb3ZlVHJhY2tpbmdSZWN0OnRhZ107CisgICAgICAgIF9wcml2YXRlLT5sYXN0VG9vbFRpcFRh
ZyA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gSWYgYW55IG90aGVy
IHRyYWNraW5nIHJlY3QgaXMgYmVpbmcgcmVtb3ZlZCwgd2UgZG9uJ3Qga25vdyBob3cgaXQgd2Fz
IGNyZWF0ZWQKKyAgICAvLyBhbmQgaXQncyBwb3NzaWJsZSB0aGVyZSdzIGEgbGVhayBpbnZvbHZl
ZCAoc2VlIDM1MDAyMTcpCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKKy0gKHZvaWQp
X3JlbW92ZVRyYWNraW5nUmVjdHM6KE5TVHJhY2tpbmdSZWN0VGFnICopdGFncyBjb3VudDooaW50
KWNvdW50Cit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgaW50IHRhZyA9IHRhZ3NbaV07CisgICAgICAgIGlmICh0YWcgPT0gMCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBBU1NFUlQodGFnID09IFRSQUNLSU5HX1JFQ1RfVEFH
KTsKKyAgICAgICAgaWYgKF9wcml2YXRlICE9IG5pbCkgeworICAgICAgICAgICAgX3ByaXZhdGUt
PnRyYWNraW5nUmVjdE93bmVyID0gbmlsOworICAgICAgICB9CisgICAgfQorfQorCistICh2b2lk
KV9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkCit7CisgICAgLy8gTm90aGluZyBtYXR0ZXJzIGV4Y2Vw
dCB3aW5kb3csIHRyYWNraW5nTnVtYmVyLCBhbmQgdXNlckRhdGEuCisgICAgTlNFdmVudCAqZmFr
ZUV2ZW50ID0gW05TRXZlbnQgZW50ZXJFeGl0RXZlbnRXaXRoVHlwZTpOU01vdXNlRXhpdGVkCisg
ICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KDAsIDApCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6
MAorICAgICAgICB0aW1lc3RhbXA6MAorICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRv
d10gd2luZG93TnVtYmVyXQorICAgICAgICBjb250ZXh0Ok5VTEwKKyAgICAgICAgZXZlbnROdW1i
ZXI6MAorICAgICAgICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19SRUNUX1RBRworICAgICAgICB1
c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOworICAgIFtfcHJpdmF0ZS0+
dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFeGl0ZWQ6ZmFrZUV2ZW50XTsKK30KKworLSAodm9pZClf
c2VuZFRvb2xUaXBNb3VzZUVudGVyZWQKK3sKKyAgICAvLyBOb3RoaW5nIG1hdHRlcnMgZXhjZXB0
IHdpbmRvdywgdHJhY2tpbmdOdW1iZXIsIGFuZCB1c2VyRGF0YS4KKyAgICBOU0V2ZW50ICpmYWtl
RXZlbnQgPSBbTlNFdmVudCBlbnRlckV4aXRFdmVudFdpdGhUeXBlOk5TTW91c2VFbnRlcmVkCisg
ICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KDAsIDApCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6
MAorICAgICAgICB0aW1lc3RhbXA6MAorICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRv
d10gd2luZG93TnVtYmVyXQorICAgICAgICBjb250ZXh0Ok5VTEwKKyAgICAgICAgZXZlbnROdW1i
ZXI6MAorICAgICAgICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19SRUNUX1RBRworICAgICAgICB1
c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOworICAgIFtfcHJpdmF0ZS0+
dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFbnRlcmVkOmZha2VFdmVudF07Cit9CisKKy0gKHZvaWQp
X3NldFRvb2xUaXA6KE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgTlNTdHJpbmcgKnRvb2xUaXAg
PSBbc3RyaW5nIGxlbmd0aF0gPT0gMCA/IG5pbCA6IHN0cmluZzsKKyAgICBOU1N0cmluZyAqb2xk
VG9vbFRpcCA9IF9wcml2YXRlLT50b29sVGlwOworICAgIGlmICgodG9vbFRpcCA9PSBuaWwgfHwg
b2xkVG9vbFRpcCA9PSBuaWwpID8gdG9vbFRpcCA9PSBvbGRUb29sVGlwIDogW3Rvb2xUaXAgaXNF
cXVhbFRvU3RyaW5nOm9sZFRvb2xUaXBdKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKG9sZFRvb2xUaXApIHsKKyAgICAgICAgW3NlbGYgX3NlbmRUb29sVGlwTW91c2VFeGl0ZWRd
OworICAgICAgICBbb2xkVG9vbFRpcCByZWxlYXNlXTsKKyAgICB9CisgICAgX3ByaXZhdGUtPnRv
b2xUaXAgPSBbdG9vbFRpcCBjb3B5XTsKKyAgICBpZiAodG9vbFRpcCkgeworICAgICAgICAvLyBT
ZWUgcmFkYXIgMzUwMDIxNyBmb3Igd2h5IHdlIHJlbW92ZSBhbGwgdG9vbHRpcHMgcmF0aGVyIHRo
YW4ganVzdCB0aGUgc2luZ2xlIG9uZSB3ZSBjcmVhdGVkLgorICAgICAgICBbc2VsZiByZW1vdmVB
bGxUb29sVGlwc107CisgICAgICAgIE5TUmVjdCB3aWRlT3BlblJlY3QgPSBOU01ha2VSZWN0KC0x
MDAwMDAsIC0xMDAwMDAsIDIwMDAwMCwgMjAwMDAwKTsKKyAgICAgICAgX3ByaXZhdGUtPmxhc3RU
b29sVGlwVGFnID0gW3NlbGYgYWRkVG9vbFRpcFJlY3Q6d2lkZU9wZW5SZWN0IG93bmVyOnNlbGYg
dXNlckRhdGE6TlVMTF07CisgICAgICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZF07
CisgICAgfQorfQorCistIChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAqKXZpZXcgc3RyaW5nRm9y
VG9vbFRpcDooTlNUb29sVGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClwb2ludCB1c2VyRGF0YToo
dm9pZCAqKWRhdGEKK3sKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+dG9vbFRpcCBjb3B5XSBhdXRv
cmVsZWFzZV07Cit9CisKKy0gKHZvaWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDooTlNFdmVu
dCAqKWV2ZW50Cit7CisgICAgaWYgKF9wcml2YXRlLT5jbG9zZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbW2V2ZW50IHdpbmRvd10gY29udGVudFZpZXdd
OworICAgIE5TUG9pbnQgbG9jYXRpb25Gb3JIaXRUZXN0ID0gW1tjb250ZW50VmlldyBzdXBlcnZp
ZXddIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsK
KyAgICAKKyAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCA9IFlFUzsKKyAgICBOU1ZpZXcgKmhp
dFZpZXcgPSBbY29udGVudFZpZXcgaGl0VGVzdDpsb2NhdGlvbkZvckhpdFRlc3RdOworICAgIGZv
cmNlV2ViSFRNTFZpZXdIaXRUZXN0ID0gTk87CisgICAgCisgICAgV2ViSFRNTFZpZXcgKnZpZXcg
PSBuaWw7CisgICAgaWYgKFtoaXRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNz
XV0gJiYgIVtbKFdlYkhUTUxWaWV3ICopaGl0VmlldyBfd2ViVmlld10gaXNIb3ZlckZlZWRiYWNr
U3VzcGVuZGVkXSkKKyAgICAgICAgdmlldyA9IChXZWJIVE1MVmlldyAqKWhpdFZpZXc7ICAgIAor
CisgICAgaWYgKHZpZXcpCisgICAgICAgIFt2aWV3IHJldGFpbl07CisKKyAgICBpZiAobGFzdEhp
dFZpZXcgIT0gdmlldyAmJiBsYXN0SGl0VmlldyAmJiBbbGFzdEhpdFZpZXcgX2ZyYW1lXSkgewor
ICAgICAgICAvLyBJZiB3ZSBhcmUgbW92aW5nIG91dCBvZiBhIHZpZXcgKG9yIGZyYW1lKSwgbGV0
J3MgcHJldGVuZCB0aGUgbW91c2UgbW92ZWQKKyAgICAgICAgLy8gYWxsIHRoZSB3YXkgb3V0IG9m
IHRoYXQgdmlldy4gQnV0IHdlIGhhdmUgdG8gYWNjb3VudCBmb3Igc2Nyb2xsaW5nLCBiZWNhdXNl
CisgICAgICAgIC8vIGtodG1sIGRvZXNuJ3QgdW5kZXJzdGFuZCBvdXIgY2xpcHBpbmcuCisgICAg
ICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtbW1tsYXN0SGl0VmlldyBfZnJhbWVdIGZyYW1lVmll
d10gX3Njcm9sbFZpZXddIGRvY3VtZW50VmlzaWJsZVJlY3RdOworICAgICAgICBmbG9hdCB5U2Ny
b2xsID0gdmlzaWJsZVJlY3Qub3JpZ2luLnk7CisgICAgICAgIGZsb2F0IHhTY3JvbGwgPSB2aXNp
YmxlUmVjdC5vcmlnaW4ueDsKKworICAgICAgICBldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRX
aXRoVHlwZTpOU01vdXNlTW92ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpO
U01ha2VQb2ludCgtMSAtIHhTY3JvbGwsIC0xIC0geVNjcm9sbCApCisgICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFn
c10KKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2
YWxTaW5jZVJlZmVyZW5jZURhdGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVt
YmVyOltbdmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQorICAgICAgICAgICAgICAg
ICAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgICAg
ICBpZiAoRnJhbWUqIGxhc3RIaXRDb3JlRnJhbWUgPSBjb3JlKFtsYXN0SGl0VmlldyBfZnJhbWVd
KSkKKyAgICAgICAgICAgIGxhc3RIaXRDb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1v
dmVkKGV2ZW50KTsKKyAgICB9CisKKyAgICBsYXN0SGl0VmlldyA9IHZpZXc7CisKKyAgICBpZiAo
dmlldykgeworICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3ZpZXcgX2ZyYW1l
XSkpCisgICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2
ZW50KTsKKworICAgICAgICBbdmlldyByZWxlYXNlXTsKKyAgICB9Cit9CisKKy8vIGtlZXAgaW4g
c3luYyB3aXRoIFdlYlBhc3RlYm9hcmRIZWxwZXI6Omluc2VydGFibGVQYXN0ZWJvYXJkVHlwZXMK
KysgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcworeworICAgIHN0YXRpYyBO
U0FycmF5ICp0eXBlcyA9IG5pbDsKKyAgICBpZiAoIXR5cGVzKSB7CisgICAgICAgIHR5cGVzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIE5T
SFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNUSUZGUGJvYXJkVHlwZSwg
TlNQREZQYm9hcmRUeXBlLAorI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmlu
ZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICAgICAgICAgIE5TUElDVFBib2FyZFR5cGUsCisj
ZW5kaWYKKyAgICAgICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJkVHlwZSwgTlNS
VEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29sb3JQYm9hcmRUeXBlLCBrVVRU
eXBlUE5HLCBuaWxdOworICAgICAgICBDRlJldGFpbih0eXBlcyk7CisgICAgfQorICAgIHJldHVy
biB0eXBlczsKK30KKworKyAoTlNBcnJheSAqKV9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXMKK3sK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHB1dCBkYXRhIGZvciBOU0hUTUxQYm9hcmRUeXBlIG9u
IHRoZSBwYXN0ZWJvYXJkIGJ1dCBNaWNyb3NvZnQgRXhjZWwgZG9lc24ndCBsaWtlIG91ciBmb3Jt
YXQgb2YgSFRNTCAoMzY0MDQyMykuCisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVj
dHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlw
ZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBuaWxdOworfQorCistIChOU0ltYWdlICopX2RyYWdJbWFn
ZUZvclVSTDooTlNTdHJpbmcqKXVybFN0cmluZyB3aXRoTGFiZWw6KE5TU3RyaW5nKilsYWJlbAor
eworICAgIEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKKyAgICBCT09MIGNsaXBVUkxTdHJpbmcg
PSBOTywgY2xpcExhYmVsU3RyaW5nID0gTk87CisgICAgCisgICAgaWYgKCFsYWJlbCkgeworICAg
ICAgICBkcmF3VVJMU3RyaW5nID0gTk87CisgICAgICAgIGxhYmVsID0gdXJsU3RyaW5nOworICAg
IH0KKyAgICAKKyAgICBOU0ZvbnQgKmxhYmVsRm9udCA9IFtbTlNGb250TWFuYWdlciBzaGFyZWRG
b250TWFuYWdlcl0gY29udmVydEZvbnQ6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOkRSQUdfTElO
S19MQUJFTF9GT05UX1NJWkVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRyYWl0Ok5TQm9sZEZvbnRNYXNrXTsKKyAgICBO
U0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6IERSQUdfTElOS19VUkxf
Rk9OVF9TSVpFXTsKKyAgICBOU1NpemUgbGFiZWxTaXplOworICAgIGxhYmVsU2l6ZS53aWR0aCA9
IFtsYWJlbCBfd2ViX3dpZHRoV2l0aEZvbnQ6IGxhYmVsRm9udF07CisgICAgbGFiZWxTaXplLmhl
aWdodCA9IFtsYWJlbEZvbnQgYXNjZW5kZXJdIC0gW2xhYmVsRm9udCBkZXNjZW5kZXJdOworICAg
IGlmIChsYWJlbFNpemUud2lkdGggPiBNQVhfRFJBR19MQUJFTF9XSURUSCl7CisgICAgICAgIGxh
YmVsU2l6ZS53aWR0aCA9IE1BWF9EUkFHX0xBQkVMX1dJRFRIOworICAgICAgICBjbGlwTGFiZWxT
dHJpbmcgPSBZRVM7CisgICAgfQorICAgIAorICAgIE5TU2l6ZSBpbWFnZVNpemUsIHVybFN0cmlu
Z1NpemU7CisgICAgaW1hZ2VTaXplLndpZHRoID0gbGFiZWxTaXplLndpZHRoICsgRFJBR19MQUJF
TF9CT1JERVJfWCAqIDIuMGY7CisgICAgaW1hZ2VTaXplLmhlaWdodCA9IGxhYmVsU2l6ZS5oZWln
aHQgKyBEUkFHX0xBQkVMX0JPUkRFUl9ZICogMi4wZjsKKyAgICBpZiAoZHJhd1VSTFN0cmluZykg
eworICAgICAgICB1cmxTdHJpbmdTaXplLndpZHRoID0gW3VybFN0cmluZyBfd2ViX3dpZHRoV2l0
aEZvbnQ6IHVybEZvbnRdOworICAgICAgICB1cmxTdHJpbmdTaXplLmhlaWdodCA9IFt1cmxGb250
IGFzY2VuZGVyXSAtIFt1cmxGb250IGRlc2NlbmRlcl07CisgICAgICAgIGltYWdlU2l6ZS5oZWln
aHQgKz0gdXJsU3RyaW5nU2l6ZS5oZWlnaHQ7CisgICAgICAgIGlmICh1cmxTdHJpbmdTaXplLndp
ZHRoID4gTUFYX0RSQUdfTEFCRUxfV0lEVEgpIHsKKyAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0
aCA9IE1BWChNQVhfRFJBR19MQUJFTF9XSURUSCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBm
LCBNSU5fRFJBR19MQUJFTF9XSURUSF9CRUZPUkVfQ0xJUCk7CisgICAgICAgICAgICBjbGlwVVJM
U3RyaW5nID0gWUVTOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW1hZ2VTaXplLndp
ZHRoID0gTUFYKGxhYmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmLCB1
cmxTdHJpbmdTaXplLndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYpOworICAgICAg
ICB9CisgICAgfQorICAgIE5TSW1hZ2UgKmRyYWdJbWFnZSA9IFtbW05TSW1hZ2UgYWxsb2NdIGlu
aXRXaXRoU2l6ZTogaW1hZ2VTaXplXSBhdXRvcmVsZWFzZV07CisgICAgW2RyYWdJbWFnZSBsb2Nr
Rm9jdXNdOworICAgIAorICAgIFtbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VSZWQ6IDAuN2YgZ3Jl
ZW46IDAuN2YgYmx1ZTogMC43ZiBhbHBoYTogMC44Zl0gc2V0XTsKKyAgICAKKyAgICAvLyBEcmFn
IGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzLworICAgIE5TQmV6aWVyUGF0aCAqcGF0
aCA9IFtOU0JlemllclBhdGggYmV6aWVyUGF0aF07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0
aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAuMGYsIDAuMGYsIERSQUdfTEFCRUxfUkFESVVT
ICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07CisgICAgW3BhdGggYXBwZW5kQmV6
aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIGltYWdlU2l6ZS5oZWlnaHQgLSBE
UkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFs
SW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdfTEFCRUxfUkFESVVTICog
Mi4wZiwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKKyAgICBbcGF0
aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndp
ZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCAwLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAq
IDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZildOworICAgIAorICAgIFtwYXRoIGFwcGVu
ZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdChEUkFHX0xBQkVMX1JBRElVUywgMC4wZiwg
aW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBpbWFnZVNpemUuaGVp
Z2h0KV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KDAu
MGYsIERSQUdfTEFCRUxfUkFESVVTLCBEUkFHX0xBQkVMX1JBRElVUyArIDEwLjBmLCBpbWFnZVNp
emUuaGVpZ2h0IC0gMi4wZiAqIERSQUdfTEFCRUxfUkFESVVTKV07CisgICAgW3BhdGggYXBwZW5k
QmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdfTEFC
RUxfUkFESVVTIC0gMjAuMGYsIERSQUdfTEFCRUxfUkFESVVTLCBEUkFHX0xBQkVMX1JBRElVUyAr
IDIwLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gMi4wZiAqIERSQUdfTEFCRUxfUkFESVVTKV07Cisg
ICAgW3BhdGggZmlsbF07CisgICAgCisgICAgTlNDb2xvciAqdG9wQ29sb3IgPSBbTlNDb2xvciBj
b2xvcldpdGhEZXZpY2VXaGl0ZTowLjBmIGFscGhhOjAuNzVmXTsKKyAgICBOU0NvbG9yICpib3R0
b21Db2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjEuMGYgYWxwaGE6MC41Zl07
CisgICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKKyAgICAgICAgaWYgKGNsaXBVUkxTdHJpbmcpCisg
ICAgICAgICAgICB1cmxTdHJpbmcgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIGNlbnRlclRydW5jYXRl
U3RyaW5nOiB1cmxTdHJpbmcgdG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAoRFJBR19MQUJFTF9C
T1JERVJfWCAqIDIuMGYpIHdpdGhGb250OnVybEZvbnRdOworICAgICAgICAKKyAgICAgICAgW3Vy
bFN0cmluZyBfd2ViX2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQb2ludChEUkFHX0xBQkVMX0JP
UkRFUl9YLCBEUkFHX0xBQkVMX0JPUkRFUl9ZIC0gW3VybEZvbnQgZGVzY2VuZGVyXSkgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoVG9wQ29sb3I6dG9wQ29sb3IgYm90dG9tQ29s
b3I6Ym90dG9tQ29sb3IgZm9udDp1cmxGb250XTsKKyAgICB9CisgICAgCisgICAgaWYgKGNsaXBM
YWJlbFN0cmluZykKKyAgICAgICAgbGFiZWwgPSBbV2ViU3RyaW5nVHJ1bmNhdG9yIHJpZ2h0VHJ1
bmNhdGVTdHJpbmc6IGxhYmVsIHRvV2lkdGg6aW1hZ2VTaXplLndpZHRoIC0gKERSQUdfTEFCRUxf
Qk9SREVSX1ggKiAyLjBmKSB3aXRoRm9udDpsYWJlbEZvbnRdOworICAgIFtsYWJlbCBfd2ViX2Ry
YXdEb3VibGVkQXRQb2ludDpOU01ha2VQb2ludCAoRFJBR19MQUJFTF9CT1JERVJfWCwgaW1hZ2VT
aXplLmhlaWdodCAtIERSQUdfTEFCRUxfQk9SREVSX1lfT0ZGU0VUIC0gW2xhYmVsRm9udCBwb2lu
dFNpemVdKQorICAgICAgICAgICAgICAgICAgICAgIHdpdGhUb3BDb2xvcjp0b3BDb2xvciBib3R0
b21Db2xvcjpib3R0b21Db2xvciBmb250OmxhYmVsRm9udF07CisgICAgCisgICAgW2RyYWdJbWFn
ZSB1bmxvY2tGb2N1c107CisgICAgCisgICAgcmV0dXJuIGRyYWdJbWFnZTsKK30KKworLSAoTlNJ
bWFnZSAqKV9kcmFnSW1hZ2VGb3JMaW5rRWxlbWVudDooTlNEaWN0aW9uYXJ5ICopZWxlbWVudAor
eworICAgIE5TVVJMICpsaW5rVVJMID0gW2VsZW1lbnQgb2JqZWN0Rm9yS2V5OiBXZWJFbGVtZW50
TGlua1VSTEtleV07CisgICAgCisgICAgTlNTdHJpbmcgKmxhYmVsID0gW2VsZW1lbnQgb2JqZWN0
Rm9yS2V5OiBXZWJFbGVtZW50TGlua0xhYmVsS2V5XTsKKyAgICBOU1N0cmluZyAqdXJsU3RyaW5n
ID0gW2xpbmtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAgcmV0dXJuIFtzZWxmIF9k
cmFnSW1hZ2VGb3JVUkw6dXJsU3RyaW5nIHdpdGhMYWJlbDpsYWJlbF07Cit9CisKKy0gKHZvaWQp
cGFzdGVib2FyZENoYW5nZWRPd25lcjooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAoreworICAg
IFtzZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBdOworfQorCistICh2b2lkKXBh
c3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgcHJvdmlkZURhdGFGb3JUeXBlOihO
U1N0cmluZyAqKXR5cGUKK3sKKyAgICBpZiAoW3R5cGUgaXNFcXVhbDpOU1JURkRQYm9hcmRUeXBl
XSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hpdmVQYm9hcmRU
eXBlXSkgeworICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tXZWJBcmNoaXZlIGFsbG9j
XSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5
cGVdXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgX3dlYl93cml0ZVByb21pc2VkUlRGREZyb21BcmNo
aXZlOmFyY2hpdmUgY29udGFpbnNJbWFnZTpbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2Jq
ZWN0Ok5TVElGRlBib2FyZFR5cGVdXTsKKyAgICAgICAgW2FyY2hpdmUgcmVsZWFzZV07CisgICAg
fSBlbHNlIGlmIChbdHlwZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVdICYmIFtzZWxmIHByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlXSkgeworICAgICAgICBpZiAoSW1hZ2UqIGltYWdlID0gW3Nl
bGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdLT5pbWFnZSgpKQorICAgICAgICAgICAgW3Bh
c3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJRkZSZXByZXNlbnRhdGlvbigp
IGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07CisgICAgICAgIFtzZWxmIHNldFByb21pc2VkRHJh
Z1RJRkZEYXRhU291cmNlOjBdOworICAgIH0KK30KKworLSAodm9pZClfaGFuZGxlQXV0b3Njcm9s
bEZvck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50IAoreyAKKyAgICBbc2VsZiBhdXRvc2Ny
b2xsOmV2ZW50XTsgCisgICAgW3NlbGYgX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOmV2ZW50XTsgCit9
IAorCistIChXZWJQbHVnaW5Db250cm9sbGVyICopX3BsdWdpbkNvbnRyb2xsZXIKK3sKKyAgICBy
ZXR1cm4gX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXI7Cit9CisKKy0gKHZvaWQpX2xheW91dEZv
clByaW50aW5nCit7CisgICAgLy8gU2V0IHByaW50aW5nIG1vZGUgdGVtcG9yYXJpbHkgc28gd2Ug
Y2FuIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdmlldy4gVGhpcyB3aWxsIGFsbG93CisgICAgLy8g
QXBwS2l0J3MgcGFnaW5hdGlvbiBjb2RlIHRvIHVzZSB0aGUgY29ycmVjdCBoZWlnaHQgZm9yIHRo
ZSBwYWdlIGNvbnRlbnQuIExlYXZpbmcgcHJpbnRpbmcKKyAgICAvLyBtb2RlIG9uIGluZGVmaW5p
dGVseSB3b3VsZCBpbnRlcmZlcmUgd2l0aCBNYWlsJ3MgcHJpbnRpbmcgbWVjaGFuaXNtIChhdCBs
ZWFzdCksIHNvIHdlIGp1c3QKKyAgICAvLyB0dXJuIGl0IG9mZiBhZ2FpbiBhZnRlciBhZGp1c3Rp
bmcgdGhlIHNpemUuCisgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRB
ZGp1c3RWaWV3U2l6ZV07CisgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2
ZV07Cit9CisKKy0gKHZvaWQpX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihOU1N0cmluZyAqKXBhc3Rl
U3RyaW5nIHJlcGxhY2luZ1JhbmdlOihET01SYW5nZSAqKXJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0
cmluZzooTlNTdHJpbmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5nOihOU1N0cmluZyAqKilh
ZnRlclN0cmluZworeworICAgIGlmICghcGFzdGVTdHJpbmcgfHwgIXJhbmdlVG9SZXBsYWNlIHx8
ICFbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pIHsKKyAgICAgICAg
aWYgKGJlZm9yZVN0cmluZykKKyAgICAgICAgICAgICpiZWZvcmVTdHJpbmcgPSBuaWw7CisgICAg
ICAgIGlmIChhZnRlclN0cmluZykKKyAgICAgICAgICAgICphZnRlclN0cmluZyA9IG5pbDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBbW3NlbGYgX2ZyYW1lXSBfc21hcnRJbnNl
cnRGb3JTdHJpbmc6cGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6cmFuZ2VUb1JlcGxhY2UgYmVm
b3JlU3RyaW5nOmJlZm9yZVN0cmluZyBhZnRlclN0cmluZzphZnRlclN0cmluZ107Cit9CisKKy0g
KEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVF
bmFibGVkXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFz
dGVQYm9hcmRUeXBlXTsKK30KKworLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xsVGltZXI6IChOU0V2
ZW50ICopdHJpZ2dlckV2ZW50Cit7CisgICAgaWYgKF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIg
PT0gbmlsKSB7CisgICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBbW05TVGltZXIg
c2NoZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFsOkFVVE9TQ1JPTExfSU5URVJWQUwKKyAgICAg
ICAgICAgIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfYXV0b3Njcm9sbCkgdXNlcklu
Zm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOworICAgICAgICBfcHJpdmF0ZS0+YXV0b3Njcm9s
bFRyaWdnZXJFdmVudCA9IFt0cmlnZ2VyRXZlbnQgcmV0YWluXTsKKyAgICB9Cit9CisKKy8vIEZJ
WE1FOiBfc2VsZWN0aW9uUmVjdCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHNlbGVjdGlvblJl
Y3QsIHdoaWNoIGlzIGluIHByb3RvY29sIFdlYkRvY3VtZW50U2VsZWN0aW9uLgorLy8gV2UgY2Fu
J3QgcmVtb3ZlIHRoaXMgeWV0IGJlY2F1c2UgaXQncyBzdGlsbCBpbiB1c2UgYnkgTWFpbC4KKy0g
KE5TUmVjdClfc2VsZWN0aW9uUmVjdAoreworICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0
XTsKK30KKworLSAodm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcgoreworICAgIE5TVGltZXIgKnRp
bWVyID0gX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lcjsKKyAgICBfcHJpdmF0ZS0+YXV0b3Njcm9s
bFRpbWVyID0gbmlsOworICAgIFtfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCByZWxl
YXNlXTsKKyAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9IG5pbDsKKyAgICBb
dGltZXIgaW52YWxpZGF0ZV07CisgICAgW3RpbWVyIHJlbGVhc2VdOworfQorCistICh2b2lkKV9h
dXRvc2Nyb2xsCit7CisgICAgLy8gR3VhcmFudGVlIHRoYXQgdGhlIGF1dG9zY3JvbGwgdGltZXIg
aXMgaW52YWxpZGF0ZWQsIGV2ZW4gaWYgd2UgZG9uJ3QgcmVjZWl2ZQorICAgIC8vIGEgbW91c2Ug
dXAgZXZlbnQuCisgICAgQk9PTCBpc1N0aWxsRG93biA9IENHRXZlbnRTb3VyY2VCdXR0b25TdGF0
ZShrQ0dFdmVudFNvdXJjZVN0YXRlQ29tYmluZWRTZXNzaW9uU3RhdGUsIGtDR01vdXNlQnV0dG9u
TGVmdCk7ICAgCisgICAgaWYgKCFpc1N0aWxsRG93bil7CisgICAgICAgIFtzZWxmIF9zdG9wQXV0
b3Njcm9sbFRpbWVyXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5TRXZlbnQgKmZh
a2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xlZnRNb3VzZURyYWdnZWQK
KyAgICAgICAgbG9jYXRpb246W1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNF
dmVudCBtb3VzZUxvY2F0aW9uXV0KKyAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJl
bnRFdmVudF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUlu
dGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQorICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdp
bmRvd10gd2luZG93TnVtYmVyXQorICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50
XSBjb250ZXh0XQorICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTow
XTsKKyAgICBbc2VsZiBtb3VzZURyYWdnZWQ6ZmFrZUV2ZW50XTsKK30KKworLSAoQk9PTClfY2Fu
RWRpdAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpOworfQor
CistIChCT09MKV9jYW5FZGl0UmljaGx5Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRv
cigpLT5jYW5FZGl0UmljaGx5KCk7Cit9CisKKy0gKEJPT0wpX2NhbkFsdGVyQ3VycmVudFNlbGVj
dGlvbgoreworICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uT3JJbnNlcnRpb25Qb2ludF0g
JiYgW3NlbGYgX2lzRWRpdGFibGVdOworfQorCistIChCT09MKV9oYXNTZWxlY3Rpb24KK3sKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKTsKK30KKworLSAoQk9P
TClfaGFzU2VsZWN0aW9uT3JJbnNlcnRpb25Qb2ludAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS0+aXNDYXJldE9yUmFuZ2UoKTsKK30KKworLSAoQk9PTClfaGFzSW5zZXJ0
aW9uUG9pbnQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
KyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ2FyZXQo
KTsKK30KKworLSAoQk9PTClfaXNFZGl0YWJsZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKK30KKworLSAoQk9PTClfdHJhbnNwYXJl
bnRCYWNrZ3JvdW5kCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT50cmFuc3BhcmVudEJhY2tncm91
bmQ7Cit9CisKKy0gKHZvaWQpX3NldFRyYW5zcGFyZW50QmFja2dyb3VuZDooQk9PTClmCit7Cisg
ICAgX3ByaXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZCA9IGY7Cit9CisKKy0gKE5TSW1hZ2Ug
Kilfc2VsZWN0aW9uRHJhZ2dpbmdJbWFnZQoreworICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9u
XSkgeworICAgICAgICBOU0ltYWdlICpkcmFnSW1hZ2UgPSBjb3JlKFtzZWxmIF9mcmFtZV0pLT5z
ZWxlY3Rpb25JbWFnZSgpOworICAgICAgICBbZHJhZ0ltYWdlIF93ZWJfZGlzc29sdmVUb0ZyYWN0
aW9uOldlYkRyYWdJbWFnZUFscGhhXTsKKyAgICAgICAgcmV0dXJuIGRyYWdJbWFnZTsKKyAgICB9
CisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNSZWN0KV9zZWxlY3Rpb25EcmFnZ2luZ1JlY3QK
K3sKKyAgICAvLyBNYWlsIGN1cnJlbnRseSBjYWxscyB0aGlzIG1ldGhvZC4gV2UgY2FuIGVsaW1p
bmF0ZSBpdCB3aGVuIE1haWwgbm8gbG9uZ2VyIGNhbGxzIGl0LgorICAgIHJldHVybiBbc2VsZiBz
ZWxlY3Rpb25SZWN0XTsKK30KKworLSAoRE9NTm9kZSAqKV9pbnNlcnRPcmRlcmVkTGlzdAorewor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBj
b3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0T3JkZXJlZExpc3QoKS5n
ZXQoKSkgOiBuaWw7Cit9CisKKy0gKERPTU5vZGUgKilfaW5zZXJ0VW5vcmRlcmVkTGlzdAorewor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBj
b3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VW5vcmRlcmVkTGlzdCgp
LmdldCgpKSA6IG5pbDsKK30KKworLSAoQk9PTClfY2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBy
ZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkluY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKCk7Cit9CisKKy0gKEJPT0wpX2NhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAg
cmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5EZWNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbCgpOworfQorCistIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlz
dExldmVsCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbmNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbCgpLmdldCgpKSA6IG5pbDsKK30KKworLSAoRE9NTm9kZSAqKV9pbmNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZCgpLmdldCgpKSA6
IG5pbDsKK30KKworLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3Jk
ZXJlZAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxl
Y3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKS5nZXQoKSkgOiBuaWw7Cit9CisKKy0gKHZvaWQpX2Rl
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKGNvcmVGcmFtZSkKKyAgICAgICAgY29yZUZyYW1lLT5l
ZGl0b3IoKS0+ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKK30KKworLSAodm9pZClfc2V0
SGlnaGxpZ2h0ZXI6KGlkPFdlYkhUTUxIaWdobGlnaHRlcj4paGlnaGxpZ2h0ZXIgb2ZUeXBlOihO
U1N0cmluZyopdHlwZQoreworICAgIGlmICghX3ByaXZhdGUtPmhpZ2hsaWdodGVycykKKyAgICAg
ICAgX3ByaXZhdGUtPmhpZ2hsaWdodGVycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF07CisgICAgW19wcml2YXRlLT5oaWdobGlnaHRlcnMgc2V0T2JqZWN0OmhpZ2hsaWdodGVy
IGZvcktleTp0eXBlXTsKK30KKworLSAodm9pZClfcmVtb3ZlSGlnaGxpZ2h0ZXJPZlR5cGU6KE5T
U3RyaW5nKil0eXBlCit7CisgICAgW19wcml2YXRlLT5oaWdobGlnaHRlcnMgcmVtb3ZlT2JqZWN0
Rm9yS2V5OnR5cGVdOworfQorCistICh2b2lkKV91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUK
K3sKKyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOwor
CisgICAgW1tzZWxmIF93ZWJWaWV3XSBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlRm9yRnJh
bWU6W3NlbGYgX2ZyYW1lXV07Cit9CisKKy0gKHZvaWQpX3dyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgQVNTRVJUKFtzZWxmIF9oYXNT
ZWxlY3Rpb25dKTsKKyAgICBOU0FycmF5ICp0eXBlcyA9IFtzZWxmIHBhc3RlYm9hcmRUeXBlc0Zv
clNlbGVjdGlvbl07CisKKyAgICAvLyBEb24ndCB3cml0ZSBSVEZEIHRvIHRoZSBwYXN0ZWJvYXJk
IHdoZW4gdGhlIGNvcGllZCBhdHRyaWJ1dGVkIHN0cmluZyBoYXMgbm8gYXR0YWNobWVudHMuCisg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRB
dHRyaWJ1dGVkU3RyaW5nXTsKKyAgICBOU011dGFibGVBcnJheSAqbXV0YWJsZVR5cGVzID0gbmls
OworICAgIGlmICghW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pIHsKKyAg
ICAgICAgbXV0YWJsZVR5cGVzID0gW3R5cGVzIG11dGFibGVDb3B5XTsKKyAgICAgICAgW211dGFi
bGVUeXBlcyByZW1vdmVPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV07CisgICAgICAgIHR5cGVzID0g
bXV0YWJsZVR5cGVzOworICAgIH0KKworICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBl
cyBvd25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsKKyAgICBbc2VsZiBfd3JpdGVTZWxlY3Rpb25X
aXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hlZEF0
dHJpYnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107CisgICAgW211dGFibGVUeXBlcyByZWxl
YXNlXTsKK30KKworLSAodm9pZCljbG9zZQoreworICAgIC8vIENoZWNrIGZvciBhIG5pbCBfcHJp
dmF0ZSBoZXJlIGluIGNhc2Ugd2Ugd2VyZSBjcmVhdGVkIHdpdGggaW5pdFdpdGhDb2Rlci4gSW4g
dGhhdCBjYXNlLCB0aGUgV2ViVmlldyBpcyBqdXN0IHRocm93aW5nCisgICAgLy8gb3V0IHRoZSBh
cmNoaXZlZCBXZWJIVE1MVmlldyBhbmQgcmVjcmVhdGluZyBhIG5ldyBvbmUgaWYgbmVlZGVkLiBT
byBjbG9zZSBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaW4gdGhhdCBjYXNlLgorICAgIGlm
ICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
X3ByaXZhdGUtPmNsb3NlZCA9IFlFUzsKKworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92
ZXJUaW1lcl07CisgICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRp
bWVyXTsKKyAgICBbc2VsZiBfY2xlYXJMYXN0SGl0Vmlld0lmU2VsZl07CisgICAgW3NlbGYgX3Jl
bW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07CisgICAgW3NlbGYgX3JlbW92
ZVdpbmRvd09ic2VydmVyc107CisgICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVyc107
CisgICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIGRlc3Ryb3lBbGxQbHVnaW5zXTsKKyAg
ICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpuaWxdOworICAgIC8v
IHJlbW92ZSB0b29sdGlwcyBiZWZvcmUgY2xlYXJpbmcgX3ByaXZhdGUgc28gcmVtb3ZlVHJhY2tp
bmdSZWN0OiB3aWxsIHdvcmsgY29ycmVjdGx5CisgICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRpcHNd
OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChfcHJpdmF0ZS0+
bGF5ZXJIb3N0aW5nVmlldykKKyAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RvcHBlZEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKKyNlbmRpZgorCisgICAg
W19wcml2YXRlIGNsZWFyXTsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3
XSk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNldERy
YWdnaW5nSW1hZ2VVUkwoS1VSTCgpKTsKK30KKworLSAoQk9PTClfaGFzSFRNTERvY3VtZW50Cit7
CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFj
b3JlRnJhbWUpCisgICAgICAgIHJldHVybiBOTzsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBj
b3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgcmV0dXJuIGRvY3VtZW50ICYmIGRvY3VtZW50LT5p
c0hUTUxEb2N1bWVudCgpOworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6KE5TU3Ry
aW5nICopcGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVz
b3VyY2VzCit7CisgICAgaWYgKHBib2FyZFR5cGUgPT0gV2ViQXJjaGl2ZVBib2FyZFR5cGUpIHsK
KyAgICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdp
dGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV07Cisg
ICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCisgICAgICAgICAgICAqc3VicmVzb3VyY2VzID0gW2Fy
Y2hpdmUgc3VicmVzb3VyY2VzXTsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21l
bnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEFyY2hpdmU6YXJj
aGl2ZV07CisgICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOworICAgICAgICByZXR1cm4gZnJhZ21l
bnQ7CisgICAgfQorICAgIGlmIChwYm9hcmRUeXBlID09IE5TRmlsZW5hbWVzUGJvYXJkVHlwZSkK
KyAgICAgICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50V2l0aFBhdGhzOltwYXN0ZWJv
YXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXV07CisgICAgICAg
IAorICAgIGlmIChwYm9hcmRUeXBlID09IE5TSFRNTFBib2FyZFR5cGUpIHsKKyAgICAgICAgTlNT
dHJpbmcgKkhUTUxTdHJpbmcgPSBbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TSFRNTFBib2Fy
ZFR5cGVdOworICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtlIE1pY3Jvc29mdCdzIEhU
TUwgcGFzdGVib2FyZCBkYXRhIHdvcmsuIFNlZSAzNzc4Nzg1LgorICAgICAgICBpZiAoW0hUTUxT
dHJpbmcgaGFzUHJlZml4OkAiVmVyc2lvbjoiXSkgeworICAgICAgICAgICAgTlNSYW5nZSByYW5n
ZSA9IFtIVE1MU3RyaW5nIHJhbmdlT2ZTdHJpbmc6QCI8aHRtbCIgb3B0aW9uczpOU0Nhc2VJbnNl
bnNpdGl2ZVNlYXJjaF07CisgICAgICAgICAgICBpZiAocmFuZ2UubG9jYXRpb24gIT0gTlNOb3RG
b3VuZCkKKyAgICAgICAgICAgICAgICBIVE1MU3RyaW5nID0gW0hUTUxTdHJpbmcgc3Vic3RyaW5n
RnJvbUluZGV4OnJhbmdlLmxvY2F0aW9uXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW0hUTUxT
dHJpbmcgbGVuZ3RoXSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBT
dHJpbmc6SFRNTFN0cmluZyBiYXNlVVJMU3RyaW5nOm5pbF07CisgICAgfQorCisgICAgLy8gVGhl
IF9oYXNIVE1MRG9jdW1lbnQgY2xhdXNlIGhlcmUgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBp
biBOU0F0dHJpYnV0ZWRTdHJpbmc6IFJhZGFyIDUwNTIzNjkuCisgICAgLy8gSWYgd2UgY2FsbCBf
ZG9jdW1lbnRGcm9tUmFuZ2Ugb24gYW4gWE1MIGRvY3VtZW50IHdlJ2xsIGdldCAic2V0SW5uZXJI
VE1MOiBtZXRob2Qgbm90IGZvdW5kIi4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBi
dWcgNTA1MjM2OSBpcyBmaXhlZC4KKyAgICBpZiAoW3NlbGYgX2hhc0hUTUxEb2N1bWVudF0gJiYg
cGJvYXJkVHlwZSA9PSBOU1JURlBib2FyZFR5cGUgfHwgcGJvYXJkVHlwZSA9PSBOU1JURkRQYm9h
cmRUeXBlKSB7CisgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gbmlsOworICAg
ICAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1JURkRQYm9hcmRUeXBlKQorICAgICAgICAgICAgc3Ry
aW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07
CisgICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQorICAgICAgICAgICAgc3RyaW5nID0gW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBl
Ok5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgICAgICBpZiAo
c3RyaW5nID09IG5pbCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgICAgICAKKyAg
ICAgICAgTlNEaWN0aW9uYXJ5ICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBbW05TRGljdGlvbmFyeSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgICAgIFtbc2VsZiBjbGFzc10g
X2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbl0sIE5TRXhjbHVk
ZWRFbGVtZW50c0RvY3VtZW50QXR0cmlidXRlLAorICAgICAgICAgICAgc2VsZiwgQCJXZWJSZXNv
dXJjZUhhbmRsZXIiLCBuaWxdOworICAgICAgICBOU0FycmF5ICpzOworICAgICAgICAKKyAgICAg
ICAgQk9PTCB3YXNEZWZlcnJpbmdDYWxsYmFja3MgPSBbW3NlbGYgX3dlYlZpZXddIGRlZmVyc0Nh
bGxiYWNrc107CisgICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQorICAgICAgICAg
ICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6WUVTXTsKKyAgICAgICAgICAg
IAorICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzdHJpbmcgX2RvY3Vt
ZW50RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6
W1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRBdHRyaWJ1dGVzOmRvY3VtZW50QXR0cmlidXRl
cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VicmVzb3VyY2VzOiZzXTsKKyAgICAgICAgaWYgKHN1YnJlc291cmNlcykKKyAgICAgICAgICAg
ICpzdWJyZXNvdXJjZXMgPSBzOworICAgICAgICAKKyAgICAgICAgTlNFbnVtZXJhdG9yICplID0g
W3Mgb2JqZWN0RW51bWVyYXRvcl07CisgICAgICAgIFdlYlJlc291cmNlICpyOworICAgICAgICB3
aGlsZSAoKHIgPSBbZSBuZXh0T2JqZWN0XSkpCisgICAgICAgICAgICBbW3NlbGYgX2RhdGFTb3Vy
Y2VdIGFkZFN1YnJlc291cmNlOnJdOworICAgICAgICAKKyAgICAgICAgaWYgKCF3YXNEZWZlcnJp
bmdDYWxsYmFja3MpCisgICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0NhbGxi
YWNrczpOT107CisgICAgICAgIAorICAgICAgICBbZG9jdW1lbnRBdHRyaWJ1dGVzIHJlbGVhc2Vd
OworICAgICAgICBbc3RyaW5nIHJlbGVhc2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Cisg
ICAgfQorICAgIGlmIChwYm9hcmRUeXBlID09IE5TVElGRlBib2FyZFR5cGUpIHsKKyAgICAgICAg
V2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRh
OltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlx
dWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImltYWdlL3Rp
ZmYiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHRFbmNvZGluZ05hbWU6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOworICAgICAgICBET01Eb2N1bWVudEZy
YWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRX
aXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07CisgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsK
KyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKyAgICBpZiAocGJvYXJkVHlwZSA9PSBO
U1BERlBib2FyZFR5cGUpIHsKKyAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJS
ZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUERG
UGJvYXJkVHlwZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJhcHBsaWNh
dGlvbi5wZGYiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
YW1lTmFtZTpuaWxdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtb
c2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNv
dXJjZV07CisgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OworICAgIH0KKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQSUNUUGJvYXJkVHlw
ZSkgeworICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9j
XSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNQSUNUUGJvYXJkVHlwZV0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5waWN0IikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVU
eXBlOkAiaW1hZ2UvcGljdCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgICAg
IERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9j
dW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKKyAgICAgICAgW3Jlc291
cmNlIHJlbGVhc2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorI2VuZGlmCisg
ICAgLy8gT25seSAxMC41IGFuZCBoaWdoZXIgc3VwcG9ydCBzZXR0aW5nIGFuZCByZXRyaWV2aW5n
IHBhc3RlYm9hcmQgdHlwZXMgd2l0aCBVVElzLCBidXQgd2UgZG9uJ3QgYmVsaWV2ZQorICAgIC8v
IHRoYXQgYW55IGFwcGxpY2F0aW9ucyBvbiBUaWdlciBwdXQgdHlwZXMgZm9yIHdoaWNoIHdlIG9u
bHkgaGF2ZSBhIFVUSSwgbGlrZSBQTkcsIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbcGJv
YXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBlUE5HXSkgeworICAgICAg
ICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERh
dGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6KE5TU3RyaW5nKilrVVRUeXBlUE5HXQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBV
Ukw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImlt
YWdlL3BuZyIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgICAgIERPTURvY3Vt
ZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFn
bWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKKyAgICAgICAgW3Jlc291cmNlIHJlbGVh
c2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlmIChwYm9hcmRUeXBl
ID09IE5TVVJMUGJvYXJkVHlwZSkgeworICAgICAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworICAgICAgICBET01Eb2N1bWVudCogZG9jdW1lbnQg
PSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07CisgICAgICAgIEFTU0VSVChkb2N1bWVudCk7
CisgICAgICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICBET01IVE1MQW5jaG9yRWxlbWVudCAqYW5jaG9yID0gKERPTUhUTUxBbmNob3JFbGVtZW50ICop
W2RvY3VtZW50IGNyZWF0ZUVsZW1lbnQ6QCJhIl07CisgICAgICAgIE5TU3RyaW5nICpVUkxTdHJp
bmcgPSBbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddOyAvLyBPcmlnaW5hbCBkYXRhIGlz
IEFTQ0lJLW9ubHksIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJlY29tcG9zZS4KKyAgICAgICAg
aWYgKFtVUkxTdHJpbmcgbGVuZ3RoXSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICAgICAgTlNTdHJpbmcgKlVSTFRpdGxlU3RyaW5nID0gW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5
cGU6V2ViVVJMTmFtZVBib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1h
cHBpbmddOworICAgICAgICBET01UZXh0ICp0ZXh0ID0gW2RvY3VtZW50IGNyZWF0ZVRleHROb2Rl
OlVSTFRpdGxlU3RyaW5nXTsKKyAgICAgICAgW2FuY2hvciBzZXRIcmVmOlVSTFN0cmluZ107Cisg
ICAgICAgIFthbmNob3IgYXBwZW5kQ2hpbGQ6dGV4dF07CisgICAgICAgIERPTURvY3VtZW50RnJh
Z21lbnQgKmZyYWdtZW50ID0gW2RvY3VtZW50IGNyZWF0ZURvY3VtZW50RnJhZ21lbnRdOworICAg
ICAgICBbZnJhZ21lbnQgYXBwZW5kQ2hpbGQ6YW5jaG9yXTsKKyAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OworICAgIH0KKyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0cmluZ1Bib2FyZFR5cGUpCisg
ICAgICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb3JlKGNvbnRleHQpLCBb
W3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2Vk
U3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKS5nZXQoKSk7CisgICAgcmV0dXJuIG5pbDsKK30K
KworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKKy0gKHZvaWQpX3BhdXNlTnVsbEV2
ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAKK3sgCisgICAgTlNBcnJheSAqc3Vidmlld3MgPSBb
c2VsZiBzdWJ2aWV3c107IAorICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3Q291bnQgPSBbc3Vidmll
d3MgY291bnRdOyAKKyAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4OyAKKyAgICAKKyAgICBm
b3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZpZXdDb3VudDsgc3Vidmll
d0luZGV4KyspIHsgCisgICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtzdWJ2aWV3cyBvYmplY3RB
dEluZGV4OnN1YnZpZXdJbmRleF07IAorICAgICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZDbGFz
czpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKKyAgICAgICAgICAgIFsoV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgc3RvcFRpbWVyc107CisgICAgfSAKK30g
CisjZW5kaWYgCisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgCistICh2b2lkKV9y
ZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAoreyAKKyAgICBOU0FycmF5ICpz
dWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsgCisgICAgdW5zaWduZWQgaW50IHN1YnZpZXdDb3Vu
dCA9IFtzdWJ2aWV3cyBjb3VudF07IAorICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3SW5kZXg7IAor
ICAgIAorICAgIGZvciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmlld0luZGV4IDwgc3Vidmlld0Nv
dW50OyBzdWJ2aWV3SW5kZXgrKykgeyAKKyAgICAgICAgTlNWaWV3ICpzdWJ2aWV3ID0gW3N1YnZp
ZXdzIG9iamVjdEF0SW5kZXg6c3Vidmlld0luZGV4XTsgCisgICAgICAgIGlmIChbc3VidmlldyBp
c0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pIAorICAgICAg
ICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3VidmlldyByZXN0YXJ0VGltZXJz
XTsgCisgICAgfSAKK30gCisjZW5kaWYgCisKKy0gKEJPT0wpX2lzVXNpbmdBY2NlbGVyYXRlZENv
bXBvc2l0aW5nCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHJldHVy
biBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyAhPSBuaWw7CisjZWxzZQorICAgIHJldHVybiBO
TzsKKyNlbmRpZgorfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1ZpZXcgKFdlYkhUTUxW
aWV3RmlsZUludGVybmFsKQorCistICh2b2lkKV93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3
c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICopYXJyYXkKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9
IFtfc3Vidmlld3MgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7CisgICAgICAgIE5TVmlldyAqY2hpbGQgPSBbX3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6
aV07CisgICAgICAgIGlmIChbY2hpbGQgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3Nd
XSkKKyAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6Y2hpbGRdOworICAgICAgICBbY2hpbGQg
X3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTphcnJheV07CisgICAgfQorfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmll
d0ZpbGVJbnRlcm5hbCkKKworLSAodm9pZClfd2ViX3NldE9iamVjdElmTm90TmlsOihpZClvYmpl
Y3QgZm9yS2V5OihpZClrZXkKK3sKKyAgICBpZiAob2JqZWN0ID09IG5pbCkgeworICAgICAgICBb
c2VsZiByZW1vdmVPYmplY3RGb3JLZXk6a2V5XTsKKyAgICB9IGVsc2UgeworICAgICAgICBbc2Vs
ZiBzZXRPYmplY3Q6b2JqZWN0IGZvcktleTprZXldOworICAgIH0KK30KKworQGVuZAorCitAaW50
ZXJmYWNlIE5TU3RyaW5nIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKy0gKEJPT0wpbWF0Y2hl
c0V4dGVuc2lvbkVxdWl2YWxlbnQ6KE5TU3RyaW5nICopZXh0ZW5zaW9uOworQGVuZAorCitAaW1w
bGVtZW50YXRpb24gTlNTdHJpbmcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorCistIChCT09M
KW1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50OihOU1N0cmluZyAqKWV4dGVuc2lvbgoreworICAg
IGlmIChbc2VsZiBoYXNTdWZmaXg6ZXh0ZW5zaW9uXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICBlbHNlIGlmIChbZXh0ZW5zaW9uIGlzRXF1YWxUb1N0cmluZzpAImpwZWciXSAmJiBbc2VsZiBo
YXNTdWZmaXg6QCJqcGciXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICByZXR1cm4gTk87Cit9
CisKK0BlbmQKKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKy8vIFRoZSBmb2xsb3dpbmcg
aXMgYSB3b3JrYXJvdW5kIGZvcgorLy8gPHJkYXI6Ly9wcm9ibGVtLzM0Mjk2MzE+IHdpbmRvdyBz
dG9wcyBnZXR0aW5nIG1vdXNlIG1vdmVkIGV2ZW50cyBhZnRlciBmaXJzdCB0b29sdGlwIGFwcGVh
cnMKKy8vIFRoZSB0cmljayBpcyB0byBkZWZpbmUgYSBjYXRlZ29yeSBvbiBOU1Rvb2xUaXBQYW5l
bCB0aGF0IGltcGxlbWVudHMgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6LgorLy8gU2luY2Ug
dGhlIGNhdGVnb3J5IHdpbGwgYmUgc2VhcmNoZWQgYmVmb3JlIHRoZSByZWFsIGNsYXNzLCB3ZSds
bCBwcmV2ZW50IHRoZSBmbGFnIGZyb20gYmVpbmcKKy8vIHNldCBvbiB0aGUgdG9vbCB0aXAgcGFu
ZWwuCisKK0BpbnRlcmZhY2UgTlNUb29sVGlwUGFuZWwgOiBOU1BhbmVsCitAZW5kCisKK0BpbnRl
cmZhY2UgTlNUb29sVGlwUGFuZWwgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorQGVuZAorCitA
aW1wbGVtZW50YXRpb24gTlNUb29sVGlwUGFuZWwgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQor
CistICh2b2lkKXNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOihCT09MKWZsYWcKK3sKKyAgICAv
LyBEbyBub3RoaW5nLCBwcmV2ZW50aW5nIHRoZSB0b29sIHRpcCBwYW5lbCBmcm9tIHRyeWluZyB0
byBhY2NlcHQgbW91c2UtbW92ZWQgZXZlbnRzLgorfQorCitAZW5kCisKKyNlbmRpZgorCitAaW50
ZXJmYWNlIE5TQXJyYXkgKFdlYkhUTUxWaWV3KQorLSAodm9pZClfd2ViX21ha2VQbHVnaW5WaWV3
c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdDsKK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3CisKKysgKHZvaWQpaW5pdGlhbGl6ZQor
eworICAgIFtOU0FwcCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRUeXBlczpbW3NlbGYgY2xhc3Nd
IF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlczpbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzXV07
CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCisgICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRocmVhZChzZWxmKTsKKyNlbmRpZgor
fQorCistIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUKK3sKKyAgICBzZWxmID0gW3N1
cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdOworICAgIGlmICghc2VsZikKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAKKyAgICBbc2VsZiBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZU5v
bmVdOworICAgIAorICAgIC8vIE1ha2UgYWxsIGRyYXdpbmcgZ28gdGhyb3VnaCB1cyBpbnN0ZWFk
IG9mIHN1YnZpZXdzLgorICAgIFtzZWxmIF9zZXREcmF3c093bkRlc2NlbmRhbnRzOllFU107Cisg
ICAgCisgICAgX3ByaXZhdGUgPSBbW1dlYkhUTUxWaWV3UHJpdmF0ZSBhbGxvY10gaW5pdF07CisK
KyAgICBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciA9IFtbV2ViUGx1Z2luQ29udHJvbGxlciBh
bGxvY10gaW5pdFdpdGhEb2N1bWVudFZpZXc6c2VsZl07CisgICAgCisgICAgcmV0dXJuIHNlbGY7
Cit9CisKKy0gKHZvaWQpZGVhbGxvYworeworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVh
bGxvY2F0ZU9uTWFpblRocmVhZChbV2ViSFRNTFZpZXcgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gV2UgY2FuJ3QgYXNzZXJ0IHRoYXQgY2xvc2UgaGFzIGFscmVhZHkg
YmVlbiBjYWxsZWQgYmVjYXVzZQorICAgIC8vIHRoaXMgdmlldyBjYW4gYmUgcmVtb3ZlZCBmcm9t
IGl0J3Mgc3VwZXJ2aWV3LCBldmVuIHRob3VnaAorICAgIC8vIGl0IGNvdWxkIGJlIG5lZWRlZCBs
YXRlciwgc28gY2xvc2UgaWYgbmVlZGVkLgorICAgIFtzZWxmIGNsb3NlXTsKKyAgICBbX3ByaXZh
dGUgcmVsZWFzZV07CisgICAgX3ByaXZhdGUgPSBuaWw7CisgICAgW3N1cGVyIGRlYWxsb2NdOwor
fQorCistICh2b2lkKWZpbmFsaXplCit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CisgICAg
Ly8gV2UgY2FuJ3QgYXNzZXJ0IHRoYXQgY2xvc2UgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgYmVj
YXVzZQorICAgIC8vIHRoaXMgdmlldyBjYW4gYmUgcmVtb3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2aWV3
LCBldmVuIHRob3VnaAorICAgIC8vIGl0IGNvdWxkIGJlIG5lZWRlZCBsYXRlciwgc28gY2xvc2Ug
aWYgbmVlZGVkLgorICAgIFtzZWxmIGNsb3NlXTsKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQor
CisvLyBSZXR1cm5zIFlFUyBpZiB0aGUgZGVsZWdhdGUgcmV0dXJucyBZRVMgKHNvIHdlIHNob3Vs
ZCBkbyBubyBtb3JlIHdvcmspLgorLSAoQk9PTCljYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVj
dG9ySWZOZWVkZWQ6KFNFTClzZWxlY3RvcgoreworICAgIEJPT0wgY2FsbGVyQWxyZWFkeUNhbGxl
ZERlbGVnYXRlID0gX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9PSBz
ZWxlY3RvcjsKKyAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0g
MDsKKyAgICBpZiAoY2FsbGVyQWxyZWFkeUNhbGxlZERlbGVnYXRlKQorICAgICAgICByZXR1cm4g
Tk87CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICByZXR1cm4g
W1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkb0Nv
bW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKK30KKworc3RhdGljIFN0cmluZyBjb21tYW5kTmFt
ZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKK3sKKyAgICAvLyBDaGFuZ2UgYSBmZXcgY29tbWFu
ZCBuYW1lcyBpbnRvIG9uZXMgc3VwcG9ydGVkIGJ5IFdlYkNvcmU6OkVkaXRvci4KKyAgICAvLyBJ
ZiB0aGlzIGxpc3QgZ2V0cyB0b28gbG9uZyB3ZSBtaWdodCBkZWNpZGUgd2UgbmVlZCB0byB1c2Ug
YSBoYXNoIHRhYmxlLgorICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IoaW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yOikgfHwgc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydE5ld2xpbmVJZ25v
cmluZ0ZpZWxkRWRpdG9yOikpCisgICAgICAgIHJldHVybiAiSW5zZXJ0TmV3bGluZSI7CisgICAg
aWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9yOikp
CisgICAgICAgIHJldHVybiAiSW5zZXJ0VGFiIjsKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVj
dG9yKHBhZ2VEb3duOikpCisgICAgICAgIHJldHVybiAiTW92ZVBhZ2VEb3duIjsKKyAgICBpZiAo
c2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uOikpCisgICAg
ICAgIHJldHVybiAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIjsKKyAgICBpZiAoc2Vs
ZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VVcDopKQorICAgICAgICByZXR1cm4gIk1vdmVQYWdlVXAi
OworICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9u
OikpCisgICAgICAgIHJldHVybiAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbiI7CisKKyAg
ICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgorICAgIGNvbnN0IGNoYXIqIHNlbGVjdG9y
TmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKKyAgICBzaXplX3Qgc2VsZWN0b3JOYW1lTGVu
Z3RoID0gc3RybGVuKHNlbGVjdG9yTmFtZSk7CisgICAgaWYgKHNlbGVjdG9yTmFtZUxlbmd0aCA8
IDIgfHwgc2VsZWN0b3JOYW1lW3NlbGVjdG9yTmFtZUxlbmd0aCAtIDFdICE9ICc6JykKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBTdHJpbmcoc2VsZWN0b3JOYW1lLCBzZWxl
Y3Rvck5hbWVMZW5ndGggLSAxKTsKK30KKworLSAoRWRpdG9yOjpDb21tYW5kKWNvcmVDb21tYW5k
QnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBFZGl0
b3I6OkNvbW1hbmQoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChj
b21tYW5kTmFtZUZvclNlbGVjdG9yKHNlbGVjdG9yKSk7Cit9CisKKy0gKEVkaXRvcjo6Q29tbWFu
ZCljb3JlQ29tbWFuZEJ5TmFtZTooY29uc3QgY2hhciopbmFtZQoreworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAg
ICByZXR1cm4gRWRpdG9yOjpDb21tYW5kKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQobmFtZSk7Cit9CisKKy0gKHZvaWQpZXhlY3V0ZUNvcmVDb21tYW5kQnlTZWxl
Y3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgaWYgKFtzZWxmIGNhbGxEZWxlZ2F0ZURvQ29tbWFu
ZEJ5U2VsZWN0b3JJZk5lZWRlZDpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybjsKKyAgICBbc2Vs
ZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdLmV4ZWN1dGUoKTsKK30KKworLSAodm9p
ZClleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6KGNvbnN0IGNoYXIqKW5hbWUKK3sKKyAgICBbc2Vs
ZiBjb3JlQ29tbWFuZEJ5TmFtZTpuYW1lXS5leGVjdXRlKCk7Cit9CisKKy8vIFRoZXNlIGNvbW1h
bmRzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIEVkaXRvciBvYmplY3QgaW4gV2ViQ29yZS4KKy8vIElk
ZWFsbHkgd2UnZCBkbyB0aGlzIGZvciBhbGwgZWRpdGluZyBjb21tYW5kczsgbW9yZSBvZiB0aGUg
Y29kZQorLy8gc2hvdWxkIGJlIG1vdmVkIGZyb20gaGVyZSB0byB0aGVyZSwgYW5kIG1vcmUgY29t
bWFuZHMgc2hvdWxkIGJlCisvLyBhZGRlZCB0byB0aGlzIGxpc3QuCisKKy8vIEZJWE1FOiBNYXli
ZSB3ZSBzaG91bGQgc2V0IHRoaW5ncyB1cCBzbyB0aGF0IGFsbCB0aGVzZSBzaGFyZSBhIHNpbmds
ZSBtZXRob2QgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24uCisvLyBUaGUgZnVuY3Rpb25zIGFyZSBp
ZGVudGljYWwuCisKKyNkZWZpbmUgV0VCQ09SRV9DT01NQU5EKGNvbW1hbmQpIC0gKHZvaWQpY29t
bWFuZDooaWQpc2VuZGVyIHsgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlTZWxlY3RvcjpfY21k
XTsgfQorCitXRUJDT1JFX0NPTU1BTkQoYWxpZ25DZW50ZXIpCitXRUJDT1JFX0NPTU1BTkQoYWxp
Z25KdXN0aWZpZWQpCitXRUJDT1JFX0NPTU1BTkQoYWxpZ25MZWZ0KQorV0VCQ09SRV9DT01NQU5E
KGFsaWduUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQoY29weSkKK1dFQkNPUkVfQ09NTUFORChjdXQp
CitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJk
KQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJkQnlEZWNvbXBvc2luZ1ByZXZpb3VzQ2hh
cmFjdGVyKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUZvcndhcmQpCitXRUJDT1JFX0NPTU1BTkQo
ZGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9CZWdpbm5p
bmdPZlBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb0VuZE9mTGluZSkKK1dFQkNP
UkVfQ09NTUFORChkZWxldGVUb0VuZE9mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0
ZVRvTWFyaykKK1dFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkQmFja3dhcmQpCitXRUJDT1JFX0NP
TU1BTkQoZGVsZXRlV29yZEZvcndhcmQpCitXRUJDT1JFX0NPTU1BTkQoaWdub3JlU3BlbGxpbmcp
CitXRUJDT1JFX0NPTU1BTkQoaW5kZW50KQorV0VCQ09SRV9DT01NQU5EKGluc2VydEJhY2t0YWIp
CitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TGluZUJyZWFrKQorV0VCQ09SRV9DT01NQU5EKGluc2Vy
dE5ld2xpbmUpCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0
b3IpCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKQorV0VCQ09SRV9D
T01NQU5EKGluc2VydFRhYikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRUYWJJZ25vcmluZ0ZpZWxk
RWRpdG9yKQorV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0KQorV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpCitX
RUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQpCitXRUJD
T1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVCYWNrd2FyZEFu
ZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlRG93bikKK1dFQkNPUkVfQ09N
TUFORChtb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlRm9y
d2FyZCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dF
QkNPUkVfQ09NTUFORChtb3ZlTGVmdCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlTGVmdEFuZE1vZGlm
eVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlUGFyYWdyYXBoQmFja3dhcmRBbmRNb2Rp
ZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFncmFwaEZvcndhcmRBbmRNb2Rp
ZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0KQorV0VCQ09SRV9DT01NQU5E
KG1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdp
bm5pbmdPZkRvY3VtZW50KQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mRG9jdW1l
bnRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZM
aW5lKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGluZUFuZE1vZGlmeVNlbGVj
dGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCkKK1dFQkNP
UkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbikK
K1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNlKQorV0VCQ09SRV9DT01N
QU5EKG1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JF
X0NPTU1BTkQobW92ZVRvRW5kT2ZEb2N1bWVudCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRP
ZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9m
TGluZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24p
CitXRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGgpCitXRUJDT1JFX0NPTU1BTkQo
bW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQo
bW92ZVRvRW5kT2ZTZW50ZW5jZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlNlbnRlbmNl
QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0xlZnRFbmRPZkxpbmUp
CitXRUJDT1JFX0NPTU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikK
K1dFQkNPUkVfQ09NTUFORChtb3ZlVG9SaWdodEVuZE9mTGluZSkKK1dFQkNPUkVfQ09NTUFORCht
b3ZlVG9SaWdodEVuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORCht
b3ZlVXApCitXRUJDT1JFX0NPTU1BTkQobW92ZVVwQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09S
RV9DT01NQU5EKG1vdmVXb3JkQmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRCYWNr
d2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEZvcndhcmQp
CitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VC
Q09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZExlZnRB
bmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRSaWdodCkKK1dFQkNP
UkVfQ09NTUFORChtb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01N
QU5EKG91dGRlbnQpCitXRUJDT1JFX0NPTU1BTkQocGFnZURvd24pCitXRUJDT1JFX0NPTU1BTkQo
cGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQocGFnZVVwKQorV0VC
Q09SRV9DT01NQU5EKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChz
ZWxlY3RBbGwpCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0TGluZSkKK1dFQkNPUkVfQ09NTUFORChz
ZWxlY3RQYXJhZ3JhcGgpCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0U2VudGVuY2UpCitXRUJDT1JF
X0NPTU1BTkQoc2VsZWN0VG9NYXJrKQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdFdvcmQpCitXRUJD
T1JFX0NPTU1BTkQoc2V0TWFyaykKK1dFQkNPUkVfQ09NTUFORChzdWJzY3JpcHQpCitXRUJDT1JF
X0NPTU1BTkQoc3VwZXJzY3JpcHQpCitXRUJDT1JFX0NPTU1BTkQoc3dhcFdpdGhNYXJrKQorV0VC
Q09SRV9DT01NQU5EKHRyYW5zcG9zZSkKK1dFQkNPUkVfQ09NTUFORCh1bmRlcmxpbmUpCitXRUJD
T1JFX0NPTU1BTkQodW5zY3JpcHQpCitXRUJDT1JFX0NPTU1BTkQoeWFuaykKK1dFQkNPUkVfQ09N
TUFORCh5YW5rQW5kU2VsZWN0KQorCisjdW5kZWYgV0VCQ09SRV9DT01NQU5ECisKKyNkZWZpbmUg
Q09NTUFORF9QUk9MT0dVRSBpZiAoW3NlbGYgY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3Rv
cklmTmVlZGVkOl9jbWRdKSByZXR1cm47CisKKy0gKElCQWN0aW9uKXRha2VGaW5kU3RyaW5nRnJv
bVNlbGVjdGlvbjooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYg
KCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkgeworICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFtOU1Bhc3RlYm9hcmQgX3dlYl9zZXRGaW5kUGFzdGVib2FyZFN0
cmluZzpbc2VsZiBzZWxlY3RlZFN0cmluZ10gd2l0aE93bmVyOnNlbGZdOworfQorCistIChCT09M
KXdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHR5
cGVzOihOU0FycmF5ICopdHlwZXMKK3sKKyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlw
ZXMgb3duZXI6W3NlbGYgX3RvcEhUTUxWaWV3XV07CisgICAgW3NlbGYgd3JpdGVTZWxlY3Rpb25X
aXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICBy
ZXR1cm4gWUVTOworfQorCistIChCT09MKXJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDooTlNQ
YXN0ZWJvYXJkICopcGFzdGVib2FyZAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87Cisg
ICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
CisgICAgICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmQgYWxsb3dQbGFp
blRleHQ6WUVTXTsKKyAgICBlbHNlCisgICAgICAgIFtzZWxmIF9wYXN0ZUFzUGxhaW5UZXh0V2l0
aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoaWQpdmFs
aWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTooTlNTdHJpbmcgKilzZW5kVHlwZSByZXR1cm5UeXBlOihO
U1N0cmluZyAqKXJldHVyblR5cGUKK3sKKyAgICBCT09MIGlzU2VuZFR5cGVPSyA9ICFzZW5kVHlw
ZSB8fCAoW1tzZWxmIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbl0gY29udGFpbnNPYmplY3Q6
c2VuZFR5cGVdICYmIFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsKKyAgICBCT09MIGlzUmV0dXJuVHlw
ZU9LID0gIXJldHVyblR5cGUgfHwgKFtbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxlUGFzdGVib2Fy
ZFR5cGVzXSBjb250YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBbc2VsZiBfaXNFZGl0YWJsZV0p
OworICAgIGlmIChpc1NlbmRUeXBlT0sgJiYgaXNSZXR1cm5UeXBlT0spCisgICAgICAgIHJldHVy
biBzZWxmOworICAgIHJldHVybiBbW3NlbGYgbmV4dFJlc3BvbmRlcl0gdmFsaWRSZXF1ZXN0b3JG
b3JTZW5kVHlwZTpzZW5kVHlwZSByZXR1cm5UeXBlOnJldHVyblR5cGVdOworfQorCisvLyBqdW1w
VG9TZWxlY3Rpb24gaXMgdGhlIG9sZCBuYW1lIGZvciB3aGF0IEFwcEtpdCBub3cgY2FsbHMgY2Vu
dGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYS4gU2FmYXJpCisvLyB3YXMgdXNpbmcgdGhlIG9sZCBq
dW1wVG9TZWxlY3Rpb24gc2VsZWN0b3IgaW4gaXRzIG1lbnUuIE5ld2VyIHZlcnNpb25zIG9mIFNh
ZmFyaSB3aWxsIHVzZSB0aGUKKy8vIHNlbGVjdG9yIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFy
ZWEuIFdlJ2xsIGxlYXZlIHRoZSBvbGQgc2VsZWN0b3IgaW4gcGxhY2UgZm9yIHR3byByZWFzb25z
OgorLy8gKDEpIENvbXBhdGliaWxpdHkgYmV0d2VlbiBvbGRlciBTYWZhcmkgYW5kIG5ld2VyIFdl
YktpdDsgKDIpIG90aGVyIFdlYktpdC1iYXNlZCBhcHBsaWNhdGlvbnMKKy8vIG1pZ2h0IGJlIHVz
aW5nIHRoZSBzZWxlY3RvciwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlbS4KKy0gKHZv
aWQpanVtcFRvU2VsZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisK
KyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAg
IGNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJB
bHdheXMpOworfQorCistIChOU0NlbGxTdGF0ZVZhbHVlKXNlbGVjdGlvbkhhc1N0eWxlOihDU1NT
dHlsZURlY2xhcmF0aW9uKilzdHlsZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTlNPZmZT
dGF0ZTsKKyAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0
eWxlKHN0eWxlKSk7Cit9CisKKy0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbVdpdGhv
dXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KK3sKKyAg
ICBTRUwgYWN0aW9uID0gW2l0ZW0gYWN0aW9uXTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKKworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBO
TzsKKyAgICAKKyAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IGZyYW1lLT5kb2N1bWVudCgpKSB7Cisg
ICAgICAgIGlmIChkb2MtPmlzUGx1Z2luRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBO
TzsKKyAgICAgICAgaWYgKGRvYy0+aXNJbWFnZURvY3VtZW50KCkpIHsgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNvcHk6KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5pc0NvbXBsZXRlKCk7CisgICAgICAgICAgICByZXR1
cm4gTk87CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihj
aGFuZ2VTcGVsbGluZzopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKF9jaGFu
Z2VTcGVsbGluZ0Zyb21NZW51OikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
Y2hlY2tTcGVsbGluZzopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNvbXBs
ZXRlOikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVGb250OikpCisg
ICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihzaG93R3Vlc3NQYW5lbDopKSB7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAg
ICAgIC8vIE1hdGNoIE9TIFggQXBwS2l0IGJlaGF2aW9yIGZvciBwb3N0LVRpZ2VyLiBEb24ndCBj
aGFuZ2UgVGlnZXIgYmVoYXZpb3IuCisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5T
TWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05T
TWVudUl0ZW0gY2xhc3NdXSkgeworICAgICAgICAgICAgQk9PTCBwYW5lbFNob3dpbmcgPSBbW1tO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHNwZWxsaW5nUGFuZWxdIGlzVmlzaWJs
ZV07CisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6cGFuZWxTaG93aW5nCisgICAgICAg
ICAgICAgICAgPyBVSV9TVFJJTkcoIkhpZGUgU3BlbGxpbmcgYW5kIEdyYW1tYXIiLCAibWVudSBp
dGVtIHRpdGxlIikKKyAgICAgICAgICAgICAgICA6IFVJX1NUUklORygiU2hvdyBTcGVsbGluZyBh
bmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKV07CisgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICAKKyAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihjaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjopCisgICAgICAgICAgICB8
fCBhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0
OikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VXcml0aW5nRGly
ZWN0aW9uUmlnaHRUb0xlZnQ6KSkgeworICAgICAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGlu
Z0RpcmVjdGlvbjsKKworICAgICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VCYXNl
V3JpdGluZ0RpcmVjdGlvbjopKSB7CisgICAgICAgICAgICB3cml0aW5nRGlyZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8TlNXcml0aW5nRGlyZWN0aW9uPihbaXRlbSB0YWddKTsKKyAgICAgICAgICAgIGlm
ICh3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IobWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6KSkKKyAgICAgICAgICAgIHdy
aXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0OworCisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0g
KilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0g
Y2xhc3NdXSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxl
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eSgiZGlyZWN0aW9u
Iiwgd3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/ICJM
VFIiIDogIlJUTCIsIGVjKTsKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpmcmFtZS0+
ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKV07CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsOikpIHsKKyAgICAgICAg
TlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChb
bWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAg
W21lbnVJdGVtIHNldFN0YXRlOk5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gTk87CisgICAg
fQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQmFzZVdyaXRpbmdEaXJlY3Rp
b246KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRl
bTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNz
XV0pIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CisgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoImRpcmVjdGlvbiIsICJS
VEwiLCBlYyk7CisgICAgICAgICAgICAvLyBUYWtlIGNvbnRyb2wgb2YgdGhlIHRpdGxlIG9mIHRo
ZSBtZW51IGl0ZW0gaW5zdGVhZCBvZiBqdXN0IGNoZWNraW5nL3VuY2hlY2tpbmcgaXQgYmVjYXVz
ZQorICAgICAgICAgICAgLy8gYSBjaGVjayB3b3VsZCBiZSBhbWJpZ3VvdXMuCisgICAgICAgICAg
ICBbbWVudUl0ZW0gc2V0VGl0bGU6ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShz
dHlsZS5nZXQoKSkKKyAgICAgICAgICAgICAgICA/IFVJX1NUUklORygiTGVmdCB0byBSaWdodCIs
ICJMZWZ0IHRvIFJpZ2h0IGNvbnRleHQgbWVudSBpdGVtIikKKyAgICAgICAgICAgICAgICA6IFVJ
X1NUUklORygiUmlnaHQgdG8gTGVmdCIsICJSaWdodCB0byBMZWZ0IGNvbnRleHQgbWVudSBpdGVt
IildOworICAgICAgICB9CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfSAK
KyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VBdHRyaWJ1dGVzOikKKyAg
ICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQ29sb3I6KSAgICAgICAgCisg
ICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUZvbnQ6KSkKKyAgICAgICAg
cmV0dXJuIFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3RvcihjYXBpdGFsaXplV29yZDopCisgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNl
bGVjdG9yKGxvd2VyY2FzZVdvcmQ6KQorICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxl
Y3Rvcih1cHBlcmNhc2VXb3JkOikpCisgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9u
XSAmJiBbc2VsZiBfaXNFZGl0YWJsZV07CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihj
ZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOikKKyAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9
PSBAc2VsZWN0b3IoanVtcFRvU2VsZWN0aW9uOikKKyAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9
PSBAc2VsZWN0b3IoY29weUZvbnQ6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rp
b25dIHx8IChbc2VsZiBfaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2hhc0luc2VydGlvblBvaW50XSk7
CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlRG9jdW1lbnRCYWNrZ3Jv
dW5kQ29sb3I6KSkKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNFZGl0YWJsZV0g
JiYgW3NlbGYgX2NhbkVkaXRSaWNobHldOworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKF9pZ25vcmVTcGVsbGluZ0Zyb21NZW51OikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBA
c2VsZWN0b3IoX2xlYXJuU3BlbGxpbmdGcm9tTWVudTopCisgICAgICAgICAgICB8fCBhY3Rpb24g
PT0gQHNlbGVjdG9yKHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjopKQorICAgICAgICByZXR1
cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IocGFzdGU6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlQXNQbGFpblRleHQ6KSkKKyAg
ICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MUGFzdGUoKSB8
fCBmcmFtZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkpOworICAgIAorICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHBhc3RlQXNSaWNoVGV4dDopKQorICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZy
YW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxQYXN0ZSgpCisgICAgICAgICAgICB8fCAoZnJhbWUtPmVk
aXRvcigpLT5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkpOworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBlcmZvcm1G
aW5kUGFuZWxBY3Rpb246KSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKF9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTopKQorICAgICAgICBy
ZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07CisgICAgCisjaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlR3JhbW1hckNoZWNraW5nOikp
IHsKKyAgICAgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBm
b3IgdGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCB2YWxpZGF0ZSAKKyAg
ICAgICAgLy8gdGhlIHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3ZSBpbXBsZW1lbnQgaXQgaGVyZSwg
YW5kIHdlIG11c3QgaW1wbGVtZW50IGl0IGhlcmUgYmVjYXVzZSB0aGUgQXBwS2l0IAorICAgICAg
ICAvLyBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgICAgICBOU01lbnVJdGVt
ICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBp
c0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0g
c2V0U3RhdGU6W3NlbGYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5T
T2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyNlbmRpZgorCisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Iob3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5l
bDopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVt
OworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3Nd
XSkgeworICAgICAgICAgICAgQk9PTCBwYW5lbFNob3dpbmcgPSBbW1tOU1NwZWxsQ2hlY2tlciBz
aGFyZWRTcGVsbENoZWNrZXJdIHN1YnN0aXR1dGlvbnNQYW5lbF0gaXNWaXNpYmxlXTsKKyAgICAg
ICAgICAgIFttZW51SXRlbSBzZXRUaXRsZTpwYW5lbFNob3dpbmcKKyAgICAgICAgICAgICAgICA/
IFVJX1NUUklORygiSGlkZSBTdWJzdGl0dXRpb25zIiwgIm1lbnUgaXRlbSB0aXRsZSIpCisgICAg
ICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlNob3cgU3Vic3RpdHV0aW9ucyIsICJtZW51IGl0ZW0g
dGl0bGUiKV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAg
ICB9CisgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3Ig
dGhpcyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCisgICAgLy8gdGhlIHNlbGVjdG9yIGhl
cmUgYmVjYXVzZSB3ZSBpbXBsZW1lbnQgaXQgaGVyZSwgYW5kIHdlIG11c3QgaW1wbGVtZW50IGl0
IGhlcmUgYmVjYXVzZSB0aGUgQXBwS2l0IAorICAgIC8vIGNvZGUgY2hlY2tzIHRoZSBmaXJzdCBy
ZXNwb25kZXIuCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlU21hcnRJbnNlcnRE
ZWxldGU6KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICop
aXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNs
YXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4g
W3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dn
bGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1l
bnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2lu
ZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRT
dGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF0gPyBOU09uU3Rh
dGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9
CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlv
bjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVt
OworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3Nd
XSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY0xpbmtE
ZXRlY3Rpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1
cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0
b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAq
bWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNL
aW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFN0YXRlOltzZWxmIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0
YXRlIDogTlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAg
fQorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNl
bWVudDopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilp
dGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xh
c3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1Rl
eHRSZXBsYWNlbWVudEVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CisgICAgICAg
IHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjopKSB7CisgICAgICAgIE5TTWVu
dUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJ
dGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51
SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWRd
ID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRp
dF07CisgICAgfQorI2VuZGlmCisgICAgCisgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBb
c2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6YWN0aW9uXTsKKyAgICBpZiAoY29tbWFuZC5pc1N1
cHBvcnRlZCgpKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0g
KilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0g
Y2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpraXQoY29tbWFuZC5zdGF0
ZSgpKV07CisgICAgICAgIHJldHVybiBjb21tYW5kLmlzRW5hYmxlZCgpOworICAgIH0KKworICAg
IHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQg
PE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KK3sKKyAgICAvLyBUaGlzIGNhbiBi
ZSBjYWxsZWQgZHVyaW5nIHRlYXJkb3duIHdoZW4gX3dlYlZpZXcgaXMgbmlsLiBSZXR1cm4gTk8g
d2hlbiB0aGlzIGhhcHBlbnMsIGJlY2F1c2UgQ2FsbFVJRGVsZWdhdGVSZXR1cm5pbmdCb29sZWFu
CisgICAgLy8gYXNzdW1lcyB0aGUgV2ViVklldyBpcyBub24tbmlsLgorICAgIGlmICghW3NlbGYg
X3dlYlZpZXddKQorICAgICAgICByZXR1cm4gTk87CisgICAgQk9PTCByZXN1bHQgPSBbc2VsZiB2
YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOml0ZW1dOworICAgIHJldHVy
biBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4ocmVzdWx0LCBbc2VsZiBfd2ViVmlld10s
IEBzZWxlY3Rvcih3ZWJWaWV3OnZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06ZGVmYXVsdFZhbGlk
YXRpb246KSwgaXRlbSwgcmVzdWx0KTsKK30KKworLSAoQk9PTClhY2NlcHRzRmlyc3RSZXNwb25k
ZXIKK3sKKyAgICAvLyBEb24ndCBhY2NlcHQgZmlyc3QgcmVzcG9uZGVyIHdoZW4gd2UgZmlyc3Qg
Y2xpY2sgb24gdGhpcyB2aWV3LgorICAgIC8vIFdlIGhhdmUgdG8gcGFzcyB0aGUgZXZlbnQgZG93
biB0aHJvdWdoIFdlYkNvcmUgZmlyc3QgdG8gYmUgc3VyZSB3ZSBkb24ndCBoaXQgYSBzdWJ2aWV3
LgorICAgIC8vIERvIGFjY2VwdCBmaXJzdCByZXNwb25kZXIgYXQgYW55IG90aGVyIHRpbWUsIGZv
ciBleGFtcGxlIGZyb20ga2V5Ym9hcmQgZXZlbnRzLAorICAgIC8vIG9yIGZyb20gY2FsbHMgYmFj
ayBmcm9tIFdlYkNvcmUgb25jZSB3ZSBiZWdpbiBtb3VzZS1kb3duIGV2ZW50IGhhbmRsaW5nLgor
ICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07CisgICAgaWYgKFtldmVu
dCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24KKyAgICAgICAgICAgICYmICFfcHJpdmF0ZS0+aGFu
ZGxpbmdNb3VzZURvd25FdmVudAorICAgICAgICAgICAgJiYgTlNQb2ludEluUmVjdChbZXZlbnQg
bG9jYXRpb25JbldpbmRvd10sIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxmIHZpc2libGVSZWN0XSB0
b1ZpZXc6bmlsXSkpIHsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKyAgICByZXR1cm4gWUVT
OworfQorCistIChCT09MKW1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uCit7CisgICAgLy8gVGhp
cyBtZXRob2QgaGVscHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFdlYkhUTUxWaWV3IHNob3Vs
ZCBtYWludGFpbgorICAgIC8vIGFuIGluYWN0aXZlIHNlbGVjdGlvbiB3aGVuIGl0J3Mgbm90IGZp
cnN0IHJlc3BvbmRlci4KKyAgICAvLyBUcmFkaXRpb25hbGx5LCB0aGVzZSB2aWV3cyBoYXZlIG5v
dCBtYWludGFpbmVkIHN1Y2ggc2VsZWN0aW9ucywKKyAgICAvLyBjbGVhcmluZyB0aGVtIHdoZW4g
dGhlIHZpZXcgd2FzIG5vdCBmaXJzdCByZXNwb25kZXIuIEhvd2V2ZXIsCisgICAgLy8gdG8gZml4
IGJ1Z3MgbGlrZSB0aGlzIG9uZToKKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vMzY3MjA4OD46ICJF
ZGl0YWJsZSBXZWJWaWV3cyBzaG91bGQgbWFpbnRhaW4gYSBzZWxlY3Rpb24gZXZlbiAKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZXkncmUgbm90IGZpcnN0UmVzcG9u
ZGVyIgorICAgIC8vIGl0IHdhcyBkZWNpZGVkIHRvIGFkZCBhIHN3aXRjaCB0byBhY3QgbW9yZSBs
aWtlIGFuIE5TVGV4dFZpZXcuCisKKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBtYWludGFpbnNJ
bmFjdGl2ZVNlbGVjdGlvbl0pCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICAvLyBQcmVkaWN0
IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBsb3NpbmcgZmlyc3QgcmVzcG9uZGVyIHN0YXR1cyBvbmx5
IHRvCisgICAgLy8gZ2FpbiBpdCBiYWNrIGFnYWluLiBXYW50IHRvIGtlZXAgdGhlIHNlbGVjdGlv
biBpbiB0aGF0IGNhc2UuCisgICAgaWQgbmV4dFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIF9u
ZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nXTsKKyAgICBpZiAoW25leHRSZXNwb25kZXIg
aXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgaWQgY29udGVu
dFZpZXcgPSBbbmV4dFJlc3BvbmRlciBjb250ZW50Vmlld107CisgICAgICAgIGlmIChjb250ZW50
VmlldykKKyAgICAgICAgICAgIG5leHRSZXNwb25kZXIgPSBjb250ZW50VmlldzsKKyAgICB9Cisg
ICAgaWYgKFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TQ2xpcFZpZXcgY2xhc3NdXSkg
eworICAgICAgICBpZCBkb2N1bWVudFZpZXcgPSBbbmV4dFJlc3BvbmRlciBkb2N1bWVudFZpZXdd
OworICAgICAgICBpZiAoZG9jdW1lbnRWaWV3KQorICAgICAgICAgICAgbmV4dFJlc3BvbmRlciA9
IGRvY3VtZW50VmlldzsKKyAgICB9CisgICAgaWYgKG5leHRSZXNwb25kZXIgPT0gc2VsZikKKyAg
ICAgICAgcmV0dXJuIFlFUzsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNvcmVGcmFtZSAmJiBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIGJvb2wgbmV4dFJl
c3BvbmRlcklzSW5XZWJWaWV3ID0gW25leHRSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3
IGNsYXNzXV0KKyAgICAgICAgJiYgW25leHRSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6W1tbc2Vs
ZiBfd2ViVmlld10gbWFpbkZyYW1lXSBmcmFtZVZpZXddXTsKKworICAgIHJldHVybiBzZWxlY3Rp
b25Jc0VkaXRhYmxlICYmIG5leHRSZXNwb25kZXJJc0luV2ViVmlldzsKK30KKworLSAodm9pZClh
ZGRNb3VzZU1vdmVkT2JzZXJ2ZXIKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5kYXRhU291cmNlIHx8
ICFbc2VsZiBfaXNUb3BIVE1MVmlld10gfHwgX3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWRO
b3RpZmljYXRpb25zKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBVbmxlc3MgdGhlIERhc2hi
b2FyZCBhc2tzIHVzIHRvIGRvIHRoaXMgZm9yIGFsbCB3aW5kb3dzLCBrZWVwIGFuIG9ic2VydmVy
IGdvaW5nIG9ubHkgZm9yIHRoZSBrZXkgd2luZG93LgorICAgIGlmICghKFtbc2VsZiB3aW5kb3dd
IGlzS2V5V2luZG93XSAKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisgICAgICAgICAg
ICB8fCBbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhh
dmlvckFsd2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10KKyNlbmRpZgorICAgICAgICAp
KQorICAgICAgICByZXR1cm47CisKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKG1vdXNlTW92ZWROb3Rp
ZmljYXRpb246KQorICAgICAgICBuYW1lOldLTW91c2VNb3ZlZE5vdGlmaWNhdGlvbigpIG9iamVj
dDpuaWxdOworICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07CisgICAgX3ByaXZhdGUt
Pm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zID0gdHJ1ZTsKK30KKworLSAodm9pZCly
ZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXIKK3sKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CisgICAgLy8gRG9uJ3QgcmVtb3ZlIHRoZSBvYnNlcnZlciBpZiB3ZSdyZSBydW5uaW5nIHRoZSBE
YXNoYm9hcmQuCisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldl
YkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRzVG9BbGxXaW5kb3dzXSkKKyAg
ICAgICAgcmV0dXJuOworI2VuZGlmCisKKyAgICBbW3NlbGYgX3dlYlZpZXddIF9tb3VzZURpZE1v
dmVPdmVyRWxlbWVudDpuaWwgbW9kaWZpZXJGbGFnczowXTsKKyAgICBbc2VsZiBfcmVtb3ZlTW91
c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKK30KKworLSAodm9pZClhZGRTdXBlcnZp
ZXdPYnNlcnZlcnMKK3sKKyAgICBpZiAoX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlm
aWNhdGlvbnMpCisgICAgICAgIHJldHVybjsKKworICAgIE5TVmlldyAqc3VwZXJ2aWV3ID0gW3Nl
bGYgc3VwZXJ2aWV3XTsKKyAgICBpZiAoIXN1cGVydmlldyB8fCAhW3NlbGYgd2luZG93XSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRp
b25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgW25v
dGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZnJh
bWVPckJvdW5kc0NoYW5nZWQpIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24g
b2JqZWN0OnN1cGVydmlld107CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpz
ZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZnJhbWVPckJvdW5kc0NoYW5nZWQpIG5hbWU6TlNWaWV3
Qm91bmRzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOworICAgIAorICAg
IC8vIEluIGFkZGl0aW9uIHRvIHJlZ2lzdGVyaW5nIGZvciBmcmFtZS9ib3VuZHMgY2hhbmdlIG5v
dGlmaWNhdGlvbnMsIGNhbGwgLV9mcmFtZU9yQm91bmRzQ2hhbmdlZC4KKyAgICAvLyBJdCB3aWxs
IGNoZWNrIHRoZSBjdXJyZW50IHNjcm9sbCBhZ2FpbnN0IHRoZSBwcmV2aW91cyBsYXlvdXQncyBz
Y3JvbGwuICBXZSBuZWVkIHRvCisgICAgLy8gZG8gdGhpcyBoZXJlIHRvIGNhdGNoIHRoZSBjYXNl
IHdoZXJlIHRoZSBXZWJWaWV3IGlzIGxhaWQgb3V0IGF0IG9uZSBzaXplLCByZW1vdmVkIGZyb20g
aXRzCisgICAgLy8gd2luZG93LCByZXNpemVkLCBhbmQgaW5zZXJ0ZWQgaW50byBhbm90aGVyIHdp
bmRvdy4gIE91ciBmcmFtZS9ib3VuZHMgY2hhbmdlZCBub3RpZmljYXRpb25zCisgICAgLy8gd2ls
bCBub3QgYmUgc2VudCBpbiB0aGF0IHNpdHVhdGlvbiwgc2luY2Ugd2Ugb25seSB3YXRjaCBmb3Ig
Y2hhbmdlcyB3aGlsZSBpbiB0aGUgdmlldyBoaWVyYXJjaHkuCisgICAgW3NlbGYgX2ZyYW1lT3JC
b3VuZHNDaGFuZ2VkXTsKKyAgICAKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90
aWZpY2F0aW9ucyA9IHRydWU7Cit9CisKKy0gKHZvaWQpYWRkV2luZG93T2JzZXJ2ZXJzCit7Cisg
ICAgaWYgKF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAg
aWYgKCF3aW5kb3cpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU05vdGlmaWNhdGlvbkNl
bnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3Iod2luZG93RGlkQmVjb21lS2V5OikgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtl
eU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZFJlc2lnbktleTopIG5hbWU6
TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgW25vdGlm
aWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dX
aWxsQ2xvc2U6KSBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVjdDp3aW5k
b3ddOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpA
c2VsZWN0b3Iod2luZG93V2lsbE9yZGVyT25TY3JlZW46KSBuYW1lOldLV2luZG93V2lsbE9yZGVy
T25TY3JlZW5Ob3RpZmljYXRpb24oKSBvYmplY3Q6d2luZG93XTsKKyAgICAKKyAgICBfcHJpdmF0
ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucyA9IHRydWU7Cit9CisKKy0gKHZvaWQpdmll
d1dpbGxNb3ZlVG9TdXBlcnZpZXc6KE5TVmlldyAqKW5ld1N1cGVydmlldworeworICAgIFtzZWxm
IF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9T
dXBlcnZpZXcKK3sKKyAgICBpZiAoW3NlbGYgc3VwZXJ2aWV3XSAhPSBuaWwpCisgICAgICAgIFtz
ZWxmIGFkZFN1cGVydmlld09ic2VydmVyc107Cit9CisKK3N0YXRpYyB2b2lkIF91cGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGVUaW1lckNhbGxiYWNrKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2
b2lkICppbmZvKQoreworICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICopaW5m
bzsKKyAgICBbdmlldyBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKK30KKworLSAodm9p
ZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cKK3sKKyAgICAvLyBEb24n
dCBkbyBhbnl0aGluZyBpZiB3ZSBhcmVuJ3QgaW5pdGlhbGl6ZWQuICBUaGlzIGhhcHBlbnMKKyAg
ICAvLyB3aGVuIGRlY29kaW5nIGEgV2ViVmlldy4gIFdoZW4gV2ViVmlld3MgYXJlIGRlY29kZWQg
dGhlaXIgc3Vidmlld3MKKyAgICAvLyBhcmUgY3JlYXRlZCBieSBpbml0V2l0aENvZGVyOiBhbmQg
c28gd29uJ3QgYmUgbm9ybWFsbHkKKyAgICAvLyBpbml0aWFsaXplZC4gIFRoZSBzdHViIHZpZXdz
IGFyZSBkaXNjYXJkZWQgYnkgV2ViVmlldy4KKyAgICBpZiAoIV9wcml2YXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogU29tZSBvZiB0aGVzZSBjYWxscyBtYXkgbm90IHdvcmsg
YmVjYXVzZSB0aGlzIHZpZXcgbWF5IGJlIGFscmVhZHkgcmVtb3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2
aWV3LgorICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHld
OworICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNlcnZlcnNdOworICAgIFtzZWxmIF9yZW1vdmVT
dXBlcnZpZXdPYnNlcnZlcnNdOworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1l
cl07CisgICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsK
KyAgICAKKyAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIHN0b3BBbGxQbHVnaW5zXTsKK30K
KworLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Cit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhp
bmcgaWYgd2UgYXJlbid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBwZW5zCisgICAgLy8gd2hlbiBk
ZWNvZGluZyBhIFdlYlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBkZWNvZGVkIHRoZWlyIHN1YnZp
ZXdzCisgICAgLy8gYXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2RlcjogYW5kIHNvIHdvbid0IGJl
IG5vcm1hbGx5CisgICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1YiB2aWV3cyBhcmUgZGlzY2Fy
ZGVkIGJ5IFdlYlZpZXcuCisgICAgaWYgKCFfcHJpdmF0ZSB8fCBfcHJpdmF0ZS0+Y2xvc2VkKQor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVy
XTsKKyAgICBpZiAoW3NlbGYgd2luZG93XSkgeworICAgICAgICBfcHJpdmF0ZS0+bGFzdFNjcm9s
bFBvc2l0aW9uID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmlnaW47CisgICAgICAgIFtz
ZWxmIGFkZFdpbmRvd09ic2VydmVyc107CisgICAgICAgIFtzZWxmIGFkZFN1cGVydmlld09ic2Vy
dmVyc107CisgICAgICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNlcnZlcl07CisKKyAgICAgICAg
Ly8gU2NoZWR1bGUgdGhpcyB1cGRhdGUsIHJhdGhlciB0aGFuIG1ha2luZyB0aGUgY2FsbCByaWdo
dCBub3cuCisgICAgICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCBwbGFjaW5nIHRoZSBjYXJldCBp
biB0aGUganVzdC1pbnN0YWxsZWQgdmlldyByZXF1aXJlcworICAgICAgICAvLyB0aGUgSFRNTC9Y
TUwgZG9jdW1lbnQgdG8gYmUgYXZhaWxhYmxlIG9uIHRoZSBXZWJDb3JlIHNpZGUsIGJ1dCBpdCBp
cyBub3QKKyAgICAgICAgLy8gYXQgdGhlIHRpbWUgdGhpcyBjb2RlIGlzIHJ1bm5pbmcuIEhvd2V2
ZXIsIGl0IHdpbGwgYmUgdGhlcmUgb24gdGhlIG5leHQKKyAgICAgICAgLy8gY3Jhbmsgb2YgdGhl
IHJ1biBsb29wLiBEb2luZyB0aGlzIGhlbHBzIHRvIG1ha2UgYSBibGlua2luZyBjYXJldCBhcHBl
YXIgCisgICAgICAgIC8vIGluIGEgbmV3LCBlbXB0eSB3aW5kb3cgImF1dG9tYXRpYyIuCisgICAg
ICAgIGlmICghX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKSB7Cisg
ICAgICAgICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4dCA9IHsgMCwgc2VsZiwgTlVM
TCwgTlVMTCwgTlVMTCB9OworICAgICAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZVRpbWVyID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUoTlVMTCwgQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCksIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVGb2N1c2VkQW5kQWN0
aXZlU3RhdGVUaW1lckNhbGxiYWNrLCAmY29udGV4dCk7CisgICAgICAgICAgICBDRlJ1bkxvb3BB
ZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGVUaW1lciwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBzdGFydEFsbFBsdWdpbnNd
OworCisgICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBOU1plcm9Qb2ludDsK
KyAgICB9Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93OihOU1dpbmRvdyAq
KWhvc3RXaW5kb3cKK3sKKyAgICBbW3NlbGYgc3Vidmlld3NdIF93ZWJfbWFrZVBsdWdpblZpZXdz
UGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KSB3aXRo
T2JqZWN0Omhvc3RXaW5kb3ddOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93
Cit7CisgICAgW1tzZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3Iodmlld0RpZE1vdmVUb0hvc3RXaW5kb3cpIHdpdGhPYmplY3Q6bmlsXTsK
K30KKworCistICh2b2lkKWFkZFN1YnZpZXc6KE5TVmlldyAqKXZpZXcKK3sKKyAgICBbc3VwZXIg
YWRkU3Vidmlldzp2aWV3XTsKKworICAgIGlmIChbV2ViUGx1Z2luQ29udHJvbGxlciBpc1BsdWdJ
blZpZXc6dmlld10pCisgICAgICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gYWRkUGx1Z2lu
OnZpZXddOworfQorCistICh2b2lkKXdpbGxSZW1vdmVTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3
Cit7CisgICAgaWYgKFtXZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzpzdWJ2aWV3XSkK
KyAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95UGx1Z2luOnN1YnZpZXdd
OworCisgICAgW3N1cGVyIHdpbGxSZW1vdmVTdWJ2aWV3OnN1YnZpZXddOworfQorCistICh2b2lk
KXJlYXBwbHlTdHlsZXMKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5uZWVkc1RvQXBwbHlTdHlsZXMp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyNpZmRlZiBMT0dfVElNRVMKKyAgICBkb3VibGUgc3Rh
cnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKKyNlbmRpZgorCisgICAgaWYgKEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGlmIChGcmFtZVZp
ZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpCisgICAgICAgICAgICBjb3JlVmlldy0+
c2V0TWVkaWFUeXBlKF9wcml2YXRlLT5wcmludGluZyA/ICJwcmludCIgOiAic2NyZWVuIik7Cisg
ICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCkpCisg
ICAgICAgICAgICBkb2N1bWVudC0+c2V0UHJpbnRpbmcoX3ByaXZhdGUtPnByaW50aW5nKTsKKyAg
ICAgICAgY29yZUZyYW1lLT5yZWFwcGx5U3R5bGVzKCk7CisgICAgfQorICAgIAorI2lmZGVmIExP
R19USU1FUyAgICAgICAgCisgICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRD
dXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5nLCAiJXMgYXBwbHkgc3R5bGUgc2Vjb25k
cyA9ICVmIiwgW3NlbGYgVVJMXSwgdGhpc1RpbWUpOworI2VuZGlmCisKKyAgICBfcHJpdmF0ZS0+
bmVlZHNUb0FwcGx5U3R5bGVzID0gTk87Cit9CisKKy8vIERvIGEgbGF5b3V0LCBidXQgc2V0IHVw
IGEgbmV3IGZpeGVkIHdpZHRoIGZvciB0aGUgcHVycG9zZXMgb2YgZG9pbmcgcHJpbnRpbmcgbGF5
b3V0LgorLy8gbWluUGFnZVdpZHRoPT0wIGltcGxpZXMgYSBub24tcHJpbnRpbmcgbGF5b3V0Cist
ICh2b2lkKWxheW91dFRvTWluaW11bVBhZ2VXaWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIG1heGlt
dW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3RpbmdWaWV3U2l6ZTooQk9PTClh
ZGp1c3RWaWV3U2l6ZQoreworICAgIFtzZWxmIHJlYXBwbHlTdHlsZXNdOworICAgIAorICAgIGlm
ICghW3NlbGYgX25lZWRzTGF5b3V0XSkKKyAgICAgICAgcmV0dXJuOworCisjaWZkZWYgTE9HX1RJ
TUVTICAgICAgICAKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQo
KTsKKyNlbmRpZgorCisgICAgTE9HKFZpZXcsICIlQCBkb2luZyBsYXlvdXQiLCBzZWxmKTsKKwor
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29y
ZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoRnJhbWVWaWV3KiBjb3JlVmlldyA9
IGNvcmVGcmFtZS0+dmlldygpKSB7CisgICAgICAgIGlmIChtaW5QYWdlV2lkdGggPiAwLjApCisg
ICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZ2UobWluUGFn
ZVdpZHRoLCBtYXhQYWdlV2lkdGgsIGFkanVzdFZpZXdTaXplKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXQoIWFkanVzdFZpZXdTaXplKTsKKyAgICAg
ICAgICAgIGlmIChhZGp1c3RWaWV3U2l6ZSkKKyAgICAgICAgICAgICAgICBjb3JlVmlldy0+YWRq
dXN0Vmlld1NpemUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyNpZmRlZiBMT0dfVElNRVMg
ICAgICAgIAorICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgp
IC0gc3RhcnQ7CisgICAgTE9HKFRpbWluZywgIiVzIGxheW91dCBzZWNvbmRzID0gJWYiLCBbc2Vs
ZiBVUkxdLCB0aGlzVGltZSk7CisjZW5kaWYKK30KKworLSAodm9pZClsYXlvdXQKK3sKKyAgICBb
c2VsZiBsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYg
YWRqdXN0aW5nVmlld1NpemU6Tk9dOworfQorCisvLyBEZWxpdmVyIG1vdXNldXAgZXZlbnRzIHRv
IHRoZSBET00gZm9yIGJ1dHRvbiAyLgorLSAodm9pZClyaWdodE1vdXNlVXA6KE5TRXZlbnQgKill
dmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB3ZSBydW4gYSBuZXN0ZWQg
ZXZlbnQgbG9vcCB0aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNlZC4KKyAgICAvLyBSZXRhaW5pbmcg
YW5kIHRoZW4gYXV0b3JlbGVhc2luZyBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2Js
ZW0gbGF0ZXIgaGVyZSBvcgorICAgIC8vIGluc2lkZSBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50
IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgW3N1cGVyIHJpZ2h0TW91c2VVcDpldmVudF07
CisKKyAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAg
ICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlVXAoZXZlbnQpOworfQorCistIChO
U01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3Mg
YSBjaGFuY2UgdGhhdCBpZiB3ZSBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCB0aGUgZXZlbnQgd2ls
bCBiZSByZWxlYXNlZC4KKyAgICAvLyBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZyBw
cmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gbGF0ZXIgaGVyZSBvcgorICAgIC8v
IGluc2lkZSBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwor
CisgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92
ZUxlZnQ6Tk9dOworCisgICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
UGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIC8vIE1hdGNoIGJlaGF2aW9yIG9mIG90aGVyIGJyb3dzZXJzIGJ5
IHNlbmRpbmcgYSBtb3VzZWRvd24gZXZlbnQgZm9yIHJpZ2h0IGNsaWNrcy4KKyAgICBfcHJpdmF0
ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlFUzsKKyAgICBwYWdlLT5jb250ZXh0TWVudUNv
bnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOworICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPm1vdXNlRG93bihldmVudCk7CisgICAgQk9PTCBoYW5kbGVkRXZlbnQgPSBjb3JlRnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZl
bnQoZXZlbnQpKTsKKyAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POwor
CisgICAgaWYgKCFoYW5kbGVkRXZlbnQpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBS
ZS1nZXQgcGFnZSwgc2luY2UgaXQgbWlnaHQgaGF2ZSBnb25lIGF3YXkgZHVyaW5nIGV2ZW50IGhh
bmRsaW5nLgorICAgIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBDb250ZXh0TWVudSogY29yZU1lbnUgPSBwYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKTsKKyAgICBpZiAoIWNvcmVNZW51
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNBcnJheSogbWVudUl0ZW1zID0gY29yZU1l
bnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKTsKKyAgICBpZiAoIW1lbnVJdGVtcykKKyAgICAgICAg
cmV0dXJuIG5pbDsKKworICAgIE5TVUludGVnZXIgY291bnQgPSBbbWVudUl0ZW1zIGNvdW50XTsK
KyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNNZW51KiBtZW51
ID0gW1tbTlNNZW51IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgZm9yIChOU1VJbnRl
Z2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgW21lbnUgYWRkSXRlbTpbbWVudUl0
ZW1zIG9iamVjdEF0SW5kZXg6aV1dOworICAgIHJldHVybiBtZW51OworfQorCistIChCT09MKXNl
YXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNl
bnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnCit7CisgICAgcmV0dXJu
IFtzZWxmIHNlYXJjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndhcmQgY2FzZVNlbnNpdGl2ZTpj
YXNlRmxhZyB3cmFwOndyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246Tk9dOworfQorCistICh2b2lk
KWNsZWFyRm9jdXMKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgZG9jdW1lbnQtPnNldEZvY3VzZWROb2RlKDApOworfQor
CistIChCT09MKWlzT3BhcXVlCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gZHJhd3NC
YWNrZ3JvdW5kXTsKK30KKworLSAodm9pZClzZXROZWVkc0Rpc3BsYXk6KEJPT0wpZmxhZworewor
ICAgIExPRyhWaWV3LCAiJUAgc2V0TmVlZHNEaXNwbGF5OiVAIiwgc2VsZiwgZmxhZyA/IEAiWUVT
IiA6IEAiTk8iKTsKKyAgICBbc3VwZXIgc2V0TmVlZHNEaXNwbGF5OmZsYWddOworfQorCistICh2
b2lkKXNldE5lZWRzTGF5b3V0OiAoQk9PTClmbGFnCit7CisgICAgTE9HKFZpZXcsICIlQCBzZXRO
ZWVkc0xheW91dDolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7CisgICAgaWYgKCFm
bGFnKQorICAgICAgICByZXR1cm47IC8vIFRoZXJlJ3Mgbm8gd2F5IHRvIHNheSB5b3UgZG9uJ3Qg
bmVlZCBhIGxheW91dC4KKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KSkgeworICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCkt
PmluUGFnZUNhY2hlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChGcmFtZVZp
ZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKQorICAgICAgICAgICAgdmlldy0+c2V0TmVlZHNMYXlv
dXQoKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiAoQk9PTClm
bGFnCit7CisgICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc1RvQXBwbHlTdHlsZXM6JUAiLCBzZWxm
LCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOworICAgIF9wcml2YXRlLT5uZWVkc1RvQXBwbHlTdHls
ZXMgPSBmbGFnOworfQorCistICh2b2lkKWRyYXdTaW5nbGVSZWN0OihOU1JlY3QpcmVjdAorewor
ICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CisgICAgTlNSZWN0Q2xp
cChyZWN0KTsKKyAgICAgICAgCisgICAgQVNTRVJUKFtbc2VsZiBzdXBlcnZpZXddIGlzS2luZE9m
Q2xhc3M6W1dlYkNsaXBWaWV3IGNsYXNzXV0pOworCisgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxm
IHN1cGVydmlld10gc2V0QWRkaXRpb25hbENsaXA6cmVjdF07CisKKyAgICBAdHJ5IHsKKyAgICAg
ICAgaWYgKFtzZWxmIF90cmFuc3BhcmVudEJhY2tncm91bmRdKSB7CisgICAgICAgICAgICBbW05T
Q29sb3IgY2xlYXJDb2xvcl0gc2V0XTsKKyAgICAgICAgICAgIE5TUmVjdEZpbGwgKHJlY3QpOwor
ICAgICAgICB9CisKKyAgICAgICAgW1tzZWxmIF9mcmFtZV0gX2RyYXdSZWN0OnJlY3QgY29udGVu
dHNPbmx5OllFU107CisKKyAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3
XTsKKworICAgICAgICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGZvciA8cmRhcjovL3Byb2JsZW0v
NTAyMzU0NT4uIFdlIGNhbiBoaXQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBkcmF3UmVjdCB3aWxs
IGJlCisgICAgICAgIC8vIGNhbGxlZCBhZnRlciB0aGUgV2ViVmlldyBoYXMgY2xvc2VkLiBJZiB0
aGUgY2xpZW50IGRpZCBub3QgcHJvcGVybHkgY2xvc2UgdGhlIFdlYlZpZXcgYW5kIHNldCB0aGUg
CisgICAgICAgIC8vIFVJRGVsZWdhdGUgdG8gbmlsLCB0aGVuIHRoZSBVSURlbGVnYXRlIHdpbGwg
YmUgc3RhbGUgYW5kIHRoaXMgY29kZSB3aWxsIGNyYXNoLiAKKyAgICAgICAgc3RhdGljIEJPT0wg
dmVyc2lvbjNPckxhdGVyQ2xpZW50ID0gV2ViS2l0TGlua2VkT25PckFmdGVyKFdFQktJVF9GSVJT
VF9WRVJTSU9OX1dJVEhPVVRfUVVJQ0tCT09LU19RVUlSSyk7CisgICAgICAgIGlmICh2ZXJzaW9u
M09yTGF0ZXJDbGllbnQpCisgICAgICAgICAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6d2ViVmlldyBkaWREcmF3UmVjdDpbd2ViVmlldyBjb252ZXJ0UmVjdDpyZWN0
IGZyb21WaWV3OnNlbGZdXTsKKworICAgICAgICBpZiAoV2ViTm9kZUhpZ2hsaWdodCAqY3VycmVu
dEhpZ2hsaWdodCA9IFt3ZWJWaWV3IGN1cnJlbnROb2RlSGlnaGxpZ2h0XSkKKyAgICAgICAgICAg
IFtjdXJyZW50SGlnaGxpZ2h0IHNldE5lZWRzVXBkYXRlSW5UYXJnZXRWaWV3UmVjdDpbc2VsZiBj
b252ZXJ0UmVjdDpyZWN0IHRvVmlldzpbY3VycmVudEhpZ2hsaWdodCB0YXJnZXRWaWV3XV1dOwor
CisgICAgICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHJlc2V0QWRkaXRpb25h
bENsaXBdOworCisgICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0
ZV07CisgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpsb2NhbEV4Y2VwdGlvbikgeworICAgICAg
ICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlwXTsK
KyAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKKyAgICAg
ICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gY2F1Z2h0IHdoaWxlIGRyYXdpbmc6ICVAIiwgbG9jYWxF
eGNlcHRpb24pOworICAgICAgICBbbG9jYWxFeGNlcHRpb24gcmFpc2VdOworICAgIH0KK30KKwor
LSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBBU1NFUlRfTUFJTl9USFJFQUQo
KTsKKyAgICBMT0coVmlldywgIiVAIGRyYXdpbmciLCBzZWxmKTsKKworICAgIGNvbnN0IE5TUmVj
dCAqcmVjdHM7CisgICAgTlNJbnRlZ2VyIGNvdW50OworICAgIFtzZWxmIGdldFJlY3RzQmVpbmdE
cmF3bjomcmVjdHMgY291bnQ6JmNvdW50XTsKKworICAgIEJPT0wgc3Vidmlld3NXZXJlU2V0QXNp
ZGUgPSBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZTsKKyAgICBpZiAoc3Vidmlld3NXZXJlU2V0
QXNpZGUpCisgICAgICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOworCisjaWZkZWYgTE9HX1RJ
TUVTCisgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CisjZW5k
aWYKKworICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9tdXN0RHJhd1VuaW9uZWRSZWN0OnJlY3Qg
c2luZ2xlUmVjdHM6cmVjdHMgY291bnQ6Y291bnRdKQorICAgICAgICBbc2VsZiBkcmF3U2luZ2xl
UmVjdDpyZWN0XTsKKyAgICBlbHNlCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKKyAgICAgICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJlY3RzW2ldXTsKKworI2lm
ZGVmIExPR19USU1FUworICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3Vy
cmVudCgpIC0gc3RhcnQ7CisgICAgTE9HKFRpbWluZywgIiVzIGRyYXcgc2Vjb25kcyA9ICVmIiwg
d2lkZ2V0LT5wYXJ0KCktPmJhc2VVUkwoKS5VUkwoKS5sYXRpbjEoKSwgdGhpc1RpbWUpOworI2Vu
ZGlmCisKKyAgICBpZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCisgICAgICAgIFtzZWxmIF9zZXRB
c2lkZVN1YnZpZXdzXTsKKyAgICAgICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uXSkgeworICAgICAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRhdGVzIHNvIHRoYXQgZHJh
d2luZyBpbnRvIHRoZSBOU1ZpZXcgYW5kCisgICAgICAgIC8vIENBTGF5ZXIgdXBkYXRlcyBhcHBl
YXIgb24gdGhlIHNjcmVlbiBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgICBbW3NlbGYgd2luZG93
XSBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOworICAgICAgICBbQ0FUcmFuc2FjdGlv
biBmbHVzaF07CisgICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3NldE5lZWRzT25lU2hvdERyYXdp
bmdTeW5jaHJvbml6YXRpb246Tk9dOworICAgIH0KKyNlbmRpZgorfQorCisvLyBUdXJuIG9mZiB0
aGUgYWRkaXRpb25hbCBjbGlwIHdoaWxlIGNvbXB1dGluZyBvdXIgdmlzaWJsZVJlY3QuCistIChO
U1JlY3QpdmlzaWJsZVJlY3QKK3sKKyAgICBpZiAoIShbW3NlbGYgc3VwZXJ2aWV3XSBpc0tpbmRP
ZkNsYXNzOltXZWJDbGlwVmlldyBjbGFzc11dKSkKKyAgICAgICAgcmV0dXJuIFtzdXBlciB2aXNp
YmxlUmVjdF07CisgICAgICAgIAorICAgIFdlYkNsaXBWaWV3ICpjbGlwVmlldyA9IChXZWJDbGlw
VmlldyAqKVtzZWxmIHN1cGVydmlld107CisKKyAgICBCT09MIGhhc0FkZGl0aW9uYWxDbGlwID0g
W2NsaXBWaWV3IGhhc0FkZGl0aW9uYWxDbGlwXTsKKyAgICBpZiAoIWhhc0FkZGl0aW9uYWxDbGlw
KSB7CisgICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3RdOworICAgIH0KKyAgICAKKyAg
ICBOU1JlY3QgYWRkaXRpb25hbENsaXAgPSBbY2xpcFZpZXcgYWRkaXRpb25hbENsaXBdOworICAg
IFtjbGlwVmlldyByZXNldEFkZGl0aW9uYWxDbGlwXTsKKyAgICBOU1JlY3QgdmlzaWJsZVJlY3Qg
PSBbc3VwZXIgdmlzaWJsZVJlY3RdOworICAgIFtjbGlwVmlldyBzZXRBZGRpdGlvbmFsQ2xpcDph
ZGRpdGlvbmFsQ2xpcF07CisgICAgcmV0dXJuIHZpc2libGVSZWN0OworfQorCistIChCT09MKWlz
RmxpcHBlZCAKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistICh2b2lkKXdpbmRvd0RpZEJlY29t
ZUtleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIXB0aHJlYWRf
bWFpbl9ucCgpKSB7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpf
Y21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgTlNXaW5kb3cgKmtleVdpbmRvdyA9IFtub3RpZmljYXRpb24g
b2JqZWN0XTsKKworICAgIGlmIChrZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSkKKyAgICAgICAg
W3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKKworICAgIGlmIChrZXlXaW5kb3cgPT0gW3Nl
bGYgd2luZG93XSB8fCBrZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0p
CisgICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOworfQorCistICh2
b2lkKXdpbmRvd0RpZFJlc2lnbktleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sK
KyAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxl
Y3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERv
bmU6Tk9dOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTlNXaW5kb3cgKmZvcm1lcktl
eVdpbmRvdyA9IFtub3RpZmljYXRpb24gb2JqZWN0XTsKKworICAgIGlmIChmb3JtZXJLZXlXaW5k
b3cgPT0gW3NlbGYgd2luZG93XSkKKyAgICAgICAgW3NlbGYgcmVtb3ZlTW91c2VNb3ZlZE9ic2Vy
dmVyXTsKKworICAgIGlmIChmb3JtZXJLZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8fCBmb3Jt
ZXJLZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pIHsKKyAgICAgICAg
W3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07CisgICAgICAgIFtfcHJpdmF0ZS0+
Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICB9
Cit9CisKKy0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgW3NlbGYgcGVy
Zm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVjdDpub3RpZmljYXRpb24gd2Fp
dFVudGlsRG9uZTpOT107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbX3ByaXZhdGUt
PmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAg
W1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107Cit9CisKKy0gKHZv
aWQpd2luZG93V2lsbE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Cit7CisgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVu
XSkKKyAgICAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpc2Ny
b2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhh
dCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwg
YW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9u
ZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBl
dmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBv
ciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1lIHx8ICFm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPndoZWVsRXZlbnQoZXZlbnQpKQorICAgICAgICBbc3VwZXIg
c2Nyb2xsV2hlZWw6ZXZlbnRdOworfQorCistIChCT09MKV9pc1NlbGVjdGlvbkV2ZW50OihOU0V2
ZW50ICopZXZlbnQKK3sKKyAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgY29udmVydFBvaW50Oltl
dmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOworICAgIHJldHVybiBbW1tzZWxm
IGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDpZRVNdIG9iamVjdEZvcktl
eTpXZWJFbGVtZW50SXNTZWxlY3RlZEtleV0gYm9vbFZhbHVlXTsKK30KKworLSAoQk9PTClhY2Nl
cHRzRmlyc3RNb3VzZTooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5j
ZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBs
b29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBv
bGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJy
ZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2Vi
S2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisK
KyAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbc2VsZiBfaGl0Vmlld0ZvckV2ZW50OmV2ZW50XTsKKyAg
ICBXZWJIVE1MVmlldyAqaGl0SFRNTFZpZXcgPSBbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltzZWxm
IGNsYXNzXV0gPyAoV2ViSFRNTFZpZXcgKiloaXRWaWV3IDogbmlsOworICAgIAorI2lmIEVOQUJM
RShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfZGFzaGJvYXJk
QmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNBY2NlcHRzRmlyc3RNb3VzZV0pCisg
ICAgICAgIHJldHVybiBZRVM7CisjZW5kaWYKKyAgICAKKyAgICBpZiAoaGl0SFRNTFZpZXcpIHsK
KyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkgeworICAgICAgICAgICAgY29yZUZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+c2V0QWN0aXZhdGlvbkV2ZW50TnVtYmVyKFtldmVudCBldmVudE51
bWJlcl0pOworICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpldmVu
dF07CisgICAgICAgICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50
XSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5l
dmVudE1heVN0YXJ0RHJhZyhldmVudCk7CisgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1v
dXNlRG93bkV2ZW50Om5pbF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgcmV0dXJuIFtoaXRWaWV3IGFjY2VwdHNGaXJzdE1vdXNlOmV2ZW50XTsKK30KKwor
LSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZl
bnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBu
ZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1
dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20g
Y2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2
ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgTlNWaWV3ICpoaXRWaWV3ID0gW3NlbGYg
X2hpdFZpZXdGb3JFdmVudDpldmVudF07CisgICAgV2ViSFRNTFZpZXcgKmhpdEhUTUxWaWV3ID0g
W2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8gKFdlYkhUTUxWaWV3ICopaGl0
VmlldyA6IG5pbDsKKyAgICBpZiAoaGl0SFRNTFZpZXcpIHsKKyAgICAgICAgYm9vbCByZXN1bHQg
PSBmYWxzZTsKKyAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVudDpldmVu
dF0pCisgICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2hpdEhUTUxWaWV3
IF9mcmFtZV0pKSB7CisgICAgICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25F
dmVudDpldmVudF07CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+ZXZlbnRNYXlTdGFydERyYWcoZXZlbnQpOworICAgICAgICAgICAgICAgIFtoaXRI
VE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIFtoaXRWaWV3IHNob3VsZERlbGF5V2lu
ZG93T3JkZXJpbmdGb3JFdmVudDpldmVudF07Cit9CisKKy0gKHZvaWQpbW91c2VEb3duOihOU0V2
ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0
byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZl
dGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBh
bmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMg
dGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUu
CisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFJldGFpblB0cjxXZWJI
VE1MVmlldz4gcHJvdGVjdG9yID0gc2VsZjsKKyAgICBpZiAoW1tzZWxmIGlucHV0Q29udGV4dF0g
d2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5wdXRDb250ZXh0XSBoYW5kbGVN
b3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPmhhbmRs
aW5nTW91c2VEb3duRXZlbnQgPSBZRVM7CisKKyAgICAvLyBSZWNvcmQgdGhlIG1vdXNlIGRvd24g
cG9zaXRpb24gc28gd2UgY2FuIGRldGVybWluZSBkcmFnIGh5c3RlcmVzaXMuCisgICAgW3NlbGYg
X3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50
SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAg
IGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtj
dXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICBnb3Rv
IGRvbmU7CisKKyAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5n
ZTpOTyBtb3ZlTGVmdDpOT107CisKKyAgICAvLyBJZiB0aGUgd2ViIHBhZ2UgaGFuZGxlcyB0aGUg
Y29udGV4dCBtZW51IGV2ZW50IGFuZCBtZW51Rm9yRXZlbnQ6IHJldHVybnMgbmlsLCB3ZSdsbCBn
ZXQgY29udHJvbCBjbGljayBldmVudHMgaGVyZS4KKyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBh
c3MgdGhlbSBhbG9uZyB0byBLSFRNTCBhIHNlY29uZCB0aW1lLgorICAgIGlmICghKFtldmVudCBt
b2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spKSB7CisgICAgICAgIF9wcml2YXRlLT5p
Z25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5POworCisgICAgICAgIC8vIERvbid0IGRvIGFu
eSBtb3VzZW92ZXIgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCisgICAgICAgIFtzZWxmIF9jYW5j
ZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07CisKKyAgICAgICAgLy8gTGV0IFdlYkNvcmUgZ2V0IGEg
Y2hhbmNlIHRvIGRlYWwgd2l0aCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBjYWxsIGJhY2sgdG8gdXMK
KyAgICAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaWYgYXBwcm9wcmlhdGUu
CisgICAgICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAg
ICAgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRG93bihldmVudCk7Cisg
ICAgfQorCitkb25lOgorICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gTk87
Cit9CisKKy0gKHZvaWQpZHJhZ0ltYWdlOihOU0ltYWdlICopZHJhZ0ltYWdlCisgICAgICAgICAg
ICAgICBhdDooTlNQb2ludClhdAorICAgICAgICAgICBvZmZzZXQ6KE5TU2l6ZSlvZmZzZXQKKyAg
ICAgICAgICAgIGV2ZW50OihOU0V2ZW50ICopZXZlbnQKKyAgICAgICBwYXN0ZWJvYXJkOihOU1Bh
c3RlYm9hcmQgKilwYXN0ZWJvYXJkCisgICAgICAgICAgIHNvdXJjZTooaWQpc291cmNlCisgICAg
ICAgIHNsaWRlQmFjazooQk9PTClzbGlkZUJhY2sKK3sKKyAgICBBU1NFUlQoc2VsZiA9PSBbc2Vs
ZiBfdG9wSFRNTFZpZXddKTsKKyAgICBbc3VwZXIgZHJhZ0ltYWdlOmRyYWdJbWFnZSBhdDphdCBv
ZmZzZXQ6b2Zmc2V0IGV2ZW50OmV2ZW50IHBhc3RlYm9hcmQ6cGFzdGVib2FyZCBzb3VyY2U6c291
cmNlIHNsaWRlQmFjazpzbGlkZUJhY2tdOworfQorCistICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcg
dG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBm
ZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcg
YW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRz
IHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2Rl
LgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBOU0lucHV0TWFuYWdl
ciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5h
Z2VyXTsKKyAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZl
bnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgcmV0YWluXTsKKworICAgIGlmICghX3ByaXZhdGUt
Pmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZy
YW1lLT5wYWdlKCkpCisgICAgICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLT5tb3VzZURyYWdnZWQoZXZlbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgW3Nl
bGYgcmVsZWFzZV07Cit9CisKKy0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ1NvdXJjZU9wZXJh
dGlvbk1hc2tGb3JMb2NhbDooQk9PTClpc0xvY2FsCit7CisgICAgQVNTRVJUKCFbc2VsZiBfd2Vi
Vmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKKyAgICAKKyAgICBQYWdlKiBwYWdlID0g
Y29yZShbc2VsZiBfd2ViVmlld10pOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIE5T
RHJhZ09wZXJhdGlvbk5vbmU7CisKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG92ZXJyaWRlIHRo
ZSBzb3VyY2UgcHJvdmlkZWQgb3BlcmF0aW9uIGhlcmU/ICBXaHkgbm90IGluIERyYWdDb250cm9s
bGVyOjpzdGFydERyYWcKKyAgICBpZiAocGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+c291cmNlRHJh
Z09wZXJhdGlvbigpID09IERyYWdPcGVyYXRpb25Ob25lKQorICAgICAgICByZXR1cm4gTlNEcmFn
T3BlcmF0aW9uR2VuZXJpYyB8IE5TRHJhZ09wZXJhdGlvbkNvcHk7CisKKyAgICByZXR1cm4gKE5T
RHJhZ09wZXJhdGlvbilwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zb3VyY2VEcmFnT3BlcmF0aW9u
KCk7Cit9CisKKy0gKHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdlICopaW1hZ2UgbW92ZWRUbzoo
TlNQb2ludClzY3JlZW5Mb2MKK3sKKyAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2Vs
ZiBfaXNUb3BIVE1MVmlld10pOworICAgIAorICAgIE5TUG9pbnQgd2luZG93SW1hZ2VMb2MgPSBb
W3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnNjcmVlbkxvY107CisgICAgTlNQb2lu
dCB3aW5kb3dNb3VzZUxvYyA9IHdpbmRvd0ltYWdlTG9jOworICAgIAorICAgIGlmIChQYWdlKiBw
YWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pKSB7CisgICAgICAgIERyYWdDb250cm9sbGVyKiBk
cmFnQ29udHJvbGxlciA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCk7CisgICAgICAgIE5TUG9pbnQg
d2luZG93TW91c2VMb2MgPSBOU01ha2VQb2ludCh3aW5kb3dJbWFnZUxvYy54ICsgZHJhZ0NvbnRy
b2xsZXItPmRyYWdPZmZzZXQoKS54KCksIHdpbmRvd0ltYWdlTG9jLnkgKyBkcmFnQ29udHJvbGxl
ci0+ZHJhZ09mZnNldCgpLnkoKSk7CisgICAgfQorICAgIAorICAgIFtbc2VsZiBfZnJhbWVdIF9k
cmFnU291cmNlTW92ZWRUbzp3aW5kb3dNb3VzZUxvY107Cit9CisKKy0gKHZvaWQpZHJhZ2dlZElt
YWdlOihOU0ltYWdlICopYW5JbWFnZSBlbmRlZEF0OihOU1BvaW50KWFQb2ludCBvcGVyYXRpb246
KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KK3sKKyAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3
XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOworICAgIAorICAgIE5TUG9pbnQgd2luZG93SW1h
Z2VMb2MgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOmFQb2ludF07CisgICAg
TlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IHdpbmRvd0ltYWdlTG9jOworICAgIAorICAgIGlmIChQ
YWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pKSB7CisgICAgICAgIERyYWdDb250cm9s
bGVyKiBkcmFnQ29udHJvbGxlciA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCk7CisgICAgICAgIHdp
bmRvd01vdXNlTG9jID0gTlNNYWtlUG9pbnQod2luZG93SW1hZ2VMb2MueCArIGRyYWdDb250cm9s
bGVyLT5kcmFnT2Zmc2V0KCkueCgpLCB3aW5kb3dJbWFnZUxvYy55ICsgZHJhZ0NvbnRyb2xsZXIt
PmRyYWdPZmZzZXQoKS55KCkpOworICAgICAgICBkcmFnQ29udHJvbGxlci0+ZHJhZ0VuZGVkKCk7
CisgICAgfQorICAgIAorICAgIFtbc2VsZiBfZnJhbWVdIF9kcmFnU291cmNlRW5kZWRBdDp3aW5k
b3dNb3VzZUxvYyBvcGVyYXRpb246b3BlcmF0aW9uXTsKKyAgICAKKyAgICAvLyBQcmV2ZW50IHF1
ZXVlZCBtb3VzZURyYWdnZWQgZXZlbnRzIGZyb20gY29taW5nIGFmdGVyIHRoZSBkcmFnIGFuZCBm
YWtlIG1vdXNlVXAgZXZlbnQuCisgICAgX3ByaXZhdGUtPmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZl
bnRzID0gWUVTOworICAgIAorICAgIC8vIE9uY2UgdGhlIGRyYWdnaW5nIG1hY2hpbmVyeSBraWNr
cyBpbiwgd2Ugbm8gbG9uZ2VyIGdldCBtb3VzZSBkcmFncyBvciB0aGUgdXAgZXZlbnQuCisgICAg
Ly8gV2ViQ29yZSBleHBlY3RzIHRvIGdldCBiYWxhbmNlZCBkb3duL3VwJ3MsIHNvIHdlIG11c3Qg
ZmFrZSB1cCBhIG1vdXNldXAuCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91
c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlVXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jYXRpb246d2luZG93TW91c2VMb2MKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZl
bnRdIG1vZGlmaWVyRmxhZ3NdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW3Nl
bGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJlcjowIGNsaWNr
Q291bnQ6MCBwcmVzc3VyZTowXTsKKyAgICBbc2VsZiBtb3VzZVVwOmZha2VFdmVudF07IC8vIFRo
aXMgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgbW91c2VvdmVyIHN0YXRlLgorfQorCistIChOU0FycmF5
ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjooTlNVUkwgKilkcm9w
RGVzdGluYXRpb24KK3sKKyAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOworICAgIE5T
VVJMICpkcmFnZ2luZ0ltYWdlVVJMID0gbmlsOworICAgIAorICAgIGlmIChXZWJDb3JlOjpDYWNo
ZWRJbWFnZSogdGlmZlJlc291cmNlID0gW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2Vd
KSB7CisgICAgICAgIAorICAgICAgICBTaGFyZWRCdWZmZXIgKmJ1ZmZlciA9IHN0YXRpY19jYXN0
PENhY2hlZFJlc291cmNlKj4odGlmZlJlc291cmNlKS0+ZGF0YSgpOworICAgICAgICBpZiAoIWJ1
ZmZlcikKKyAgICAgICAgICAgIGdvdG8gbm9Qcm9taXNlZERhdGE7CisgICAgICAgIAorICAgICAg
ICBOU0RhdGEgKmRhdGEgPSBidWZmZXItPmNyZWF0ZU5TRGF0YSgpOworICAgICAgICBOU1VSTFJl
c3BvbnNlICpyZXNwb25zZSA9IHRpZmZSZXNvdXJjZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNl
KCk7CisgICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBbcmVzcG9uc2UgVVJMXTsKKyAgICAgICAg
d3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250
ZW50czpkYXRhXSBhdXRvcmVsZWFzZV07CisgICAgICAgIE5TU3RyaW5nKiBmaWxlbmFtZSA9IFty
ZXNwb25zZSBzdWdnZXN0ZWRGaWxlbmFtZV07CisgICAgICAgIE5TU3RyaW5nKiB0cnVlRXh0ZW5z
aW9uKHRpZmZSZXNvdXJjZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKSk7CisgICAgICAg
IGlmICghW2ZpbGVuYW1lIG1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50OnRydWVFeHRlbnNpb25d
KQorICAgICAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0cmluZ0J5QXBwZW5kaW5nU3Ry
aW5nOkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVFeHRlbnNpb25dOworICAgICAg
ICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07CisgICAgfQorICAgIAor
bm9Qcm9taXNlZERhdGE6CisgICAgCisgICAgaWYgKCF3cmFwcGVyKSB7CisgICAgICAgIEFTU0VS
VCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7CisgICAgICAgIFBh
Z2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7CisgICAgICAgIAorICAgICAgICAvL0lm
IGEgbG9hZCBvY2N1cnMgbWlkd2F5IHRocm91Z2ggYSBkcmFnLCB0aGUgdmlldyBtYXkgYmUgZGV0
YWNoZWQsIHdoaWNoIGdpdmVzCisgICAgICAgIC8vdXMgbm8gYWJpbGl0eSB0byBnZXQgdG8gdGhl
IG9yaWdpbmFsIFBhZ2UsIHNvIHdlIGNhbm5vdCBhY2Nlc3MgYW55IGRyYWcgc3RhdGUKKyAgICAg
ICAgLy9GSVhNRTogaXMgdGhlcmUgYSB3YXkgdG8gcmVjb3Zlcj8KKyAgICAgICAgaWYgKCFwYWdl
KSAKKyAgICAgICAgICAgIHJldHVybiBuaWw7IAorICAgICAgICAKKyAgICAgICAgY29uc3QgS1VS
TCYgaW1hZ2VVUkwgPSBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnZ2luZ0ltYWdlVVJMKCk7
CisgICAgICAgIEFTU0VSVCghaW1hZ2VVUkwuaXNFbXB0eSgpKTsKKyAgICAgICAgZHJhZ2dpbmdJ
bWFnZVVSTCA9IGltYWdlVVJMOworCisgICAgICAgIHdyYXBwZXIgPSBbW3NlbGYgX2RhdGFTb3Vy
Y2VdIF9maWxlV3JhcHBlckZvclVSTDpkcmFnZ2luZ0ltYWdlVVJMXTsKKyAgICB9CisgICAgCisg
ICAgaWYgKHdyYXBwZXIgPT0gbmlsKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSBpbWFnZSBmaWxlLiIpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAgIC8v
IEZJWE1FOiBSZXBvcnQgYW4gZXJyb3IgaWYgd2UgZmFpbCB0byBjcmVhdGUgYSBmaWxlLgorICAg
IE5TU3RyaW5nICpwYXRoID0gW1tkcm9wRGVzdGluYXRpb24gcGF0aF0gc3RyaW5nQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50Olt3cmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXV07CisgICAgcGF0aCA9
IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtpdF9wYXRoV2l0aFVuaXF1ZUZp
bGVuYW1lRm9yUGF0aDpwYXRoXTsKKyAgICBpZiAoIVt3cmFwcGVyIHdyaXRlVG9GaWxlOnBhdGgg
YXRvbWljYWxseTpOTyB1cGRhdGVGaWxlbmFtZXM6WUVTXSkKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIGltYWdlIGZpbGUgdmlhIC1bTlNGaWxlV3JhcHBlciB3cml0ZVRvRmls
ZTphdG9taWNhbGx5OnVwZGF0ZUZpbGVuYW1lczpdIik7CisgICAgCisgICAgaWYgKGRyYWdnaW5n
SW1hZ2VVUkwpCisgICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtp
dF9zZXRNZXRhZGF0YVVSTDpbZHJhZ2dpbmdJbWFnZVVSTCBhYnNvbHV0ZVN0cmluZ10gcmVmZXJy
ZXI6bmlsIGF0UGF0aDpwYXRoXTsKKyAgICAKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0OltwYXRoIGxhc3RQYXRoQ29tcG9uZW50XV07Cit9CisKKy0gKHZvaWQpbW91c2VVcDoo
TlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRp
bmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAv
LyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5p
bmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZl
bnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBj
b2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBbc2VsZiBfc2V0
TW91c2VEb3duRXZlbnQ6bmlsXTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRN
YW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAgIGlmIChb
Y3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50
SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm47CisK
KyAgICBbc2VsZiByZXRhaW5dOworCisgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwor
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGlm
IChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFt
ZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VVcChldmVudCk7CisgICAgfQorICAgIFtzZWxmIF91
cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKKworICAgIFtzZWxmIHJlbGVhc2VdOworfQor
CistICh2b2lkKW1vdXNlTW92ZWROb3RpZmljYXRpb246KE5TTm90aWZpY2F0aW9uICopbm90aWZp
Y2F0aW9uCit7CisgICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpbW25vdGlmaWNh
dGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAiTlNFdmVudCJdXTsKK30KKworLy8gcmV0dXJu
aW5nIFlFUyBmcm9tIHRoaXMgbWV0aG9kIGlzIHRoZSB3YXkgd2UgdGVsbCBBcHBLaXQgdGhhdCBp
dCBpcyBvayBmb3IgdGhpcyB2aWV3CisvLyB0byBiZSBpbiB0aGUga2V5IGxvb3AgZXZlbiB3aGVu
ICJ0YWIgdG8gYWxsIGNvbnRyb2xzIiBpcyBub3Qgb24uCistIChCT09MKW5lZWRzUGFuZWxUb0Jl
Y29tZUtleQoreworICAgIHJldHVybiBZRVM7Cit9CisKKy8vIFV0aWxpdHkgZnVuY3Rpb24gdG8g
bWFrZSBzdXJlIHdlIGRvbid0IHJldHVybiBhbnl0aGluZyB0aHJvdWdoIHRoZSBOU1RleHRJbnB1
dAorLy8gQVBJIHdoZW4gYW4gZWRpdGFibGUgcmVnaW9uIGlzIG5vdCBjdXJyZW50bHkgZm9jdXNl
ZC4KK3N0YXRpYyBCT09MIGlzVGV4dElucHV0KEZyYW1lKiBjb3JlRnJhbWUpCit7CisgICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkgJiYgY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKK30KKworc3RhdGljIEJP
T0wgaXNJblBhc3N3b3JkRmllbGQoRnJhbWUqIGNvcmVGcmFtZSkKK3sKKyAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNzd29yZEZpZWxkKCk7Cit9
CisKKy0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKK3sKKyAgICBOU1NlbGVjdGlvbkRpcmVj
dGlvbiBkaXJlY3Rpb24gPSBOU0RpcmVjdFNlbGVjdGlvbjsKKyAgICBpZiAoIVtbc2VsZiBfd2Vi
Vmlld10gX2lzUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKKyAgICAgICAgZGlyZWN0aW9u
ID0gW1tzZWxmIHdpbmRvd10ga2V5Vmlld1NlbGVjdGlvbkRpcmVjdGlvbl07CisKKyAgICBbc2Vs
ZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKKyAgICBbc2VsZiBfdXBkYXRlRm9udFBh
bmVsXTsKKyAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBCT09MIGV4cG9zZUlucHV0
Q29udGV4dCA9IGlzVGV4dElucHV0KGZyYW1lKSAmJiAhaXNJblBhc3N3b3JkRmllbGQoZnJhbWUp
OworICAgIGlmIChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29u
dGV4dCkgeworICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID0gZXhwb3NlSW5w
dXRDb250ZXh0OworICAgICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107CisgICAgfQorCisgICAg
ZnJhbWUtPmVkaXRvcigpLT5zZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UodHJ1ZSk7CisKKyAg
ICBpZiAoZGlyZWN0aW9uID09IE5TRGlyZWN0U2VsZWN0aW9uKQorICAgICAgICByZXR1cm4gWUVT
OworCisgICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAg
ICAgICByZXR1cm4gWUVTOworCisgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEZvY3Vz
ZWRGcmFtZShmcmFtZSk7CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpKQorICAgICAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7CisgICAgcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPnNldEluaXRpYWxGb2N1cyhkaXJlY3Rpb24gPT0gTlNTZWxlY3Rp
bmdOZXh0ID8gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkIDogRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+Y3VycmVudEtleWJvYXJkRXZlbnQoKS5nZXQoKSk7CisgICAgcmV0dXJuIFlF
UzsKK30KKworLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgoreworICAgIEJPT0wgcmVzaWdu
ID0gW3N1cGVyIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKKyAgICBpZiAocmVzaWduKSB7CisgICAg
ICAgIF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKKyAgICAgICAgW19w
cml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9d
OworICAgICAgICBpZiAoIVtzZWxmIG1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uXSkgeyAKKyAg
ICAgICAgICAgIFtzZWxmIGRlc2VsZWN0QWxsXTsKKyAgICAgICAgICAgIGlmICghW1tzZWxmIF93
ZWJWaWV3XSBfaXNQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdKQorICAgICAgICAgICAgICAg
IFtzZWxmIGNsZWFyRm9jdXNdOworICAgICAgICB9CisgICAgICAgIFtzZWxmIF91cGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGVdOworICAgICAgICBfcHJpdmF0ZS0+cmVzaWduaW5nRmlyc3RSZXNw
b25kZXIgPSBOTzsKKyAgICB9CisgICAgcmV0dXJuIHJlc2lnbjsKK30KKworLSAodm9pZClzZXRE
YXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZSAKK3sKKyAgICBBU1NFUlQoZGF0
YVNvdXJjZSk7CisgICAgaWYgKF9wcml2YXRlLT5kYXRhU291cmNlICE9IGRhdGFTb3VyY2UpIHsK
KyAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+Y2xvc2VkKTsKKyAgICAgICAgQk9PTCBoYWREYXRh
U291cmNlID0gX3ByaXZhdGUtPmRhdGFTb3VyY2UgIT0gbmlsOworCisgICAgICAgIFtkYXRhU291
cmNlIHJldGFpbl07CisgICAgICAgIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSByZWxlYXNlXTsKKyAg
ICAgICAgX3ByaXZhdGUtPmRhdGFTb3VyY2UgPSBkYXRhU291cmNlOworICAgICAgICBbX3ByaXZh
dGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpkYXRhU291cmNlXTsKKworICAgICAg
ICBpZiAoIWhhZERhdGFTb3VyY2UpCisgICAgICAgICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2Jz
ZXJ2ZXJdOworICAgIH0KK30KKworLSAodm9pZClkYXRhU291cmNlVXBkYXRlZDooV2ViRGF0YVNv
dXJjZSAqKWRhdGFTb3VyY2UKK3sKK30KKworLy8gVGhpcyBpcyBhbiBvdmVycmlkZSBvZiBhbiBO
U0NvbnRyb2wgbWV0aG9kIHRoYXQgd2FudHMgdG8gcmVwYWludCB0aGUgZW50aXJlIHZpZXcgd2hl
biB0aGUgd2luZG93IHJlc2lnbnMvYmVjb21lcworLy8ga2V5LiAgV2ViSFRNTFZpZXcgaXMgYW4g
TlNDb250cm9sIG9ubHkgYmVjYXVzZSBpdCBob3N0cyBOU0NlbGxzIHRoYXQgYXJlIHBhaW50ZWQg
YnkgV2ViQ29yZSdzIEFxdWEgdGhlbWUKKy8vIHJlbmRlcmVyIChhbmQgdGhvc2UgY2VsbHMgbXVz
dCBiZSBob3N0ZWQgYnkgYW4gZW5jbG9zaW5nIE5TQ29udHJvbCBpbiBvcmRlciB0byBwYWludCBw
cm9wZXJseSkuCistICh2b2lkKXVwZGF0ZUNlbGw6KE5TQ2VsbCopY2VsbAoreworfQorCisvLyBE
b2VzIHNldE5lZWRzRGlzcGxheTpOTyBhcyBhIHNpZGUgZWZmZWN0IHdoZW4gcHJpbnRpbmcgaXMg
ZW5kaW5nLgorLy8gcGFnZVdpZHRoICE9IDAgaW1wbGllcyB3ZSB3aWxsIHJlbGF5b3V0IHRvIGEg
bmV3IHdpZHRoCistICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFn
ZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFn
ZVdpZHRoIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCit7CisgICAgV2ViRnJh
bWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAgICBOU0FycmF5ICpzdWJmcmFtZXMgPSBbZnJh
bWUgY2hpbGRGcmFtZXNdOworICAgIHVuc2lnbmVkIG4gPSBbc3ViZnJhbWVzIGNvdW50XTsKKyAg
ICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgIT0gbjsgKytpKSB7CisgICAgICAgIFdl
YkZyYW1lICpzdWJmcmFtZSA9IFtzdWJmcmFtZXMgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAg
V2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbc3ViZnJhbWUgZnJhbWVWaWV3XTsKKyAgICAgICAg
aWYgKFtbc3ViZnJhbWUgX2RhdGFTb3VyY2VdIF9pc0RvY3VtZW50SFRNTF0pIHsKKyAgICAgICAg
ICAgIFsoV2ViSFRNTFZpZXcgKilbZnJhbWVWaWV3IGRvY3VtZW50Vmlld10gX3NldFByaW50aW5n
OnByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRq
dXN0Vmlld1NpemU6YWRqdXN0Vmlld1NpemVdOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KHByaW50aW5nICE9IF9wcml2YXRlLT5wcmludGluZykgeworICAgICAgICBbX3ByaXZhdGUtPnBh
Z2VSZWN0cyByZWxlYXNlXTsKKyAgICAgICAgX3ByaXZhdGUtPnBhZ2VSZWN0cyA9IG5pbDsKKyAg
ICAgICAgX3ByaXZhdGUtPnByaW50aW5nID0gcHJpbnRpbmc7CisgICAgICAgIGlmICghcHJpbnRp
bmcpCisgICAgICAgICAgICBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhhbiA9IE5POworICAg
ICAgICBbc2VsZiBzZXROZWVkc1RvQXBwbHlTdHlsZXM6WUVTXTsKKyAgICAgICAgW3NlbGYgc2V0
TmVlZHNMYXlvdXQ6WUVTXTsKKyAgICAgICAgW3NlbGYgbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRo
Om1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOm1heFBhZ2VXaWR0aCBhZGp1c3RpbmdWaWV3
U2l6ZTphZGp1c3RWaWV3U2l6ZV07CisgICAgICAgIGlmICghcHJpbnRpbmcpIHsKKyAgICAgICAg
ICAgIC8vIENhbid0IGRvIHRoaXMgd2hlbiBzdGFydGluZyBwcmludGluZyBvciBuZXN0ZWQgcHJp
bnRpbmcgd29uJ3Qgd29yaywgc2VlIDM0OTE0MjcuCisgICAgICAgICAgICBbc2VsZiBzZXROZWVk
c0Rpc3BsYXk6Tk9dOworICAgICAgICB9CisgICAgfQorfQorCistIChCT09MKWNhblByaW50SGVh
ZGVyc0FuZEZvb3RlcnMKK3sKKyAgICByZXR1cm4gWUVTOworfQorCisvLyBUaGlzIGlzIG5lZWRl
ZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHdlYnZpZXcgaXMgZW1iZWRkZWQgaW4gdGhlIHZpZXcg
dGhhdCdzIGJlaW5nIHByaW50ZWQuCisvLyBJdCBzaG91bGRuJ3QgYmUgY2FsbGVkIHdoZW4gdGhl
IHdlYnZpZXcgaXMgYmVpbmcgcHJpbnRlZCBkaXJlY3RseS4KKy0gKHZvaWQpYWRqdXN0UGFnZUhl
aWdodE5ldzooQ0dGbG9hdCAqKW5ld0JvdHRvbSB0b3A6KENHRmxvYXQpb2xkVG9wIGJvdHRvbToo
Q0dGbG9hdClvbGRCb3R0b20gbGltaXQ6KENHRmxvYXQpYm90dG9tTGltaXQKK3sKKyAgICAvLyBU
aGlzIGhlbHBzIHdoZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9jZXNz
LgorICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGlu
ZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KKyAgICBCT09MIHdhc0luUHJp
bnRpbmdNb2RlID0gX3ByaXZhdGUtPnByaW50aW5nOworICAgIGlmICghd2FzSW5QcmludGluZ01v
ZGUpCisgICAgICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBm
IG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyAgICBmbG9hdCBu
ZXdCb3R0b21GbG9hdCA9ICpuZXdCb3R0b207CisgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSktPnZpZXcoKSkKKyAgICAgICAgdmlldy0+YWRqdXN0UGFnZUhlaWdo
dCgmbmV3Qm90dG9tRmxvYXQsIG9sZFRvcCwgb2xkQm90dG9tLCBib3R0b21MaW1pdCk7CisKKyNp
ZmRlZiBfX0xQNjRfXworICAgIC8vIElmIHRoZSBuZXcgYm90dG9tIGlzIGVxdWFsIHRvIHRoZSBv
bGQgYm90dG9tICh3aGVuIGJvdGggYXJlIHRyZWF0ZWQgYXMgZmxvYXRzKSwgd2UganVzdCBjb3B5
CisgICAgLy8gb2xkQm90dG9tIG92ZXIgdG8gbmV3Qm90dG9tLiBUaGlzIHByZXZlbnRzIHJvdW5k
aW5nIGVycm9ycyB0aGF0IGNhbiBvY2N1ciB3aGVuIGNvbnZlcnRpbmcgbmV3Qm90dG9tRmxvYXQg
dG8gYSBkb3VibGUuCisgICAgaWYgKGZhYnMoKGZsb2F0KW9sZEJvdHRvbSAtIG5ld0JvdHRvbUZs
b2F0KSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxvbigpKSAKKyAgICAgICAg
Km5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgKm5ld0Jv
dHRvbSA9IG5ld0JvdHRvbUZsb2F0OworICAgIAorICAgIGlmICghd2FzSW5QcmludGluZ01vZGUp
IHsKKyAgICAgICAgTlNQcmludE9wZXJhdGlvbiAqY3VycmVuUHJpbnRPcGVyYXRpb24gPSBbTlNQ
cmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKKyAgICAgICAgaWYgKGN1cnJlblByaW50
T3BlcmF0aW9uKQorICAgICAgICAgICAgLy8gZGVsYXkgX3NldFByaW50aW5nOk5PIHVudGlsIGJh
Y2sgdG8gbWFpbiBsb29wIGFzIHRoaXMgbWV0aG9kIG1heSBnZXQgY2FsbGVkIHJlcGVhdGVkbHkK
KyAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQ
cmludE1vZGU6KSB3aXRoT2JqZWN0OmN1cnJlblByaW50T3BlcmF0aW9uIGFmdGVyRGVsYXk6MF07
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIG5vdCBzdXJlIGlmIHRoaXMgaXMgYWN0dWFs
bHkgZXZlciBpbnZva2VkLCBpdCBwcm9iYWJseSBzaG91bGRuJ3QgYmUKKyAgICAgICAgICAgIFtz
ZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0
aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKKyAgICB9Cit9CisKKy0gKGZsb2F0KV9hdmFpbGFi
bGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9w
ZXJhdGlvbgoreworICAgIE5TUHJpbnRJbmZvICpwcmludEluZm8gPSBbcHJpbnRPcGVyYXRpb24g
cHJpbnRJbmZvXTsKKyAgICByZXR1cm4gW3ByaW50SW5mbyBwYXBlclNpemVdLndpZHRoIC0gW3By
aW50SW5mbyBsZWZ0TWFyZ2luXSAtIFtwcmludEluZm8gcmlnaHRNYXJnaW5dOworfQorCistIChm
bG9hdClfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjooTlNQcmludE9wZXJhdGlvbiAqKXBy
aW50T3BlcmF0aW9uCit7CisgICAgZmxvYXQgdmlld1dpZHRoID0gTlNXaWR0aChbc2VsZiBib3Vu
ZHNdKTsKKyAgICBpZiAodmlld1dpZHRoIDwgMSkgeworICAgICAgICBMT0dfRVJST1IoIiVAIGhh
cyBubyB3aWR0aCB3aGVuIHByaW50aW5nIiwgc2VsZik7CisgICAgICAgIHJldHVybiAxLjBmOwor
ICAgIH0KKworICAgIGZsb2F0IHVzZXJTY2FsZUZhY3RvciA9IFtwcmludE9wZXJhdGlvbiBfd2Vi
X3BhZ2VTZXR1cFNjYWxlRmFjdG9yXTsKKyAgICBmbG9hdCBtYXhTaHJpbmtUb0ZpdFNjYWxlRmFj
dG9yID0gMS4wZiAvIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKKyAgICBmbG9hdCBzaHJp
bmtUb0ZpdFNjYWxlRmFjdG9yID0gW3NlbGYgX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9w
ZXJhdGlvbjpwcmludE9wZXJhdGlvbl0vdmlld1dpZHRoOworICAgIGZsb2F0IHNocmlua1RvQXZv
aWRPcnBoYW4gPSBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhhbiA/ICgxLjBmIC8gUHJpbnRp
bmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50KSA6IDEuMGY7CisgICAgcmV0dXJuIHVzZXJTY2FsZUZh
Y3RvciAqIE1BWChtYXhTaHJpbmtUb0ZpdFNjYWxlRmFjdG9yLCBzaHJpbmtUb0ZpdFNjYWxlRmFj
dG9yKSAqIHNocmlua1RvQXZvaWRPcnBoYW47Cit9CisKKy8vIEZJWE1FIDM0OTEzNDQ6IFRoaXMg
aXMgYSBzZWNyZXQgQXBwS2l0LWludGVybmFsIG1ldGhvZCB0aGF0IHdlIG5lZWQgdG8gb3ZlcnJp
ZGUgaW4gb3JkZXIKKy8vIHRvIGdldCBvdXIgc2hyaW5rLXRvLWZpdCB0byB3b3JrIHdpdGggYSBj
dXN0b20gcGFnaW5hdGlvbiBzY2hlbWUuIFdlIGNhbiBkbyB0aGlzIGJldHRlcgorLy8gaWYgQXBw
S2l0IG1ha2VzIGl0IFNQSS9BUEkuCistIChDR0Zsb2F0KV9wcm92aWRlVG90YWxTY2FsZUZhY3Rv
ckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24gCit7
CisgICAgcmV0dXJuIFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOnByaW50T3Bl
cmF0aW9uXTsKK30KKworLy8gVGhpcyBpcyB1c2VkIGZvciBDYXJib24gcHJpbnRpbmcuIEF0IHNv
bWUgcG9pbnQgd2UgbWlnaHQgd2FudCB0byBtYWtlIHRoaXMgcHVibGljIEFQSS4KKy0gKHZvaWQp
c2V0UGFnZVdpZHRoRm9yUHJpbnRpbmc6KGZsb2F0KXBhZ2VXaWR0aAoreworICAgIFtzZWxmIF9z
ZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBm
IGFkanVzdFZpZXdTaXplOk5PXTsKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1Q
YWdlV2lkdGg6cGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6cGFnZVdpZHRoIGFkanVzdFZpZXdT
aXplOllFU107Cit9CisKKy0gKHZvaWQpX2VuZFByaW50TW9kZQoreworICAgIFtzZWxmIF9zZXRQ
cmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFk
anVzdFZpZXdTaXplOllFU107CisgICAgW1tzZWxmIHdpbmRvd10gc2V0QXV0b2Rpc3BsYXk6WUVT
XTsKK30KKworLSAodm9pZClfZGVsYXllZEVuZFByaW50TW9kZTooTlNQcmludE9wZXJhdGlvbiAq
KWluaXRpYXRpbmdPcGVyYXRpb24KK3sKKyAgICBBU1NFUlRfQVJHKGluaXRpYXRpbmdPcGVyYXRp
b24sIGluaXRpYXRpbmdPcGVyYXRpb24gIT0gbmlsKTsKKyAgICBOU1ByaW50T3BlcmF0aW9uICpj
dXJyZW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl07Cisg
ICAgaWYgKGluaXRpYXRpbmdPcGVyYXRpb24gPT0gY3VycmVudE9wZXJhdGlvbikgeworICAgICAg
ICAvLyBUaGUgcHJpbnQgb3BlcmF0aW9uIGlzIHN0aWxsIHVuZGVyd2F5LiBXZSBkb24ndCBleHBl
Y3QgdGhpcyB0byBldmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2VydCwgYnV0IHdlJ3JlCisgICAg
ICAgIC8vIGJlaW5nIGV4dHJhIHBhcmFub2lkIGhlcmUgc2luY2UgdGhlIHByaW50aW5nIGNvZGUg
aXMgc28gZnJhZ2lsZS4gRGVsYXkgdGhlIGNsZWFudXAKKyAgICAgICAgLy8gZnVydGhlci4KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
cjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRoT2JqZWN0OmluaXRpYXRpbmdP
cGVyYXRpb24gYWZ0ZXJEZWxheTowXTsKKyAgICB9IGVsc2UgaWYgKFtjdXJyZW50T3BlcmF0aW9u
IHZpZXddID09IHNlbGYpIHsKKyAgICAgICAgLy8gQSBuZXcgcHJpbnQgam9iIGhhcyBzdGFydGVk
LCBidXQgaXQgaXMgcHJpbnRpbmcgdGhlIHNhbWUgV2ViSFRNTFZpZXcgYWdhaW4uIFdlIGRvbid0
IGV4cGVjdAorICAgICAgICAvLyB0aGlzIHRvIGV2ZXIgaGFwcGVuLCBoZW5jZSB0aGUgYXNzZXJ0
LCBidXQgd2UncmUgYmVpbmcgZXh0cmEgcGFyYW5vaWQgaGVyZSBzaW5jZSB0aGUgcHJpbnRpbmcg
Y29kZSBpcyBzbworICAgICAgICAvLyBmcmFnaWxlLiBEbyBub3RoaW5nLCBiZWNhdXNlIHdlIGRv
bid0IHdhbnQgdG8gYnJlYWsgdGhlIHByaW50IGpvYiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MsIGFu
ZAorICAgICAgICAvLyB0aGUgcHJpbnQgam9iIGN1cnJlbnRseSBpbiBwcm9ncmVzcyBpcyByZXNw
b25zaWJsZSBmb3IgaXRzIG93biBjbGVhbnVwLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGUgcHJpbnQgam9iIHRoYXQga2lja2VkIG9m
ZiB0aGlzIGRlbGF5ZWQgY2FsbCBoYXMgZmluaXNoZWQsIGFuZCB0aGlzIHZpZXcgaXMgbm90IGJl
aW5nCisgICAgICAgIC8vIHByaW50ZWQgYWdhaW4uIFdlIGV4cGVjdCB0aGF0IG5vIG90aGVyIHBy
aW50IGpvYiBoYXMgc3RhcnRlZC4gU2luY2UgdGhpcyBkZWxheWVkIGNhbGwgd2Fzbid0CisgICAg
ICAgIC8vIGNhbmNlbGxlZCwgYmVnaW5Eb2N1bWVudCBhbmQgZW5kRG9jdW1lbnQgbXVzdCBub3Qg
aGF2ZSBiZWVuIGNhbGxlZCwgYW5kIHdlIG5lZWQgdG8gY2xlYW4gdXAKKyAgICAgICAgLy8gdGhl
IHByaW50IG1vZGUgaGVyZS4KKyAgICAgICAgQVNTRVJUKGN1cnJlbnRPcGVyYXRpb24gPT0gbmls
KTsKKyAgICAgICAgW3NlbGYgX2VuZFByaW50TW9kZV07CisgICAgfQorfQorCisvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiBwYWdlcyBhdmFpbGFibGUgZm9yIHByaW50aW5nCistIChCT09MKWtub3dz
UGFnZVJhbmdlOihOU1JhbmdlUG9pbnRlcilyYW5nZQoreworICAgIC8vIE11c3QgZG8gdGhpcyBl
eHBsaWNpdCBkaXNwbGF5IGhlcmUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZSB2aWV3IG1pZ2h0IHJl
ZGlzcGxheSB3aGlsZSB0aGUgcHJpbnQKKyAgICAvLyBzaGVldCB3YXMgdXAsIHVzaW5nIHByaW50
ZXIgZm9udHMgKGFuZCBsb29raW5nIGRpZmZlcmVudCkuCisgICAgW3NlbGYgZGlzcGxheUlmTmVl
ZGVkXTsKKyAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpOT107CisgICAgCisgICAg
Ly8gSWYgd2UgYXJlIGEgZnJhbWVzZXQganVzdCBwcmludCB3aXRoIHRoZSBsYXlvdXQgd2UgaGF2
ZSBvbnNjcmVlbiwgb3RoZXJ3aXNlIHJlbGF5b3V0CisgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBw
YXBlciBzaXplCisgICAgZmxvYXQgbWluTGF5b3V0V2lkdGggPSAwLjBmOworICAgIGZsb2F0IG1h
eExheW91dFdpZHRoID0gMC4wZjsKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBOTzsKKyAgICBpZiAoIWZyYW1l
LT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFtZVNldCgpKSB7CisgICAg
ICAgIGZsb2F0IHBhcGVyV2lkdGggPSBbc2VsZiBfYXZhaWxhYmxlUGFwZXJXaWR0aEZvclByaW50
T3BlcmF0aW9uOltOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dXTsKKyAgICAgICAg
bWluTGF5b3V0V2lkdGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9y
OworICAgICAgICBtYXhMYXlvdXRXaWR0aCA9IHBhcGVyV2lkdGggKiBQcmludGluZ01heGltdW1T
aHJpbmtGYWN0b3I7CisgICAgfQorICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBh
Z2VXaWR0aDptaW5MYXlvdXRXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOm1heExheW91dFdpZHRoIGFk
anVzdFZpZXdTaXplOllFU107IC8vIHdpbGwgcmVsYXlvdXQKKyAgICBOU1ByaW50T3BlcmF0aW9u
ICpwcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dOwor
ICAgIC8vIENlcnRhaW4gdHlwZXMgb2YgZXJyb3JzLCBpbmNsdWRpbmcgaW52YWxpZCBwYWdlIHJh
bmdlcywgY2FuIGNhdXNlIGJlZ2luRG9jdW1lbnQgYW5kCisgICAgLy8gZW5kRG9jdW1lbnQgdG8g
YmUgc2tpcHBlZCBhZnRlciB3ZSd2ZSBwdXQgb3Vyc2VsdmVzIGluIHByaW50IG1vZGUgKHNlZSA0
MTQ1OTA1KS4gSW4gdGhvc2UgY2FzZXMKKyAgICAvLyB3ZSBuZWVkIHRvIGdldCBvdXQgb2YgcHJp
bnQgbW9kZSB3aXRob3V0IHJlbHlpbmcgb24gYW55IG1vcmUgY2FsbGJhY2tzIGZyb20gdGhlIHBy
aW50aW5nIG1lY2hhbmlzbS4KKyAgICAvLyBJZiB3ZSBnZXQgYXMgZmFyIGFzIGJlZ2luRG9jdW1l
bnQgd2l0aG91dCB0cm91YmxlLCB0aGVuIHRoaXMgZGVsYXllZCByZXF1ZXN0IHdpbGwgYmUgY2Fu
Y2VsbGVkLgorICAgIC8vIElmIG5vdCBjYW5jZWxsZWQsIHRoaXMgZGVsYXllZCBjYWxsIHdpbGwg
YmUgaW52b2tlZCBpbiB0aGUgbmV4dCBwYXNzIHRocm91Z2ggdGhlIG1haW4gZXZlbnQgbG9vcCwK
KyAgICAvLyB3aGljaCBpcyBhZnRlciBiZWdpbkRvY3VtZW50IGFuZCBlbmREb2N1bWVudCB3b3Vs
ZCBiZSBjYWxsZWQuCisgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXll
ZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6cHJpbnRPcGVyYXRpb24gYWZ0ZXJEZWxheTowXTsK
KyAgICBbW3NlbGYgX3dlYlZpZXddIF9hZGp1c3RQcmludGluZ01hcmdpbnNGb3JIZWFkZXJBbmRG
b290ZXJdOworICAgIAorICAgIC8vIFRoZXJlIGlzIGEgdGhlb3JldGljYWwgY2hhbmNlIHRoYXQg
c29tZW9uZSBjb3VsZCBkbyBzb21lIGRyYXdpbmcgYmV0d2VlbiBoZXJlIGFuZCBlbmREb2N1bWVu
dCwKKyAgICAvLyBpZiBzb21ldGhpbmcgY2F1c2VkIHNldE5lZWRzRGlzcGxheSBhZnRlciB0aGlz
IHBvaW50LiBJZiBzbywgaXQncyBub3QgYSBiaWcgdHJhZ2VkeSwgYmVjYXVzZQorICAgIC8vIHlv
dSdkIHNpbXBseSBzZWUgdGhlIHByaW50ZXIgZm9udHMgb24gc2NyZWVuLiBBcyBvZiB0aGlzIHdy
aXRpbmcsIHRoaXMgZG9lcyBub3QgaGFwcGVuIHdpdGggU2FmYXJpLgorCisgICAgcmFuZ2UtPmxv
Y2F0aW9uID0gMTsKKyAgICBmbG9hdCB0b3RhbFNjYWxlRmFjdG9yID0gW3NlbGYgX3NjYWxlRmFj
dG9yRm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRpb25dOworICAgIGZsb2F0IHVzZXJTY2Fs
ZUZhY3RvciA9IFtwcmludE9wZXJhdGlvbiBfd2ViX3BhZ2VTZXR1cFNjYWxlRmFjdG9yXTsKKyAg
ICBbX3ByaXZhdGUtPnBhZ2VSZWN0cyByZWxlYXNlXTsKKyAgICBmbG9hdCBmdWxsUGFnZUhlaWdo
dCA9IGZsb29yZihbc2VsZiBfY2FsY3VsYXRlUHJpbnRIZWlnaHRdL3RvdGFsU2NhbGVGYWN0b3Ip
OworICAgIE5TQXJyYXkgKm5ld1BhZ2VSZWN0cyA9IFtbc2VsZiBfZnJhbWVdIF9jb21wdXRlUGFn
ZVJlY3RzV2l0aFByaW50V2lkdGhTY2FsZUZhY3Rvcjp1c2VyU2NhbGVGYWN0b3IKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpbnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHRdOworICAgIAorICAgIC8vIEFwcEtp
dCBnZXRzIGFsbCBtZXNzZWQgdXAgaWYgeW91IGdpdmUgaXQgYSB6ZXJvLWxlbmd0aCBwYWdlIGNv
dW50IChzZWUgMzU3NjMzNCksIHNvIGlmIHdlCisgICAgLy8gaGl0IHRoYXQgY2FzZSB3ZSdsbCBw
YXNzIGFsb25nIGEgZGVnZW5lcmF0ZSAxIHBpeGVsIHNxdWFyZSB0byBwcmludC4gVGhpcyB3aWxs
IHByaW50CisgICAgLy8gYSBibGFuayBwYWdlICh3aXRoIGNvcnJlY3QtbG9va2luZyBoZWFkZXIg
YW5kIGZvb3RlciBpZiB0aGF0IG9wdGlvbiBpcyBvbiksIHdoaWNoIG1hdGNoZXMKKyAgICAvLyB0
aGUgYmVoYXZpb3Igb2YgSUUgYW5kIENhbWlubyBhdCBsZWFzdC4KKyAgICBpZiAoW25ld1BhZ2VS
ZWN0cyBjb3VudF0gPT0gMCkKKyAgICAgICAgbmV3UGFnZVJlY3RzID0gW05TQXJyYXkgYXJyYXlX
aXRoT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV1d
OworICAgIGVsc2UgaWYgKFtuZXdQYWdlUmVjdHMgY291bnRdID4gMSkgeworICAgICAgICAvLyBJ
ZiB0aGUgbGFzdCBwYWdlIGlzIGEgc2hvcnQgb3JwaGFuLCB0cnkgYWRqdXN0aW5nIHRoZSBwcmlu
dCBoZWlnaHQgc2xpZ2h0bHkgdG8gc2VlIGlmIHRoaXMgd2lsbCBzcXVlZXplIHRoZQorICAgICAg
ICAvLyBjb250ZW50IG9udG8gb25lIGZld2VyIHBhZ2UuIElmIGl0IGRvZXMsIHVzZSB0aGUgYWRq
dXN0ZWQgc2NhbGUuIElmIG5vdCwgdXNlIHRoZSBvcmlnaW5hbCBzY2FsZS4KKyAgICAgICAgZmxv
YXQgbGFzdFBhZ2VIZWlnaHQgPSBOU0hlaWdodChbW25ld1BhZ2VSZWN0cyBsYXN0T2JqZWN0XSBy
ZWN0VmFsdWVdKTsKKyAgICAgICAgaWYgKGxhc3RQYWdlSGVpZ2h0L2Z1bGxQYWdlSGVpZ2h0IDwg
TGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0aW8pIHsKKyAgICAgICAgICAgIE5TQXJyYXkgKmFkanVz
dGVkUGFnZVJlY3RzID0gW1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRX
aWR0aFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpbnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHQqUHJpbnRpbmdPcnBoYW5TaHJpbmtBZGp1
c3RtZW50XTsKKyAgICAgICAgICAgIC8vIFVzZSB0aGUgYWRqdXN0ZWQgcmVjdHMgb25seSBpZiB0
aGUgcGFnZSBjb3VudCB3ZW50IGRvd24KKyAgICAgICAgICAgIGlmIChbYWRqdXN0ZWRQYWdlUmVj
dHMgY291bnRdIDwgW25ld1BhZ2VSZWN0cyBjb3VudF0pIHsKKyAgICAgICAgICAgICAgICBuZXdQ
YWdlUmVjdHMgPSBhZGp1c3RlZFBhZ2VSZWN0czsKKyAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+
YXZvaWRpbmdQcmludE9ycGhhbiA9IFlFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gW25ld1BhZ2VSZWN0cyByZXRhaW5d
OworICAgIAorICAgIHJhbmdlLT5sZW5ndGggPSBbX3ByaXZhdGUtPnBhZ2VSZWN0cyBjb3VudF07
CisgICAgCisgICAgcmV0dXJuIFlFUzsKK30KKworLy8gUmV0dXJuIHRoZSBkcmF3aW5nIHJlY3Rh
bmdsZSBmb3IgYSBwYXJ0aWN1bGFyIHBhZ2UgbnVtYmVyCistIChOU1JlY3QpcmVjdEZvclBhZ2U6
KE5TSW50ZWdlcilwYWdlCit7CisgICAgcmV0dXJuIFtbX3ByaXZhdGUtPnBhZ2VSZWN0cyBvYmpl
Y3RBdEluZGV4OnBhZ2UgLSAxXSByZWN0VmFsdWVdOworfQorCistICh2b2lkKWRyYXdQYWdlQm9y
ZGVyV2l0aFNpemU6KE5TU2l6ZSlib3JkZXJTaXplCit7CisgICAgQVNTRVJUKE5TRXF1YWxTaXpl
cyhib3JkZXJTaXplLCBbW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dIHByaW50
SW5mb10gcGFwZXJTaXplXSkpOyAgICAKKyAgICBbW3NlbGYgX3dlYlZpZXddIF9kcmF3SGVhZGVy
QW5kRm9vdGVyXTsKK30KKworLSAodm9pZCliZWdpbkRvY3VtZW50Cit7CisgICAgQHRyeSB7Cisg
ICAgICAgIC8vIEZyb20gbm93IG9uIHdlJ2xsIGdldCBhIGNoYW5jZSB0byBjYWxsIF9lbmRQcmlu
dE1vZGUgaW4gZWl0aGVyIGJlZ2luRG9jdW1lbnQgb3IKKyAgICAgICAgLy8gZW5kRG9jdW1lbnQs
IHNvIHdlIGNhbiBjYW5jZWwgdGhlICJqdXN0IGluIGNhc2UiIHBlbmRpbmcgY2FsbC4KKyAgICAg
ICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3RzV2l0aFRhcmdldDpzZWxm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0
b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpbTlNQcmludE9wZXJhdGlvbiBj
dXJyZW50T3BlcmF0aW9uXV07CisgICAgICAgIFtzdXBlciBiZWdpbkRvY3VtZW50XTsKKyAgICB9
IEBjYXRjaCAoTlNFeGNlcHRpb24gKmxvY2FsRXhjZXB0aW9uKSB7CisgICAgICAgIC8vIEV4Y2Vw
dGlvbiBkdXJpbmcgW3N1cGVyIGJlZ2luRG9jdW1lbnRdIG1lYW5zIHRoYXQgZW5kRG9jdW1lbnQg
d2lsbCBub3QgZ2V0IGNhbGxlZCwKKyAgICAgICAgLy8gc28gd2UgbmVlZCB0byBjbGVhbiB1cCBv
dXIgInByaW50IG1vZGUiIGhlcmUuCisgICAgICAgIFtzZWxmIF9lbmRQcmludE1vZGVdOworICAg
IH0KK30KKworLSAodm9pZCllbmREb2N1bWVudAoreworICAgIFtzdXBlciBlbmREb2N1bWVudF07
CisgICAgLy8gTm90ZSBzYWRseSBhdCB0aGlzIHBvaW50IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl0gaXMgc3RpbGwgTk8gCisgICAgW3NlbGYgX2VuZFBy
aW50TW9kZV07Cit9CisKKy0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1
biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBt
aWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2lu
ZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEg
cHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWlu
XSBhdXRvcmVsZWFzZV07CisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0
b3IgPSBzZWxmOworICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5r
ZXlEb3duRXZlbnQgPT0gZXZlbnQpOworCisgICAgQk9PTCBjYWxsU3VwZXIgPSBOTzsKKworICAg
IFtfcHJpdmF0ZS0+a2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5rZXlEb3du
RXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKKworICAgIEJPT0wgY29tcGxldGlvblBvcHVwV2FzT3Bl
biA9IF9wcml2YXRlLT5jb21wQ29udHJvbGxlciAmJiBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVy
IHBvcHVwV2luZG93SXNPcGVuXTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKSB7CisgICAgICAgIC8v
IFdlYkNvcmUgcHJvY2Vzc2VkIGEga2V5IGV2ZW50LCBiYWlsIG9uIGFueSBwcmVleGlzdGluZyBj
b21wbGV0ZTogVUkKKyAgICAgICAgaWYgKGNvbXBsZXRpb25Qb3B1cFdhc09wZW4pCisgICAgICAg
ICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92
ZUxlZnQ6Tk9dOworICAgIH0gZWxzZSBpZiAoIV9wcml2YXRlLT5jb21wQ29udHJvbGxlciB8fCAh
W19wcml2YXRlLT5jb21wQ29udHJvbGxlciBmaWx0ZXJLZXlEb3duOmV2ZW50XSkgeworICAgICAg
ICAvLyBOb3QgY29uc3VtZWQgYnkgY29tcGxldGU6IHBvcHVwIHdpbmRvdworICAgICAgICBbX3By
aXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9d
OworICAgICAgICBjYWxsU3VwZXIgPSBZRVM7CisgICAgfQorICAgIGlmIChjYWxsU3VwZXIpCisg
ICAgICAgIFtzdXBlciBrZXlEb3duOmV2ZW50XTsKKyAgICBlbHNlCisgICAgICAgIFtOU0N1cnNv
ciBzZXRIaWRkZW5VbnRpbE1vdXNlTW92ZXM6WUVTXTsKK30KKworLSAodm9pZClrZXlVcDooTlNF
dmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcg
dG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBm
ZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcg
YW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRz
IHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2Rl
LgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBCT09MIGV2ZW50V2Fz
U2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsKKworICAg
IFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKGNvcmVGcmFtZSAmJiAh
ZXZlbnRXYXNTZW50VG9XZWJDb3JlKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5rZXlFdmVudChldmVudCk7CisgICAgZWxzZQorICAgICAgICBbc3VwZXIga2V5VXA6ZXZlbnRd
OworfQorCistICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdo
dCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwor
ICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBh
dXRvcmVsZWFzZV07CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICBpZiAoY29yZUZyYW1lKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKKyAgICAKKyAgICBSZXRhaW5QdHI8V2Vi
SFRNTFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOworCisgICAgdW5zaWduZWQgc2hvcnQga2V5
Q29kZSA9IFtldmVudCBrZXlDb2RlXTsKKworICAgIC8vRG9uJ3QgbWFrZSBhbiBldmVudCBmcm9t
IHRoZSBudW0gbG9jayBhbmQgZnVuY3Rpb24ga2V5cworICAgIGlmIChjb3JlRnJhbWUgJiYga2V5
Q29kZSAhPSAwICYmIGtleUNvZGUgIT0gMTAgJiYga2V5Q29kZSAhPSA2MykgeworICAgICAgICBj
b3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnQo
ZXZlbnQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgW3N1cGVyIGZs
YWdzQ2hhbmdlZDpldmVudF07Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKK3sKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJpYnV0ZV0pIHsKKyAgICAg
ICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAg
ICAgIGlmIChhY2NUcmVlKQorICAgICAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9i
amVjdDphY2NUcmVlXTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgcmV0dXJuIFtz
dXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRlTmFtZV07Cit9CisKKy0g
KGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50Cit7CisgICAgaWQgYWNjVHJlZSA9IFtb
c2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWYgKGFjY1RyZWUpCisgICAg
ICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudF07CisgICAg
cmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKWFjY2Vzc2liaWxpdHlIaXRUZXN0OihOU1BvaW50KXBv
aW50Cit7CisgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJl
ZV07CisgICAgaWYgKGFjY1RyZWUpIHsKKyAgICAgICAgTlNQb2ludCB3aW5kb3dDb29yZCA9IFtb
c2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6cG9pbnRdOworICAgICAgICByZXR1cm4g
W2FjY1RyZWUgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6W3NlbGYgY29udmVydFBvaW50OndpbmRvd0Nv
b3JkIGZyb21WaWV3Om5pbF1dOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQp
X2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Cit7CisgICAg
aWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07CisgICAgaWYg
KCFhY2NUcmVlKQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICBpZCBwYXJlbnQgPSBbYWNjVHJl
ZSBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6c3Vidmlld107CisgICAgaWYgKCFwYXJl
bnQpCisgICAgICAgIHJldHVybiBzZWxmOworICAgIHJldHVybiBwYXJlbnQ7Cit9CisKKy0gKHZv
aWQpY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVyCit7CisgICAgQ09NTUFO
RF9QUk9MT0dVRQorCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pKQorICAgICAgICBjb3JlRnJhbWUtPnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6
OmFsaWduQ2VudGVyQWx3YXlzKTsKK30KKworLSAoTlNEYXRhICopX3NlbGVjdGlvblN0YXJ0Rm9u
dEF0dHJpYnV0ZXNBc1JURgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAieCIKKyAgICAgICAgYXR0cmlidXRlczpjb3Jl
RnJhbWUgPyBjb3JlRnJhbWUtPmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0aW9uU3RhcnQoKSA6IG5p
bF07CisgICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKKyAgICBbc3RyaW5n
IHJlbGVhc2VdOworICAgIHJldHVybiBkYXRhOworfQorCistIChOU0RpY3Rpb25hcnkgKilfZm9u
dEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmQKK3sKKyAgICBOU1Bhc3RlYm9hcmQgKmZvbnRQ
YXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6TlNGb250UGJvYXJk
XTsKKyAgICBpZiAoZm9udFBhc3RlYm9hcmQgPT0gbmlsKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIE5TRGF0YSAqZGF0YSA9IFtmb250UGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU0ZvbnRQYm9h
cmRUeXBlXTsKKyAgICBpZiAoZGF0YSA9PSBuaWwgfHwgW2RhdGEgbGVuZ3RoXSA9PSAwKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIC8vIE5TVGV4dFZpZXcgZG9lcyBzb21ldGhpbmcgbW9yZSBl
ZmZpY2llbnQgYnkgcGFyc2luZyB0aGUgYXR0cmlidXRlcyBvbmx5LCBidXQgdGhhdCdzIG5vdCBh
dmFpbGFibGUgaW4gQVBJLgorICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpkYXRhIGRvY3VtZW50QXR0cmlidXRl
czpOVUxMXSBhdXRvcmVsZWFzZV07CisgICAgaWYgKHN0cmluZyA9PSBuaWwgfHwgW3N0cmluZyBs
ZW5ndGhdID09IDApCisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtzdHJpbmcgZm9u
dEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpXTsKK30KKworLSAoRE9NQ1NTU3R5
bGVEZWNsYXJhdGlvbiAqKV9lbXB0eVN0eWxlCit7CisgICAgcmV0dXJuIFtbW3NlbGYgX2ZyYW1l
XSBET01Eb2N1bWVudF0gY3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbl07Cit9CisKKy0gKE5TU3Ry
aW5nICopX2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcgoreworICAgIE5TQ29sb3IgKnJn
YkNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9y
U3BhY2VdOworICAgIC8vIEZJWE1FOiBJZiBjb2xvciBpcyBub24tbmlsIGFuZCByZ2JDb2xvciBp
cyBuaWwsIHRoYXQgbWVhbnMgd2UgZ290IHNvbWUga2luZAorICAgIC8vIG9mIGZhbmN5IGNvbG9y
IHRoYXQgY2FuJ3QgYmUgY29udmVydGVkIHRvIFJHQi4gQ2hhbmdpbmcgdGhhdCB0byAidHJhbnNw
YXJlbnQiCisgICAgLy8gbWlnaHQgbm90IGJlIGdyZWF0LCBidXQgaXQncyBwcm9iYWJseSBPSy4K
KyAgICBpZiAocmdiQ29sb3IgPT0gbmlsKQorICAgICAgICByZXR1cm4gQCJ0cmFuc3BhcmVudCI7
CisgICAgZmxvYXQgciA9IFtyZ2JDb2xvciByZWRDb21wb25lbnRdOworICAgIGZsb2F0IGcgPSBb
cmdiQ29sb3IgZ3JlZW5Db21wb25lbnRdOworICAgIGZsb2F0IGIgPSBbcmdiQ29sb3IgYmx1ZUNv
bXBvbmVudF07CisgICAgZmxvYXQgYSA9IFtyZ2JDb2xvciBhbHBoYUNvbXBvbmVudF07CisgICAg
aWYgKGEgPT0gMCkKKyAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJlbnQiOworICAgIGlmIChyID09
IDAgJiYgZyA9PSAwICYmIGIgPT0gMCAmJiBhID09IDEpCisgICAgICAgIHJldHVybiBAImJsYWNr
IjsKKyAgICBpZiAociA9PSAxICYmIGcgPT0gMSAmJiBiID09IDEgJiYgYSA9PSAxKQorICAgICAg
ICByZXR1cm4gQCJ3aGl0ZSI7CisgICAgLy8gRklYTUU6IExvdHMgbW9yZSBuYW1lZCBjb2xvcnMu
IE1heWJlIHdlIGNvdWxkIHVzZSB0aGUgdGFibGUgaW4gV2ViQ29yZT8KKyAgICBpZiAoYSA9PSAx
KQorICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2IoJS4wZiwl
LjBmLCUuMGYpIiwgciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07CisgICAgcmV0dXJuIFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiYSglLjBmLCUuMGYsJS4wZiwlZikiLCByICogMjU1
LCBnICogMjU1LCBiICogMjU1LCBhXTsKK30KKworLSAoTlNTdHJpbmcgKilfc2hhZG93QXNTdHJp
bmc6KE5TU2hhZG93ICopc2hhZG93Cit7CisgICAgaWYgKHNoYWRvdyA9PSBuaWwpCisgICAgICAg
IHJldHVybiBAIm5vbmUiOworICAgIE5TU2l6ZSBvZmZzZXQgPSBbc2hhZG93IHNoYWRvd09mZnNl
dF07CisgICAgZmxvYXQgYmx1clJhZGl1cyA9IFtzaGFkb3cgc2hhZG93Qmx1clJhZGl1c107Cisg
ICAgaWYgKG9mZnNldC53aWR0aCA9PSAwICYmIG9mZnNldC5oZWlnaHQgPT0gMCAmJiBibHVyUmFk
aXVzID09IDApCisgICAgICAgIHJldHVybiBAIm5vbmUiOworICAgIE5TQ29sb3IgKmNvbG9yID0g
W3NoYWRvdyBzaGFkb3dDb2xvcl07CisgICAgaWYgKGNvbG9yID09IG5pbCkKKyAgICAgICAgcmV0
dXJuIEAibm9uZSI7CisgICAgLy8gRklYTUU6IEhhbmRsZSBub24taW50ZWdyYWwgdmFsdWVzIGhl
cmU/CisgICAgaWYgKGJsdXJSYWRpdXMgPT0gMCkKKyAgICAgICAgcmV0dXJuIFtOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiJUAgJS4wZnB4ICUuMGZweCIsIFtzZWxmIF9jb2xvckFzU3RyaW5n
OmNvbG9yXSwgb2Zmc2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0XTsKKyAgICByZXR1cm4gW05TU3Ry
aW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlLjBmcHggJS4wZnB4ICUuMGZweCIsIFtzZWxmIF9j
b2xvckFzU3RyaW5nOmNvbG9yXSwgb2Zmc2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0LCBibHVyUmFk
aXVzXTsKK30KKworLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21Gb250QXR0
cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeQoreworICAgIERPTUNTU1N0eWxlRGVj
bGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOworCisgICAgTlNDb2xvciAqY29s
b3IgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXTsKKyAgICBbc3R5bGUgc2V0QmFja2dyb3VuZENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5n
OmNvbG9yXV07CisKKyAgICBOU0ZvbnQgKmZvbnQgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYgKCFmb250KSB7CisgICAgICAgIFtzdHlsZSBz
ZXRGb250RmFtaWx5OkAiSGVsdmV0aWNhIl07CisgICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpA
IjEycHgiXTsKKyAgICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6QCJub3JtYWwiXTsKKyAgICAg
ICAgW3N0eWxlIHNldEZvbnRTdHlsZTpAIm5vcm1hbCJdOworICAgIH0gZWxzZSB7CisgICAgICAg
IE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwor
ICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0ZWQgZXNjYXBpbmcgY29kZSBp
ZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKKyAgICAgICAgLy8gd2l0aCBjaGFyYWN0
ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0aGVpciBuYW1lcy4KKyAgICAg
ICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCInJUAn
IiwgW2ZvbnQgZmFtaWx5TmFtZV1dXTsKKyAgICAgICAgW3N0eWxlIHNldEZvbnRTaXplOltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJTAuZnB4IiwgW2ZvbnQgcG9pbnRTaXplXV1dOworICAg
ICAgICAvLyBGSVhNRTogTWFwIHRvIHRoZSBlbnRpcmUgcmFuZ2Ugb2YgQ1NTIHdlaWdodCB2YWx1
ZXMuCisgICAgICAgIGlmIChbZm0gd2VpZ2h0T2ZGb250OmZvbnRdID49IE1JTl9CT0xEX1dFSUdI
VCkKKyAgICAgICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAiYm9sZCJdOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpAIm5vcm1hbCJdOworICAgICAg
ICBpZiAoW2ZtIHRyYWl0c09mRm9udDpmb250XSAmIE5TSXRhbGljRm9udE1hc2spCisgICAgICAg
ICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOkAiaXRhbGljIl07CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6QCJub3JtYWwiXTsKKyAgICB9CisKKyAgICBjb2xv
ciA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWVdOworICAgIFtzdHlsZSBzZXRDb2xvcjpjb2xvciA/IFtzZWxmIF9jb2xvckFzU3RyaW5nOmNv
bG9yXSA6IChOU1N0cmluZyAqKUAiYmxhY2siXTsKKworICAgIE5TU2hhZG93ICpzaGFkb3cgPSBb
ZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKKyAgICBbc3R5
bGUgc2V0VGV4dFNoYWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6c2hhZG93XV07CisKKyAgICBp
bnQgc3RyaWtldGhyb3VnaEludCA9IFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNTdHJpa2V0
aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisKKyAgICBpbnQgc3VwZXJzY3Jp
cHRJbnQgPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVO
YW1lXSBpbnRWYWx1ZV07CisgICAgaWYgKHN1cGVyc2NyaXB0SW50ID4gMCkKKyAgICAgICAgW3N0
eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdXBlciJdOworICAgIGVsc2UgaWYgKHN1cGVyc2NyaXB0
SW50IDwgMCkKKyAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdWIiXTsKKyAgICBl
bHNlCisgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAiYmFzZWxpbmUiXTsKKyAgICBp
bnQgdW5kZXJsaW5lSW50ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0
eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIC8vIEZJWE1FOiBVbmRlcmxpbmUgd2lu
cyBoZXJlIGlmIHdlIGhhdmUgYm90aCAoc2VlIGJ1ZyAzNzkwNDQzKS4KKyAgICBpZiAoc3RyaWtl
dGhyb3VnaEludCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSAmJiB1bmRlcmxpbmVJbnQgPT0gTlNV
bmRlcmxpbmVTdHlsZU5vbmUpCisgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10
ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOwor
ICAgIGVsc2UgaWYgKHVuZGVybGluZUludCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKKyAgICAg
ICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0
IiB2YWx1ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsKKyAgICBlbHNlCisgICAgICAg
IFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIg
dmFsdWU6QCJ1bmRlcmxpbmUiIHByaW9yaXR5OkAiIl07CisKKyAgICByZXR1cm4gc3R5bGU7Cit9
CisKKy0gKHZvaWQpX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNsYXJhdGlv
biAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KK3sKKyAgICBp
ZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgdW5kb0Fj
dGlvbik7Cit9CisKKy0gKHZvaWQpX2FwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbjooRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihFZGl0QWN0aW9uKXVu
ZG9BY3Rpb24KK3sKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5UGFyYWdyYXBoU3R5bGVUb1Nl
bGVjdGlvbihjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7Cit9CisKKy0gKEJPT0wpX2hhbmRsZVN0
eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgQVNTRVJUKFtzZWxmIF93
ZWJWaWV3XSk7CisgICAgaWYgKCFbW1tzZWxmIF93ZWJWaWV3XSBwcmVmZXJlbmNlc10gcmVzcGVj
dFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50c10pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAK
KyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAg
IGlmICgoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJbmRlcGVuZGVudE1vZGlmaWVy
RmxhZ3NNYXNrKSAhPSBOU0NvbW1hbmRLZXlNYXNrKQorICAgICAgICByZXR1cm4gTk87CisgICAg
CisgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0ZXJzXTsKKyAgICBpZiAoW3N0
cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiYiJdID09IE5TT3JkZXJlZFNhbWUpIHsKKyAg
ICAgICAgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOiJUb2dnbGVCb2xkIl07CisgICAg
ICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIGlmIChbc3RyaW5nIGNhc2VJbnNlbnNpdGl2ZUNv
bXBhcmU6QCJpIl0gPT0gTlNPcmRlcmVkU2FtZSkgeworICAgICAgICBbc2VsZiBleGVjdXRlQ29y
ZUNvbW1hbmRCeU5hbWU6IlRvZ2dsZUl0YWxpYyJdOworICAgICAgICByZXR1cm4gWUVTOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKEJPT0wpcGVyZm9ybUtleUVxdWl2YWxl
bnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNw
b25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisg
ICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0
YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBw
cmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBL
aXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgaWYgKFtz
ZWxmIF9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm4gWUVT
OworICAgIAorICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlE
b3duRXZlbnQgPT0gZXZlbnQpOworICAgIEJPT0wgcmV0ID0gTk87CisKKyAgICBbX3ByaXZhdGUt
PmtleURvd25FdmVudCByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2
ZW50IHJldGFpbl07CisgICAgCisgICAgW3NlbGYgcmV0YWluXTsKKworICAgIC8vIFBhc3MgY29t
bWFuZC1rZXkgY29tYm9zIHRocm91Z2ggV2ViQ29yZSBpZiB0aGVyZSBpcyBhIGtleSBiaW5kaW5n
IGF2YWlsYWJsZSBmb3IKKyAgICAvLyB0aGlzIGV2ZW50LiBUaGlzIGxldHMgd2ViIHBhZ2VzIGhh
dmUgYSBjcmFjayBhdCBpbnRlcmNlcHRpbmcgY29tbWFuZC1tb2RpZmllZCBrZXlwcmVzc2VzLgor
ICAgIC8vIEJ1dCBkb24ndCBkbyBpdCBpZiB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZXZl
bnQuCisgICAgLy8gUHJlc3NpbmcgRXNjIHJlc3VsdHMgaW4gYSBmYWtlIGV2ZW50IGJlaW5nIHNl
bnQgLSBkb24ndCBwYXNzIGl0IHRvIFdlYkNvcmUuCisgICAgaWYgKCFldmVudFdhc1NlbnRUb1dl
YkNvcmUgJiYgZXZlbnQgPT0gW05TQXBwIGN1cnJlbnRFdmVudF0gJiYgc2VsZiA9PSBbW3NlbGYg
d2luZG93XSBmaXJzdFJlc3BvbmRlcl0pCisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pKQorICAgICAgICAgICAgcmV0ID0gZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5rZXlFdmVudChldmVudCk7CisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0ID0gW3N1cGVy
IHBlcmZvcm1LZXlFcXVpdmFsZW50OmV2ZW50XTsKKworICAgIFtzZWxmIHJlbGVhc2VdOworICAg
IAorICAgIHJldHVybiByZXQ7Cit9CisKKy0gKHZvaWQpY29weUZvbnQ6KGlkKXNlbmRlcgorewor
ICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIC8vIFB1dCBSVEYgd2l0aCBmb250IGF0dHJpYnV0
ZXMgb24gdGhlIHBhc3RlYm9hcmQuCisgICAgLy8gTWF5YmUgbGF0ZXIgd2Ugc2hvdWxkIGFkZCBh
IHBhc3RlYm9hcmQgdHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0IGZvciAibmF0aXZlIiBjb3B5
IGFuZCBwYXN0ZSBmb250LgorICAgIE5TUGFzdGVib2FyZCAqZm9udFBhc3RlYm9hcmQgPSBbTlNQ
YXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpOU0ZvbnRQYm9hcmRdOworICAgIFtmb250UGFz
dGVib2FyZCBkZWNsYXJlVHlwZXM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0Ok5TRm9udFBib2Fy
ZFR5cGVdIG93bmVyOm5pbF07CisgICAgW2ZvbnRQYXN0ZWJvYXJkIHNldERhdGE6W3NlbGYgX3Nl
bGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNBc1JURl0gZm9yVHlwZTpOU0ZvbnRQYm9hcmRUeXBl
XTsKK30KKworLSAodm9pZClwYXN0ZUZvbnQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJP
TE9HVUUKKworICAgIC8vIFJlYWQgUlRGIHdpdGggZm9udCBhdHRyaWJ1dGVzIGZyb20gdGhlIHBh
c3RlYm9hcmQuCisgICAgLy8gTWF5YmUgbGF0ZXIgd2Ugc2hvdWxkIGFkZCBhIHBhc3RlYm9hcmQg
dHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0IGZvciAibmF0aXZlIiBjb3B5IGFuZCBwYXN0ZSBm
b250LgorICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRnJvbUZv
bnRBdHRyaWJ1dGVzOltzZWxmIF9mb250QXR0cmlidXRlc0Zyb21Gb250UGFzdGVib2FyZF1dIHdp
dGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25QYXN0ZUZvbnRdOworfQorCistICh2b2lkKXBhc3RlQXNS
aWNoVGV4dDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gU2lu
Y2UgcmljaCB0ZXh0IGFsd2F5cyBiZWF0cyBwbGFpbiB0ZXh0IHdoZW4gYm90aCBhcmUgb24gdGhl
IHBhc3RlYm9hcmQsIGl0J3Mgbm90CisgICAgLy8gY2xlYXIgaG93IHRoaXMgaXMgZGlmZmVyZW50
IGZyb20gcGxhaW4gb2xkIHBhc3RlLgorICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOltO
U1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93UGxhaW5UZXh0Ok5PXTsKK30KKwor
LSAoTlNGb250ICopX29yaWdpbmFsRm9udEEKK3sKKyAgICByZXR1cm4gW1tOU0ZvbnRNYW5hZ2Vy
IHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0aEZhbWlseTpAIkhlbHZldGljYSIgdHJhaXRzOjAg
d2VpZ2h0OlNUQU5EQVJEX1dFSUdIVCBzaXplOjEwLjBmXTsKK30KKworLSAoTlNGb250ICopX29y
aWdpbmFsRm9udEIKK3sKKyAgICByZXR1cm4gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXSBmb250V2l0aEZhbWlseTpAIlRpbWVzIiB0cmFpdHM6TlNGb250SXRhbGljVHJhaXQgd2Vp
Z2h0OlNUQU5EQVJEX0JPTERfV0VJR0hUIHNpemU6MTIuMGZdOworfQorCistICh2b2lkKV9hZGRU
b1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgZm9udEE6KE5TRm9udCAqKWEg
Zm9udEI6KE5TRm9udCAqKWIKK3sKKyAgICAvLyBTaW5jZSB0aGVyZSdzIG5vIHdheSB0byBkaXJl
Y3RseSBhc2sgTlNGb250TWFuYWdlciB3aGF0IHN0eWxlIGNoYW5nZSBpdCdzIGdvaW5nIHRvIGRv
CisgICAgLy8gd2UgaW5zdGVhZCBwYXNzIHR3byAic3BlY2ltZW4iIGZvbnRzIHRvIGl0IGFuZCBs
ZXQgaXQgY2hhbmdlIHRoZW0uIFdlIHRoZW4gZGVkdWNlIHdoYXQKKyAgICAvLyBzdHlsZSBjaGFu
Z2UgaXQgd2FzIGRvaW5nIGJ5IGxvb2tpbmcgYXQgd2hhdCBoYXBwZW5lZCB0byBlYWNoIG9mIHRo
ZSB0d28gZm9udHMuCisgICAgLy8gU28gaWYgaXQgd2FzIG1ha2luZyB0aGUgdGV4dCBib2xkLCBi
b3RoIGZvbnRzIHdpbGwgYmUgYm9sZCBhZnRlciB0aGUgZmFjdC4KKworICAgIGlmIChhID09IG5p
bCB8fCBiID09IG5pbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNGb250TWFuYWdlciAqZm0g
PSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CisKKyAgICBOU0ZvbnQgKm9hID0g
W3NlbGYgX29yaWdpbmFsRm9udEFdOworCisgICAgTlNTdHJpbmcgKmFGYW1pbHlOYW1lID0gW2Eg
ZmFtaWx5TmFtZV07CisgICAgTlNTdHJpbmcgKmJGYW1pbHlOYW1lID0gW2IgZmFtaWx5TmFtZV07
CisKKyAgICBpbnQgYVBvaW50U2l6ZSA9IChpbnQpW2EgcG9pbnRTaXplXTsKKyAgICBpbnQgYlBv
aW50U2l6ZSA9IChpbnQpW2IgcG9pbnRTaXplXTsKKworICAgIGludCBhV2VpZ2h0ID0gW2ZtIHdl
aWdodE9mRm9udDphXTsKKyAgICBpbnQgYldlaWdodCA9IFtmbSB3ZWlnaHRPZkZvbnQ6Yl07CisK
KyAgICBCT09MIGFJc0l0YWxpYyA9IChbZm0gdHJhaXRzT2ZGb250OmFdICYgTlNJdGFsaWNGb250
TWFzaykgIT0gMDsKKyAgICBCT09MIGJJc0l0YWxpYyA9IChbZm0gdHJhaXRzT2ZGb250OmJdICYg
TlNJdGFsaWNGb250TWFzaykgIT0gMDsKKworICAgIGlmIChbYUZhbWlseU5hbWUgaXNFcXVhbFRv
U3RyaW5nOmJGYW1pbHlOYW1lXSkgeworICAgICAgICBOU1N0cmluZyAqZmFtaWx5TmFtZUZvckNT
UyA9IGFGYW1pbHlOYW1lOworCisgICAgICAgIC8vIFRoZSBmYW1pbHkgbmFtZSBtYXkgbm90IGJl
IHNwZWNpZmljIGVub3VnaCB0byBnZXQgdXMgdGhlIGZvbnQgc3BlY2lmaWVkLgorICAgICAgICAv
LyBJbiBzb21lIGNhc2VzLCB0aGUgb25seSB3YXkgdG8gZ2V0IGV4YWN0bHkgd2hhdCB3ZSBhcmUg
bG9va2luZyBmb3IgaXMgdG8gdXNlCisgICAgICAgIC8vIHRoZSBQb3N0c2NyaXB0IG5hbWUuCisg
ICAgICAgIAorICAgICAgICAvLyBGaW5kIHRoZSBmb250IHRoZSBzYW1lIHdheSB0aGUgcmVuZGVy
aW5nIGNvZGUgd291bGQgbGF0ZXIgaWYgaXQgZW5jb3VudGVyZWQgdGhpcyBDU1MuCisgICAgICAg
IE5TRm9udFRyYWl0TWFzayB0cmFpdHMgPSBhSXNJdGFsaWMgPyBOU0ZvbnRJdGFsaWNUcmFpdCA6
IDA7CisgICAgICAgIE5TRm9udCAqZm91bmRGb250ID0gV2ViQ29yZUZpbmRGb250KGFGYW1pbHlO
YW1lLCB0cmFpdHMsIGFXZWlnaHQsIGFQb2ludFNpemUpOworCisgICAgICAgIC8vIElmIHdlIGRv
bid0IGZpbmQgYSBmb250IHdpdGggdGhlIHNhbWUgUG9zdHNjcmlwdCBuYW1lLCB0aGVuIHdlJ2xs
IGhhdmUgdG8gdXNlIHRoZQorICAgICAgICAvLyBQb3N0c2NyaXB0IG5hbWUgdG8gbWFrZSB0aGUg
Q1NTIHNwZWNpZmljIGVub3VnaC4KKyAgICAgICAgaWYgKCFbW2ZvdW5kRm9udCBmb250TmFtZV0g
aXNFcXVhbFRvU3RyaW5nOlthIGZvbnROYW1lXV0pCisgICAgICAgICAgICBmYW1pbHlOYW1lRm9y
Q1NTID0gW2EgZm9udE5hbWVdOworCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIG1vcmUgc29waGlz
dGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxlIGZhbWlseSBuYW1lcwor
ICAgICAgICAvLyB3aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUgcXVvdGUgb3IgYmFja3NsYXNo
IGluIHRoZWlyIG5hbWVzLgorICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWlseTpbTlNTdHJpbmcg
c3RyaW5nV2l0aEZvcm1hdDpAIiclQCciLCBmYW1pbHlOYW1lRm9yQ1NTXV07CisgICAgfQorCisg
ICAgaW50IHNvYSA9IChpbnQpW29hIHBvaW50U2l6ZV07CisgICAgaWYgKGFQb2ludFNpemUgPT0g
YlBvaW50U2l6ZSkKKyAgICAgICAgW3N0eWxlIHNldEZvbnRTaXplOltOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJWRweCIsIGFQb2ludFNpemVdXTsKKyAgICBlbHNlIGlmIChhUG9pbnRTaXpl
IDwgc29hKQorICAgICAgICBbc3R5bGUgX3NldEZvbnRTaXplRGVsdGE6QCItMXB4Il07CisgICAg
ZWxzZSBpZiAoYVBvaW50U2l6ZSA+IHNvYSkKKyAgICAgICAgW3N0eWxlIF9zZXRGb250U2l6ZURl
bHRhOkAiMXB4Il07CisKKyAgICBpZiAoYVdlaWdodCA9PSBiV2VpZ2h0KQorICAgICAgICBbc3R5
bGUgc2V0Rm9udFdlaWdodDphV2VpZ2h0ID4gTUlOX0JPTERfV0VJR0hUID8gQCJib2xkIiA6IEAi
bm9ybWFsIl07CisKKyAgICBpZiAoYUlzSXRhbGljID09IGJJc0l0YWxpYykKKyAgICAgICAgW3N0
eWxlIHNldEZvbnRTdHlsZTphSXNJdGFsaWMgPyBAIml0YWxpYyIgOiAgQCJub3JtYWwiXTsKK30K
KworLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21Gb250TWFuYWdlck9wZXJh
dGlvbgoreworICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5
U3R5bGVdOworCisgICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250TWFuYWdlciBzaGFyZWRG
b250TWFuYWdlcl07CisKKyAgICBOU0ZvbnQgKm9hID0gW3NlbGYgX29yaWdpbmFsRm9udEFdOwor
ICAgIE5TRm9udCAqb2IgPSBbc2VsZiBfb3JpZ2luYWxGb250Ql07ICAgIAorICAgIFtzZWxmIF9h
ZGRUb1N0eWxlOnN0eWxlIGZvbnRBOltmbSBjb252ZXJ0Rm9udDpvYV0gZm9udEI6W2ZtIGNvbnZl
cnRGb250Om9iXV07CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKKy0gKHZvaWQpY2hhbmdlRm9u
dDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2FwcGx5
U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udE1hbmFnZXJPcGVyYXRpb25dIHdp
dGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25TZXRGb250XTsKK30KKworLSAoRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqKV9zdHlsZUZvckF0dHJpYnV0ZUNoYW5nZTooaWQpc2VuZGVyCit7CisgICAgRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07CisKKyAgICBO
U1NoYWRvdyAqc2hhZG93ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5pdF07CisgICAgW3NoYWRvdyBz
ZXRTaGFkb3dPZmZzZXQ6TlNNYWtlU2l6ZSgxLCAxKV07CisKKyAgICBOU0RpY3Rpb25hcnkgKm9h
ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICBb
c2VsZiBfb3JpZ2luYWxGb250QV0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsCisgICAgICAgIG5pbF07
CisgICAgTlNEaWN0aW9uYXJ5ICpvYiA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmpl
Y3RzQW5kS2V5czoKKyAgICAgICAgW05TQ29sb3IgYmxhY2tDb2xvcl0sIE5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZSwKKyAgICAgICAgW3NlbGYgX29yaWdpbmFsRm9udEJdLCBOU0ZvbnRB
dHRyaWJ1dGVOYW1lLAorICAgICAgICBbTlNDb2xvciB3aGl0ZUNvbG9yXSwgTlNGb3JlZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lLAorICAgICAgICBzaGFkb3csIE5TU2hhZG93QXR0cmlidXRlTmFt
ZSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmds
ZV0sIE5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZSwKKyAgICAgICAgW05TTnVtYmVy
IG51bWJlcldpdGhJbnQ6MV0sIE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lLAorICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSwgTlNVbmRlcmxp
bmVTdHlsZUF0dHJpYnV0ZU5hbWUsCisgICAgICAgIG5pbF07CisKKyAgICBbc2hhZG93IHJlbGVh
c2VdOworCisjaWYgMAorCitOU09ibGlxdWVuZXNzQXR0cmlidXRlTmFtZSAgICAgICAgLyogZmxv
YXQ7IHNrZXcgdG8gYmUgYXBwbGllZCB0byBnbHlwaHMsIGRlZmF1bHQgMDogbm8gc2tldyAqLwor
ICAgIC8vIGZvbnQtc3R5bGUsIGJ1dCB0aGF0IGlzIGp1c3QgYW4gb24tb2ZmIHN3aXRjaAorCitO
U0V4cGFuc2lvbkF0dHJpYnV0ZU5hbWUgICAgICAgICAgLyogZmxvYXQ7IGxvZyBvZiBleHBhbnNp
b24gZmFjdG9yIHRvIGJlIGFwcGxpZWQgdG8gZ2x5cGhzLCBkZWZhdWx0IDA6IG5vIGV4cGFuc2lv
biAqLworICAgIC8vIGZvbnQtc3RyZXRjaD8KKworTlNLZXJuQXR0cmlidXRlTmFtZSAgICAgICAg
ICAgICAgIC8qIGZsb2F0LCBhbW91bnQgdG8gbW9kaWZ5IGRlZmF1bHQga2VybmluZywgaWYgMCwg
a2VybmluZyBvZmYgKi8KKyAgICAvLyBsZXR0ZXItc3BhY2luZz8gcHJvYmFibHkgbm90IGdvb2Qg
ZW5vdWdoCisKK05TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAvKiBOU0NvbG9yLCBk
ZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCitOU1N0cmlrZXRocm91Z2hD
b2xvckF0dHJpYnV0ZU5hbWUgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6IHNhbWUgYXMgZm9yZWdy
b3VuZCBjb2xvciAqLworICAgIC8vIHRleHQtZGVjb3JhdGlvbi1jb2xvcj8KKworTlNMaWdhdHVy
ZUF0dHJpYnV0ZU5hbWUgICAgICAgICAgIC8qIGludCwgZGVmYXVsdCAxOiBkZWZhdWx0IGxpZ2F0
dXJlcywgMDogbm8gbGlnYXR1cmVzLCAyOiBhbGwgbGlnYXR1cmVzICovCitOU0Jhc2VsaW5lT2Zm
c2V0QXR0cmlidXRlTmFtZSAgICAgLyogZmxvYXQsIGluIHBvaW50czsgb2Zmc2V0IGZyb20gYmFz
ZWxpbmUsIGRlZmF1bHQgMCAqLworTlNTdHJva2VXaWR0aEF0dHJpYnV0ZU5hbWUgICAgICAgIC8q
IGZsb2F0LCBpbiBwZXJjZW50IG9mIGZvbnQgcG9pbnQgc2l6ZSwgZGVmYXVsdCAwOiBubyBzdHJv
a2U7IHBvc2l0aXZlIGZvciBzdHJva2UgYWxvbmUsIG5lZ2F0aXZlIGZvciBzdHJva2UgYW5kIGZp
bGwgKGEgdHlwaWNhbCB2YWx1ZSBmb3Igb3V0bGluZWQgdGV4dCB3b3VsZCBiZSAzLjApICovCitO
U1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgICAgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6
IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAqLworICAgIC8vIG5lZWQgZXh0ZW5zaW9ucz8KKwor
I2VuZGlmCisgICAgCisgICAgTlNEaWN0aW9uYXJ5ICphID0gW3NlbmRlciBjb252ZXJ0QXR0cmli
dXRlczpvYV07CisgICAgTlNEaWN0aW9uYXJ5ICpiID0gW3NlbmRlciBjb252ZXJ0QXR0cmlidXRl
czpvYl07CisKKyAgICBOU0NvbG9yICpjYSA9IFthIG9iamVjdEZvcktleTpOU0JhY2tncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOworICAgIE5TQ29sb3IgKmNiID0gW2Igb2JqZWN0Rm9yS2V5Ok5T
QmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgaWYgKGNhID09IGNiKSB7CisgICAg
ICAgIFtzdHlsZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y2FdXTsK
KyAgICB9CisKKyAgICBbc2VsZiBfYWRkVG9TdHlsZTpzdHlsZSBmb250QTpbYSBvYmplY3RGb3JL
ZXk6TlNGb250QXR0cmlidXRlTmFtZV0gZm9udEI6W2Igb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdXTsKKworICAgIGNhID0gW2Egb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZV07CisgICAgY2IgPSBbYiBvYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoY2EgPT0gY2IpIHsKKyAgICAgICAgW3N0eWxlIHNl
dENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNhXV07CisgICAgfQorCisgICAgTlNTaGFkb3cg
KnNoYSA9IFthIG9iamVjdEZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOworICAgIGlmIChz
aGEpCisgICAgICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OltzZWxmIF9zaGFkb3dBc1N0cmluZzpz
aGFdXTsKKyAgICBlbHNlIGlmIChbYiBvYmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1l
XSA9PSBuaWwpCisgICAgICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OkAibm9uZSJdOworCisgICAg
aW50IHNhID0gW1thIG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5h
bWVdIGludFZhbHVlXTsKKyAgICBpbnQgc2IgPSBbW2Igb2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhy
b3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGlmIChzYSA9PSBzYikgewor
ICAgICAgICBpZiAoc2EgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCisgICAgICAgICAgICBbc3R5
bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVl
OkAibm9uZSIgcHJpb3JpdHk6QCIiXTsgCisgICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAi
bm8gbGluZS10aHJvdWdoIiByYXRoZXIgdGhhbiAibm9uZSIKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZm
ZWN0IiB2YWx1ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsKKyAgICAgICAgICAgIC8v
IHdlIHJlYWxseSBtZWFuICJhZGQgbGluZS10aHJvdWdoIiByYXRoZXIgdGhhbiAibGluZS10aHJv
dWdoIgorICAgIH0KKworICAgIHNhID0gW1thIG9iamVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0
cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIHNiID0gW1tiIG9iamVjdEZvcktleTpOU1N1cGVy
c2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGlmIChzYSA9PSBzYikgeworICAg
ICAgICBpZiAoc2EgPiAwKQorICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJz
dXBlciJdOworICAgICAgICBlbHNlIGlmIChzYSA8IDApCisgICAgICAgICAgICBbc3R5bGUgc2V0
VmVydGljYWxBbGlnbjpAInN1YiJdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbc3R5bGUg
c2V0VmVydGljYWxBbGlnbjpAImJhc2VsaW5lIl07CisgICAgfQorCisgICAgaW50IHVhID0gW1th
IG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwor
ICAgIGludCB1YiA9IFtbYiBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5h
bWVdIGludFZhbHVlXTsKKyAgICBpZiAodWEgPT0gdWIpIHsKKyAgICAgICAgaWYgKHVhID09IE5T
VW5kZXJsaW5lU3R5bGVOb25lKQorICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWto
dG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHByaW9yaXR5OkAi
Il07CisgICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAibm8gdW5kZXJsaW5lIiByYXRoZXIg
dGhhbiAibm9uZSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5
OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSIg
cHJpb3JpdHk6QCIiXTsKKyAgICAgICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJhZGQgdW5kZXJs
aW5lIiByYXRoZXIgdGhhbiAidW5kZXJsaW5lIgorICAgIH0KKworICAgIHJldHVybiBzdHlsZTsK
K30KKworLSAodm9pZCljaGFuZ2VBdHRyaWJ1dGVzOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5E
X1BST0xPR1VFCisKKyAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHls
ZUZvckF0dHJpYnV0ZUNoYW5nZTpzZW5kZXJdIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25DaGFu
Z2VBdHRyaWJ1dGVzXTsKK30KKworLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZy
b21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBET01DU1NTdHls
ZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKKworICAgIEFTU0VSVChb
c3R5bGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSk7CisgICAgW3N0eWxlIHBlcmZvcm1T
ZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0OltzZWxmIF9jb2xvckFzU3RyaW5nOltbTlNDb2xv
clBhbmVsIHNoYXJlZENvbG9yUGFuZWxdIGNvbG9yXV1dOworICAgIAorICAgIHJldHVybiBzdHls
ZTsKK30KKworLSAoRWRpdEFjdGlvbilfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0aFNlbGVj
dG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHNldEJh
Y2tncm91bmRDb2xvcjopKQorICAgICAgICByZXR1cm4gRWRpdEFjdGlvblNldEJhY2tncm91bmRD
b2xvcjsgICAgCisgICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRDb2xvcjsKK30KKworLSAodm9pZClf
Y2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVjdG9yOihTRUwpc2VsZWN0b3IgaW5SYW5nZTooRE9NUmFu
Z2UgKilyYW5nZQoreworICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYg
X3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdOworICAgIFdlYlZpZXcg
KndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0Rl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBwbHlTdHlsZTpzdHlsZSB0
b0VsZW1lbnRzSW5ET01SYW5nZTpyYW5nZV0pCisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCkt
PmFwcGx5U3R5bGUoY29yZShzdHlsZSksIFtzZWxmIF91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxX
aXRoU2VsZWN0b3I6c2VsZWN0b3JdKTsKK30KKworLSAodm9pZCljaGFuZ2VEb2N1bWVudEJhY2tn
cm91bmRDb2xvcjooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8g
TWltaWNraW5nIE5TVGV4dFZpZXcsIHRoaXMgbWV0aG9kIHNldHMgdGhlIGJhY2tncm91bmQgY29s
b3IgZm9yIHRoZQorICAgIC8vIGVudGlyZSBkb2N1bWVudC4gVGhlcmUgaXMgbm8gTlNUZXh0Vmll
dyBBUEkgZm9yIHNldHRpbmcgdGhlIGJhY2tncm91bmQKKyAgICAvLyBjb2xvciBvbiB0aGUgc2Vs
ZWN0ZWQgcmFuZ2Ugb25seS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIGN1cnJlbnRseQorICAg
IC8vIG5ldmVyIGNhbGxlZCBmcm9tIHRoZSBVSSAoc2VlIGNvbW1lbnQgaW4gY2hhbmdlQ29sb3I6
KS4KKyAgICAvLyBGSVhNRTogdGhpcyBhY3R1YWxseSBoYXMgbm8gZWZmZWN0IHdoZW4gY2FsbGVk
LCBwcm9iYWJseSBkdWUgdG8gMzY1NDg1MC4gX2RvY3VtZW50UmFuZ2Ugc2VlbXMKKyAgICAvLyB0
byBkbyB0aGUgcmlnaHQgdGhpbmcgYmVjYXVzZSBpdCB3b3JrcyBpbiBzdGFydFNwZWFraW5nOiwg
YW5kIEkga25vdyBzZXRCYWNrZ3JvdW5kQ29sb3I6IGRvZXMgdGhlCisgICAgLy8gcmlnaHQgdGhp
bmcgYmVjYXVzZSBJIHRlc3RlZCBpdCB3aXRoIFtzZWxmIF9zZWxlY3RlZFJhbmdlXS4KKyAgICAv
LyBGSVhNRTogVGhpcyB3b24ndCBhY3R1YWxseSBhcHBseSB0aGUgc3R5bGUgdG8gdGhlIGVudGly
ZSByYW5nZSBoZXJlLCBiZWNhdXNlIGl0IGVuZHMgdXAgY2FsbGluZworICAgIC8vIFtmcmFtZSBf
YXBwbHlTdHlsZTpdLCB3aGljaCBvcGVyYXRlcyBvbiB0aGUgY3VycmVudCBzZWxlY3Rpb24uIFRv
IG1ha2UgdGhpcyB3b3JrIHJpZ2h0LCB3ZSdsbAorICAgIC8vIG5lZWQgdG8gc2F2ZSBvZmYgdGhl
IHNlbGVjdGlvbiwgdGVtcG9yYXJpbHkgc2V0IGl0IHRvIHRoZSBlbnRpcmUgcmFuZ2UsIG1ha2Ug
dGhlIGNoYW5nZSwgdGhlbgorICAgIC8vIHJlc3RvcmUgdGhlIG9sZCBzZWxlY3Rpb24uCisgICAg
W3NlbGYgX2NoYW5nZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0QmFja2dyb3Vu
ZENvbG9yOikgaW5SYW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1dOworfQorCistICh2b2lkKWNo
YW5nZUNvbG9yOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICAvLyBG
SVhNRTogaW4gTlNUZXh0VmlldywgdGhpcyBtZXRob2QgY2FsbHMgY2hhbmdlRG9jdW1lbnRCYWNr
Z3JvdW5kQ29sb3I6IHdoZW4gYQorICAgIC8vIHByaXZhdGUgY2FsbCBoYXMgZWFybGllciBiZWVu
IG1hZGUgYnkgW05TRm9udEZvbnRFZmZlY3RzQm94IGNoYW5nZUNvbG9yOl0sIHNlZSAzNjc0NDkz
LiAKKyAgICAvLyBBcHBLaXQgd2lsbCBoYXZlIHRvIGJlIHJldmlzZWQgdG8gYWxsb3cgdGhpcyB0
byB3b3JrIHdpdGggYW55dGhpbmcgdGhhdCBpc24ndCBhbiAKKyAgICAvLyBOU1RleHRWaWV3LiBI
b3dldmVyLCB0aGlzIG1pZ2h0IG5vdCBiZSByZXF1aXJlZCBmb3IgVGlnZXIsIHNpbmNlIHRoZSBi
YWNrZ3JvdW5kLWNvbG9yIAorICAgIC8vIGNoYW5naW5nIGJveCBpbiB0aGUgZm9udCBwYW5lbCBk
b2Vzbid0IHdvcmsgaW4gTWFpbCAoMzY3NDQ4MSksIHRob3VnaCBpdCBkb2VzIGluIFRleHRFZGl0
LgorICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRnJvbUNvbG9y
UGFuZWxXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbG9yOildIAorICAgICAgICAgICAgICAg
ICAgd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblNldENvbG9yXTsKK30KKworLSAodm9pZClfY2hh
bmdlV29yZENhc2VXaXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIGlmICghW3NlbGYg
X2NhbkVkaXRdKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2Vs
ZiBfZnJhbWVdOworICAgIFtzZWxmIHNlbGVjdFdvcmQ6bmlsXTsKKyAgICBOU1N0cmluZyAqd29y
ZCA9IFtbZnJhbWUgX3NlbGVjdGVkU3RyaW5nXSBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3JdOwor
ICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCBhIGRpZmZlcmVudCBhY3Rpb24gY29udGV4dCBv
dGhlciB0aGFuICJ0eXBlZCI/CisgICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQ6d29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWRdKQorICAg
ICAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3b3JkIHNlbGVjdFJlcGxhY2Vt
ZW50Ok5PIHNtYXJ0UmVwbGFjZTpOT107Cit9CisKKy0gKHZvaWQpdXBwZXJjYXNlV29yZDooaWQp
c2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZVdvcmRD
YXNlV2l0aFNlbGVjdG9yOkBzZWxlY3Rvcih1cHBlcmNhc2VTdHJpbmcpXTsKK30KKworLSAodm9p
ZClsb3dlcmNhc2VXb3JkOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAg
ICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKGxvd2VyY2FzZVN0
cmluZyldOworfQorCistICh2b2lkKWNhcGl0YWxpemVXb3JkOihpZClzZW5kZXIKK3sKKyAgICBD
T01NQU5EX1BST0xPR1VFCisKKyAgICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6
QHNlbGVjdG9yKGNhcGl0YWxpemVkU3RyaW5nKV07Cit9CisKKy0gKHZvaWQpY29tcGxldGU6KGlk
KXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICghW3NlbGYgX2NhbkVk
aXRdKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIp
CisgICAgICAgIF9wcml2YXRlLT5jb21wQ29udHJvbGxlciA9IFtbV2ViVGV4dENvbXBsZXRlQ29u
dHJvbGxlciBhbGxvY10gaW5pdFdpdGhIVE1MVmlldzpzZWxmXTsKKyAgICBbX3ByaXZhdGUtPmNv
bXBDb250cm9sbGVyIGRvQ29tcGxldGlvbl07Cit9CisKKy0gKHZvaWQpY2hlY2tTcGVsbGluZzoo
aWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigp
LT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoKTsKK30KKworLSAodm9pZClzaG93R3Vlc3NQYW5l
bDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgTlNTcGVsbENoZWNr
ZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKKyAgICBp
ZiAoIWNoZWNrZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIE5TUGFuZWwgKnNwZWxsaW5nUGFuZWwg
PSBbY2hlY2tlciBzcGVsbGluZ1BhbmVsXTsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAg
ICAvLyBQb3N0LVRpZ2VyLCB0aGlzIG1lbnUgaXRlbSBpcyBhIHNob3cvaGlkZSB0b2dnbGUsIHRv
IG1hdGNoIEFwcEtpdC4gTGVhdmUgVGlnZXIgYmVoYXZpb3IgYWxvbmUKKyAgICAvLyB0byBtYXRj
aCByZXN0IG9mIE9TIFguCisgICAgaWYgKFtzcGVsbGluZ1BhbmVsIGlzVmlzaWJsZV0pIHsKKyAg
ICAgICAgW3NwZWxsaW5nUGFuZWwgb3JkZXJPdXQ6c2VuZGVyXTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyNlbmRpZgorICAgIAorICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKHRydWUpOworICAgIFtzcGVsbGluZ1BhbmVsIG9yZGVyRnJvbnQ6c2VuZGVyXTsK
K30KKworLSAodm9pZClfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6KE5TU3RyaW5nICopbmV3V29yZAor
eworICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBE
b24ndCBjb3JyZWN0IHRvIGVtcHR5IHN0cmluZy4gIChBcHBLaXQgY2hlY2tlZCB0aGlzLCB3ZSBt
aWdodCBhcyB3ZWxsIHRvby4pCisgICAgaWYgKCFbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXSkgeworICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKFtuZXdXb3JkIGlzRXF1YWxUb1N0cmlu
ZzpAIiJdKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3JkIGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25Q
YXN0ZWRdKQorICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
Om5ld1dvcmQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Cit9CisKKy0g
KHZvaWQpY2hhbmdlU3BlbGxpbmc6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUK
KworICAgIFtzZWxmIF9jaGFuZ2VTcGVsbGluZ1RvV29yZDpbW3NlbmRlciBzZWxlY3RlZENlbGxd
IHN0cmluZ1ZhbHVlXV07Cit9CisKKy0gKHZvaWQpcGVyZm9ybUZpbmRQYW5lbEFjdGlvbjooaWQp
c2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gSW1wbGVtZW50aW5nIHRo
aXMgd2lsbCBwcm9iYWJseSByZXF1aXJlIGNvcHlpbmcgYWxsIG9mIE5TRmluZFBhbmVsLmggYW5k
IC5tLgorICAgIC8vIFdlIG5lZWQgKmFsbW9zdCogdGhlIHNhbWUgdGhpbmcgYXMgQXBwS2l0LCBi
dXQgbm90IHF1aXRlLgorICAgIExPR19FUlJPUigidW5pbXBsZW1lbnRlZCIpOworfQorCistICh2
b2lkKXN0YXJ0U3BlYWtpbmc6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKwor
ICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CisgICAgRE9NUmFuZ2UgKnJhbmdl
ID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOworICAgIGlmICghcmFuZ2UgfHwgW3JhbmdlIGNvbGxh
cHNlZF0pCisgICAgICAgIHJhbmdlID0gW3NlbGYgX2RvY3VtZW50UmFuZ2VdOworICAgIFtOU0Fw
cCBzcGVha1N0cmluZzpbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnJhbmdlXV07Cit9CisKKy0gKHZv
aWQpc3RvcFNwZWFraW5nOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAg
ICBbTlNBcHAgc3RvcFNwZWFraW5nOnNlbmRlcl07Cit9CisKKy0gKHZvaWQpdG9nZ2xlQmFzZVdy
aXRpbmdEaXJlY3Rpb246KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAg
IGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIFdyaXRpbmdEaXJlY3Rpb24gZGlyZWN0aW9uID0gUmlnaHRU
b0xlZnRXcml0aW5nRGlyZWN0aW9uOworICAgIHN3aXRjaCAoY29yZUZyYW1lLT5iYXNlV3JpdGlu
Z0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkpIHsKKyAgICAgICAgY2FzZSBOU1dyaXRpbmdE
aXJlY3Rpb25MZWZ0VG9SaWdodDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5T
V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OgorICAgICAgICAgICAgZGlyZWN0aW9uID0gTGVm
dFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8v
IFRoZSB3cml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgbWV0aG9kIHdpbGwgbmV2ZXIg
cmV0dXJuICJuYXR1cmFsIi4gSXQKKyAgICAgICAgLy8gd2lsbCBhbHdheXMgcmV0dXJuIGEgY29u
Y3JldGUgZGlyZWN0aW9uLiBTbywga2VlcCB0aGUgY29tcGlsZXIgaGFwcHksIGFuZCBhc3NlcnQg
bm90IHJlYWNoZWQuCisgICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAg
ICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihkaXJlY3Rp
b24pOworfQorCistICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uOihpZClzZW5kZXIK
K3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0
aW9uID0gc3RhdGljX2Nhc3Q8TlNXcml0aW5nRGlyZWN0aW9uPihbc2VuZGVyIHRhZ10pOworICAg
IAorICAgIC8vIFdlIGRpc2FibGUgdGhlIG1lbnUgaXRlbSB0aGF0IHBlcmZvcm1zIHRoaXMgYWN0
aW9uIGJlY2F1c2Ugd2UgY2FuJ3QgaW1wbGVtZW50CisgICAgLy8gTlNXcml0aW5nRGlyZWN0aW9u
TmF0dXJhbCdzIGJlaGF2aW9yIHVzaW5nIENTUy4KKyAgICBBU1NFUlQod3JpdGluZ0RpcmVjdGlv
biAhPSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKTsKKworICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+
c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24od3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJl
Y3Rpb25MZWZ0VG9SaWdodCA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0VG9M
ZWZ0V3JpdGluZ0RpcmVjdGlvbik7Cit9CisKK3N0YXRpYyBCT09MIHdyaXRpbmdEaXJlY3Rpb25L
ZXlCaW5kaW5nc0VuYWJsZWQoKQoreworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIHJldHVybiBZRVM7CisjZWxzZQor
ICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c107CisgICAgcmV0dXJuIFtkZWZhdWx0cyBib29sRm9yS2V5OkAiTlNBbGxvd3NC
YXNlV3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzIl0gfHwgW2RlZmF1bHRzIGJvb2xGb3JLZXk6
QCJBcHBsZVRleHREaXJlY3Rpb24iXTsKKyNlbmRpZgorfQorCistICh2b2lkKV9jaGFuZ2VCYXNl
V3JpdGluZ0RpcmVjdGlvblRvOihOU1dyaXRpbmdEaXJlY3Rpb24pZGlyZWN0aW9uCit7CisgICAg
aWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKworICAgIHN0YXRpYyBCT09M
IGJpbmRpbmdzRW5hYmxlZCA9IHdyaXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5nc0VuYWJsZWQoKTsK
KworICAgIGlmICghYmluZGluZ3NFbmFibGVkKSB7CisgICAgICAgIE5TQmVlcCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGluZ0Rp
cmVjdGlvbihkaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyBMZWZ0
VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb24pOwor
fQorCistICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OihpZClzZW5k
ZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBbc2VsZiBfY2hhbmdlQmFzZVdyaXRp
bmdEaXJlY3Rpb25UbzpOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodF07Cit9CisKKy0gKHZv
aWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6KGlkKXNlbmRlcgoreworICAg
IENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlv
blRvOk5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKK30KKworI2lmIGRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKy0gKHZvaWQp
Y2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25Ub0xUUjooaWQpc2VuZGVyCit7CisgICAgW3NlbGYg
bWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6c2VuZGVyXTsKK30KKworLSAodm9p
ZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvUlRMOihpZClzZW5kZXIKK3sKKyAgICBbc2Vs
ZiBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDpzZW5kZXJdOworfQorI2VuZGlm
CisKKy0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDooaWQpc2VuZGVyCit7
CisgICAgTE9HX0VSUk9SKCJTZW50IGZyb20gJUAuIiwgc2VuZGVyKTsKK30KKworI2lmIDAKKwor
Ly8gQ1NTIGRvZXMgbm90IGhhdmUgYSB3YXkgdG8gc3BlY2lmeSBhbiBvdXRsaW5lIGZvbnQsIHdo
aWNoIG1heSBtYWtlIHRoaXMgZGlmZmljdWx0IHRvIGltcGxlbWVudC4KKy8vIE1heWJlIGEgc3Bl
Y2lhbCBjYXNlIG9mIHRleHQtc2hhZG93PworLSAodm9pZClvdXRsaW5lOihpZClzZW5kZXI7CisK
Ky8vIFRoaXMgaXMgcGFydCBvZiB0YWJsZSBzdXBwb3J0LCB3aGljaCBtYXkgYmUgaW4gTlNUZXh0
VmlldyBmb3IgVGlnZXIuCisvLyBJdCdzIHByb2JhYmx5IHNpbXBsZSB0byBkbyB0aGUgZXF1aXZh
bGVudCB0aGluZyBmb3IgV2ViS2l0LgorLSAodm9pZClpbnNlcnRUYWJsZTooaWQpc2VuZGVyOwor
CisvLyBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC4KKy0gKHZvaWQpdG9nZ2xlVHJhZGl0aW9uYWxD
aGFyYWN0ZXJTaGFwZTooaWQpc2VuZGVyOworCisvLyBJJ20gbm90IHN1cmUgd2hhdCB0aGUgZXF1
aXZhbGVudHMgb2YgdGhlc2UgaW4gdGhlIHdlYiB3b3JsZCBhcmUuCistICh2b2lkKWluc2VydExp
bmVTZXBhcmF0b3I6KGlkKXNlbmRlcjsKKy0gKHZvaWQpaW5zZXJ0UGFnZUJyZWFrOihpZClzZW5k
ZXI7CisKKy8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBOU1RleHRWaWV3
IHlldCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCistICh2b2lkKWNoYW5nZUNhc2VPZkxl
dHRlcjooaWQpc2VuZGVyOworLSAodm9pZCl0cmFuc3Bvc2VXb3JkczooaWQpc2VuZGVyOworCisj
ZW5kaWYKKworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorCisvLyBPdmVycmlkZSB0aGlzIHNv
IHRoYXQgQXBwS2l0IHdpbGwgc2VuZCB1cyBhcnJvdyBrZXlzIGFzIGtleSBkb3duIGV2ZW50cyBz
byB3ZSBjYW4KKy8vIHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBiaW5kaW5ncyBtZWNoYW5pc20u
CistIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAg
Ym9vbCBoYXZlV2ViQ29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKworICAgIC8vIElm
IHdlIGhhdmUgYSBmcmFtZSwgb3VyIGtleURvd24gbWV0aG9kIHdpbGwgaGFuZGxlIGtleSBiaW5k
aW5ncyBhZnRlciBzZW5kaW5nCisgICAgLy8gdGhlIGV2ZW50IHRocm91Z2ggdGhlIERPTSwgc28g
YXNrIEFwcEtpdCBub3QgdG8gZG8gaXRzIGVhcmx5IHNwZWNpYWwga2V5IGJpbmRpbmcKKyAgICAv
LyBtYXBwaW5nLiBJZiB3ZSBkb24ndCBoYXZlIGEgZnJhbWUsIGp1c3QgbGV0IHRoaW5ncyB3b3Jr
IHRoZSBub3JtYWwgd2F5IHdpdGhvdXQKKyAgICAvLyBhIGtleURvd24uCisgICAgcmV0dXJuIGhh
dmVXZWJDb3JlRnJhbWU7Cit9CisKKyNlbHNlCisKKy8vIFN1cGVyLWhhY2sgYWxlcnQuCisvLyBB
bGwgdGhpcyBjb2RlIGFjY29tcGxpc2hlcyB0aGUgc2FtZSB0aGluZyBhcyB0aGUgX3dhbnRzS2V5
RG93bkZvckV2ZW50IG1ldGhvZCBhYm92ZS4KKworLy8gUmV0dXJucyBhIHNlbGVjdG9yIG9ubHkg
aWYgY2FsbGVkIHdoaWxlOgorLy8gICAxKSBmaXJzdCByZXNwb25kZXIgaXMgc2VsZgorLy8gICAy
KSBoYW5kbGluZyBhIGtleSBkb3duIGV2ZW50CisvLyAgIDMpIG5vdCB5ZXQgaW5zaWRlIGtleURv
d246IG1ldGhvZAorLy8gICA0KSBrZXkgaXMgYW4gYXJyb3cga2V5CisvLyBUaGUgc2VsZWN0b3Ig
aXMgdGhlIG9uZSB0aGF0IGdldHMgc2VudCBieSAtW05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRV
SUtleV0gZm9yIHRoaXMga2V5LgorLSAoU0VMKV9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQ
cmVwcm9jZXNzaW5nCit7CisgICAgTlNXaW5kb3cgKncgPSBbc2VsZiB3aW5kb3ddOworICAgIGlm
IChbdyBmaXJzdFJlc3BvbmRlcl0gIT0gc2VsZikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
TlNFdmVudCAqZSA9IFt3IGN1cnJlbnRFdmVudF07CisgICAgaWYgKFtlIHR5cGVdICE9IE5TS2V5
RG93bikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGUgPT0gX3ByaXZhdGUtPmtleURv
d25FdmVudCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgTlNTdHJpbmcgKnMgPSBbZSBjaGFy
YWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOworICAgIGlmIChbcyBsZW5ndGhdID09IDApCisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIHN3aXRjaCAoW3MgY2hhcmFjdGVyQXRJbmRleDowXSkgewor
ICAgICAgICBjYXNlIE5TRG93bkFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICByZXR1cm4g
QHNlbGVjdG9yKG1vdmVEb3duOik7CisgICAgICAgIGNhc2UgTlNMZWZ0QXJyb3dGdW5jdGlvbktl
eToKKyAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZUxlZnQ6KTsKKyAgICAgICAgY2Fz
ZSBOU1JpZ2h0QXJyb3dGdW5jdGlvbktleToKKyAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3Io
bW92ZVJpZ2h0Oik7CisgICAgICAgIGNhc2UgTlNVcEFycm93RnVuY3Rpb25LZXk6CisgICAgICAg
ICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVVcDopOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisvLyBSZXR1cm5zIE5PIGluc3RlYWQgb2Yg
WUVTIGlmIGNhbGxlZCBvbiB0aGUgc2VsZWN0b3IgdGhhdCB0aGUKKy8vIF9hcnJvd0tleURvd25F
dmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nIG1ldGhvZCByZXR1cm5zLgorLy8gVGhpcyBzaG91
bGQgb25seSBoYXBwZW4gaW5zaWRlIC1bTlNXaW5kb3cgX3Byb2Nlc3NLZXlib2FyZFVJS2V5XSwK
Ky8vIGFuZCB0b2dldGhlciB3aXRoIHRoZSBjaGFuZ2UgYmVsb3cgc2hvdWxkIGNhdXNlIHRoYXQg
bWV0aG9kCisvLyB0byByZXR1cm4gTk8gcmF0aGVyIHRoYW4gaGFuZGxpbmcgdGhlIGtleS4KKy8v
IEFsc28gc2V0IGEgMS1zaG90IGZsYWcgZm9yIHRoZSBuZXh0UmVzcG9uZGVyIGNoZWNrIGJlbG93
LgorLSAoQk9PTClyZXNwb25kc1RvU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIGlmICgh
W3N1cGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgIHJldHVybiBOTzsK
KyAgICBTRUwgYXJyb3dLZXlTZWxlY3RvciA9IFtzZWxmIF9hcnJvd0tleURvd25FdmVudFNlbGVj
dG9ySWZQcmVwcm9jZXNzaW5nXTsKKyAgICBpZiAoc2VsZWN0b3IgIT0gYXJyb3dLZXlTZWxlY3Rv
cikKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICBfcHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRpc2Fi
bGVkT25jZSA9IFlFUzsKKyAgICByZXR1cm4gTk87Cit9CisKKy8vIFJldHVybnMgbmlsIGluc3Rl
YWQgb2YgdGhlIG5leHQgcmVzcG9uZGVyIGlmIGNhbGxlZCB3aGVuIHRoZQorLy8gb25lLXNob3Qg
ZmxhZyBpcyBzZXQsIGFuZCBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2lu
ZworLy8gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiBOVUxMLiBUaGlzIHNob3VsZCBvbmx5
IGhhcHBlbiBpbnNpZGUKKy8vIC1bTlNXaW5kb3cgX3Byb2Nlc3NLZXlib2FyZFVJS2V5XSBhbmQg
dG9nZXRoZXIgd2l0aCB0aGUgY2hhbmdlIGFib3ZlCisvLyBzaG91bGQgY2F1c2UgdGhhdCBtZXRo
b2QgdG8gcmV0dXJuIE5PIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBrZXkuCistIChOU1Jlc3Bv
bmRlciAqKW5leHRSZXNwb25kZXIKK3sKKyAgICBCT09MIGRpc2FibGVkID0gX3ByaXZhdGUtPm5l
eHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7CisgICAgX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNh
YmxlZE9uY2UgPSBOTzsKKyAgICBpZiAoZGlzYWJsZWQgJiYgW3NlbGYgX2Fycm93S2V5RG93bkV2
ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmddICE9IE5VTEwpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIFtzdXBlciBuZXh0UmVzcG9uZGVyXTsKK30KKworI2VuZGlmCisKKy0gKHZv
aWQpX3VwZGF0ZUNvbnRyb2xUaW50cworeworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEZyYW1lVmll
dyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47
CisgICAgdmlldy0+dXBkYXRlQ29udHJvbFRpbnRzKCk7Cit9CisKKy8vIERlc3BpdGUgaXRzIG5h
bWUsIHRoaXMgaXMgY2FsbGVkIGF0IGRpZmZlcmVudCB0aW1lcyB0aGFuIHdpbmRvd0RpZEJlY29t
ZUtleSBpcy4KKy8vIEl0IHRha2VzIGludG8gYWNjb3VudCBhbGwgdGhlIG90aGVyIGZhY3RvcnMg
dGhhdCBkZXRlcm1pbmUgd2hlbiBOU0NlbGwgZHJhd3MKKy8vIHdpdGggZGlmZmVyZW50IHRpbnRz
LCBzbyBpdCdzIHRoZSByaWdodCBjYWxsIHRvIHVzZSBmb3IgY29udHJvbCB0aW50cy4gV2UnZCBw
cmVmZXIKKy8vIHRvIGRvIHRoaXMgd2l0aCBBUEkuIDxyZGFyOi8vcHJvYmxlbS81MTM2NzYwPgor
LSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlCit7CisgICAgaWYgKHB0aHJlYWRfbWFpbl9u
cCgpKQorICAgICAgICBbc2VsZiBfdXBkYXRlQ29udHJvbFRpbnRzXTsKKyAgICBlbHNlCisgICAg
ICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoX3VwZGF0ZUNv
bnRyb2xUaW50cykgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpOT107CisKKyAgICBbc3Vw
ZXIgX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZV07Cit9CisKKy0gKHZvaWQpb3RoZXJNb3VzZURvd246
KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQor
ICAgICAgICBbc2VsZiBtb3VzZURvd246ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAgW3N1cGVy
IG90aGVyTW91c2VEb3duOmV2ZW50XTsKK30KKworLSAodm9pZClvdGhlck1vdXNlRHJhZ2dlZDoo
TlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKFtldmVudCBidXR0b25OdW1iZXJdID09IDIpCisg
ICAgICAgIFtzZWxmIG1vdXNlRHJhZ2dlZDpldmVudF07CisgICAgZWxzZQorICAgICAgICBbc3Vw
ZXIgb3RoZXJNb3VzZURyYWdnZWQ6ZXZlbnRdOworfQorCistICh2b2lkKW90aGVyTW91c2VVcDoo
TlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKFtldmVudCBidXR0b25OdW1iZXJdID09IDIpCisg
ICAgICAgIFtzZWxmIG1vdXNlVXA6ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAgW3N1cGVyIG90
aGVyTW91c2VVcDpldmVudF07Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TQXJyYXkg
KFdlYkhUTUxWaWV3KQorCistICh2b2lkKV93ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVj
dG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVjdDooaWQpb2JqZWN0Cit7CisjaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCisgICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3NlbGYg
b2JqZWN0RW51bWVyYXRvcl07CisgICAgV2ViTmV0c2NhcGVQbHVnaW5WaWV3ICp2aWV3OworICAg
IHdoaWxlICgodmlldyA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpCisgICAgICAg
IGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNsYXNz
XV0pCisgICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVj
dDpvYmplY3RdOworI2VuZGlmCit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxW
aWV3IChXZWJJbnRlcm5hbCkKKworLSAodm9pZClfc2VsZWN0aW9uQ2hhbmdlZAoreworICAgIFtz
ZWxmIF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdOworICAgIFtzZWxmIF91cGRhdGVG
b250UGFuZWxdOworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVl
bmNlKHRydWUpOworfQorCistICh2b2lkKV91cGRhdGVGb250UGFuZWwKK3sKKyAgICAvLyBGSVhN
RTogTlNUZXh0VmlldyBiYWlscyBvdXQgaWYgYmVjb21pbmcgb3IgcmVzaWduaW5nIGZpcnN0IHJl
c3BvbmRlciwgZm9yIHdoaWNoIGl0IGhhcyBpdmFyIGZsYWdzLiBOb3QKKyAgICAvLyBzdXJlIGlm
IHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIuCisgICAgCisgICAgaWYgKCFbc2VsZiBf
Y2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1dpbmRvdyAqd2luZG93ID0g
W3NlbGYgd2luZG93XTsKKyAgICAvLyBGSVhNRTogaXMgdGhpcyBmaXJzdC1yZXNwb25kZXIgY2hl
Y2sgY29ycmVjdD8gV2hhdCBoYXBwZW5zIGlmIGEgc3ViZnJhbWUgaXMgZWRpdGFibGUgYW5kIGlz
IGZpcnN0IHJlc3BvbmRlcj8KKyAgICBpZiAoW05TQXBwIGtleVdpbmRvd10gIT0gd2luZG93IHx8
IFt3aW5kb3cgZmlyc3RSZXNwb25kZXJdICE9IHNlbGYpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKKyAgICBOU0ZvbnQgKmZvbnQgPSBuaWw7
CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAg
ICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogZmQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5m
b250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQorICAgICAgICAgICAgZm9udCA9IGZkLT5n
ZXROU0ZvbnQoKTsKKyAgICB9CisgICAgCisKKyAgICAvLyBGSVhNRTogZm9yIG5vdywgcmV0dXJu
IGEgYm9ndXMgZm9udCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlIGVtcHR5IHNlbGVjdGlvbiBmcm9t
IHRoZSBub24tZW1wdHkKKyAgICAvLyBzZWxlY3Rpb24uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJl
bW92ZSB0aGlzIG9uY2UgdGhlIHJlc3Qgb2YgdGhpcyBjb2RlIHdvcmtzIHByb3Blcmx5LgorICAg
IGlmIChmb250ID09IG5pbCkKKyAgICAgICAgZm9udCA9IFtzZWxmIF9oYXNTZWxlY3Rpb25dID8g
W05TRm9udCBtZW51Rm9udE9mU2l6ZToyM10gOiBbTlNGb250IHRvb2xUaXBzRm9udE9mU2l6ZTox
N107CisgICAgQVNTRVJUKGZvbnQgIT0gbmlsKTsKKworICAgIFtbTlNGb250TWFuYWdlciBzaGFy
ZWRGb250TWFuYWdlcl0gc2V0U2VsZWN0ZWRGb250OmZvbnQgaXNNdWx0aXBsZTptdWx0aXBsZUZv
bnRzXTsKKworICAgIC8vIEZJWE1FOiB3ZSBkb24ndCBrZWVwIHRyYWNrIG9mIHNlbGVjdGVkIGF0
dHJpYnV0ZXMsIG9yIHNldCB0aGVtIG9uIHRoZSBmb250IHBhbmVsLiBUaGlzCisgICAgLy8gYXBw
ZWFycyB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgVUkuIEUuZy4sIHVuZGVybGluZWQgdGV4dCBp
biBNYWlsIG9yIFRleHRFZGl0IGlzCisgICAgLy8gbm90IHJlZmxlY3RlZCBpbiB0aGUgZm9udCBw
YW5lbC4gTWF5YmUgc29tZWRheSB0aGlzIHdpbGwgY2hhbmdlLgorfQorCistIChCT09MKV9jYW5T
bWFydENvcHlPckRlbGV0ZQoreworICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWRdKQorICAgICAgICByZXR1cm4gTk87CisgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJh
bWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5OworfQorCistIChO
U0V2ZW50ICopX21vdXNlRG93bkV2ZW50Cit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5tb3VzZURv
d25FdmVudDsKK30KKworLSAoaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPilfaGlnaGxpZ2h0ZXJGb3JU
eXBlOihOU1N0cmluZyopdHlwZQoreworICAgIHJldHVybiBbX3ByaXZhdGUtPmhpZ2hsaWdodGVy
cyBvYmplY3RGb3JLZXk6dHlwZV07Cit9CisKKy0gKFdlYkZyYW1lICopX2ZyYW1lCit7CisgICAg
cmV0dXJuIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV07Cit9CisKKy0gKHZvaWQpcGFz
dGU6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFJldGFpblB0cjxX
ZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7CisgICAgUmVmUHRyPEZyYW1lPiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPnRyeURIVE1MUGFzdGUoKSkK
KyAgICAgICAgcmV0dXJuOyAvLyBESFRNTCBkaWQgdGhlIHdob2xlIG9wZXJhdGlvbgorICAgIGlm
ICghY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQor
ICAgICAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQ
YXN0ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpZRVNdOworICAgIGVsc2UKKyAgICAgICAgY29yZUZy
YW1lLT5lZGl0b3IoKS0+cGFzdGVBc1BsYWluVGV4dCgpOworfQorCistICh2b2lkKXBhc3RlQXNQ
bGFpblRleHQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICgh
W3NlbGYgX2NhbkVkaXRdKQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgX3Bhc3RlQXNQbGFp
blRleHRXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXV07Cit9
CisKKy0gKHZvaWQpY2xvc2VJZk5vdEN1cnJlbnRWaWV3Cit7CisgICAgaWYgKFtbW3NlbGYgX2Zy
YW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gIT0gc2VsZikKKyAgICAgICAgW3NlbGYgY2xv
c2VdOworfQorCistIChET01Eb2N1bWVudEZyYWdtZW50KilfZG9jdW1lbnRGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgcmV0dXJuIFtzZWxm
IF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBpbkNvbnRleHQ6bmls
IGFsbG93UGxhaW5UZXh0Ok5PXTsKK30KKworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorCist
IChCT09MKWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAoreworICAgIC8vIEZJWE1FIDQ3OTkxMzQ6
IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dp
YywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCisgICAgLy8g
dGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIHJldHVybiBb
W3NlbGYgX3dlYlZpZXddIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZF07Cit9CisKKy0gKHZvaWQp
c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgLy8gRklYTUUgNDc5
OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNraW5n
IGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBoZXJlIGJlY2F1c2UKKyAg
ICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisgICAgW1tz
ZWxmIF93ZWJWaWV3XSBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOmZsYWddOworfQorCistICh2
b2lkKXRvZ2dsZUdyYW1tYXJDaGVja2luZzooaWQpc2VuZGVyCit7CisgICAgLy8gRklYTUUgNDc5
OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNraW5n
IGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBoZXJlIGJlY2F1c2UKKyAg
ICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCisgICAgW1tz
ZWxmIF93ZWJWaWV3XSB0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6c2VuZGVyXTsKK30KKworCitzdGF0
aWMgQ0dQb2ludCBjb3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvckFwcEtpdFNjcmVlblBvaW50KE5T
UG9pbnQgcG9pbnQpCit7CisgICAgTlNBcnJheSAqc2NyZWVucyA9IFtOU1NjcmVlbiBzY3JlZW5z
XTsKKyAgICAKKyAgICBpZiAoW3NjcmVlbnMgY291bnRdID09IDApIHsKKyAgICAgICAgLy8gWW91
IGNvdWxkIHRoZW9yZXRpY2FsbHkgZ2V0IGhlcmUgaWYgcnVubmluZyB3aXRoIG5vIG1vbml0b3Is
IGluIHdoaWNoIGNhc2UgaXQgZG9lc24ndCBtYXR0ZXIKKyAgICAgICAgLy8gbXVjaCB3aGVyZSB0
aGUgIm9uLXNjcmVlbiIgcG9pbnQgaXMuCisgICAgICAgIHJldHVybiBDR1BvaW50TWFrZShwb2lu
dC54LCBwb2ludC55KTsKKyAgICB9CisgICAgCisgICAgLy8gRmxpcCB0aGUgeSBjb29yZGluYXRl
IGZyb20gdGhlIHRvcCBvZiB0aGUgbWVudSBiYXIgc2NyZWVuIC0tIHNlZSA0NjM2MzkwCisgICAg
cmV0dXJuIENHUG9pbnRNYWtlKHBvaW50LngsIE5TTWF4WShbW3NjcmVlbnMgb2JqZWN0QXRJbmRl
eDowXSBmcmFtZV0pIC0gcG9pbnQueSk7Cit9CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisKKy0gKHZv
aWQpb3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFO
RF9QUk9MT0dVRQorCisgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNr
ZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKKyAgICBpZiAoIWNoZWNrZXIpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIE5TUGFuZWwgKnN1YnN0aXR1dGlvbnNQYW5lbCA9IFtjaGVja2VyIHN1YnN0aXR1dGlv
bnNQYW5lbF07CisgICAgaWYgKFtzdWJzdGl0dXRpb25zUGFuZWwgaXNWaXNpYmxlXSkgeworICAg
ICAgICBbc3Vic3RpdHV0aW9uc1BhbmVsIG9yZGVyT3V0OnNlbmRlcl07CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgW3N1YnN0aXR1dGlvbnNQYW5lbCBvcmRlckZyb250OnNlbmRlcl07Cit9
CisKKy8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMg
bG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0aGVzZSBtZXRob2RzIGhlcmUgYmVjYXVzZQor
Ly8gdGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorCistIChCT09M
KXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXdd
IHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0U21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHNldFNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVTbWFydEluc2Vy
dERlbGV0ZTooaWQpc2VuZGVyCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVTbWFydElu
c2VydERlbGV0ZTpzZW5kZXJdOworfQorCistIChCT09MKWlzQXV0b21hdGljUXVvdGVTdWJzdGl0
dXRpb25FbmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNR
dW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY1F1b3Rl
U3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBz
ZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6ZmxhZ107Cit9CisKKy0gKHZvaWQp
dG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246KGlkKXNlbmRlcgoreworICAgIFtbc2Vs
ZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246c2VuZGVyXTsKK30K
KworLSAoQk9PTClpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkCit7CisgICAgcmV0dXJu
IFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZF07Cit9CisK
Ky0gKHZvaWQpc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZworewor
ICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6Zmxh
Z107Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjooaWQpc2VuZGVy
Cit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOnNl
bmRlcl07Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZAor
eworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bkVuYWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFi
bGVkOihCT09MKWZsYWcKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY0Rhc2hT
dWJzdGl0dXRpb25FbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb246KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xl
QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjpzZW5kZXJdOworfQorCistIChCT09MKWlzQXV0b21h
dGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXdd
IGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0QXV0
b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgW1tzZWxmIF93
ZWJWaWV3XSBzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOmZsYWddOworfQorCist
ICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDooaWQpc2VuZGVyCit7CisgICAg
W1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6c2VuZGVyXTsK
K30KKworLSAoQk9PTClpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQKK3sKKyAg
ICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQ6KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmlld10gdG9n
Z2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOnNlbmRlcl07Cit9CisKKyNlbmRpZgorCist
ICh2b2lkKV9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyCit7CisgICAgLy8g
RGljdGlvbmFyeSBBUEkgd2lsbCBhY2NlcHQgYSB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5nIGFuZCBk
aXNwbGF5IFVJIGFzIGlmIGl0IHdlcmUgcmVhbCB0ZXh0LAorICAgIC8vIHNvIGJhaWwgb3V0IGVh
cmx5IHRvIGF2b2lkIHRoYXQuCisgICAgaWYgKFtbW3NlbGYgc2VsZWN0ZWRTdHJpbmddIF93ZWJr
aXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2VdIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5nID0gW3NlbGYgc2VsZWN0
ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBO
U1JlY3QgcmVjdCA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uQm91bmRzKCk7CisKKyNpZm5kZWYgQlVJ
TERJTkdfT05fVElHRVIKKyAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbYXR0clN0cmlu
ZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwxKV07CisgICAgTlNGb250ICpm
b250ID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOworICAg
IGlmIChmb250KQorICAgICAgICByZWN0Lm9yaWdpbi55ICs9IFtmb250IGFzY2VuZGVyXTsKKyNl
bmRpZgorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCisgICAgW3NlbGYgc2hvd0RlZmluaXRpb25Gb3JBdHRyaWJ1dGVkU3Ry
aW5nOmF0dHJTdHJpbmcgYXRQb2ludDpyZWN0Lm9yaWdpbl07CisgICAgcmV0dXJuOworI2VuZGlm
CisKKyAgICAvLyBXZSBzb2Z0IGxpbmsgdG8gZ2V0IHRoZSBmdW5jdGlvbiB0aGF0IGRpc3BsYXlz
IHRoZSBkaWN0aW9uYXJ5IChlaXRoZXIgcG9wLXVwIHdpbmRvdyBvciBhcHApIHRvIGF2b2lkIHRo
ZSBwZXJmb3JtYW5jZQorICAgIC8vIHBlbmFsdHkgb2YgbGlua2luZyB0byBhbm90aGVyIGZyYW1l
d29yay4gVGhpcyBmdW5jdGlvbiBjaGFuZ2VkIHNpZ25hdHVyZSBhcyB3ZWxsIGFzIGZyYW1ld29y
ayBiZXR3ZWVuIFRpZ2VyIGFuZCBMZW9wYXJkLAorICAgIC8vIHNvIHRoZSB0d28gY2FzZXMgYXJl
IGhhbmRsZWQgc2VwYXJhdGVseS4KKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgdHlw
ZWRlZiBPU1N0YXR1cyAoKlNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pKGlkIGluV29yZFN0cmlu
ZywgTlNSZWN0IGluV29yZEJvdW5kYXJ5LCBVSW50MTYgaW5MaW5lRGlyZWN0aW9uKTsKKyAgICBj
b25zdCBjaGFyICpmcmFtZXdvcmtQYXRoID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Fw
cGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGFuZ0FuYWx5c2lzLmZyYW1l
d29yay9MYW5nQW5hbHlzaXMiOworICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uTmFtZSA9ICJEQ01E
aWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3ciOworI2Vsc2UKKyAgICB0eXBlZGVmIHZvaWQgKCpT
ZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uKShpZCB1bnVzZWREaWN0aW9uYXJ5UmVmLCBpZCBpbldv
cmRTdHJpbmcsIENGUmFuZ2Ugc2VsZWN0aW9uUmFuZ2UsIGlkIHVudXNlZEZvbnQsIENHUG9pbnQg
dGV4dE9yaWdpbiwgQm9vbGVhbiB2ZXJ0aWNhbFRleHQsIGlkIHVudXNlZFRyYW5zZm9ybSk7Cisg
ICAgY29uc3QgY2hhciAqZnJhbWV3b3JrUGF0aCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jr
cy9DYXJib24uZnJhbWV3b3JrL0ZyYW1ld29ya3MvSElUb29sYm94LmZyYW1ld29yay9ISVRvb2xi
b3giOworICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uTmFtZSA9ICJISURpY3Rpb25hcnlXaW5kb3dT
aG93IjsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgbG9va2VkRm9yRnVuY3Rpb24gPSBmYWxz
ZTsKKyAgICBzdGF0aWMgU2VydmljZVdpbmRvd1Nob3dGdW5jdGlvbiBkaWN0aW9uYXJ5U2Vydmlj
ZVdpbmRvd1Nob3cgPSBOVUxMOworCisgICAgaWYgKCFsb29rZWRGb3JGdW5jdGlvbikgeworICAg
ICAgICB2b2lkKiBsYW5nQW5hbHlzaXNGcmFtZXdvcmsgPSBkbG9wZW4oZnJhbWV3b3JrUGF0aCwg
UlRMRF9MQVpZKTsKKyAgICAgICAgQVNTRVJUKGxhbmdBbmFseXNpc0ZyYW1ld29yayk7CisgICAg
ICAgIGlmIChsYW5nQW5hbHlzaXNGcmFtZXdvcmspCisgICAgICAgICAgICBkaWN0aW9uYXJ5U2Vy
dmljZVdpbmRvd1Nob3cgPSAoU2VydmljZVdpbmRvd1Nob3dGdW5jdGlvbilkbHN5bShsYW5nQW5h
bHlzaXNGcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIGxvb2tlZEZvckZ1bmN0aW9u
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlQoZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93
KTsKKyAgICBpZiAoIWRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdykgeworICAgICAgICBOU0xv
ZyhAIkNvdWxkbid0IGZpbmQgdGhlICVzIGZ1bmN0aW9uIGluICVzIiwgZnVuY3Rpb25OYW1lLCBm
cmFtZXdvcmtQYXRoKTsgCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZmRlZiBCVUlMRElO
R19PTl9USUdFUgorICAgIC8vIEZJWE1FOiBtdXN0IGNoZWNrIGZvciByaWdodC10by1sZWZ0IGhl
cmUKKyAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0OworCisgICAgLy8gRklYTUU6IHRoZSBkaWN0aW9uYXJ5IEFQSSBl
eHBlY3RzIHRoZSByZWN0IGZvciB0aGUgZmlyc3QgbGluZSBvZiBzZWxlY3Rpb24uIFBhc3NpbmcK
KyAgICAvLyB0aGUgcmVjdCBmb3IgdGhlIGVudGlyZSBzZWxlY3Rpb24sIGFzIHdlIGRvIGhlcmUs
IHBvc2l0aW9ucyB0aGUgcG9wLXVwIHdpbmRvdyBuZWFyCisgICAgLy8gdGhlIGJvdHRvbSBvZiB0
aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGF0IHRoZSBzZWxlY3RlZCB3b3JkLgorICAgIHJlY3Qg
PSBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpuaWxdOworICAgIHJlY3Qub3JpZ2luID0g
W1tzZWxmIHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpyZWN0Lm9yaWdpbl07CisgICAgTlNE
YXRhICpkYXRhID0gW2F0dHJTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRy
U3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOworICAgIGRpY3Rpb25hcnlT
ZXJ2aWNlV2luZG93U2hvdyhkYXRhLCByZWN0LCAod3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRp
bmdEaXJlY3Rpb25SaWdodFRvTGVmdCkgPyAxIDogMCk7CisjZWxzZQorICAgIC8vIFRoZSBISURp
Y3Rpb25hcnlXaW5kb3dTaG93IGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBvcmlnaW4sIGluIENHIHNj
cmVlbiBjb29yZGluYXRlcywgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0ZXh0IGluIHRoZSBz
ZWxlY3Rpb24uCisgICAgLy8gRklYTUUgNDk0NTgwODogV2UgYXBwcm94aW1hdGUgdGhpcyBpbiBh
IHdheSB0aGF0IHdvcmtzIHdlbGwgd2hlbiBhIHNpbmdsZSB3b3JkIGlzIHNlbGVjdGVkLCBhbmQg
bGVzcyB3ZWxsIGluIHNvbWUgb3RoZXIgY2FzZXMKKyAgICAvLyAoYnV0IG5vIHdvcnNlIHRoYW4g
d2UgZGlkIGluIFRpZ2VyKQorICAgIE5TUG9pbnQgd2luZG93UG9pbnQgPSBbc2VsZiBjb252ZXJ0
UG9pbnQ6cmVjdC5vcmlnaW4gdG9WaWV3Om5pbF07CisgICAgTlNQb2ludCBzY3JlZW5Qb2ludCA9
IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2luZG93UG9pbnRdOworCisgICAg
ZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KG5pbCwgYXR0clN0cmluZywgQ0ZSYW5nZU1ha2Uo
MCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSksIG5pbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvcmVHcmFwaGljc1NjcmVlblBvaW50Rm9yQXBwS2l0U2NyZWVuUG9pbnQoc2NyZWVu
UG9pbnQpLCBmYWxzZSwgbmlsKTsKKyNlbmRpZgorfQorCistICh2b2lkKV9ob3ZlckZlZWRiYWNr
U3VzcGVuZGVkQ2hhbmdlZAoreworICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2
ZW50XTsKK30KKworLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihLZXlib2FyZEV2
ZW50KilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91bGRTYXZlCit7CisgICAgLy8g
QXNrIEFwcEtpdCB0byBwcm9jZXNzIHRoZSBrZXkgZXZlbnQgLS0gaXQgd2lsbCBjYWxsIGJhY2sg
d2l0aCBlaXRoZXIgaW5zZXJ0VGV4dCBvciBkb0NvbW1hbmRCeVNlbGVjdG9yLgorICAgIFdlYkhU
TUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIHBhcmFt
ZXRlcnMuZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7CisgICAgcGFyYW1ldGVycy5zaG91bGRTYXZl
Q29tbWFuZCA9IHNob3VsZFNhdmU7CisgICAgLy8gSWYgd2UncmUgaW50ZXJjZXB0aW5nIHRoZSBp
bml0aWFsIElNIGNhbGwgd2UgYXNzdW1lIHRoYXQgdGhlIElNIGhhcyBjb25zdW1lZCB0aGUgZXZl
bnQsIAorICAgIC8vIGFuZCBvbmx5IGNoYW5nZSB0aGlzIGFzc3VtcHRpb24gaWYgb25lIG9mIHRo
ZSBOU1RleHRJbnB1dC9SZXNwb25kZXIgY2FsbGJhY2tzIGlzIHVzZWQuCisgICAgLy8gV2UgYXNz
dW1lIHRoZSBJTSB3aWxsICpub3QqIGNvbnN1bWUgaG90a2V5IHNlcXVlbmNlcworICAgIHBhcmFt
ZXRlcnMuY29uc3VtZWRCeUlNID0gIWV2ZW50LT5tZXRhS2V5KCkgJiYgc2hvdWxkU2F2ZTsKKwor
ICAgIGlmIChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRmb3JtRXZlbnQgPSBldmVu
dC0+a2V5RXZlbnQoKSkgeworICAgICAgICBOU0V2ZW50ICptYWNFdmVudCA9IHBsYXRmb3JtRXZl
bnQtPm1hY0V2ZW50KCk7CisgICAgICAgIGlmIChbbWFjRXZlbnQgdHlwZV0gPT0gTlNLZXlEb3du
ICYmIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5RG93bjptYWNFdmVudF0pCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChbbWFjRXZlbnQg
dHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBwYXJhbWV0ZXJzLmV2ZW50ID0gZXZlbnQ7CisgICAgICAgIF9wcml2YXRl
LT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gJnBhcmFtZXRlcnM7CisgICAgICAgIF9w
cml2YXRlLT5yZWNlaXZlZE5PT1AgPSBOTzsKKyAgICAgICAgY29uc3QgVmVjdG9yPEtleXByZXNz
Q29tbWFuZD4mIGNvbW1hbmRzID0gZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKTsKKyAgICAgICAg
Ym9vbCBoYXNLZXlwcmVzc0NvbW1hbmQgPSAhY29tbWFuZHMuaXNFbXB0eSgpOworCisgICAgICAg
IC8vIEZJWE1FOiBpbnRlcnByZXRLZXlFdmVudHMgZG9lc24ndCBtYXRjaCBhcHBsaWNhdGlvbiBr
ZXkgZXF1aXZhbGVudHMgKHN1Y2ggYXMgQ21kK0EpLAorICAgICAgICAvLyBhbmQgc2VuZHMgbm9v
cDogZm9yIHRob3NlLiBBcyBhIHJlc3VsdCwgd2UgZG9uJ3QgaGFuZGxlIHRob3NlIGZyb20gd2l0
aGluIFdlYkNvcmUsCisgICAgICAgIC8vIGJ1dCBzZW5kIGEgZnVsbCBzZXF1ZW5jZSBvZiBET00g
ZXZlbnRzLCBpbmNsdWRpbmcgYW4gdW5uZWVkZWQga2V5cHJlc3MuCisgICAgICAgIGlmIChwYXJh
bWV0ZXJzLnNob3VsZFNhdmVDb21tYW5kIHx8ICFoYXNLZXlwcmVzc0NvbW1hbmQpCisgICAgICAg
ICAgICBbc2VsZiBpbnRlcnByZXRLZXlFdmVudHM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0Om1h
Y0V2ZW50XV07CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBjb21t
YW5kcy5zaXplKCk7CisgICAgICAgICAgICAvLyBBcmUgdGhlcmUgY29tbWFuZHMgdGhhdCB3b3Vs
ZCBqdXN0IGNhdXNlIHRleHQgaW5zZXJ0aW9uIGlmIGV4ZWN1dGVkIHZpYSBFZGl0b3I/CisgICAg
ICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiBhYm91dCBt
b2RlIHRvIGRlY2lkZSBob3cgdGhleSBzaG91bGQgYmUgdHJlYXRlZCwgc28gd2UgbGVhdmUgaXQg
dXBvbiBXZWJDb3JlCisgICAgICAgICAgICAvLyB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1tZWRp
YXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3MgZXZl
bnQgYmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAvLyAoZS5nLiBUYWIgdGhhdCBpbnNlcnRzIGEg
VGFiIGNoYXJhY3Rlciwgb3IgRW50ZXIpLgorICAgICAgICAgICAgYm9vbCBoYXZlVGV4dEluc2Vy
dGlvbkNvbW1hbmRzID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChbc2VsZiBjb3JlQ29tbWFuZEJ5U2Vs
ZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpXS5pc1Rl
eHRJbnNlcnRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgaGF2ZVRleHRJbnNlcnRpb25Db21t
YW5kcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWhhdmVUZXh0SW5z
ZXJ0aW9uQ29tbWFuZHMgfHwgcGxhdGZvcm1FdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6Q2hhcikgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tYW5kc1tpXS5jb21tYW5k
TmFtZSA9PSAiaW5zZXJ0VGV4dDoiKQorICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYgaW5z
ZXJ0VGV4dDpjb21tYW5kc1tpXS50ZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgW3NlbGYgZG9Db21tYW5kQnlTZWxlY3RvcjpOU1NlbGVjdG9y
RnJvbVN0cmluZyhjb21tYW5kc1tpXS5jb21tYW5kTmFtZSldOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVycyA9IDA7CisgICAgfQorICAgIHJldHVybiAoIV9wcml2YXRlLT5yZWNl
aXZlZE5PT1AgJiYgcGFyYW1ldGVycy5ldmVudFdhc0hhbmRsZWQpIHx8IHBhcmFtZXRlcnMuY29u
c3VtZWRCeUlNOworfQorCistIChXZWJDb3JlOjpDYWNoZWRJbWFnZSopcHJvbWlzZWREcmFnVElG
RkRhdGFTb3VyY2UKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRh
U291cmNlOworfQorCistICh2b2lkKXNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOihXZWJD
b3JlOjpDYWNoZWRJbWFnZSopc291cmNlCit7CisgICAgaWYgKHNvdXJjZSkKKyAgICAgICAgc291
cmNlLT5hZGRDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOworICAgIAorICAgIGlmIChfcHJp
dmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCisgICAgICAgIF9wcml2YXRlLT5wcm9t
aXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgp
KTsKKyAgICBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSBzb3VyY2U7Cit9
CisKKyN1bmRlZiBDT01NQU5EX1BST0xPR1VFCisKKy0gKHZvaWQpX2xheW91dElmTmVlZGVkCit7
CisgICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CisKKyAgICBpZiAoX3By
aXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyB8fCBbc2VsZiBfbmVlZHNMYXlvdXRdKQorICAgICAg
ICBbc2VsZiBsYXlvdXRdOworfQorCistICh2b2lkKV93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNp
dmUKK3sKKyAgICBbc2VsZiBfbGF5b3V0SWZOZWVkZWRdOworCisjaWZuZGVmIE5ERUJVRworICAg
IF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOworI2VuZGlmCisKKyAgICBOU011
dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdOworCisgICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9B
cnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rl
c2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjb3VudDsgKytpKQorICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJ
bmRleDppXSBfbGF5b3V0SWZOZWVkZWRdOworCisgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
cmVsZWFzZV07CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vi
dmlld3MgPSBOTzsKKyNlbmRpZgorfQorCistICh2b2lkKSBfZGVzdHJveUFsbFdlYlBsdWdpbnMK
K3sKKyAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lBbGxQbHVnaW5zXTsKK30K
KworLSAoQk9PTClfaXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcgoreworICAgIHJldHVybiBfcHJp
dmF0ZS0+cmVzaWduaW5nRmlyc3RSZXNwb25kZXI7Cit9CisKKy0gKEJPT0wpX25lZWRzTGF5b3V0
Cit7CisgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9uZWVkc0xheW91dF07Cit9CisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCistICh2b2lkKWF0dGFjaFJvb3RMYXllcjooQ0FM
YXllciopbGF5ZXIKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7Cisg
ICAgICAgIFdlYkxheWVySG9zdGluZ1ZpZXcqIGhvc3RpbmdWaWV3ID0gW1tXZWJMYXllckhvc3Rp
bmdWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzZWxmIGJvdW5kc11dOworICAgICAgICBbaG9z
dGluZ1ZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooTlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3
SGVpZ2h0U2l6YWJsZSldOworICAgICAgICBbc2VsZiBhZGRTdWJ2aWV3Omhvc3RpbmdWaWV3XTsK
KyAgICAgICAgW2hvc3RpbmdWaWV3IHJlbGVhc2VdOworICAgICAgICAvLyBob3N0aW5nVmlldyBp
cyBvd25lZCBieSBiZWluZyBhIHN1YnZpZXcgb2Ygc2VsZgorICAgICAgICBfcHJpdmF0ZS0+bGF5
ZXJIb3N0aW5nVmlldyA9IGhvc3RpbmdWaWV3OworICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9z
dGFydGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxmIF9mcmFtZV1dOworICAg
IH0KKworICAgIC8vIE1ha2UgYSBjb250YWluZXIgbGF5ZXIsIHdoaWNoIHdpbGwgZ2V0IHNpemVk
L3Bvc2l0aW9uZWQgYnkgQXBwS2l0IGFuZCBDQQorICAgIENBTGF5ZXIqIHZpZXdMYXllciA9IFtD
QUxheWVyIGxheWVyXTsKKyAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0TGF5ZXI6
dmlld0xheWVyXTsKKyAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0V2FudHNMYXll
cjpZRVNdOworICAgIAorICAgIC8vIFBhcmVudCBvdXIgcm9vdCBsYXllciBpbiB0aGUgY29udGFp
bmVyIGxheWVyCisgICAgW3ZpZXdMYXllciBhZGRTdWJsYXllcjpsYXllcl07Cit9CisKKy0gKHZv
aWQpZGV0YWNoUm9vdExheWVyCit7CisgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3
KSB7CisgICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRMYXllcjpuaWxdOwor
ICAgICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0V2FudHNMYXllcjpOT107Cisg
ICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsK
KyAgICAgICAgX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgPSBuaWw7CisgICAgICAgIFtbc2Vs
ZiBfd2ViVmlld10gX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6W3NlbGYg
X2ZyYW1lXV07CisgICAgfQorfQorI2VuZGlmCisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdl
YkhUTUxWaWV3IChXZWJOU1RleHRJbnB1dFN1cHBvcnQpCisKKy0gKE5TQXJyYXkgKil2YWxpZEF0
dHJpYnV0ZXNGb3JNYXJrZWRUZXh0Cit7CisgICAgc3RhdGljIE5TQXJyYXkgKnZhbGlkQXR0cmli
dXRlczsKKyAgICBpZiAoIXZhbGlkQXR0cmlidXRlcykgeworICAgICAgICB2YWxpZEF0dHJpYnV0
ZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKKyAgICAgICAgICAgIE5TVW5k
ZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lLCBOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZSwK
KyAgICAgICAgICAgIE5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWUsIE5TVGV4dElu
cHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUsIG5pbF07CisgICAgICAgIC8vIE5TVGV4
dCBhbHNvIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcywgYnV0IGl0J3MKKyAgICAg
ICAgLy8gaGFyZCB0byB0ZWxsIHdoaWNoIGFyZSByZWFsbHkgcmVxdWlyZWQgZm9yIHRleHQgaW5w
dXQgdG8KKyAgICAgICAgLy8gd29yayB3ZWxsOyBJIGhhdmUgbm90IHNlZW4gYW55IGlucHV0IG1l
dGhvZCBtYWtlIHVzZSBvZiB0aGVtIHlldC4KKyAgICAgICAgLy8gICAgIE5TRm9udEF0dHJpYnV0
ZU5hbWUsIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKKyAgICAgICAgLy8gICAgIE5T
QmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwgTlNMYW5ndWFnZUF0dHJpYnV0ZU5hbWUuCisg
ICAgICAgIENGUmV0YWluKHZhbGlkQXR0cmlidXRlcyk7CisgICAgfQorICAgIExPRyhUZXh0SW5w
dXQsICJ2YWxpZEF0dHJpYnV0ZXNGb3JNYXJrZWRUZXh0IC0+ICguLi4pIik7CisgICAgcmV0dXJu
IHZhbGlkQXR0cmlidXRlczsKK30KKworLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250
ZXh0Cit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQgPyBbc3VwZXIg
aW5wdXRDb250ZXh0XSA6IG5pbDsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopdGV4dFN0
b3JhZ2UKK3sKKyAgICBpZiAoIV9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKKyAgICAg
ICAgTE9HKFRleHRJbnB1dCwgInRleHRTdG9yYWdlIC0+IG5pbCIpOworICAgICAgICByZXR1cm4g
bmlsOworICAgIH0KKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IFtzZWxmIGF0dHJp
YnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgVUlOVF9NQVgpXTsKKyAgICAK
KyAgICBMT0coVGV4dElucHV0LCAidGV4dFN0b3JhZ2UgLT4gXCIlQFwiIiwgcmVzdWx0ID8gW3Jl
c3VsdCBzdHJpbmddIDogQCIiKTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIHJldHVybiBhbiBl
bXB0eSBzdHJpbmcgcmF0aGVyIHRoYW4gbnVsbCB0byBwcmV2ZW50IFRTTSBmcm9tIGNhbGxpbmcg
LXN0cmluZworICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBbW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOworfQorCistIChOU1VJ
bnRlZ2VyKWNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQpdGhlUG9pbnQKK3sKKyAgICBO
U1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBb
c2VsZiBfZnJhbWVdOworCisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgdGhlUG9pbnQgPSBbd2lu
ZG93IGNvbnZlcnRTY3JlZW5Ub0Jhc2U6dGhlUG9pbnRdOworICAgIHRoZVBvaW50ID0gW3NlbGYg
Y29udmVydFBvaW50OnRoZVBvaW50IGZyb21WaWV3Om5pbF07CisKKyAgICBET01SYW5nZSAqcmFu
Z2UgPSBbZnJhbWUgX2NoYXJhY3RlclJhbmdlQXRQb2ludDp0aGVQb2ludF07CisgICAgaWYgKCFy
YW5nZSkgeworICAgICAgICBMT0coVGV4dElucHV0LCAiY2hhcmFjdGVySW5kZXhGb3JQb2ludDoo
JWYsICVmKSAtPiBOU05vdEZvdW5kIiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSk7CisgICAgICAg
IHJldHVybiBOU05vdEZvdW5kOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSBb
ZnJhbWUgX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTpyYW5nZV0ubG9jYXRpb247CisgICAgTE9H
KFRleHRJbnB1dCwgImNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KCVmLCAlZikgLT4gJXUiLCB0aGVQ
b2ludC54LCB0aGVQb2ludC55LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0g
KE5TUmVjdClmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlNSYW5nZSl0aGVSYW5nZQoreyAg
ICAKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAgIAorICAgIC8vIEp1
c3QgdG8gbWF0Y2ggTlNUZXh0VmlldydzIGJlaGF2aW9yLiBSZWdyZXNzaW9uIHRlc3RzIGNhbm5v
dCBkZXRlY3QgdGhpczsKKyAgICAvLyB0byByZXByb2R1Y2UsIHVzZSBhIHRlc3QgYXBwbGljYXRp
b24gZnJvbSBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjgyCisgICAg
Ly8gKHR5cGUgc29tZXRoaW5nOyB0cnkgcmFuZ2VzICgxLCAtMSkgYW5kICgyLCAtMSkuCisgICAg
aWYgKCh0aGVSYW5nZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCA8IHRoZVJhbmdlLmxvY2F0
aW9uKSAmJiAodGhlUmFuZ2UubG9jYXRpb24gKyB0aGVSYW5nZS5sZW5ndGggIT0gMCkpCisgICAg
ICAgIHRoZVJhbmdlLmxlbmd0aCA9IDA7CisgICAgCisgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2Zy
YW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2VdOworICAgIGlmICghcmFuZ2Up
IHsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigl
dSwgJXUpIC0+ICgwLCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5n
dGgpOworICAgICAgICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUKFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOworICAgIEFTU0VSVChbcmFuZ2Ug
ZW5kQ29udGFpbmVyXSk7CisgICAgCisgICAgTlNSZWN0IHJlc3VsdFJlY3QgPSBbZnJhbWUgX2Zp
cnN0UmVjdEZvckRPTVJhbmdlOnJhbmdlXTsKKyAgICByZXN1bHRSZWN0ID0gW3NlbGYgY29udmVy
dFJlY3Q6cmVzdWx0UmVjdCB0b1ZpZXc6bmlsXTsKKworICAgIE5TV2luZG93ICp3aW5kb3cgPSBb
c2VsZiB3aW5kb3ddOworICAgIGlmICh3aW5kb3cpCisgICAgICAgIHJlc3VsdFJlY3Qub3JpZ2lu
ID0gW3dpbmRvdyBjb252ZXJ0QmFzZVRvU2NyZWVuOnJlc3VsdFJlY3Qub3JpZ2luXTsKKyAgICAK
KyAgICBMT0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkg
LT4gKCVmLCAlZiwgJWYsICVmKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5ndGgs
IHJlc3VsdFJlY3Qub3JpZ2luLngsIHJlc3VsdFJlY3Qub3JpZ2luLnksIHJlc3VsdFJlY3Quc2l6
ZS53aWR0aCwgcmVzdWx0UmVjdC5zaXplLmhlaWdodCk7CisgICAgcmV0dXJuIHJlc3VsdFJlY3Q7
Cit9CisKKy0gKE5TUmFuZ2Upc2VsZWN0ZWRSYW5nZQoreworICAgIGlmICghaXNUZXh0SW5wdXQo
Y29yZShbc2VsZiBfZnJhbWVdKSkpIHsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgInNlbGVjdGVk
UmFuZ2UgLT4gKE5TTm90Rm91bmQsIDApIik7CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShO
U05vdEZvdW5kLCAwKTsKKyAgICB9CisgICAgTlNSYW5nZSByZXN1bHQgPSBbW3NlbGYgX2ZyYW1l
XSBfc2VsZWN0ZWROU1JhbmdlXTsKKworICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdl
IC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCistIChOU1JhbmdlKW1hcmtlZFJhbmdlCit7CisgICAgV2ViRnJhbWUg
KndlYkZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3
ZWJGcmFtZSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5n
ZSgwLCAwKTsKKyAgICBOU1JhbmdlIHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNSYW5n
ZTpjb3JlRnJhbWUtPmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCldOworCisgICAg
TE9HKFRleHRJbnB1dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9u
LCByZXN1bHQubGVuZ3RoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOihOU1JhbmdlKW5zUmFuZ2UK
K3sKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKGZyYW1lKTsKKyAgICBpZiAoIWlzVGV4dElucHV0KGNvcmVGcmFtZSkgfHwg
aXNJblBhc3N3b3JkRmllbGQoY29yZUZyYW1lKSkgeworICAgICAgICBMT0coVGV4dElucHV0LCAi
YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxv
Y2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAg
IERPTVJhbmdlICpkb21SYW5nZSA9IFtmcmFtZSBfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOm5z
UmFuZ2VdOworICAgIGlmICghZG9tUmFuZ2UpIHsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgImF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwgbnNSYW5nZS5sb2Nh
dGlvbiwgbnNSYW5nZS5sZW5ndGgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKworICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6Y29yZShkb21SYW5nZSldOworICAgIAorICAgIC8vIFtO
U0F0dHJpYnV0ZWRTdHJpbmcoV2ViS2l0RXh0cmFzKSBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2U6XSAgaW5zaXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGluZyAKKyAgICAvLyB3aGl0ZXNw
YWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQg
bWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CisgICAgLy8gVG8gd29yayBhcm91bmQg
dGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50IHN0cmluZyB0byB0aGUgY29ycmVjdCBsZW5n
dGguCisgICAgaWYgKFtyZXN1bHQgbGVuZ3RoXSA+IG5zUmFuZ2UubGVuZ3RoKSB7CisgICAgICAg
IEFTU0VSVChbcmVzdWx0IGxlbmd0aF0gPT0gbnNSYW5nZS5sZW5ndGggKyAxKTsKKyAgICAgICAg
QVNTRVJUKFtbcmVzdWx0IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpuc1JhbmdlLmxlbmd0aF0g
PT0gJ1xuJyB8fCBbW3Jlc3VsdCBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6bnNSYW5nZS5sZW5n
dGhdID09ICcgJyk7CisgICAgICAgIHJlc3VsdCA9IFtyZXN1bHQgYXR0cmlidXRlZFN1YnN0cmlu
Z0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBuc1JhbmdlLmxlbmd0aCldOworICAgIH0KKyAgICBM
T0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBc
IiVAXCIiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3VsdCBzdHJpbmdd
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyB0ZXN0IGZvciAxMC40IGJlY2F1c2Ugb2Yg
PHJkYXI6Ly9wcm9ibGVtLzQyNDM0NjM+CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKy0gKGxv
bmcpY29udmVyc2F0aW9uSWRlbnRpZmllcgoreworICAgIHJldHVybiAobG9uZylzZWxmOworfQor
I2Vsc2UKKy0gKE5TSW50ZWdlciljb252ZXJzYXRpb25JZGVudGlmaWVyCit7CisgICAgcmV0dXJu
IChOU0ludGVnZXIpc2VsZjsKK30KKyNlbmRpZgorCistIChCT09MKWhhc01hcmtlZFRleHQKK3sK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBCT09MIHJl
c3VsdCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigp
OworICAgIExPRyhUZXh0SW5wdXQsICJoYXNNYXJrZWRUZXh0IC0+ICV1IiwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCistICh2b2lkKXVubWFya1RleHQKK3sKKyAgICBMT0coVGV4
dElucHV0LCAidW5tYXJrVGV4dCIpOworCisgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFt
ZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgor
ICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9
IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKKworICAgIGlmIChwYXJhbWV0ZXJzKSB7
CisgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IFlFUzsKKyAgICAgICAgcGFy
YW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87CisgICAgfQorICAgIAorICAgIGlmIChGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0
b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uKCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4dHJhY3RVbmRl
cmxpbmVzKE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRl
cmxpbmU+JiByZXN1bHQpCit7CisgICAgaW50IGxlbmd0aCA9IFtbc3RyaW5nIHN0cmluZ10gbGVu
Z3RoXTsKKworICAgIGludCBpID0gMDsKKyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAg
ICBOU1JhbmdlIHJhbmdlOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3N0cmluZyBh
dHRyaWJ1dGVzQXRJbmRleDppIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTomcmFuZ2UgaW5SYW5nZTpO
U01ha2VSYW5nZShpLCBsZW5ndGggLSBpKV07CisKKyAgICAgICAgaWYgKE5TTnVtYmVyICpzdHls
ZSA9IFthdHRycyBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdKSB7
CisgICAgICAgICAgICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKKyAgICAgICAgICAgIGlm
IChOU0NvbG9yICpjb2xvckF0dHIgPSBbYXR0cnMgb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lQ29s
b3JBdHRyaWJ1dGVOYW1lXSkKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbU5TQ29s
b3IoW2NvbG9yQXR0ciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNw
YWNlXSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKHJh
bmdlLmxvY2F0aW9uLCBOU01heFJhbmdlKHJhbmdlKSwgY29sb3IsIFtzdHlsZSBpbnRWYWx1ZV0g
PiAxKSk7CisgICAgICAgIH0KKworICAgICAgICBpID0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5s
ZW5ndGg7CisgICAgfQorfQorCistICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxl
Y3RlZFJhbmdlOihOU1JhbmdlKW5ld1NlbFJhbmdlCit7CisgICAgQk9PTCBpc0F0dHJpYnV0ZWRT
dHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11d
OyAvLyBPdGhlcndpc2UsIE5TU3RyaW5nCisKKyAgICBMT0coVGV4dElucHV0LCAic2V0TWFya2Vk
VGV4dDpcIiVAXCIgc2VsZWN0ZWRSYW5nZTooJXUsICV1KSIsIGlzQXR0cmlidXRlZFN0cmluZyA/
IFtzdHJpbmcgc3RyaW5nXSA6IHN0cmluZywgbmV3U2VsUmFuZ2UubG9jYXRpb24sIG5ld1NlbFJh
bmdlLmxlbmd0aCk7CisKKyAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNz
ZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCisgICAgV2ViSFRN
TFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUt
PmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgX3ByaXZhdGUtPmludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMgPSAwOworCisgICAgaWYgKHBhcmFtZXRlcnMpIHsKKyAgICAgICAg
cGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gWUVTOworICAgICAgICBwYXJhbWV0ZXJzLT5j
b25zdW1lZEJ5SU0gPSBOTzsKKyAgICB9CisgICAgCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghW3NlbGYgX2lzRWRpdGFibGVdKQorICAgICAgICByZXR1cm47CisKKyAgICBW
ZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgTlNTdHJpbmcgKnRl
eHQgPSBzdHJpbmc7CisKKyAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7CisgICAgICAgIHVu
c2lnbmVkIG1hcmtlZFRleHRMZW5ndGggPSBbKE5TU3RyaW5nICopc3RyaW5nIGxlbmd0aF07Cisg
ICAgICAgIE5TU3RyaW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcgYXR0cmlidXRlOk5TVGV4dElu
cHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDowIGxvbmdlc3RFZmZlY3Rp
dmVSYW5nZTpOVUxMIGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbWFya2VkVGV4dExlbmd0aCldOwor
ICAgICAgICBMT0coVGV4dElucHV0LCAiICAgIFJlcGxhY2VtZW50UmFuZ2U6ICVAIiwgcmFuZ2VT
dHJpbmcpOworICAgICAgICAvLyBUaGUgQXBwS2l0IGFkZHMgYSAnc2VjcmV0JyBwcm9wZXJ0eSB0
byB0aGUgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIHJlcGxhY2VtZW50IHJhbmdlLgorICAgICAg
ICAvLyBUaGUgcmVwbGFjZW1lbnQgcmFuZ2UgaXMgdGhlIHJhbmdlIG9mIHRoZSB0aGUgdGV4dCB0
aGF0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIHRoZSBuZXcgc3RyaW5nLgorICAgICAgICBpZiAo
cmFuZ2VTdHJpbmcpCisgICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpO
U1JhbmdlRnJvbVN0cmluZyhyYW5nZVN0cmluZyldOworCisgICAgICAgIHRleHQgPSBbc3RyaW5n
IHN0cmluZ107CisgICAgICAgIGV4dHJhY3RVbmRlcmxpbmVzKHN0cmluZywgdW5kZXJsaW5lcyk7
CisgICAgfQorCisgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24odGV4dCwg
dW5kZXJsaW5lcywgbmV3U2VsUmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2Up
KTsKK30KKworLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAg
ICBMT0coVGV4dElucHV0LCAiZG9Db21tYW5kQnlTZWxlY3RvcjpcIiVzXCIiLCBzZWxfZ2V0TmFt
ZShzZWxlY3RvcikpOworCisgICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFz
c2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgorICAgIC8vIFRo
ZSBzYW1lIGNhbGwgdG8gaW50ZXJwcmV0S2V5RXZlbnRzIGNhbiBkbyBtb3JlIHRoYW4gb25lIGNv
bW1hbmQuCisgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJh
bWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgaWYg
KHBhcmFtZXRlcnMpCisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POworCisg
ICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rvcihub29wOikpIHsKKyAgICAgICAgX3ByaXZhdGUt
PnJlY2VpdmVkTk9PUCA9IFlFUzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEtleWJv
YXJkRXZlbnQqIGV2ZW50ID0gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMtPmV2ZW50IDogMDsKKyAg
ICBib29sIHNob3VsZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5zaG91
bGRTYXZlQ29tbWFuZDsKKworICAgIGlmIChldmVudCAmJiBzaG91bGRTYXZlQ29tbWFuZCkKKyAg
ICAgICAgZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKE5T
U3RyaW5nRnJvbVNlbGVjdG9yKHNlbGVjdG9yKSkpOworICAgIGVsc2UgeworICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBvbmx5IGRpcmVjdCBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yOiBz
ZWUgdGhlIHBhcmFtZXRlcnMgYnkgc2V0dGluZyB0byAwLgorICAgICAgICBfcHJpdmF0ZS0+aW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CisKKyAgICAgICAgYm9vbCBldmVudFdhc0hh
bmRsZWQ7CisKKyAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAg
ICAgICAgaWYgKFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ondl
YlZpZXcgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl0pCisgICAgICAgICAgICBldmVudFdh
c0hhbmRsZWQgPSB0cnVlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEVkaXRvcjo6Q29t
bWFuZCBjb21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKKyAg
ICAgICAgICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpCisgICAgICAgICAgICAgICAgZXZl
bnRXYXNIYW5kbGVkID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIElmIFdlYktpdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgY29t
bWFuZCwgd2UgbmVlZCB0byBwYXNzIHRoZSBzZWxlY3RvciB0byBzdXBlci4KKyAgICAgICAgICAg
ICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gc2VsZWN0b3I7
CisKKyAgICAgICAgICAgICAgICAvLyBUaGUgc2luayBkb2VzIHR3byB0aGluZ3M6IDEpIFRlbGxz
IHVzIGlmIHRoZSByZXNwb25kZXIgd2VudCB1bmhhbmRsZWQsIGFuZAorICAgICAgICAgICAgICAg
IC8vIDIpIHByZXZlbnRzIGFueSBOU0JlZXA7IHdlIGRvbid0IGV2ZXIgd2FudCB0byBiZWVwIGhl
cmUuCisgICAgICAgICAgICAgICAgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rICpzaW5rID0gW1tXZWJS
ZXNwb25kZXJDaGFpblNpbmsgYWxsb2NdIGluaXRXaXRoUmVzcG9uZGVyQ2hhaW46c2VsZl07Cisg
ICAgICAgICAgICAgICAgW3N1cGVyIGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOworICAg
ICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9ICFbc2luayByZWNlaXZlZFVuaGFuZGxlZENv
bW1hbmRdOworICAgICAgICAgICAgICAgIFtzaW5rIGRldGFjaF07CisgICAgICAgICAgICAgICAg
W3NpbmsgcmVsZWFzZV07CisKKyAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JE
b0NvbW1hbmRCeVNlbGVjdG9yID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChwYXJhbWV0ZXJzKQorICAgICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5k
bGVkID0gZXZlbnRXYXNIYW5kbGVkOworCisgICAgICAgIC8vIFJlc3RvcmUgdGhlIHBhcmFtZXRl
cnMgc28gdGhhdCBvdGhlciBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yOiBzZWUgdGhlbSwK
KyAgICAgICAgLy8gYW5kIG90aGVyIGNvbW1hbmRzIGNhbiBwYXJ0aWNpcGF0ZSBpbiBzZXR0aW5n
IHRoZSAiZXZlbnRXYXNIYW5kbGVkIiBmbGFnLgorICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0
S2V5RXZlbnRzUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgfQorfQorCistICh2b2lkKWlu
c2VydFRleHQ6KGlkKXN0cmluZworeworICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0
cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsgLy8gT3RoZXJ3
aXNlLCBOU1N0cmluZworCisgICAgTE9HKFRleHRJbnB1dCwgImluc2VydFRleHQ6XCIlQFwiIiwg
aXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nKTsKKworICAgIFdl
YkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2
YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIF9wcml2YXRlLT5pbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAg
cGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87CisKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0
IGluc2VydGluZyBhbiBhdHRyaWJ1dGVkIHN0cmluZyBidXQgaW5wdXQgbWV0aG9kcyBkb24ndCBh
cHBlYXIgdG8gcmVxdWlyZSB0aGlzLgorICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKKyAgICBOU1N0cmluZyAqdGV4dDsKKyAgICBib29sIGlzRnJvbUlu
cHV0TWV0aG9kID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0
aW9uKCk7CisgICAgaWYgKGlzQXR0cmlidXRlZFN0cmluZykgeworICAgICAgICB0ZXh0ID0gW3N0
cmluZyBzdHJpbmddOworICAgICAgICAvLyBXZSBkZWFsIHdpdGggdGhlIE5TVGV4dElucHV0UmVw
bGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIGZyb20gTlNBdHRyaWJ1dGVkU3Ry
aW5nIGhlcmUKKyAgICAgICAgLy8gc2ltcGx5IGJlY2F1c2UgaXQgaXMgdXNlZCBieSBhdCBsZWFz
dCBvbmUgSW5wdXQgTWV0aG9kIC0tIGl0IGNvcnJlc29uZHMgdG8gdGhlIGtFdmVudFBhcmFtVGV4
dElucHV0U2VuZFJlcGxhY2VSYW5nZQorICAgICAgICAvLyBldmVudCBpbiBUU00uICBUaGlzIGJl
aGF2aW91ciBtYXRjaGVzIHRoYXQgb2YgLVtXZWJIVE1MVmlldyBzZXRNYXJrZWRUZXh0OnNlbGVj
dGVkUmFuZ2U6XSB3aGVuIGl0IHJlY2VpdmVzIGFuCisgICAgICAgIC8vIE5TQXR0cmlidXRlZFN0
cmluZworICAgICAgICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpO
U1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0
RWZmZWN0aXZlUmFuZ2U6TlVMTCBpblJhbmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0IGxlbmd0aF0p
XTsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgIiAgICBSZXBsYWNlbWVudFJhbmdlOiAlQCIsIHJh
bmdlU3RyaW5nKTsKKyAgICAgICAgaWYgKHJhbmdlU3RyaW5nKSB7CisgICAgICAgICAgICBbW3Nl
bGYgX2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0cmluZyhyYW5nZVN0cmluZyld
OworICAgICAgICAgICAgaXNGcm9tSW5wdXRNZXRob2QgPSBZRVM7CisgICAgICAgIH0KKyAgICB9
IGVsc2UKKyAgICAgICAgdGV4dCA9IHN0cmluZzsKKworICAgIGJvb2wgZXZlbnRIYW5kbGVkID0g
ZmFsc2U7CisgICAgaWYgKFt0ZXh0IGxlbmd0aF0pIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCog
ZXZlbnQgPSBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy0+ZXZlbnQgOiAwOworCisgICAgICAgIC8v
IGluc2VydFRleHQgY2FuIGJlIGNhbGxlZCBmcm9tIGFuIGlucHV0IG1ldGhvZCBvciBmcm9tIG5v
cm1hbCBrZXkgZXZlbnQgcHJvY2Vzc2luZworICAgICAgICAvLyBJZiBpdHMgZnJvbSBub3JtYWwg
a2V5IGV2ZW50IHByb2Nlc3NpbmcsIHdlIG1heSBuZWVkIHRvIHNhdmUgdGhlIGFjdGlvbiB0byBw
ZXJmb3JtIGl0IGxhdGVyLgorICAgICAgICAvLyBJZiBpdHMgZnJvbSBhbiBpbnB1dCBtZXRob2Qs
IHRoZW4gd2Ugc2hvdWxkIGdvIGFoZWFkIGFuZCBpbnNlcnQgdGhlIHRleHQgbm93LiAgCisgICAg
ICAgIC8vIFdlIGFzc3VtZSBpdCdzIGZyb20gdGhlIGlucHV0IG1ldGhvZCBpZiB3ZSBoYXZlIG1h
cmtlZCB0ZXh0LgorICAgICAgICAvLyBGSVhNRTogSW4gdGhlb3J5LCB0aGlzIGNvdWxkIGJlIHdy
b25nIGZvciBzb21lIGlucHV0IG1ldGhvZHMsIHNvIHdlIHNob3VsZCB0cnkgdG8gZmluZAorICAg
ICAgICAvLyBhbm90aGVyIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIGNhbGwgaXMgZnJvbSB0aGUg
aW5wdXQgbWV0aG9kCisgICAgICAgIGJvb2wgc2hvdWxkU2F2ZUNvbW1hbmQgPSBwYXJhbWV0ZXJz
ICYmIHBhcmFtZXRlcnMtPnNob3VsZFNhdmVDb21tYW5kOworICAgICAgICBpZiAoZXZlbnQgJiYg
c2hvdWxkU2F2ZUNvbW1hbmQgJiYgIWlzRnJvbUlucHV0TWV0aG9kKSB7CisgICAgICAgICAgICBl
dmVudC0+a2V5cHJlc3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoImluc2VydFRl
eHQ6IiwgdGV4dCkpOworICAgICAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnMgPSBwYXJhbWV0ZXJzOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBTdHJpbmcgZXZlbnRUZXh0ID0gdGV4dDsKKyAgICAgICAgZXZlbnRU
ZXh0LnJlcGxhY2UoTlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUg
dGhpbmcgaXMgZG9uZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJDb3JlCisgICAgICAgIGlmIChj
b3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKSB7CisgICAgICAgICAg
ICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgICAg
ICAgICAgZXZlbnRIYW5kbGVkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChldmVu
dFRleHQsIGV2ZW50KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGV2ZW50
SGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29u
ZmlybUNvbXBvc2l0aW9uKGV2ZW50VGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgaWYgKCFwYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKGlzRnJvbUlucHV0TWV0aG9kKSB7CisgICAgICAgIC8vIEFsbG93IGRvQ29tbWFuZEJ5
U2VsZWN0b3I6IHRvIGJlIGNhbGxlZCBhZnRlciBpbnNlcnRUZXh0OiBieSByZXNldHRpbmcgaW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycworICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1
bWVkQnlJTSA9IFlFUzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBwYXJhbWV0
ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBldmVudEhhbmRsZWQ7Cit9CisKKy0gKHZvaWQpX3VwZGF0
ZVNlbGVjdGlvbkZvcklucHV0TWFuYWdlcgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisK
KyAgICBCT09MIGV4cG9zZUlucHV0Q29udGV4dCA9IGlzVGV4dElucHV0KGNvcmVGcmFtZSkgJiYg
IWlzSW5QYXNzd29yZEZpZWxkKGNvcmVGcmFtZSk7CisgICAgaWYgKGV4cG9zZUlucHV0Q29udGV4
dCAhPSBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7CisgICAgICAgIF9wcml2YXRlLT5l
eHBvc2VJbnB1dENvbnRleHQgPSBleHBvc2VJbnB1dENvbnRleHQ7CisgICAgICAgIC8vIExldCBB
cHBLaXQgY2FjaGUgYSBwb3RlbnRpYWxseSBjaGFuZ2VkIGlucHV0IGNvbnRleHQuCisgICAgICAg
IC8vIFdlYkNvcmUgcm91dGluZWx5IHNldHMgdGhlIHNlbGVjdGlvbiB0byBOb25lIHdoZW4gZWRp
dGluZywgYW5kIElNcyBiZWNvbWUgdW5oYXBweSB3aGVuIGFuIGlucHV0IGNvbnRleHQgc3VkZGVu
bHkgdHVybnMgbmlsLCBzZWUgYnVnIDI2MDA5LgorICAgICAgICBpZiAoIWNvcmVGcmFtZSB8fCAh
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNOb25lKCkpCisgICAgICAgICAgICBbTlNBcHAgdXBk
YXRlV2luZG93c107CisgICAgfQorCisgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXND
b21wb3NpdGlvbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY29yZUZyYW1lLT5lZGl0
b3IoKS0+aWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdW5zaWduZWQgc3RhcnQ7CisgICAgdW5zaWduZWQgZW5kOworICAgIGlmIChjb3Jl
RnJhbWUtPmVkaXRvcigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlvbihzdGFydCwgZW5kKSkKKyAg
ICAgICAgW1tOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0U2Vs
ZWN0aW9uQ2hhbmdlZDpOU01ha2VSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpIGNsaWVudDpzZWxm
XTsKKyAgICBlbHNlIHsKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBv
c2l0aW9uV2l0aG91dERpc3R1cmJpbmdTZWxlY3Rpb24oKTsKKyAgICAgICAgW1tOU0lucHV0TWFu
YWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0QWJhbmRvbmVkOnNlbGZdOworICAg
IH0KK30KKworQGVuZAorCisvKgorICAgIFRoaXMgY2xhc3MgcnVucyB0aGUgc2hvdyBmb3IgaGFu
ZGluZyB0aGUgY29tcGxldGU6IE5TVGV4dFZpZXcgb3BlcmF0aW9uLiAgSXQgY291bnRzIG9uIGl0
cyBIVE1MIHZpZXcKKyAgICB0byBjYWxsIGVuZFJldmVydGluZ0NoYW5nZTogd2hlbmV2ZXIgdGhl
IGN1cnJlbnQgY29tcGxldGlvbiBuZWVkcyB0byBiZSBhYm9ydGVkLgorIAorICAgIFRoZSBjbGFz
cyBpcyBpbiBvbmUgb2YgdHdvIG1vZGVzOiAgUG9wdXBXaW5kb3cgc2hvd2luZywgb3Igbm90LiAg
SXQgaXMgc2hvd24gd2hlbiBhIGNvbXBsZXRpb24geWllbGRzCisgICAgbW9yZSB0aGFuIG9uZSBt
YXRjaC4gIElmIGEgY29tcGxldGlvbiB5aWVsZHMgb25lIG9yIHplcm8gbWF0Y2hlcywgaXQgaXMg
bm90IHNob3duLCBhbmQgKip0aGVyZSBpcyBubworICAgIHN0YXRlIGNhcnJpZWQgYWNyb3NzIHRv
IHRoZSBuZXh0IGNvbXBsZXRpb24qKi4KKyAqLworCitAaW1wbGVtZW50YXRpb24gV2ViVGV4dENv
bXBsZXRlQ29udHJvbGxlcgorCistIChpZClpbml0V2l0aEhUTUxWaWV3OihXZWJIVE1MVmlldyAq
KXZpZXcKK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIGlmICghc2VsZikKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICBfdmlldyA9IHZpZXc7CisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpZGVhbGxvYworeworICAgIFtfcG9wdXBXaW5kb3cgcmVsZWFzZV07CisgICAgW19j
b21wbGV0aW9ucyByZWxlYXNlXTsKKyAgICBbX29yaWdpbmFsU3RyaW5nIHJlbGVhc2VdOworICAg
IAorICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClfaW5zZXJ0TWF0Y2g6KE5TU3Ry
aW5nICopbWF0Y2gKK3sKKyAgICAvLyBGSVhNRTogMzc2OTY1NCAtIFdlIHNob3VsZCBwcmVzZXJ2
ZSBjYXNlIG9mIHN0cmluZyBiZWluZyBpbnNlcnRlZCwgZXZlbiBpbiBwcmVmaXggKGJ1dCB0aGVu
IGFsc28gYmUKKyAgICAvLyBhYmxlIHRvIHJldmVydCB0aGF0KS4gIE1pbWljIE5TVGV4dC4KKyAg
ICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKKyAgICBOU1N0cmluZyAqbmV3VGV4
dCA9IFttYXRjaCBzdWJzdHJpbmdGcm9tSW5kZXg6cHJlZml4TGVuZ3RoXTsKKyAgICBbZnJhbWUg
X3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdUZXh0IHNlbGVjdFJlcGxhY2VtZW50OllFUyBz
bWFydFJlcGxhY2U6Tk9dOworfQorCisvLyBtb3N0bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19L
ZXlCaW5kaW5nLm0KKy0gKHZvaWQpX2J1aWxkVUkKK3sKKyAgICBOU1JlY3Qgc2Nyb2xsRnJhbWUg
PSBOU01ha2VSZWN0KDAsIDAsIDEwMCwgMTAwKTsKKyAgICBOU1JlY3QgdGFibGVGcmFtZSA9IE5T
WmVyb1JlY3Q7ICAgIAorICAgIHRhYmxlRnJhbWUuc2l6ZSA9IFtOU1Njcm9sbFZpZXcgY29udGVu
dFNpemVGb3JGcmFtZVNpemU6c2Nyb2xsRnJhbWUuc2l6ZSBoYXNIb3Jpem9udGFsU2Nyb2xsZXI6
Tk8gaGFzVmVydGljYWxTY3JvbGxlcjpZRVMgYm9yZGVyVHlwZTpOU05vQm9yZGVyXTsKKyAgICAv
LyBBZGRlZCBjYXN0IHRvIHdvcmsgYXJvdW5kIHByb2JsZW0gd2l0aCBtdWx0aXBsZSBGb3VuZGF0
aW9uIGluaXRXaXRoSWRlbnRpZmllcjogbWV0aG9kcyB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXIg
dHlwZXMuCisgICAgTlNUYWJsZUNvbHVtbiAqY29sdW1uID0gWyhOU1RhYmxlQ29sdW1uICopW05T
VGFibGVDb2x1bW4gYWxsb2NdIGluaXRXaXRoSWRlbnRpZmllcjpbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDowXV07CisgICAgW2NvbHVtbiBzZXRXaWR0aDp0YWJsZUZyYW1lLnNpemUud2lkdGhdOwor
ICAgIFtjb2x1bW4gc2V0RWRpdGFibGU6Tk9dOworICAgIAorICAgIF90YWJsZVZpZXcgPSBbW05T
VGFibGVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnRhYmxlRnJhbWVdOworICAgIFtfdGFibGVW
aWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlXTsKKyAgICBbX3RhYmxl
VmlldyBhZGRUYWJsZUNvbHVtbjpjb2x1bW5dOworICAgIFtjb2x1bW4gcmVsZWFzZV07CisgICAg
W190YWJsZVZpZXcgc2V0R3JpZFN0eWxlTWFzazpOU1RhYmxlVmlld0dyaWROb25lXTsKKyAgICBb
X3RhYmxlVmlldyBzZXRDb3JuZXJWaWV3Om5pbF07CisgICAgW190YWJsZVZpZXcgc2V0SGVhZGVy
VmlldzpuaWxdOworICAgIFtfdGFibGVWaWV3IHNldENvbHVtbkF1dG9yZXNpemluZ1N0eWxlOk5T
VGFibGVWaWV3VW5pZm9ybUNvbHVtbkF1dG9yZXNpemluZ1N0eWxlXTsKKyAgICBbX3RhYmxlVmll
dyBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbX3RhYmxlVmlldyBzZXREYXRhU291cmNlOnNlbGZd
OworICAgIFtfdGFibGVWaWV3IHNldFRhcmdldDpzZWxmXTsKKyAgICBbX3RhYmxlVmlldyBzZXRE
b3VibGVBY3Rpb246QHNlbGVjdG9yKHRhYmxlQWN0aW9uOildOworICAgIAorICAgIE5TU2Nyb2xs
VmlldyAqc2Nyb2xsVmlldyA9IFtbTlNTY3JvbGxWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnNj
cm9sbEZyYW1lXTsKKyAgICBbc2Nyb2xsVmlldyBzZXRCb3JkZXJUeXBlOk5TTm9Cb3JkZXJdOwor
ICAgIFtzY3JvbGxWaWV3IHNldEhhc1ZlcnRpY2FsU2Nyb2xsZXI6WUVTXTsKKyAgICBbc2Nyb2xs
VmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdo
dFNpemFibGVdOworICAgIFtzY3JvbGxWaWV3IHNldERvY3VtZW50VmlldzpfdGFibGVWaWV3XTsK
KyAgICBbX3RhYmxlVmlldyByZWxlYXNlXTsKKyAgICAKKyAgICBfcG9wdXBXaW5kb3cgPSBbW05T
V2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRSZWN0OnNjcm9sbEZyYW1lIHN0eWxlTWFzazpO
U0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZl
cjpOT107CisgICAgW19wb3B1cFdpbmRvdyBzZXRBbHBoYVZhbHVlOjAuODhmXTsKKyAgICBbX3Bv
cHVwV2luZG93IHNldENvbnRlbnRWaWV3OnNjcm9sbFZpZXddOworICAgIFtzY3JvbGxWaWV3IHJl
bGVhc2VdOworICAgIFtfcG9wdXBXaW5kb3cgc2V0SGFzU2hhZG93OllFU107CisgICAgW19wb3B1
cFdpbmRvdyBzZXRPbmVTaG90OllFU107CisgICAgW19wb3B1cFdpbmRvdyBfc2V0Rm9yY2VBY3Rp
dmVDb250cm9sczpZRVNdOworICAgIFtfcG9wdXBXaW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2Vk
Ok5PXTsKK30KKworLy8gbW9zdGx5IGxpZnRlZCBmcm9tIE5TVGV4dFZpZXdfS2V5QmluZGluZy5t
CistICh2b2lkKV9wbGFjZVBvcHVwV2luZG93OihOU1BvaW50KXRvcExlZnQKK3sKKyAgICBpbnQg
bnVtYmVyVG9TaG93ID0gW19jb21wbGV0aW9ucyBjb3VudF07CisgICAgaWYgKG51bWJlclRvU2hv
dyA+IDIwKSB7CisgICAgICAgIG51bWJlclRvU2hvdyA9IDIwOworICAgIH0KKworICAgIE5TUmVj
dCB3aW5kb3dGcmFtZTsKKyAgICBOU1BvaW50IHdvcmRTdGFydCA9IHRvcExlZnQ7CisgICAgd2lu
ZG93RnJhbWUub3JpZ2luID0gW1tfdmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W192
aWV3IGNvbnZlcnRQb2ludDp3b3JkU3RhcnQgdG9WaWV3Om5pbF1dOworICAgIHdpbmRvd0ZyYW1l
LnNpemUuaGVpZ2h0ID0gbnVtYmVyVG9TaG93ICogW190YWJsZVZpZXcgcm93SGVpZ2h0XSArIChu
dW1iZXJUb1Nob3cgKyAxKSAqIFtfdGFibGVWaWV3IGludGVyY2VsbFNwYWNpbmddLmhlaWdodDsK
KyAgICB3aW5kb3dGcmFtZS5vcmlnaW4ueSAtPSB3aW5kb3dGcmFtZS5zaXplLmhlaWdodDsKKyAg
ICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEyLjBmXSwgTlNGb250QXR0
cmlidXRlTmFtZSwgbmlsXTsKKyAgICBmbG9hdCBtYXhXaWR0aCA9IDAuMGY7CisgICAgaW50IG1h
eEluZGV4ID0gLTE7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bWJlclRvU2hv
dzsgaSsrKSB7CisgICAgICAgIGZsb2F0IHdpZHRoID0gY2VpbGYoW1tfY29tcGxldGlvbnMgb2Jq
ZWN0QXRJbmRleDppXSBzaXplV2l0aEF0dHJpYnV0ZXM6YXR0cmlidXRlc10ud2lkdGgpOworICAg
ICAgICBpZiAod2lkdGggPiBtYXhXaWR0aCkgeworICAgICAgICAgICAgbWF4V2lkdGggPSB3aWR0
aDsKKyAgICAgICAgICAgIG1heEluZGV4ID0gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aW5k
b3dGcmFtZS5zaXplLndpZHRoID0gMTAwOworICAgIGlmIChtYXhJbmRleCA+PSAwKSB7CisgICAg
ICAgIG1heFdpZHRoID0gY2VpbGYoW05TU2Nyb2xsVmlldyBmcmFtZVNpemVGb3JDb250ZW50U2l6
ZTpOU01ha2VTaXplKG1heFdpZHRoLCAxMDAuMGYpIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBo
YXNWZXJ0aWNhbFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TTm9Cb3JkZXJdLndpZHRoKTsKKyAg
ICAgICAgbWF4V2lkdGggPSBjZWlsZihbTlNXaW5kb3cgZnJhbWVSZWN0Rm9yQ29udGVudFJlY3Q6
TlNNYWtlUmVjdCgwLjBmLCAwLjBmLCBtYXhXaWR0aCwgMTAwLjBmKSBzdHlsZU1hc2s6TlNCb3Jk
ZXJsZXNzV2luZG93TWFza10uc2l6ZS53aWR0aCk7CisgICAgICAgIG1heFdpZHRoICs9IDUuMGY7
CisgICAgICAgIHdpbmRvd0ZyYW1lLnNpemUud2lkdGggPSBNQVgobWF4V2lkdGgsIHdpbmRvd0Zy
YW1lLnNpemUud2lkdGgpOworICAgICAgICBtYXhXaWR0aCA9IE1JTig0MDAuMGYsIHdpbmRvd0Zy
YW1lLnNpemUud2lkdGgpOworICAgIH0KKyAgICBbX3BvcHVwV2luZG93IHNldEZyYW1lOndpbmRv
d0ZyYW1lIGRpc3BsYXk6Tk9dOworICAgIAorICAgIFtfdGFibGVWaWV3IHJlbG9hZERhdGFdOwor
ICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRo
SW5kZXg6MF0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9dOworICAgIFtfdGFibGVWaWV3IHNjcm9s
bFJvd1RvVmlzaWJsZTowXTsKKyAgICBbc2VsZiBfcmVmbGVjdFNlbGVjdGlvbl07CisgICAgW19w
b3B1cFdpbmRvdyBzZXRMZXZlbDpOU1BvcFVwTWVudVdpbmRvd0xldmVsXTsKKyAgICBbX3BvcHVw
V2luZG93IG9yZGVyRnJvbnQ6bmlsXTsgICAgCisgICAgW1tfdmlldyB3aW5kb3ddIGFkZENoaWxk
V2luZG93Ol9wb3B1cFdpbmRvdyBvcmRlcmVkOk5TV2luZG93QWJvdmVdOworfQorCistICh2b2lk
KWRvQ29tcGxldGlvbgoreworICAgIGlmICghX3BvcHVwV2luZG93KSB7CisgICAgICAgIE5TU3Bl
bGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07
CisgICAgICAgIGlmICghY2hlY2tlcikgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJObyBOU1Nw
ZWxsQ2hlY2tlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVtCisgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtf
dmlldyBfZnJhbWVdOworICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJh
bWUpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIERP
TVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rp
b246U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5ECisgICAgICAgICAgICBkaXJlY3Rpb246U2Vs
ZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQgZ3JhbnVsYXJpdHk6V29yZEdyYW51bGFyaXR5XTsK
KyAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CisgICAg
ICAgIFtwcmVmaXggc2V0RW5kOltzZWxlY3Rpb24gc3RhcnRDb250YWluZXJdIG9mZnNldDpbc2Vs
ZWN0aW9uIHN0YXJ0T2Zmc2V0XV07CisKKyAgICAgICAgLy8gUmVqZWN0IHNvbWUgTk9QIGNhc2Vz
CisgICAgICAgIGlmIChbcHJlZml4IGNvbGxhcHNlZF0pIHsKKyAgICAgICAgICAgIE5TQmVlcCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE5TU3RyaW5nICpwcmVm
aXhTdHIgPSBbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnByZWZpeF07CisgICAgICAgIE5TU3RyaW5n
ICp0cmltbWVkUHJlZml4ID0gW3ByZWZpeFN0ciBzdHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0lu
U2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNlQW5kTmV3bGluZUNoYXJhY3RlclNldF1dOwor
ICAgICAgICBpZiAoW3RyaW1tZWRQcmVmaXggbGVuZ3RoXSA9PSAwKSB7CisgICAgICAgICAgICBO
U0JlZXAoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwcmVmaXhM
ZW5ndGggPSBbcHJlZml4U3RyIGxlbmd0aF07CisKKyAgICAgICAgLy8gTG9va3VwIG1hdGNoZXMK
KyAgICAgICAgW19jb21wbGV0aW9ucyByZWxlYXNlXTsKKyAgICAgICAgX2NvbXBsZXRpb25zID0g
W2NoZWNrZXIgY29tcGxldGlvbnNGb3JQYXJ0aWFsV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIFtw
cmVmaXhTdHIgbGVuZ3RoXSkgaW5TdHJpbmc6cHJlZml4U3RyIGxhbmd1YWdlOm5pbCBpblNwZWxs
RG9jdW1lbnRXaXRoVGFnOltbX3ZpZXcgX3dlYlZpZXddIHNwZWxsQ2hlY2tlckRvY3VtZW50VGFn
XV07CisgICAgICAgIFtfY29tcGxldGlvbnMgcmV0YWluXTsKKyAgICAKKyAgICAgICAgaWYgKCFf
Y29tcGxldGlvbnMgfHwgW19jb21wbGV0aW9ucyBjb3VudF0gPT0gMCkgeworICAgICAgICAgICAg
TlNCZWVwKCk7CisgICAgICAgIH0gZWxzZSBpZiAoW19jb21wbGV0aW9ucyBjb3VudF0gPT0gMSkg
eworICAgICAgICAgICAgW3NlbGYgX2luc2VydE1hdGNoOltfY29tcGxldGlvbnMgb2JqZWN0QXRJ
bmRleDowXV07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoIV9vcmlnaW5h
bFN0cmluZyk7ICAgICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgYmUgc2V0IElGRiB3ZSBoYXZlIGEg
cG9wdXAgd2luZG93CisgICAgICAgICAgICBfb3JpZ2luYWxTdHJpbmcgPSBbW2ZyYW1lIF9zdHJp
bmdGb3JSYW5nZTpzZWxlY3Rpb25dIHJldGFpbl07CisgICAgICAgICAgICBbc2VsZiBfYnVpbGRV
SV07CisgICAgICAgICAgICBOU1JlY3Qgd29yZFJlY3QgPSBbZnJhbWUgX2NhcmV0UmVjdEF0Tm9k
ZTpbd2hvbGVXb3JkIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3dob2xlV29yZCBzdGFydE9mZnNl
dF0gYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW1dOworICAgICAgICAgICAg
Ly8gKzEgdG8gYmUgdW5kZXIgdGhlIHdvcmQsIG5vdCB0aGUgY2FyZXQKKyAgICAgICAgICAgIC8v
IEZJWE1FIC0gMzc2OTY1MiAtIFdyb25nIHBvc2l0aW9uaW5nIGZvciByaWdodCB0byBsZWZ0IGxh
bmd1YWdlcy4gIFdlIHNob3VsZCBsaW5lIHVwIHRoZSB1cHBlcgorICAgICAgICAgICAgLy8gcmln
aHQgY29ybmVyIHdpdGggdGhlIGNhcmV0IGluc3RlYWQgb2YgdXBwZXIgbGVmdCwgYW5kIHRoZSAr
MSB3b3VsZCBiZSBhIC0xLgorICAgICAgICAgICAgTlNQb2ludCB3b3JkTG93ZXJMZWZ0ID0geyBO
U01pblgod29yZFJlY3QpKzEsIE5TTWF4WSh3b3JkUmVjdCkgfTsKKyAgICAgICAgICAgIFtzZWxm
IF9wbGFjZVBvcHVwV2luZG93OndvcmRMb3dlckxlZnRdOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Cisg
ICAgfQorfQorCistICh2b2lkKWVuZFJldmVydGluZ0NoYW5nZTooQk9PTClyZXZlcnRDaGFuZ2Ug
bW92ZUxlZnQ6KEJPT0wpZ29MZWZ0Cit7CisgICAgaWYgKF9wb3B1cFdpbmRvdykgeworICAgICAg
ICAvLyB0ZWFyIGRvd24gVUkKKyAgICAgICAgW1tfdmlldyB3aW5kb3ddIHJlbW92ZUNoaWxkV2lu
ZG93Ol9wb3B1cFdpbmRvd107CisgICAgICAgIFtfcG9wdXBXaW5kb3cgb3JkZXJPdXQ6c2VsZl07
CisgICAgICAgIC8vIE11c3QgYXV0b3JlbGVhc2UgYmVjYXVzZSBldmVudCB0cmFja2luZyBjb2Rl
IG1heSBiZSBvbiB0aGUgc3RhY2sgdG91Y2hpbmcgVUkKKyAgICAgICAgW19wb3B1cFdpbmRvdyBh
dXRvcmVsZWFzZV07CisgICAgICAgIF9wb3B1cFdpbmRvdyA9IG5pbDsKKworICAgICAgICBpZiAo
cmV2ZXJ0Q2hhbmdlKSB7CisgICAgICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2Zy
YW1lXTsKKyAgICAgICAgICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmln
aW5hbFN0cmluZyBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKKyAgICAg
ICAgfSBlbHNlIGlmIChbX3ZpZXcgX2hhc1NlbGVjdGlvbl0pIHsKKyAgICAgICAgICAgIGlmIChn
b0xlZnQpCisgICAgICAgICAgICAgICAgW192aWV3IG1vdmVCYWNrd2FyZDpuaWxdOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtfdmlldyBtb3ZlRm9yd2FyZDpuaWxdOworICAg
ICAgICB9CisgICAgICAgIFtfb3JpZ2luYWxTdHJpbmcgcmVsZWFzZV07CisgICAgICAgIF9vcmln
aW5hbFN0cmluZyA9IG5pbDsKKyAgICB9CisgICAgLy8gZWxzZSB0aGVyZSBpcyBubyBzdGF0ZSB0
byBhYm9ydCBpZiB0aGUgd2luZG93IHdhcyBub3QgdXAKK30KKworLSAoQk9PTClwb3B1cFdpbmRv
d0lzT3BlbgoreworICAgIHJldHVybiBfcG9wdXBXaW5kb3cgIT0gbmlsOworfQorCisvLyBXZWJI
VE1MVmlldyBnaXZlcyB1cyBhIGNyYWNrIGF0IGtleSBldmVudHMgaXQgc2Vlcy4gUmV0dXJuIHdo
ZXRoZXIgd2UgY29uc3VtZWQgdGhlIGV2ZW50LgorLy8gVGhlIGZlYXR1cmVzIGZvciB0aGUgdmFy
aW91cyBrZXlzIG1pbWljIE5TVGV4dFZpZXcuCistIChCT09MKWZpbHRlcktleURvd246KE5TRXZl
bnQgKilldmVudAoreworICAgIGlmICghX3BvcHVwV2luZG93KQorICAgICAgICByZXR1cm4gTk87
CisgICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmll
cnNdOworICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQorICAgICAgICByZXR1cm4gTk87CisgICAg
dW5pY2hhciBjID0gW3N0cmluZyBjaGFyYWN0ZXJBdEluZGV4OjBdOworICAgIGlmIChjID09IE5T
VXBBcnJvd0Z1bmN0aW9uS2V5KSB7CisgICAgICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVW
aWV3IHNlbGVjdGVkUm93XTsKKyAgICAgICAgaWYgKDAgPCBzZWxlY3RlZFJvdykgeworICAgICAg
ICAgICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdp
dGhJbmRleDpzZWxlY3RlZFJvdyAtIDFdIGJ5RXh0ZW5kaW5nU2VsZWN0aW9uOk5PXTsKKyAgICAg
ICAgICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTpzZWxlY3RlZFJvdyAtIDFdOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIGlmIChjID09IE5TRG93
bkFycm93RnVuY3Rpb25LZXkpIHsKKyAgICAgICAgaW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZp
ZXcgc2VsZWN0ZWRSb3ddOworICAgICAgICBpZiAoc2VsZWN0ZWRSb3cgPCAoaW50KVtfY29tcGxl
dGlvbnMgY291bnRdIC0gMSkgeworICAgICAgICAgICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5k
ZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDpzZWxlY3RlZFJvdyArIDFdIGJ5RXh0
ZW5kaW5nU2VsZWN0aW9uOk5PXTsKKyAgICAgICAgICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1Rv
VmlzaWJsZTpzZWxlY3RlZFJvdyArIDFdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBZRVM7
CisgICAgfQorICAgIGlmIChjID09IE5TUmlnaHRBcnJvd0Z1bmN0aW9uS2V5IHx8IGMgPT0gJ1xu
JyB8fCBjID09ICdccicgfHwgYyA9PSAnXHQnKSB7CisgICAgICAgIC8vIEZJWE1FOiBXaGF0IGFi
b3V0IGJhY2t0YWI/CisgICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVm
dDpOT107CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIGlmIChjID09IE5TTGVmdEFy
cm93RnVuY3Rpb25LZXkpIHsKKyAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1v
dmVMZWZ0OllFU107CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIGlmIChjID09IDB4
MUIgfHwgYyA9PSBOU0Y1RnVuY3Rpb25LZXkpIHsKKyAgICAgICAgLy8gRklYTUU6IEY1PworICAg
ICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAg
cmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYgKGMgPT0gJyAnIHx8IGMgPj0gMHgyMSAmJiBjIDw9
IDB4MkYgfHwgYyA+PSAweDNBICYmIGMgPD0gMHg0MCB8fCBjID49IDB4NUIgJiYgYyA8PSAweDYw
IHx8IGMgPj0gMHg3QiAmJiBjIDw9IDB4N0QpIHsKKyAgICAgICAgLy8gRklYTUU6IElzIHRoZSBh
Ym92ZSBsaXN0IG9mIGtleXMgcmVhbGx5IGRlZmluaXRpdmU/CisgICAgICAgIC8vIE9yaWdpbmFs
bHkgdGhpcyBjb2RlIGNhbGxlZCBpc3B1bmN0OyBhcmVuJ3QgdGhlcmUgb3RoZXIgcHVuY3R1YXRp
b24ga2V5cyBvbiBpbnRlcm5hdGlvbmFsIGtleWJvYXJkcz8KKyAgICAgICAgW3NlbGYgZW5kUmV2
ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgcmV0dXJuIE5POyAvLyBsZXQg
dGhlIGNoYXIgZ2V0IGluc2VydGVkCisgICAgfQorICAgIHJldHVybiBOTzsKK30KKworLSAodm9p
ZClfcmVmbGVjdFNlbGVjdGlvbgoreworICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3
IHNlbGVjdGVkUm93XTsKKyAgICBBU1NFUlQoc2VsZWN0ZWRSb3cgPj0gMCAmJiBzZWxlY3RlZFJv
dyA8IChpbnQpW19jb21wbGV0aW9ucyBjb3VudF0pOworICAgIFtzZWxmIF9pbnNlcnRNYXRjaDpb
X2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6c2VsZWN0ZWRSb3ddXTsKK30KKworLSAodm9pZCl0
YWJsZUFjdGlvbjooaWQpc2VuZGVyCit7CisgICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOwor
ICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Cit9CisKKy0gKE5T
SW50ZWdlciludW1iZXJPZlJvd3NJblRhYmxlVmlldzooTlNUYWJsZVZpZXcgKil0YWJsZVZpZXcK
K3sKKyAgICByZXR1cm4gW19jb21wbGV0aW9ucyBjb3VudF07Cit9CisKKy0gKGlkKXRhYmxlVmll
dzooTlNUYWJsZVZpZXcgKil0YWJsZVZpZXcgb2JqZWN0VmFsdWVGb3JUYWJsZUNvbHVtbjooTlNU
YWJsZUNvbHVtbiAqKXRhYmxlQ29sdW1uIHJvdzooTlNJbnRlZ2VyKXJvdworeworICAgIHJldHVy
biBbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6cm93XTsKK30KKworLSAodm9pZCl0YWJsZVZp
ZXdTZWxlY3Rpb25EaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7Cisg
ICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOworfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlv
biBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRQcml2YXRlUHJvdG9jb2xzKQorCistIChOU1JlY3Qp
c2VsZWN0aW9uUmVjdAoreworICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKKyAgICAgICAg
cmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJvdW5kcygpOworICAgIHJldHVy
biBOU1plcm9SZWN0OworfQorCistIChOU0FycmF5ICopc2VsZWN0aW9uVGV4dFJlY3RzCit7Cisg
ICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBWZWN0b3I8RmxvYXRSZWN0PiBsaXN0OworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb25UZXh0UmVj
dHMobGlzdCk7CisKKyAgICB1bnNpZ25lZCBzaXplID0gbGlzdC5zaXplKCk7CisgICAgTlNNdXRh
YmxlQXJyYXkgKnJlc3VsdCA9IFtbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENhcGFj
aXR5OnNpemVdIGF1dG9yZWxlYXNlXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0
Omxpc3RbaV1dXTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU1ZpZXcgKilz
ZWxlY3Rpb25WaWV3Cit7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKE5TSW1hZ2UgKilzZWxl
Y3Rpb25JbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKK3sKKyAgICBp
ZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCisgICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9mcmFt
ZV0pLT5zZWxlY3Rpb25JbWFnZShmb3JjZUJsYWNrVGV4dCk7CisgICAgcmV0dXJuIG5pbDsKK30K
KworLSAoTlNSZWN0KXNlbGVjdGlvbkltYWdlUmVjdAoreworICAgIGlmIChbc2VsZiBfaGFzU2Vs
ZWN0aW9uXSkKKyAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJv
dW5kcygpOworICAgIHJldHVybiBOU1plcm9SZWN0OworfQorCistIChOU0FycmF5ICopcGFzdGVi
b2FyZFR5cGVzRm9yU2VsZWN0aW9uCit7CisgICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlPckRl
bGV0ZV0pIHsKKyAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVzID0gW1tbW3NlbGYgY2xhc3Nd
IF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgIFt0eXBlcyBhZGRPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOworICAgICAg
ICByZXR1cm4gdHlwZXM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBjbGFz
c10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc107CisgICAgfQorfQorCistICh2b2lkKXdyaXRl
U2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2Fy
ZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAoreworICAgIFtzZWxmIF93cml0ZVNlbGVjdGlv
bldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVk
QXR0cmlidXRlZFN0cmluZzpuaWxdOworfQorCistICh2b2lkKXNlbGVjdEFsbAoreworICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUp
CisgICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdEFsbCgpOworfQorCistICh2
b2lkKWRlc2VsZWN0QWxsCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLT5jbGVhcigpOworfQorCistIChOU1N0cmluZyAqKXN0cmluZworewor
ICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfc3RyaW5nRm9yUmFuZ2U6W3NlbGYgX2RvY3VtZW50
UmFuZ2VdXTsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZVN0cmluZ0Zy
b21ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQoreworICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZzsKKyNpZiAhTE9HX0RJU0FCTEVEICAgICAgICAKKyAgICBkb3VibGUg
c3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKKyNlbmRpZiAgICAKKyAgICBhdHRy
aWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhET01S
YW5nZTpyYW5nZV0gYXV0b3JlbGVhc2VdOworI2lmICFMT0dfRElTQUJMRUQKKyAgICBkb3VibGUg
ZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhU
aW1pbmcsICJjcmVhdGluZyBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHNlbGVjdGlvbiB0b29rICVm
IHNlY29uZHMuIiwgZHVyYXRpb24pOworI2VuZGlmCisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJp
bmc7Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAg
ICBET01Eb2N1bWVudCAqZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07Cisg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0
ZVN0cmluZ0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXTsKKyAgICBpZiAo
IWF0dHJpYnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgRG9jdW1lbnQqIGNvcmVEb2N1bWVudCA9IGNv
cmUoZG9jdW1lbnQpOworICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRlZFN0
cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6UmFuZ2U6OmNyZWF0ZShjb3JlRG9j
dW1lbnQsIGNvcmVEb2N1bWVudCwgMCwgY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQtPmNoaWxk
Tm9kZUNvdW50KCkpLmdldCgpXTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7
Cit9CisKKy0gKE5TU3RyaW5nICopc2VsZWN0ZWRTdHJpbmcKK3sKKyAgICByZXR1cm4gW1tzZWxm
IF9mcmFtZV0gX3NlbGVjdGVkU3RyaW5nXTsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
c2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZVN0cmluZ0Zyb21ET01SYW5nZTpbc2VsZiBf
c2VsZWN0ZWRSYW5nZV1dOworICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgeworICAgICAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICAgICAgaWYgKGNvcmVG
cmFtZSkgeworICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgICAgICBh
dHRyaWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2U6cmFuZ2UuZ2V0KCldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBh
dHRyaWJ1dGVkU3RyaW5nOworfQorCistIChCT09MKXN1cHBvcnRzVGV4dEVuY29kaW5nCit7Cisg
ICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3RyaW5n
IGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgd3Jh
cDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rpb24K
K3sKKyAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9yd2FyZCwgY2FzZUZsYWcsIHdy
YXBGbGFnLCBzdGFydEluU2VsZWN0aW9uKTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V2ViSFRNTFZpZXcgKFdlYkRvY3VtZW50SW50ZXJuYWxQcm90b2NvbHMpCisKKy0gKE5TRGljdGlv
bmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBvaW50Cit7CisgICAgcmV0dXJuIFtzZWxm
IGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDpOT107Cit9CisKKy0gKE5T
RGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBvaW50IGFsbG93U2hhZG93Q29u
dGVudDooQk9PTClhbGxvdworeworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJl
dHVybiBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0
OmNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KEludFBvaW50
KHBvaW50KSwgYWxsb3cpXSBhdXRvcmVsZWFzZV07Cit9CisKKy0gKE5TVUludGVnZXIpbWFya0Fs
bE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09MKWNh
c2VGbGFnIGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBjb3JlRnJhbWUtPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJpbmcs
IGNhc2VGbGFnLCBsaW1pdCk7Cit9CisKKy0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZDooQk9PTCluZXdWYWx1ZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47Cisg
ICAgY29yZUZyYW1lLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKG5ld1ZhbHVl
KTsKK30KKworLSAoQk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkCit7CisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsKK30K
KworLSAodm9pZCl1bm1hcmtBbGxUZXh0TWF0Y2hlcworeworICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1
cm47CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOworICAg
IGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICBkb2N1bWVudC0+cmVtb3ZlTWFy
a2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKK30KKworLSAoTlNBcnJheSAqKXJlY3Rz
Rm9yVGV4dE1hdGNoZXMKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5
XTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKKworICAgIFZl
Y3RvcjxJbnRSZWN0PiByZWN0cyA9IGRvY3VtZW50LT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhE
b2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IHJlY3RzLnNp
emUoKTsKKyAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OmNvdW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBjb3VudDsgKytpbmRleCkKKyAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TVmFsdWUgdmFs
dWVXaXRoUmVjdDpyZWN0c1tpbmRleF1dXTsgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
QGVuZAorCisvLyBUaGlzIGlzIHVzZWQgYnkgQXBwS2l0IGFuZCBpcyBpbmNsdWRlZCBoZXJlIHNv
IHRoYXQgV2ViRGF0YVByb3RvY29sU2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBvbmNlLgorQGltcGxl
bWVudGF0aW9uIE5TVVJMIChXZWJEYXRhVVJMKQorCisrIChOU1VSTCAqKV93ZWJfdW5pcXVlV2Vi
RGF0YVVSTAoreworICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQpOworICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZV
VUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOworICAgIENGUmVs
ZWFzZShVVUlEUmVmKTsKKyAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1l
LCBVVUlEU3RyaW5nXV07CisgICAgQ0ZSZWxlYXNlKFVVSURTdHJpbmcpOworICAgIHJldHVybiBV
Ukw7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYlJlc3BvbmRlckNoYWluU2luawor
CistIChpZClpbml0V2l0aFJlc3BvbmRlckNoYWluOihOU1Jlc3BvbmRlciAqKWNoYWluCit7Cisg
ICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4gPSBjaGFp
bjsKKyAgICB3aGlsZSAoTlNSZXNwb25kZXIgKm5leHQgPSBbX2xhc3RSZXNwb25kZXJJbkNoYWlu
IG5leHRSZXNwb25kZXJdKQorICAgICAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4gPSBuZXh0Owor
ICAgIFtfbGFzdFJlc3BvbmRlckluQ2hhaW4gc2V0TmV4dFJlc3BvbmRlcjpzZWxmXTsKKyAgICBy
ZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZXRhY2gKK3sKKyAgICBbX2xhc3RSZXNwb25kZXJJ
bkNoYWluIHNldE5leHRSZXNwb25kZXI6bmlsXTsKKyAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4g
PSBuaWw7Cit9CisKKy0gKEJPT0wpcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kCit7CisgICAgcmV0
dXJuIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQ7Cit9CisKKy0gKHZvaWQpbm9SZXNwb25kZXJG
b3I6KFNFTClzZWxlY3RvcgoreworICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQgPSBZRVM7
Cit9CisKKy0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAg
X3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZCA9IFlFUzsKK30KKworLSAoQk9PTCl0cnlUb1BlcmZv
cm06KFNFTClhY3Rpb24gd2l0aDooaWQpb2JqZWN0Cit7CisgICAgX3JlY2VpdmVkVW5oYW5kbGVk
Q29tbWFuZCA9IFlFUzsKKyAgICByZXR1cm4gWUVTOworfQorCitAZW5kCkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0JKHJldmlz
aW9uIDQ0MjkyKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJv
bGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDUgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogICAgICAgICAgIChDKSAyMDA2LCAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhh
bS5kZW5uaXNAZ21haWwuY29tKQogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Nyw1ODgwICsyNiwzNSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW1wb3J0ICJXZWJIVE1MVmll
dy5oIgorI2ltcG9ydCAiV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgiCiAKLSNpbXBvcnQg
IkRPTUNTU1N0eWxlRGVjbGFyYXRpb25JbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9NRG9jdW1lbnRG
cmFnbWVudEludGVybmFsLmgiCi0jaW1wb3J0ICJET01Eb2N1bWVudEludGVybmFsLmgiCi0jaW1w
b3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKLSNp
bXBvcnQgIldlYkFyY2hpdmUuaCIKLSNpbXBvcnQgIldlYkNsaXBWaWV3LmgiCi0jaW1wb3J0ICJX
ZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5h
bC5oIgotI2ltcG9ydCAiV2ViRGVmYXVsdFVJRGVsZWdhdGUuaCIKLSNpbXBvcnQgIldlYkRvY3Vt
ZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5oIgotI2lt
cG9ydCAiV2ViRWRpdGluZ0RlbGVnYXRlLmgiCi0jaW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFy
eS5oIgogI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRnJhbWVQcml2
YXRlLmgiCi0jaW1wb3J0ICJXZWJGcmFtZVZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViSFRN
TFJlcHJlc2VudGF0aW9uUHJpdmF0ZS5oIgogI2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRy
YXMuaCIKLSNpbXBvcnQgIldlYktpdFZlcnNpb25DaGVja3MuaCIKLSNpbXBvcnQgIldlYkxvY2Fs
aXphYmxlU3RyaW5ncy5oIgotI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgi
Ci0jaW1wb3J0ICJXZWJOU0V2ZW50RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU0ZpbGVNYW5hZ2Vy
RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU0ltYWdlRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU09i
amVjdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCi0jaW1wb3J0
ICJXZWJOU1ByaW50T3BlcmF0aW9uRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5o
IgotI2ltcG9ydCAiV2ViTlNWaWV3RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdp
blZpZXcuaCIKLSNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIKLSNpbXBvcnQgIldlYlBsdWdp
bkNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlByZWZlcmVuY2VzLmgiCi0jaW1wb3J0ICJXZWJQ
cmVmZXJlbmNlc1ByaXZhdGUuaCIKLSNpbXBvcnQgIldlYlJlc291cmNlUHJpdmF0ZS5oIgotI2lt
cG9ydCAiV2ViU3RyaW5nVHJ1bmNhdG9yLmgiCi0jaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgi
Ci0jaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViVmlld0ludGVy
bmFsLmgiCi0jaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+Ci0jaW1wb3J0IDxBcHBs
aWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkSW1h
Z2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvQ29sb3JNYWMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0VkaXRvckRlbGV0ZUFjdGlvbi5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9FbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgotI2ltcG9ydCA8
V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5oPgotI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVdl
YkFyY2hpdmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgotI2ltcG9y
dCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxl
Rm9udERhdGEuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9X
ZWJDb3JlT2JqQ0V4dHJhcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGV4dFJlbmRlcmVy
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL21hcmt1cC5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTS5oPgot
I2ltcG9ydCA8V2ViS2l0L0RPTUV4dGVuc2lvbnMuaD4KLSNpbXBvcnQgPFdlYktpdC9ET01Qcml2
YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNpbXBvcnQgPGRsZmNu
Lmg+Ci0jaW1wb3J0IDxsaW1pdHM+Ci0jaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSNpbXBvcnQgPFF1YXJ0
ekNvcmUvUXVhcnR6Q29yZS5oPgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLUBpbnRl
cmZhY2UgTlNXaW5kb3cgKEJvcmRlclZpZXdBY2Nlc3MpCi0tIChOU1ZpZXcqKV93ZWJfYm9yZGVy
VmlldzsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE5TV2luZG93IChCb3JkZXJWaWV3QWNjZXNz
KQotLSAoTlNWaWV3Kilfd2ViX2JvcmRlclZpZXcKLXsKLSAgICByZXR1cm4gX2JvcmRlclZpZXc7
Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25k
ZXIgewotICAgIE5TUmVzcG9uZGVyKiBfbGFzdFJlc3BvbmRlckluQ2hhaW47Ci0gICAgQk9PTCBf
cmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kOwotfQotLSAoaWQpaW5pdFdpdGhSZXNwb25kZXJDaGFp
bjooTlNSZXNwb25kZXIgKiljaGFpbjsKLS0gKHZvaWQpZGV0YWNoOwotLSAoQk9PTClyZWNlaXZl
ZFVuaGFuZGxlZENvbW1hbmQ7Ci1AZW5kCi0KLXN0YXRpYyBJTVAgb2xkU2V0Q3Vyc29ySU1QID0g
TlVMTDsKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLXN0YXRpYyBJTVAgb2xkUmVzZXRD
dXJzb3JSZWN0c0lNUCA9IE5VTEw7Ci1zdGF0aWMgQk9PTCBjYW5TZXRDdXJzb3IgPSBZRVM7Ci0K
LXN0YXRpYyB2b2lkIHJlc2V0Q3Vyc29yUmVjdHMoTlNXaW5kb3cqIHNlbGYsIFNFTCBjbWQpCi17
Ci0gICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIG1vdXNlTG9jYXRpb25PdXRzaWRlT2ZFdmVudFN0
cmVhbV07Ci0gICAgTlNWaWV3KiB2aWV3ID0gW1tzZWxmIF93ZWJfYm9yZGVyVmlld10gaGl0VGVz
dDpwb2ludF07Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNz
XV0pIHsKLSAgICAgICAgV2ViSFRNTFZpZXcgKmh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3Kil2aWV3
OwotICAgICAgICBOU1BvaW50IGxvY2FsUG9pbnQgPSBbaHRtbFZpZXcgY29udmVydFBvaW50OnBv
aW50IGZyb21WaWV3Om5pbF07Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IFtodG1sVmll
dyBlbGVtZW50QXRQb2ludDpsb2NhbFBvaW50IGFsbG93U2hhZG93Q29udGVudDpOT107Ci0gICAg
ICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBbZGljdCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudERP
TU5vZGVLZXldOwotICAgICAgICBpZiAoIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxB
cHBsZXRFbGVtZW50IGNsYXNzXV0gJiYgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxP
YmplY3RFbGVtZW50IGNsYXNzXV0gJiYKLSAgICAgICAgICAgICFbZWxlbWVudCBpc0tpbmRPZkNs
YXNzOltET01IVE1MRW1iZWRFbGVtZW50IGNsYXNzXV0pCi0gICAgICAgICAgICBjYW5TZXRDdXJz
b3IgPSBOTzsKLSAgICB9Ci0gICAgb2xkUmVzZXRDdXJzb3JSZWN0c0lNUChzZWxmLCBjbWQpOwot
ICAgIGNhblNldEN1cnNvciA9IFlFUzsKLX0KLQotc3RhdGljIHZvaWQgc2V0Q3Vyc29yKE5TQ3Vy
c29yKiBzZWxmLCBTRUwgY21kKQotewotICAgIGlmIChjYW5TZXRDdXJzb3IpCi0gICAgICAgIG9s
ZFNldEN1cnNvcklNUChzZWxmLCBjbWQpOwotfQotCi0jZWxzZQotCi1zdGF0aWMgdm9pZCBzZXRD
dXJzb3IoTlNXaW5kb3cqIHNlbGYsIFNFTCBjbWQsIE5TUG9pbnQgcG9pbnQpCi17Ci0gICAgTlNW
aWV3KiB2aWV3ID0gW1tzZWxmIF93ZWJfYm9yZGVyVmlld10gaGl0VGVzdDpwb2ludF07Ci0gICAg
aWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKLSAgICAgICAg
V2ViSFRNTFZpZXcgKmh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3Kil2aWV3OwotICAgICAgICBOU1Bv
aW50IGxvY2FsUG9pbnQgPSBbaHRtbFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5p
bF07Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IFtodG1sVmlldyBlbGVtZW50QXRQb2lu
dDpsb2NhbFBvaW50IGFsbG93U2hhZG93Q29udGVudDpOT107Ci0gICAgICAgIERPTUVsZW1lbnQg
KmVsZW1lbnQgPSBbZGljdCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudERPTU5vZGVLZXldOwotICAg
ICAgICBpZiAoIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxBcHBsZXRFbGVtZW50IGNs
YXNzXV0gJiYgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxPYmplY3RFbGVtZW50IGNs
YXNzXV0gJiYKLSAgICAgICAgICAgICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MRW1i
ZWRFbGVtZW50IGNsYXNzXV0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG9sZFNl
dEN1cnNvcklNUChzZWxmLCBjbWQsIHBvaW50KTsKLX0KLQotI2VuZGlmCi0KLSNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLUBpbnRlcmZhY2UgV2ViTGF5ZXJIb3N0aW5nVmlldyA6
IE5TVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViTGF5ZXJIb3N0aW5nVmlldwotCi0v
LyBFbXB0eSBOU1ZpZXdzIGludGVyY2VwdCByaWdodE1vdXNlRG93bjogdG8gZG8gY29udGV4dCBt
ZW51IGhhbmRsaW5nLCBidXQgd2UgbmVlZCB0aGUgV2ViTGF5ZXJIb3N0aW5nVmlldyB0bwotLy8g
bGV0IHJpZ2h0IG1vdXNlIGNsaWNrcyB0aHJvdWdoLgotLSAodm9pZClyaWdodE1vdXNlRG93bjoo
TlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgW1tzZWxmIG5leHRSZXNwb25kZXJdIHBlcmZvcm1TZWxl
Y3RvcjpfY21kIHdpdGhPYmplY3Q6ZXZlbnRdOwotfQotCi1AZW5kCi0KLSNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLWV4dGVybiAiQyIgewotCi0vLyBOZWVkIHRvIGRl
Y2xhcmUgdGhlc2UgYXR0cmlidXRlIG5hbWVzIGJlY2F1c2UgQXBwS2l0IGV4cG9ydHMgdGhlbSBi
dXQgZG9lcyBub3QgbWFrZSB0aGVtIGF2YWlsYWJsZSBpbiBBUEkgb3IgU1BJIGhlYWRlcnMuCi0K
LWV4dGVybiBOU1N0cmluZyAqTlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZTsKLWV4
dGVybiBOU1N0cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZTsK
LQotfQotCi1AaW50ZXJmYWNlIE5TVmlldyAoV2ViTlNWaWV3RGV0YWlscykKLS0gKHZvaWQpX3Jl
Y3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0IGlz
VmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6
KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKLS0gKHZvaWQpX3Jl
Y3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMg
dmlzUmVjdDooTlNSZWN0KXZpc1JlY3Q7Ci0tICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJz
ZSBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0IGluQ29udGV4
dDooTlNHcmFwaGljc0NvbnRleHQgKiljb250ZXh0IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKLS0g
KE5TUmVjdClfZGlydHlSZWN0OwotLSAodm9pZClfc2V0RHJhd3NPd25EZXNjZW5kYW50czooQk9P
TClkcmF3c093bkRlc2NlbmRhbnRzOwotLSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3Bh
cXVlQW5jZXN0b3JzOwotLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlOwotQGVuZAotCi1A
aW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKFdlYk5TQXBwbGljYXRpb25EZXRhaWxzKQotLSAodm9p
ZClzcGVha1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNX
aW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykKLS0gKGlkKV9uZXdGaXJzdFJlc3BvbmRlckFmdGVy
UmVzaWduaW5nOwotLSAodm9pZClfc2V0Rm9yY2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOwot
QGVuZAotCi1AaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3Ry
aW5nRGV0YWlscykKLS0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwot
LSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5n
ZSBkb2N1bWVudDooRE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5T
RGljdGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsK
LUBlbmQKLQotQGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoV2ViTlNTcGVsbENoZWNrZXJEZXRh
aWxzKQotLSAodm9pZClsZWFybldvcmQ6KE5TU3RyaW5nICopd29yZDsKLUBlbmQKLQotLy8gQnkg
aW1hZ2luZyB0byBhIHdpZHRoIGEgbGl0dGxlIHdpZGVyIHRoYW4gdGhlIGF2YWlsYWJsZSBwaXhl
bHMsCi0vLyB0aGluIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIGRvd24gYSBsaXR0bGUsIG1hdGNoaW5n
IHRoZSB3YXkgdGhleQotLy8gcHJpbnQgaW4gSUUgYW5kIENhbWluby4gVGhpcyBsZXRzIHRoZW0g
dXNlIGZld2VyIHNoZWV0cyB0aGFuIHRoZXkKLS8vIHdvdWxkIG90aGVyd2lzZSwgd2hpY2ggaXMg
cHJlc3VtYWJseSB3aHkgb3RoZXIgYnJvd3NlcnMgZG8gdGhpcy4KLS8vIFdpZGUgcGFnZXMgd2ls
bCBiZSBzY2FsZWQgZG93biBtb3JlIHRoYW4gdGhpcy4KLSNkZWZpbmUgUHJpbnRpbmdNaW5pbXVt
U2hyaW5rRmFjdG9yICAgICAxLjI1ZgotCi0vLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIGhvdyBz
bWFsbCB3ZSBhcmUgd2lsbGluZyB0byByZWR1Y2UgdGhlIHBhZ2UgY29udGVudAotLy8gaW4gb3Jk
ZXIgdG8gYWNjb21tb2RhdGUgdGhlIHdpZGVzdCBsaW5lLiBJZiB0aGUgcGFnZSB3b3VsZCBoYXZl
IHRvIGJlCi0vLyByZWR1Y2VkIHNtYWxsZXIgdG8gbWFrZSB0aGUgd2lkZXN0IGxpbmUgZml0LCB3
ZSBqdXN0IGNsaXAgaW5zdGVhZCAodGhpcwotLy8gYmVoYXZpb3IgbWF0Y2hlcyBNYWNJRSBhbmQg
TW96aWxsYSwgYXQgbGVhc3QpCi0jZGVmaW5lIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvciAg
ICAgMi4wZgotCi0vLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIGhvdyBzaG9ydCB0aGUgbGFzdCBw
cmludGVkIHBhZ2Ugb2YgYSBtdWx0aS1wYWdlIHByaW50IHNlc3Npb24KLS8vIGNhbiBiZSBiZWZv
cmUgd2UgdHJ5IHRvIHNocmluayB0aGUgc2NhbGUgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBudW1i
ZXIgb2YgcGFnZXMsIGFuZAotLy8gdGh1cyBlbGltaW5hdGUgdGhlIG9ycGhhbi4KLSNkZWZpbmUg
TGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0aW8gICAgICAwLjFmCi0KLS8vIFRoaXMgbnVtYmVyIGRl
dGVybWluZXMgdGhlIGFtb3VudCB0aGUgc2NhbGUgZmFjdG9yIGlzIGFkanVzdGVkIHRvIHRyeSB0
byBlbGltaW5hdGUgb3JwaGFucy4KLS8vIEl0IGhhcyBubyBkaXJlY3QgbWF0aGVtYXRpY2FsIHJl
bGF0aW9uc2hpcCB0byBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbywgZHVlIHRvIHZhcmlhYmxl
Ci0vLyBudW1iZXJzIG9mIHBhZ2VzLCBsb2dpYyB0byBhdm9pZCBicmVha2luZyBlbGVtZW50cywg
YW5kIENTUy1zdXBwbGllZCBoYXJkIHBhZ2UgYnJlYWtzLgotI2RlZmluZSBQcmludGluZ09ycGhh
blNocmlua0FkanVzdG1lbnQgIDEuMWYKLQotI2RlZmluZSBBVVRPU0NST0xMX0lOVEVSVkFMICAg
ICAgICAgICAgIDAuMWYKLQotI2RlZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9YICAgICAgICAgICAg
IDQuMGYKLS8vS2VlcCBib3JkZXJfeSBpbiBzeW5jaCB3aXRoIERyYWdDb250cm9sbGVyOjpMaW5r
RHJhZ0JvcmRlckluc2V0Ci0jZGVmaW5lIERSQUdfTEFCRUxfQk9SREVSX1kgICAgICAgICAgICAg
Mi4wZgotI2RlZmluZSBEUkFHX0xBQkVMX1JBRElVUyAgICAgICAgICAgICAgIDUuMGYKLSNkZWZp
bmUgRFJBR19MQUJFTF9CT1JERVJfWV9PRkZTRVQgICAgICAgICAgICAgIDIuMGYKLQotI2RlZmlu
ZSBNSU5fRFJBR19MQUJFTF9XSURUSF9CRUZPUkVfQ0xJUCAgICAgICAgMTIwLjBmCi0jZGVmaW5l
IE1BWF9EUkFHX0xBQkVMX1dJRFRIICAgICAgICAgICAgICAgICAgICAzMjAuMGYKLQotI2RlZmlu
ZSBEUkFHX0xJTktfTEFCRUxfRk9OVF9TSVpFICAgMTEuMGYKLSNkZWZpbmUgRFJBR19MSU5LX1VS
TF9GT05UX1NJWkUgICAxMC4wZgotCi0vLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0
IHVzaW5nIHNvbWV0aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRh
eS4KLSNkZWZpbmUgVFJBQ0tJTkdfUkVDVF9UQUcgMHhCQURGQUNFCi0KLS8vIEZJWE1FOiBUaGlz
IGNvbnN0YW50IGlzIGNvcGllZCBmcm9tIEFwcEtpdCdzIF9OWFNtYXJ0UGFzdGUgY29uc3RhbnQu
Ci0jZGVmaW5lIFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlIEAiTmVYVCBzbWFydCBwYXN0ZSBwYXN0
ZWJvYXJkIHR5cGUiCi0KLSNkZWZpbmUgU1RBTkRBUkRfV0VJR0hUIDUKLSNkZWZpbmUgTUlOX0JP
TERfV0VJR0hUIDcKLSNkZWZpbmUgU1RBTkRBUkRfQk9MRF9XRUlHSFQgOQotCi0vLyBGYWtlIFVS
TCBzY2hlbWUuCi0jZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNjaGVtZSBAIndlYmtpdC1mYWtlLXVy
bCIKLQotLy8gPHJkYXI6Ly9wcm9ibGVtLzQ5ODU1MjQ+IFJlZmVyZW5jZXMgdG8gV2ViQ29yZVNj
cm9sbFZpZXcgYXMgYSBzdWJ2aWV3IG9mIGEgV2ViSFRNTFZpZXcgbWF5IGJlIHByZXNlbnQKLS8v
IGluIHNvbWUgTklCIGZpbGVzLCBzbyBOU1VuYXJjaGl2ZXIgbXVzdCBiZSBzdGlsbCBhYmxlIHRv
IGxvb2sgdXAgdGhpcyBub3ctdW51c2VkIGNsYXNzLgotQGludGVyZmFjZSBXZWJDb3JlU2Nyb2xs
VmlldyA6IE5TU2Nyb2xsVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViQ29yZVNjcm9s
bFZpZXcKLUBlbmQKLQotLy8gaWYgWUVTLCBkbyB0aGUgc3RhbmRhcmQgTlNWaWV3IGhpdCB0ZXN0
ICh3aGljaCBjYW4ndCBnaXZlIHRoZSByaWdodCByZXN1bHQgd2hlbiBIVE1MIG92ZXJsYXBzIGEg
dmlldykKLXN0YXRpYyBCT09MIGZvcmNlTlNWaWV3SGl0VGVzdDsKLQotLy8gaWYgWUVTLCBkbyB0
aGUgInRvcCBXZWJIVE1MVmlldyIgaGl0IHRlc3QgKHdoaWNoIHdlJ2QgbGlrZSB0byBkbyBhbGwg
dGhlIHRpbWUgYnV0IGNhbid0IGJlY2F1c2Ugb2YgSmF2YSByZXF1aXJlbWVudHMgW3NlZSBidWcg
NDM0OTcyMV0pCi1zdGF0aWMgQk9PTCBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdDsKLQotc3RhdGlj
IFdlYkhUTUxWaWV3ICpsYXN0SGl0VmlldzsKLQotLy8gV2UgbmVlZCB0aGlzIHRvIGJlIGFibGUg
dG8gc2FmZWx5IHJlZmVyZW5jZSB0aGUgQ2FjaGVkSW1hZ2UgZm9yIHRoZSBwcm9taXNlZCBkcmFn
IGRhdGEKLXN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkK
LXsKLSAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHN0YXRpY0NhY2hlZFJlc291cmNl
Q2xpZW50ID0gbmV3IENhY2hlZFJlc291cmNlQ2xpZW50OwotICAgIHJldHVybiBzdGF0aWNDYWNo
ZWRSZXNvdXJjZUNsaWVudDsKLX0KLQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZp
ZXdGaWxlSW50ZXJuYWwpCi0tIChCT09MKV9pbWFnZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilw
YXRoczsKLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGluQ29udGV4dDooRE9NUmFuZ2UgKilj
b250ZXh0IGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0OwotLSAoTlNTdHJpbmcg
KilfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7Ci0t
ICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFs
bG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0OwotLSAodm9pZClfcGFzdGVBc1BsYWlu
VGV4dFdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwotLSAodm9pZClf
cmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5OwotLSAodm9pZClfcmVtb3Zl
U3VwZXJ2aWV3T2JzZXJ2ZXJzOwotLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzOwotLSAo
Qk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVu
dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmll
d0luc2VydEFjdGlvbilhY3Rpb247Ci0tIChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmlu
ZyAqKXRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246
KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uOwotLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRB
Y3Rpb24pYWN0aW9uOwotLSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0OwotLSAoRE9NUmFu
Z2UgKilfc2VsZWN0ZWRSYW5nZTsKLS0gKEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlOwotLSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50
OwotLSAodm9pZClfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICop
dHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGNhY2hlZEF0dHJp
YnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmc7Ci0tIChE
T01SYW5nZSAqKV9kb2N1bWVudFJhbmdlOwotLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5T
RXZlbnQgKilldmVudDsKLS0gKFdlYkhUTUxWaWV3ICopX3RvcEhUTUxWaWV3OwotLSAoQk9PTClf
aXNUb3BIVE1MVmlldzsKLS0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmU7Ci0t
ICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemU7Ci0t
ICh2b2lkKV93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmU7Ci1AZW5kCi0KLSNpZiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
LQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdUZXh0Q2hlY2tpbmdJbnRlcm5h
bCkKLS0gKHZvaWQpb3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyOwotLSAo
Qk9PTClzbWFydEluc2VydERlbGV0ZUVuYWJsZWQ7Ci0tICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVs
ZXRlRW5hYmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dnbGVTbWFydEluc2VydERlbGV0ZToo
aWQpc2VuZGVyOwotLSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDsK
LS0gKHZvaWQpc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7
Ci0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOihpZClzZW5kZXI7Ci0t
IChCT09MKWlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ7Ci0tICh2b2lkKXNldEF1dG9t
YXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZUF1dG9t
YXRpY0xpbmtEZXRlY3Rpb246KGlkKXNlbmRlcjsKLS0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZDsKLS0gKHZvaWQpc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWQ6KEJPT0wpZmxhZzsKLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bjooaWQpc2VuZGVyOwotLSAoQk9PTClpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ7
Ci0tICh2b2lkKXNldEF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ6KEJPT0wpZmxhZzsK
LS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXI7Ci0tIChC
T09MKWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKLS0gKHZvaWQpc2V0QXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dn
bGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcjsKLUBlbmQKLQotI2VuZGlm
Ci0KLUBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkZvcndhcmREZWNsYXJhdGlvbikgLy8gRklY
TUU6IFB1dCB0aGlzIGluIGEgbm9ybWFsIGNhdGVnb3J5IGFuZCBzdG9wIGRvaW5nIHRoZSBmb3J3
YXJkIGRlY2xhcmF0aW9uIHRyaWNrLgotLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRp
bmcgbWluaW11bVBhZ2VXaWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6
KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZTsK
LUBlbmQKLQotQGNsYXNzIE5TVGV4dElucHV0Q29udGV4dDsKLUBpbnRlcmZhY2UgTlNSZXNwb25k
ZXIgKEFwcEtpdERldGFpbHMpCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQ7
Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNPYmplY3QgKE5TVGV4dElucHV0Q29udGV4dERldGFpbHMp
Ci0tIChCT09MKXdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50czsKLS0gKEJPT0wpaGFuZGxlTW91c2VF
dmVudDooTlNFdmVudCAqKWV2ZW50OwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChX
ZWJOU1RleHRJbnB1dFN1cHBvcnQpIDxOU1RleHRJbnB1dD4KLS0gKHZvaWQpX3VwZGF0ZVNlbGVj
dGlvbkZvcklucHV0TWFuYWdlcjsKLUBlbmQKLQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2Vi
RWRpdGluZ1N0eWxlU3VwcG9ydCkKLS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlT
dHlsZTsKLS0gKE5TU3RyaW5nICopX2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcjsKLUBl
bmQKLQotQGludGVyZmFjZSBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAodm9p
ZClfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVBcnJheSAq
KSBhcnJheTsKLUBlbmQKLQotQGludGVyZmFjZSBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1M
Vmlld0ZpbGVJbnRlcm5hbCkKLS0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2Jq
ZWN0IGZvcktleTooaWQpa2V5OwotQGVuZAotCi0vLyBIYW5kbGVzIHRoZSBjb21wbGV0ZTogdGV4
dCBjb21tYW5kCi1AaW50ZXJmYWNlIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgOiBOU09iamVj
dCA8TlNUYWJsZVZpZXdEZWxlZ2F0ZSwgTlNUYWJsZVZpZXdEYXRhU291cmNlPiB7Ci1AcHJpdmF0
ZQotICAgIFdlYkhUTUxWaWV3ICpfdmlldzsKLSAgICBOU1dpbmRvdyAqX3BvcHVwV2luZG93Owot
ICAgIE5TVGFibGVWaWV3ICpfdGFibGVWaWV3OwotICAgIE5TQXJyYXkgKl9jb21wbGV0aW9uczsK
LSAgICBOU1N0cmluZyAqX29yaWdpbmFsU3RyaW5nOwotICAgIGludCBwcmVmaXhMZW5ndGg7Ci19
Ci0tIChpZClpbml0V2l0aEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKXZpZXc7Ci0tICh2b2lkKWRv
Q29tcGxldGlvbjsKLS0gKHZvaWQpZW5kUmV2ZXJ0aW5nQ2hhbmdlOihCT09MKXJldmVydENoYW5n
ZSBtb3ZlTGVmdDooQk9PTClnb0xlZnQ7Ci0tIChCT09MKXBvcHVwV2luZG93SXNPcGVuOwotLSAo
Qk9PTClmaWx0ZXJLZXlEb3duOihOU0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKV9yZWZsZWN0U2Vs
ZWN0aW9uOwotQGVuZAotCi1zdHJ1Y3QgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzIHsKLSAgICBLZXlib2FyZEV2ZW50KiBldmVudDsKLSAgICBCT09MIGV2ZW50V2FzSGFu
ZGxlZDsKLSAgICBCT09MIHNob3VsZFNhdmVDb21tYW5kOwotICAgIC8vIFRoZSBJbnB1dCBNZXRo
b2QgbWF5IGNvbnN1bWUgYW4gZXZlbnQgYW5kIG5vdCB0ZWxsIHVzLCBpbgotICAgIC8vIHdoaWNo
IGNhc2Ugd2Ugc2hvdWxkIG5vdCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSBET00KLSAgICBCT09M
IGNvbnN1bWVkQnlJTTsKLX07Ci0KLUBpbnRlcmZhY2UgV2ViSFRNTFZpZXdQcml2YXRlIDogTlNP
YmplY3QgewotQHB1YmxpYwotICAgIEJPT0wgY2xvc2VkOwotICAgIEJPT0wgbmVlZHNUb0FwcGx5
U3R5bGVzOwotICAgIEJPT0wgaWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHM7Ci0gICAgQk9PTCBw
cmludGluZzsKLSAgICBCT09MIGF2b2lkaW5nUHJpbnRPcnBoYW47Ci0gICAgQk9PTCBvYnNlcnZp
bmdNb3VzZU1vdmVkTm90aWZpY2F0aW9uczsKLSAgICBCT09MIG9ic2VydmluZ1N1cGVydmlld05v
dGlmaWNhdGlvbnM7Ci0gICAgQk9PTCBvYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zOwotICAg
IEJPT0wgcmVzaWduaW5nRmlyc3RSZXNwb25kZXI7Ci0gICAgCi0gICAgaWQgc2F2ZWRTdWJ2aWV3
czsKLSAgICBCT09MIHN1YnZpZXdzU2V0QXNpZGU7Ci0gICAgCi0jaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQotICAgIE5TVmlldyAqbGF5ZXJIb3N0aW5nVmlldzsKLSNlbmRpZgotCi0g
ICAgTlNFdmVudCAqbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2
ZW50LgotICAgIEJPT0wgaGFuZGxpbmdNb3VzZURvd25FdmVudDsKLSAgICBOU0V2ZW50ICprZXlE
b3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgotCi0gICAgLy8gQSBX
ZWJIVE1MVmlldyBoYXMgYSBzaW5nbGUgaW5wdXQgY29udGV4dCwgYnV0IHdlIHJldHVybiBuaWwg
d2hlbiBpbiBub24tZWRpdGFibGUgY29udGVudCB0byBhdm9pZCBtYWtpbmcgaW5wdXQgbWV0aG9k
cyBkbyB0aGVpciB3b3JrLgotICAgIC8vIFRoaXMgc3RhdGUgaXMgc2F2ZWQgZWFjaCB0aW1lIHNl
bGVjdGlvbiBjaGFuZ2VzLCBiZWNhdXNlIGNvbXB1dGluZyBpdCBjYXVzZXMgc3R5bGUgcmVjYWxj
LCB3aGljaCBpcyBub3QgYWx3YXlzIHNhZmUgdG8gZG8uCi0gICAgQk9PTCBleHBvc2VJbnB1dENv
bnRleHQ7Ci0KLSAgICBOU1BvaW50IGxhc3RTY3JvbGxQb3NpdGlvbjsKLQotICAgIFdlYlBsdWdp
bkNvbnRyb2xsZXIgKnBsdWdpbkNvbnRyb2xsZXI7Ci0gICAgCi0gICAgTlNTdHJpbmcgKnRvb2xU
aXA7Ci0gICAgTlNUb29sVGlwVGFnIGxhc3RUb29sVGlwVGFnOwotICAgIGlkIHRyYWNraW5nUmVj
dE93bmVyOwotICAgIHZvaWQgKnRyYWNraW5nUmVjdFVzZXJEYXRhOwotICAgIAotICAgIE5TVGlt
ZXIgKmF1dG9zY3JvbGxUaW1lcjsKLSAgICBOU0V2ZW50ICphdXRvc2Nyb2xsVHJpZ2dlckV2ZW50
OwotICAgIAotICAgIE5TQXJyYXkgKnBhZ2VSZWN0czsKLQotICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKmhpZ2hsaWdodGVyczsKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgQk9PTCBu
ZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlOwotI2VuZGlmCi0gICAgCi0gICAgV2ViVGV4dENvbXBs
ZXRlQ29udHJvbGxlciAqY29tcENvbnRyb2xsZXI7Ci0gICAgCi0gICAgQk9PTCB0cmFuc3BhcmVu
dEJhY2tncm91bmQ7Ci0KLSAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMqIGludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgQk9PTCByZWNlaXZlZE5PT1A7
Ci0gICAgCi0gICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZTsKLSAgICBXZWJDb3JlOjpDYWNo
ZWRJbWFnZSogcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U7Ci0gICAgCi0gICAgQ0ZSdW5Mb29w
VGltZXJSZWYgdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXI7Ci0gICAgQ0ZSdW5Mb29w
VGltZXJSZWYgdXBkYXRlTW91c2VvdmVyVGltZXI7Ci0KLSAgICBTRUwgc2VsZWN0b3JGb3JEb0Nv
bW1hbmRCeVNlbGVjdG9yOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIEJPT0wgZW51bWVyYXRpbmdT
dWJ2aWV3czsKLSNlbmRpZgotfQotLSAodm9pZCljbGVhcjsKLUBlbmQKLQotc3RhdGljIE5TQ2Vs
bFN0YXRlVmFsdWUga2l0KFRyaVN0YXRlIHN0YXRlKQotewotICAgIHN3aXRjaCAoc3RhdGUpIHsK
LSAgICAgICAgY2FzZSBGYWxzZVRyaVN0YXRlOgotICAgICAgICAgICAgcmV0dXJuIE5TT2ZmU3Rh
dGU7Ci0gICAgICAgIGNhc2UgVHJ1ZVRyaVN0YXRlOgotICAgICAgICAgICAgcmV0dXJuIE5TT25T
dGF0ZTsKLSAgICAgICAgY2FzZSBNaXhlZFRyaVN0YXRlOgotICAgICAgICAgICAgcmV0dXJuIE5T
TWl4ZWRTdGF0ZTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IE5TT2ZmU3RhdGU7Ci19Ci0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlld1ByaXZhdGUKLQot
KyAodm9pZClpbml0aWFsaXplCi17Ci0gICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0j
aWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRo
cmVhZChzZWxmKTsKLSNlbmRpZgotCi0gICAgaWYgKCFvbGRTZXRDdXJzb3JJTVApIHsKLSNpZmRl
ZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICBNZXRob2Qgc2V0Q3Vyc29yTWV0aG9kID0gY2xh
c3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TQ3Vyc29yIGNsYXNzXSwgQHNlbGVjdG9yKHNldCkpOwot
I2Vsc2UKLSAgICAgICAgTWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNl
TWV0aG9kKFtOU1dpbmRvdyBjbGFzc10sIEBzZWxlY3Rvcihfc2V0Q3Vyc29yRm9yTW91c2VMb2Nh
dGlvbjopKTsKLSNlbmRpZgotICAgICAgICBBU1NFUlQoc2V0Q3Vyc29yTWV0aG9kKTsKLQotICAg
ICAgICBvbGRTZXRDdXJzb3JJTVAgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24oc2V0Q3Vyc29y
TWV0aG9kLCAoSU1QKXNldEN1cnNvcik7Ci0gICAgICAgIEFTU0VSVChvbGRTZXRDdXJzb3JJTVAp
OwotICAgIH0KLSAgICAKLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIGlmICghb2xkUmVz
ZXRDdXJzb3JSZWN0c0lNUCkgewotICAgICAgICBNZXRob2QgcmVzZXRDdXJzb3JSZWN0c01ldGhv
ZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU1dpbmRvdyBjbGFzc10sIEBzZWxlY3Rvcihy
ZXNldEN1cnNvclJlY3RzKSk7Ci0gICAgICAgIEFTU0VSVChyZXNldEN1cnNvclJlY3RzTWV0aG9k
KTsKLSAgICAgICAgb2xkUmVzZXRDdXJzb3JSZWN0c0lNUCA9IG1ldGhvZF9zZXRJbXBsZW1lbnRh
dGlvbihyZXNldEN1cnNvclJlY3RzTWV0aG9kLCAoSU1QKXJlc2V0Q3Vyc29yUmVjdHMpOwotICAg
ICAgICBBU1NFUlQob2xkUmVzZXRDdXJzb3JSZWN0c0lNUCk7Ci0gICAgfQotI2VuZGlmCi0KLX0K
LQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9j
YXRlT25NYWluVGhyZWFkKFtXZWJIVE1MVmlld1ByaXZhdGUgY2xhc3NdLCBzZWxmKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFhdXRvc2Nyb2xsVGltZXIpOwotICAgIEFTU0VSVCgh
YXV0b3Njcm9sbFRyaWdnZXJFdmVudCk7Ci0gICAgQVNTRVJUKCF1cGRhdGVGb2N1c2VkQW5kQWN0
aXZlU3RhdGVUaW1lcik7Ci0gICAgQVNTRVJUKCF1cGRhdGVNb3VzZW92ZXJUaW1lcik7Ci0gICAg
Ci0gICAgW21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOwotICAgIFtrZXlEb3duRXZlbnQgcmVsZWFz
ZV07Ci0gICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07Ci0gICAgW3Rvb2xUaXAgcmVsZWFz
ZV07Ci0gICAgW2NvbXBDb250cm9sbGVyIHJlbGVhc2VdOwotICAgIFtkYXRhU291cmNlIHJlbGVh
c2VdOwotICAgIFtoaWdobGlnaHRlcnMgcmVsZWFzZV07Ci0gICAgaWYgKHByb21pc2VkRHJhZ1RJ
RkZEYXRhU291cmNlKQotICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3Zl
Q2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKLQotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0K
LQotLSAodm9pZClmaW5hbGl6ZQotewotICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwotCi0gICAg
aWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQotICAgICAgICBwcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKLQotICAgIFtz
dXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKHZvaWQpY2xlYXIKLXsKLSAgICBbbW91c2VEb3duRXZl
bnQgcmVsZWFzZV07Ci0gICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBbcGx1Z2luQ29u
dHJvbGxlciByZWxlYXNlXTsKLSAgICBbdG9vbFRpcCByZWxlYXNlXTsKLSAgICBbY29tcENvbnRy
b2xsZXIgcmVsZWFzZV07Ci0gICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07Ci0gICAgW2hpZ2hsaWdo
dGVycyByZWxlYXNlXTsKLSAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCi0gICAg
ICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRh
Q2xpZW50KCkpOwotCi0gICAgbW91c2VEb3duRXZlbnQgPSBuaWw7Ci0gICAga2V5RG93bkV2ZW50
ID0gbmlsOwotICAgIHBsdWdpbkNvbnRyb2xsZXIgPSBuaWw7Ci0gICAgdG9vbFRpcCA9IG5pbDsK
LSAgICBjb21wQ29udHJvbGxlciA9IG5pbDsKLSAgICBkYXRhU291cmNlID0gbmlsOwotICAgIGhp
Z2hsaWdodGVycyA9IG5pbDsKLSAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IDA7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgbGF5ZXJIb3N0aW5nVmlldyA9
IG5pbDsKLSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAo
V2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0KLS0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2UK
LXsKLSAgICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBfZG9jdW1lbnRSYW5n
ZV07Ci19Ci0KLS0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAqKXBhdGhzCi17
Ci0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVudW1lcmF0b3Jd
OwotICAgIE5TU3RyaW5nICpwYXRoOwotICAgIAotICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJh
dG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKLSAgICAgICAgTlNTdHJpbmcgKk1JTUVUeXBlID0g
V0tHZXRNSU1FVHlwZUZvckV4dGVuc2lvbihbcGF0aCBwYXRoRXh0ZW5zaW9uXSk7Ci0gICAgICAg
IGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShN
SU1FVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gTk87Ci19Ci0KLS0gKFdlYkRhdGFTb3VyY2UgKilfZGF0YVNvdXJjZQotewotICAgIHJldHVy
biBfcHJpdmF0ZS0+ZGF0YVNvdXJjZTsKLX0KLQotLSAoV2ViVmlldyAqKV93ZWJWaWV3Ci17Ci0g
ICAgcmV0dXJuIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSBfd2ViVmlld107Ci19Ci0KLS0gKFdlYkZy
YW1lVmlldyAqKV9mcmFtZVZpZXcKLXsKLSAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJj
ZSB3ZWJGcmFtZV0gZnJhbWVWaWV3XTsKLX0KLQotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9k
b2N1bWVudEZyYWdtZW50V2l0aFBhdGhzOihOU0FycmF5ICopcGF0aHMKLXsKLSAgICBET01Eb2N1
bWVudEZyYWdtZW50ICpmcmFnbWVudDsKLSAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBb
cGF0aHMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgTlNNdXRhYmxlQXJyYXkgKmRvbU5vZGVzID0g
W1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAgTlNTdHJpbmcgKnBhdGg7Ci0gICAg
Ci0gICAgd2hpbGUgKChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgewot
ICAgICAgICAvLyBOb24taW1hZ2UgZmlsZSB0eXBlczsgX3dlYl91c2VyVmlzaWJsZVN0cmluZyBp
cyBhcHByb3ByaWF0ZSBoZXJlIGJlY2F1c2UgdGhpcyB3aWxsCi0gICAgICAgIC8vIGJlIHBhc3Rl
ZCBhcyB2aXNpYmxlIHRleHQuCi0gICAgICAgIE5TU3RyaW5nICp1cmwgPSBbW1tOU1VSTCBmaWxl
VVJMV2l0aFBhdGg6cGF0aF0gX3dlYmtpdF9jYW5vbmljYWxpemVdIF93ZWJfdXNlclZpc2libGVT
dHJpbmddOwotICAgICAgICBbZG9tTm9kZXMgYWRkT2JqZWN0OltbW3NlbGYgX2ZyYW1lXSBET01E
b2N1bWVudF0gY3JlYXRlVGV4dE5vZGU6IHVybF1dOwotICAgIH0KLSAgICAKLSAgICBmcmFnbWVu
dCA9IFtbc2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhz
OmRvbU5vZGVzXTsgCi0gICAgCi0gICAgW2RvbU5vZGVzIHJlbGVhc2VdOwotICAgIAotICAgIHJl
dHVybiBbZnJhZ21lbnQgZmlyc3RDaGlsZF0gIT0gbmlsID8gZnJhZ21lbnQgOiBuaWw7Ci19Ci0K
LSsgKE5TQXJyYXkgKilfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJz
aW9uCi17Ci0gICAgc3RhdGljIE5TQXJyYXkgKmVsZW1lbnRzID0gbmlsOwotICAgIGlmIChlbGVt
ZW50cyA9PSBuaWwpIHsKLSAgICAgICAgZWxlbWVudHMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRX
aXRoT2JqZWN0czoKLSAgICAgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ugd2FudCBzdHls
ZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkgaW5zZXJ0ZWQuCi0g
ICAgICAgICAgICBAInN0eWxlIiwKLSAgICAgICAgICAgIC8vIE9taXQgeG1sIHNvIHRoZSByZXN1
bHQgaXMgbm90IFhIVE1MLgotICAgICAgICAgICAgQCJ4bWwiLCAKLSAgICAgICAgICAgIC8vIE9t
aXQgdGFncyB0aGF0IHdpbGwgZ2V0IHN0cmlwcGVkIHdoZW4gY29udmVydGVkIHRvIGEgZnJhZ21l
bnQgYW55d2F5LgotICAgICAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJi
b2R5IiwKLSAgICAgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgotICAgICAgICAgICAg
QCJhcHBsZXQiLCBAImJhc2Vmb250IiwgQCJjZW50ZXIiLCBAImRpciIsIEAiZm9udCIsIEAiaXNp
bmRleCIsIEAibWVudSIsIEAicyIsIEAic3RyaWtlIiwgQCJ1IiwKLSAgICAgICAgICAgIC8vIE9t
aXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0YWNobWVudHMgYXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50
LgotICAgICAgICAgICAgQCJvYmplY3QiLCBuaWxdOwotICAgICAgICBDRlJldGFpbihlbGVtZW50
cyk7Ci0gICAgfQotICAgIHJldHVybiBlbGVtZW50czsKLX0KLQotc3RhdGljIE5TVVJMKiB1bmlx
dWVVUkxXaXRoUmVsYXRpdmVQYXJ0KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCi17Ci0gICAgQ0ZV
VUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7Ci0gICAg
TlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Ci0gICAgQ0ZSZWxlYXNlKFVVSURSZWYpOwotICAg
IE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVAOi8vJUAvJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJl
bGF0aXZlUGFydF1dOwotICAgIENGUmVsZWFzZShVVUlEU3RyaW5nKTsKLQotICAgIHJldHVybiBV
Ukw7Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1BsYWluVGV4
dDooQk9PTClhbGxvd1BsYWluVGV4dAotewotICAgIE5TQXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9h
cmQgdHlwZXNdOwotICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gbmlsOwotCi0g
ICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0gJiYKLSAg
ICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpw
YXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRU
eXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2Vz
OjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIAotICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6TlNIVE1MUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3Nl
bGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TSFRNTFBi
b2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAg
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdICYmCi0gICAg
ICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFz
dGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yVHlwZTpOU1JURlBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2Fy
ZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJv
bVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBd
KSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09i
amVjdDpOU1RJRkZQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlw
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250
ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLQotICAgIGlmIChb
dHlwZXMgY29udGFpbnNPYmplY3Q6TlNQREZQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21l
bnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6
TlNQREZQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50
OwotCi0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNQSUNUUGJvYXJkVHlw
ZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOk5TUElDVFBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQot
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0jZW5kaWYKLQotICAgIC8vIE9ubHkgMTAuNSBhbmQg
aGlnaGVyIHN1cHBvcnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBwYXN0ZWJvYXJkIHR5cGVzIHdp
dGggVVRJcywgYnV0IHdlIGRvbid0IGJlbGlldmUKLSAgICAvLyB0aGF0IGFueSBhcHBsaWNhdGlv
bnMgb24gVGlnZXIgcHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBVVEksIGxpa2Ug
UE5HLCBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OihO
U1N0cmluZyopa1VUVHlwZVBOR10gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmluZyopa1VUVHlw
ZVBORwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5D
b250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICAgICAg
Ci0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1VSTFBib2FyZFR5cGVdICYmCi0gICAg
ICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFz
dGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yVHlwZTpOU1VSTFBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7Ci0gICAgICAgIAotICAgIGlmIChhbGxvd1BsYWluVGV4dCAmJiBbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQg
PSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1N0
cmluZ1Bib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKSB7Ci0gICAgICAgIHJldHVybiBmcmFnbWVu
dDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNTdHJpbmcgKilfcGxh
aW5UZXh0RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBO
U0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKLSAgICAKLSAgICBpZiAoW3R5cGVz
IGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCi0gICAgICAgIHJldHVybiBbW3Bh
c3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3Ry
aW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOwotICAgIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZyA9IG5pbDsKLSAgICBOU1N0cmluZyAqc3RyaW5nOwotCi0gICAgaWYg
KFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkKLSAgICAgICAgYXR0cmli
dXRlZFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bh
c3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVz
Ok5VTExdOwotICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCAmJiBbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSkKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9y
VHlwZTpOU1JURlBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKLSAgICBpZiAo
YXR0cmlidXRlZFN0cmluZyAhPSBuaWwpIHsKLSAgICAgICAgc3RyaW5nID0gW1thdHRyaWJ1dGVk
U3RyaW5nIHN0cmluZ10gY29weV07Ci0gICAgICAgIFthdHRyaWJ1dGVkU3RyaW5nIHJlbGVhc2Vd
OwotICAgICAgICByZXR1cm4gW3N0cmluZyBhdXRvcmVsZWFzZV07Ci0gICAgfQotICAgIAotICAg
IGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSkgewotICAg
ICAgICBzdHJpbmcgPSBbW3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1l
c1Bib2FyZFR5cGVdIGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl07Ci0gICAgICAgIGlm
IChzdHJpbmcgIT0gbmlsKQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKLSAgICB9Ci0gICAg
Ci0gICAgTlNVUkwgKlVSTDsKLSAgICAKLSAgICBpZiAoKFVSTCA9IFtOU1VSTCBVUkxGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkXSkpIHsKLSAgICAgICAgc3RyaW5nID0gW1VSTCBfd2ViX3VzZXJW
aXNpYmxlU3RyaW5nXTsKLSAgICAgICAgaWYgKFtzdHJpbmcgbGVuZ3RoXSA+IDApCi0gICAgICAg
ICAgICByZXR1cm4gc3RyaW5nOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmlsOwotfQotCi0t
ICh2b2lkKV9wYXN0ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFs
bG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0Ci17Ci0gICAgV2ViVmlldyAqd2ViVmll
dyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsKLSAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9u
UGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLQotICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9z
ZWxlY3RlZFJhbmdlXTsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzZWxm
IF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBpbkNvbnRleHQ6cmFu
Z2UgYWxsb3dQbGFpblRleHQ6YWxsb3dQbGFpblRleHRdOwotICAgIGlmIChmcmFnbWVudCAmJiBb
c2VsZiBfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFu
Z2UgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAgICAgIFtbc2Vs
ZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJl
cGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZF0gbWF0Y2hTdHlsZTpOT107Ci0KLSAgICBbd2ViVmlldyBfc2V0SW5z
ZXJ0aW9uUGFzdGVib2FyZDpuaWxdOwotICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwotfQotCi0tICh2
b2lkKV9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQKLXsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5d
OwotICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotCi0g
ICAgTlNTdHJpbmcgKnRleHQgPSBbc2VsZiBfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6cGFzdGVi
b2FyZF07Ci0gICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dGV4
dCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKLSAgICAgICAgW1tzZWxm
IF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0ZXh0IHNlbGVjdFJlcGxhY2VtZW50
Ok5PIHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFz
dGVib2FyZF1dOwotCi0gICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6bmlsXTsK
LSAgICBbd2ViVmlldyByZWxlYXNlXTsKLX0KLQotLSAodm9pZClfcmVtb3ZlTW91c2VNb3ZlZE9i
c2VydmVyVW5jb25kaXRpb25hbGx5Ci17Ci0gICAgaWYgKCFfcHJpdmF0ZSB8fCAhX3ByaXZhdGUt
Pm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjpzZWxmIG5hbWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om5pbF07Ci0gICAg
X3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zID0gZmFsc2U7Ci19Ci0K
LS0gKHZvaWQpX3JlbW92ZVN1cGVydmlld09ic2VydmVycwotewotICAgIGlmICghX3ByaXZhdGUg
fHwgIV9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBlcnZpZXddOwot
ICAgIGlmICghc3VwZXJ2aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVy
IHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlv
biBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2Vy
dmVyOnNlbGYgbmFtZTpOU1ZpZXdCb3VuZHNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1
cGVydmlld107Ci0gICAgCi0gICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNh
dGlvbnMgPSBmYWxzZTsKLX0KLQotLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCi17Ci0g
ICAgaWYgKCFfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAg
IGlmICghd2luZG93KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNOb3RpZmljYXRpb25D
ZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFt
ZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90
aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2ln
bktleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJl
bW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmpl
Y3Q6d2luZG93XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYg
bmFtZTpXS1dpbmRvd1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0aW9uKCkgb2JqZWN0OndpbmRv
d107Ci0gICAgCi0gICAgX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMgPSBm
YWxzZTsKLX0KLQotLSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJh
Z21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZl
bkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KLXsKLSAgICBXZWJWaWV3ICp3ZWJW
aWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIERPTU5vZGUgKmNoaWxkID0gW2ZyYWdtZW50IGZp
cnN0Q2hpbGRdOwotICAgIGlmIChbZnJhZ21lbnQgbGFzdENoaWxkXSA9PSBjaGlsZCAmJiBbY2hp
bGQgaXNLaW5kT2ZDbGFzczpbRE9NQ2hhcmFjdGVyRGF0YSBjbGFzc11dKQotICAgICAgICByZXR1
cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBz
aG91bGRJbnNlcnRUZXh0OlsoRE9NQ2hhcmFjdGVyRGF0YSAqKWNoaWxkIGRhdGFdIHJlcGxhY2lu
Z0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Ci0gICAgcmV0dXJuIFtbd2ViVmll
dyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0
Tm9kZTpmcmFnbWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25d
OwotfQotCi0tIChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQgcmVwbGFj
aW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRB
Y3Rpb24pYWN0aW9uCi17Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsK
LSAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6
d2ViVmlldyBzaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2
ZW5BY3Rpb246YWN0aW9uXTsKLX0KLQotLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24p
YWN0aW9uCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9zaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFj
aW5nRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIGdpdmVuQWN0aW9uOmFjdGlvbl07Ci19
Ci0KLS8vIENhbGN1bGF0ZSB0aGUgdmVydGljYWwgc2l6ZSBvZiB0aGUgdmlldyB0aGF0IGZpdHMg
b24gYSBzaW5nbGUgcGFnZQotLSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0Ci17Ci0gICAg
Ly8gT2J0YWluIHRoZSBwcmludCBpbmZvIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9u
Ci0gICAgTlNQcmludEluZm8gKnBpID0gW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRp
b25dIHByaW50SW5mb107Ci0gICAgCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBwYWdlIGhlaWdodCBp
biBwb2ludHMKLSAgICBOU1NpemUgcGFwZXJTaXplID0gW3BpIHBhcGVyU2l6ZV07Ci0gICAgcmV0
dXJuIHBhcGVyU2l6ZS5oZWlnaHQgLSBbcGkgdG9wTWFyZ2luXSAtIFtwaSBib3R0b21NYXJnaW5d
OwotfQotCi0tIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCi17Ci0gICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSA6IG5pbDsK
LX0KLQotLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNob3VsZERlbGV0ZVJhbmdlKGNvcmUocmFu
Z2UpKTsKLX0KLQotLSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50
Ci17Ci0gICAgLy8gVXN1YWxseSwgd2UgaGFjayBBSydzIGhpdFRlc3QgbWV0aG9kIHRvIGNhdGNo
IGFsbCBldmVudHMgYXQgdGhlIHRvcG1vc3QgV2ViSFRNTFZpZXcuICAKLSAgICAvLyBDYWxsZXJz
IG9mIHRoaXMgbWV0aG9kLCBob3dldmVyLCB3YW50IHRvIHF1ZXJ5IHRoZSBkZWVwZXN0IHZpZXcg
aW5zdGVhZC4KLSAgICBmb3JjZU5TVmlld0hpdFRlc3QgPSBZRVM7Ci0gICAgTlNWaWV3ICpoaXRW
aWV3ID0gW1tbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBoaXRUZXN0OltldmVudCBsb2NhdGlv
bkluV2luZG93XV07Ci0gICAgZm9yY2VOU1ZpZXdIaXRUZXN0ID0gTk87ICAgIAotICAgIHJldHVy
biBoaXRWaWV3OwotfQotCi0tICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlw
ZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9h
cmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRl
ZFN0cmluZwotewotICAgIC8vIFB1dCBIVE1MIG9uIHRoZSBwYXN0ZWJvYXJkLgotICAgIGlmIChb
dHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgIGlm
IChSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZl
OjpjcmVhdGVGcm9tU2VsZWN0aW9uKGNvcmUoW3NlbGYgX2ZyYW1lXSkpKSB7Ci0gICAgICAgICAg
ICBpZiAoUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGNvcmVBcmNoaXZlID8gY29yZUFyY2hp
dmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpIDogMCkKLSAgICAgICAgICAgICAgICBbcGFzdGVi
b2FyZCBzZXREYXRhOihOU0RhdGEgKilkYXRhLmdldCgpIGZvclR5cGU6V2ViQXJjaGl2ZVBib2Fy
ZFR5cGVdOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFB1dCB0aGUgYXR0cmlidXRl
ZCBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQgKFJURi9SVEZEIGZvcm1hdCkuCi0gICAgaWYgKFt0
eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkgewotICAgICAgICBpZiAoYXR0
cmlidXRlZFN0cmluZyA9PSBuaWwpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBb
c2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOwotICAgICAgICB9ICAgICAgICAKLSAgICAg
ICAgTlNEYXRhICpSVEZERGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVz
Om5pbF07Ci0gICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRGRERhdGEgZm9yVHlwZTpOU1JU
RkRQYm9hcmRUeXBlXTsKLSAgICB9ICAgICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TUlRGUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0g
bmlsKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRy
aWJ1dGVkU3RyaW5nXTsKLSAgICAgICAgfQotICAgICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcg
Y29udGFpbnNBdHRhY2htZW50c10pIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBb
YXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1l
bnRDaGFyYWN0ZXJzXTsKLSAgICAgICAgfQotICAgICAgICBOU0RhdGEgKlJURkRhdGEgPSBbYXR0
cmlidXRlZFN0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJp
bmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgICAgIFtwYXN0ZWJvYXJk
IHNldERhdGE6UlRGRGF0YSBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV07Ci0gICAgfQotICAgIAot
ICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgaWYgKFt0eXBl
cyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7Ci0gICAgICAgIC8vIE1hcCAm
bmJzcDsgdG8gYSBwbGFpbiBvbGQgc3BhY2UgYmVjYXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291
cmNlIGNvZGUsIG90aGVyIGJyb3dzZXJzIGRvIGl0LAotICAgICAgICAvLyBhbmQgYmVjYXVzZSBI
VE1MIGZvcmNlcyB5b3UgdG8gZG8gdGhpcyBhbnkgdGltZSB5b3Ugd2FudCB0d28gc3BhY2VzIGlu
IGEgcm93LgotICAgICAgICBOU011dGFibGVTdHJpbmcgKnMgPSBbW3NlbGYgc2VsZWN0ZWRTdHJp
bmddIG11dGFibGVDb3B5XTsKLSAgICAgICAgY29uc3QgdW5pY2hhciBOb25CcmVha2luZ1NwYWNl
Q2hhcmFjdGVyID0gMHhBMDsKLSAgICAgICAgTlNTdHJpbmcgKk5vbkJyZWFraW5nU3BhY2VTdHJp
bmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6Jk5vbkJyZWFraW5nU3BhY2VDaGFy
YWN0ZXIgbGVuZ3RoOjFdOwotICAgICAgICBbcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpO
b25CcmVha2luZ1NwYWNlU3RyaW5nIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOjAgcmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW3MgbGVuZ3RoXSldOwotICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6
cyBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07Ci0gICAgICAgIFtzIHJlbGVhc2VdOwotICAg
IH0KLSAgICAKLSAgICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSAmJiBbdHlwZXMg
Y29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdKSB7Ci0gICAgICAgIFtwYXN0
ZWJvYXJkIHNldERhdGE6bmlsIGZvclR5cGU6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwotICAg
IH0KLX0KLQotLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewot
ICAgIEFTU0VSVCghZXZlbnQgfHwgW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biB8fCBb
ZXZlbnQgdHlwZV0gPT0gTlNSaWdodE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNPdGhl
ck1vdXNlRG93bik7Ci0KLSAgICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBbZXZlbnQgcmV0YWluXTsKLSAgICBbX3ByaXZhdGUt
Pm1vdXNlRG93bkV2ZW50IHJlbGVhc2VdOwotICAgIF9wcml2YXRlLT5tb3VzZURvd25FdmVudCA9
IGV2ZW50OwotfQotCi0tICh2b2lkKV9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVU
aW1lcgotewotICAgIGlmIChfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGlt
ZXIpIHsKLSAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2YXRlLT51cGRhdGVG
b2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcik7Ci0gICAgICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+
dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOwotICAgICAgICBfcHJpdmF0ZS0+dXBk
YXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIgPSBOVUxMOwotICAgIH0KLX0KLQotLSAodm9p
ZClfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXIKLXsKLSAgICBpZiAoX3ByaXZhdGUtPnVwZGF0
ZU1vdXNlb3ZlclRpbWVyKSB7Ci0gICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShfcHJp
dmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpOwotICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUt
PnVwZGF0ZU1vdXNlb3ZlclRpbWVyKTsKLSAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3Zl
clRpbWVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLS0gKFdlYkhUTUxWaWV3ICopX3RvcEhUTUxWaWV3
Ci17Ci0gICAgLy8gRklYTUU6IHRoaXMgY2FuIGZhaWwgaWYgdGhlIGRhdGFTb3VyY2UgaXMgbmls
LCB3aGljaCBoYXBwZW5zIHdoZW4gdGhlIFdlYlZpZXcgaXMgdGVhcmluZyBkb3duIGZyb20gdGhl
IHdpbmRvdyBjbG9zaW5nLgotICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICop
W1tbW19wcml2YXRlLT5kYXRhU291cmNlIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmlld10g
ZG9jdW1lbnRWaWV3XTsKLSAgICBBU1NFUlQodmlldyk7Ci0gICAgQVNTRVJUKFt2aWV3IGlzS2lu
ZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pOwotICAgIHJldHVybiB2aWV3OwotfQotCi0t
IChCT09MKV9pc1RvcEhUTUxWaWV3Ci17Ci0gICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGEg
Y2FjaGVkIGJvb2xlYW4gdGhhdCBkb2Vzbid0IHJlbHkgb24gX3RvcEhUTUxWaWV3IHNpbmNlIHRo
YXQgY2FuIGZhaWwgKHNlZSBfdG9wSFRNTFZpZXcpLgotICAgIHJldHVybiBzZWxmID09IFtzZWxm
IF90b3BIVE1MVmlld107Ci19Ci0KLS0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNp
dmUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBt
YXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0jaWZuZGVmIE5ERUJV
RwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwotI2VuZGlmCi0KLSAg
ICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJy
YXkgYWxsb2NdIGluaXRdOwotCi0gICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZp
ZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKLQotICAgIHVuc2lnbmVkIGNvdW50
ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2Jq
ZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhp
bXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0gICAgW2Rlc2NlbmRhbnRX
ZWJIVE1MVmlld3MgcmVsZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVu
dW1lcmF0aW5nU3Vidmlld3MgPSBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKV93ZWJfY2xlYXJQ
cmludGluZ01vZGVSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11
bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107
Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZ
RVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdz
ID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBfd2ViX2FkZERl
c2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwotCi0g
ICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2VuZGFu
dFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFn
ZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLQot
ICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOwotCi0jaWZuZGVmIE5ERUJVRwot
ICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87Ci0jZW5kaWYKLX0KLQotLSAo
dm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplCi17Ci0g
ICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBh
Z2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllFU107Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAg
X3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0
YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdF07Ci0KLSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0Fy
cmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBbZGVz
Y2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdElu
ZGV4OmldIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdl
V2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpZRVNdOwotCi0gICAgW2Rlc2NlbmRhbnRXZWJIVE1M
Vmlld3MgcmVsZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0
aW5nU3Vidmlld3MgPSBOTzsKLSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
ZWJIVE1MVmlldyAoV2ViUHJpdmF0ZSkKLQotKyAoTlNBcnJheSAqKXN1cHBvcnRlZE1JTUVUeXBl
cwotewotICAgIHJldHVybiBbV2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZE1JTUVUeXBl
c107Ci19Ci0KLSsgKE5TQXJyYXkgKilzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlcwotewotICAgIHJl
dHVybiBbV2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzXTsKLX0K
LQotKyAoTlNBcnJheSAqKXN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzCi17Ci0gICAgcmV0dXJu
IFtXZWJIVE1MUmVwcmVzZW50YXRpb24gc3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZXNdOwotfQot
Ci0rIChOU0FycmF5ICopdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzCi17Ci0gICAgcmV0dXJuIFtO
U0FycmF5IGFycmF5V2l0aE9iamVjdHM6Ci0gICAgICAgIEAidGV4dC9jYWxlbmRhciIsICAgICAg
IC8vIGlDYWwKLSAgICAgICAgQCJ0ZXh0L3gtY2FsZW5kYXIiLAotICAgICAgICBAInRleHQveC12
Y2FsZW5kYXIiLAotICAgICAgICBAInRleHQvdmNhbGVuZGFyIiwKLSAgICAgICAgQCJ0ZXh0L3Zj
YXJkIiwgICAgICAgICAgLy8gdkNhcmQKLSAgICAgICAgQCJ0ZXh0L3gtdmNhcmQiLAotICAgICAg
ICBAInRleHQvZGlyZWN0b3J5IiwKLSAgICAgICAgQCJ0ZXh0L2xkaWYiLCAgICAgICAgICAgLy8g
TmV0c2NhcGUgQWRkcmVzcyBCb29rCi0gICAgICAgIEAidGV4dC9xaWYiLCAgICAgICAgICAgIC8v
IFF1aWNrZW4KLSAgICAgICAgQCJ0ZXh0L3gtcWlmIiwKLSAgICAgICAgQCJ0ZXh0L3gtY3N2Iiwg
ICAgICAgICAgLy8gQ1NWIChmb3IgQWRkcmVzcyBCb29rIGFuZCBNaWNyb3NvZnQgT3V0bG9vaykK
LSAgICAgICAgQCJ0ZXh0L3gtdmNmIiwgICAgICAgICAgLy8gdkNhcmQgdHlwZSB1c2VkIGluIFN1
biBhZmZpbml0eSBhcHAKLSAgICAgICAgQCJ0ZXh0L3J0ZiIsICAgICAgICAgICAgLy8gUmljaCBU
ZXh0IEZvcm1hdAotICAgICAgICBuaWxdOwotfQotCi0rICh2b2lkKV9wb3N0RmxhZ3NDaGFuZ2Vk
RXZlbnQ6KE5TRXZlbnQgKilmbGFnc0NoYW5nZWRFdmVudAotewotICAgIC8vIFRoaXMgaXMgYSB3
b3JrYXJvdW5kIGZvcjogPHJkYXI6Ly9wcm9ibGVtLzI5ODE2MTk+IE5TUmVzcG9uZGVyX1ByaXZh
dGUgc2hvdWxkIGluY2x1ZGUgbm90aWZpY2F0aW9uIGZvciBGbGFnc0NoYW5nZWQKLSAgICBOU0V2
ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVk
Ci0gICAgICAgIGxvY2F0aW9uOltbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93XSBjb252ZXJ0U2Ny
ZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQotICAgICAgICBtb2RpZmllckZsYWdz
OltmbGFnc0NoYW5nZWRFdmVudCBtb2RpZmllckZsYWdzXQotICAgICAgICB0aW1lc3RhbXA6W2Zs
YWdzQ2hhbmdlZEV2ZW50IHRpbWVzdGFtcF0KLSAgICAgICAgd2luZG93TnVtYmVyOltmbGFnc0No
YW5nZWRFdmVudCB3aW5kb3dOdW1iZXJdCi0gICAgICAgIGNvbnRleHQ6W2ZsYWdzQ2hhbmdlZEV2
ZW50IGNvbnRleHRdCi0gICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJl
OjBdOwotCi0gICAgLy8gUHJldGVuZCBpdCdzIGEgbW91c2UgbW92ZS4KLSAgICBbW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdCi0gICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1l
OldLTW91c2VNb3ZlZE5vdGlmaWNhdGlvbigpIG9iamVjdDpzZWxmCi0gICAgICAgIHVzZXJJbmZv
OltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6ZmFrZUV2ZW50IGZvcktleTpAIk5T
RXZlbnQiXV07Ci19Ci0KLS0gKGlkKV9icmlkZ2UKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBleGlz
dHMgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIExlb3BhcmQncyBEaWN0aW9uYXJ5LmFw
cCwgc2luY2UgaXQKLSAgICAvLyBjYWxscyBfYnJpZGdlIHRvIGdldCBhY2Nlc3MgdG8gY29udmVy
dE5TUmFuZ2VUb0RPTVJhbmdlOiBhbmQgY29udmVydERPTVJhbmdlVG9OU1JhbmdlOi4KLSAgICAv
LyBSZXR1cm4gdGhlIFdlYkZyYW1lLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBjb21wYXRpYmlsaXR5
IG1ldGhvZHMuIDxyZGFyOi8vcHJvYmxlbS82MDAyMTYwPgotICAgIHJldHVybiBbc2VsZiBfZnJh
bWVdOwotfQotCi0tICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50Ci17Ci0gICAg
W3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKLSAgICAKLSAgICBOU0V2ZW50ICpm
YWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkCi0gICAg
ICAgIGxvY2F0aW9uOltbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQg
bW91c2VMb2NhdGlvbl1dCi0gICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZl
bnRdIG1vZGlmaWVyRmxhZ3NdCi0gICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZh
bFNpbmNlUmVmZXJlbmNlRGF0ZV0KLSAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3dd
IHdpbmRvd051bWJlcl0KLSAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29u
dGV4dF0KLSAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07Ci0g
ICAgCi0gICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpmYWtlRXZlbnRdOwotfQot
Ci1zdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjayhDRlJ1bkxvb3BUaW1l
clJlZiB0aW1lciwgdm9pZCAqaW5mbykKLXsKLSAgICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJI
VE1MVmlldyAqKWluZm87Ci0gICAgCi0gICAgW3ZpZXcgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtl
RXZlbnRdOwotfQotCi0tICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAotewotICAgIE5TUG9p
bnQgb3JpZ2luID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmlnaW47Ci0gICAgaWYgKCFO
U0VxdWFsUG9pbnRzKF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24sIG9yaWdpbikpIHsKLSAg
ICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAg
ICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Ci0gICAg
ICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVM
ZWZ0Ok5PXTsKLSAgICAgICAgCi0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2Vi
Vmlld107Ci0gICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3
ZWJWaWV3IGRpZFNjcm9sbERvY3VtZW50SW5GcmFtZVZpZXc6W3NlbGYgX2ZyYW1lVmlld11dOwot
ICAgIH0KLSAgICBfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gb3JpZ2luOwotCi0gICAg
aWYgKFtzZWxmIHdpbmRvd10gJiYgIV9wcml2YXRlLT5jbG9zZWQgJiYgIV9wcml2YXRlLT51cGRh
dGVNb3VzZW92ZXJUaW1lcikgewotICAgICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4
dCA9IHsgMCwgc2VsZiwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICAgICAgICAKLSAgICAgICAgLy8g
VXNlIGEgMTAwbXMgZGVsYXkgc28gdGhhdCB0aGUgc3ludGhldGljIG1vdXNlIG92ZXIgdXBkYXRl
IGRvZXNuJ3QgY2F1c2UgY3Vyc29yIHRocmFzaGluZyB3aGVuIHBhZ2VzIGFyZSBsb2FkaW5nCi0g
ICAgICAgIC8vIGFuZCBzY3JvbGxpbmcgcmFwaWRseSBiYWNrIHRvIGJhY2suCi0gICAgICAgIF9w
cml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKE5VTEws
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgMC4xLCAwLCAwLCAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRl
TW91c2VvdmVyVGltZXJDYWxsYmFjaywgJmNvbnRleHQpOwotICAgICAgICBDRlJ1bkxvb3BBZGRU
aW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1l
ciwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX3NldEFzaWRl
U3Vidmlld3MKLXsKLSAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKLSAg
ICBBU1NFUlQoX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPT0gbmlsKTsKLSAgICBfcHJpdmF0ZS0+
c2F2ZWRTdWJ2aWV3cyA9IF9zdWJ2aWV3czsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCi0gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRoZSBsYXllci1ob3N0aW5nIHZpZXcgaW4gdGhl
IHN1YnZpZXdzLCBvdGhlcndpc2UgdGhlIGxheWVycyBmbGFzaC4KLSAgICBpZiAoX3ByaXZhdGUt
PmxheWVySG9zdGluZ1ZpZXcpIHsKLSAgICAgICAgTlNBcnJheSogbmV3U3Vidmlld3MgPSBbW05T
QXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czpfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldywg
bmlsXTsKLSAgICAgICAgX3N1YnZpZXdzID0gbmV3U3Vidmlld3M7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIF9zdWJ2aWV3cyA9IG5pbDsKLSNlbHNlCi0gICAgX3N1YnZpZXdzID0gbmlsOwotI2VuZGlm
ICAgIAotICAgIF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlID0gWUVTOwotIH0KLSAKLSAtICh2
b2lkKV9yZXN0b3JlU3Vidmlld3MKLSB7Ci0gICAgQVNTRVJUKF9wcml2YXRlLT5zdWJ2aWV3c1Nl
dEFzaWRlKTsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKF9wcml2
YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7Ci0gICAgICAgIFtfc3Vidmlld3MgcmVsZWFzZV07Ci0g
ICAgICAgIF9zdWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIEFTU0VSVChfc3Vidmlld3MgPT0gbmlsKTsKLSAgICAgICAgX3N1YnZpZXdzID0g
X3ByaXZhdGUtPnNhdmVkU3Vidmlld3M7Ci0gICAgfQotI2Vsc2UKLSAgICBBU1NFUlQoX3N1YnZp
ZXdzID09IG5pbCk7Ci0gICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNhdmVkU3Vidmlld3M7Ci0j
ZW5kaWYgICAgCi0gICAgX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPSBuaWw7Ci0gICAgX3ByaXZh
dGUtPnN1YnZpZXdzU2V0QXNpZGUgPSBOTzsKLX0KLQotI2lmbmRlZiBOREVCVUcKLQotLSAodm9p
ZClkaWRBZGRTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Ci17Ci0gICAgaWYgKF9wcml2YXRlLT5l
bnVtZXJhdGluZ1N1YnZpZXdzKQotICAgICAgICBMT0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAl
cyB3YXMgYWRkZWQgZHVyaW5nIHN1YnZpZXcgZW51bWVyYXRpb24gZm9yIGxheW91dCBvciBwcmlu
dGluZyBtb2RlIGNoYW5nZS4gVGhpcyB2aWV3IG1pZ2h0IHBhaW50IHdpdGhvdXQgZmlyc3QgcmVj
ZWl2aW5nIGxheW91dC4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNsYXNzXSkpOwot
fQotCi0tICh2b2lkKXdpbGxSZW1vdmVTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Ci17Ci0gICAg
Ly8gSGF2ZSB0byBudWxsLWNoZWNrIF9wcml2YXRlLCBzaW5jZSB0aGlzIGNhbiBiZSBjYWxsZWQg
dmlhIC1kZWFsbG9jIHdoZW4KLSAgICAvLyBjbGVhbmluZyB1cCB0aGUgdGhlIGxheWVySG9zdGlu
Z1ZpZXcuCi0gICAgaWYgKF9wcml2YXRlICYmIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdz
KQotICAgICAgICBMT0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAlcyB3YXMgcmVtb3ZlZCBkdXJp
bmcgc3VidmlldyBlbnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1vZGUgY2hhbmdl
LiBXZSB3aWxsIHN0aWxsIGRvIGxheW91dCBvciB0aGUgcHJpbnRpbmcgbW9kZSBjaGFuZ2UgZXZl
biB0aG91Z2ggdGhpcyB2aWV3IGlzIG5vIGxvbmdlciBpbiB0aGUgdmlldyBoaWVyYXJjaHkuIiwg
b2JqZWN0X2dldENsYXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKLX0KLQotI2VuZGlmCi0KLSNp
ZmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0vLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGFyZSBh
Ym91dCB0byBkcmF3LCBidXQgYmVmb3JlIG91ciBkaXJ0eSByZWN0IGlzIHByb3BhZ2F0ZWQgdG8g
b3VyIGFuY2VzdG9ycy4KLS8vIFRoYXQncyB0aGUgcGVyZmVjdCB0aW1lIHRvIGRvIGEgbGF5b3V0
LCBleGNlcHQgdGhhdCBpZGVhbGx5IHdlJ2Qgd2FudCB0byBiZSBzdXJlIHRoYXQgd2UncmUgZGly
dHkKLS8vIGJlZm9yZSBkb2luZyBpdC4gQXMgYSBjb21wcm9taXNlLCB3aGVuIHdlJ3JlIG9wYXF1
ZSB3ZSBkbyB0aGUgbGF5b3V0IG9ubHkgd2hlbiBhY3R1YWxseSBhc2tlZCB0bwotLy8gZHJhdywg
YnV0IHdoZW4gd2UncmUgdHJhbnNwYXJlbnQgd2UgZG8gdGhlIGxheW91dCBhdCB0aGlzIHN0YWdl
IHNvIHZpZXdzIGJlaGluZCB1cyBrbm93IHRoYXQgdGhleQotLy8gbmVlZCB0byBiZSByZWRyYXdu
IChpbiBjYXNlIHRoZSBsYXlvdXQgY2F1c2VzIHNvbWUgdGhpbmdzIHRvIGdldCBkaXJ0aWVkKS4K
LS0gKHZvaWQpX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9ycwotewotICAgIGlm
ICghW1tzZWxmIF93ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdKQotICAgICAgICBbc2VsZiBfd2Vi
X2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKLSAgICBbc3VwZXIgX3Byb3BhZ2F0ZURpcnR5UmVj
dHNUb09wYXF1ZUFuY2VzdG9yc107Ci19Ci0KLSNlbHNlCi0KLS0gKHZvaWQpdmlld1dpbGxEcmF3
Ci17Ci0gICAgLy8gT24gd2luZG93IGNsb3NlIHdlIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGRh
dGFzb3VyY2UgaXMgbmlsLCB0aGVuIGhpdCBhbiBhc3NlcnQgaW4gX3RvcEhUTUxWaWV3Ci0gICAg
Ly8gU28gY2hlY2sgaWYgdGhlIGRhdGFTb3VyY2UgaXMgbmlsIGJlZm9yZSBjYWxsaW5nIFtzZWxm
IF9pc1RvcEhUTUxWaWV3XSwgdGhpcyBjYW4gYmUgcmVtb3ZlZAotICAgIC8vIG9uY2UgdGhlIEZJ
WE1FIGluIF9pc1RvcEhUTUxWaWV3IGlzIGZpeGVkLgotICAgIGlmIChfcHJpdmF0ZS0+ZGF0YVNv
dXJjZSAmJiBbc2VsZiBfaXNUb3BIVE1MVmlld10pCi0gICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0
SWZOZWVkZWRSZWN1cnNpdmVdOwotICAgIFtzdXBlciB2aWV3V2lsbERyYXddOwotfQotCi0jZW5k
aWYKLQotLy8gRG9uJ3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2Fy
ZSBvZiB0aGF0LgotLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5n
T3BhY2l0eTooTlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJl
Y3RJc1Zpc2libGVSZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9P
TCl0b3BWaWV3Ci17Ci0gICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50IGFzIHBhcnQgb2Yg
YSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4KLSAgICAvLyBJZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxm
IGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZlciBoYXZlIHRvIGRvIHRo
aXMuCi0gICAgQk9PTCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGluZzsKLSAg
ICBCT09MIGlzUHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJh
d2luZ1RvU2NyZWVuXTsKLSAgICBpZiAoaXNQcmludGluZykgewotICAgICAgICBpZiAoIXdhc0lu
UHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1
cnNpdmVdOwotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKLSNlbmRpZgotICAgIH0g
ZWxzZSBpZiAod2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmlu
dGluZ01vZGVSZWN1cnNpdmVdOwotCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLQotICAgIC8v
IEJlY2F1c2UgVGlnZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBs
YXlvdXQgaGVyZS4KLSAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKLSAg
ICBbX3N1YnZpZXdzIG1ha2VPYmplY3RzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcHJvcGFn
YXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3JzKV07Ci0KLSNlbmRpZgotCi0gICAgW3NlbGYg
X3NldEFzaWRlU3Vidmlld3NdOwotICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5l
ZWRlZElnbm9yaW5nT3BhY2l0eTpyZWN0IGlzVmlzaWJsZVJlY3Q6aXNWaXNpYmxlUmVjdCByZWN0
SXNWaXNpYmxlUmVjdEZvclZpZXc6dmlzaWJsZVZpZXcgdG9wVmlldzp0b3BWaWV3XTsKLSAgICBb
c2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsKLQotICAgIGlmICh3YXNJblByaW50aW5nTW9kZSAhPSBp
c1ByaW50aW5nKSB7Ci0gICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSkKLSAgICAgICAgICAg
IFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0gICAgfQot
fQotCi0vLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJl
IG9mIHRoYXQuCi0tICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3Vz
OihCT09MKW5lZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6KE5TUmVjdCl2aXNSZWN0Ci17Ci0gICAgQk9P
TCBuZWVkVG9TZXRBc2lkZVN1YnZpZXdzID0gIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlOwot
Ci0gICAgQk9PTCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGluZzsKLSAgICBC
T09MIGlzUHJpbnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2lu
Z1RvU2NyZWVuXTsKLQotICAgIGlmIChuZWVkVG9TZXRBc2lkZVN1YnZpZXdzKSB7Ci0gICAgICAg
IC8vIFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50IHBy
b2Nlc3MuCi0gICAgICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdy
ZSBwcmludGluZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KLSAgICAgICAg
aWYgKGlzUHJpbnRpbmcpIHsKLSAgICAgICAgICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpCi0g
ICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOwotI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotI2VuZGlmCi0gICAgICAgIH0g
ZWxzZSBpZiAod2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFy
UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLSAg
ICAgICAgLy8gQmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZpZXdXaWxsRHJhdyB3ZSBuZWVk
IHRvIGRvIGxheW91dCBoZXJlLgotICAgICAgICBOU1JlY3QgYm91bmRzQmVmb3JlTGF5b3V0ID0g
W3NlbGYgYm91bmRzXTsKLSAgICAgICAgaWYgKCFOU0lzRW1wdHlSZWN0KHZpc1JlY3QpKQotICAg
ICAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0KLSAgICAgICAg
Ly8gSWYgbGF5b3V0IGNoYW5nZXMgdGhlIHZpZXcncyBib3VuZHMsIHRoZW4gd2UgbmVlZCB0byBy
ZWNvbXB1dGUgdGhlIHZpc1JlY3QuCi0gICAgICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSB2aXNS
ZWN0IHBhc3NlZCB0byB1cyB3YXMgYmFzZWQgb24gdGhlIGJvdW5kcyBhdCB0aGUgdGltZQotICAg
ICAgICAvLyB3ZSB3ZXJlIGNhbGxlZC4gVGhpcyBtZXRob2QgaXMgb25seSBkaXNwbGF5ZWQgdG8g
ZHJhdyAiYWxsIiwgc28gaXQncyBzYWZlCi0gICAgICAgIC8vIHRvIGp1c3QgY2FsbCB2aXNpYmxl
UmVjdCB0byBjb21wdXRlIHRoZSBlbnRpcmUgcmVjdGFuZ2xlLgotICAgICAgICBpZiAoIU5TRXF1
YWxSZWN0cyhib3VuZHNCZWZvcmVMYXlvdXQsIFtzZWxmIGJvdW5kc10pKQotICAgICAgICAgICAg
dmlzUmVjdCA9IFtzZWxmIHZpc2libGVSZWN0XTsKLQotI2VuZGlmCi0KLSAgICAgICAgW3NlbGYg
X3NldEFzaWRlU3Vidmlld3NdOwotICAgIH0KLQotICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxh
eUFsbERpcnR5V2l0aExvY2tGb2N1czpuZWVkc0xvY2tGb2N1cyB2aXNSZWN0OnZpc1JlY3RdOwot
Ci0gICAgaWYgKG5lZWRUb1NldEFzaWRlU3Vidmlld3MpIHsKLSAgICAgICAgaWYgKHdhc0luUHJp
bnRpbmdNb2RlICE9IGlzUHJpbnRpbmcpIHsKLSAgICAgICAgICAgIGlmICh3YXNJblByaW50aW5n
TW9kZSkKLSAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2
ZV07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclBy
aW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0gICAgICAgIH0KLQotICAgICAgICBbc2VsZiBfcmVzdG9y
ZVN1YnZpZXdzXTsKLSAgICB9Ci19Ci0KLS8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1
YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KLS0gKHZvaWQpX3JlY3Vyc2l2ZTooQk9PTCly
ZWN1cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxheVJlY3QgaW5D
b250ZXh0OihOU0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQgdG9wVmlldzooQk9PTCl0b3BWaWV3
Ci17Ci0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIgCi0gICAgLy8gQmVjYXVzZSBUaWdlciBkb2Vz
IG5vdCBoYXZlIHZpZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxheW91dCBoZXJlLgotICAgIFtz
ZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotI2VuZGlmCi0KLSAgICBbc2VsZiBf
c2V0QXNpZGVTdWJ2aWV3c107Ci0gICAgW3N1cGVyIF9yZWN1cnNpdmU6cmVjdXJzZSBkaXNwbGF5
UmVjdElnbm9yaW5nT3BhY2l0eTpkaXNwbGF5UmVjdCBpbkNvbnRleHQ6Y29udGV4dCB0b3BWaWV3
OnRvcFZpZXddOwotICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOwotfQotCi0tIChCT09MKV9p
bnNpZGVBbm90aGVySFRNTFZpZXcKLXsKLSAgICByZXR1cm4gc2VsZiAhPSBbc2VsZiBfdG9wSFRN
TFZpZXddOwotfQotCi0tIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50Ci17Ci0gICAg
Ly8gV2ViSFRNTFZpZXcgb2JqZWN0cyBoYW5kbGUgYWxsIGV2ZW50cyBmb3Igb2JqZWN0cyBpbnNp
ZGUgdGhlbS4KLSAgICAvLyBUbyBnZXQgdGhvc2UgZXZlbnRzLCB3ZSBwcmV2ZW50IGhpdCB0ZXN0
aW5nIGZyb20gQXBwS2l0LgotCi0gICAgLy8gQnV0IHRoZXJlIGFyZSB0aHJlZSBleGNlcHRpb25z
IHRvIHRoaXM6Ci0gICAgLy8gICAxKSBGb3IgcmlnaHQgbW91c2UgY2xpY2tzIGFuZCBjb250cm9s
IGNsaWNrcyB3ZSBkb24ndCB5ZXQgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbgotICAgIC8vICAgICAg
dGhhdCB3b3JrcyBmb3IgbmVzdGVkIHZpZXdzLCBzbyB3ZSBsZXQgdGhlIGhpdCB0ZXN0aW5nIGdv
IHRocm91Z2ggdGhlCi0gICAgLy8gICAgICBzdGFuZGFyZCBOU1ZpZXcgY29kZSBwYXRoIChuZWVk
cyB0byBiZSBmaXhlZCwgc2VlIGJ1ZyA0MzYxNjE4KS4KLSAgICAvLyAgIDIpIEphdmEgZGVwZW5k
cyBvbiBkb2luZyBhIGhpdCB0ZXN0IGluc2lkZSBpdCdzIG1vdXNlIG1vdmVkIGhhbmRsaW5nLAot
ICAgIC8vICAgICAgc28gd2UgbGV0IHRoZSBoaXQgdGVzdGluZyBnbyB0aHJvdWdoIHRoZSBzdGFu
ZGFyZCBOU1ZpZXcgY29kZSBwYXRoCi0gICAgLy8gICAgICB3aGVuIHRoZSBjdXJyZW50IGV2ZW50
IGlzIGEgbW91c2UgbW92ZSAoZXhjZXB0IHdoZW4gd2UgYXJlIGNhbGxpbmcKLSAgICAvLyAgICAg
IGZyb20gX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudCwgc28gd2UgaGF2ZSB0byB1c2UgYSBnbG9i
YWwsCi0gICAgLy8gICAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCwgZm9yIHRoYXQpCi0gICAg
Ly8gICAzKSBUaGUgYWNjZXB0c0ZpcnN0TW91c2U6IGFuZCBzaG91bGREZWxheVdpbmRvd09yZGVy
aW5nRm9yRXZlbnQ6IG1ldGhvZHMKLSAgICAvLyAgICAgIGJvdGggbmVlZCB0byBmaWd1cmUgb3V0
IHdoaWNoIHZpZXcgdG8gY2hlY2sgd2l0aCBpbnNpZGUgdGhlIFdlYkhUTUxWaWV3LgotICAgIC8v
ICAgICAgVGhleSB1c2UgYSBnbG9iYWwgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBoaXRUZXN0
OiBzbyB0aGV5IGNhbiBnZXQgdGhlCi0gICAgLy8gICAgICByaWdodCB2aWV3LiBUaGUgZ2xvYmFs
IGlzIGZvcmNlTlNWaWV3SGl0VGVzdCBhbmQgdGhlIG1ldGhvZCB0aGV5IHVzZSB0bwotICAgIC8v
ICAgICAgZG8gdGhlIGhpdCB0ZXN0aW5nIGlzIF9oaXRWaWV3Rm9yRXZlbnQ6LiAoQnV0IHRoaXMg
ZG9lcyBub3Qgd29yayBjb3JyZWN0bHkKLSAgICAvLyAgICAgIHdoZW4gdGhlcmUgaXMgSFRNTCBv
dmVybGFwcGluZyB0aGUgdmlldywgc2VlIGJ1ZyA0MzYxNjI2KQotICAgIC8vICAgNCkgTlNBY2Nl
c3NpYmlsaXR5SGl0VGVzdCByZWxpZXMgb24gdGhpcyBmb3IgY2hlY2tpbmcgdGhlIGN1cnNvciBw
b3NpdGlvbi4KLSAgICAvLyAgICAgIE91ciBjaGVjayBmb3IgdGhhdCBpcyB3aGV0aGVyIHRoZSBl
dmVudCBpcyBOU0ZsYWdzQ2hhbmdlZC4gIFRoaXMgd29ya3MKLSAgICAvLyAgICAgIGZvciBWb2lj
ZU92ZXIncyBjbnRsLW9wdC1mNSBjb21tYW5kIChtb3ZlIGZvY3VzIHRvIGl0ZW0gdW5kZXIgY3Vy
c29yKQotICAgIC8vICAgICAgYW5kIERpY3Rpb25hcnkncyBjbWQtY250bC1EIChvcGVuIGRpY3Rp
b25hcnkgcG9wdXAgZm9yIGl0ZW0gdW5kZXIgY3Vyc29yKS4KLSAgICAvLyAgICAgIFRoaXMgaXMg
b2YgY291cnNlIGEgaGFjay4KLQotICAgIEJPT0wgY2FwdHVyZUhpdHNPblN1YnZpZXdzOwotICAg
IGlmIChmb3JjZU5TVmlld0hpdFRlc3QpCi0gICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9
IE5POwotICAgIGVsc2UgaWYgKGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0KQotICAgICAgICBjYXB0
dXJlSGl0c09uU3Vidmlld3MgPSBZRVM7Ci0gICAgZWxzZSB7Ci0gICAgICAgIE5TRXZlbnQgKmV2
ZW50ID0gW1tzZWxmIHdpbmRvd10gY3VycmVudEV2ZW50XTsKLSAgICAgICAgY2FwdHVyZUhpdHNP
blN1YnZpZXdzID0gIShbZXZlbnQgdHlwZV0gPT0gTlNNb3VzZU1vdmVkCi0gICAgICAgICAgICB8
fCBbZXZlbnQgdHlwZV0gPT0gTlNSaWdodE1vdXNlRG93bgotICAgICAgICAgICAgfHwgKFtldmVu
dCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gJiYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5T
Q29udHJvbEtleU1hc2spICE9IDApCi0gICAgICAgICAgICB8fCBbZXZlbnQgdHlwZV0gPT0gTlNG
bGFnc0NoYW5nZWQpOwotICAgIH0KLQotICAgIGlmICghY2FwdHVyZUhpdHNPblN1YnZpZXdzKQot
ICAgICAgICByZXR1cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOwotICAgIGlmIChbW3NlbGYgc3Vw
ZXJ2aWV3XSBtb3VzZTpwb2ludCBpblJlY3Q6W3NlbGYgZnJhbWVdXSkKLSAgICAgICAgcmV0dXJu
IHNlbGY7Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClfY2xlYXJMYXN0SGl0Vmlld0lm
U2VsZgotewotICAgIGlmIChsYXN0SGl0VmlldyA9PSBzZWxmKQotICAgICAgICBsYXN0SGl0Vmll
dyA9IG5pbDsKLX0KLQotLSAoTlNUcmFja2luZ1JlY3RUYWcpYWRkVHJhY2tpbmdSZWN0OihOU1Jl
Y3QpcmVjdCBvd25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilkYXRhIGFzc3VtZUluc2lk
ZTooQk9PTClhc3N1bWVJbnNpZGUKLXsKLSAgICBBU1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVj
dE93bmVyID09IG5pbCk7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7
Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gZGF0YTsKLSAgICByZXR1cm4g
VFJBQ0tJTkdfUkVDVF9UQUc7Ci19Ci0KLS0gKE5TVHJhY2tpbmdSZWN0VGFnKV9hZGRUcmFja2lu
Z1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEg
YXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZSB1c2VUcmFja2luZ051bTooaW50KXRhZwot
ewotICAgIEFTU0VSVCh0YWcgPT0gMCB8fCB0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpOwotICAg
IEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKLSAgICBfcHJpdmF0
ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsKLSAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0
VXNlckRhdGEgPSBkYXRhOwotICAgIHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsKLX0KLQotLSAo
dm9pZClfYWRkVHJhY2tpbmdSZWN0czooTlNSZWN0ICopcmVjdHMgb3duZXI6KGlkKW93bmVyIHVz
ZXJEYXRhTGlzdDoodm9pZCAqKil1c2VyRGF0YUxpc3QgYXNzdW1lSW5zaWRlTGlzdDooQk9PTCAq
KWFzc3VtZUluc2lkZUxpc3QgdHJhY2tpbmdOdW1zOihOU1RyYWNraW5nUmVjdFRhZyAqKXRyYWNr
aW5nTnVtcyBjb3VudDooaW50KWNvdW50Ci17Ci0gICAgQVNTRVJUKGNvdW50ID09IDEpOwotICAg
IEFTU0VSVCh0cmFja2luZ051bXNbMF0gPT0gMCB8fCB0cmFja2luZ051bXNbMF0gPT0gVFJBQ0tJ
TkdfUkVDVF9UQUcpOwotICAgIEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0g
bmlsKTsKLSAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsKLSAgICBfcHJp
dmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGEgPSB1c2VyRGF0YUxpc3RbMF07Ci0gICAgdHJhY2tp
bmdOdW1zWzBdID0gVFJBQ0tJTkdfUkVDVF9UQUc7Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlVHJhY2tp
bmdSZWN0OihOU1RyYWNraW5nUmVjdFRhZyl0YWcKLXsKLSAgICBpZiAodGFnID09IDApCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoX3ByaXZhdGUgJiYgKHRhZyA9PSBUUkFDS0lOR19S
RUNUX1RBRykpIHsKLSAgICAgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gbmlsOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChfcHJpdmF0ZSAmJiAodGFnID09
IF9wcml2YXRlLT5sYXN0VG9vbFRpcFRhZykpIHsKLSAgICAgICAgW3N1cGVyIHJlbW92ZVRyYWNr
aW5nUmVjdDp0YWddOwotICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSAwOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIElmIGFueSBvdGhlciB0cmFja2luZyBy
ZWN0IGlzIGJlaW5nIHJlbW92ZWQsIHdlIGRvbid0IGtub3cgaG93IGl0IHdhcyBjcmVhdGVkCi0g
ICAgLy8gYW5kIGl0J3MgcG9zc2libGUgdGhlcmUncyBhIGxlYWsgaW52b2x2ZWQgKHNlZSAzNTAw
MjE3KQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi0tICh2b2lkKV9yZW1vdmVUcmFj
a2luZ1JlY3RzOihOU1RyYWNraW5nUmVjdFRhZyAqKXRhZ3MgY291bnQ6KGludCljb3VudAotewot
ICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlu
dCB0YWcgPSB0YWdzW2ldOwotICAgICAgICBpZiAodGFnID09IDApCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgQVNTRVJUKHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRyk7Ci0gICAgICAg
IGlmIChfcHJpdmF0ZSAhPSBuaWwpIHsKLSAgICAgICAgICAgIF9wcml2YXRlLT50cmFja2luZ1Jl
Y3RPd25lciA9IG5pbDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLSAodm9pZClfc2VuZFRvb2xU
aXBNb3VzZUV4aXRlZAotewotICAgIC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0
cmFja2luZ051bWJlciwgYW5kIHVzZXJEYXRhLgotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtO
U0V2ZW50IGVudGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUV4aXRlZAotICAgICAgICBsb2Nh
dGlvbjpOU01ha2VQb2ludCgwLCAwKQotICAgICAgICBtb2RpZmllckZsYWdzOjAKLSAgICAgICAg
dGltZXN0YW1wOjAKLSAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051
bWJlcl0KLSAgICAgICAgY29udGV4dDpOVUxMCi0gICAgICAgIGV2ZW50TnVtYmVyOjAKLSAgICAg
ICAgdHJhY2tpbmdOdW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKLSAgICAgICAgdXNlckRhdGE6X3By
aXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhXTsKLSAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVj
dE93bmVyIG1vdXNlRXhpdGVkOmZha2VFdmVudF07Ci19Ci0KLS0gKHZvaWQpX3NlbmRUb29sVGlw
TW91c2VFbnRlcmVkCi17Ci0gICAgLy8gTm90aGluZyBtYXR0ZXJzIGV4Y2VwdCB3aW5kb3csIHRy
YWNraW5nTnVtYmVyLCBhbmQgdXNlckRhdGEuCi0gICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05T
RXZlbnQgZW50ZXJFeGl0RXZlbnRXaXRoVHlwZTpOU01vdXNlRW50ZXJlZAotICAgICAgICBsb2Nh
dGlvbjpOU01ha2VQb2ludCgwLCAwKQotICAgICAgICBtb2RpZmllckZsYWdzOjAKLSAgICAgICAg
dGltZXN0YW1wOjAKLSAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051
bWJlcl0KLSAgICAgICAgY29udGV4dDpOVUxMCi0gICAgICAgIGV2ZW50TnVtYmVyOjAKLSAgICAg
ICAgdHJhY2tpbmdOdW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKLSAgICAgICAgdXNlckRhdGE6X3By
aXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhXTsKLSAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVj
dE93bmVyIG1vdXNlRW50ZXJlZDpmYWtlRXZlbnRdOwotfQotCi0tICh2b2lkKV9zZXRUb29sVGlw
OihOU1N0cmluZyAqKXN0cmluZwotewotICAgIE5TU3RyaW5nICp0b29sVGlwID0gW3N0cmluZyBs
ZW5ndGhdID09IDAgPyBuaWwgOiBzdHJpbmc7Ci0gICAgTlNTdHJpbmcgKm9sZFRvb2xUaXAgPSBf
cHJpdmF0ZS0+dG9vbFRpcDsKLSAgICBpZiAoKHRvb2xUaXAgPT0gbmlsIHx8IG9sZFRvb2xUaXAg
PT0gbmlsKSA/IHRvb2xUaXAgPT0gb2xkVG9vbFRpcCA6IFt0b29sVGlwIGlzRXF1YWxUb1N0cmlu
ZzpvbGRUb29sVGlwXSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChvbGRUb29s
VGlwKSB7Ci0gICAgICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXTsKLSAgICAgICAg
W29sZFRvb2xUaXAgcmVsZWFzZV07Ci0gICAgfQotICAgIF9wcml2YXRlLT50b29sVGlwID0gW3Rv
b2xUaXAgY29weV07Ci0gICAgaWYgKHRvb2xUaXApIHsKLSAgICAgICAgLy8gU2VlIHJhZGFyIDM1
MDAyMTcgZm9yIHdoeSB3ZSByZW1vdmUgYWxsIHRvb2x0aXBzIHJhdGhlciB0aGFuIGp1c3QgdGhl
IHNpbmdsZSBvbmUgd2UgY3JlYXRlZC4KLSAgICAgICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRpcHNd
OwotICAgICAgICBOU1JlY3Qgd2lkZU9wZW5SZWN0ID0gTlNNYWtlUmVjdCgtMTAwMDAwLCAtMTAw
MDAwLCAyMDAwMDAsIDIwMDAwMCk7Ci0gICAgICAgIF9wcml2YXRlLT5sYXN0VG9vbFRpcFRhZyA9
IFtzZWxmIGFkZFRvb2xUaXBSZWN0OndpZGVPcGVuUmVjdCBvd25lcjpzZWxmIHVzZXJEYXRhOk5V
TExdOwotICAgICAgICBbc2VsZiBfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWRdOwotICAgIH0KLX0K
LQotLSAoTlNTdHJpbmcgKil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRvb2xUaXA6KE5T
VG9vbFRpcFRhZyl0YWcgcG9pbnQ6KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZvaWQgKilkYXRh
Ci17Ci0gICAgcmV0dXJuIFtbX3ByaXZhdGUtPnRvb2xUaXAgY29weV0gYXV0b3JlbGVhc2VdOwot
fQotCi0tICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAot
ewotICAgIGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU1Zp
ZXcgKmNvbnRlbnRWaWV3ID0gW1tldmVudCB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKLSAgICBOU1Bv
aW50IGxvY2F0aW9uRm9ySGl0VGVzdCA9IFtbY29udGVudFZpZXcgc3VwZXJ2aWV3XSBjb252ZXJ0
UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07Ci0gICAgCi0gICAg
Zm9yY2VXZWJIVE1MVmlld0hpdFRlc3QgPSBZRVM7Ci0gICAgTlNWaWV3ICpoaXRWaWV3ID0gW2Nv
bnRlbnRWaWV3IGhpdFRlc3Q6bG9jYXRpb25Gb3JIaXRUZXN0XTsKLSAgICBmb3JjZVdlYkhUTUxW
aWV3SGl0VGVzdCA9IE5POwotICAgIAotICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gbmlsOwotICAg
IGlmIChbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dICYmICFbWyhX
ZWJIVE1MVmlldyAqKWhpdFZpZXcgX3dlYlZpZXddIGlzSG92ZXJGZWVkYmFja1N1c3BlbmRlZF0p
Ci0gICAgICAgIHZpZXcgPSAoV2ViSFRNTFZpZXcgKiloaXRWaWV3OyAgICAKLQotICAgIGlmICh2
aWV3KQotICAgICAgICBbdmlldyByZXRhaW5dOwotCi0gICAgaWYgKGxhc3RIaXRWaWV3ICE9IHZp
ZXcgJiYgbGFzdEhpdFZpZXcgJiYgW2xhc3RIaXRWaWV3IF9mcmFtZV0pIHsKLSAgICAgICAgLy8g
SWYgd2UgYXJlIG1vdmluZyBvdXQgb2YgYSB2aWV3IChvciBmcmFtZSksIGxldCdzIHByZXRlbmQg
dGhlIG1vdXNlIG1vdmVkCi0gICAgICAgIC8vIGFsbCB0aGUgd2F5IG91dCBvZiB0aGF0IHZpZXcu
IEJ1dCB3ZSBoYXZlIHRvIGFjY291bnQgZm9yIHNjcm9sbGluZywgYmVjYXVzZQotICAgICAgICAv
LyBraHRtbCBkb2Vzbid0IHVuZGVyc3RhbmQgb3VyIGNsaXBwaW5nLgotICAgICAgICBOU1JlY3Qg
dmlzaWJsZVJlY3QgPSBbW1tbbGFzdEhpdFZpZXcgX2ZyYW1lXSBmcmFtZVZpZXddIF9zY3JvbGxW
aWV3XSBkb2N1bWVudFZpc2libGVSZWN0XTsKLSAgICAgICAgZmxvYXQgeVNjcm9sbCA9IHZpc2li
bGVSZWN0Lm9yaWdpbi55OwotICAgICAgICBmbG9hdCB4U2Nyb2xsID0gdmlzaWJsZVJlY3Qub3Jp
Z2luLng7Ci0KLSAgICAgICAgZXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNN
b3VzZU1vdmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQo
LTEgLSB4U2Nyb2xsLCAtMSAtIHlTY3JvbGwgKQotICAgICAgICAgICAgICAgICAgICAgICAgIG1v
ZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZl
cmVuY2VEYXRlXQotICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW3ZpZXcg
d2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDpb
W05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KLSAgICAgICAgICAgICAgICAgICAgICAgICBl
dmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKLSAgICAgICAgaWYgKEZyYW1l
KiBsYXN0SGl0Q29yZUZyYW1lID0gY29yZShbbGFzdEhpdFZpZXcgX2ZyYW1lXSkpCi0gICAgICAg
ICAgICBsYXN0SGl0Q29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7
Ci0gICAgfQotCi0gICAgbGFzdEhpdFZpZXcgPSB2aWV3OwotCi0gICAgaWYgKHZpZXcpIHsKLSAg
ICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFt2aWV3IF9mcmFtZV0pKQotICAgICAg
ICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7Ci0KLSAg
ICAgICAgW3ZpZXcgcmVsZWFzZV07Ci0gICAgfQotfQotCi0vLyBrZWVwIGluIHN5bmMgd2l0aCBX
ZWJQYXN0ZWJvYXJkSGVscGVyOjppbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzCi0rIChOU0FycmF5
ICopX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXMKLXsKLSAgICBzdGF0aWMgTlNBcnJheSAqdHlw
ZXMgPSBuaWw7Ci0gICAgaWYgKCF0eXBlcykgewotICAgICAgICB0eXBlcyA9IFtbTlNBcnJheSBh
bGxvY10gaW5pdFdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRU
eXBlLCBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJk
VHlwZSwKLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCi0gICAgICAgICAgICBOU1BJQ1RQYm9hcmRUeXBlLAotI2VuZGlmCi0gICAg
ICAgICAgICBOU1VSTFBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlw
ZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBOU0NvbG9yUGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmls
XTsKLSAgICAgICAgQ0ZSZXRhaW4odHlwZXMpOwotICAgIH0KLSAgICByZXR1cm4gdHlwZXM7Ci19
Ci0KLSsgKE5TQXJyYXkgKilfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzCi17Ci0gICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwdXQgZGF0YSBmb3IgTlNIVE1MUGJvYXJkVHlwZSBvbiB0aGUgcGFzdGVi
b2FyZCBidXQgTWljcm9zb2Z0IEV4Y2VsIGRvZXNuJ3QgbGlrZSBvdXIgZm9ybWF0IG9mIEhUTUwg
KDM2NDA0MjMpLgotICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYkFyY2hp
dmVQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5n
UGJvYXJkVHlwZSwgbmlsXTsKLX0KLQotLSAoTlNJbWFnZSAqKV9kcmFnSW1hZ2VGb3JVUkw6KE5T
U3RyaW5nKil1cmxTdHJpbmcgd2l0aExhYmVsOihOU1N0cmluZyopbGFiZWwKLXsKLSAgICBCT09M
IGRyYXdVUkxTdHJpbmcgPSBZRVM7Ci0gICAgQk9PTCBjbGlwVVJMU3RyaW5nID0gTk8sIGNsaXBM
YWJlbFN0cmluZyA9IE5POwotICAgIAotICAgIGlmICghbGFiZWwpIHsKLSAgICAgICAgZHJhd1VS
TFN0cmluZyA9IE5POwotICAgICAgICBsYWJlbCA9IHVybFN0cmluZzsKLSAgICB9Ci0gICAgCi0g
ICAgTlNGb250ICpsYWJlbEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
IGNvbnZlcnRGb250OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEUkFHX0xJTktfTEFCRUxfRk9O
VF9TSVpFXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0b0hhdmVUcmFpdDpOU0JvbGRGb250TWFza107Ci0gICAgTlNGb250ICp1cmxG
b250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOiBEUkFHX0xJTktfVVJMX0ZPTlRfU0laRV07
Ci0gICAgTlNTaXplIGxhYmVsU2l6ZTsKLSAgICBsYWJlbFNpemUud2lkdGggPSBbbGFiZWwgX3dl
Yl93aWR0aFdpdGhGb250OiBsYWJlbEZvbnRdOwotICAgIGxhYmVsU2l6ZS5oZWlnaHQgPSBbbGFi
ZWxGb250IGFzY2VuZGVyXSAtIFtsYWJlbEZvbnQgZGVzY2VuZGVyXTsKLSAgICBpZiAobGFiZWxT
aXplLndpZHRoID4gTUFYX0RSQUdfTEFCRUxfV0lEVEgpewotICAgICAgICBsYWJlbFNpemUud2lk
dGggPSBNQVhfRFJBR19MQUJFTF9XSURUSDsKLSAgICAgICAgY2xpcExhYmVsU3RyaW5nID0gWUVT
OwotICAgIH0KLSAgICAKLSAgICBOU1NpemUgaW1hZ2VTaXplLCB1cmxTdHJpbmdTaXplOwotICAg
IGltYWdlU2l6ZS53aWR0aCA9IGxhYmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxfQk9SREVSX1gg
KiAyLjBmOwotICAgIGltYWdlU2l6ZS5oZWlnaHQgPSBsYWJlbFNpemUuaGVpZ2h0ICsgRFJBR19M
QUJFTF9CT1JERVJfWSAqIDIuMGY7Ci0gICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKLSAgICAgICAg
dXJsU3RyaW5nU2l6ZS53aWR0aCA9IFt1cmxTdHJpbmcgX3dlYl93aWR0aFdpdGhGb250OiB1cmxG
b250XTsKLSAgICAgICAgdXJsU3RyaW5nU2l6ZS5oZWlnaHQgPSBbdXJsRm9udCBhc2NlbmRlcl0g
LSBbdXJsRm9udCBkZXNjZW5kZXJdOwotICAgICAgICBpbWFnZVNpemUuaGVpZ2h0ICs9IHVybFN0
cmluZ1NpemUuaGVpZ2h0OwotICAgICAgICBpZiAodXJsU3RyaW5nU2l6ZS53aWR0aCA+IE1BWF9E
UkFHX0xBQkVMX1dJRFRIKSB7Ci0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBNQVgoTUFY
X0RSQUdfTEFCRUxfV0lEVEggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwgTUlOX0RSQUdf
TEFCRUxfV0lEVEhfQkVGT1JFX0NMSVApOwotICAgICAgICAgICAgY2xpcFVSTFN0cmluZyA9IFlF
UzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0aCA9IE1BWChs
YWJlbFNpemUud2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwgdXJsU3RyaW5nU2l6
ZS53aWR0aCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBOU0ltYWdlICpkcmFnSW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6
IGltYWdlU2l6ZV0gYXV0b3JlbGVhc2VdOwotICAgIFtkcmFnSW1hZ2UgbG9ja0ZvY3VzXTsKLSAg
ICAKLSAgICBbW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOiAwLjdmIGdyZWVuOiAwLjdmIGJs
dWU6IDAuN2YgYWxwaGE6IDAuOGZdIHNldF07Ci0gICAgCi0gICAgLy8gRHJhZyBhIHJlY3Rhbmds
ZSB3aXRoIHJvdW5kZWQgY29ybmVycy8KLSAgICBOU0JlemllclBhdGggKnBhdGggPSBbTlNCZXpp
ZXJQYXRoIGJlemllclBhdGhdOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbElu
UmVjdDogTlNNYWtlUmVjdCgwLjBmLCAwLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERS
QUdfTEFCRUxfUkFESVVTICogMi4wZildOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRo
T3ZhbEluUmVjdDogTlNNYWtlUmVjdCgwLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19MQUJFTF9S
QURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVT
ICogMi4wZildOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNN
YWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIGltYWdl
U2l6ZS5oZWlnaHQgLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVT
ICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07Ci0gICAgW3BhdGggYXBwZW5kQmV6
aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdf
TEFCRUxfUkFESVVTICogMi4wZiwgMC4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFH
X0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKLSAgICAKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRo
V2l0aFJlY3Q6IE5TTWFrZVJlY3QoRFJBR19MQUJFTF9SQURJVVMsIDAuMGYsIGltYWdlU2l6ZS53
aWR0aCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgaW1hZ2VTaXplLmhlaWdodCldOwotICAg
IFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdCgwLjBmLCBEUkFHX0xB
QkVMX1JBRElVUywgRFJBR19MQUJFTF9SQURJVVMgKyAxMC4wZiwgaW1hZ2VTaXplLmhlaWdodCAt
IDIuMGYgKiBEUkFHX0xBQkVMX1JBRElVUyldOwotICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhX
aXRoUmVjdDogTlNNYWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAt
IDIwLjBmLCBEUkFHX0xBQkVMX1JBRElVUywgRFJBR19MQUJFTF9SQURJVVMgKyAyMC4wZiwgaW1h
Z2VTaXplLmhlaWdodCAtIDIuMGYgKiBEUkFHX0xBQkVMX1JBRElVUyldOwotICAgIFtwYXRoIGZp
bGxdOwotICAgIAotICAgIE5TQ29sb3IgKnRvcENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2
aWNlV2hpdGU6MC4wZiBhbHBoYTowLjc1Zl07Ci0gICAgTlNDb2xvciAqYm90dG9tQ29sb3IgPSBb
TlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZToxLjBmIGFscGhhOjAuNWZdOwotICAgIGlmIChk
cmF3VVJMU3RyaW5nKSB7Ci0gICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQotICAgICAgICAgICAg
dXJsU3RyaW5nID0gW1dlYlN0cmluZ1RydW5jYXRvciBjZW50ZXJUcnVuY2F0ZVN0cmluZzogdXJs
U3RyaW5nIHRvV2lkdGg6aW1hZ2VTaXplLndpZHRoIC0gKERSQUdfTEFCRUxfQk9SREVSX1ggKiAy
LjBmKSB3aXRoRm9udDp1cmxGb250XTsKLSAgICAgICAgCi0gICAgICAgIFt1cmxTdHJpbmcgX3dl
Yl9kcmF3RG91YmxlZEF0UG9pbnQ6TlNNYWtlUG9pbnQoRFJBR19MQUJFTF9CT1JERVJfWCwgRFJB
R19MQUJFTF9CT1JERVJfWSAtIFt1cmxGb250IGRlc2NlbmRlcl0pIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNv
bG9yIGZvbnQ6dXJsRm9udF07Ci0gICAgfQotICAgIAotICAgIGlmIChjbGlwTGFiZWxTdHJpbmcp
Ci0gICAgICAgIGxhYmVsID0gW1dlYlN0cmluZ1RydW5jYXRvciByaWdodFRydW5jYXRlU3RyaW5n
OiBsYWJlbCB0b1dpZHRoOmltYWdlU2l6ZS53aWR0aCAtIChEUkFHX0xBQkVMX0JPUkRFUl9YICog
Mi4wZikgd2l0aEZvbnQ6bGFiZWxGb250XTsKLSAgICBbbGFiZWwgX3dlYl9kcmF3RG91YmxlZEF0
UG9pbnQ6TlNNYWtlUG9pbnQgKERSQUdfTEFCRUxfQk9SREVSX1gsIGltYWdlU2l6ZS5oZWlnaHQg
LSBEUkFHX0xBQkVMX0JPUkRFUl9ZX09GRlNFVCAtIFtsYWJlbEZvbnQgcG9pbnRTaXplXSkKLSAg
ICAgICAgICAgICAgICAgICAgICB3aXRoVG9wQ29sb3I6dG9wQ29sb3IgYm90dG9tQ29sb3I6Ym90
dG9tQ29sb3IgZm9udDpsYWJlbEZvbnRdOwotICAgIAotICAgIFtkcmFnSW1hZ2UgdW5sb2NrRm9j
dXNdOwotICAgIAotICAgIHJldHVybiBkcmFnSW1hZ2U7Ci19Ci0KLS0gKE5TSW1hZ2UgKilfZHJh
Z0ltYWdlRm9yTGlua0VsZW1lbnQ6KE5TRGljdGlvbmFyeSAqKWVsZW1lbnQKLXsKLSAgICBOU1VS
TCAqbGlua1VSTCA9IFtlbGVtZW50IG9iamVjdEZvcktleTogV2ViRWxlbWVudExpbmtVUkxLZXld
OwotICAgIAotICAgIE5TU3RyaW5nICpsYWJlbCA9IFtlbGVtZW50IG9iamVjdEZvcktleTogV2Vi
RWxlbWVudExpbmtMYWJlbEtleV07Ci0gICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtsaW5rVVJM
IF93ZWJfdXNlclZpc2libGVTdHJpbmddOwotICAgIHJldHVybiBbc2VsZiBfZHJhZ0ltYWdlRm9y
VVJMOnVybFN0cmluZyB3aXRoTGFiZWw6bGFiZWxdOwotfQotCi0tICh2b2lkKXBhc3RlYm9hcmRD
aGFuZ2VkT3duZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBbc2VsZiBzZXRQ
cm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTowXTsKLX0KLQotLSAodm9pZClwYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0
eXBlCi17Ci0gICAgaWYgKFt0eXBlIGlzRXF1YWw6TlNSVEZEUGJvYXJkVHlwZV0gJiYgW1twYXN0
ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKLSAg
ICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhE
YXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV07Ci0gICAg
ICAgIFtwYXN0ZWJvYXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2ZTphcmNoaXZl
IGNvbnRhaW5zSW1hZ2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpOU1RJRkZQ
Ym9hcmRUeXBlXV07Ci0gICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOwotICAgIH0gZWxzZSBpZiAo
W3R5cGUgaXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBlXSAmJiBbc2VsZiBwcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZV0pIHsKLSAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IFtzZWxmIHByb21pc2Vk
RHJhZ1RJRkZEYXRhU291cmNlXS0+aW1hZ2UoKSkKLSAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNl
dERhdGE6KE5TRGF0YSAqKWltYWdlLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKSBmb3JUeXBlOk5T
VElGRlBib2FyZFR5cGVdOwotICAgICAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZTowXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpX2hhbmRsZUF1dG9zY3JvbGxGb3JNb3VzZURy
YWdnZWQ6KE5TRXZlbnQgKilldmVudCAKLXsgCi0gICAgW3NlbGYgYXV0b3Njcm9sbDpldmVudF07
IAotICAgIFtzZWxmIF9zdGFydEF1dG9zY3JvbGxUaW1lcjpldmVudF07IAotfSAKLQotLSAoV2Vi
UGx1Z2luQ29udHJvbGxlciAqKV9wbHVnaW5Db250cm9sbGVyCi17Ci0gICAgcmV0dXJuIF9wcml2
YXRlLT5wbHVnaW5Db250cm9sbGVyOwotfQotCi0tICh2b2lkKV9sYXlvdXRGb3JQcmludGluZwot
ewotICAgIC8vIFNldCBwcmludGluZyBtb2RlIHRlbXBvcmFyaWx5IHNvIHdlIGNhbiBhZGp1c3Qg
dGhlIHNpemUgb2YgdGhlIHZpZXcuIFRoaXMgd2lsbCBhbGxvdwotICAgIC8vIEFwcEtpdCdzIHBh
Z2luYXRpb24gY29kZSB0byB1c2UgdGhlIGNvcnJlY3QgaGVpZ2h0IGZvciB0aGUgcGFnZSBjb250
ZW50LiBMZWF2aW5nIHByaW50aW5nCi0gICAgLy8gbW9kZSBvbiBpbmRlZmluaXRlbHkgd291bGQg
aW50ZXJmZXJlIHdpdGggTWFpbCdzIHByaW50aW5nIG1lY2hhbmlzbSAoYXQgbGVhc3QpLCBzbyB3
ZSBqdXN0Ci0gICAgLy8gdHVybiBpdCBvZmYgYWdhaW4gYWZ0ZXIgYWRqdXN0aW5nIHRoZSBzaXpl
LgotICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1Np
emVdOwotICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwotfQotCi0t
ICh2b2lkKV9zbWFydEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBs
YWNpbmdSYW5nZTooRE9NUmFuZ2UgKilyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6KE5TU3Ry
aW5nICoqKWJlZm9yZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiopYWZ0ZXJTdHJpbmcK
LXsKLSAgICBpZiAoIXBhc3RlU3RyaW5nIHx8ICFyYW5nZVRvUmVwbGFjZSB8fCAhW1tzZWxmIF93
ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdKSB7Ci0gICAgICAgIGlmIChiZWZvcmVT
dHJpbmcpCi0gICAgICAgICAgICAqYmVmb3JlU3RyaW5nID0gbmlsOwotICAgICAgICBpZiAoYWZ0
ZXJTdHJpbmcpCi0gICAgICAgICAgICAqYWZ0ZXJTdHJpbmcgPSBuaWw7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgW1tzZWxmIF9mcmFtZV0gX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5n
OnBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOnJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzpi
ZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6YWZ0ZXJTdHJpbmddOwotfQotCi0tIChCT09MKV9jYW5T
bWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewot
ICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0gJiYg
W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlw
ZV07Ci19Ci0KLS0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOiAoTlNFdmVudCAqKXRyaWdn
ZXJFdmVudAotewotICAgIGlmIChfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID09IG5pbCkgewot
ICAgICAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gW1tOU1RpbWVyIHNjaGVkdWxlZFRp
bWVyV2l0aFRpbWVJbnRlcnZhbDpBVVRPU0NST0xMX0lOVEVSVkFMCi0gICAgICAgICAgICB0YXJn
ZXQ6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2F1dG9zY3JvbGwpIHVzZXJJbmZvOm5pbCByZXBl
YXRzOllFU10gcmV0YWluXTsKLSAgICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZl
bnQgPSBbdHJpZ2dlckV2ZW50IHJldGFpbl07Ci0gICAgfQotfQotCi0vLyBGSVhNRTogX3NlbGVj
dGlvblJlY3QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzZWxlY3Rpb25SZWN0LCB3aGljaCBp
cyBpbiBwcm90b2NvbCBXZWJEb2N1bWVudFNlbGVjdGlvbi4KLS8vIFdlIGNhbid0IHJlbW92ZSB0
aGlzIHlldCBiZWNhdXNlIGl0J3Mgc3RpbGwgaW4gdXNlIGJ5IE1haWwuCi0tIChOU1JlY3QpX3Nl
bGVjdGlvblJlY3QKLXsKLSAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07Ci19Ci0KLS0g
KHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKLXsKLSAgICBOU1RpbWVyICp0aW1lciA9IF9wcml2
YXRlLT5hdXRvc2Nyb2xsVGltZXI7Ci0gICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IG5p
bDsKLSAgICBbX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgcmVsZWFzZV07Ci0gICAg
X3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7Ci0gICAgW3RpbWVyIGludmFs
aWRhdGVdOwotICAgIFt0aW1lciByZWxlYXNlXTsKLX0KLQotLSAodm9pZClfYXV0b3Njcm9sbAot
ewotICAgIC8vIEd1YXJhbnRlZSB0aGF0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlzIGludmFsaWRh
dGVkLCBldmVuIGlmIHdlIGRvbid0IHJlY2VpdmUKLSAgICAvLyBhIG1vdXNlIHVwIGV2ZW50Lgot
ICAgIEJPT0wgaXNTdGlsbERvd24gPSBDR0V2ZW50U291cmNlQnV0dG9uU3RhdGUoa0NHRXZlbnRT
b3VyY2VTdGF0ZUNvbWJpbmVkU2Vzc2lvblN0YXRlLCBrQ0dNb3VzZUJ1dHRvbkxlZnQpOyAgIAot
ICAgIGlmICghaXNTdGlsbERvd24pewotICAgICAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1l
cl07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBb
TlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VEcmFnZ2VkCi0gICAgICAgIGxv
Y2F0aW9uOltbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VM
b2NhdGlvbl1dCi0gICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1v
ZGlmaWVyRmxhZ3NdCi0gICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNl
UmVmZXJlbmNlRGF0ZV0KLSAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRv
d051bWJlcl0KLSAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0K
LSAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07Ci0gICAgW3Nl
bGYgbW91c2VEcmFnZ2VkOmZha2VFdmVudF07Ci19Ci0KLS0gKEJPT0wpX2NhbkVkaXQKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKLX0KLQotLSAoQk9PTClf
Y2FuRWRpdFJpY2hseQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRp
dFJpY2hseSgpOwotfQotCi0tIChCT09MKV9jYW5BbHRlckN1cnJlbnRTZWxlY3Rpb24KLXsKLSAg
ICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnRdICYmIFtzZWxmIF9p
c0VkaXRhYmxlXTsKLX0KLQotLSAoQk9PTClfaGFzU2VsZWN0aW9uCi17Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc1JhbmdlKCk7Ci19Ci0KLS0gKEJPT0wpX2hhc1NlbGVj
dGlvbk9ySW5zZXJ0aW9uUG9pbnQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCktPmlzQ2FyZXRPclJhbmdlKCk7Ci19Ci0KLS0gKEJPT0wpX2hhc0luc2VydGlvblBvaW50Ci17
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJu
IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0KCk7Ci19Ci0KLS0g
KEJPT0wpX2lzRWRpdGFibGUKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkt
PmlzQ29udGVudEVkaXRhYmxlKCk7Ci19Ci0KLS0gKEJPT0wpX3RyYW5zcGFyZW50QmFja2dyb3Vu
ZAotewotICAgIHJldHVybiBfcHJpdmF0ZS0+dHJhbnNwYXJlbnRCYWNrZ3JvdW5kOwotfQotCi0t
ICh2b2lkKV9zZXRUcmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wpZgotewotICAgIF9wcml2YXRl
LT50cmFuc3BhcmVudEJhY2tncm91bmQgPSBmOwotfQotCi0tIChOU0ltYWdlICopX3NlbGVjdGlv
bkRyYWdnaW5nSW1hZ2UKLXsKLSAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pIHsKLSAgICAg
ICAgTlNJbWFnZSAqZHJhZ0ltYWdlID0gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uSW1h
Z2UoKTsKLSAgICAgICAgW2RyYWdJbWFnZSBfd2ViX2Rpc3NvbHZlVG9GcmFjdGlvbjpXZWJEcmFn
SW1hZ2VBbHBoYV07Ci0gICAgICAgIHJldHVybiBkcmFnSW1hZ2U7Ci0gICAgfQotICAgIHJldHVy
biBuaWw7Ci19Ci0KLS0gKE5TUmVjdClfc2VsZWN0aW9uRHJhZ2dpbmdSZWN0Ci17Ci0gICAgLy8g
TWFpbCBjdXJyZW50bHkgY2FsbHMgdGhpcyBtZXRob2QuIFdlIGNhbiBlbGltaW5hdGUgaXQgd2hl
biBNYWlsIG5vIGxvbmdlciBjYWxscyBpdC4KLSAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVj
dF07Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5zZXJ0T3JkZXJlZExpc3QKLXsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8g
a2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydE9yZGVyZWRMaXN0KCkuZ2V0KCkpIDogbmls
OwotfQotCi0tIChET01Ob2RlICopX2luc2VydFVub3JkZXJlZExpc3QKLXsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8g
a2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydFVub3JkZXJlZExpc3QoKS5nZXQoKSkgOiBu
aWw7Ci19Ci0KLS0gKEJPT0wpX2NhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCi17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bCgpOwotfQotCi0tIChCT09MKV9jYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAotewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWwoKTsKLX0KLQotLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAotewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBj
b3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWwoKS5nZXQoKSkgOiBuaWw7Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxPcmRlcmVkCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigp
LT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKS5nZXQoKSkgOiBuaWw7Ci19Ci0K
LS0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsVW5vcmRlcmVkKCkuZ2V0KCkpIDogbmlsOwotfQotCi0tICh2b2lkKV9kZWNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIGlmIChjb3JlRnJhbWUpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmRl
Y3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7Ci19Ci0KLS0gKHZvaWQpX3NldEhpZ2hsaWdodGVy
OihpZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+KWhpZ2hsaWdodGVyIG9mVHlwZTooTlNTdHJpbmcqKXR5
cGUKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5oaWdobGlnaHRlcnMpCi0gICAgICAgIF9wcml2YXRl
LT5oaWdobGlnaHRlcnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAg
IFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIHNldE9iamVjdDpoaWdobGlnaHRlciBmb3JLZXk6dHlw
ZV07Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZUhpZ2hsaWdodGVyT2ZUeXBlOihOU1N0cmluZyopdHlw
ZQotewotICAgIFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIHJlbW92ZU9iamVjdEZvcktleTp0eXBl
XTsKLX0KLQotLSAodm9pZClfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCi17Ci0gICAgW3Nl
bGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsKLQotICAgIFtbc2Vs
ZiBfd2ViVmlld10gX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOltzZWxmIF9m
cmFtZV1dOwotfQotCi0tICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDooTlNQYXN0
ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIEFTU0VSVChbc2VsZiBfaGFzU2VsZWN0aW9uXSk7
Ci0gICAgTlNBcnJheSAqdHlwZXMgPSBbc2VsZiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb25d
OwotCi0gICAgLy8gRG9uJ3Qgd3JpdGUgUlRGRCB0byB0aGUgcGFzdGVib2FyZCB3aGVuIHRoZSBj
b3BpZWQgYXR0cmlidXRlZCBzdHJpbmcgaGFzIG5vIGF0dGFjaG1lbnRzLgotICAgIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0
cmluZ107Ci0gICAgTlNNdXRhYmxlQXJyYXkgKm11dGFibGVUeXBlcyA9IG5pbDsKLSAgICBpZiAo
IVthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKSB7Ci0gICAgICAgIG11dGFi
bGVUeXBlcyA9IFt0eXBlcyBtdXRhYmxlQ29weV07Ci0gICAgICAgIFttdXRhYmxlVHlwZXMgcmVt
b3ZlT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdOwotICAgICAgICB0eXBlcyA9IG11dGFibGVUeXBl
czsKLSAgICB9Ci0KLSAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3Nl
bGYgX3RvcEhUTUxWaWV3XV07Ci0gICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9h
cmRUeXBlczp0eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3Ry
aW5nOmF0dHJpYnV0ZWRTdHJpbmddOwotICAgIFttdXRhYmxlVHlwZXMgcmVsZWFzZV07Ci19Ci0K
LS0gKHZvaWQpY2xvc2UKLXsKLSAgICAvLyBDaGVjayBmb3IgYSBuaWwgX3ByaXZhdGUgaGVyZSBp
biBjYXNlIHdlIHdlcmUgY3JlYXRlZCB3aXRoIGluaXRXaXRoQ29kZXIuIEluIHRoYXQgY2FzZSwg
dGhlIFdlYlZpZXcgaXMganVzdCB0aHJvd2luZwotICAgIC8vIG91dCB0aGUgYXJjaGl2ZWQgV2Vi
SFRNTFZpZXcgYW5kIHJlY3JlYXRpbmcgYSBuZXcgb25lIGlmIG5lZWRlZC4gU28gY2xvc2UgZG9l
c24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGluIHRoYXQgY2FzZS4KLSAgICBpZiAoIV9wcml2YXRl
IHx8IF9wcml2YXRlLT5jbG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wcml2YXRlLT5j
bG9zZWQgPSBZRVM7Ci0KLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOwot
ICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07Ci0gICAg
W3NlbGYgX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGZdOwotICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1v
dmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHldOwotICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNl
cnZlcnNdOwotICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwotICAgIFtfcHJp
dmF0ZS0+cGx1Z2luQ29udHJvbGxlciBkZXN0cm95QWxsUGx1Z2luc107Ci0gICAgW19wcml2YXRl
LT5wbHVnaW5Db250cm9sbGVyIHNldERhdGFTb3VyY2U6bmlsXTsKLSAgICAvLyByZW1vdmUgdG9v
bHRpcHMgYmVmb3JlIGNsZWFyaW5nIF9wcml2YXRlIHNvIHJlbW92ZVRyYWNraW5nUmVjdDogd2ls
bCB3b3JrIGNvcnJlY3RseQotICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGlu
Z1ZpZXcpCi0gICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci0jZW5kaWYKLQotICAgIFtfcHJpdmF0ZSBj
bGVhcl07Ci0KLSAgICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOwotICAgIGlm
IChwYWdlKQotICAgICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zZXREcmFnZ2luZ0ltYWdl
VVJMKEtVUkwoKSk7Ci19Ci0KLS0gKEJPT0wpX2hhc0hUTUxEb2N1bWVudAotewotICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQot
ICAgICAgICByZXR1cm4gTk87Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5k
b2N1bWVudCgpOwotICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNIVE1MRG9jdW1l
bnQoKTsKLX0KLQotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJv
bVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmluZyAqKXBib2Fy
ZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5D
b250ZXh0OihET01SYW5nZSAqKWNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlcwotewot
ICAgIGlmIChwYm9hcmRUeXBlID09IFdlYkFyY2hpdmVQYm9hcmRUeXBlKSB7Ci0gICAgICAgIFdl
YkFyY2hpdmUgKmFyY2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFz
dGVib2FyZCBkYXRhRm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOwotICAgICAgICBpZiAo
c3VicmVzb3VyY2VzKQotICAgICAgICAgICAgKnN1YnJlc291cmNlcyA9IFthcmNoaXZlIHN1YnJl
c291cmNlc107Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxm
IF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNoaXZlOmFyY2hpdmVdOwotICAg
ICAgICBbYXJjaGl2ZSByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0K
LSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpCi0gICAgICAgIHJl
dHVybiBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczpbcGFzdGVib2FyZCBwcm9wZXJ0
eUxpc3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV1dOwotICAgICAgICAKLSAgICBpZiAo
cGJvYXJkVHlwZSA9PSBOU0hUTUxQYm9hcmRUeXBlKSB7Ci0gICAgICAgIE5TU3RyaW5nICpIVE1M
U3RyaW5nID0gW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlXTsKLSAg
ICAgICAgLy8gVGhpcyBpcyBhIGhhY2sgdG8gbWFrZSBNaWNyb3NvZnQncyBIVE1MIHBhc3RlYm9h
cmQgZGF0YSB3b3JrLiBTZWUgMzc3ODc4NS4KLSAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGhhc1By
ZWZpeDpAIlZlcnNpb246Il0pIHsKLSAgICAgICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBbSFRNTFN0
cmluZyByYW5nZU9mU3RyaW5nOkAiPGh0bWwiIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFy
Y2hdOwotICAgICAgICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCi0gICAg
ICAgICAgICAgICAgSFRNTFN0cmluZyA9IFtIVE1MU3RyaW5nIHN1YnN0cmluZ0Zyb21JbmRleDpy
YW5nZS5sb2NhdGlvbl07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0
aF0gPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm4gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOkhUTUxT
dHJpbmcgYmFzZVVSTFN0cmluZzpuaWxdOwotICAgIH0KLQotICAgIC8vIFRoZSBfaGFzSFRNTERv
Y3VtZW50IGNsYXVzZSBoZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gTlNBdHRyaWJ1
dGVkU3RyaW5nOiBSYWRhciA1MDUyMzY5LgotICAgIC8vIElmIHdlIGNhbGwgX2RvY3VtZW50RnJv
bVJhbmdlIG9uIGFuIFhNTCBkb2N1bWVudCB3ZSdsbCBnZXQgInNldElubmVySFRNTDogbWV0aG9k
IG5vdCBmb3VuZCIuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgYnVnIDUwNTIzNjkg
aXMgZml4ZWQuCi0gICAgaWYgKFtzZWxmIF9oYXNIVE1MRG9jdW1lbnRdICYmIHBib2FyZFR5cGUg
PT0gTlNSVEZQYm9hcmRUeXBlIHx8IHBib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkgewot
ICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsKLSAgICAgICAgaWYgKHBi
b2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkKLSAgICAgICAgICAgIHN0cmluZyA9IFtbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5
cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOwotICAgICAgICBp
ZiAoc3RyaW5nID09IG5pbCkKLSAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBib2Fy
ZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKLSAgICAgICAgaWYgKHN0cmluZyA9PSBu
aWwpCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAgICAgCi0gICAgICAgIE5TRGlj
dGlvbmFyeSAqZG9jdW1lbnRBdHRyaWJ1dGVzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRX
aXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICBbW3NlbGYgY2xhc3NdIF9leGNsdWRlZEVs
ZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb25dLCBOU0V4Y2x1ZGVkRWxlbWVudHNE
b2N1bWVudEF0dHJpYnV0ZSwKLSAgICAgICAgICAgIHNlbGYsIEAiV2ViUmVzb3VyY2VIYW5kbGVy
IiwgbmlsXTsKLSAgICAgICAgTlNBcnJheSAqczsKLSAgICAgICAgCi0gICAgICAgIEJPT0wgd2Fz
RGVmZXJyaW5nQ2FsbGJhY2tzID0gW1tzZWxmIF93ZWJWaWV3XSBkZWZlcnNDYWxsYmFja3NdOwot
ICAgICAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKLSAgICAgICAgICAgIFtbc2VsZiBf
d2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOllFU107Ci0gICAgICAgICAgICAKLSAgICAgICAg
RE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVudEZyb21SYW5n
ZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Oltbc2VsZiBfZnJh
bWVdIERPTURvY3VtZW50XSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvY3VtZW50QXR0cmlidXRlczpkb2N1bWVudEF0dHJpYnV0ZXMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNl
czomc107Ci0gICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCi0gICAgICAgICAgICAqc3VicmVzb3Vy
Y2VzID0gczsKLSAgICAgICAgCi0gICAgICAgIE5TRW51bWVyYXRvciAqZSA9IFtzIG9iamVjdEVu
dW1lcmF0b3JdOwotICAgICAgICBXZWJSZXNvdXJjZSAqcjsKLSAgICAgICAgd2hpbGUgKChyID0g
W2UgbmV4dE9iamVjdF0pKQotICAgICAgICAgICAgW1tzZWxmIF9kYXRhU291cmNlXSBhZGRTdWJy
ZXNvdXJjZTpyXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tz
KQotICAgICAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6Tk9dOwot
ICAgICAgICAKLSAgICAgICAgW2RvY3VtZW50QXR0cmlidXRlcyByZWxlYXNlXTsKLSAgICAgICAg
W3N0cmluZyByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBp
ZiAocGJvYXJkVHlwZSA9PSBOU1RJRkZQYm9hcmRUeXBlKSB7Ci0gICAgICAgIFdlYlJlc291cmNl
ICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJl
bGF0aXZlUGFydChAImltYWdlLnRpZmYiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS90aWZmIiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdO
YW1lOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmcmFtZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJh
Z21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVz
b3VyY2U6cmVzb3VyY2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIHJl
dHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQREZQYm9hcmRU
eXBlKSB7Ci0gICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxs
b2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BERlBib2FyZFR5cGVd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiYXBwbGljYXRpb24ucGRmIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1JTUVUeXBlOkAiYXBwbGljYXRpb24vcGRmIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmls
XTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFT
b3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOwotICAg
ICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9
Ci0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9M
RU9QQVJEKQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TUElDVFBib2FyZFR5cGUpIHsKLSAgICAg
ICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhE
YXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUElDVFBib2FyZFR5cGVdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1
bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucGljdCIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImltYWdl
L3BpY3QiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHRFbmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBET01Eb2N1bWVu
dEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21l
bnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJjZSByZWxlYXNl
XTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSNlbmRpZgotICAgIC8vIE9ubHkg
MTAuNSBhbmQgaGlnaGVyIHN1cHBvcnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBwYXN0ZWJvYXJk
IHR5cGVzIHdpdGggVVRJcywgYnV0IHdlIGRvbid0IGJlbGlldmUKLSAgICAvLyB0aGF0IGFueSBh
cHBsaWNhdGlvbnMgb24gVGlnZXIgcHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBV
VEksIGxpa2UgUE5HLCBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3Bib2FyZFR5cGUgaXNF
cXVhbFRvU3RyaW5nOihOU1N0cmluZyopa1VUVHlwZVBOR10pIHsKLSAgICAgICAgV2ViUmVzb3Vy
Y2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVS
TFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS5wbmciKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS9wbmciIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNv
ZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50
ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1h
Z2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1VSTFBi
b2FyZFR5cGUpIHsKLSAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkXTsKLSAgICAgICAgRE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gW1tzZWxmIF9m
cmFtZV0gRE9NRG9jdW1lbnRdOwotICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgICAgICBp
ZiAoIWRvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgRE9NSFRNTEFu
Y2hvckVsZW1lbnQgKmFuY2hvciA9IChET01IVE1MQW5jaG9yRWxlbWVudCAqKVtkb2N1bWVudCBj
cmVhdGVFbGVtZW50OkAiYSJdOwotICAgICAgICBOU1N0cmluZyAqVVJMU3RyaW5nID0gW1VSTCBf
d2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXTsgLy8gT3JpZ2luYWwgZGF0YSBpcyBBU0NJSS1vbmx5
LCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByZWNvbXBvc2UuCi0gICAgICAgIGlmIChbVVJMU3Ry
aW5nIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIE5TU3Ry
aW5nICpVUkxUaXRsZVN0cmluZyA9IFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOldlYlVSTE5h
bWVQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKLSAg
ICAgICAgRE9NVGV4dCAqdGV4dCA9IFtkb2N1bWVudCBjcmVhdGVUZXh0Tm9kZTpVUkxUaXRsZVN0
cmluZ107Ci0gICAgICAgIFthbmNob3Igc2V0SHJlZjpVUkxTdHJpbmddOwotICAgICAgICBbYW5j
aG9yIGFwcGVuZENoaWxkOnRleHRdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFn
bWVudCA9IFtkb2N1bWVudCBjcmVhdGVEb2N1bWVudEZyYWdtZW50XTsKLSAgICAgICAgW2ZyYWdt
ZW50IGFwcGVuZENoaWxkOmFuY2hvcl07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9
Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNTdHJpbmdQYm9hcmRUeXBlKQotICAgICAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29yZShjb250ZXh0KSwgW1twYXN0ZWJvYXJk
IHN0cmluZ0ZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhD
YW5vbmljYWxNYXBwaW5nXSkuZ2V0KCkpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgCi0tICh2b2lkKV9wYXVzZU51bGxFdmVudHNGb3JBbGxO
ZXRzY2FwZVBsdWdpbnMgCi17IAotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3NlbGYgc3Vidmll
d3NdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdzIGNvdW50XTsg
Ci0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdJbmRleDsgCi0gICAgCi0gICAgZm9yIChzdWJ2aWV3
SW5kZXggPSAwOyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJbmRleCsrKSB7
IAotICAgICAgICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpzdWJ2
aWV3SW5kZXhdOyAKLSAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VO
ZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkgCi0gICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2Fw
ZVBsdWdpblZpZXcgKilzdWJ2aWV3IHN0b3BUaW1lcnNdOwotICAgIH0gCi19IAotI2VuZGlmIAot
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpIAotLSAodm9pZClfcmVzdW1lTnVsbEV2
ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAKLXsgCi0gICAgTlNBcnJheSAqc3Vidmlld3MgPSBb
c2VsZiBzdWJ2aWV3c107IAotICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3Q291bnQgPSBbc3Vidmll
d3MgY291bnRdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4OyAKLSAgICAKLSAgICBm
b3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZpZXdDb3VudDsgc3Vidmll
d0luZGV4KyspIHsgCi0gICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtzdWJ2aWV3cyBvYmplY3RB
dEluZGV4OnN1YnZpZXdJbmRleF07IAotICAgICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZDbGFz
czpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKLSAgICAgICAgICAgIFsoV2Vi
QmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgcmVzdGFydFRpbWVyc107IAotICAgIH0g
Ci19IAotI2VuZGlmIAotCi0tIChCT09MKV9pc1VzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZwot
ewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICByZXR1cm4gX3ByaXZhdGUt
PmxheWVySG9zdGluZ1ZpZXcgIT0gbmlsOwotI2Vsc2UKLSAgICByZXR1cm4gTk87Ci0jZW5kaWYK
LX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRl
cm5hbCkKLQotLSAodm9pZClfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihO
U011dGFibGVBcnJheSAqKWFycmF5Ci17Ci0gICAgdW5zaWduZWQgY291bnQgPSBbX3N1YnZpZXdz
IGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAg
ICAgICBOU1ZpZXcgKmNoaWxkID0gW19zdWJ2aWV3cyBvYmplY3RBdEluZGV4OmldOwotICAgICAg
ICBpZiAoW2NoaWxkIGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCi0gICAgICAg
ICAgICBbYXJyYXkgYWRkT2JqZWN0OmNoaWxkXTsKLSAgICAgICAgW2NoaWxkIF93ZWJfYWRkRGVz
Y2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6YXJyYXldOwotICAgIH0KLX0KLQotQGVuZAotCi1A
aW1wbGVtZW50YXRpb24gTlNNdXRhYmxlRGljdGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJu
YWwpCi0KLS0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleToo
aWQpa2V5Ci17Ci0gICAgaWYgKG9iamVjdCA9PSBuaWwpIHsKLSAgICAgICAgW3NlbGYgcmVtb3Zl
T2JqZWN0Rm9yS2V5OmtleV07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW3NlbGYgc2V0T2JqZWN0
Om9iamVjdCBmb3JLZXk6a2V5XTsKLSAgICB9Ci19Ci0KLUBlbmQKLQotQGludGVyZmFjZSBOU1N0
cmluZyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0tIChCT09MKW1hdGNoZXNFeHRlbnNpb25F
cXVpdmFsZW50OihOU1N0cmluZyAqKWV4dGVuc2lvbjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IE5TU3RyaW5nIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQotLSAoQk9PTCltYXRjaGVzRXh0
ZW5zaW9uRXF1aXZhbGVudDooTlNTdHJpbmcgKilleHRlbnNpb24KLXsKLSAgICBpZiAoW3NlbGYg
aGFzU3VmZml4OmV4dGVuc2lvbl0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgZWxzZSBpZiAo
W2V4dGVuc2lvbiBpc0VxdWFsVG9TdHJpbmc6QCJqcGVnIl0gJiYgW3NlbGYgaGFzU3VmZml4OkAi
anBnIl0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgcmV0dXJuIE5POwotfQotCi1AZW5kCi0K
LSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0vLyBUaGUgZm9sbG93aW5nIGlzIGEgd29ya2Fy
b3VuZCBmb3IKLS8vIDxyZGFyOi8vcHJvYmxlbS8zNDI5NjMxPiB3aW5kb3cgc3RvcHMgZ2V0dGlu
ZyBtb3VzZSBtb3ZlZCBldmVudHMgYWZ0ZXIgZmlyc3QgdG9vbHRpcCBhcHBlYXJzCi0vLyBUaGUg
dHJpY2sgaXMgdG8gZGVmaW5lIGEgY2F0ZWdvcnkgb24gTlNUb29sVGlwUGFuZWwgdGhhdCBpbXBs
ZW1lbnRzIHNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOi4KLS8vIFNpbmNlIHRoZSBjYXRlZ29y
eSB3aWxsIGJlIHNlYXJjaGVkIGJlZm9yZSB0aGUgcmVhbCBjbGFzcywgd2UnbGwgcHJldmVudCB0
aGUgZmxhZyBmcm9tIGJlaW5nCi0vLyBzZXQgb24gdGhlIHRvb2wgdGlwIHBhbmVsLgotCi1AaW50
ZXJmYWNlIE5TVG9vbFRpcFBhbmVsIDogTlNQYW5lbAotQGVuZAotCi1AaW50ZXJmYWNlIE5TVG9v
bFRpcFBhbmVsIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIE5TVG9vbFRpcFBhbmVsIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQotLSAodm9pZClz
ZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czooQk9PTClmbGFnCi17Ci0gICAgLy8gRG8gbm90aGlu
ZywgcHJldmVudGluZyB0aGUgdG9vbCB0aXAgcGFuZWwgZnJvbSB0cnlpbmcgdG8gYWNjZXB0IG1v
dXNlLW1vdmVkIGV2ZW50cy4KLX0KLQotQGVuZAotCi0jZW5kaWYKLQotQGludGVyZmFjZSBOU0Fy
cmF5IChXZWJIVE1MVmlldykKLS0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2Vs
ZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3Q7Ci1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBXZWJIVE1MVmlldwotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSAgICBbTlNB
cHAgcmVnaXN0ZXJTZXJ2aWNlc01lbnVTZW5kVHlwZXM6W1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9u
UGFzdGVib2FyZFR5cGVzXSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlw
ZXM6W1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc11dOwotICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIFdl
YkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7Ci0jZW5kaWYKLX0KLQotLSAoaWQp
aW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lCi17Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0
aEZyYW1lOmZyYW1lXTsKLSAgICBpZiAoIXNlbGYpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
Ci0gICAgW3NlbGYgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVOb25lXTsKLSAgICAK
LSAgICAvLyBNYWtlIGFsbCBkcmF3aW5nIGdvIHRocm91Z2ggdXMgaW5zdGVhZCBvZiBzdWJ2aWV3
cy4KLSAgICBbc2VsZiBfc2V0RHJhd3NPd25EZXNjZW5kYW50czpZRVNdOwotICAgIAotICAgIF9w
cml2YXRlID0gW1tXZWJIVE1MVmlld1ByaXZhdGUgYWxsb2NdIGluaXRdOwotCi0gICAgX3ByaXZh
dGUtPnBsdWdpbkNvbnRyb2xsZXIgPSBbW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRX
aXRoRG9jdW1lbnRWaWV3OnNlbGZdOwotICAgIAotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1h
aW5UaHJlYWQoW1dlYkhUTUxWaWV3IGNsYXNzXSwgc2VsZikpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFdlIGNhbid0IGFzc2VydCB0aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVk
IGJlY2F1c2UKLSAgICAvLyB0aGlzIHZpZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVy
dmlldywgZXZlbiB0aG91Z2gKLSAgICAvLyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNs
b3NlIGlmIG5lZWRlZC4KLSAgICBbc2VsZiBjbG9zZV07Ci0gICAgW19wcml2YXRlIHJlbGVhc2Vd
OwotICAgIF9wcml2YXRlID0gbmlsOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9p
ZClmaW5hbGl6ZQotewotICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwotICAgIC8vIFdlIGNhbid0
IGFzc2VydCB0aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGJlY2F1c2UKLSAgICAv
LyB0aGlzIHZpZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldywgZXZlbiB0aG91
Z2gKLSAgICAvLyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNsb3NlIGlmIG5lZWRlZC4K
LSAgICBbc2VsZiBjbG9zZV07Ci0gICAgW3N1cGVyIGZpbmFsaXplXTsKLX0KLQotLy8gUmV0dXJu
cyBZRVMgaWYgdGhlIGRlbGVnYXRlIHJldHVybnMgWUVTIChzbyB3ZSBzaG91bGQgZG8gbm8gbW9y
ZSB3b3JrKS4KLS0gKEJPT0wpY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVk
OihTRUwpc2VsZWN0b3IKLXsKLSAgICBCT09MIGNhbGxlckFscmVhZHlDYWxsZWREZWxlZ2F0ZSA9
IF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPT0gc2VsZWN0b3I7Ci0g
ICAgX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IDA7Ci0gICAgaWYg
KGNhbGxlckFscmVhZHlDYWxsZWREZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIFdl
YlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgcmV0dXJuIFtbd2ViVmlldyBf
ZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21tYW5kQnlTZWxl
Y3RvcjpzZWxlY3Rvcl07Ci19Ci0KLXN0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3Rv
cihTRUwgc2VsZWN0b3IpCi17Ci0gICAgLy8gQ2hhbmdlIGEgZmV3IGNvbW1hbmQgbmFtZXMgaW50
byBvbmVzIHN1cHBvcnRlZCBieSBXZWJDb3JlOjpFZGl0b3IuCi0gICAgLy8gSWYgdGhpcyBsaXN0
IGdldHMgdG9vIGxvbmcgd2UgbWlnaHQgZGVjaWRlIHdlIG5lZWQgdG8gdXNlIGEgaGFzaCB0YWJs
ZS4KLSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydFBhcmFncmFwaFNlcGFyYXRv
cjopIHx8IHNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVk
aXRvcjopKQotICAgICAgICByZXR1cm4gIkluc2VydE5ld2xpbmUiOwotICAgIGlmIChzZWxlY3Rv
ciA9PSBAc2VsZWN0b3IoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjopKQotICAgICAgICBy
ZXR1cm4gIkluc2VydFRhYiI7Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihwYWdlRG93
bjopKQotICAgICAgICByZXR1cm4gIk1vdmVQYWdlRG93biI7Ci0gICAgaWYgKHNlbGVjdG9yID09
IEBzZWxlY3RvcihwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbjopKQotICAgICAgICByZXR1cm4g
Ik1vdmVQYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbiI7Ci0gICAgaWYgKHNlbGVjdG9yID09IEBz
ZWxlY3RvcihwYWdlVXA6KSkKLSAgICAgICAgcmV0dXJuICJNb3ZlUGFnZVVwIjsKLSAgICBpZiAo
c2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjopKQotICAgICAg
ICByZXR1cm4gIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iOwotCi0gICAgLy8gUmVtb3Zl
IHRoZSB0cmFpbGluZyBjb2xvbi4KLSAgICBjb25zdCBjaGFyKiBzZWxlY3Rvck5hbWUgPSBzZWxf
Z2V0TmFtZShzZWxlY3Rvcik7Ci0gICAgc2l6ZV90IHNlbGVjdG9yTmFtZUxlbmd0aCA9IHN0cmxl
bihzZWxlY3Rvck5hbWUpOwotICAgIGlmIChzZWxlY3Rvck5hbWVMZW5ndGggPCAyIHx8IHNlbGVj
dG9yTmFtZVtzZWxlY3Rvck5hbWVMZW5ndGggLSAxXSAhPSAnOicpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLSAgICByZXR1cm4gU3RyaW5nKHNlbGVjdG9yTmFtZSwgc2VsZWN0b3JOYW1lTGVu
Z3RoIC0gMSk7Ci19Ci0KLS0gKEVkaXRvcjo6Q29tbWFuZCljb3JlQ29tbWFuZEJ5U2VsZWN0b3I6
KFNFTClzZWxlY3RvcgotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gRWRpdG9yOjpDb21tYW5k
KCk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWVG
b3JTZWxlY3RvcihzZWxlY3RvcikpOwotfQotCi0tIChFZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1h
bmRCeU5hbWU6KGNvbnN0IGNoYXIqKW5hbWUKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIEVk
aXRvcjo6Q29tbWFuZCgpOwotICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb21tYW5k
KG5hbWUpOwotfQotCi0tICh2b2lkKWV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClz
ZWxlY3RvcgotewotICAgIGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9y
SWZOZWVkZWQ6c2VsZWN0b3JdKQotICAgICAgICByZXR1cm47Ci0gICAgW3NlbGYgY29yZUNvbW1h
bmRCeVNlbGVjdG9yOnNlbGVjdG9yXS5leGVjdXRlKCk7Ci19Ci0KLS0gKHZvaWQpZXhlY3V0ZUNv
cmVDb21tYW5kQnlOYW1lOihjb25zdCBjaGFyKiluYW1lCi17Ci0gICAgW3NlbGYgY29yZUNvbW1h
bmRCeU5hbWU6bmFtZV0uZXhlY3V0ZSgpOwotfQotCi0vLyBUaGVzZSBjb21tYW5kcyBhcmUgZm9y
d2FyZGVkIHRvIHRoZSBFZGl0b3Igb2JqZWN0IGluIFdlYkNvcmUuCi0vLyBJZGVhbGx5IHdlJ2Qg
ZG8gdGhpcyBmb3IgYWxsIGVkaXRpbmcgY29tbWFuZHM7IG1vcmUgb2YgdGhlIGNvZGUKLS8vIHNo
b3VsZCBiZSBtb3ZlZCBmcm9tIGhlcmUgdG8gdGhlcmUsIGFuZCBtb3JlIGNvbW1hbmRzIHNob3Vs
ZCBiZQotLy8gYWRkZWQgdG8gdGhpcyBsaXN0LgotCi0vLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxk
IHNldCB0aGluZ3MgdXAgc28gdGhhdCBhbGwgdGhlc2Ugc2hhcmUgYSBzaW5nbGUgbWV0aG9kIGlt
cGxlbWVudGF0aW9uIGZ1bmN0aW9uLgotLy8gVGhlIGZ1bmN0aW9ucyBhcmUgaWRlbnRpY2FsLgot
Ci0jZGVmaW5lIFdFQkNPUkVfQ09NTUFORChjb21tYW5kKSAtICh2b2lkKWNvbW1hbmQ6KGlkKXNl
bmRlciB7IFtzZWxmIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0b3I6X2NtZF07IH0KLQotV0VC
Q09SRV9DT01NQU5EKGFsaWduQ2VudGVyKQotV0VCQ09SRV9DT01NQU5EKGFsaWduSnVzdGlmaWVk
KQotV0VCQ09SRV9DT01NQU5EKGFsaWduTGVmdCkKLVdFQkNPUkVfQ09NTUFORChhbGlnblJpZ2h0
KQotV0VCQ09SRV9DT01NQU5EKGNvcHkpCi1XRUJDT1JFX0NPTU1BTkQoY3V0KQotV0VCQ09SRV9D
T01NQU5EKGRlbGV0ZSkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVCYWNrd2FyZCkKLVdFQkNPUkVf
Q09NTUFORChkZWxldGVCYWNrd2FyZEJ5RGVjb21wb3NpbmdQcmV2aW91c0NoYXJhY3RlcikKLVdF
QkNPUkVfQ09NTUFORChkZWxldGVGb3J3YXJkKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVn
aW5uaW5nT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3Jh
cGgpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9FbmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQo
ZGVsZXRlVG9FbmRPZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb01hcmspCi1X
RUJDT1JFX0NPTU1BTkQoZGVsZXRlV29yZEJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0
ZVdvcmRGb3J3YXJkKQotV0VCQ09SRV9DT01NQU5EKGlnbm9yZVNwZWxsaW5nKQotV0VCQ09SRV9D
T01NQU5EKGluZGVudCkKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRCYWNrdGFiKQotV0VCQ09SRV9D
T01NQU5EKGluc2VydExpbmVCcmVhaykKLVdFQkNPUkVfQ09NTUFORChpbnNlcnROZXdsaW5lKQot
V0VCQ09SRV9DT01NQU5EKGluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yKQotV0VCQ09S
RV9DT01NQU5EKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcikKLVdFQkNPUkVfQ09NTUFORChpbnNl
cnRUYWIpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcikKLVdF
QkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCkKLVdFQkNP
UkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQotV0VCQ09SRV9DT01N
QU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KQotV0VCQ09SRV9DT01NQU5E
KG1vdmVCYWNrd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxl
Y3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZURvd24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZURv
d25BbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZUZvcndhcmQpCi1XRUJD
T1JFX0NPTU1BTkQobW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1B
TkQobW92ZUxlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24p
Ci1XRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9u
KQotV0VCQ09SRV9DT01NQU5EKG1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9u
KQotV0VCQ09SRV9DT01NQU5EKG1vdmVSaWdodCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlUmlnaHRB
bmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZEb2N1
bWVudCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5
U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGluZSkKLVdFQkNP
UkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJD
T1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpCi1XRUJDT1JFX0NPTU1BTkQo
bW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NP
TU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9C
ZWdpbm5pbmdPZlNlbnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0VuZE9mRG9jdW1lbnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZEb2N1bWVudEFu
ZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmUpCi1XRUJD
T1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9D
T01NQU5EKG1vdmVUb0VuZE9mUGFyYWdyYXBoKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9m
UGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9m
U2VudGVuY2UpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50ZW5jZUFuZE1vZGlmeVNl
bGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5kT2ZMaW5lKQotV0VCQ09SRV9D
T01NQU5EKG1vdmVUb0xlZnRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NP
TU1BTkQobW92ZVRvUmlnaHRFbmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvUmlnaHRF
bmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVVwKQotV0VC
Q09SRV9DT01NQU5EKG1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORCht
b3ZlV29yZEJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkQmFja3dhcmRBbmRNb2Rp
ZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkKQotV0VCQ09SRV9D
T01NQU5EKG1vdmVXb3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFO
RChtb3ZlV29yZExlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2Vs
ZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHQpCi1XRUJDT1JFX0NPTU1BTkQo
bW92ZVdvcmRSaWdodEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChvdXRkZW50
KQotV0VCQ09SRV9DT01NQU5EKHBhZ2VEb3duKQotV0VCQ09SRV9DT01NQU5EKHBhZ2VEb3duQW5k
TW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKHBhZ2VVcCkKLVdFQkNPUkVfQ09NTUFO
RChwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0QWxsKQot
V0VCQ09SRV9DT01NQU5EKHNlbGVjdExpbmUpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0UGFyYWdy
YXBoKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdFNlbnRlbmNlKQotV0VCQ09SRV9DT01NQU5EKHNl
bGVjdFRvTWFyaykKLVdFQkNPUkVfQ09NTUFORChzZWxlY3RXb3JkKQotV0VCQ09SRV9DT01NQU5E
KHNldE1hcmspCi1XRUJDT1JFX0NPTU1BTkQoc3Vic2NyaXB0KQotV0VCQ09SRV9DT01NQU5EKHN1
cGVyc2NyaXB0KQotV0VCQ09SRV9DT01NQU5EKHN3YXBXaXRoTWFyaykKLVdFQkNPUkVfQ09NTUFO
RCh0cmFuc3Bvc2UpCi1XRUJDT1JFX0NPTU1BTkQodW5kZXJsaW5lKQotV0VCQ09SRV9DT01NQU5E
KHVuc2NyaXB0KQotV0VCQ09SRV9DT01NQU5EKHlhbmspCi1XRUJDT1JFX0NPTU1BTkQoeWFua0Fu
ZFNlbGVjdCkKLQotI3VuZGVmIFdFQkNPUkVfQ09NTUFORAotCi0jZGVmaW5lIENPTU1BTkRfUFJP
TE9HVUUgaWYgKFtzZWxmIGNhbGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDpf
Y21kXSkgcmV0dXJuOwotCi0tIChJQkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIGlmICghW3NlbGYgX2hh
c1NlbGVjdGlvbl0pIHsKLSAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBbTlNQYXN0ZWJvYXJkIF93ZWJfc2V0RmluZFBhc3RlYm9hcmRTdHJpbmc6W3NlbGYg
c2VsZWN0ZWRTdHJpbmddIHdpdGhPd25lcjpzZWxmXTsKLX0KLQotLSAoQk9PTCl3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCB0eXBlczooTlNBcnJh
eSAqKXR5cGVzCi17Ci0gICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOltz
ZWxmIF90b3BIVE1MVmlld11dOwotICAgIFtzZWxmIHdyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9h
cmRUeXBlczp0eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0gICAgcmV0dXJuIFlFUzsK
LX0KLQotLSAoQk9PTClyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAq
KXBhc3RlYm9hcmQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIGlmIChjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQotICAgICAgICBb
c2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OllFU107
Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJk
OnBhc3RlYm9hcmRdOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKGlkKXZhbGlkUmVxdWVzdG9y
Rm9yU2VuZFR5cGU6KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNTdHJpbmcgKily
ZXR1cm5UeXBlCi17Ci0gICAgQk9PTCBpc1NlbmRUeXBlT0sgPSAhc2VuZFR5cGUgfHwgKFtbc2Vs
ZiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb25dIGNvbnRhaW5zT2JqZWN0OnNlbmRUeXBlXSAm
JiBbc2VsZiBfaGFzU2VsZWN0aW9uXSk7Ci0gICAgQk9PTCBpc1JldHVyblR5cGVPSyA9ICFyZXR1
cm5UeXBlIHx8IChbW1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc10gY29u
dGFpbnNPYmplY3Q6cmV0dXJuVHlwZV0gJiYgW3NlbGYgX2lzRWRpdGFibGVdKTsKLSAgICBpZiAo
aXNTZW5kVHlwZU9LICYmIGlzUmV0dXJuVHlwZU9LKQotICAgICAgICByZXR1cm4gc2VsZjsKLSAg
ICByZXR1cm4gW1tzZWxmIG5leHRSZXNwb25kZXJdIHZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6
c2VuZFR5cGUgcmV0dXJuVHlwZTpyZXR1cm5UeXBlXTsKLX0KLQotLy8ganVtcFRvU2VsZWN0aW9u
IGlzIHRoZSBvbGQgbmFtZSBmb3Igd2hhdCBBcHBLaXQgbm93IGNhbGxzIGNlbnRlclNlbGVjdGlv
bkluVmlzaWJsZUFyZWEuIFNhZmFyaQotLy8gd2FzIHVzaW5nIHRoZSBvbGQganVtcFRvU2VsZWN0
aW9uIHNlbGVjdG9yIGluIGl0cyBtZW51LiBOZXdlciB2ZXJzaW9ucyBvZiBTYWZhcmkgd2lsbCB1
c2UgdGhlCi0vLyBzZWxlY3RvciBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBXZSdsbCBs
ZWF2ZSB0aGUgb2xkIHNlbGVjdG9yIGluIHBsYWNlIGZvciB0d28gcmVhc29uczoKLS8vICgxKSBD
b21wYXRpYmlsaXR5IGJldHdlZW4gb2xkZXIgU2FmYXJpIGFuZCBuZXdlciBXZWJLaXQ7ICgyKSBv
dGhlciBXZWJLaXQtYmFzZWQgYXBwbGljYXRpb25zCi0vLyBtaWdodCBiZSB1c2luZyB0aGUgc2Vs
ZWN0b3IsIGFuZCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZW0uCi0tICh2b2lkKWp1bXBUb1Nl
bGVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUt
PnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKLX0K
LQotLSAoTlNDZWxsU3RhdGVWYWx1ZSlzZWxlY3Rpb25IYXNTdHlsZTooQ1NTU3R5bGVEZWNsYXJh
dGlvbiopc3R5bGUKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5TT2ZmU3RhdGU7Ci0gICAg
cmV0dXJuIGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZSkp
OwotfQotCi0tIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6
KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCi17Ci0gICAgU0VMIGFjdGlv
biA9IFtpdGVtIGFjdGlvbl07Ci0gICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7Ci0KLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0g
ICAgaWYgKERvY3VtZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgewotICAgICAgICBpZiAo
ZG9jLT5pc1BsdWdpbkRvY3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAg
IGlmIChkb2MtPmlzSW1hZ2VEb2N1bWVudCgpKSB7ICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoYWN0aW9uID09IEBzZWxlY3Rvcihjb3B5OikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZy
YW1lLT5sb2FkZXIoKS0+aXNDb21wbGV0ZSgpOwotICAgICAgICAgICAgcmV0dXJuIE5POwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlU3BlbGxp
bmc6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfY2hhbmdlU3BlbGxpbmdG
cm9tTWVudTopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoZWNrU3BlbGxp
bmc6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihjb21wbGV0ZTopCi0gICAg
ICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlRm9udDopKQotICAgICAgICByZXR1
cm4gW3NlbGYgX2NhbkVkaXRdOwotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc2hvd0d1
ZXNzUGFuZWw6KSkgewotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgICAgICAvLyBNYXRj
aCBPUyBYIEFwcEtpdCBiZWhhdmlvciBmb3IgcG9zdC1UaWdlci4gRG9uJ3QgY2hhbmdlIFRpZ2Vy
IGJlaGF2aW9yLgotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICop
aXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNs
YXNzXV0pIHsKLSAgICAgICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNr
ZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOwotICAgICAg
ICAgICAgW21lbnVJdGVtIHNldFRpdGxlOnBhbmVsU2hvd2luZwotICAgICAgICAgICAgICAgID8g
VUlfU1RSSU5HKCJIaWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIiwgIm1lbnUgaXRlbSB0aXRsZSIp
Ci0gICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlNob3cgU3BlbGxpbmcgYW5kIEdyYW1tYXIi
LCAibWVudSBpdGVtIHRpdGxlIildOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJu
IFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IoY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb246KQotICAgICAgICAgICAgfHwgYWN0aW9uID09
IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDopCi0gICAgICAg
ICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0
VG9MZWZ0OikpIHsKLSAgICAgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb247
Ci0KLSAgICAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQmFzZVdyaXRpbmdEaXJl
Y3Rpb246KSkgewotICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PE5T
V3JpdGluZ0RpcmVjdGlvbj4oW2l0ZW0gdGFnXSk7Ci0gICAgICAgICAgICBpZiAod3JpdGluZ0Rp
cmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQotICAgICAgICAgICAgICAgIHJl
dHVybiBOTzsKLSAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNl
V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OikpCi0gICAgICAgICAgICB3cml0aW5nRGlyZWN0
aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsK
LQotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAg
ICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsK
LSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoImRpcmVjdGlvbiIsIHdyaXRpbmdE
aXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyAiTFRSIiA6ICJSVEwi
LCBlYyk7Ci0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6ZnJhbWUtPmVkaXRvcigpLT5z
ZWxlY3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSldOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
bWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTmF0dXJhbDopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0g
Km1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlz
S2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBz
ZXRTdGF0ZTpOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIE5POwotICAgIH0KLQotICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0aW9uOikpIHsKLSAg
ICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAg
IGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwot
ICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCAiUlRMIiwgZWMpOwot
ICAgICAgICAgICAgLy8gVGFrZSBjb250cm9sIG9mIHRoZSB0aXRsZSBvZiB0aGUgbWVudSBpdGVt
IGluc3RlYWQgb2YganVzdCBjaGVja2luZy91bmNoZWNraW5nIGl0IGJlY2F1c2UKLSAgICAgICAg
ICAgIC8vIGEgY2hlY2sgd291bGQgYmUgYW1iaWd1b3VzLgotICAgICAgICAgICAgW21lbnVJdGVt
IHNldFRpdGxlOmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkp
Ci0gICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkxlZnQgdG8gUmlnaHQiLCAiTGVmdCB0byBS
aWdodCBjb250ZXh0IG1lbnUgaXRlbSIpCi0gICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlJp
Z2h0IHRvIExlZnQiLCAiUmlnaHQgdG8gTGVmdCBjb250ZXh0IG1lbnUgaXRlbSIpXTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0gCi0gICAgCi0gICAg
aWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQXR0cmlidXRlczopCi0gICAgICAgICAgICB8
fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUNvbG9yOikgICAgICAgIAotICAgICAgICAgICAg
fHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VGb250OikpCi0gICAgICAgIHJldHVybiBbc2Vs
ZiBfY2FuRWRpdFJpY2hseV07Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2Fw
aXRhbGl6ZVdvcmQ6KQotICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihsb3dl
cmNhc2VXb3JkOikKLSAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodXBwZXJj
YXNlV29yZDopKQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl0gJiYgW3NlbGYg
X2lzRWRpdGFibGVdOwotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2VudGVyU2VsZWN0
aW9uSW5WaXNpYmxlQXJlYTopCi0gICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9y
KGp1bXBUb1NlbGVjdGlvbjopCi0gICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9y
KGNvcHlGb250OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXSB8fCAoW3Nl
bGYgX2lzRWRpdGFibGVdICYmIFtzZWxmIF9oYXNJbnNlcnRpb25Qb2ludF0pOwotICAgIAotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOikp
Ci0gICAgICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzRWRpdGFibGVdICYmIFtzZWxmIF9j
YW5FZGl0UmljaGx5XTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfaWdub3Jl
U3BlbGxpbmdGcm9tTWVudTopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKF9s
ZWFyblNwZWxsaW5nRnJvbU1lbnU6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rv
cih0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9o
YXNTZWxlY3Rpb25dOwotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlOikg
fHwgYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZUFzUGxhaW5UZXh0OikpCi0gICAgICAgIHJldHVy
biBmcmFtZSAmJiAoZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVk
aXRvcigpLT5jYW5QYXN0ZSgpKTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihw
YXN0ZUFzUmljaFRleHQ6KSkKLSAgICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9y
KCktPmNhbkRIVE1MUGFzdGUoKQotICAgICAgICAgICAgfHwgKGZyYW1lLT5lZGl0b3IoKS0+Y2Fu
UGFzdGUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
KTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBhbmVsQWN0
aW9uOikpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KSkKLSAgICAgICAgcmV0dXJuIFtzZWxm
IF9oYXNTZWxlY3Rpb25dOwotICAgIAotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUdyYW1tYXJDaGVja2luZzopKSB7Ci0gICAgICAg
IC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3Jh
bW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCi0gICAgICAgIC8vIHRo
ZSBzZWxlY3RvciBoZXJlIGJlY2F1c2Ugd2UgaW1wbGVtZW50IGl0IGhlcmUsIGFuZCB3ZSBtdXN0
IGltcGxlbWVudCBpdCBoZXJlIGJlY2F1c2UgdGhlIEFwcEtpdCAKLSAgICAgICAgLy8gY29kZSBj
aGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0g
PSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFz
czpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltz
ZWxmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsK
LSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKG9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6KSkgewotICAg
ICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAg
aWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKLSAgICAg
ICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXSBzdWJzdGl0dXRpb25zUGFuZWxdIGlzVmlzaWJsZV07Ci0gICAgICAgICAgICBbbWVu
dUl0ZW0gc2V0VGl0bGU6cGFuZWxTaG93aW5nCi0gICAgICAgICAgICAgICAgPyBVSV9TVFJJTkco
IkhpZGUgU3Vic3RpdHV0aW9ucyIsICJtZW51IGl0ZW0gdGl0bGUiKQotICAgICAgICAgICAgICAg
IDogVUlfU1RSSU5HKCJTaG93IFN1YnN0aXR1dGlvbnMiLCAibWVudSBpdGVtIHRpdGxlIildOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotICAgIC8v
IEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgbG9naWMs
IGJ1dCB3ZSBtdXN0IHZhbGlkYXRlIAotICAgIC8vIHRoZSBzZWxlY3RvciBoZXJlIGJlY2F1c2Ug
d2UgaW1wbGVtZW50IGl0IGhlcmUsIGFuZCB3ZSBtdXN0IGltcGxlbWVudCBpdCBoZXJlIGJlY2F1
c2UgdGhlIEFwcEtpdCAKLSAgICAvLyBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgot
ICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOikpIHsK
LSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAg
ICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAg
ICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5F
ZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGlj
UXVvdGVTdWJzdGl0dXRpb246KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChO
U01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltO
U01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYg
aXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZT
dGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KSkgewotICAg
ICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAg
aWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAg
ICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9j
YW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21h
dGljRGFzaFN1YnN0aXR1dGlvbjopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2Vs
ZiBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2Zm
U3RhdGVdOwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KSkgewot
ICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAg
ICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAg
ICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1l
bnRFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gW3Nl
bGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51
SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRP
ZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3Rh
dGU6W3NlbGYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkXSA/IE5TT25TdGF0
ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0K
LSNlbmRpZgotICAgIAotICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gW3NlbGYgY29yZUNv
bW1hbmRCeVNlbGVjdG9yOmFjdGlvbl07Ci0gICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkg
ewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAg
ICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0g
ICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6a2l0KGNvbW1hbmQuc3RhdGUoKSldOwotICAg
ICAgICByZXR1cm4gY29tbWFuZC5pc0VuYWJsZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gWUVT
OwotfQotCi0tIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRl
ZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCi17Ci0gICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1
cmluZyB0ZWFyZG93biB3aGVuIF93ZWJWaWV3IGlzIG5pbC4gUmV0dXJuIE5PIHdoZW4gdGhpcyBo
YXBwZW5zLCBiZWNhdXNlIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbgotICAgIC8vIGFz
c3VtZXMgdGhlIFdlYlZJZXcgaXMgbm9uLW5pbC4KLSAgICBpZiAoIVtzZWxmIF93ZWJWaWV3XSkK
LSAgICAgICAgcmV0dXJuIE5POwotICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgdmFsaWRhdGVVc2Vy
SW50ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTppdGVtXTsKLSAgICByZXR1cm4gQ2FsbFVJRGVs
ZWdhdGVSZXR1cm5pbmdCb29sZWFuKHJlc3VsdCwgW3NlbGYgX3dlYlZpZXddLCBAc2VsZWN0b3Io
d2ViVmlldzp2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOmRlZmF1bHRWYWxpZGF0aW9uOiksIGl0
ZW0sIHJlc3VsdCk7Ci19Ci0KLS0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCi17Ci0gICAg
Ly8gRG9uJ3QgYWNjZXB0IGZpcnN0IHJlc3BvbmRlciB3aGVuIHdlIGZpcnN0IGNsaWNrIG9uIHRo
aXMgdmlldy4KLSAgICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIGV2ZW50IGRvd24gdGhyb3VnaCBX
ZWJDb3JlIGZpcnN0IHRvIGJlIHN1cmUgd2UgZG9uJ3QgaGl0IGEgc3Vidmlldy4KLSAgICAvLyBE
byBhY2NlcHQgZmlyc3QgcmVzcG9uZGVyIGF0IGFueSBvdGhlciB0aW1lLCBmb3IgZXhhbXBsZSBm
cm9tIGtleWJvYXJkIGV2ZW50cywKLSAgICAvLyBvciBmcm9tIGNhbGxzIGJhY2sgZnJvbSBXZWJD
b3JlIG9uY2Ugd2UgYmVnaW4gbW91c2UtZG93biBldmVudCBoYW5kbGluZy4KLSAgICBOU0V2ZW50
ICpldmVudCA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAgIGlmIChbZXZlbnQgdHlwZV0gPT0g
TlNMZWZ0TW91c2VEb3duCi0gICAgICAgICAgICAmJiAhX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VE
b3duRXZlbnQKLSAgICAgICAgICAgICYmIE5TUG9pbnRJblJlY3QoW2V2ZW50IGxvY2F0aW9uSW5X
aW5kb3ddLCBbc2VsZiBjb252ZXJ0UmVjdDpbc2VsZiB2aXNpYmxlUmVjdF0gdG9WaWV3Om5pbF0p
KSB7Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAo
Qk9PTCltYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbgotewotICAgIC8vIFRoaXMgbWV0aG9kIGhl
bHBzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBXZWJIVE1MVmlldyBzaG91bGQgbWFpbnRhaW4K
LSAgICAvLyBhbiBpbmFjdGl2ZSBzZWxlY3Rpb24gd2hlbiBpdCdzIG5vdCBmaXJzdCByZXNwb25k
ZXIuCi0gICAgLy8gVHJhZGl0aW9uYWxseSwgdGhlc2Ugdmlld3MgaGF2ZSBub3QgbWFpbnRhaW5l
ZCBzdWNoIHNlbGVjdGlvbnMsCi0gICAgLy8gY2xlYXJpbmcgdGhlbSB3aGVuIHRoZSB2aWV3IHdh
cyBub3QgZmlyc3QgcmVzcG9uZGVyLiBIb3dldmVyLAotICAgIC8vIHRvIGZpeCBidWdzIGxpa2Ug
dGhpcyBvbmU6Ci0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM2NzIwODg+OiAiRWRpdGFibGUgV2Vi
Vmlld3Mgc2hvdWxkIG1haW50YWluIGEgc2VsZWN0aW9uIGV2ZW4gCi0gICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2hlbiB0aGV5J3JlIG5vdCBmaXJzdFJlc3BvbmRlciIKLSAgICAv
LyBpdCB3YXMgZGVjaWRlZCB0byBhZGQgYSBzd2l0Y2ggdG8gYWN0IG1vcmUgbGlrZSBhbiBOU1Rl
eHRWaWV3LgotCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10gbWFpbnRhaW5zSW5hY3RpdmVTZWxl
Y3Rpb25dKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgLy8gUHJlZGljdCB0aGUgY2FzZSB3
aGVyZSB3ZSBhcmUgbG9zaW5nIGZpcnN0IHJlc3BvbmRlciBzdGF0dXMgb25seSB0bwotICAgIC8v
IGdhaW4gaXQgYmFjayBhZ2Fpbi4gV2FudCB0byBrZWVwIHRoZSBzZWxlY3Rpb24gaW4gdGhhdCBj
YXNlLgotICAgIGlkIG5leHRSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBfbmV3Rmlyc3RSZXNw
b25kZXJBZnRlclJlc2lnbmluZ107Ci0gICAgaWYgKFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xh
c3M6W05TU2Nyb2xsVmlldyBjbGFzc11dKSB7Ci0gICAgICAgIGlkIGNvbnRlbnRWaWV3ID0gW25l
eHRSZXNwb25kZXIgY29udGVudFZpZXddOwotICAgICAgICBpZiAoY29udGVudFZpZXcpCi0gICAg
ICAgICAgICBuZXh0UmVzcG9uZGVyID0gY29udGVudFZpZXc7Ci0gICAgfQotICAgIGlmIChbbmV4
dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU0NsaXBWaWV3IGNsYXNzXV0pIHsKLSAgICAgICAg
aWQgZG9jdW1lbnRWaWV3ID0gW25leHRSZXNwb25kZXIgZG9jdW1lbnRWaWV3XTsKLSAgICAgICAg
aWYgKGRvY3VtZW50VmlldykKLSAgICAgICAgICAgIG5leHRSZXNwb25kZXIgPSBkb2N1bWVudFZp
ZXc7Ci0gICAgfQotICAgIGlmIChuZXh0UmVzcG9uZGVyID09IHNlbGYpCi0gICAgICAgIHJldHVy
biBZRVM7Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICBib29sIHNlbGVjdGlvbklzRWRpdGFibGUgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKLSAgICBib29sIG5leHRSZXNwb25kZXJJc0lu
V2ViVmlldyA9IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dCi0g
ICAgICAgICYmIFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXdd
IG1haW5GcmFtZV0gZnJhbWVWaWV3XV07Ci0KLSAgICByZXR1cm4gc2VsZWN0aW9uSXNFZGl0YWJs
ZSAmJiBuZXh0UmVzcG9uZGVySXNJbldlYlZpZXc7Ci19Ci0KLS0gKHZvaWQpYWRkTW91c2VNb3Zl
ZE9ic2VydmVyCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB8fCAhW3NlbGYgX2lz
VG9wSFRNTFZpZXddIHx8IF9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9u
cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVW5sZXNzIHRoZSBEYXNoYm9hcmQgYXNrcyB1
cyB0byBkbyB0aGlzIGZvciBhbGwgd2luZG93cywga2VlcCBhbiBvYnNlcnZlciBnb2luZyBvbmx5
IGZvciB0aGUga2V5IHdpbmRvdy4KLSAgICBpZiAoIShbW3NlbGYgd2luZG93XSBpc0tleVdpbmRv
d10gCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgICAgICAgICAgfHwgW1tzZWxm
IF93ZWJWaWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNT
ZW5kTW91c2VFdmVudHNUb0FsbFdpbmRvd3NdCi0jZW5kaWYKLSAgICAgICAgKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihtb3VzZU1vdmVkTm90aWZpY2F0aW9uOikK
LSAgICAgICAgbmFtZTpXS01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6bmlsXTsKLSAg
ICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwotICAgIF9wcml2YXRlLT5vYnNlcnZpbmdN
b3VzZU1vdmVkTm90aWZpY2F0aW9ucyA9IHRydWU7Ci19Ci0KLS0gKHZvaWQpcmVtb3ZlTW91c2VN
b3ZlZE9ic2VydmVyCi17Ci0jaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQotICAgIC8vIERv
bid0IHJlbW92ZSB0aGUgb2JzZXJ2ZXIgaWYgd2UncmUgcnVubmluZyB0aGUgRGFzaGJvYXJkLgot
ICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRC
ZWhhdmlvckFsd2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10pCi0gICAgICAgIHJldHVy
bjsKLSNlbmRpZgotCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBfbW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQ6bmlsIG1vZGlmaWVyRmxhZ3M6MF07Ci0gICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNl
cnZlclVuY29uZGl0aW9uYWxseV07Ci19Ci0KLS0gKHZvaWQpYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJz
Ci17Ci0gICAgaWYgKF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBOU1ZpZXcgKnN1cGVydmlldyA9IFtzZWxmIHN1cGVydmll
d107Ci0gICAgaWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdpbmRvd10pCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0g
W05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25D
ZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2ZyYW1lT3JCb3VuZHND
aGFuZ2VkKSBuYW1lOk5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBl
cnZpZXddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IoX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkKSBuYW1lOk5TVmlld0JvdW5kc0RpZENo
YW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICAKLSAgICAvLyBJbiBhZGRp
dGlvbiB0byByZWdpc3RlcmluZyBmb3IgZnJhbWUvYm91bmRzIGNoYW5nZSBub3RpZmljYXRpb25z
LCBjYWxsIC1fZnJhbWVPckJvdW5kc0NoYW5nZWQuCi0gICAgLy8gSXQgd2lsbCBjaGVjayB0aGUg
Y3VycmVudCBzY3JvbGwgYWdhaW5zdCB0aGUgcHJldmlvdXMgbGF5b3V0J3Mgc2Nyb2xsLiAgV2Ug
bmVlZCB0bwotICAgIC8vIGRvIHRoaXMgaGVyZSB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGUg
V2ViVmlldyBpcyBsYWlkIG91dCBhdCBvbmUgc2l6ZSwgcmVtb3ZlZCBmcm9tIGl0cwotICAgIC8v
IHdpbmRvdywgcmVzaXplZCwgYW5kIGluc2VydGVkIGludG8gYW5vdGhlciB3aW5kb3cuICBPdXIg
ZnJhbWUvYm91bmRzIGNoYW5nZWQgbm90aWZpY2F0aW9ucwotICAgIC8vIHdpbGwgbm90IGJlIHNl
bnQgaW4gdGhhdCBzaXR1YXRpb24sIHNpbmNlIHdlIG9ubHkgd2F0Y2ggZm9yIGNoYW5nZXMgd2hp
bGUgaW4gdGhlIHZpZXcgaGllcmFyY2h5LgotICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdl
ZF07Ci0gICAgCi0gICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMg
PSB0cnVlOwotfQotCi0tICh2b2lkKWFkZFdpbmRvd09ic2VydmVycwotewotICAgIGlmIChfcHJp
dmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIGlmICghd2luZG93
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlm
aWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAg
ICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KHdpbmRvd0RpZEJlY29tZUtleTopIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRp
b24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWRSZXNpZ25LZXk6KSBuYW1lOk5TV2luZG93RGlk
UmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50
ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbENsb3NlOikg
bmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKLSAgICBb
bm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdp
bmRvd1dpbGxPcmRlck9uU2NyZWVuOikgbmFtZTpXS1dpbmRvd1dpbGxPcmRlck9uU2NyZWVuTm90
aWZpY2F0aW9uKCkgb2JqZWN0OndpbmRvd107Ci0gICAgCi0gICAgX3ByaXZhdGUtPm9ic2Vydmlu
Z1dpbmRvd05vdGlmaWNhdGlvbnMgPSB0cnVlOwotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92ZVRv
U3VwZXJ2aWV3OihOU1ZpZXcgKiluZXdTdXBlcnZpZXcKLXsKLSAgICBbc2VsZiBfcmVtb3ZlU3Vw
ZXJ2aWV3T2JzZXJ2ZXJzXTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3Ci17
Ci0gICAgaWYgKFtzZWxmIHN1cGVydmlld10gIT0gbmlsKQotICAgICAgICBbc2VsZiBhZGRTdXBl
cnZpZXdPYnNlcnZlcnNdOwotfQotCi1zdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlVGltZXJDYWxsYmFjayhDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCAqaW5mbykK
LXsKLSAgICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKWluZm87Ci0gICAgW3Zp
ZXcgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxN
b3ZlVG9XaW5kb3c6KE5TV2luZG93ICopd2luZG93Ci17Ci0gICAgLy8gRG9uJ3QgZG8gYW55dGhp
bmcgaWYgd2UgYXJlbid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBwZW5zCi0gICAgLy8gd2hlbiBk
ZWNvZGluZyBhIFdlYlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBkZWNvZGVkIHRoZWlyIHN1YnZp
ZXdzCi0gICAgLy8gYXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2RlcjogYW5kIHNvIHdvbid0IGJl
IG5vcm1hbGx5Ci0gICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1YiB2aWV3cyBhcmUgZGlzY2Fy
ZGVkIGJ5IFdlYlZpZXcuCi0gICAgaWYgKCFfcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRklYTUU6IFNvbWUgb2YgdGhlc2UgY2FsbHMgbWF5IG5vdCB3b3JrIGJlY2F1c2UgdGhp
cyB2aWV3IG1heSBiZSBhbHJlYWR5IHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldy4KLSAgICBb
c2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKLSAgICBbc2Vs
ZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKLSAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2Jz
ZXJ2ZXJzXTsKLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOwotICAgIFtz
ZWxmIF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07Ci0gICAgCi0gICAg
W1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBzdG9wQWxsUGx1Z2luc107Ci19Ci0KLS0gKHZvaWQp
dmlld0RpZE1vdmVUb1dpbmRvdwotewotICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGFy
ZW4ndCBpbml0aWFsaXplZC4gIFRoaXMgaGFwcGVucwotICAgIC8vIHdoZW4gZGVjb2RpbmcgYSBX
ZWJWaWV3LiAgV2hlbiBXZWJWaWV3cyBhcmUgZGVjb2RlZCB0aGVpciBzdWJ2aWV3cwotICAgIC8v
IGFyZSBjcmVhdGVkIGJ5IGluaXRXaXRoQ29kZXI6IGFuZCBzbyB3b24ndCBiZSBub3JtYWxseQot
ICAgIC8vIGluaXRpYWxpemVkLiAgVGhlIHN0dWIgdmlld3MgYXJlIGRpc2NhcmRlZCBieSBXZWJW
aWV3LgotICAgIGlmICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07Ci0gICAgaWYg
KFtzZWxmIHdpbmRvd10pIHsKLSAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9
IFtbc2VsZiBzdXBlcnZpZXddIGJvdW5kc10ub3JpZ2luOwotICAgICAgICBbc2VsZiBhZGRXaW5k
b3dPYnNlcnZlcnNdOwotICAgICAgICBbc2VsZiBhZGRTdXBlcnZpZXdPYnNlcnZlcnNdOwotICAg
ICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOwotCi0gICAgICAgIC8vIFNjaGVkdWxl
IHRoaXMgdXBkYXRlLCByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGNhbGwgcmlnaHQgbm93LgotICAg
ICAgICAvLyBUaGUgcmVhc29uIGlzIHRoYXQgcGxhY2luZyB0aGUgY2FyZXQgaW4gdGhlIGp1c3Qt
aW5zdGFsbGVkIHZpZXcgcmVxdWlyZXMKLSAgICAgICAgLy8gdGhlIEhUTUwvWE1MIGRvY3VtZW50
IHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgV2ViQ29yZSBzaWRlLCBidXQgaXQgaXMgbm90Ci0gICAg
ICAgIC8vIGF0IHRoZSB0aW1lIHRoaXMgY29kZSBpcyBydW5uaW5nLiBIb3dldmVyLCBpdCB3aWxs
IGJlIHRoZXJlIG9uIHRoZSBuZXh0Ci0gICAgICAgIC8vIGNyYW5rIG9mIHRoZSBydW4gbG9vcC4g
RG9pbmcgdGhpcyBoZWxwcyB0byBtYWtlIGEgYmxpbmtpbmcgY2FyZXQgYXBwZWFyIAotICAgICAg
ICAvLyBpbiBhIG5ldywgZW1wdHkgd2luZG93ICJhdXRvbWF0aWMiLgotICAgICAgICBpZiAoIV9w
cml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcikgewotICAgICAgICAgICAg
Q0ZSdW5Mb29wVGltZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIE5VTEwsIE5VTEwsIE5V
TEwgfTsKLSAgICAgICAgICAgIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVU
aW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKE5VTEwsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVu
dCgpLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGlt
ZXJDYWxsYmFjaywgJmNvbnRleHQpOwotICAgICAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZS
dW5Mb29wR2V0Q3VycmVudCgpLCBfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRl
VGltZXIsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gc3RhcnRBbGxQbHVnaW5zXTsKLQotICAgICAg
ICBfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gTlNaZXJvUG9pbnQ7Ci0gICAgfQotfQot
Ci0tICh2b2lkKXZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0V2luZG93
Ci17Ci0gICAgW1tzZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxl
Y3RvcjpAc2VsZWN0b3Iodmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93Oikgd2l0aE9iamVjdDpob3N0
V2luZG93XTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdwotewotICAgIFtb
c2VsZiBzdWJ2aWV3c10gX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVj
dG9yKHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93KSB3aXRoT2JqZWN0Om5pbF07Ci19Ci0KLQotLSAo
dm9pZClhZGRTdWJ2aWV3OihOU1ZpZXcgKil2aWV3Ci17Ci0gICAgW3N1cGVyIGFkZFN1YnZpZXc6
dmlld107Ci0KLSAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5WaWV3OnZpZXdd
KQotICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGFkZFBsdWdpbjp2aWV3XTsKLX0K
LQotLSAodm9pZCl3aWxsUmVtb3ZlU3VidmlldzooTlNWaWV3ICopc3VidmlldwotewotICAgIGlm
IChbV2ViUGx1Z2luQ29udHJvbGxlciBpc1BsdWdJblZpZXc6c3Vidmlld10pCi0gICAgICAgIFtb
c2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gZGVzdHJveVBsdWdpbjpzdWJ2aWV3XTsKLQotICAgIFtz
dXBlciB3aWxsUmVtb3ZlU3VidmlldzpzdWJ2aWV3XTsKLX0KLQotLSAodm9pZClyZWFwcGx5U3R5
bGVzCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0jaWZkZWYgTE9HX1RJTUVTCi0gICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0jZW5kaWYKLQotICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoRnJhbWVWaWV3KiBjb3JlVmll
dyA9IGNvcmVGcmFtZS0+dmlldygpKQotICAgICAgICAgICAgY29yZVZpZXctPnNldE1lZGlhVHlw
ZShfcHJpdmF0ZS0+cHJpbnRpbmcgPyAicHJpbnQiIDogInNjcmVlbiIpOwotICAgICAgICBpZiAo
RG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAg
ZG9jdW1lbnQtPnNldFByaW50aW5nKF9wcml2YXRlLT5wcmludGluZyk7Ci0gICAgICAgIGNvcmVG
cmFtZS0+cmVhcHBseVN0eWxlcygpOwotICAgIH0KLSAgICAKLSNpZmRlZiBMT0dfVElNRVMgICAg
ICAgIAotICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0g
c3RhcnQ7Ci0gICAgTE9HKFRpbWluZywgIiVzIGFwcGx5IHN0eWxlIHNlY29uZHMgPSAlZiIsIFtz
ZWxmIFVSTF0sIHRoaXNUaW1lKTsKLSNlbmRpZgotCi0gICAgX3ByaXZhdGUtPm5lZWRzVG9BcHBs
eVN0eWxlcyA9IE5POwotfQotCi0vLyBEbyBhIGxheW91dCwgYnV0IHNldCB1cCBhIG5ldyBmaXhl
ZCB3aWR0aCBmb3IgdGhlIHB1cnBvc2VzIG9mIGRvaW5nIHByaW50aW5nIGxheW91dC4KLS8vIG1p
blBhZ2VXaWR0aD09MCBpbXBsaWVzIGEgbm9uLXByaW50aW5nIGxheW91dAotLSAodm9pZClsYXlv
dXRUb01pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRo
OihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1Np
emUKLXsKLSAgICBbc2VsZiByZWFwcGx5U3R5bGVzXTsKLSAgICAKLSAgICBpZiAoIVtzZWxmIF9u
ZWVkc0xheW91dF0pCi0gICAgICAgIHJldHVybjsKLQotI2lmZGVmIExPR19USU1FUyAgICAgICAg
Ci0gICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0jZW5kaWYK
LQotICAgIExPRyhWaWV3LCAiJUAgZG9pbmcgbGF5b3V0Iiwgc2VsZik7Ci0KLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJhbWUt
PnZpZXcoKSkgewotICAgICAgICBpZiAobWluUGFnZVdpZHRoID4gMC4wKQotICAgICAgICAgICAg
Y29yZVZpZXctPmZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlKG1pblBhZ2VXaWR0aCwgbWF4
UGFnZVdpZHRoLCBhZGp1c3RWaWV3U2l6ZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Y29yZVZpZXctPmZvcmNlTGF5b3V0KCFhZGp1c3RWaWV3U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
YWRqdXN0Vmlld1NpemUpCi0gICAgICAgICAgICAgICAgY29yZVZpZXctPmFkanVzdFZpZXdTaXpl
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0jaWZkZWYgTE9HX1RJTUVTICAgICAgICAKLSAg
ICBkb3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0Owot
ICAgIExPRyhUaW1pbmcsICIlcyBsYXlvdXQgc2Vjb25kcyA9ICVmIiwgW3NlbGYgVVJMXSwgdGhp
c1RpbWUpOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpbGF5b3V0Ci17Ci0gICAgW3NlbGYgbGF5b3V0
VG9NaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdGluZ1Zp
ZXdTaXplOk5PXTsKLX0KLQotLy8gRGVsaXZlciBtb3VzZXVwIGV2ZW50cyB0byB0aGUgRE9NIGZv
ciBidXR0b24gMi4KLS0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKLXsKLSAg
ICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgd2UgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3Ag
dGhlIGV2ZW50IHdpbGwgYmUgcmVsZWFzZWQuCi0gICAgLy8gUmV0YWluaW5nIGFuZCB0aGVuIGF1
dG9yZWxlYXNpbmcgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGxhdGVyIGhl
cmUgb3IKLSAgICAvLyBpbnNpZGUgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1
dG9yZWxlYXNlXTsKLQotICAgIFtzdXBlciByaWdodE1vdXNlVXA6ZXZlbnRdOwotCi0gICAgaWYg
KEZyYW1lKiBjb3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZVVwKGV2ZW50KTsKLX0KLQotLSAoTlNNZW51ICopbWVu
dUZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRo
YXQgaWYgd2UgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AgdGhlIGV2ZW50IHdpbGwgYmUgcmVsZWFz
ZWQuCi0gICAgLy8gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcgcHJldmVudHMgdGhh
dCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGxhdGVyIGhlcmUgb3IKLSAgICAvLyBpbnNpZGUgQXBw
S2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIFtfcHJp
dmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsK
LQotICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFBhZ2UqIHBhZ2Ug
PSBjb3JlRnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICAvLyBNYXRjaCBiZWhhdmlvciBvZiBvdGhlciBicm93c2VycyBieSBzZW5kaW5nIGEg
bW91c2Vkb3duIGV2ZW50IGZvciByaWdodCBjbGlja3MuCi0gICAgX3ByaXZhdGUtPmhhbmRsaW5n
TW91c2VEb3duRXZlbnQgPSBZRVM7Ci0gICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkt
PmNsZWFyQ29udGV4dE1lbnUoKTsKLSAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3Vz
ZURvd24oZXZlbnQpOwotICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29yZUZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7
Ci0gICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBOTzsKLQotICAgIGlmICgh
aGFuZGxlZEV2ZW50KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gUmUtZ2V0IHBhZ2Us
IHNpbmNlIGl0IG1pZ2h0IGhhdmUgZ29uZSBhd2F5IGR1cmluZyBldmVudCBoYW5kbGluZy4KLSAg
ICBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gcGFnZS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCktPmNvbnRleHRNZW51KCk7Ci0gICAgaWYgKCFjb3JlTWVudSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIE5TQXJyYXkqIG1lbnVJdGVtcyA9IGNvcmVNZW51LT5wbGF0Zm9y
bURlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKCFtZW51SXRlbXMpCi0gICAgICAgIHJldHVybiBuaWw7
Ci0KLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW21lbnVJdGVtcyBjb3VudF07Ci0gICAgaWYgKCFj
b3VudCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TTWVudSogbWVudSA9IFtbW05TTWVu
dSBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgIFttZW51IGFkZEl0ZW06W21lbnVJdGVtcyBvYmplY3RB
dEluZGV4OmldXTsKLSAgICByZXR1cm4gbWVudTsKLX0KLQotLSAoQk9PTClzZWFyY2hGb3I6KE5T
U3RyaW5nICopc3RyaW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJP
T0wpY2FzZUZsYWcgd3JhcDooQk9PTCl3cmFwRmxhZwotewotICAgIHJldHVybiBbc2VsZiBzZWFy
Y2hGb3I6c3RyaW5nIGRpcmVjdGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3Jh
cDp3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOk5PXTsKLX0KLQotLSAodm9pZCljbGVhckZvY3Vz
Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYg
KCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBj
b3JlRnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKLX0KLQotLSAoQk9PTClp
c09wYXF1ZQotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFja2dyb3VuZF07
Ci19Ci0KLS0gKHZvaWQpc2V0TmVlZHNEaXNwbGF5OihCT09MKWZsYWcKLXsKLSAgICBMT0coVmll
dywgIiVAIHNldE5lZWRzRGlzcGxheTolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7
Ci0gICAgW3N1cGVyIHNldE5lZWRzRGlzcGxheTpmbGFnXTsKLX0KLQotLSAodm9pZClzZXROZWVk
c0xheW91dDogKEJPT0wpZmxhZwotewotICAgIExPRyhWaWV3LCAiJUAgc2V0TmVlZHNMYXlvdXQ6
JUAiLCBzZWxmLCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOwotICAgIGlmICghZmxhZykKLSAgICAg
ICAgcmV0dXJuOyAvLyBUaGVyZSdzIG5vIHdheSB0byBzYXkgeW91IGRvbid0IG5lZWQgYSBsYXlv
dXQuCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAg
ICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNo
ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
ZnJhbWUtPnZpZXcoKSkKLSAgICAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0KCk7Ci0gICAg
fQotfQotCi0tICh2b2lkKXNldE5lZWRzVG9BcHBseVN0eWxlczogKEJPT0wpZmxhZwotewotICAg
IExPRyhWaWV3LCAiJUAgc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiVAIiwgc2VsZiwgZmxhZyA/IEAi
WUVTIiA6IEAiTk8iKTsKLSAgICBfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzID0gZmxhZzsK
LX0KLQotLSAodm9pZClkcmF3U2luZ2xlUmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBbTlNHcmFw
aGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwotICAgIE5TUmVjdENsaXAocmVjdCk7Ci0g
ICAgICAgIAotICAgIEFTU0VSVChbW3NlbGYgc3VwZXJ2aWV3XSBpc0tpbmRPZkNsYXNzOltXZWJD
bGlwVmlldyBjbGFzc11dKTsKLQotICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXdd
IHNldEFkZGl0aW9uYWxDbGlwOnJlY3RdOwotCi0gICAgQHRyeSB7Ci0gICAgICAgIGlmIChbc2Vs
ZiBfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kXSkgewotICAgICAgICAgICAgW1tOU0NvbG9yIGNsZWFy
Q29sb3JdIHNldF07Ci0gICAgICAgICAgICBOU1JlY3RGaWxsIChyZWN0KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFtbc2VsZiBfZnJhbWVdIF9kcmF3UmVjdDpyZWN0IGNvbnRlbnRzT25seTpZRVNd
OwotCi0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0KLSAgICAg
ICAgLy8gVGhpcyBoYWNrIGlzIG5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMjM1NDU+LiBX
ZSBjYW4gaGl0IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgZHJhd1JlY3Qgd2lsbCBiZQotICAgICAg
ICAvLyBjYWxsZWQgYWZ0ZXIgdGhlIFdlYlZpZXcgaGFzIGNsb3NlZC4gSWYgdGhlIGNsaWVudCBk
aWQgbm90IHByb3Blcmx5IGNsb3NlIHRoZSBXZWJWaWV3IGFuZCBzZXQgdGhlIAotICAgICAgICAv
LyBVSURlbGVnYXRlIHRvIG5pbCwgdGhlbiB0aGUgVUlEZWxlZ2F0ZSB3aWxsIGJlIHN0YWxlIGFu
ZCB0aGlzIGNvZGUgd2lsbCBjcmFzaC4gCi0gICAgICAgIHN0YXRpYyBCT09MIHZlcnNpb24zT3JM
YXRlckNsaWVudCA9IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9X
SVRIT1VUX1FVSUNLQk9PS1NfUVVJUkspOwotICAgICAgICBpZiAodmVyc2lvbjNPckxhdGVyQ2xp
ZW50KQotICAgICAgICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3
OndlYlZpZXcgZGlkRHJhd1JlY3Q6W3dlYlZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpz
ZWxmXV07Ci0KLSAgICAgICAgaWYgKFdlYk5vZGVIaWdobGlnaHQgKmN1cnJlbnRIaWdobGlnaHQg
PSBbd2ViVmlldyBjdXJyZW50Tm9kZUhpZ2hsaWdodF0pCi0gICAgICAgICAgICBbY3VycmVudEhp
Z2hsaWdodCBzZXROZWVkc1VwZGF0ZUluVGFyZ2V0Vmlld1JlY3Q6W3NlbGYgY29udmVydFJlY3Q6
cmVjdCB0b1ZpZXc6W2N1cnJlbnRIaWdobGlnaHQgdGFyZ2V0Vmlld11dXTsKLQotICAgICAgICBb
KFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlwXTsKLQot
ICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwotICAgIH0g
QGNhdGNoIChOU0V4Y2VwdGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAgWyhXZWJDbGlw
VmlldyAqKVtzZWxmIHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07Ci0gICAgICAgIFtO
U0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07Ci0gICAgICAgIExPR19FUlJP
UigiRXhjZXB0aW9uIGNhdWdodCB3aGlsZSBkcmF3aW5nOiAlQCIsIGxvY2FsRXhjZXB0aW9uKTsK
LSAgICAgICAgW2xvY2FsRXhjZXB0aW9uIHJhaXNlXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpZHJh
d1JlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7Ci0gICAgTE9H
KFZpZXcsICIlQCBkcmF3aW5nIiwgc2VsZik7Ci0KLSAgICBjb25zdCBOU1JlY3QgKnJlY3RzOwot
ICAgIE5TSW50ZWdlciBjb3VudDsKLSAgICBbc2VsZiBnZXRSZWN0c0JlaW5nRHJhd246JnJlY3Rz
IGNvdW50OiZjb3VudF07Ci0KLSAgICBCT09MIHN1YnZpZXdzV2VyZVNldEFzaWRlID0gX3ByaXZh
dGUtPnN1YnZpZXdzU2V0QXNpZGU7Ci0gICAgaWYgKHN1YnZpZXdzV2VyZVNldEFzaWRlKQotICAg
ICAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsKLQotI2lmZGVmIExPR19USU1FUwotICAgIGRv
dWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlmCi0KLSAgICBp
ZiAoW1tzZWxmIF93ZWJWaWV3XSBfbXVzdERyYXdVbmlvbmVkUmVjdDpyZWN0IHNpbmdsZVJlY3Rz
OnJlY3RzIGNvdW50OmNvdW50XSkKLSAgICAgICAgW3NlbGYgZHJhd1NpbmdsZVJlY3Q6cmVjdF07
Ci0gICAgZWxzZQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAg
ICAgICAgICBbc2VsZiBkcmF3U2luZ2xlUmVjdDpyZWN0c1tpXV07Ci0KLSNpZmRlZiBMT0dfVElN
RVMKLSAgICBkb3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0
YXJ0OwotICAgIExPRyhUaW1pbmcsICIlcyBkcmF3IHNlY29uZHMgPSAlZiIsIHdpZGdldC0+cGFy
dCgpLT5iYXNlVVJMKCkuVVJMKCkubGF0aW4xKCksIHRoaXNUaW1lKTsKLSNlbmRpZgotCi0gICAg
aWYgKHN1YnZpZXdzV2VyZVNldEFzaWRlKQotICAgICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3
c107Ci0gICAgICAgIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAo
W1tzZWxmIF93ZWJWaWV3XSBfbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbl0pIHsK
LSAgICAgICAgLy8gRGlzYWJsZSBzY3JlZW4gdXBkYXRlcyBzbyB0aGF0IGRyYXdpbmcgaW50byB0
aGUgTlNWaWV3IGFuZAotICAgICAgICAvLyBDQUxheWVyIHVwZGF0ZXMgYXBwZWFyIG9uIHRoZSBz
Y3JlZW4gYXQgdGhlIHNhbWUgdGltZS4KLSAgICAgICAgW1tzZWxmIHdpbmRvd10gZGlzYWJsZVNj
cmVlblVwZGF0ZXNVbnRpbEZsdXNoXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hdOwot
ICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9zZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uOk5PXTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotLy8gVHVybiBvZmYgdGhlIGFkZGl0aW9u
YWwgY2xpcCB3aGlsZSBjb21wdXRpbmcgb3VyIHZpc2libGVSZWN0LgotLSAoTlNSZWN0KXZpc2li
bGVSZWN0Ci17Ci0gICAgaWYgKCEoW1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2Vi
Q2xpcFZpZXcgY2xhc3NdXSkpCi0gICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3RdOwot
ICAgICAgICAKLSAgICBXZWJDbGlwVmlldyAqY2xpcFZpZXcgPSAoV2ViQ2xpcFZpZXcgKilbc2Vs
ZiBzdXBlcnZpZXddOwotCi0gICAgQk9PTCBoYXNBZGRpdGlvbmFsQ2xpcCA9IFtjbGlwVmlldyBo
YXNBZGRpdGlvbmFsQ2xpcF07Ci0gICAgaWYgKCFoYXNBZGRpdGlvbmFsQ2xpcCkgewotICAgICAg
ICByZXR1cm4gW3N1cGVyIHZpc2libGVSZWN0XTsKLSAgICB9Ci0gICAgCi0gICAgTlNSZWN0IGFk
ZGl0aW9uYWxDbGlwID0gW2NsaXBWaWV3IGFkZGl0aW9uYWxDbGlwXTsKLSAgICBbY2xpcFZpZXcg
cmVzZXRBZGRpdGlvbmFsQ2xpcF07Ci0gICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW3N1cGVyIHZp
c2libGVSZWN0XTsKLSAgICBbY2xpcFZpZXcgc2V0QWRkaXRpb25hbENsaXA6YWRkaXRpb25hbENs
aXBdOwotICAgIHJldHVybiB2aXNpYmxlUmVjdDsKLX0KLQotLSAoQk9PTClpc0ZsaXBwZWQgCi17
Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAodm9pZCl3aW5kb3dEaWRCZWNvbWVLZXk6KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkg
ewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRoT2Jq
ZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIE5TV2luZG93ICprZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07Ci0K
LSAgICBpZiAoa2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10pCi0gICAgICAgIFtzZWxmIGFkZE1v
dXNlTW92ZWRPYnNlcnZlcl07Ci0KLSAgICBpZiAoa2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10g
fHwga2V5V2luZG93ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKQotICAgICAgICBb
c2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKLX0KLQotLSAodm9pZCl3aW5kb3dE
aWRSZXNpZ25LZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFw
dGhyZWFkX21haW5fbnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5U
aHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5TV2luZG93ICpmb3JtZXJLZXlXaW5kb3cgPSBb
bm90aWZpY2F0aW9uIG9iamVjdF07Ci0KLSAgICBpZiAoZm9ybWVyS2V5V2luZG93ID09IFtzZWxm
IHdpbmRvd10pCi0gICAgICAgIFtzZWxmIHJlbW92ZU1vdXNlTW92ZWRPYnNlcnZlcl07Ci0KLSAg
ICBpZiAoZm9ybWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwgZm9ybWVyS2V5V2luZG93
ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKSB7Ci0gICAgICAgIFtzZWxmIF91cGRh
dGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9s
bGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgfQotfQotCi0tICh2
b2lkKXdpbmRvd1dpbGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAg
ICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7Ci0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
ck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERvbmU6
Tk9dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgW19wcml2YXRlLT5jb21wQ29udHJv
bGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotICAgIFtbc2VsZiBfcGx1
Z2luQ29udHJvbGxlcl0gZGVzdHJveUFsbFBsdWdpbnNdOwotfQotCi0tICh2b2lkKXdpbmRvd1dp
bGxPcmRlck9uU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlm
ICghW1tzZWxmIF93ZWJWaWV3XSBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbl0pCi0gICAgICAg
IFtzZWxmIHNldE5lZWRzRGlzcGxheTpZRVNdOwotfQotCi0tICh2b2lkKXNjcm9sbFdoZWVsOihO
U0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGlu
ZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8v
IGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmlu
ZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVu
dHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNv
ZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT53aGVlbEV2ZW50KGV2ZW50KSkKLSAgICAgICAgW3N1cGVyIHNjcm9sbFdoZWVs
OmV2ZW50XTsKLX0KLQotLSAoQk9PTClfaXNTZWxlY3Rpb25FdmVudDooTlNFdmVudCAqKWV2ZW50
Ci17Ci0gICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRp
b25JbldpbmRvd10gZnJvbVZpZXc6bmlsXTsKLSAgICByZXR1cm4gW1tbc2VsZiBlbGVtZW50QXRQ
b2ludDpwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6WUVTXSBvYmplY3RGb3JLZXk6V2ViRWxlbWVu
dElzU2VsZWN0ZWRLZXldIGJvb2xWYWx1ZV07Ci19Ci0KLS0gKEJPT0wpYWNjZXB0c0ZpcnN0TW91
c2U6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNw
b25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0g
ICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0
YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBw
cmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBL
aXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgTlNWaWV3
ICpoaXRWaWV3ID0gW3NlbGYgX2hpdFZpZXdGb3JFdmVudDpldmVudF07Ci0gICAgV2ViSFRNTFZp
ZXcgKmhpdEhUTUxWaWV3ID0gW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8g
KFdlYkhUTUxWaWV3ICopaGl0VmlldyA6IG5pbDsKLSAgICAKLSNpZiBFTkFCTEUoREFTSEJPQVJE
X1NVUFBPUlQpCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldl
YkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzQWNjZXB0c0ZpcnN0TW91c2VdKQotICAgICAgICByZXR1
cm4gWUVTOwotI2VuZGlmCi0gICAgCi0gICAgaWYgKGhpdEhUTUxWaWV3KSB7Ci0gICAgICAgIGJv
b2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShb
aGl0SFRNTFZpZXcgX2ZyYW1lXSkpIHsKLSAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPnNldEFjdGl2YXRpb25FdmVudE51bWJlcihbZXZlbnQgZXZlbnROdW1iZXJdKTsKLSAg
ICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOwotICAgICAg
ICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVudDpldmVudF0pCi0gICAgICAg
ICAgICAgICAgcmVzdWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZlbnRNYXlTdGFy
dERyYWcoZXZlbnQpOwotICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVu
dDpuaWxdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHJl
dHVybiBbaGl0VmlldyBhY2NlcHRzRmlyc3RNb3VzZTpldmVudF07Ci19Ci0KLS0gKEJPT0wpc2hv
dWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAv
LyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVu
IGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1p
Z2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5n
Ci0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBw
cm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5d
IGF1dG9yZWxlYXNlXTsKLQotICAgIE5TVmlldyAqaGl0VmlldyA9IFtzZWxmIF9oaXRWaWV3Rm9y
RXZlbnQ6ZXZlbnRdOwotICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFtoaXRWaWV3IGlz
S2luZE9mQ2xhc3M6W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZpZXcgOiBuaWw7
Ci0gICAgaWYgKGhpdEhUTUxWaWV3KSB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0g
ICAgICAgIGlmIChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRdKQotICAgICAg
ICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkg
ewotICAgICAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRd
OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmV2
ZW50TWF5U3RhcnREcmFnKGV2ZW50KTsKLSAgICAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3Nl
dE1vdXNlRG93bkV2ZW50Om5pbF07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIHJldHVybiBbaGl0VmlldyBzaG91bGREZWxheVdpbmRvd09yZGVyaW5n
Rm9yRXZlbnQ6ZXZlbnRdOwotfQotCi0tICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVu
dCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5l
dyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0
b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBj
YXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZl
bnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHBy
b3RlY3RvciA9IHNlbGY7Ci0gICAgaWYgKFtbc2VsZiBpbnB1dENvbnRleHRdIHdhbnRzVG9IYW5k
bGVNb3VzZUV2ZW50c10gJiYgW1tzZWxmIGlucHV0Q29udGV4dF0gaGFuZGxlTW91c2VFdmVudDpl
dmVudF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93
bkV2ZW50ID0gWUVTOwotCi0gICAgLy8gUmVjb3JkIHRoZSBtb3VzZSBkb3duIHBvc2l0aW9uIHNv
IHdlIGNhbiBkZXRlcm1pbmUgZHJhZyBoeXN0ZXJlc2lzLgotICAgIFtzZWxmIF9zZXRNb3VzZURv
d25FdmVudDpldmVudF07Ci0KLSAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdl
ciA9IFtOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKLSAgICBpZiAoW2N1cnJl
bnRJbnB1dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0
TWFuYWdlciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgZ290byBkb25lOwotCi0g
ICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxl
ZnQ6Tk9dOwotCi0gICAgLy8gSWYgdGhlIHdlYiBwYWdlIGhhbmRsZXMgdGhlIGNvbnRleHQgbWVu
dSBldmVudCBhbmQgbWVudUZvckV2ZW50OiByZXR1cm5zIG5pbCwgd2UnbGwgZ2V0IGNvbnRyb2wg
Y2xpY2sgZXZlbnRzIGhlcmUuCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXNzIHRoZW0gYWxv
bmcgdG8gS0hUTUwgYSBzZWNvbmQgdGltZS4KLSAgICBpZiAoIShbZXZlbnQgbW9kaWZpZXJGbGFn
c10gJiBOU0NvbnRyb2xLZXlNYXNrKSkgewotICAgICAgICBfcHJpdmF0ZS0+aWdub3JpbmdNb3Vz
ZURyYWdnZWRFdmVudHMgPSBOTzsKLQotICAgICAgICAvLyBEb24ndCBkbyBhbnkgbW91c2VvdmVy
IHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgotICAgICAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91
c2VvdmVyVGltZXJdOwotCi0gICAgICAgIC8vIExldCBXZWJDb3JlIGdldCBhIGNoYW5jZSB0byBk
ZWFsIHdpdGggdGhlIGV2ZW50LiBUaGlzIHdpbGwgY2FsbCBiYWNrIHRvIHVzCi0gICAgICAgIC8v
IHRvIHN0YXJ0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlmIGFwcHJvcHJpYXRlLgotICAgICAgICBp
ZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBj
b3JlZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZURvd24oZXZlbnQpOwotICAgIH0KLQotZG9u
ZToKLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POwotfQotCi0tICh2
b2lkKWRyYWdJbWFnZTooTlNJbWFnZSAqKWRyYWdJbWFnZQotICAgICAgICAgICAgICAgYXQ6KE5T
UG9pbnQpYXQKLSAgICAgICAgICAgb2Zmc2V0OihOU1NpemUpb2Zmc2V0Ci0gICAgICAgICAgICBl
dmVudDooTlNFdmVudCAqKWV2ZW50Ci0gICAgICAgcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZAotICAgICAgICAgICBzb3VyY2U6KGlkKXNvdXJjZQotICAgICAgICBzbGlkZUJh
Y2s6KEJPT0wpc2xpZGVCYWNrCi17Ci0gICAgQVNTRVJUKHNlbGYgPT0gW3NlbGYgX3RvcEhUTUxW
aWV3XSk7Ci0gICAgW3N1cGVyIGRyYWdJbWFnZTpkcmFnSW1hZ2UgYXQ6YXQgb2Zmc2V0Om9mZnNl
dCBldmVudDpldmVudCBwYXN0ZWJvYXJkOnBhc3RlYm9hcmQgc291cmNlOnNvdXJjZSBzbGlkZUJh
Y2s6c2xpZGVCYWNrXTsKLX0KLQotLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVu
dAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZl
bnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBu
ZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1
dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20g
Y2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2
ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJ
bnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07Ci0gICAg
aWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1
cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFtzZWxmIHJldGFpbl07Ci0KLSAgICBpZiAoIV9wcml2YXRlLT5pZ25vcmluZ01v
dXNlRHJhZ2dlZEV2ZW50cykgewotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkgewotICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgp
KQotICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91
c2VEcmFnZ2VkKGV2ZW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFtzZWxmIHJlbGVhc2Vd
OwotfQotCi0tIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrRm9y
TG9jYWw6KEJPT0wpaXNMb2NhbAotewotICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtz
ZWxmIF9pc1RvcEhUTUxWaWV3XSk7Ci0gICAgCi0gICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYg
X3dlYlZpZXddKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBOU0RyYWdPcGVyYXRp
b25Ob25lOwotCi0gICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBvdmVycmlkZSB0aGUgc291cmNlIHBy
b3ZpZGVkIG9wZXJhdGlvbiBoZXJlPyAgV2h5IG5vdCBpbiBEcmFnQ29udHJvbGxlcjo6c3RhcnRE
cmFnCi0gICAgaWYgKHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNvdXJjZURyYWdPcGVyYXRpb24o
KSA9PSBEcmFnT3BlcmF0aW9uTm9uZSkKLSAgICAgICAgcmV0dXJuIE5TRHJhZ09wZXJhdGlvbkdl
bmVyaWMgfCBOU0RyYWdPcGVyYXRpb25Db3B5OwotCi0gICAgcmV0dXJuIChOU0RyYWdPcGVyYXRp
b24pcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+c291cmNlRHJhZ09wZXJhdGlvbigpOwotfQotCi0t
ICh2b2lkKWRyYWdnZWRJbWFnZTooTlNJbWFnZSAqKWltYWdlIG1vdmVkVG86KE5TUG9pbnQpc2Ny
ZWVuTG9jCi17Ci0gICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRN
TFZpZXddKTsKLSAgICAKLSAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tzZWxmIHdpbmRv
d10gY29udmVydFNjcmVlblRvQmFzZTpzY3JlZW5Mb2NdOwotICAgIE5TUG9pbnQgd2luZG93TW91
c2VMb2MgPSB3aW5kb3dJbWFnZUxvYzsKLSAgICAKLSAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUo
W3NlbGYgX3dlYlZpZXddKSkgewotICAgICAgICBEcmFnQ29udHJvbGxlciogZHJhZ0NvbnRyb2xs
ZXIgPSBwYWdlLT5kcmFnQ29udHJvbGxlcigpOwotICAgICAgICBOU1BvaW50IHdpbmRvd01vdXNl
TG9jID0gTlNNYWtlUG9pbnQod2luZG93SW1hZ2VMb2MueCArIGRyYWdDb250cm9sbGVyLT5kcmFn
T2Zmc2V0KCkueCgpLCB3aW5kb3dJbWFnZUxvYy55ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZz
ZXQoKS55KCkpOwotICAgIH0KLSAgICAKLSAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhZ1NvdXJjZU1v
dmVkVG86d2luZG93TW91c2VMb2NdOwotfQotCi0tICh2b2lkKWRyYWdnZWRJbWFnZTooTlNJbWFn
ZSAqKWFuSW1hZ2UgZW5kZWRBdDooTlNQb2ludClhUG9pbnQgb3BlcmF0aW9uOihOU0RyYWdPcGVy
YXRpb24pb3BlcmF0aW9uCi17Ci0gICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYg
X2lzVG9wSFRNTFZpZXddKTsKLSAgICAKLSAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tz
ZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTphUG9pbnRdOwotICAgIE5TUG9pbnQgd2lu
ZG93TW91c2VMb2MgPSB3aW5kb3dJbWFnZUxvYzsKLSAgICAKLSAgICBpZiAoUGFnZSogcGFnZSA9
IGNvcmUoW3NlbGYgX3dlYlZpZXddKSkgewotICAgICAgICBEcmFnQ29udHJvbGxlciogZHJhZ0Nv
bnRyb2xsZXIgPSBwYWdlLT5kcmFnQ29udHJvbGxlcigpOwotICAgICAgICB3aW5kb3dNb3VzZUxv
YyA9IE5TTWFrZVBvaW50KHdpbmRvd0ltYWdlTG9jLnggKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09m
ZnNldCgpLngoKSwgd2luZG93SW1hZ2VMb2MueSArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0
KCkueSgpKTsKLSAgICAgICAgZHJhZ0NvbnRyb2xsZXItPmRyYWdFbmRlZCgpOwotICAgIH0KLSAg
ICAKLSAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhZ1NvdXJjZUVuZGVkQXQ6d2luZG93TW91c2VMb2Mg
b3BlcmF0aW9uOm9wZXJhdGlvbl07Ci0gICAgCi0gICAgLy8gUHJldmVudCBxdWV1ZWQgbW91c2VE
cmFnZ2VkIGV2ZW50cyBmcm9tIGNvbWluZyBhZnRlciB0aGUgZHJhZyBhbmQgZmFrZSBtb3VzZVVw
IGV2ZW50LgotICAgIF9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IFlFUzsK
LSAgICAKLSAgICAvLyBPbmNlIHRoZSBkcmFnZ2luZyBtYWNoaW5lcnkga2lja3MgaW4sIHdlIG5v
IGxvbmdlciBnZXQgbW91c2UgZHJhZ3Mgb3IgdGhlIHVwIGV2ZW50LgotICAgIC8vIFdlYkNvcmUg
ZXhwZWN0cyB0byBnZXQgYmFsYW5jZWQgZG93bi91cCdzLCBzbyB3ZSBtdXN0IGZha2UgdXAgYSBt
b3VzZXVwLgotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRo
VHlwZTpOU0xlZnRNb3VzZVVwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9uOndpbmRvd01vdXNlTG9jCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmll
ckZsYWdzXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVz
dGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10g
d2luZG93TnVtYmVyXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJl
c3N1cmU6MF07Ci0gICAgW3NlbGYgbW91c2VVcDpmYWtlRXZlbnRdOyAvLyBUaGlzIHdpbGwgYWxz
byB1cGRhdGUgdGhlIG1vdXNlb3ZlciBzdGF0ZS4KLX0KLQotLSAoTlNBcnJheSAqKW5hbWVzT2ZQ
cm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERlc3RpbmF0aW9u
Ci17Ci0gICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKLSAgICBOU1VSTCAqZHJhZ2dp
bmdJbWFnZVVSTCA9IG5pbDsKLSAgICAKLSAgICBpZiAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIHRp
ZmZSZXNvdXJjZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXSkgewotICAgICAg
ICAKLSAgICAgICAgU2hhcmVkQnVmZmVyICpidWZmZXIgPSBzdGF0aWNfY2FzdDxDYWNoZWRSZXNv
dXJjZSo+KHRpZmZSZXNvdXJjZSktPmRhdGEoKTsKLSAgICAgICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgICAgICBnb3RvIG5vUHJvbWlzZWREYXRhOwotICAgICAgICAKLSAgICAgICAgTlNEYXRhICpk
YXRhID0gYnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsKLSAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVz
cG9uc2UgPSB0aWZmUmVzb3VyY2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpOwotICAgICAg
ICBkcmFnZ2luZ0ltYWdlVVJMID0gW3Jlc3BvbnNlIFVSTF07Ci0gICAgICAgIHdyYXBwZXIgPSBb
W1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0g
YXV0b3JlbGVhc2VdOwotICAgICAgICBOU1N0cmluZyogZmlsZW5hbWUgPSBbcmVzcG9uc2Ugc3Vn
Z2VzdGVkRmlsZW5hbWVdOwotICAgICAgICBOU1N0cmluZyogdHJ1ZUV4dGVuc2lvbih0aWZmUmVz
b3VyY2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9uKCkpOwotICAgICAgICBpZiAoIVtmaWxl
bmFtZSBtYXRjaGVzRXh0ZW5zaW9uRXF1aXZhbGVudDp0cnVlRXh0ZW5zaW9uXSkKLSAgICAgICAg
ICAgIGZpbGVuYW1lID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi4iXSBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0cnVlRXh0ZW5zaW9uXTsKLSAgICAgICAgW3dyYXBwZXIg
c2V0UHJlZmVycmVkRmlsZW5hbWU6ZmlsZW5hbWVdOwotICAgIH0KLSAgICAKLW5vUHJvbWlzZWRE
YXRhOgotICAgIAotICAgIGlmICghd3JhcHBlcikgewotICAgICAgICBBU1NFUlQoIVtzZWxmIF93
ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOwotICAgICAgICBQYWdlKiBwYWdlID0g
Y29yZShbc2VsZiBfd2ViVmlld10pOwotICAgICAgICAKLSAgICAgICAgLy9JZiBhIGxvYWQgb2Nj
dXJzIG1pZHdheSB0aHJvdWdoIGEgZHJhZywgdGhlIHZpZXcgbWF5IGJlIGRldGFjaGVkLCB3aGlj
aCBnaXZlcwotICAgICAgICAvL3VzIG5vIGFiaWxpdHkgdG8gZ2V0IHRvIHRoZSBvcmlnaW5hbCBQ
YWdlLCBzbyB3ZSBjYW5ub3QgYWNjZXNzIGFueSBkcmFnIHN0YXRlCi0gICAgICAgIC8vRklYTUU6
IGlzIHRoZXJlIGEgd2F5IHRvIHJlY292ZXI/Ci0gICAgICAgIGlmICghcGFnZSkgCi0gICAgICAg
ICAgICByZXR1cm4gbmlsOyAKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IEtVUkwmIGltYWdlVVJM
ID0gcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ2dpbmdJbWFnZVVSTCgpOwotICAgICAgICBB
U1NFUlQoIWltYWdlVVJMLmlzRW1wdHkoKSk7Ci0gICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBp
bWFnZVVSTDsKLQotICAgICAgICB3cmFwcGVyID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZmlsZVdy
YXBwZXJGb3JVUkw6ZHJhZ2dpbmdJbWFnZVVSTF07Ci0gICAgfQotICAgIAotICAgIGlmICh3cmFw
cGVyID09IG5pbCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2Ug
ZmlsZS4iKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogUmVw
b3J0IGFuIGVycm9yIGlmIHdlIGZhaWwgdG8gY3JlYXRlIGEgZmlsZS4KLSAgICBOU1N0cmluZyAq
cGF0aCA9IFtbZHJvcERlc3RpbmF0aW9uIHBhdGhdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBv
bmVudDpbd3JhcHBlciBwcmVmZXJyZWRGaWxlbmFtZV1dOwotICAgIHBhdGggPSBbW05TRmlsZU1h
bmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJraXRfcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBh
dGg6cGF0aF07Ci0gICAgaWYgKCFbd3JhcHBlciB3cml0ZVRvRmlsZTpwYXRoIGF0b21pY2FsbHk6
Tk8gdXBkYXRlRmlsZW5hbWVzOllFU10pCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNy
ZWF0ZSBpbWFnZSBmaWxlIHZpYSAtW05TRmlsZVdyYXBwZXIgd3JpdGVUb0ZpbGU6YXRvbWljYWxs
eTp1cGRhdGVGaWxlbmFtZXM6XSIpOwotICAgIAotICAgIGlmIChkcmFnZ2luZ0ltYWdlVVJMKQot
ICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJraXRfc2V0TWV0YWRh
dGFVUkw6W2RyYWdnaW5nSW1hZ2VVUkwgYWJzb2x1dGVTdHJpbmddIHJlZmVycmVyOm5pbCBhdFBh
dGg6cGF0aF07Ci0gICAgCi0gICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbcGF0
aCBsYXN0UGF0aENvbXBvbmVudF1dOwotfQotCi0tICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKill
dmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMg
ZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcg
YSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVu
IGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZy
b20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBb
W2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgW3NlbGYgX3NldE1vdXNlRG93bkV2
ZW50Om5pbF07Ci0KLSAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtO
U0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKLSAgICBpZiAoW2N1cnJlbnRJbnB1
dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdl
ciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3NlbGYg
cmV0YWluXTsKLQotICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKLSAgICBpZiAoRnJh
bWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoUGFnZSogcGFn
ZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRI
YW5kbGVyKCktPm1vdXNlVXAoZXZlbnQpOwotICAgIH0KLSAgICBbc2VsZiBfdXBkYXRlTW91c2Vv
dmVyV2l0aEZha2VFdmVudF07Ci0KLSAgICBbc2VsZiByZWxlYXNlXTsKLX0KLQotLSAodm9pZClt
b3VzZU1vdmVkTm90aWZpY2F0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewot
ICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6W1tub3RpZmljYXRpb24gdXNlcklu
Zm9dIG9iamVjdEZvcktleTpAIk5TRXZlbnQiXV07Ci19Ci0KLS8vIHJldHVybmluZyBZRVMgZnJv
bSB0aGlzIG1ldGhvZCBpcyB0aGUgd2F5IHdlIHRlbGwgQXBwS2l0IHRoYXQgaXQgaXMgb2sgZm9y
IHRoaXMgdmlldwotLy8gdG8gYmUgaW4gdGhlIGtleSBsb29wIGV2ZW4gd2hlbiAidGFiIHRvIGFs
bCBjb250cm9scyIgaXMgbm90IG9uLgotLSAoQk9PTCluZWVkc1BhbmVsVG9CZWNvbWVLZXkKLXsK
LSAgICByZXR1cm4gWUVTOwotfQotCi0vLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB3
ZSBkb24ndCByZXR1cm4gYW55dGhpbmcgdGhyb3VnaCB0aGUgTlNUZXh0SW5wdXQKLS8vIEFQSSB3
aGVuIGFuIGVkaXRhYmxlIHJlZ2lvbiBpcyBub3QgY3VycmVudGx5IGZvY3VzZWQuCi1zdGF0aWMg
Qk9PTCBpc1RleHRJbnB1dChGcmFtZSogY29yZUZyYW1lKQotewotICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpICYmIGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCk7Ci19Ci0KLXN0YXRpYyBCT09MIGlzSW5QYXNz
d29yZEZpZWxkKEZyYW1lKiBjb3JlRnJhbWUpCi17Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOwotfQotCi0tIChCT09M
KWJlY29tZUZpcnN0UmVzcG9uZGVyCi17Ci0gICAgTlNTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0
aW9uID0gTlNEaXJlY3RTZWxlY3Rpb247Ci0gICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1Bl
cmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1c10pCi0gICAgICAgIGRpcmVjdGlvbiA9IFtbc2VsZiB3
aW5kb3ddIGtleVZpZXdTZWxlY3Rpb25EaXJlY3Rpb25dOwotCi0gICAgW3NlbGYgX3VwZGF0ZUZv
Y3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci0gICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07Ci0gICAg
Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWZyYW1l
KQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBp
c1RleHRJbnB1dChmcmFtZSkgJiYgIWlzSW5QYXNzd29yZEZpZWxkKGZyYW1lKTsKLSAgICBpZiAo
ZXhwb3NlSW5wdXRDb250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKLSAg
ICAgICAgX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsK
LSAgICAgICAgW05TQXBwIHVwZGF0ZVdpbmRvd3NdOwotICAgIH0KLQotICAgIGZyYW1lLT5lZGl0
b3IoKS0+c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwotCi0gICAgaWYgKGRpcmVj
dGlvbiA9PSBOU0RpcmVjdFNlbGVjdGlvbikKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIFBh
Z2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJu
IFlFUzsKLQotICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJh
bWUpOwotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAg
ICAgICAgZG9jdW1lbnQtPnNldEZvY3VzZWROb2RlKDApOwotICAgIHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5zZXRJbml0aWFsRm9jdXMoZGlyZWN0aW9uID09IE5TU2VsZWN0aW5nTmV4dCA/IEZv
Y3VzRGlyZWN0aW9uRm9yd2FyZCA6IEZvY3VzRGlyZWN0aW9uQmFja3dhcmQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmN1cnJlbnRLZXlib2FyZEV2ZW50KCkuZ2V0KCkpOwotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0g
KEJPT0wpcmVzaWduRmlyc3RSZXNwb25kZXIKLXsKLSAgICBCT09MIHJlc2lnbiA9IFtzdXBlciBy
ZXNpZ25GaXJzdFJlc3BvbmRlcl07Ci0gICAgaWYgKHJlc2lnbikgewotICAgICAgICBfcHJpdmF0
ZS0+cmVzaWduaW5nRmlyc3RSZXNwb25kZXIgPSBZRVM7Ci0gICAgICAgIFtfcHJpdmF0ZS0+Y29t
cENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLSAgICAgICAg
aWYgKCFbc2VsZiBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pIHsgCi0gICAgICAgICAgICBb
c2VsZiBkZXNlbGVjdEFsbF07Ci0gICAgICAgICAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX2lz
UGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKLSAgICAgICAgICAgICAgICBbc2VsZiBjbGVh
ckZvY3VzXTsKLSAgICAgICAgfQotICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlXTsKLSAgICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyID0gTk87
Ci0gICAgfQotICAgIHJldHVybiByZXNpZ247Ci19Ci0KLS0gKHZvaWQpc2V0RGF0YVNvdXJjZToo
V2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UgCi17Ci0gICAgQVNTRVJUKGRhdGFTb3VyY2UpOwot
ICAgIGlmIChfcHJpdmF0ZS0+ZGF0YVNvdXJjZSAhPSBkYXRhU291cmNlKSB7Ci0gICAgICAgIEFT
U0VSVCghX3ByaXZhdGUtPmNsb3NlZCk7Ci0gICAgICAgIEJPT0wgaGFkRGF0YVNvdXJjZSA9IF9w
cml2YXRlLT5kYXRhU291cmNlICE9IG5pbDsKLQotICAgICAgICBbZGF0YVNvdXJjZSByZXRhaW5d
OwotICAgICAgICBbX3ByaXZhdGUtPmRhdGFTb3VyY2UgcmVsZWFzZV07Ci0gICAgICAgIF9wcml2
YXRlLT5kYXRhU291cmNlID0gZGF0YVNvdXJjZTsKLSAgICAgICAgW19wcml2YXRlLT5wbHVnaW5D
b250cm9sbGVyIHNldERhdGFTb3VyY2U6ZGF0YVNvdXJjZV07Ci0KLSAgICAgICAgaWYgKCFoYWRE
YXRhU291cmNlKQotICAgICAgICAgICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKLSAg
ICB9Ci19Ci0KLS0gKHZvaWQpZGF0YVNvdXJjZVVwZGF0ZWQ6KFdlYkRhdGFTb3VyY2UgKilkYXRh
U291cmNlCi17Ci19Ci0KLS8vIFRoaXMgaXMgYW4gb3ZlcnJpZGUgb2YgYW4gTlNDb250cm9sIG1l
dGhvZCB0aGF0IHdhbnRzIHRvIHJlcGFpbnQgdGhlIGVudGlyZSB2aWV3IHdoZW4gdGhlIHdpbmRv
dyByZXNpZ25zL2JlY29tZXMKLS8vIGtleS4gIFdlYkhUTUxWaWV3IGlzIGFuIE5TQ29udHJvbCBv
bmx5IGJlY2F1c2UgaXQgaG9zdHMgTlNDZWxscyB0aGF0IGFyZSBwYWludGVkIGJ5IFdlYkNvcmUn
cyBBcXVhIHRoZW1lCi0vLyByZW5kZXJlciAoYW5kIHRob3NlIGNlbGxzIG11c3QgYmUgaG9zdGVk
IGJ5IGFuIGVuY2xvc2luZyBOU0NvbnRyb2wgaW4gb3JkZXIgdG8gcGFpbnQgcHJvcGVybHkpLgot
LSAodm9pZCl1cGRhdGVDZWxsOihOU0NlbGwqKWNlbGwKLXsKLX0KLQotLy8gRG9lcyBzZXROZWVk
c0Rpc3BsYXk6Tk8gYXMgYSBzaWRlIGVmZmVjdCB3aGVuIHByaW50aW5nIGlzIGVuZGluZy4KLS8v
IHBhZ2VXaWR0aCAhPSAwIGltcGxpZXMgd2Ugd2lsbCByZWxheW91dCB0byBhIG5ldyB3aWR0aAot
LSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDooZmxv
YXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1
c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZQotewotICAgIFdlYkZyYW1lICpmcmFtZSA9
IFtzZWxmIF9mcmFtZV07Ci0gICAgTlNBcnJheSAqc3ViZnJhbWVzID0gW2ZyYW1lIGNoaWxkRnJh
bWVzXTsKLSAgICB1bnNpZ25lZCBuID0gW3N1YmZyYW1lcyBjb3VudF07Ci0gICAgdW5zaWduZWQg
aTsKLSAgICBmb3IgKGkgPSAwOyBpICE9IG47ICsraSkgewotICAgICAgICBXZWJGcmFtZSAqc3Vi
ZnJhbWUgPSBbc3ViZnJhbWVzIG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIFdlYkZyYW1lVmll
dyAqZnJhbWVWaWV3ID0gW3N1YmZyYW1lIGZyYW1lVmlld107Ci0gICAgICAgIGlmIChbW3N1YmZy
YW1lIF9kYXRhU291cmNlXSBfaXNEb2N1bWVudEhUTUxdKSB7Ci0gICAgICAgICAgICBbKFdlYkhU
TUxWaWV3ICopW2ZyYW1lVmlldyBkb2N1bWVudFZpZXddIF9zZXRQcmludGluZzpwcmludGluZyBt
aW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXpl
OmFkanVzdFZpZXdTaXplXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcmludGluZyAh
PSBfcHJpdmF0ZS0+cHJpbnRpbmcpIHsKLSAgICAgICAgW19wcml2YXRlLT5wYWdlUmVjdHMgcmVs
ZWFzZV07Ci0gICAgICAgIF9wcml2YXRlLT5wYWdlUmVjdHMgPSBuaWw7Ci0gICAgICAgIF9wcml2
YXRlLT5wcmludGluZyA9IHByaW50aW5nOwotICAgICAgICBpZiAoIXByaW50aW5nKQotICAgICAg
ICAgICAgX3ByaXZhdGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4gPSBOTzsKLSAgICAgICAgW3NlbGYg
c2V0TmVlZHNUb0FwcGx5U3R5bGVzOllFU107Ci0gICAgICAgIFtzZWxmIHNldE5lZWRzTGF5b3V0
OllFU107Ci0gICAgICAgIFtzZWxmIGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDptaW5QYWdlV2lk
dGggbWF4aW11bVBhZ2VXaWR0aDptYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6YWRqdXN0
Vmlld1NpemVdOwotICAgICAgICBpZiAoIXByaW50aW5nKSB7Ci0gICAgICAgICAgICAvLyBDYW4n
dCBkbyB0aGlzIHdoZW4gc3RhcnRpbmcgcHJpbnRpbmcgb3IgbmVzdGVkIHByaW50aW5nIHdvbid0
IHdvcmssIHNlZSAzNDkxNDI3LgotICAgICAgICAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5Ok5P
XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLSAoQk9PTCljYW5QcmludEhlYWRlcnNBbmRGb290
ZXJzCi17Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBj
YXNlIHdoZXJlIHRoZSB3ZWJ2aWV3IGlzIGVtYmVkZGVkIGluIHRoZSB2aWV3IHRoYXQncyBiZWlu
ZyBwcmludGVkLgotLy8gSXQgc2hvdWxkbid0IGJlIGNhbGxlZCB3aGVuIHRoZSB3ZWJ2aWV3IGlz
IGJlaW5nIHByaW50ZWQgZGlyZWN0bHkuCi0tICh2b2lkKWFkanVzdFBhZ2VIZWlnaHROZXc6KENH
RmxvYXQgKiluZXdCb3R0b20gdG9wOihDR0Zsb2F0KW9sZFRvcCBib3R0b206KENHRmxvYXQpb2xk
Qm90dG9tIGxpbWl0OihDR0Zsb2F0KWJvdHRvbUxpbWl0Ci17Ci0gICAgLy8gVGhpcyBoZWxwcyB3
aGVuIHdlIHByaW50IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4KLSAgICAvLyBJ
ZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ug
d2lsbCBuZXZlciBoYXZlIHRvIGRvIHRoaXMuCi0gICAgQk9PTCB3YXNJblByaW50aW5nTW9kZSA9
IF9wcml2YXRlLT5wcmludGluZzsKLSAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKQotICAgICAg
ICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFn
ZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0gICAgZmxvYXQgbmV3Qm90dG9tRmxv
YXQgPSAqbmV3Qm90dG9tOwotICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pLT52aWV3KCkpCi0gICAgICAgIHZpZXctPmFkanVzdFBhZ2VIZWlnaHQoJm5ld0JvdHRv
bUZsb2F0LCBvbGRUb3AsIG9sZEJvdHRvbSwgYm90dG9tTGltaXQpOwotCi0jaWZkZWYgX19MUDY0
X18KLSAgICAvLyBJZiB0aGUgbmV3IGJvdHRvbSBpcyBlcXVhbCB0byB0aGUgb2xkIGJvdHRvbSAo
d2hlbiBib3RoIGFyZSB0cmVhdGVkIGFzIGZsb2F0cyksIHdlIGp1c3QgY29weQotICAgIC8vIG9s
ZEJvdHRvbSBvdmVyIHRvIG5ld0JvdHRvbS4gVGhpcyBwcmV2ZW50cyByb3VuZGluZyBlcnJvcnMg
dGhhdCBjYW4gb2NjdXIgd2hlbiBjb252ZXJ0aW5nIG5ld0JvdHRvbUZsb2F0IHRvIGEgZG91Ymxl
LgotICAgIGlmIChmYWJzKChmbG9hdClvbGRCb3R0b20gLSBuZXdCb3R0b21GbG9hdCkgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSkgCi0gICAgICAgICpuZXdCb3R0b20g
PSBvbGRCb3R0b207Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgICpuZXdCb3R0b20gPSBuZXdC
b3R0b21GbG9hdDsKLSAgICAKLSAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKSB7Ci0gICAgICAg
IE5TUHJpbnRPcGVyYXRpb24gKmN1cnJlblByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRp
b24gY3VycmVudE9wZXJhdGlvbl07Ci0gICAgICAgIGlmIChjdXJyZW5QcmludE9wZXJhdGlvbikK
LSAgICAgICAgICAgIC8vIGRlbGF5IF9zZXRQcmludGluZzpOTyB1bnRpbCBiYWNrIHRvIG1haW4g
bG9vcCBhcyB0aGlzIG1ldGhvZCBtYXkgZ2V0IGNhbGxlZCByZXBlYXRlZGx5Ci0gICAgICAgICAg
ICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikg
d2l0aE9iamVjdDpjdXJyZW5QcmludE9wZXJhdGlvbiBhZnRlckRlbGF5OjBdOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGV2ZXIgaW52
b2tlZCwgaXQgcHJvYmFibHkgc2hvdWxkbid0IGJlCi0gICAgICAgICAgICBbc2VsZiBfc2V0UHJp
bnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1
c3RWaWV3U2l6ZTpOT107Ci0gICAgfQotfQotCi0tIChmbG9hdClfYXZhaWxhYmxlUGFwZXJXaWR0
aEZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24KLXsK
LSAgICBOU1ByaW50SW5mbyAqcHJpbnRJbmZvID0gW3ByaW50T3BlcmF0aW9uIHByaW50SW5mb107
Ci0gICAgcmV0dXJuIFtwcmludEluZm8gcGFwZXJTaXplXS53aWR0aCAtIFtwcmludEluZm8gbGVm
dE1hcmdpbl0gLSBbcHJpbnRJbmZvIHJpZ2h0TWFyZ2luXTsKLX0KLQotLSAoZmxvYXQpX3NjYWxl
RmFjdG9yRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJhdGlv
bgotewotICAgIGZsb2F0IHZpZXdXaWR0aCA9IE5TV2lkdGgoW3NlbGYgYm91bmRzXSk7Ci0gICAg
aWYgKHZpZXdXaWR0aCA8IDEpIHsKLSAgICAgICAgTE9HX0VSUk9SKCIlQCBoYXMgbm8gd2lkdGgg
d2hlbiBwcmludGluZyIsIHNlbGYpOwotICAgICAgICByZXR1cm4gMS4wZjsKLSAgICB9Ci0KLSAg
ICBmbG9hdCB1c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBT
Y2FsZUZhY3Rvcl07Ci0gICAgZmxvYXQgbWF4U2hyaW5rVG9GaXRTY2FsZUZhY3RvciA9IDEuMGYg
LyBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7Ci0gICAgZmxvYXQgc2hyaW5rVG9GaXRTY2Fs
ZUZhY3RvciA9IFtzZWxmIF9hdmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246cHJp
bnRPcGVyYXRpb25dL3ZpZXdXaWR0aDsKLSAgICBmbG9hdCBzaHJpbmtUb0F2b2lkT3JwaGFuID0g
X3ByaXZhdGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4gPyAoMS4wZiAvIFByaW50aW5nT3JwaGFuU2hy
aW5rQWRqdXN0bWVudCkgOiAxLjBmOwotICAgIHJldHVybiB1c2VyU2NhbGVGYWN0b3IgKiBNQVgo
bWF4U2hyaW5rVG9GaXRTY2FsZUZhY3Rvciwgc2hyaW5rVG9GaXRTY2FsZUZhY3RvcikgKiBzaHJp
bmtUb0F2b2lkT3JwaGFuOwotfQotCi0vLyBGSVhNRSAzNDkxMzQ0OiBUaGlzIGlzIGEgc2VjcmV0
IEFwcEtpdC1pbnRlcm5hbCBtZXRob2QgdGhhdCB3ZSBuZWVkIHRvIG92ZXJyaWRlIGluIG9yZGVy
Ci0vLyB0byBnZXQgb3VyIHNocmluay10by1maXQgdG8gd29yayB3aXRoIGEgY3VzdG9tIHBhZ2lu
YXRpb24gc2NoZW1lLiBXZSBjYW4gZG8gdGhpcyBiZXR0ZXIKLS8vIGlmIEFwcEtpdCBtYWtlcyBp
dCBTUEkvQVBJLgotLSAoQ0dGbG9hdClfcHJvdmlkZVRvdGFsU2NhbGVGYWN0b3JGb3JQcmludE9w
ZXJhdGlvbjooTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uIAotewotICAgIHJldHVy
biBbc2VsZiBfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJhdGlvbl07Ci19
Ci0KLS8vIFRoaXMgaXMgdXNlZCBmb3IgQ2FyYm9uIHByaW50aW5nLiBBdCBzb21lIHBvaW50IHdl
IG1pZ2h0IHdhbnQgdG8gbWFrZSB0aGlzIHB1YmxpYyBBUEkuCi0tICh2b2lkKXNldFBhZ2VXaWR0
aEZvclByaW50aW5nOihmbG9hdClwYWdlV2lkdGgKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6
Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3
U2l6ZTpOT107Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOnBh
Z2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOnBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZTpZRVNdOwot
fQotCi0tICh2b2lkKV9lbmRQcmludE1vZGUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8g
bWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6
ZTpZRVNdOwotICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5OllFU107Ci19Ci0KLS0g
KHZvaWQpX2RlbGF5ZWRFbmRQcmludE1vZGU6KE5TUHJpbnRPcGVyYXRpb24gKilpbml0aWF0aW5n
T3BlcmF0aW9uCi17Ci0gICAgQVNTRVJUX0FSRyhpbml0aWF0aW5nT3BlcmF0aW9uLCBpbml0aWF0
aW5nT3BlcmF0aW9uICE9IG5pbCk7Ci0gICAgTlNQcmludE9wZXJhdGlvbiAqY3VycmVudE9wZXJh
dGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dOwotICAgIGlmIChpbml0
aWF0aW5nT3BlcmF0aW9uID09IGN1cnJlbnRPcGVyYXRpb24pIHsKLSAgICAgICAgLy8gVGhlIHBy
aW50IG9wZXJhdGlvbiBpcyBzdGlsbCB1bmRlcndheS4gV2UgZG9uJ3QgZXhwZWN0IHRoaXMgdG8g
ZXZlciBoYXBwZW4sIGhlbmNlIHRoZSBhc3NlcnQsIGJ1dCB3ZSdyZQotICAgICAgICAvLyBiZWlu
ZyBleHRyYSBwYXJhbm9pZCBoZXJlIHNpbmNlIHRoZSBwcmludGluZyBjb2RlIGlzIHNvIGZyYWdp
bGUuIERlbGF5IHRoZSBjbGVhbnVwCi0gICAgICAgIC8vIGZ1cnRoZXIuCi0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9y
KF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDppbml0aWF0aW5nT3BlcmF0aW9uIGFm
dGVyRGVsYXk6MF07Ci0gICAgfSBlbHNlIGlmIChbY3VycmVudE9wZXJhdGlvbiB2aWV3XSA9PSBz
ZWxmKSB7Ci0gICAgICAgIC8vIEEgbmV3IHByaW50IGpvYiBoYXMgc3RhcnRlZCwgYnV0IGl0IGlz
IHByaW50aW5nIHRoZSBzYW1lIFdlYkhUTUxWaWV3IGFnYWluLiBXZSBkb24ndCBleHBlY3QKLSAg
ICAgICAgLy8gdGhpcyB0byBldmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2VydCwgYnV0IHdlJ3Jl
IGJlaW5nIGV4dHJhIHBhcmFub2lkIGhlcmUgc2luY2UgdGhlIHByaW50aW5nIGNvZGUgaXMgc28K
LSAgICAgICAgLy8gZnJhZ2lsZS4gRG8gbm90aGluZywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IGJyZWFrIHRoZSBwcmludCBqb2IgY3VycmVudGx5IGluIHByb2dyZXNzLCBhbmQKLSAgICAgICAg
Ly8gdGhlIHByaW50IGpvYiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgaXMgcmVzcG9uc2libGUgZm9y
IGl0cyBvd24gY2xlYW51cC4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gVGhlIHByaW50IGpvYiB0aGF0IGtpY2tlZCBvZmYgdGhpcyBkZWxh
eWVkIGNhbGwgaGFzIGZpbmlzaGVkLCBhbmQgdGhpcyB2aWV3IGlzIG5vdCBiZWluZwotICAgICAg
ICAvLyBwcmludGVkIGFnYWluLiBXZSBleHBlY3QgdGhhdCBubyBvdGhlciBwcmludCBqb2IgaGFz
IHN0YXJ0ZWQuIFNpbmNlIHRoaXMgZGVsYXllZCBjYWxsIHdhc24ndAotICAgICAgICAvLyBjYW5j
ZWxsZWQsIGJlZ2luRG9jdW1lbnQgYW5kIGVuZERvY3VtZW50IG11c3Qgbm90IGhhdmUgYmVlbiBj
YWxsZWQsIGFuZCB3ZSBuZWVkIHRvIGNsZWFuIHVwCi0gICAgICAgIC8vIHRoZSBwcmludCBtb2Rl
IGhlcmUuCi0gICAgICAgIEFTU0VSVChjdXJyZW50T3BlcmF0aW9uID09IG5pbCk7Ci0gICAgICAg
IFtzZWxmIF9lbmRQcmludE1vZGVdOwotICAgIH0KLX0KLQotLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgcGFnZXMgYXZhaWxhYmxlIGZvciBwcmludGluZwotLSAoQk9PTClrbm93c1BhZ2VSYW5nZToo
TlNSYW5nZVBvaW50ZXIpcmFuZ2UKLXsKLSAgICAvLyBNdXN0IGRvIHRoaXMgZXhwbGljaXQgZGlz
cGxheSBoZXJlLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgdmlldyBtaWdodCByZWRpc3BsYXkgd2hp
bGUgdGhlIHByaW50Ci0gICAgLy8gc2hlZXQgd2FzIHVwLCB1c2luZyBwcmludGVyIGZvbnRzIChh
bmQgbG9va2luZyBkaWZmZXJlbnQpLgotICAgIFtzZWxmIGRpc3BsYXlJZk5lZWRlZF07Ci0gICAg
W1tzZWxmIHdpbmRvd10gc2V0QXV0b2Rpc3BsYXk6Tk9dOwotICAgIAotICAgIC8vIElmIHdlIGFy
ZSBhIGZyYW1lc2V0IGp1c3QgcHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUgb25zY3JlZW4s
IG90aGVyd2lzZSByZWxheW91dAotICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFwZXIgc2l6ZQot
ICAgIGZsb2F0IG1pbkxheW91dFdpZHRoID0gMC4wZjsKLSAgICBmbG9hdCBtYXhMYXlvdXRXaWR0
aCA9IDAuMGY7Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQo
KSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmlzRnJhbWVTZXQoKSkgewotICAgICAgICBmbG9hdCBw
YXBlcldpZHRoID0gW3NlbGYgX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjpb
TlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXV07Ci0gICAgICAgIG1pbkxheW91dFdp
ZHRoID0gcGFwZXJXaWR0aCAqIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcjsKLSAgICAgICAg
bWF4TGF5b3V0V2lkdGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9y
OwotICAgIH0KLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6bWlu
TGF5b3V0V2lkdGggbWF4aW11bVBhZ2VXaWR0aDptYXhMYXlvdXRXaWR0aCBhZGp1c3RWaWV3U2l6
ZTpZRVNdOyAvLyB3aWxsIHJlbGF5b3V0Ci0gICAgTlNQcmludE9wZXJhdGlvbiAqcHJpbnRPcGVy
YXRpb24gPSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKLSAgICAvLyBDZXJ0
YWluIHR5cGVzIG9mIGVycm9ycywgaW5jbHVkaW5nIGludmFsaWQgcGFnZSByYW5nZXMsIGNhbiBj
YXVzZSBiZWdpbkRvY3VtZW50IGFuZAotICAgIC8vIGVuZERvY3VtZW50IHRvIGJlIHNraXBwZWQg
YWZ0ZXIgd2UndmUgcHV0IG91cnNlbHZlcyBpbiBwcmludCBtb2RlIChzZWUgNDE0NTkwNSkuIElu
IHRob3NlIGNhc2VzCi0gICAgLy8gd2UgbmVlZCB0byBnZXQgb3V0IG9mIHByaW50IG1vZGUgd2l0
aG91dCByZWx5aW5nIG9uIGFueSBtb3JlIGNhbGxiYWNrcyBmcm9tIHRoZSBwcmludGluZyBtZWNo
YW5pc20uCi0gICAgLy8gSWYgd2UgZ2V0IGFzIGZhciBhcyBiZWdpbkRvY3VtZW50IHdpdGhvdXQg
dHJvdWJsZSwgdGhlbiB0aGlzIGRlbGF5ZWQgcmVxdWVzdCB3aWxsIGJlIGNhbmNlbGxlZC4KLSAg
ICAvLyBJZiBub3QgY2FuY2VsbGVkLCB0aGlzIGRlbGF5ZWQgY2FsbCB3aWxsIGJlIGludm9rZWQg
aW4gdGhlIG5leHQgcGFzcyB0aHJvdWdoIHRoZSBtYWluIGV2ZW50IGxvb3AsCi0gICAgLy8gd2hp
Y2ggaXMgYWZ0ZXIgYmVnaW5Eb2N1bWVudCBhbmQgZW5kRG9jdW1lbnQgd291bGQgYmUgY2FsbGVk
LgotICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1v
ZGU6KSB3aXRoT2JqZWN0OnByaW50T3BlcmF0aW9uIGFmdGVyRGVsYXk6MF07Ci0gICAgW1tzZWxm
IF93ZWJWaWV3XSBfYWRqdXN0UHJpbnRpbmdNYXJnaW5zRm9ySGVhZGVyQW5kRm9vdGVyXTsKLSAg
ICAKLSAgICAvLyBUaGVyZSBpcyBhIHRoZW9yZXRpY2FsIGNoYW5jZSB0aGF0IHNvbWVvbmUgY291
bGQgZG8gc29tZSBkcmF3aW5nIGJldHdlZW4gaGVyZSBhbmQgZW5kRG9jdW1lbnQsCi0gICAgLy8g
aWYgc29tZXRoaW5nIGNhdXNlZCBzZXROZWVkc0Rpc3BsYXkgYWZ0ZXIgdGhpcyBwb2ludC4gSWYg
c28sIGl0J3Mgbm90IGEgYmlnIHRyYWdlZHksIGJlY2F1c2UKLSAgICAvLyB5b3UnZCBzaW1wbHkg
c2VlIHRoZSBwcmludGVyIGZvbnRzIG9uIHNjcmVlbi4gQXMgb2YgdGhpcyB3cml0aW5nLCB0aGlz
IGRvZXMgbm90IGhhcHBlbiB3aXRoIFNhZmFyaS4KLQotICAgIHJhbmdlLT5sb2NhdGlvbiA9IDE7
Ci0gICAgZmxvYXQgdG90YWxTY2FsZUZhY3RvciA9IFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50
T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXTsKLSAgICBmbG9hdCB1c2VyU2NhbGVGYWN0b3IgPSBb
cHJpbnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rvcl07Ci0gICAgW19wcml2YXRl
LT5wYWdlUmVjdHMgcmVsZWFzZV07Ci0gICAgZmxvYXQgZnVsbFBhZ2VIZWlnaHQgPSBmbG9vcmYo
W3NlbGYgX2NhbGN1bGF0ZVByaW50SGVpZ2h0XS90b3RhbFNjYWxlRmFjdG9yKTsKLSAgICBOU0Fy
cmF5ICpuZXdQYWdlUmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQ
cmludFdpZHRoU2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9yCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
aW50SGVpZ2h0OmZ1bGxQYWdlSGVpZ2h0XTsKLSAgICAKLSAgICAvLyBBcHBLaXQgZ2V0cyBhbGwg
bWVzc2VkIHVwIGlmIHlvdSBnaXZlIGl0IGEgemVyby1sZW5ndGggcGFnZSBjb3VudCAoc2VlIDM1
NzYzMzQpLCBzbyBpZiB3ZQotICAgIC8vIGhpdCB0aGF0IGNhc2Ugd2UnbGwgcGFzcyBhbG9uZyBh
IGRlZ2VuZXJhdGUgMSBwaXhlbCBzcXVhcmUgdG8gcHJpbnQuIFRoaXMgd2lsbCBwcmludAotICAg
IC8vIGEgYmxhbmsgcGFnZSAod2l0aCBjb3JyZWN0LWxvb2tpbmcgaGVhZGVyIGFuZCBmb290ZXIg
aWYgdGhhdCBvcHRpb24gaXMgb24pLCB3aGljaCBtYXRjaGVzCi0gICAgLy8gdGhlIGJlaGF2aW9y
IG9mIElFIGFuZCBDYW1pbm8gYXQgbGVhc3QuCi0gICAgaWYgKFtuZXdQYWdlUmVjdHMgY291bnRd
ID09IDApCi0gICAgICAgIG5ld1BhZ2VSZWN0cyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpb
TlNWYWx1ZSB2YWx1ZVdpdGhSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSldXTsKLSAgICBlbHNl
IGlmIChbbmV3UGFnZVJlY3RzIGNvdW50XSA+IDEpIHsKLSAgICAgICAgLy8gSWYgdGhlIGxhc3Qg
cGFnZSBpcyBhIHNob3J0IG9ycGhhbiwgdHJ5IGFkanVzdGluZyB0aGUgcHJpbnQgaGVpZ2h0IHNs
aWdodGx5IHRvIHNlZSBpZiB0aGlzIHdpbGwgc3F1ZWV6ZSB0aGUKLSAgICAgICAgLy8gY29udGVu
dCBvbnRvIG9uZSBmZXdlciBwYWdlLiBJZiBpdCBkb2VzLCB1c2UgdGhlIGFkanVzdGVkIHNjYWxl
LiBJZiBub3QsIHVzZSB0aGUgb3JpZ2luYWwgc2NhbGUuCi0gICAgICAgIGZsb2F0IGxhc3RQYWdl
SGVpZ2h0ID0gTlNIZWlnaHQoW1tuZXdQYWdlUmVjdHMgbGFzdE9iamVjdF0gcmVjdFZhbHVlXSk7
Ci0gICAgICAgIGlmIChsYXN0UGFnZUhlaWdodC9mdWxsUGFnZUhlaWdodCA8IExhc3RQcmludGVk
UGFnZU9ycGhhblJhdGlvKSB7Ci0gICAgICAgICAgICBOU0FycmF5ICphZGp1c3RlZFBhZ2VSZWN0
cyA9IFtbc2VsZiBfZnJhbWVdIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhTY2FsZUZh
Y3Rvcjp1c2VyU2NhbGVGYWN0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50
SGVpZ2h0OmZ1bGxQYWdlSGVpZ2h0KlByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0bWVudF07Ci0g
ICAgICAgICAgICAvLyBVc2UgdGhlIGFkanVzdGVkIHJlY3RzIG9ubHkgaWYgdGhlIHBhZ2UgY291
bnQgd2VudCBkb3duCi0gICAgICAgICAgICBpZiAoW2FkanVzdGVkUGFnZVJlY3RzIGNvdW50XSA8
IFtuZXdQYWdlUmVjdHMgY291bnRdKSB7Ci0gICAgICAgICAgICAgICAgbmV3UGFnZVJlY3RzID0g
YWRqdXN0ZWRQYWdlUmVjdHM7Ci0gICAgICAgICAgICAgICAgX3ByaXZhdGUtPmF2b2lkaW5nUHJp
bnRPcnBoYW4gPSBZRVM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgX3ByaXZhdGUtPnBhZ2VSZWN0cyA9IFtuZXdQYWdlUmVjdHMgcmV0YWluXTsKLSAgICAKLSAg
ICByYW5nZS0+bGVuZ3RoID0gW19wcml2YXRlLT5wYWdlUmVjdHMgY291bnRdOwotICAgIAotICAg
IHJldHVybiBZRVM7Ci19Ci0KLS8vIFJldHVybiB0aGUgZHJhd2luZyByZWN0YW5nbGUgZm9yIGEg
cGFydGljdWxhciBwYWdlIG51bWJlcgotLSAoTlNSZWN0KXJlY3RGb3JQYWdlOihOU0ludGVnZXIp
cGFnZQotewotICAgIHJldHVybiBbW19wcml2YXRlLT5wYWdlUmVjdHMgb2JqZWN0QXRJbmRleDpw
YWdlIC0gMV0gcmVjdFZhbHVlXTsKLX0KLQotLSAodm9pZClkcmF3UGFnZUJvcmRlcldpdGhTaXpl
OihOU1NpemUpYm9yZGVyU2l6ZQotewotICAgIEFTU0VSVChOU0VxdWFsU2l6ZXMoYm9yZGVyU2l6
ZSwgW1tbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludEluZm9dIHBhcGVy
U2l6ZV0pKTsgICAgCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBfZHJhd0hlYWRlckFuZEZvb3Rlcl07
Ci19Ci0KLS0gKHZvaWQpYmVnaW5Eb2N1bWVudAotewotICAgIEB0cnkgewotICAgICAgICAvLyBG
cm9tIG5vdyBvbiB3ZSdsbCBnZXQgYSBjaGFuY2UgdG8gY2FsbCBfZW5kUHJpbnRNb2RlIGluIGVp
dGhlciBiZWdpbkRvY3VtZW50IG9yCi0gICAgICAgIC8vIGVuZERvY3VtZW50LCBzbyB3ZSBjYW4g
Y2FuY2VsIHRoZSAianVzdCBpbiBjYXNlIiBwZW5kaW5nIGNhbGwuCi0gICAgICAgIFtOU09iamVj
dCBjYW5jZWxQcmV2aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3Rv
cihfZGVsYXllZEVuZFByaW50TW9kZTopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3Q6W05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJh
dGlvbl1dOwotICAgICAgICBbc3VwZXIgYmVnaW5Eb2N1bWVudF07Ci0gICAgfSBAY2F0Y2ggKE5T
RXhjZXB0aW9uICpsb2NhbEV4Y2VwdGlvbikgewotICAgICAgICAvLyBFeGNlcHRpb24gZHVyaW5n
IFtzdXBlciBiZWdpbkRvY3VtZW50XSBtZWFucyB0aGF0IGVuZERvY3VtZW50IHdpbGwgbm90IGdl
dCBjYWxsZWQsCi0gICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gY2xlYW4gdXAgb3VyICJwcmludCBt
b2RlIiBoZXJlLgotICAgICAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpZW5kRG9jdW1lbnQKLXsKLSAgICBbc3VwZXIgZW5kRG9jdW1lbnRdOwotICAgIC8vIE5v
dGUgc2FkbHkgYXQgdGhpcyBwb2ludCBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRE
cmF3aW5nVG9TY3JlZW5dIGlzIHN0aWxsIE5PIAotICAgIFtzZWxmIF9lbmRQcmludE1vZGVdOwot
fQotCi0tICh2b2lkKWtleURvd246KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3Mg
YSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQg
ZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFz
ZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0
aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5z
aWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVh
c2VdOwotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsK
LSAgICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50
ID09IGV2ZW50KTsKLQotICAgIEJPT0wgY2FsbFN1cGVyID0gTk87Ci0KLSAgICBbX3ByaXZhdGUt
PmtleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2
ZW50IHJldGFpbl07Ci0KLSAgICBCT09MIGNvbXBsZXRpb25Qb3B1cFdhc09wZW4gPSBfcHJpdmF0
ZS0+Y29tcENvbnRyb2xsZXIgJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBwb3B1cFdpbmRv
d0lzT3Blbl07Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0g
ICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkgewotICAgICAgICAvLyBXZWJDb3JlIHBy
b2Nlc3NlZCBhIGtleSBldmVudCwgYmFpbCBvbiBhbnkgcHJlZXhpc3RpbmcgY29tcGxldGU6IFVJ
Ci0gICAgICAgIGlmIChjb21wbGV0aW9uUG9wdXBXYXNPcGVuKQotICAgICAgICAgICAgW19wcml2
YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsK
LSAgICB9IGVsc2UgaWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgfHwgIVtfcHJpdmF0ZS0+
Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5RG93bjpldmVudF0pIHsKLSAgICAgICAgLy8gTm90IGNv
bnN1bWVkIGJ5IGNvbXBsZXRlOiBwb3B1cCB3aW5kb3cKLSAgICAgICAgW19wcml2YXRlLT5jb21w
Q29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKLSAgICAgICAg
Y2FsbFN1cGVyID0gWUVTOwotICAgIH0KLSAgICBpZiAoY2FsbFN1cGVyKQotICAgICAgICBbc3Vw
ZXIga2V5RG93bjpldmVudF07Ci0gICAgZWxzZQotICAgICAgICBbTlNDdXJzb3Igc2V0SGlkZGVu
VW50aWxNb3VzZU1vdmVzOllFU107Ci19Ci0KLS0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKilldmVu
dAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZl
bnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBu
ZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1
dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20g
Y2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2
ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgQk9PTCBldmVudFdhc1NlbnRUb1dlYkNv
cmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7Ci0KLSAgICBSZXRhaW5QdHI8
V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmIChjb3JlRnJhbWUgJiYgIWV2ZW50V2FzU2Vu
dFRvV2ViQ29yZSkKLSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQo
ZXZlbnQpOwotICAgIGVsc2UKLSAgICAgICAgW3N1cGVyIGtleVVwOmV2ZW50XTsKLX0KLQotLSAo
dm9pZClmbGFnc0NoYW5nZWQ6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBj
aGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZl
bnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0
aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUg
Y3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRl
IFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2Vd
OwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYg
KGNvcmVGcmFtZSkKLSAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2Fwc0xvY2tT
dGF0ZU1heUhhdmVDaGFuZ2VkKCk7Ci0gICAgCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBz
ZWxmUHJvdGVjdG9yID0gc2VsZjsKLQotICAgIHVuc2lnbmVkIHNob3J0IGtleUNvZGUgPSBbZXZl
bnQga2V5Q29kZV07Ci0KLSAgICAvL0Rvbid0IG1ha2UgYW4gZXZlbnQgZnJvbSB0aGUgbnVtIGxv
Y2sgYW5kIGZ1bmN0aW9uIGtleXMKLSAgICBpZiAoY29yZUZyYW1lICYmIGtleUNvZGUgIT0gMCAm
JiBrZXlDb2RlICE9IDEwICYmIGtleUNvZGUgIT0gNjMpIHsKLSAgICAgICAgY29yZUZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIFtzdXBlciBmbGFnc0NoYW5nZWQ6
ZXZlbnRdOwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5n
KilhdHRyaWJ1dGVOYW1lCi17Ci0gICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmlu
ZzogTlNBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7Ci0gICAgICAgIGlkIGFjY1Ry
ZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOwotICAgICAgICBpZiAoYWNj
VHJlZSkKLSAgICAgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6YWNjVHJl
ZV07Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIHJldHVybiBbc3VwZXIgYWNjZXNz
aWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOwotfQotCi0tIChpZClhY2Nlc3Np
YmlsaXR5Rm9jdXNlZFVJRWxlbWVudAotewotICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1l
XSBfYWNjZXNzaWJpbGl0eVRyZWVdOwotICAgIGlmIChhY2NUcmVlKQotICAgICAgICByZXR1cm4g
W2FjY1RyZWUgYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOwotICAgIHJldHVybiBzZWxm
OwotfQotCi0tIChpZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAotewotICAg
IGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOwotICAgIGlm
IChhY2NUcmVlKSB7Ci0gICAgICAgIE5TUG9pbnQgd2luZG93Q29vcmQgPSBbW3NlbGYgd2luZG93
XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnBvaW50XTsKLSAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFj
Y2Vzc2liaWxpdHlIaXRUZXN0OltzZWxmIGNvbnZlcnRQb2ludDp3aW5kb3dDb29yZCBmcm9tVmll
dzpuaWxdXTsKLSAgICB9Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkKV9hY2Nlc3NpYmls
aXR5UGFyZW50Rm9yU3VidmlldzooTlNWaWV3ICopc3VidmlldwotewotICAgIGlkIGFjY1RyZWUg
PSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOwotICAgIGlmICghYWNjVHJlZSkK
LSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgaWQgcGFyZW50ID0gW2FjY1RyZWUgX2FjY2Vzc2li
aWxpdHlQYXJlbnRGb3JTdWJ2aWV3OnN1YnZpZXddOwotICAgIGlmICghcGFyZW50KQotICAgICAg
ICByZXR1cm4gc2VsZjsKLSAgICByZXR1cm4gcGFyZW50OwotfQotCi0tICh2b2lkKWNlbnRlclNl
bGVjdGlvbkluVmlzaWJsZUFyZWE6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUK
LQotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAg
ICAgY29yZUZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRl
ckFsd2F5cyk7Ci19Ci0KLS0gKE5TRGF0YSAqKV9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVz
QXNSVEYKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpAIngiCi0gICAgICAgIGF0dHJpYnV0ZXM6Y29yZUZyYW1lID8gY29y
ZUZyYW1lLT5mb250QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgOiBuaWxdOwotICAgIE5T
RGF0YSAqZGF0YSA9IFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcg
bGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgW3N0cmluZyByZWxlYXNlXTsK
LSAgICByZXR1cm4gZGF0YTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICopX2ZvbnRBdHRyaWJ1dGVz
RnJvbUZvbnRQYXN0ZWJvYXJkCi17Ci0gICAgTlNQYXN0ZWJvYXJkICpmb250UGFzdGVib2FyZCA9
IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRm9udFBib2FyZF07Ci0gICAgaWYg
KGZvbnRQYXN0ZWJvYXJkID09IG5pbCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBOU0RhdGEg
KmRhdGEgPSBbZm9udFBhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNGb250UGJvYXJkVHlwZV07Ci0g
ICAgaWYgKGRhdGEgPT0gbmlsIHx8IFtkYXRhIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICAvLyBOU1RleHRWaWV3IGRvZXMgc29tZXRoaW5nIG1vcmUgZWZmaWNpZW50IGJ5
IHBhcnNpbmcgdGhlIGF0dHJpYnV0ZXMgb25seSwgYnV0IHRoYXQncyBub3QgYXZhaWxhYmxlIGlu
IEFQSS4KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6ZGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0gYXV0
b3JlbGVhc2VdOwotICAgIGlmIChzdHJpbmcgPT0gbmlsIHx8IFtzdHJpbmcgbGVuZ3RoXSA9PSAw
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbc3RyaW5nIGZvbnRBdHRyaWJ1dGVz
SW5SYW5nZTpOU01ha2VSYW5nZSgwLCAxKV07Ci19Ci0KLS0gKERPTUNTU1N0eWxlRGVjbGFyYXRp
b24gKilfZW1wdHlTdHlsZQotewotICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1l
bnRdIGNyZWF0ZUNTU1N0eWxlRGVjbGFyYXRpb25dOwotfQotCi0tIChOU1N0cmluZyAqKV9jb2xv
ckFzU3RyaW5nOihOU0NvbG9yICopY29sb3IKLXsKLSAgICBOU0NvbG9yICpyZ2JDb2xvciA9IFtj
b2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKLSAg
ICAvLyBGSVhNRTogSWYgY29sb3IgaXMgbm9uLW5pbCBhbmQgcmdiQ29sb3IgaXMgbmlsLCB0aGF0
IG1lYW5zIHdlIGdvdCBzb21lIGtpbmQKLSAgICAvLyBvZiBmYW5jeSBjb2xvciB0aGF0IGNhbid0
IGJlIGNvbnZlcnRlZCB0byBSR0IuIENoYW5naW5nIHRoYXQgdG8gInRyYW5zcGFyZW50IgotICAg
IC8vIG1pZ2h0IG5vdCBiZSBncmVhdCwgYnV0IGl0J3MgcHJvYmFibHkgT0suCi0gICAgaWYgKHJn
YkNvbG9yID09IG5pbCkKLSAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJlbnQiOwotICAgIGZsb2F0
IHIgPSBbcmdiQ29sb3IgcmVkQ29tcG9uZW50XTsKLSAgICBmbG9hdCBnID0gW3JnYkNvbG9yIGdy
ZWVuQ29tcG9uZW50XTsKLSAgICBmbG9hdCBiID0gW3JnYkNvbG9yIGJsdWVDb21wb25lbnRdOwot
ICAgIGZsb2F0IGEgPSBbcmdiQ29sb3IgYWxwaGFDb21wb25lbnRdOwotICAgIGlmIChhID09IDAp
Ci0gICAgICAgIHJldHVybiBAInRyYW5zcGFyZW50IjsKLSAgICBpZiAociA9PSAwICYmIGcgPT0g
MCAmJiBiID09IDAgJiYgYSA9PSAxKQotICAgICAgICByZXR1cm4gQCJibGFjayI7Ci0gICAgaWYg
KHIgPT0gMSAmJiBnID09IDEgJiYgYiA9PSAxICYmIGEgPT0gMSkKLSAgICAgICAgcmV0dXJuIEAi
d2hpdGUiOwotICAgIC8vIEZJWE1FOiBMb3RzIG1vcmUgbmFtZWQgY29sb3JzLiBNYXliZSB3ZSBj
b3VsZCB1c2UgdGhlIHRhYmxlIGluIFdlYkNvcmU/Ci0gICAgaWYgKGEgPT0gMSkKLSAgICAgICAg
cmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiKCUuMGYsJS4wZiwlLjBmKSIs
IHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTVdOwotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAInJnYmEoJS4wZiwlLjBmLCUuMGYsJWYpIiwgciAqIDI1NSwgZyAqIDI1NSwg
YiAqIDI1NSwgYV07Ci19Ci0KLS0gKE5TU3RyaW5nICopX3NoYWRvd0FzU3RyaW5nOihOU1NoYWRv
dyAqKXNoYWRvdwotewotICAgIGlmIChzaGFkb3cgPT0gbmlsKQotICAgICAgICByZXR1cm4gQCJu
b25lIjsKLSAgICBOU1NpemUgb2Zmc2V0ID0gW3NoYWRvdyBzaGFkb3dPZmZzZXRdOwotICAgIGZs
b2F0IGJsdXJSYWRpdXMgPSBbc2hhZG93IHNoYWRvd0JsdXJSYWRpdXNdOwotICAgIGlmIChvZmZz
ZXQud2lkdGggPT0gMCAmJiBvZmZzZXQuaGVpZ2h0ID09IDAgJiYgYmx1clJhZGl1cyA9PSAwKQot
ICAgICAgICByZXR1cm4gQCJub25lIjsKLSAgICBOU0NvbG9yICpjb2xvciA9IFtzaGFkb3cgc2hh
ZG93Q29sb3JdOwotICAgIGlmIChjb2xvciA9PSBuaWwpCi0gICAgICAgIHJldHVybiBAIm5vbmUi
OwotICAgIC8vIEZJWE1FOiBIYW5kbGUgbm9uLWludGVncmFsIHZhbHVlcyBoZXJlPwotICAgIGlm
IChibHVyUmFkaXVzID09IDApCi0gICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIiVAICUuMGZweCAlLjBmcHgiLCBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0sIG9m
ZnNldC53aWR0aCwgb2Zmc2V0LmhlaWdodF07Ci0gICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiJUAgJS4wZnB4ICUuMGZweCAlLjBmcHgiLCBbc2VsZiBfY29sb3JBc1N0cmlu
Zzpjb2xvcl0sIG9mZnNldC53aWR0aCwgb2Zmc2V0LmhlaWdodCwgYmx1clJhZGl1c107Ci19Ci0K
LS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udEF0dHJpYnV0ZXM6KE5T
RGljdGlvbmFyeSAqKWRpY3Rpb25hcnkKLXsKLSAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpz
dHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKLQotICAgIE5TQ29sb3IgKmNvbG9yID0gW2RpY3Rp
b25hcnkgb2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAg
W3N0eWxlIHNldEJhY2tncm91bmRDb2xvcjpbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl1dOwot
Ci0gICAgTlNGb250ICpmb250ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOwotICAgIGlmICghZm9udCkgewotICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWls
eTpAIkhlbHZldGljYSJdOwotICAgICAgICBbc3R5bGUgc2V0Rm9udFNpemU6QCIxMnB4Il07Ci0g
ICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAibm9ybWFsIl07Ci0gICAgICAgIFtzdHlsZSBz
ZXRGb250U3R5bGU6QCJub3JtYWwiXTsKLSAgICB9IGVsc2UgewotICAgICAgICBOU0ZvbnRNYW5h
Z2VyICpmbSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAgICAgICAgLy8g
RklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2FudCB0
byBoYW5kbGUgZmFtaWx5IG5hbWVzCi0gICAgICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtlIHNp
bmdsZSBxdW90ZSBvciBiYWNrc2xhc2ggaW4gdGhlaXIgbmFtZXMuCi0gICAgICAgIFtzdHlsZSBz
ZXRGb250RmFtaWx5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJyVAJyIsIFtmb250IGZh
bWlseU5hbWVdXV07Ci0gICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiUwLmZweCIsIFtmb250IHBvaW50U2l6ZV1dXTsKLSAgICAgICAgLy8gRklY
TUU6IE1hcCB0byB0aGUgZW50aXJlIHJhbmdlIG9mIENTUyB3ZWlnaHQgdmFsdWVzLgotICAgICAg
ICBpZiAoW2ZtIHdlaWdodE9mRm9udDpmb250XSA+PSBNSU5fQk9MRF9XRUlHSFQpCi0gICAgICAg
ICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpAImJvbGQiXTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6QCJub3JtYWwiXTsKLSAgICAgICAgaWYgKFtmbSB0
cmFpdHNPZkZvbnQ6Zm9udF0gJiBOU0l0YWxpY0ZvbnRNYXNrKQotICAgICAgICAgICAgW3N0eWxl
IHNldEZvbnRTdHlsZTpAIml0YWxpYyJdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc3R5
bGUgc2V0Rm9udFN0eWxlOkAibm9ybWFsIl07Ci0gICAgfQotCi0gICAgY29sb3IgPSBbZGljdGlv
bmFyeSBvYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBb
c3R5bGUgc2V0Q29sb3I6Y29sb3IgPyBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0gOiAoTlNT
dHJpbmcgKilAImJsYWNrIl07Ci0KLSAgICBOU1NoYWRvdyAqc2hhZG93ID0gW2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07Ci0gICAgW3N0eWxlIHNldFRleHRT
aGFkb3c6W3NlbGYgX3NoYWRvd0FzU3RyaW5nOnNoYWRvd11dOwotCi0gICAgaW50IHN0cmlrZXRo
cm91Z2hJbnQgPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxl
QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotCi0gICAgaW50IHN1cGVyc2NyaXB0SW50ID0gW1tk
aWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFs
dWVdOwotICAgIGlmIChzdXBlcnNjcmlwdEludCA+IDApCi0gICAgICAgIFtzdHlsZSBzZXRWZXJ0
aWNhbEFsaWduOkAic3VwZXIiXTsKLSAgICBlbHNlIGlmIChzdXBlcnNjcmlwdEludCA8IDApCi0g
ICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3ViIl07Ci0gICAgZWxzZQotICAgICAg
ICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAImJhc2VsaW5lIl07Ci0gICAgaW50IHVuZGVybGlu
ZUludCA9IFtbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0
ZU5hbWVdIGludFZhbHVlXTsKLSAgICAvLyBGSVhNRTogVW5kZXJsaW5lIHdpbnMgaGVyZSBpZiB3
ZSBoYXZlIGJvdGggKHNlZSBidWcgMzc5MDQ0MykuCi0gICAgaWYgKHN0cmlrZXRocm91Z2hJbnQg
PT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUgJiYgdW5kZXJsaW5lSW50ID09IE5TVW5kZXJsaW5lU3R5
bGVOb25lKQotICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0
aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKLSAgICBlbHNlIGlm
ICh1bmRlcmxpbmVJbnQgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCi0gICAgICAgIFtzdHlsZSBz
ZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJs
aW5lLXRocm91Z2giIHByaW9yaXR5OkAiIl07Ci0gICAgZWxzZQotICAgICAgICBbc3R5bGUgc2V0
UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAidW5k
ZXJsaW5lIiBwcmlvcml0eTpAIiJdOwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0tICh2b2lk
KV9hcHBseVN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3
aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCi17Ci0gICAgaWYgKEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRv
cigpLT5hcHBseVN0eWxlVG9TZWxlY3Rpb24oY29yZShzdHlsZSksIHVuZG9BY3Rpb24pOwotfQot
Ci0tICh2b2lkKV9hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVj
bGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCi17
Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAg
ICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oY29y
ZShzdHlsZSksIHVuZG9BY3Rpb24pOwotfQotCi0tIChCT09MKV9oYW5kbGVTdHlsZUtleUVxdWl2
YWxlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIEFTU0VSVChbc2VsZiBfd2ViVmlld10pOwot
ICAgIGlmICghW1tbc2VsZiBfd2ViVmlld10gcHJlZmVyZW5jZXNdIHJlc3BlY3RTdGFuZGFyZFN0
eWxlS2V5RXF1aXZhbGVudHNdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgaWYgKCFb
c2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBpZiAoKFtldmVu
dCBtb2RpZmllckZsYWdzXSAmIE5TRGV2aWNlSW5kZXBlbmRlbnRNb2RpZmllckZsYWdzTWFzaykg
IT0gTlNDb21tYW5kS2V5TWFzaykKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIE5TU3Ry
aW5nICpzdHJpbmcgPSBbZXZlbnQgY2hhcmFjdGVyc107Ci0gICAgaWYgKFtzdHJpbmcgY2FzZUlu
c2Vuc2l0aXZlQ29tcGFyZTpAImIiXSA9PSBOU09yZGVyZWRTYW1lKSB7Ci0gICAgICAgIFtzZWxm
IGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZToiVG9nZ2xlQm9sZCJdOwotICAgICAgICByZXR1cm4g
WUVTOwotICAgIH0KLSAgICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaSJd
ID09IE5TT3JkZXJlZFNhbWUpIHsKLSAgICAgICAgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlO
YW1lOiJUb2dnbGVJdGFsaWMiXTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIE5POwotfQotCi0tIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50
ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0
aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNo
aW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQg
dGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhh
dCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0g
ICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIGlmIChbc2VsZiBfaGFuZGxl
U3R5bGVLZXlFcXVpdmFsZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICAKLSAg
ICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09
IGV2ZW50KTsKLSAgICBCT09MIHJldCA9IE5POwotCi0gICAgW19wcml2YXRlLT5rZXlEb3duRXZl
bnQgcmVsZWFzZV07Ci0gICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5d
OwotICAgIAotICAgIFtzZWxmIHJldGFpbl07Ci0KLSAgICAvLyBQYXNzIGNvbW1hbmQta2V5IGNv
bWJvcyB0aHJvdWdoIFdlYkNvcmUgaWYgdGhlcmUgaXMgYSBrZXkgYmluZGluZyBhdmFpbGFibGUg
Zm9yCi0gICAgLy8gdGhpcyBldmVudC4gVGhpcyBsZXRzIHdlYiBwYWdlcyBoYXZlIGEgY3JhY2sg
YXQgaW50ZXJjZXB0aW5nIGNvbW1hbmQtbW9kaWZpZWQga2V5cHJlc3Nlcy4KLSAgICAvLyBCdXQg
ZG9uJ3QgZG8gaXQgaWYgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGV2ZW50LgotICAgIC8v
IFByZXNzaW5nIEVzYyByZXN1bHRzIGluIGEgZmFrZSBldmVudCBiZWluZyBzZW50IC0gZG9uJ3Qg
cGFzcyBpdCB0byBXZWJDb3JlLgotICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGV2
ZW50ID09IFtOU0FwcCBjdXJyZW50RXZlbnRdICYmIHNlbGYgPT0gW1tzZWxmIHdpbmRvd10gZmly
c3RSZXNwb25kZXJdKQotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKSkKLSAgICAgICAgICAgIHJldCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQo
ZXZlbnQpOwotCi0gICAgaWYgKCFyZXQpCi0gICAgICAgIHJldCA9IFtzdXBlciBwZXJmb3JtS2V5
RXF1aXZhbGVudDpldmVudF07Ci0KLSAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAKLSAgICByZXR1
cm4gcmV0OwotfQotCi0tICh2b2lkKWNvcHlGb250OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5E
X1BST0xPR1VFCi0KLSAgICAvLyBQdXQgUlRGIHdpdGggZm9udCBhdHRyaWJ1dGVzIG9uIHRoZSBw
YXN0ZWJvYXJkLgotICAgIC8vIE1heWJlIGxhdGVyIHdlIHNob3VsZCBhZGQgYSBwYXN0ZWJvYXJk
IHR5cGUgdGhhdCBjb250YWlucyBDU1MgdGV4dCBmb3IgIm5hdGl2ZSIgY29weSBhbmQgcGFzdGUg
Zm9udC4KLSAgICBOU1Bhc3RlYm9hcmQgKmZvbnRQYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBw
YXN0ZWJvYXJkV2l0aE5hbWU6TlNGb250UGJvYXJkXTsKLSAgICBbZm9udFBhc3RlYm9hcmQgZGVj
bGFyZVR5cGVzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpOU0ZvbnRQYm9hcmRUeXBlXSBvd25l
cjpuaWxdOwotICAgIFtmb250UGFzdGVib2FyZCBzZXREYXRhOltzZWxmIF9zZWxlY3Rpb25TdGFy
dEZvbnRBdHRyaWJ1dGVzQXNSVEZdIGZvclR5cGU6TlNGb250UGJvYXJkVHlwZV07Ci19Ci0KLS0g
KHZvaWQpcGFzdGVGb250OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAg
ICAvLyBSZWFkIFJURiB3aXRoIGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBwYXN0ZWJvYXJkLgot
ICAgIC8vIE1heWJlIGxhdGVyIHdlIHNob3VsZCBhZGQgYSBwYXN0ZWJvYXJkIHR5cGUgdGhhdCBj
b250YWlucyBDU1MgdGV4dCBmb3IgIm5hdGl2ZSIgY29weSBhbmQgcGFzdGUgZm9udC4KLSAgICBb
c2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Gb250QXR0cmlidXRl
czpbc2VsZiBfZm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmRdXSB3aXRoVW5kb0FjdGlv
bjpFZGl0QWN0aW9uUGFzdGVGb250XTsKLX0KLQotLSAodm9pZClwYXN0ZUFzUmljaFRleHQ6KGlk
KXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIFNpbmNlIHJpY2ggdGV4
dCBhbHdheXMgYmVhdHMgcGxhaW4gdGV4dCB3aGVuIGJvdGggYXJlIG9uIHRoZSBwYXN0ZWJvYXJk
LCBpdCdzIG5vdAotICAgIC8vIGNsZWFyIGhvdyB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHBsYWlu
IG9sZCBwYXN0ZS4KLSAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJk
IGdlbmVyYWxQYXN0ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpOT107Ci19Ci0KLS0gKE5TRm9udCAq
KV9vcmlnaW5hbEZvbnRBCi17Ci0gICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250
TWFuYWdlcl0gZm9udFdpdGhGYW1pbHk6QCJIZWx2ZXRpY2EiIHRyYWl0czowIHdlaWdodDpTVEFO
REFSRF9XRUlHSFQgc2l6ZToxMC4wZl07Ci19Ci0KLS0gKE5TRm9udCAqKV9vcmlnaW5hbEZvbnRC
Ci17Ci0gICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gZm9udFdp
dGhGYW1pbHk6QCJUaW1lcyIgdHJhaXRzOk5TRm9udEl0YWxpY1RyYWl0IHdlaWdodDpTVEFOREFS
RF9CT0xEX1dFSUdIVCBzaXplOjEyLjBmXTsKLX0KLQotLSAodm9pZClfYWRkVG9TdHlsZTooRE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihOU0Zv
bnQgKiliCi17Ci0gICAgLy8gU2luY2UgdGhlcmUncyBubyB3YXkgdG8gZGlyZWN0bHkgYXNrIE5T
Rm9udE1hbmFnZXIgd2hhdCBzdHlsZSBjaGFuZ2UgaXQncyBnb2luZyB0byBkbwotICAgIC8vIHdl
IGluc3RlYWQgcGFzcyB0d28gInNwZWNpbWVuIiBmb250cyB0byBpdCBhbmQgbGV0IGl0IGNoYW5n
ZSB0aGVtLiBXZSB0aGVuIGRlZHVjZSB3aGF0Ci0gICAgLy8gc3R5bGUgY2hhbmdlIGl0IHdhcyBk
b2luZyBieSBsb29raW5nIGF0IHdoYXQgaGFwcGVuZWQgdG8gZWFjaCBvZiB0aGUgdHdvIGZvbnRz
LgotICAgIC8vIFNvIGlmIGl0IHdhcyBtYWtpbmcgdGhlIHRleHQgYm9sZCwgYm90aCBmb250cyB3
aWxsIGJlIGJvbGQgYWZ0ZXIgdGhlIGZhY3QuCi0KLSAgICBpZiAoYSA9PSBuaWwgfHwgYiA9PSBu
aWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1h
bmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotCi0gICAgTlNGb250ICpvYSA9IFtzZWxmIF9vcmln
aW5hbEZvbnRBXTsKLQotICAgIE5TU3RyaW5nICphRmFtaWx5TmFtZSA9IFthIGZhbWlseU5hbWVd
OwotICAgIE5TU3RyaW5nICpiRmFtaWx5TmFtZSA9IFtiIGZhbWlseU5hbWVdOwotCi0gICAgaW50
IGFQb2ludFNpemUgPSAoaW50KVthIHBvaW50U2l6ZV07Ci0gICAgaW50IGJQb2ludFNpemUgPSAo
aW50KVtiIHBvaW50U2l6ZV07Ci0KLSAgICBpbnQgYVdlaWdodCA9IFtmbSB3ZWlnaHRPZkZvbnQ6
YV07Ci0gICAgaW50IGJXZWlnaHQgPSBbZm0gd2VpZ2h0T2ZGb250OmJdOwotCi0gICAgQk9PTCBh
SXNJdGFsaWMgPSAoW2ZtIHRyYWl0c09mRm9udDphXSAmIE5TSXRhbGljRm9udE1hc2spICE9IDA7
Ci0gICAgQk9PTCBiSXNJdGFsaWMgPSAoW2ZtIHRyYWl0c09mRm9udDpiXSAmIE5TSXRhbGljRm9u
dE1hc2spICE9IDA7Ci0KLSAgICBpZiAoW2FGYW1pbHlOYW1lIGlzRXF1YWxUb1N0cmluZzpiRmFt
aWx5TmFtZV0pIHsKLSAgICAgICAgTlNTdHJpbmcgKmZhbWlseU5hbWVGb3JDU1MgPSBhRmFtaWx5
TmFtZTsKLQotICAgICAgICAvLyBUaGUgZmFtaWx5IG5hbWUgbWF5IG5vdCBiZSBzcGVjaWZpYyBl
bm91Z2ggdG8gZ2V0IHVzIHRoZSBmb250IHNwZWNpZmllZC4KLSAgICAgICAgLy8gSW4gc29tZSBj
YXNlcywgdGhlIG9ubHkgd2F5IHRvIGdldCBleGFjdGx5IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9y
IGlzIHRvIHVzZQotICAgICAgICAvLyB0aGUgUG9zdHNjcmlwdCBuYW1lLgotICAgICAgICAKLSAg
ICAgICAgLy8gRmluZCB0aGUgZm9udCB0aGUgc2FtZSB3YXkgdGhlIHJlbmRlcmluZyBjb2RlIHdv
dWxkIGxhdGVyIGlmIGl0IGVuY291bnRlcmVkIHRoaXMgQ1NTLgotICAgICAgICBOU0ZvbnRUcmFp
dE1hc2sgdHJhaXRzID0gYUlzSXRhbGljID8gTlNGb250SXRhbGljVHJhaXQgOiAwOwotICAgICAg
ICBOU0ZvbnQgKmZvdW5kRm9udCA9IFdlYkNvcmVGaW5kRm9udChhRmFtaWx5TmFtZSwgdHJhaXRz
LCBhV2VpZ2h0LCBhUG9pbnRTaXplKTsKLQotICAgICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEg
Zm9udCB3aXRoIHRoZSBzYW1lIFBvc3RzY3JpcHQgbmFtZSwgdGhlbiB3ZSdsbCBoYXZlIHRvIHVz
ZSB0aGUKLSAgICAgICAgLy8gUG9zdHNjcmlwdCBuYW1lIHRvIG1ha2UgdGhlIENTUyBzcGVjaWZp
YyBlbm91Z2guCi0gICAgICAgIGlmICghW1tmb3VuZEZvbnQgZm9udE5hbWVdIGlzRXF1YWxUb1N0
cmluZzpbYSBmb250TmFtZV1dKQotICAgICAgICAgICAgZmFtaWx5TmFtZUZvckNTUyA9IFthIGZv
bnROYW1lXTsKLQotICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0ZWQgZXNj
YXBpbmcgY29kZSBpZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKLSAgICAgICAgLy8g
d2l0aCBjaGFyYWN0ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0aGVpciBu
YW1lcy4KLSAgICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0cmluZ1dpdGhG
b3JtYXQ6QCInJUAnIiwgZmFtaWx5TmFtZUZvckNTU11dOwotICAgIH0KLQotICAgIGludCBzb2Eg
PSAoaW50KVtvYSBwb2ludFNpemVdOwotICAgIGlmIChhUG9pbnRTaXplID09IGJQb2ludFNpemUp
Ci0gICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiVkcHgiLCBhUG9pbnRTaXplXV07Ci0gICAgZWxzZSBpZiAoYVBvaW50U2l6ZSA8IHNvYSkKLSAg
ICAgICAgW3N0eWxlIF9zZXRGb250U2l6ZURlbHRhOkAiLTFweCJdOwotICAgIGVsc2UgaWYgKGFQ
b2ludFNpemUgPiBzb2EpCi0gICAgICAgIFtzdHlsZSBfc2V0Rm9udFNpemVEZWx0YTpAIjFweCJd
OwotCi0gICAgaWYgKGFXZWlnaHQgPT0gYldlaWdodCkKLSAgICAgICAgW3N0eWxlIHNldEZvbnRX
ZWlnaHQ6YVdlaWdodCA+IE1JTl9CT0xEX1dFSUdIVCA/IEAiYm9sZCIgOiBAIm5vcm1hbCJdOwot
Ci0gICAgaWYgKGFJc0l0YWxpYyA9PSBiSXNJdGFsaWMpCi0gICAgICAgIFtzdHlsZSBzZXRGb250
U3R5bGU6YUlzSXRhbGljID8gQCJpdGFsaWMiIDogIEAibm9ybWFsIl07Ci19Ci0KLS0gKERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udE1hbmFnZXJPcGVyYXRpb24KLXsKLSAg
ICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKLQot
ICAgIE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
OwotCi0gICAgTlNGb250ICpvYSA9IFtzZWxmIF9vcmlnaW5hbEZvbnRBXTsKLSAgICBOU0ZvbnQg
Km9iID0gW3NlbGYgX29yaWdpbmFsRm9udEJdOyAgICAKLSAgICBbc2VsZiBfYWRkVG9TdHlsZTpz
dHlsZSBmb250QTpbZm0gY29udmVydEZvbnQ6b2FdIGZvbnRCOltmbSBjb252ZXJ0Rm9udDpvYl1d
OwotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0tICh2b2lkKWNoYW5nZUZvbnQ6KGlkKXNlbmRl
cgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxl
Y3Rpb246W3NlbGYgX3N0eWxlRnJvbUZvbnRNYW5hZ2VyT3BlcmF0aW9uXSB3aXRoVW5kb0FjdGlv
bjpFZGl0QWN0aW9uU2V0Rm9udF07Ci19Ci0KLS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilf
c3R5bGVGb3JBdHRyaWJ1dGVDaGFuZ2U6KGlkKXNlbmRlcgotewotICAgIERPTUNTU1N0eWxlRGVj
bGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOwotCi0gICAgTlNTaGFkb3cgKnNo
YWRvdyA9IFtbTlNTaGFkb3cgYWxsb2NdIGluaXRdOwotICAgIFtzaGFkb3cgc2V0U2hhZG93T2Zm
c2V0Ok5TTWFrZVNpemUoMSwgMSldOwotCi0gICAgTlNEaWN0aW9uYXJ5ICpvYSA9IFtOU0RpY3Rp
b25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgW3NlbGYgX29yaWdp
bmFsRm9udEFdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLAotICAgICAgICBuaWxdOwotICAgIE5TRGlj
dGlvbmFyeSAqb2IgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6
Ci0gICAgICAgIFtOU0NvbG9yIGJsYWNrQ29sb3JdLCBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWUsCi0gICAgICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRCXSwgTlNGb250QXR0cmlidXRlTmFt
ZSwKLSAgICAgICAgW05TQ29sb3Igd2hpdGVDb2xvcl0sIE5TRm9yZWdyb3VuZENvbG9yQXR0cmli
dXRlTmFtZSwKLSAgICAgICAgc2hhZG93LCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsCi0gICAgICAg
IFtOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdLCBOU1N0cmlr
ZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIFtOU051bWJlciBudW1iZXJXaXRo
SW50OjFdLCBOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZSwKLSAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0sIE5TVW5kZXJsaW5lU3R5bGVBdHRy
aWJ1dGVOYW1lLAotICAgICAgICBuaWxdOwotCi0gICAgW3NoYWRvdyByZWxlYXNlXTsKLQotI2lm
IDAKLQotTlNPYmxpcXVlbmVzc0F0dHJpYnV0ZU5hbWUgICAgICAgIC8qIGZsb2F0OyBza2V3IHRv
IGJlIGFwcGxpZWQgdG8gZ2x5cGhzLCBkZWZhdWx0IDA6IG5vIHNrZXcgKi8KLSAgICAvLyBmb250
LXN0eWxlLCBidXQgdGhhdCBpcyBqdXN0IGFuIG9uLW9mZiBzd2l0Y2gKLQotTlNFeHBhbnNpb25B
dHRyaWJ1dGVOYW1lICAgICAgICAgIC8qIGZsb2F0OyBsb2cgb2YgZXhwYW5zaW9uIGZhY3RvciB0
byBiZSBhcHBsaWVkIHRvIGdseXBocywgZGVmYXVsdCAwOiBubyBleHBhbnNpb24gKi8KLSAgICAv
LyBmb250LXN0cmV0Y2g/Ci0KLU5TS2VybkF0dHJpYnV0ZU5hbWUgICAgICAgICAgICAgICAvKiBm
bG9hdCwgYW1vdW50IHRvIG1vZGlmeSBkZWZhdWx0IGtlcm5pbmcsIGlmIDAsIGtlcm5pbmcgb2Zm
ICovCi0gICAgLy8gbGV0dGVyLXNwYWNpbmc/IHByb2JhYmx5IG5vdCBnb29kIGVub3VnaAotCi1O
U1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6
IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAqLwotTlNTdHJpa2V0aHJvdWdoQ29sb3JBdHRyaWJ1
dGVOYW1lIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQgY29sb3Ig
Ki8KLSAgICAvLyB0ZXh0LWRlY29yYXRpb24tY29sb3I/Ci0KLU5TTGlnYXR1cmVBdHRyaWJ1dGVO
YW1lICAgICAgICAgICAvKiBpbnQsIGRlZmF1bHQgMTogZGVmYXVsdCBsaWdhdHVyZXMsIDA6IG5v
IGxpZ2F0dXJlcywgMjogYWxsIGxpZ2F0dXJlcyAqLwotTlNCYXNlbGluZU9mZnNldEF0dHJpYnV0
ZU5hbWUgICAgIC8qIGZsb2F0LCBpbiBwb2ludHM7IG9mZnNldCBmcm9tIGJhc2VsaW5lLCBkZWZh
dWx0IDAgKi8KLU5TU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBmbG9hdCwgaW4g
cGVyY2VudCBvZiBmb250IHBvaW50IHNpemUsIGRlZmF1bHQgMDogbm8gc3Ryb2tlOyBwb3NpdGl2
ZSBmb3Igc3Ryb2tlIGFsb25lLCBuZWdhdGl2ZSBmb3Igc3Ryb2tlIGFuZCBmaWxsIChhIHR5cGlj
YWwgdmFsdWUgZm9yIG91dGxpbmVkIHRleHQgd291bGQgYmUgMy4wKSAqLwotTlNTdHJva2VDb2xv
ckF0dHJpYnV0ZU5hbWUgICAgICAgIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZv
cmVncm91bmQgY29sb3IgKi8KLSAgICAvLyBuZWVkIGV4dGVuc2lvbnM/Ci0KLSNlbmRpZgotICAg
IAotICAgIE5TRGljdGlvbmFyeSAqYSA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0ZXM6b2FdOwot
ICAgIE5TRGljdGlvbmFyeSAqYiA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0ZXM6b2JdOwotCi0g
ICAgTlNDb2xvciAqY2EgPSBbYSBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lXTsKLSAgICBOU0NvbG9yICpjYiA9IFtiIG9iamVjdEZvcktleTpOU0JhY2tncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIGlmIChjYSA9PSBjYikgewotICAgICAgICBbc3R5bGUg
c2V0QmFja2dyb3VuZENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNhXV07Ci0gICAgfQotCi0g
ICAgW3NlbGYgX2FkZFRvU3R5bGU6c3R5bGUgZm9udEE6W2Egb2JqZWN0Rm9yS2V5Ok5TRm9udEF0
dHJpYnV0ZU5hbWVdIGZvbnRCOltiIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXV07
Ci0KLSAgICBjYSA9IFthIG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWVdOwotICAgIGNiID0gW2Igb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07Ci0gICAgaWYgKGNhID09IGNiKSB7Ci0gICAgICAgIFtzdHlsZSBzZXRDb2xvcjpbc2Vs
ZiBfY29sb3JBc1N0cmluZzpjYV1dOwotICAgIH0KLQotICAgIE5TU2hhZG93ICpzaGEgPSBbYSBv
YmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoc2hhKQotICAgICAg
ICBbc3R5bGUgc2V0VGV4dFNoYWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6c2hhXV07Ci0gICAg
ZWxzZSBpZiAoW2Igb2JqZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV0gPT0gbmlsKQot
ICAgICAgICBbc3R5bGUgc2V0VGV4dFNoYWRvdzpAIm5vbmUiXTsKLQotICAgIGludCBzYSA9IFtb
YSBvYmplY3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1
ZV07Ci0gICAgaW50IHNiID0gW1tiIG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0
dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpZiAoc2EgPT0gc2IpIHsKLSAgICAgICAgaWYg
KHNhID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQotICAgICAgICAgICAgW3N0eWxlIHNldFByb3Bl
cnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHBy
aW9yaXR5OkAiIl07IAotICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gIm5vIGxpbmUtdGhy
b3VnaCIgcmF0aGVyIHRoYW4gIm5vbmUiCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHls
ZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6
QCJsaW5lLXRocm91Z2giIHByaW9yaXR5OkAiIl07Ci0gICAgICAgICAgICAvLyB3ZSByZWFsbHkg
bWVhbiAiYWRkIGxpbmUtdGhyb3VnaCIgcmF0aGVyIHRoYW4gImxpbmUtdGhyb3VnaCIKLSAgICB9
Ci0KLSAgICBzYSA9IFtbYSBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVd
IGludFZhbHVlXTsKLSAgICBzYiA9IFtbYiBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJp
YnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpZiAoc2EgPT0gc2IpIHsKLSAgICAgICAgaWYgKHNh
ID4gMCkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3VwZXIiXTsKLSAg
ICAgICAgZWxzZSBpZiAoc2EgPCAwKQotICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxp
Z246QCJzdWIiXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2Fs
QWxpZ246QCJiYXNlbGluZSJdOwotICAgIH0KLQotICAgIGludCB1YSA9IFtbYSBvYmplY3RGb3JL
ZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpbnQgdWIg
PSBbW2Igb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1
ZV07Ci0gICAgaWYgKHVhID09IHViKSB7Ci0gICAgICAgIGlmICh1YSA9PSBOU1VuZGVybGluZVN0
eWxlTm9uZSkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRl
Y29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOwotICAgICAg
ICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gIm5vIHVuZGVybGluZSIgcmF0aGVyIHRoYW4gIm5vbmUi
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10
ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRlcmxpbmUiIHByaW9yaXR5OkAi
Il07Ci0gICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAiYWRkIHVuZGVybGluZSIgcmF0aGVy
IHRoYW4gInVuZGVybGluZSIKLSAgICB9Ci0KLSAgICByZXR1cm4gc3R5bGU7Ci19Ci0KLS0gKHZv
aWQpY2hhbmdlQXR0cmlidXRlczooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQot
Ci0gICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGb3JBdHRyaWJ1
dGVDaGFuZ2U6c2VuZGVyXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRl
c107Ci19Ci0KLS0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tQ29sb3JQYW5l
bFdpdGhTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlv
biAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07Ci0KLSAgICBBU1NFUlQoW3N0eWxlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pOwotICAgIFtzdHlsZSBwZXJmb3JtU2VsZWN0b3I6c2Vs
ZWN0b3Igd2l0aE9iamVjdDpbc2VsZiBfY29sb3JBc1N0cmluZzpbW05TQ29sb3JQYW5lbCBzaGFy
ZWRDb2xvclBhbmVsXSBjb2xvcl1dXTsKLSAgICAKLSAgICByZXR1cm4gc3R5bGU7Ci19Ci0KLS0g
KEVkaXRBY3Rpb24pX3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjooU0VMKXNl
bGVjdG9yCi17Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29s
b3I6KSkKLSAgICAgICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRCYWNrZ3JvdW5kQ29sb3I7ICAgIAot
ICAgIHJldHVybiBFZGl0QWN0aW9uU2V0Q29sb3I7Ci19Ci0KLS0gKHZvaWQpX2NoYW5nZUNTU0Nv
bG9yVXNpbmdTZWxlY3RvcjooU0VMKXNlbGVjdG9yIGluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UK
LXsKLSAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9zdHlsZUZyb21D
b2xvclBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9yXTsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0g
W3NlbGYgX3dlYlZpZXddOwotICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndh
cmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0lu
RE9NUmFuZ2U6cmFuZ2VdKQotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBseVN0eWxl
KGNvcmUoc3R5bGUpLCBbc2VsZiBfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9y
OnNlbGVjdG9yXSk7Ci19Ci0KLS0gKHZvaWQpY2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIE1pbWlja2luZyBO
U1RleHRWaWV3LCB0aGlzIG1ldGhvZCBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUK
LSAgICAvLyBlbnRpcmUgZG9jdW1lbnQuIFRoZXJlIGlzIG5vIE5TVGV4dFZpZXcgQVBJIGZvciBz
ZXR0aW5nIHRoZSBiYWNrZ3JvdW5kCi0gICAgLy8gY29sb3Igb24gdGhlIHNlbGVjdGVkIHJhbmdl
IG9ubHkuIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkKLSAgICAvLyBuZXZlciBj
YWxsZWQgZnJvbSB0aGUgVUkgKHNlZSBjb21tZW50IGluIGNoYW5nZUNvbG9yOikuCi0gICAgLy8g
RklYTUU6IHRoaXMgYWN0dWFsbHkgaGFzIG5vIGVmZmVjdCB3aGVuIGNhbGxlZCwgcHJvYmFibHkg
ZHVlIHRvIDM2NTQ4NTAuIF9kb2N1bWVudFJhbmdlIHNlZW1zCi0gICAgLy8gdG8gZG8gdGhlIHJp
Z2h0IHRoaW5nIGJlY2F1c2UgaXQgd29ya3MgaW4gc3RhcnRTcGVha2luZzosIGFuZCBJIGtub3cg
c2V0QmFja2dyb3VuZENvbG9yOiBkb2VzIHRoZQotICAgIC8vIHJpZ2h0IHRoaW5nIGJlY2F1c2Ug
SSB0ZXN0ZWQgaXQgd2l0aCBbc2VsZiBfc2VsZWN0ZWRSYW5nZV0uCi0gICAgLy8gRklYTUU6IFRo
aXMgd29uJ3QgYWN0dWFsbHkgYXBwbHkgdGhlIHN0eWxlIHRvIHRoZSBlbnRpcmUgcmFuZ2UgaGVy
ZSwgYmVjYXVzZSBpdCBlbmRzIHVwIGNhbGxpbmcKLSAgICAvLyBbZnJhbWUgX2FwcGx5U3R5bGU6
XSwgd2hpY2ggb3BlcmF0ZXMgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBUbyBtYWtlIHRoaXMg
d29yayByaWdodCwgd2UnbGwKLSAgICAvLyBuZWVkIHRvIHNhdmUgb2ZmIHRoZSBzZWxlY3Rpb24s
IHRlbXBvcmFyaWx5IHNldCBpdCB0byB0aGUgZW50aXJlIHJhbmdlLCBtYWtlIHRoZSBjaGFuZ2Us
IHRoZW4KLSAgICAvLyByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uLgotICAgIFtzZWxmIF9jaGFu
Z2VDU1NDb2xvclVzaW5nU2VsZWN0b3I6QHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xvcjopIGlu
UmFuZ2U6W3NlbGYgX2RvY3VtZW50UmFuZ2VdXTsKLX0KLQotLSAodm9pZCljaGFuZ2VDb2xvcjoo
aWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgLy8gRklYTUU6IGluIE5T
VGV4dFZpZXcsIHRoaXMgbWV0aG9kIGNhbGxzIGNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9y
OiB3aGVuIGEKLSAgICAvLyBwcml2YXRlIGNhbGwgaGFzIGVhcmxpZXIgYmVlbiBtYWRlIGJ5IFtO
U0ZvbnRGb250RWZmZWN0c0JveCBjaGFuZ2VDb2xvcjpdLCBzZWUgMzY3NDQ5My4gCi0gICAgLy8g
QXBwS2l0IHdpbGwgaGF2ZSB0byBiZSByZXZpc2VkIHRvIGFsbG93IHRoaXMgdG8gd29yayB3aXRo
IGFueXRoaW5nIHRoYXQgaXNuJ3QgYW4gCi0gICAgLy8gTlNUZXh0Vmlldy4gSG93ZXZlciwgdGhp
cyBtaWdodCBub3QgYmUgcmVxdWlyZWQgZm9yIFRpZ2VyLCBzaW5jZSB0aGUgYmFja2dyb3VuZC1j
b2xvciAKLSAgICAvLyBjaGFuZ2luZyBib3ggaW4gdGhlIGZvbnQgcGFuZWwgZG9lc24ndCB3b3Jr
IGluIE1haWwgKDM2NzQ0ODEpLCB0aG91Z2ggaXQgZG9lcyBpbiBUZXh0RWRpdC4KLSAgICBbc2Vs
ZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Db2xvclBhbmVsV2l0aFNl
bGVjdG9yOkBzZWxlY3RvcihzZXRDb2xvcjopXSAKLSAgICAgICAgICAgICAgICAgIHdpdGhVbmRv
QWN0aW9uOkVkaXRBY3Rpb25TZXRDb2xvcl07Ci19Ci0KLS0gKHZvaWQpX2NoYW5nZVdvcmRDYXNl
V2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsK
LSAgICBbc2VsZiBzZWxlY3RXb3JkOm5pbF07Ci0gICAgTlNTdHJpbmcgKndvcmQgPSBbW2ZyYW1l
IF9zZWxlY3RlZFN0cmluZ10gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKLSAgICAvLyBGSVhN
RTogRG9lcyB0aGlzIG5lZWQgYSBkaWZmZXJlbnQgYWN0aW9uIGNvbnRleHQgb3RoZXIgdGhhbiAi
dHlwZWQiPwotICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ondv
cmQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblR5cGVkXSkKLSAgICAgICAgW2ZyYW1l
IF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6d29yZCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFy
dFJlcGxhY2U6Tk9dOwotfQotCi0tICh2b2lkKXVwcGVyY2FzZVdvcmQ6KGlkKXNlbmRlcgotewot
ICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxl
Y3RvcjpAc2VsZWN0b3IodXBwZXJjYXNlU3RyaW5nKV07Ci19Ci0KLS0gKHZvaWQpbG93ZXJjYXNl
V29yZDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgW3NlbGYgX2No
YW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBzZWxlY3Rvcihsb3dlcmNhc2VTdHJpbmcpXTsKLX0K
LQotLSAodm9pZCljYXBpdGFsaXplV29yZDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9M
T0dVRQotCi0gICAgW3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBzZWxlY3Rvcihj
YXBpdGFsaXplZFN0cmluZyldOwotfQotCi0tICh2b2lkKWNvbXBsZXRlOihpZClzZW5kZXIKLXsK
LSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyKQotICAgICAgICBf
cHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgPSBbW1dlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgYWxs
b2NdIGluaXRXaXRoSFRNTFZpZXc6c2VsZl07Ci0gICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxl
ciBkb0NvbXBsZXRpb25dOwotfQotCi0tICh2b2lkKWNoZWNrU3BlbGxpbmc6KGlkKXNlbmRlcgot
ewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKCk7Ci19Ci0KLS0gKHZvaWQpc2hvd0d1ZXNzUGFuZWw6KGlkKXNlbmRl
cgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2Vy
ID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgaWYgKCFjaGVja2Vy
KSB7Ci0gICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBOU1BhbmVsICpzcGVsbGluZ1BhbmVsID0gW2NoZWNrZXIg
c3BlbGxpbmdQYW5lbF07Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgLy8gUG9zdC1U
aWdlciwgdGhpcyBtZW51IGl0ZW0gaXMgYSBzaG93L2hpZGUgdG9nZ2xlLCB0byBtYXRjaCBBcHBL
aXQuIExlYXZlIFRpZ2VyIGJlaGF2aW9yIGFsb25lCi0gICAgLy8gdG8gbWF0Y2ggcmVzdCBvZiBP
UyBYLgotICAgIGlmIChbc3BlbGxpbmdQYW5lbCBpc1Zpc2libGVdKSB7Ci0gICAgICAgIFtzcGVs
bGluZ1BhbmVsIG9yZGVyT3V0OnNlbmRlcl07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5k
aWYKLSAgICAKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
Ci0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyh0
cnVlKTsKLSAgICBbc3BlbGxpbmdQYW5lbCBvcmRlckZyb250OnNlbmRlcl07Ci19Ci0KLS0gKHZv
aWQpX2NoYW5nZVNwZWxsaW5nVG9Xb3JkOihOU1N0cmluZyAqKW5ld1dvcmQKLXsKLSAgICBpZiAo
IVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgY29ycmVj
dCB0byBlbXB0eSBzdHJpbmcuICAoQXBwS2l0IGNoZWNrZWQgdGhpcywgd2UgbWlnaHQgYXMgd2Vs
bCB0b28uKQotICAgIGlmICghW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0pIHsK
LSAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIGlmIChbbmV3V29yZCBpc0VxdWFsVG9TdHJpbmc6QCIiXSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQ6bmV3V29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKLSAg
ICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3JkIHNl
bGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwotfQotCi0tICh2b2lkKWNoYW5n
ZVNwZWxsaW5nOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2Vs
ZiBfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6W1tzZW5kZXIgc2VsZWN0ZWRDZWxsXSBzdHJpbmdWYWx1
ZV1dOwotfQotCi0tICh2b2lkKXBlcmZvcm1GaW5kUGFuZWxBY3Rpb246KGlkKXNlbmRlcgotewot
ICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIEltcGxlbWVudGluZyB0aGlzIHdpbGwgcHJv
YmFibHkgcmVxdWlyZSBjb3B5aW5nIGFsbCBvZiBOU0ZpbmRQYW5lbC5oIGFuZCAubS4KLSAgICAv
LyBXZSBuZWVkICphbG1vc3QqIHRoZSBzYW1lIHRoaW5nIGFzIEFwcEtpdCwgYnV0IG5vdCBxdWl0
ZS4KLSAgICBMT0dfRVJST1IoInVuaW1wbGVtZW50ZWQiKTsKLX0KLQotLSAodm9pZClzdGFydFNw
ZWFraW5nOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBXZWJGcmFt
ZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9z
ZWxlY3RlZFJhbmdlXTsKLSAgICBpZiAoIXJhbmdlIHx8IFtyYW5nZSBjb2xsYXBzZWRdKQotICAg
ICAgICByYW5nZSA9IFtzZWxmIF9kb2N1bWVudFJhbmdlXTsKLSAgICBbTlNBcHAgc3BlYWtTdHJp
bmc6W2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpyYW5nZV1dOwotfQotCi0tICh2b2lkKXN0b3BTcGVh
a2luZzooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgW05TQXBwIHN0
b3BTcGVha2luZzpzZW5kZXJdOwotfQotCi0tICh2b2lkKXRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0
aW9uOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtzZWxm
IF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBXcml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IFJpZ2h0VG9MZWZ0V3JpdGlu
Z0RpcmVjdGlvbjsKLSAgICBzd2l0Y2ggKGNvcmVGcmFtZS0+YmFzZVdyaXRpbmdEaXJlY3Rpb25G
b3JTZWxlY3Rpb25TdGFydCgpKSB7Ci0gICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uTGVm
dFRvUmlnaHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOU1dyaXRpbmdEaXJl
Y3Rpb25SaWdodFRvTGVmdDoKLSAgICAgICAgICAgIGRpcmVjdGlvbiA9IExlZnRUb1JpZ2h0V3Jp
dGluZ0RpcmVjdGlvbjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBUaGUgd3JpdGlu
Z0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0IG1ldGhvZCB3aWxsIG5ldmVyIHJldHVybiAibmF0
dXJhbCIuIEl0Ci0gICAgICAgIC8vIHdpbGwgYWx3YXlzIHJldHVybiBhIGNvbmNyZXRlIGRpcmVj
dGlvbi4gU28sIGtlZXAgdGhlIGNvbXBpbGVyIGhhcHB5LCBhbmQgYXNzZXJ0IG5vdCByZWFjaGVk
LgotICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlm
IChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZy
YW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9uKTsKLX0KLQot
LSAodm9pZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgQ09N
TUFORF9QUk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IHN0YXRp
Y19jYXN0PE5TV3JpdGluZ0RpcmVjdGlvbj4oW3NlbmRlciB0YWddKTsKLSAgICAKLSAgICAvLyBX
ZSBkaXNhYmxlIHRoZSBtZW51IGl0ZW0gdGhhdCBwZXJmb3JtcyB0aGlzIGFjdGlvbiBiZWNhdXNl
IHdlIGNhbid0IGltcGxlbWVudAotICAgIC8vIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwncyBi
ZWhhdmlvciB1c2luZyBDU1MuCi0gICAgQVNTRVJUKHdyaXRpbmdEaXJlY3Rpb24gIT0gTlNXcml0
aW5nRGlyZWN0aW9uTmF0dXJhbCk7Ci0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJhc2VXcml0
aW5nRGlyZWN0aW9uKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRv
UmlnaHQgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdE
aXJlY3Rpb24pOwotfQotCi1zdGF0aWMgQk9PTCB3cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NF
bmFibGVkKCkKLXsKLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICByZXR1cm4gWUVTOwotI2Vsc2UKLSAgICBOU1VzZXJE
ZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
OwotICAgIHJldHVybiBbZGVmYXVsdHMgYm9vbEZvcktleTpAIk5TQWxsb3dzQmFzZVdyaXRpbmdE
aXJlY3Rpb25LZXlCaW5kaW5ncyJdIHx8IFtkZWZhdWx0cyBib29sRm9yS2V5OkAiQXBwbGVUZXh0
RGlyZWN0aW9uIl07Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfY2hhbmdlQmFzZVdyaXRpbmdEaXJl
Y3Rpb25UbzooTlNXcml0aW5nRGlyZWN0aW9uKWRpcmVjdGlvbgotewotICAgIGlmICghW3NlbGYg
X2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0aWMgQk9PTCBiaW5kaW5nc0Vu
YWJsZWQgPSB3cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFbmFibGVkKCk7Ci0KLSAgICBpZiAo
IWJpbmRpbmdzRW5hYmxlZCkgewotICAgICAgICBOU0JlZXAoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkK
LSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGly
ZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gTGVmdFRvUmlnaHRXcml0
aW5nRGlyZWN0aW9uIDogUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsKLX0KLQotLSAodm9p
ZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDooaWQpc2VuZGVyCi17Ci0gICAg
Q09NTUFORF9QUk9MT0dVRQotCi0gICAgW3NlbGYgX2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9u
VG86TlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHRdOwotfQotCi0tICh2b2lkKW1ha2VCYXNl
V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BS
T0xPR1VFCi0KLSAgICBbc2VsZiBfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzpOU1dyaXRp
bmdEaXJlY3Rpb25SaWdodFRvTGVmdF07Ci19Ci0KLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0tICh2b2lkKWNoYW5nZUJhc2VX
cml0aW5nRGlyZWN0aW9uVG9MVFI6KGlkKXNlbmRlcgotewotICAgIFtzZWxmIG1ha2VCYXNlV3Jp
dGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OnNlbmRlcl07Ci19Ci0KLS0gKHZvaWQpY2hhbmdlQmFz
ZVdyaXRpbmdEaXJlY3Rpb25Ub1JUTDooaWQpc2VuZGVyCi17Ci0gICAgW3NlbGYgbWFrZUJhc2VX
cml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6c2VuZGVyXTsKLX0KLSNlbmRpZgotCi0tICh2b2lk
KW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6KGlkKXNlbmRlcgotewotICAgIExPR19F
UlJPUigiU2VudCBmcm9tICVALiIsIHNlbmRlcik7Ci19Ci0KLSNpZiAwCi0KLS8vIENTUyBkb2Vz
IG5vdCBoYXZlIGEgd2F5IHRvIHNwZWNpZnkgYW4gb3V0bGluZSBmb250LCB3aGljaCBtYXkgbWFr
ZSB0aGlzIGRpZmZpY3VsdCB0byBpbXBsZW1lbnQuCi0vLyBNYXliZSBhIHNwZWNpYWwgY2FzZSBv
ZiB0ZXh0LXNoYWRvdz8KLS0gKHZvaWQpb3V0bGluZTooaWQpc2VuZGVyOwotCi0vLyBUaGlzIGlz
IHBhcnQgb2YgdGFibGUgc3VwcG9ydCwgd2hpY2ggbWF5IGJlIGluIE5TVGV4dFZpZXcgZm9yIFRp
Z2VyLgotLy8gSXQncyBwcm9iYWJseSBzaW1wbGUgdG8gZG8gdGhlIGVxdWl2YWxlbnQgdGhpbmcg
Zm9yIFdlYktpdC4KLS0gKHZvaWQpaW5zZXJ0VGFibGU6KGlkKXNlbmRlcjsKLQotLy8gVGhpcyBj
b3VsZCBiZSBpbXBvcnRhbnQuCi0tICh2b2lkKXRvZ2dsZVRyYWRpdGlvbmFsQ2hhcmFjdGVyU2hh
cGU6KGlkKXNlbmRlcjsKLQotLy8gSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGVxdWl2YWxlbnRzIG9m
IHRoZXNlIGluIHRoZSB3ZWIgd29ybGQgYXJlLgotLSAodm9pZClpbnNlcnRMaW5lU2VwYXJhdG9y
OihpZClzZW5kZXI7Ci0tICh2b2lkKWluc2VydFBhZ2VCcmVhazooaWQpc2VuZGVyOwotCi0vLyBU
aGVzZSBtZXRob2RzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gTlNUZXh0VmlldyB5ZXQgYXQgdGhl
IHRpbWUgb2YgdGhpcyB3cml0aW5nLgotLSAodm9pZCljaGFuZ2VDYXNlT2ZMZXR0ZXI6KGlkKXNl
bmRlcjsKLS0gKHZvaWQpdHJhbnNwb3NlV29yZHM6KGlkKXNlbmRlcjsKLQotI2VuZGlmCi0KLSNp
Zm5kZWYgQlVJTERJTkdfT05fVElHRVIKLQotLy8gT3ZlcnJpZGUgdGhpcyBzbyB0aGF0IEFwcEtp
dCB3aWxsIHNlbmQgdXMgYXJyb3cga2V5cyBhcyBrZXkgZG93biBldmVudHMgc28gd2UgY2FuCi0v
LyBzdXBwb3J0IHRoZW0gdmlhIHRoZSBrZXkgYmluZGluZ3MgbWVjaGFuaXNtLgotLSAoQk9PTClf
d2FudHNLZXlEb3duRm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIGJvb2wgaGF2ZVdl
YkNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEg
ZnJhbWUsIG91ciBrZXlEb3duIG1ldGhvZCB3aWxsIGhhbmRsZSBrZXkgYmluZGluZ3MgYWZ0ZXIg
c2VuZGluZwotICAgIC8vIHRoZSBldmVudCB0aHJvdWdoIHRoZSBET00sIHNvIGFzayBBcHBLaXQg
bm90IHRvIGRvIGl0cyBlYXJseSBzcGVjaWFsIGtleSBiaW5kaW5nCi0gICAgLy8gbWFwcGluZy4g
SWYgd2UgZG9uJ3QgaGF2ZSBhIGZyYW1lLCBqdXN0IGxldCB0aGluZ3Mgd29yayB0aGUgbm9ybWFs
IHdheSB3aXRob3V0Ci0gICAgLy8gYSBrZXlEb3duLgotICAgIHJldHVybiBoYXZlV2ViQ29yZUZy
YW1lOwotfQotCi0jZWxzZQotCi0vLyBTdXBlci1oYWNrIGFsZXJ0LgotLy8gQWxsIHRoaXMgY29k
ZSBhY2NvbXBsaXNoZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIF93YW50c0tleURvd25Gb3JFdmVu
dCBtZXRob2QgYWJvdmUuCi0KLS8vIFJldHVybnMgYSBzZWxlY3RvciBvbmx5IGlmIGNhbGxlZCB3
aGlsZToKLS8vICAgMSkgZmlyc3QgcmVzcG9uZGVyIGlzIHNlbGYKLS8vICAgMikgaGFuZGxpbmcg
YSBrZXkgZG93biBldmVudAotLy8gICAzKSBub3QgeWV0IGluc2lkZSBrZXlEb3duOiBtZXRob2QK
LS8vICAgNCkga2V5IGlzIGFuIGFycm93IGtleQotLy8gVGhlIHNlbGVjdG9yIGlzIHRoZSBvbmUg
dGhhdCBnZXRzIHNlbnQgYnkgLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJkVUlLZXldIGZvciB0
aGlzIGtleS4KLS0gKFNFTClfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2lu
ZwotewotICAgIE5TV2luZG93ICp3ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAoW3cgZmlyc3RS
ZXNwb25kZXJdICE9IHNlbGYpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIE5TRXZlbnQgKmUg
PSBbdyBjdXJyZW50RXZlbnRdOwotICAgIGlmIChbZSB0eXBlXSAhPSBOU0tleURvd24pCi0gICAg
ICAgIHJldHVybiBOVUxMOwotICAgIGlmIChlID09IF9wcml2YXRlLT5rZXlEb3duRXZlbnQpCi0g
ICAgICAgIHJldHVybiBOVUxMOwotICAgIE5TU3RyaW5nICpzID0gW2UgY2hhcmFjdGVyc0lnbm9y
aW5nTW9kaWZpZXJzXTsKLSAgICBpZiAoW3MgbGVuZ3RoXSA9PSAwKQotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICBzd2l0Y2ggKFtzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKLSAgICAgICAgY2Fz
ZSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5OgotICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvciht
b3ZlRG93bjopOwotICAgICAgICBjYXNlIE5TTGVmdEFycm93RnVuY3Rpb25LZXk6Ci0gICAgICAg
ICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVMZWZ0Oik7Ci0gICAgICAgIGNhc2UgTlNSaWdodEFy
cm93RnVuY3Rpb25LZXk6Ci0gICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVSaWdodDop
OwotICAgICAgICBjYXNlIE5TVXBBcnJvd0Z1bmN0aW9uS2V5OgotICAgICAgICAgICAgcmV0dXJu
IEBzZWxlY3Rvcihtb3ZlVXA6KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBOVUxMOwotICAgIH0KLX0KLQotLy8gUmV0dXJucyBOTyBpbnN0ZWFkIG9mIFlFUyBpZiBjYWxs
ZWQgb24gdGhlIHNlbGVjdG9yIHRoYXQgdGhlCi0vLyBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3Rv
cklmUHJlcHJvY2Vzc2luZyBtZXRob2QgcmV0dXJucy4KLS8vIFRoaXMgc2hvdWxkIG9ubHkgaGFw
cGVuIGluc2lkZSAtW05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0sCi0vLyBhbmQgdG9n
ZXRoZXIgd2l0aCB0aGUgY2hhbmdlIGJlbG93IHNob3VsZCBjYXVzZSB0aGF0IG1ldGhvZAotLy8g
dG8gcmV0dXJuIE5PIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBrZXkuCi0vLyBBbHNvIHNldCBh
IDEtc2hvdCBmbGFnIGZvciB0aGUgbmV4dFJlc3BvbmRlciBjaGVjayBiZWxvdy4KLS0gKEJPT0wp
cmVzcG9uZHNUb1NlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBpZiAoIVtzdXBlciByZXNw
b25kc1RvU2VsZWN0b3I6c2VsZWN0b3JdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgU0VMIGFy
cm93S2V5U2VsZWN0b3IgPSBbc2VsZiBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJv
Y2Vzc2luZ107Ci0gICAgaWYgKHNlbGVjdG9yICE9IGFycm93S2V5U2VsZWN0b3IpCi0gICAgICAg
IHJldHVybiBZRVM7Ci0gICAgX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2UgPSBZ
RVM7Ci0gICAgcmV0dXJuIE5POwotfQotCi0vLyBSZXR1cm5zIG5pbCBpbnN0ZWFkIG9mIHRoZSBu
ZXh0IHJlc3BvbmRlciBpZiBjYWxsZWQgd2hlbiB0aGUKLS8vIG9uZS1zaG90IGZsYWcgaXMgc2V0
LCBhbmQgX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcKLS8vIHJldHVy
bnMgc29tZXRoaW5nIG90aGVyIHRoYW4gTlVMTC4gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW5z
aWRlCi0vLyAtW05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0gYW5kIHRvZ2V0aGVyIHdp
dGggdGhlIGNoYW5nZSBhYm92ZQotLy8gc2hvdWxkIGNhdXNlIHRoYXQgbWV0aG9kIHRvIHJldHVy
biBOTyByYXRoZXIgdGhhbiBoYW5kbGluZyB0aGUga2V5LgotLSAoTlNSZXNwb25kZXIgKiluZXh0
UmVzcG9uZGVyCi17Ci0gICAgQk9PTCBkaXNhYmxlZCA9IF9wcml2YXRlLT5uZXh0UmVzcG9uZGVy
RGlzYWJsZWRPbmNlOwotICAgIF9wcml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlID0g
Tk87Ci0gICAgaWYgKGRpc2FibGVkICYmIFtzZWxmIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9y
SWZQcmVwcm9jZXNzaW5nXSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVy
biBbc3VwZXIgbmV4dFJlc3BvbmRlcl07Ci19Ci0KLSNlbmRpZgotCi0tICh2b2lkKV91cGRhdGVD
b250cm9sVGludHMKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwot
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpOwotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuOwotICAgIHZpZXct
PnVwZGF0ZUNvbnRyb2xUaW50cygpOwotfQotCi0vLyBEZXNwaXRlIGl0cyBuYW1lLCB0aGlzIGlz
IGNhbGxlZCBhdCBkaWZmZXJlbnQgdGltZXMgdGhhbiB3aW5kb3dEaWRCZWNvbWVLZXkgaXMuCi0v
LyBJdCB0YWtlcyBpbnRvIGFjY291bnQgYWxsIHRoZSBvdGhlciBmYWN0b3JzIHRoYXQgZGV0ZXJt
aW5lIHdoZW4gTlNDZWxsIGRyYXdzCi0vLyB3aXRoIGRpZmZlcmVudCB0aW50cywgc28gaXQncyB0
aGUgcmlnaHQgY2FsbCB0byB1c2UgZm9yIGNvbnRyb2wgdGludHMuIFdlJ2QgcHJlZmVyCi0vLyB0
byBkbyB0aGlzIHdpdGggQVBJLiA8cmRhcjovL3Byb2JsZW0vNTEzNjc2MD4KLS0gKHZvaWQpX3dp
bmRvd0NoYW5nZWRLZXlTdGF0ZQotewotICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkKLSAgICAg
ICAgW3NlbGYgX3VwZGF0ZUNvbnRyb2xUaW50c107Ci0gICAgZWxzZQotICAgICAgICBbc2VsZiBw
ZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKF91cGRhdGVDb250cm9sVGludHMp
IHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9dOwotCi0gICAgW3N1cGVyIF93aW5kb3dD
aGFuZ2VkS2V5U3RhdGVdOwotfQotCi0tICh2b2lkKW90aGVyTW91c2VEb3duOihOU0V2ZW50ICop
ZXZlbnQKLXsKLSAgICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKLSAgICAgICAgW3Nl
bGYgbW91c2VEb3duOmV2ZW50XTsKLSAgICBlbHNlCi0gICAgICAgIFtzdXBlciBvdGhlck1vdXNl
RG93bjpldmVudF07Ci19Ci0KLS0gKHZvaWQpb3RoZXJNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAotewotICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQotICAgICAgICBbc2Vs
ZiBtb3VzZURyYWdnZWQ6ZXZlbnRdOwotICAgIGVsc2UKLSAgICAgICAgW3N1cGVyIG90aGVyTW91
c2VEcmFnZ2VkOmV2ZW50XTsKLX0KLQotLSAodm9pZClvdGhlck1vdXNlVXA6KE5TRXZlbnQgKill
dmVudAotewotICAgIGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQotICAgICAgICBbc2Vs
ZiBtb3VzZVVwOmV2ZW50XTsKLSAgICBlbHNlCi0gICAgICAgIFtzdXBlciBvdGhlck1vdXNlVXA6
ZXZlbnRdOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU0FycmF5IChXZWJIVE1MVmll
dykKLQotLSAodm9pZClfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNl
bGVjdG9yIHdpdGhPYmplY3Q6KGlkKW9iamVjdAotewotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtzZWxmIG9iamVjdEVudW1l
cmF0b3JdOwotICAgIFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqdmlldzsKLSAgICB3aGlsZSAoKHZp
ZXcgPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKQotICAgICAgICBpZiAoW3ZpZXcg
aXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKQotICAgICAg
ICAgICAgW3ZpZXcgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6b2JqZWN0XTsK
LSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViSW50
ZXJuYWwpCi0KLS0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKLXsKLSAgICBbc2VsZiBfdXBkYXRl
U2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyXTsKLSAgICBbc2VsZiBfdXBkYXRlRm9udFBhbmVsXTsK
LSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAg
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVlKTsK
LX0KLQotLSAodm9pZClfdXBkYXRlRm9udFBhbmVsCi17Ci0gICAgLy8gRklYTUU6IE5TVGV4dFZp
ZXcgYmFpbHMgb3V0IGlmIGJlY29taW5nIG9yIHJlc2lnbmluZyBmaXJzdCByZXNwb25kZXIsIGZv
ciB3aGljaCBpdCBoYXMgaXZhciBmbGFncy4gTm90Ci0gICAgLy8gc3VyZSBpZiB3ZSBuZWVkIHRv
IGRvIHNvbWV0aGluZyBzaW1pbGFyLgotICAgIAotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRv
d107Ci0gICAgLy8gRklYTUU6IGlzIHRoaXMgZmlyc3QtcmVzcG9uZGVyIGNoZWNrIGNvcnJlY3Q/
IFdoYXQgaGFwcGVucyBpZiBhIHN1YmZyYW1lIGlzIGVkaXRhYmxlIGFuZCBpcyBmaXJzdCByZXNw
b25kZXI/Ci0gICAgaWYgKFtOU0FwcCBrZXlXaW5kb3ddICE9IHdpbmRvdyB8fCBbd2luZG93IGZp
cnN0UmVzcG9uZGVyXSAhPSBzZWxmKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBt
dWx0aXBsZUZvbnRzID0gZmFsc2U7Ci0gICAgTlNGb250ICpmb250ID0gbmlsOwotICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoY29u
c3QgU2ltcGxlRm9udERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+Zm9udEZvclNlbGVj
dGlvbihtdWx0aXBsZUZvbnRzKSkKLSAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0TlNGb250KCk7
Ci0gICAgfQotICAgIAotCi0gICAgLy8gRklYTUU6IGZvciBub3csIHJldHVybiBhIGJvZ3VzIGZv
bnQgdGhhdCBkaXN0aW5ndWlzaGVzIHRoZSBlbXB0eSBzZWxlY3Rpb24gZnJvbSB0aGUgbm9uLWVt
cHR5Ci0gICAgLy8gc2VsZWN0aW9uLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyBv
bmNlIHRoZSByZXN0IG9mIHRoaXMgY29kZSB3b3JrcyBwcm9wZXJseS4KLSAgICBpZiAoZm9udCA9
PSBuaWwpCi0gICAgICAgIGZvbnQgPSBbc2VsZiBfaGFzU2VsZWN0aW9uXSA/IFtOU0ZvbnQgbWVu
dUZvbnRPZlNpemU6MjNdIDogW05TRm9udCB0b29sVGlwc0ZvbnRPZlNpemU6MTddOwotICAgIEFT
U0VSVChmb250ICE9IG5pbCk7Ci0KLSAgICBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFn
ZXJdIHNldFNlbGVjdGVkRm9udDpmb250IGlzTXVsdGlwbGU6bXVsdGlwbGVGb250c107Ci0KLSAg
ICAvLyBGSVhNRTogd2UgZG9uJ3Qga2VlcCB0cmFjayBvZiBzZWxlY3RlZCBhdHRyaWJ1dGVzLCBv
ciBzZXQgdGhlbSBvbiB0aGUgZm9udCBwYW5lbC4gVGhpcwotICAgIC8vIGFwcGVhcnMgdG8gaGF2
ZSBubyBlZmZlY3Qgb24gdGhlIFVJLiBFLmcuLCB1bmRlcmxpbmVkIHRleHQgaW4gTWFpbCBvciBU
ZXh0RWRpdCBpcwotICAgIC8vIG5vdCByZWZsZWN0ZWQgaW4gdGhlIGZvbnQgcGFuZWwuIE1heWJl
IHNvbWVkYXkgdGhpcyB3aWxsIGNoYW5nZS4KLX0KLQotLSAoQk9PTClfY2FuU21hcnRDb3B5T3JE
ZWxldGUKLXsKLSAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFi
bGVkXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rp
b25HcmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eTsKLX0KLQotLSAoTlNFdmVudCAqKV9t
b3VzZURvd25FdmVudAotewotICAgIHJldHVybiBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQ7Ci19
Ci0KLS0gKGlkPFdlYkhUTUxIaWdobGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlwZTooTlNTdHJp
bmcqKXR5cGUKLXsKLSAgICByZXR1cm4gW19wcml2YXRlLT5oaWdobGlnaHRlcnMgb2JqZWN0Rm9y
S2V5OnR5cGVdOwotfQotCi0tIChXZWJGcmFtZSAqKV9mcmFtZQotewotICAgIHJldHVybiBbX3By
aXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdOwotfQotCi0tICh2b2lkKXBhc3RlOihpZClzZW5k
ZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+
IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChjb3JlRnJhbWUtPmVkaXRvcigpLT50cnlESFRNTFBhc3RlKCkpCi0gICAgICAgIHJl
dHVybjsgLy8gREhUTUwgZGlkIHRoZSB3aG9sZSBvcGVyYXRpb24KLSAgICBpZiAoIWNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKLSAgICAgICAgW3Nl
bGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0g
YWxsb3dQbGFpblRleHQ6WUVTXTsKLSAgICBlbHNlCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9y
KCktPnBhc3RlQXNQbGFpblRleHQoKTsKLX0KLQotLSAodm9pZClwYXN0ZUFzUGxhaW5UZXh0Oihp
ZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtzZWxmIF9jYW5F
ZGl0XSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtzZWxmIF9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBh
c3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF1dOwotfQotCi0tICh2b2lk
KWNsb3NlSWZOb3RDdXJyZW50VmlldwotewotICAgIGlmIChbW1tzZWxmIF9mcmFtZV0gZnJhbWVW
aWV3XSBkb2N1bWVudFZpZXddICE9IHNlbGYpCi0gICAgICAgIFtzZWxmIGNsb3NlXTsKLX0KLQot
LSAoRE9NRG9jdW1lbnRGcmFnbWVudCopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIHJldHVybiBbc2VsZiBfZG9jdW1lbnRG
cmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0Om5pbCBhbGxvd1BsYWlu
VGV4dDpOT107Ci19Ci0KLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLQotLSAoQk9PTClpc0dy
YW1tYXJDaGVja2luZ0VuYWJsZWQKLXsKLSAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlz
IHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBt
dXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoZSBBcHBLaXQg
Y29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICByZXR1cm4gW1tzZWxmIF93ZWJW
aWV3XSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldEdyYW1tYXJD
aGVja2luZ0VuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZp
ZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0
IHdlIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCi0gICAgLy8gdGhlIEFw
cEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgotICAgIFtbc2VsZiBfd2ViVmll
d10gc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0b2dnbGVH
cmFtbWFyQ2hlY2tpbmc6KGlkKXNlbmRlcgotewotICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZp
ZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0
IHdlIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCi0gICAgLy8gdGhlIEFw
cEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgotICAgIFtbc2VsZiBfd2ViVmll
d10gdG9nZ2xlR3JhbW1hckNoZWNraW5nOnNlbmRlcl07Ci19Ci0KLQotc3RhdGljIENHUG9pbnQg
Y29yZUdyYXBoaWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2ludChOU1BvaW50IHBvaW50
KQotewotICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVuc107Ci0gICAgCi0g
ICAgaWYgKFtzY3JlZW5zIGNvdW50XSA9PSAwKSB7Ci0gICAgICAgIC8vIFlvdSBjb3VsZCB0aGVv
cmV0aWNhbGx5IGdldCBoZXJlIGlmIHJ1bm5pbmcgd2l0aCBubyBtb25pdG9yLCBpbiB3aGljaCBj
YXNlIGl0IGRvZXNuJ3QgbWF0dGVyCi0gICAgICAgIC8vIG11Y2ggd2hlcmUgdGhlICJvbi1zY3Jl
ZW4iIHBvaW50IGlzLgotICAgICAgICByZXR1cm4gQ0dQb2ludE1ha2UocG9pbnQueCwgcG9pbnQu
eSk7Ci0gICAgfQotICAgIAotICAgIC8vIEZsaXAgdGhlIHkgY29vcmRpbmF0ZSBmcm9tIHRoZSB0
b3Agb2YgdGhlIG1lbnUgYmFyIHNjcmVlbiAtLSBzZWUgNDYzNjM5MAotICAgIHJldHVybiBDR1Bv
aW50TWFrZShwb2ludC54LCBOU01heFkoW1tzY3JlZW5zIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVd
KSAtIHBvaW50LnkpOwotfQotCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotCi0tICh2b2lkKW9yZGVyRnJv
bnRTdWJzdGl0dXRpb25zUGFuZWw6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUK
LQotICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNw
ZWxsQ2hlY2tlcl07Ci0gICAgaWYgKCFjaGVja2VyKSB7Ci0gICAgICAgIExPR19FUlJPUigiTm8g
TlNTcGVsbENoZWNrZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBOU1Bh
bmVsICpzdWJzdGl0dXRpb25zUGFuZWwgPSBbY2hlY2tlciBzdWJzdGl0dXRpb25zUGFuZWxdOwot
ICAgIGlmIChbc3Vic3RpdHV0aW9uc1BhbmVsIGlzVmlzaWJsZV0pIHsKLSAgICAgICAgW3N1YnN0
aXR1dGlvbnNQYW5lbCBvcmRlck91dDpzZW5kZXJdOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIFtzdWJzdGl0dXRpb25zUGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOwotfQotCi0vLyBGSVhN
RSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQg
d2UgbXVzdCBpbXBsZW1lbnQgdGhlc2UgbWV0aG9kcyBoZXJlIGJlY2F1c2UKLS8vIHRoZSBBcHBL
aXQgY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLQotLSAoQk9PTClzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2Vy
dERlbGV0ZUVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZDooQk9PTClmbGFnCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRTbWFydEluc2VydERlbGV0
ZUVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KGlk
KXNlbmRlcgotewotICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6
c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxl
ZAotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljUXVvdGVTdWJzdGl0
dXRpb25FbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bkVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGlj
UXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOmZsYWddOwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXdd
IHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOnNlbmRlcl07Ci19Ci0KLS0gKEJPT0wp
aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbW3NlbGYgX3dl
YlZpZXddIGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNl
dEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYg
X3dlYlZpZXddIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOmZsYWddOwotfQotCi0t
ICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KGlkKXNlbmRlcgotewotICAgIFtb
c2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjpzZW5kZXJdOwotfQot
Ci0tIChCT09MKWlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQKLXsKLSAgICByZXR1
cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXTsK
LX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClm
bGFnCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9u
RW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb246c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudEVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldEF1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudEVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0
QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0b2dn
bGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KGlkKXNlbmRlcgotewotICAgIFtbc2VsZiBfd2Vi
Vmlld10gdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OnNlbmRlcl07Ci19Ci0KLS0gKEJP
T0wpaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIFtb
c2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkXTsKLX0K
LQotLSAodm9pZClzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZs
YWcKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbjpzZW5kZXJdOwotfQotCi0jZW5kaWYKLQotLSAodm9pZClfbG9v
a1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcgotewotICAgIC8vIERpY3Rpb25hcnkg
QVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBh
cyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKLSAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0byBhdm9p
ZCB0aGF0LgotICAgIGlmIChbW1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBfd2Via2l0X3N0cmluZ0J5
VHJpbW1pbmdXaGl0ZXNwYWNlXSBsZW5ndGhdID09IDApCi0gICAgICAgIHJldHVybjsKLQotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0clN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRl
ZFN0cmluZ107Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
LSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNSZWN0IHJlY3Qg
PSBjb3JlRnJhbWUtPnNlbGVjdGlvbkJvdW5kcygpOwotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCi0gICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW2F0dHJTdHJpbmcgZm9udEF0dHJp
YnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsMSldOwotICAgIE5TRm9udCAqZm9udCA9IFthdHRy
aWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoZm9udCkK
LSAgICAgICAgcmVjdC5vcmlnaW4ueSArPSBbZm9udCBhc2NlbmRlcl07Ci0jZW5kaWYKLQotI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotICAgIFtzZWxmIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdHRyU3Ry
aW5nIGF0UG9pbnQ6cmVjdC5vcmlnaW5dOwotICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgLy8g
V2Ugc29mdCBsaW5rIHRvIGdldCB0aGUgZnVuY3Rpb24gdGhhdCBkaXNwbGF5cyB0aGUgZGljdGlv
bmFyeSAoZWl0aGVyIHBvcC11cCB3aW5kb3cgb3IgYXBwKSB0byBhdm9pZCB0aGUgcGVyZm9ybWFu
Y2UKLSAgICAvLyBwZW5hbHR5IG9mIGxpbmtpbmcgdG8gYW5vdGhlciBmcmFtZXdvcmsuIFRoaXMg
ZnVuY3Rpb24gY2hhbmdlZCBzaWduYXR1cmUgYXMgd2VsbCBhcyBmcmFtZXdvcmsgYmV0d2VlbiBU
aWdlciBhbmQgTGVvcGFyZCwKLSAgICAvLyBzbyB0aGUgdHdvIGNhc2VzIGFyZSBoYW5kbGVkIHNl
cGFyYXRlbHkuCi0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIHR5cGVkZWYgT1NTdGF0
dXMgKCpTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uKShpZCBpbldvcmRTdHJpbmcsIE5TUmVjdCBp
bldvcmRCb3VuZGFyeSwgVUludDE2IGluTGluZURpcmVjdGlvbik7Ci0gICAgY29uc3QgY2hhciAq
ZnJhbWV3b3JrUGF0aCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmZyYW1ld29yay9GcmFtZXdvcmtzL0xhbmdBbmFseXNpcy5mcmFtZXdvcmsvTGFuZ0Fu
YWx5c2lzIjsKLSAgICBjb25zdCBjaGFyICpmdW5jdGlvbk5hbWUgPSAiRENNRGljdGlvbmFyeVNl
cnZpY2VXaW5kb3dTaG93IjsKLSNlbHNlCi0gICAgdHlwZWRlZiB2b2lkICgqU2VydmljZVdpbmRv
d1Nob3dGdW5jdGlvbikoaWQgdW51c2VkRGljdGlvbmFyeVJlZiwgaWQgaW5Xb3JkU3RyaW5nLCBD
RlJhbmdlIHNlbGVjdGlvblJhbmdlLCBpZCB1bnVzZWRGb250LCBDR1BvaW50IHRleHRPcmlnaW4s
IEJvb2xlYW4gdmVydGljYWxUZXh0LCBpZCB1bnVzZWRUcmFuc2Zvcm0pOwotICAgIGNvbnN0IGNo
YXIgKmZyYW1ld29ya1BhdGggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZy
YW1ld29yay9GcmFtZXdvcmtzL0hJVG9vbGJveC5mcmFtZXdvcmsvSElUb29sYm94IjsKLSAgICBj
b25zdCBjaGFyICpmdW5jdGlvbk5hbWUgPSAiSElEaWN0aW9uYXJ5V2luZG93U2hvdyI7Ci0jZW5k
aWYKLQotICAgIHN0YXRpYyBib29sIGxvb2tlZEZvckZ1bmN0aW9uID0gZmFsc2U7Ci0gICAgc3Rh
dGljIFNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24gZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93
ID0gTlVMTDsKLQotICAgIGlmICghbG9va2VkRm9yRnVuY3Rpb24pIHsKLSAgICAgICAgdm9pZCog
bGFuZ0FuYWx5c2lzRnJhbWV3b3JrID0gZGxvcGVuKGZyYW1ld29ya1BhdGgsIFJUTERfTEFaWSk7
Ci0gICAgICAgIEFTU0VSVChsYW5nQW5hbHlzaXNGcmFtZXdvcmspOwotICAgICAgICBpZiAobGFu
Z0FuYWx5c2lzRnJhbWV3b3JrKQotICAgICAgICAgICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dT
aG93ID0gKFNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pZGxzeW0obGFuZ0FuYWx5c2lzRnJhbWV3
b3JrLCBmdW5jdGlvbk5hbWUpOwotICAgICAgICBsb29rZWRGb3JGdW5jdGlvbiA9IHRydWU7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyk7Ci0gICAgaWYg
KCFkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cpIHsKLSAgICAgICAgTlNMb2coQCJDb3VsZG4n
dCBmaW5kIHRoZSAlcyBmdW5jdGlvbiBpbiAlcyIsIGZ1bmN0aW9uTmFtZSwgZnJhbWV3b3JrUGF0
aCk7IAotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIK
LSAgICAvLyBGSVhNRTogbXVzdCBjaGVjayBmb3IgcmlnaHQtdG8tbGVmdCBoZXJlCi0gICAgTlNX
cml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodDsKLQotICAgIC8vIEZJWE1FOiB0aGUgZGljdGlvbmFyeSBBUEkgZXhwZWN0cyB0aGUg
cmVjdCBmb3IgdGhlIGZpcnN0IGxpbmUgb2Ygc2VsZWN0aW9uLiBQYXNzaW5nCi0gICAgLy8gdGhl
IHJlY3QgZm9yIHRoZSBlbnRpcmUgc2VsZWN0aW9uLCBhcyB3ZSBkbyBoZXJlLCBwb3NpdGlvbnMg
dGhlIHBvcC11cCB3aW5kb3cgbmVhcgotICAgIC8vIHRoZSBib3R0b20gb2YgdGhlIHNlbGVjdGlv
biByYXRoZXIgdGhhbiBhdCB0aGUgc2VsZWN0ZWQgd29yZC4KLSAgICByZWN0ID0gW3NlbGYgY29u
dmVydFJlY3Q6cmVjdCB0b1ZpZXc6bmlsXTsKLSAgICByZWN0Lm9yaWdpbiA9IFtbc2VsZiB3aW5k
b3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46cmVjdC5vcmlnaW5dOwotICAgIE5TRGF0YSAqZGF0YSA9
IFthdHRyU3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0clN0cmluZyBsZW5n
dGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRv
d1Nob3coZGF0YSwgcmVjdCwgKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9u
UmlnaHRUb0xlZnQpID8gMSA6IDApOwotI2Vsc2UKLSAgICAvLyBUaGUgSElEaWN0aW9uYXJ5V2lu
ZG93U2hvdyBmdW5jdGlvbiByZXF1aXJlcyB0aGUgb3JpZ2luLCBpbiBDRyBzY3JlZW4gY29vcmRp
bmF0ZXMsIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGV4dCBpbiB0aGUgc2VsZWN0aW9uLgot
ICAgIC8vIEZJWE1FIDQ5NDU4MDg6IFdlIGFwcHJveGltYXRlIHRoaXMgaW4gYSB3YXkgdGhhdCB3
b3JrcyB3ZWxsIHdoZW4gYSBzaW5nbGUgd29yZCBpcyBzZWxlY3RlZCwgYW5kIGxlc3Mgd2VsbCBp
biBzb21lIG90aGVyIGNhc2VzCi0gICAgLy8gKGJ1dCBubyB3b3JzZSB0aGFuIHdlIGRpZCBpbiBU
aWdlcikKLSAgICBOU1BvaW50IHdpbmRvd1BvaW50ID0gW3NlbGYgY29udmVydFBvaW50OnJlY3Qu
b3JpZ2luIHRvVmlldzpuaWxdOwotICAgIE5TUG9pbnQgc2NyZWVuUG9pbnQgPSBbW3NlbGYgd2lu
ZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOndpbmRvd1BvaW50XTsKLQotICAgIGRpY3Rpb25hcnlT
ZXJ2aWNlV2luZG93U2hvdyhuaWwsIGF0dHJTdHJpbmcsIENGUmFuZ2VNYWtlKDAsIFthdHRyU3Ry
aW5nIGxlbmd0aF0pLCBuaWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Jl
R3JhcGhpY3NTY3JlZW5Qb2ludEZvckFwcEtpdFNjcmVlblBvaW50KHNjcmVlblBvaW50KSwgZmFs
c2UsIG5pbCk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfaG92ZXJGZWVkYmFja1N1c3BlbmRlZENo
YW5nZWQKLXsKLSAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07Ci19Ci0K
LS0gKEJPT0wpX2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDooS2V5Ym9hcmRFdmVudCopZXZlbnQg
c2hvdWxkU2F2ZUNvbW1hbmQ6KEJPT0wpc2hvdWxkU2F2ZQotewotICAgIC8vIEFzayBBcHBLaXQg
dG8gcHJvY2VzcyB0aGUga2V5IGV2ZW50IC0tIGl0IHdpbGwgY2FsbCBiYWNrIHdpdGggZWl0aGVy
IGluc2VydFRleHQgb3IgZG9Db21tYW5kQnlTZWxlY3Rvci4KLSAgICBXZWJIVE1MVmlld0ludGVy
cHJldEtleUV2ZW50c1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBwYXJhbWV0ZXJzLmV2ZW50
V2FzSGFuZGxlZCA9IGZhbHNlOwotICAgIHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNvbW1hbmQgPSBz
aG91bGRTYXZlOwotICAgIC8vIElmIHdlJ3JlIGludGVyY2VwdGluZyB0aGUgaW5pdGlhbCBJTSBj
YWxsIHdlIGFzc3VtZSB0aGF0IHRoZSBJTSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50LCAKLSAgICAv
LyBhbmQgb25seSBjaGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0aGUgTlNUZXh0SW5w
dXQvUmVzcG9uZGVyIGNhbGxiYWNrcyBpcyB1c2VkLgotICAgIC8vIFdlIGFzc3VtZSB0aGUgSU0g
d2lsbCAqbm90KiBjb25zdW1lIGhvdGtleSBzZXF1ZW5jZXMKLSAgICBwYXJhbWV0ZXJzLmNvbnN1
bWVkQnlJTSA9ICFldmVudC0+bWV0YUtleSgpICYmIHNob3VsZFNhdmU7Ci0KLSAgICBpZiAoY29u
c3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50
KCkpIHsKLSAgICAgICAgTlNFdmVudCAqbWFjRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5tYWNFdmVu
dCgpOwotICAgICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TS2V5RG93biAmJiBbX3ByaXZh
dGUtPmNvbXBDb250cm9sbGVyIGZpbHRlcktleURvd246bWFjRXZlbnRdKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5T
RmxhZ3NDaGFuZ2VkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAg
ICAgcGFyYW1ldGVycy5ldmVudCA9IGV2ZW50OwotICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0
S2V5RXZlbnRzUGFyYW1ldGVycyA9ICZwYXJhbWV0ZXJzOwotICAgICAgICBfcHJpdmF0ZS0+cmVj
ZWl2ZWROT09QID0gTk87Ci0gICAgICAgIGNvbnN0IFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JiBj
b21tYW5kcyA9IGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCk7Ci0gICAgICAgIGJvb2wgaGFzS2V5
cHJlc3NDb21tYW5kID0gIWNvbW1hbmRzLmlzRW1wdHkoKTsKLQotICAgICAgICAvLyBGSVhNRTog
aW50ZXJwcmV0S2V5RXZlbnRzIGRvZXNuJ3QgbWF0Y2ggYXBwbGljYXRpb24ga2V5IGVxdWl2YWxl
bnRzIChzdWNoIGFzIENtZCtBKSwKLSAgICAgICAgLy8gYW5kIHNlbmRzIG5vb3A6IGZvciB0aG9z
ZS4gQXMgYSByZXN1bHQsIHdlIGRvbid0IGhhbmRsZSB0aG9zZSBmcm9tIHdpdGhpbiBXZWJDb3Jl
LAotICAgICAgICAvLyBidXQgc2VuZCBhIGZ1bGwgc2VxdWVuY2Ugb2YgRE9NIGV2ZW50cywgaW5j
bHVkaW5nIGFuIHVubmVlZGVkIGtleXByZXNzLgotICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91
bGRTYXZlQ29tbWFuZCB8fCAhaGFzS2V5cHJlc3NDb21tYW5kKQotICAgICAgICAgICAgW3NlbGYg
aW50ZXJwcmV0S2V5RXZlbnRzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDptYWNFdmVudF1dOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBzaXplID0gY29tbWFuZHMuc2l6ZSgp
OwotICAgICAgICAgICAgLy8gQXJlIHRoZXJlIGNvbW1hbmRzIHRoYXQgd291bGQganVzdCBjYXVz
ZSB0ZXh0IGluc2VydGlvbiBpZiBleGVjdXRlZCB2aWEgRWRpdG9yPwotICAgICAgICAgICAgLy8g
V2ViS2l0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNp
ZGUgaG93IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQsIHNvIHdlIGxlYXZlIGl0IHVwb24gV2ViQ29y
ZQotICAgICAgICAgICAgLy8gdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcu
IFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2ZW50IGJlIGdlbmVy
YXRlZAotICAgICAgICAgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0
ZXIsIG9yIEVudGVyKS4KLSAgICAgICAgICAgIGJvb2wgaGF2ZVRleHRJbnNlcnRpb25Db21tYW5k
cyA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAoW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOk5TU2Vs
ZWN0b3JGcm9tU3RyaW5nKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKV0uaXNUZXh0SW5zZXJ0aW9u
KCkpCi0gICAgICAgICAgICAgICAgICAgIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1h
bmRzIHx8IHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNo
YXIpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUgPT0gImlu
c2VydFRleHQ6IikKLSAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGluc2VydFRleHQ6Y29t
bWFuZHNbaV0udGV4dF07Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFtzZWxmIGRvQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmco
Y29tbWFuZHNbaV0uY29tbWFuZE5hbWUpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFt
ZXRlcnMgPSAwOwotICAgIH0KLSAgICByZXR1cm4gKCFfcHJpdmF0ZS0+cmVjZWl2ZWROT09QICYm
IHBhcmFtZXRlcnMuZXZlbnRXYXNIYW5kbGVkKSB8fCBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTTsK
LX0KLQotLSAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNl
Ci17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKLX0K
LQotLSAodm9pZClzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVk
SW1hZ2UqKXNvdXJjZQotewotICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHNvdXJjZS0+YWRkQ2xp
ZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKLSAgICAKLSAgICBpZiAoX3ByaXZhdGUtPnByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlKQotICAgICAgICBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElG
RkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0gICAgX3By
aXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlID0gc291cmNlOwotfQotCi0jdW5kZWYg
Q09NTUFORF9QUk9MT0dVRQotCi0tICh2b2lkKV9sYXlvdXRJZk5lZWRlZAotewotICAgIEFTU0VS
VCghX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwotCi0gICAgaWYgKF9wcml2YXRlLT5uZWVk
c1RvQXBwbHlTdHlsZXMgfHwgW3NlbGYgX25lZWRzTGF5b3V0XSkKLSAgICAgICAgW3NlbGYgbGF5
b3V0XTsKLX0KLQotLSAodm9pZClfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlCi17Ci0gICAg
W3NlbGYgX2xheW91dElmTmVlZGVkXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+
ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJyYXkg
KmRlc2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsK
LQotICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2Vu
ZGFudFdlYkhUTUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2Vi
SFRNTFZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkKLSAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX2xh
eW91dElmTmVlZGVkXTsKLQotICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOwot
Ci0jaWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87
Ci0jZW5kaWYKLX0KLQotLSAodm9pZCkgX2Rlc3Ryb3lBbGxXZWJQbHVnaW5zCi17Ci0gICAgW1tz
ZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107Ci19Ci0KLS0gKEJPT0wp
X2lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXIKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnJlc2ln
bmluZ0ZpcnN0UmVzcG9uZGVyOwotfQotCi0tIChCT09MKV9uZWVkc0xheW91dAotewotICAgIHJl
dHVybiBbW3NlbGYgX2ZyYW1lXSBfbmVlZHNMYXlvdXRdOwotfQotCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotLSAodm9pZClhdHRhY2hSb290TGF5ZXI6KENBTGF5ZXIqKWxheWVy
Ci17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewotICAgICAgICBXZWJM
YXllckhvc3RpbmdWaWV3KiBob3N0aW5nVmlldyA9IFtbV2ViTGF5ZXJIb3N0aW5nVmlldyBhbGxv
Y10gaW5pdFdpdGhGcmFtZTpbc2VsZiBib3VuZHNdXTsKLSAgICAgICAgW2hvc3RpbmdWaWV3IHNl
dEF1dG9yZXNpemluZ01hc2s6KE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFi
bGUpXTsKLSAgICAgICAgW3NlbGYgYWRkU3Vidmlldzpob3N0aW5nVmlld107Ci0gICAgICAgIFto
b3N0aW5nVmlldyByZWxlYXNlXTsKLSAgICAgICAgLy8gaG9zdGluZ1ZpZXcgaXMgb3duZWQgYnkg
YmVpbmcgYSBzdWJ2aWV3IG9mIHNlbGYKLSAgICAgICAgX3ByaXZhdGUtPmxheWVySG9zdGluZ1Zp
ZXcgPSBob3N0aW5nVmlldzsKLSAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RhcnRlZEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKLSAgICB9Ci0KLSAgICAv
LyBNYWtlIGEgY29udGFpbmVyIGxheWVyLCB3aGljaCB3aWxsIGdldCBzaXplZC9wb3NpdGlvbmVk
IGJ5IEFwcEtpdCBhbmQgQ0EKLSAgICBDQUxheWVyKiB2aWV3TGF5ZXIgPSBbQ0FMYXllciBsYXll
cl07Ci0gICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldExheWVyOnZpZXdMYXllcl07
Ci0gICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6WUVTXTsKLSAg
ICAKLSAgICAvLyBQYXJlbnQgb3VyIHJvb3QgbGF5ZXIgaW4gdGhlIGNvbnRhaW5lciBsYXllcgot
ICAgIFt2aWV3TGF5ZXIgYWRkU3VibGF5ZXI6bGF5ZXJdOwotfQotCi0tICh2b2lkKWRldGFjaFJv
b3RMYXllcgotewotICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewotICAgICAg
ICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0TGF5ZXI6bmlsXTsKLSAgICAgICAgW19w
cml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6Tk9dOwotICAgICAgICBbX3By
aXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIF9w
cml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gbmlsOwotICAgICAgICBbW3NlbGYgX3dlYlZpZXdd
IF9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxmIF9mcmFtZV1dOwot
ICAgIH0KLX0KLSNlbmRpZgogCitAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFp
bHMpCistICh2b2lkKV9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7CiBAZW5kCiAK
LUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0KQotCi0t
IChOU0FycmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dAotewotICAgIHN0YXRpYyBO
U0FycmF5ICp2YWxpZEF0dHJpYnV0ZXM7Ci0gICAgaWYgKCF2YWxpZEF0dHJpYnV0ZXMpIHsKLSAg
ICAgICAgdmFsaWRBdHRyaWJ1dGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6
Ci0gICAgICAgICAgICBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwgTlNVbmRlcmxpbmVD
b2xvckF0dHJpYnV0ZU5hbWUsCi0gICAgICAgICAgICBOU01hcmtlZENsYXVzZVNlZ21lbnRBdHRy
aWJ1dGVOYW1lLCBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lLCBuaWxd
OwotICAgICAgICAvLyBOU1RleHQgYWxzbyBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0
ZXMsIGJ1dCBpdCdzCi0gICAgICAgIC8vIGhhcmQgdG8gdGVsbCB3aGljaCBhcmUgcmVhbGx5IHJl
cXVpcmVkIGZvciB0ZXh0IGlucHV0IHRvCi0gICAgICAgIC8vIHdvcmsgd2VsbDsgSSBoYXZlIG5v
dCBzZWVuIGFueSBpbnB1dCBtZXRob2QgbWFrZSB1c2Ugb2YgdGhlbSB5ZXQuCi0gICAgICAgIC8v
ICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUs
Ci0gICAgICAgIC8vICAgICBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsIE5TTGFuZ3Vh
Z2VBdHRyaWJ1dGVOYW1lLgotICAgICAgICBDRlJldGFpbih2YWxpZEF0dHJpYnV0ZXMpOwotICAg
IH0KLSAgICBMT0coVGV4dElucHV0LCAidmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dCAtPiAo
Li4uKSIpOwotICAgIHJldHVybiB2YWxpZEF0dHJpYnV0ZXM7Ci19Ci0KLS0gKE5TVGV4dElucHV0
Q29udGV4dCAqKWlucHV0Q29udGV4dAotewotICAgIHJldHVybiBfcHJpdmF0ZS0+ZXhwb3NlSW5w
dXRDb250ZXh0ID8gW3N1cGVyIGlucHV0Q29udGV4dF0gOiBuaWw7Ci19Ci0KLS0gKE5TQXR0cmli
dXRlZFN0cmluZyAqKXRleHRTdG9yYWdlCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+ZXhwb3NlSW5w
dXRDb250ZXh0KSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJ0ZXh0U3RvcmFnZSAtPiBuaWwi
KTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpy
ZXN1bHQgPSBbc2VsZiBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAs
IFVJTlRfTUFYKV07Ci0gICAgCi0gICAgTE9HKFRleHRJbnB1dCwgInRleHRTdG9yYWdlIC0+IFwi
JUBcIiIsIHJlc3VsdCA/IFtyZXN1bHQgc3RyaW5nXSA6IEAiIik7Ci0gICAgCi0gICAgLy8gV2Ug
aGF2ZSB0byByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIHJhdGhlciB0aGFuIG51bGwgdG8gcHJldmVu
dCBUU00gZnJvbSBjYWxsaW5nIC1zdHJpbmcKLSAgICByZXR1cm4gcmVzdWx0ID8gcmVzdWx0IDog
W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxl
YXNlXTsKLX0KLQotLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRleEZvclBvaW50OihOU1BvaW50
KXRoZVBvaW50Ci17Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAg
V2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLQotICAgIGlmICh3aW5kb3cpCi0gICAg
ICAgIHRoZVBvaW50ID0gW3dpbmRvdyBjb252ZXJ0U2NyZWVuVG9CYXNlOnRoZVBvaW50XTsKLSAg
ICB0aGVQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDp0aGVQb2ludCBmcm9tVmlldzpuaWxdOwot
Ci0gICAgRE9NUmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6dGhl
UG9pbnRdOwotICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgImNoYXJh
Y3RlckluZGV4Rm9yUG9pbnQ6KCVmLCAlZikgLT4gTlNOb3RGb3VuZCIsIHRoZVBvaW50LngsIHRo
ZVBvaW50LnkpOwotICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKLSAgICB9Ci0gICAgCi0gICAg
dW5zaWduZWQgcmVzdWx0ID0gW2ZyYW1lIF9jb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6cmFuZ2Vd
LmxvY2F0aW9uOwotICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0ZXJJbmRleEZvclBvaW50Oigl
ZiwgJWYpIC0+ICV1IiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSwgcmVzdWx0KTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi0tIChOU1JlY3QpZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KE5T
UmFuZ2UpdGhlUmFuZ2UKLXsgICAgCi0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1l
XTsKLSAgICAKLSAgICAvLyBKdXN0IHRvIG1hdGNoIE5TVGV4dFZpZXcncyBiZWhhdmlvci4gUmVn
cmVzc2lvbiB0ZXN0cyBjYW5ub3QgZGV0ZWN0IHRoaXM7Ci0gICAgLy8gdG8gcmVwcm9kdWNlLCB1
c2UgYSB0ZXN0IGFwcGxpY2F0aW9uIGZyb20gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDY4MgotICAgIC8vICh0eXBlIHNvbWV0aGluZzsgdHJ5IHJhbmdlcyAoMSwgLTEp
IGFuZCAoMiwgLTEpLgotICAgIGlmICgodGhlUmFuZ2UubG9jYXRpb24gKyB0aGVSYW5nZS5sZW5n
dGggPCB0aGVSYW5nZS5sb2NhdGlvbikgJiYgKHRoZVJhbmdlLmxvY2F0aW9uICsgdGhlUmFuZ2Uu
bGVuZ3RoICE9IDApKQotICAgICAgICB0aGVSYW5nZS5sZW5ndGggPSAwOwotICAgIAotICAgIERP
TVJhbmdlICpyYW5nZSA9IFtmcmFtZSBfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOnRoZVJhbmdl
XTsKLSAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAtPiAoMCwgMCwgMCwgMCkiLCB0aGVSYW5nZS5sb2Nh
dGlvbiwgdGhlUmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJlY3QoMCwgMCwg
MCwgMCk7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChbcmFuZ2Ugc3RhcnRDb250YWluZXJdKTsK
LSAgICBBU1NFUlQoW3JhbmdlIGVuZENvbnRhaW5lcl0pOwotICAgIAotICAgIE5TUmVjdCByZXN1
bHRSZWN0ID0gW2ZyYW1lIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5nZV07Ci0gICAgcmVzdWx0
UmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlc3VsdFJlY3QgdG9WaWV3Om5pbF07Ci0KLSAgICBO
U1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAod2luZG93KQotICAgICAg
ICByZXN1bHRSZWN0Lm9yaWdpbiA9IFt3aW5kb3cgY29udmVydEJhc2VUb1NjcmVlbjpyZXN1bHRS
ZWN0Lm9yaWdpbl07Ci0gICAgCi0gICAgTE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlOigldSwgJXUpIC0+ICglZiwgJWYsICVmLCAlZikiLCB0aGVSYW5nZS5sb2NhdGlv
biwgdGhlUmFuZ2UubGVuZ3RoLCByZXN1bHRSZWN0Lm9yaWdpbi54LCByZXN1bHRSZWN0Lm9yaWdp
bi55LCByZXN1bHRSZWN0LnNpemUud2lkdGgsIHJlc3VsdFJlY3Quc2l6ZS5oZWlnaHQpOwotICAg
IHJldHVybiByZXN1bHRSZWN0OwotfQotCi0tIChOU1JhbmdlKXNlbGVjdGVkUmFuZ2UKLXsKLSAg
ICBpZiAoIWlzVGV4dElucHV0KGNvcmUoW3NlbGYgX2ZyYW1lXSkpKSB7Ci0gICAgICAgIExPRyhU
ZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+IChOU05vdEZvdW5kLCAwKSIpOwotICAgICAgICBy
ZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgfQotICAgIE5TUmFuZ2UgcmVz
dWx0ID0gW1tzZWxmIF9mcmFtZV0gX3NlbGVjdGVkTlNSYW5nZV07Ci0KLSAgICBMT0coVGV4dElu
cHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0
Lmxlbmd0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAoTlNSYW5nZSltYXJrZWRSYW5n
ZQotewotICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUod2ViRnJhbWUpOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAg
ICByZXR1cm4gTlNNYWtlUmFuZ2UoMCwgMCk7Ci0gICAgTlNSYW5nZSByZXN1bHQgPSBbd2ViRnJh
bWUgX2NvbnZlcnRUb05TUmFuZ2U6Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tcG9zaXRpb25SYW5n
ZSgpLmdldCgpXTsKLQotICAgIExPRyhUZXh0SW5wdXQsICJtYXJrZWRSYW5nZSAtPiAoJXUsICV1
KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5n
ZTooTlNSYW5nZSluc1JhbmdlCi17Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1l
XTsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7Ci0gICAgaWYgKCFpc1RleHRJ
bnB1dChjb3JlRnJhbWUpIHx8IGlzSW5QYXNzd29yZEZpZWxkKGNvcmVGcmFtZSkpIHsKLSAgICAg
ICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkg
LT4gbmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwotICAgICAgICByZXR1
cm4gbmlsOwotICAgIH0KLSAgICBET01SYW5nZSAqZG9tUmFuZ2UgPSBbZnJhbWUgX2NvbnZlcnRO
U1JhbmdlVG9ET01SYW5nZTpuc1JhbmdlXTsKLSAgICBpZiAoIWRvbVJhbmdlKSB7Ci0gICAgICAg
IExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+
IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICB9Ci0KLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IFtOU0F0dHJp
YnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOmNvcmUoZG9tUmFuZ2Up
XTsKLSAgICAKLSAgICAvLyBbTlNBdHRyaWJ1dGVkU3RyaW5nKFdlYktpdEV4dHJhcykgX3dlYl9h
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0gIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxp
bmcgCi0gICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2hpY2ggYnJl
YWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJvYmxlbS81NDAwNTUxPgotICAg
IC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUgdGhlIHJlc3VsdGFudCBzdHJpbmcg
dG8gdGhlIGNvcnJlY3QgbGVuZ3RoLgotICAgIGlmIChbcmVzdWx0IGxlbmd0aF0gPiBuc1Jhbmdl
Lmxlbmd0aCkgewotICAgICAgICBBU1NFUlQoW3Jlc3VsdCBsZW5ndGhdID09IG5zUmFuZ2UubGVu
Z3RoICsgMSk7Ci0gICAgICAgIEFTU0VSVChbW3Jlc3VsdCBzdHJpbmddIGNoYXJhY3RlckF0SW5k
ZXg6bnNSYW5nZS5sZW5ndGhdID09ICdcbicgfHwgW1tyZXN1bHQgc3RyaW5nXSBjaGFyYWN0ZXJB
dEluZGV4Om5zUmFuZ2UubGVuZ3RoXSA9PSAnICcpOwotICAgICAgICByZXN1bHQgPSBbcmVzdWx0
IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbnNSYW5nZS5sZW5n
dGgpXTsKLSAgICB9Ci0gICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9t
UmFuZ2U6KCV1LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5n
dGgsIFtyZXN1bHQgc3RyaW5nXSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gdGVzdCBm
b3IgMTAuNCBiZWNhdXNlIG9mIDxyZGFyOi8vcHJvYmxlbS80MjQzNDYzPgotI2lmZGVmIEJVSUxE
SU5HX09OX1RJR0VSCi0tIChsb25nKWNvbnZlcnNhdGlvbklkZW50aWZpZXIKLXsKLSAgICByZXR1
cm4gKGxvbmcpc2VsZjsKLX0KLSNlbHNlCi0tIChOU0ludGVnZXIpY29udmVyc2F0aW9uSWRlbnRp
ZmllcgotewotICAgIHJldHVybiAoTlNJbnRlZ2VyKXNlbGY7Ci19Ci0jZW5kaWYKLQotLSAoQk9P
TCloYXNNYXJrZWRUZXh0Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7Ci0gICAgQk9PTCByZXN1bHQgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3Io
KS0+aGFzQ29tcG9zaXRpb24oKTsKLSAgICBMT0coVGV4dElucHV0LCAiaGFzTWFya2VkVGV4dCAt
PiAldSIsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAodm9pZCl1bm1hcmtU
ZXh0Ci17Ci0gICAgTE9HKFRleHRJbnB1dCwgInVubWFya1RleHQiKTsKLQotICAgIC8vIFVzZSBw
b2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGlu
dGVycHJldEtleUV2ZW50cy4KLSAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVy
czsKLSAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0KLSAg
ICBpZiAocGFyYW1ldGVycykgewotICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQg
PSBZRVM7Ci0gICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POwotICAgIH0KLSAg
ICAKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAg
ICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbigpOwotfQotCi1zdGF0
aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVj
dG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgcmVzdWx0KQotewotICAgIGludCBsZW5ndGggPSBb
W3N0cmluZyBzdHJpbmddIGxlbmd0aF07Ci0KLSAgICBpbnQgaSA9IDA7Ci0gICAgd2hpbGUgKGkg
PCBsZW5ndGgpIHsKLSAgICAgICAgTlNSYW5nZSByYW5nZTsKLSAgICAgICAgTlNEaWN0aW9uYXJ5
ICphdHRycyA9IFtzdHJpbmcgYXR0cmlidXRlc0F0SW5kZXg6aSBsb25nZXN0RWZmZWN0aXZlUmFu
Z2U6JnJhbmdlIGluUmFuZ2U6TlNNYWtlUmFuZ2UoaSwgbGVuZ3RoIC0gaSldOwotCi0gICAgICAg
IGlmIChOU051bWJlciAqc3R5bGUgPSBbYXR0cnMgb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5
bGVBdHRyaWJ1dGVOYW1lXSkgewotICAgICAgICAgICAgQ29sb3IgY29sb3IgPSBDb2xvcjo6Ymxh
Y2s7Ci0gICAgICAgICAgICBpZiAoTlNDb2xvciAqY29sb3JBdHRyID0gW2F0dHJzIG9iamVjdEZv
cktleTpOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZV0pCi0gICAgICAgICAgICAgICAgY29s
b3IgPSBjb2xvckZyb21OU0NvbG9yKFtjb2xvckF0dHIgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1l
Ok5TRGV2aWNlUkdCQ29sb3JTcGFjZV0pOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChDb21w
b3NpdGlvblVuZGVybGluZShyYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShyYW5nZSksIGNvbG9y
LCBbc3R5bGUgaW50VmFsdWVdID4gMSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaSA9IHJhbmdl
LmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOwotICAgIH0KLX0KLQotLSAodm9pZClzZXRNYXJrZWRU
ZXh0OihpZClzdHJpbmcgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSluZXdTZWxSYW5nZQotewotICAg
IEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRPZkNsYXNzOltOU0F0dHJp
YnV0ZWRTdHJpbmcgY2xhc3NdXTsgLy8gT3RoZXJ3aXNlLCBOU1N0cmluZwotCi0gICAgTE9HKFRl
eHRJbnB1dCwgInNldE1hcmtlZFRleHQ6XCIlQFwiIHNlbGVjdGVkUmFuZ2U6KCV1LCAldSkiLCBp
c0F0dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcsIG5ld1NlbFJhbmdl
LmxvY2F0aW9uLCBuZXdTZWxSYW5nZS5sZW5ndGgpOwotCi0gICAgLy8gVXNlIHBvaW50ZXIgdG8g
Z2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5
RXZlbnRzLgotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFy
YW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIF9w
cml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKLQotICAgIGlmIChwYXJh
bWV0ZXJzKSB7Ci0gICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IFlFUzsKLSAg
ICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87Ci0gICAgfQotICAgIAotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1l
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIVtzZWxmIF9pc0VkaXRhYmxlXSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVz
OwotICAgIE5TU3RyaW5nICp0ZXh0ID0gc3RyaW5nOwotCi0gICAgaWYgKGlzQXR0cmlidXRlZFN0
cmluZykgewotICAgICAgICB1bnNpZ25lZCBtYXJrZWRUZXh0TGVuZ3RoID0gWyhOU1N0cmluZyAq
KXN0cmluZyBsZW5ndGhdOwotICAgICAgICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBbc3RyaW5n
IGF0dHJpYnV0ZTpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0SW5k
ZXg6MCBsb25nZXN0RWZmZWN0aXZlUmFuZ2U6TlVMTCBpblJhbmdlOk5TTWFrZVJhbmdlKDAsIG1h
cmtlZFRleHRMZW5ndGgpXTsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgIiAgICBSZXBsYWNlbWVu
dFJhbmdlOiAlQCIsIHJhbmdlU3RyaW5nKTsKLSAgICAgICAgLy8gVGhlIEFwcEtpdCBhZGRzIGEg
J3NlY3JldCcgcHJvcGVydHkgdG8gdGhlIHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSByZXBsYWNl
bWVudCByYW5nZS4KLSAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IHJhbmdlIGlzIHRoZSByYW5n
ZSBvZiB0aGUgdGhlIHRleHQgdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbmV3IHN0
cmluZy4KLSAgICAgICAgaWYgKHJhbmdlU3RyaW5nKQotICAgICAgICAgICAgW1tzZWxmIF9mcmFt
ZV0gX3NlbGVjdE5TUmFuZ2U6TlNSYW5nZUZyb21TdHJpbmcocmFuZ2VTdHJpbmcpXTsKLQotICAg
ICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOwotICAgICAgICBleHRyYWN0VW5kZXJsaW5lcyhz
dHJpbmcsIHVuZGVybGluZXMpOwotICAgIH0KLQotICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNl
dENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIG5ld1NlbFJhbmdlLmxvY2F0aW9uLCBOU01h
eFJhbmdlKG5ld1NlbFJhbmdlKSk7Ci19Ci0KLS0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3Rvcjoo
U0VMKXNlbGVjdG9yCi17Ci0gICAgTE9HKFRleHRJbnB1dCwgImRvQ29tbWFuZEJ5U2VsZWN0b3I6
XCIlc1wiIiwgc2VsX2dldE5hbWUoc2VsZWN0b3IpKTsKLQotICAgIC8vIFVzZSBwb2ludGVyIHRv
IGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVycHJldEtl
eUV2ZW50cy4KLSAgICAvLyBUaGUgc2FtZSBjYWxsIHRvIGludGVycHJldEtleUV2ZW50cyBjYW4g
ZG8gbW9yZSB0aGFuIG9uZSBjb21tYW5kLgotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQ
YXJhbWV0ZXJzOwotICAgIGlmIChwYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLT5jb25z
dW1lZEJ5SU0gPSBOTzsKLQotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3Iobm9vcDopKSB7
Ci0gICAgICAgIF9wcml2YXRlLT5yZWNlaXZlZE5PT1AgPSBZRVM7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBLZXlib2FyZEV2ZW50KiBldmVudCA9IHBhcmFtZXRlcnMgPyBwYXJhbWV0
ZXJzLT5ldmVudCA6IDA7Ci0gICAgYm9vbCBzaG91bGRTYXZlQ29tbWFuZCA9IHBhcmFtZXRlcnMg
JiYgcGFyYW1ldGVycy0+c2hvdWxkU2F2ZUNvbW1hbmQ7Ci0KLSAgICBpZiAoZXZlbnQgJiYgc2hv
dWxkU2F2ZUNvbW1hbmQpCi0gICAgICAgIGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuYXBwZW5k
KEtleXByZXNzQ29tbWFuZChOU1N0cmluZ0Zyb21TZWxlY3RvcihzZWxlY3RvcikpKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb25seSBkaXJlY3QgY2FsbHMgdG8gZG9D
b21tYW5kQnlTZWxlY3Rvcjogc2VlIHRoZSBwYXJhbWV0ZXJzIGJ5IHNldHRpbmcgdG8gMC4KLSAg
ICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOwotCi0gICAg
ICAgIGJvb2wgZXZlbnRXYXNIYW5kbGVkOwotCi0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBb
c2VsZiBfd2ViVmlld107Ci0gICAgICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdKQot
ICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxmIGNvcmVDb21tYW5kQnlTZWxl
Y3RvcjpzZWxlY3Rvcl07Ci0gICAgICAgICAgICBpZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKQot
ICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IGNvbW1hbmQuZXhlY3V0ZShldmVudCk7
Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBXZWJLaXQgZG9lcyBu
b3Qgc3VwcG9ydCB0aGlzIGNvbW1hbmQsIHdlIG5lZWQgdG8gcGFzcyB0aGUgc2VsZWN0b3IgdG8g
c3VwZXIuCi0gICAgICAgICAgICAgICAgX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlT
ZWxlY3RvciA9IHNlbGVjdG9yOwotCi0gICAgICAgICAgICAgICAgLy8gVGhlIHNpbmsgZG9lcyB0
d28gdGhpbmdzOiAxKSBUZWxscyB1cyBpZiB0aGUgcmVzcG9uZGVyIHdlbnQgdW5oYW5kbGVkLCBh
bmQKLSAgICAgICAgICAgICAgICAvLyAyKSBwcmV2ZW50cyBhbnkgTlNCZWVwOyB3ZSBkb24ndCBl
dmVyIHdhbnQgdG8gYmVlcCBoZXJlLgotICAgICAgICAgICAgICAgIFdlYlJlc3BvbmRlckNoYWlu
U2luayAqc2luayA9IFtbV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIGFsbG9jXSBpbml0V2l0aFJlc3Bv
bmRlckNoYWluOnNlbGZdOwotICAgICAgICAgICAgICAgIFtzdXBlciBkb0NvbW1hbmRCeVNlbGVj
dG9yOnNlbGVjdG9yXTsKLSAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSAhW3Npbmsg
cmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kXTsKLSAgICAgICAgICAgICAgICBbc2luayBkZXRhY2hd
OwotICAgICAgICAgICAgICAgIFtzaW5rIHJlbGVhc2VdOwotCi0gICAgICAgICAgICAgICAgX3By
aXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IDA7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGFyYW1ldGVycykKLSAgICAgICAgICAgIHBhcmFt
ZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IGV2ZW50V2FzSGFuZGxlZDsKLQotICAgICAgICAvLyBS
ZXN0b3JlIHRoZSBwYXJhbWV0ZXJzIHNvIHRoYXQgb3RoZXIgY2FsbHMgdG8gZG9Db21tYW5kQnlT
ZWxlY3Rvcjogc2VlIHRoZW0sCi0gICAgICAgIC8vIGFuZCBvdGhlciBjb21tYW5kcyBjYW4gcGFy
dGljaXBhdGUgaW4gc2V0dGluZyB0aGUgImV2ZW50V2FzSGFuZGxlZCIgZmxhZy4KLSAgICAgICAg
X3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAg
IH0KLX0KLQotLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcKLXsKLSAgICBCT09MIGlzQXR0
cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5n
IGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKLQotICAgIExPRyhUZXh0SW5wdXQsICJp
bnNlcnRUZXh0OlwiJUBcIiIsIGlzQXR0cmlidXRlZFN0cmluZyA/IFtzdHJpbmcgc3RyaW5nXSA6
IHN0cmluZyk7Ci0KLSAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMq
IHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAg
ICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0gICAgaWYgKHBh
cmFtZXRlcnMpCi0gICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POwotCi0gICAg
Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnNlcnRpbmcgYW4gYXR0cmlidXRlZCBzdHJpbmcgYnV0IGlu
cHV0IG1ldGhvZHMgZG9uJ3QgYXBwZWFyIHRvIHJlcXVpcmUgdGhpcy4KLSAgICBSZWZQdHI8RnJh
bWU+IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgTlNTdHJpbmcgKnRleHQ7
Ci0gICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVk
aXRvcigpLT5oYXNDb21wb3NpdGlvbigpOwotICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsK
LSAgICAgICAgdGV4dCA9IFtzdHJpbmcgc3RyaW5nXTsKLSAgICAgICAgLy8gV2UgZGVhbCB3aXRo
IHRoZSBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZSBm
cm9tIE5TQXR0cmlidXRlZFN0cmluZyBoZXJlCi0gICAgICAgIC8vIHNpbXBseSBiZWNhdXNlIGl0
IGlzIHVzZWQgYnkgYXQgbGVhc3Qgb25lIElucHV0IE1ldGhvZCAtLSBpdCBjb3JyZXNvbmRzIHRv
IHRoZSBrRXZlbnRQYXJhbVRleHRJbnB1dFNlbmRSZXBsYWNlUmFuZ2UKLSAgICAgICAgLy8gZXZl
bnQgaW4gVFNNLiAgVGhpcyBiZWhhdmlvdXIgbWF0Y2hlcyB0aGF0IG9mIC1bV2ViSFRNTFZpZXcg
c2V0TWFya2VkVGV4dDpzZWxlY3RlZFJhbmdlOl0gd2hlbiBpdCByZWNlaXZlcyBhbgotICAgICAg
ICAvLyBOU0F0dHJpYnV0ZWRTdHJpbmcKLSAgICAgICAgTlNTdHJpbmcgKnJhbmdlU3RyaW5nID0g
W3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFt
ZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOk5VTEwgaW5SYW5nZTpOU01ha2VSYW5n
ZSgwLCBbdGV4dCBsZW5ndGhdKV07Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgUmVwbGFj
ZW1lbnRSYW5nZTogJUAiLCByYW5nZVN0cmluZyk7Ci0gICAgICAgIGlmIChyYW5nZVN0cmluZykg
ewotICAgICAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3NlbGVjdE5TUmFuZ2U6TlNSYW5nZUZyb21T
dHJpbmcocmFuZ2VTdHJpbmcpXTsKLSAgICAgICAgICAgIGlzRnJvbUlucHV0TWV0aG9kID0gWUVT
OwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHRleHQgPSBzdHJpbmc7Ci0KLSAgICBi
b29sIGV2ZW50SGFuZGxlZCA9IGZhbHNlOwotICAgIGlmIChbdGV4dCBsZW5ndGhdKSB7Ci0gICAg
ICAgIEtleWJvYXJkRXZlbnQqIGV2ZW50ID0gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMtPmV2ZW50
IDogMDsKLQotICAgICAgICAvLyBpbnNlcnRUZXh0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbiBpbnB1
dCBtZXRob2Qgb3IgZnJvbSBub3JtYWwga2V5IGV2ZW50IHByb2Nlc3NpbmcKLSAgICAgICAgLy8g
SWYgaXRzIGZyb20gbm9ybWFsIGtleSBldmVudCBwcm9jZXNzaW5nLCB3ZSBtYXkgbmVlZCB0byBz
YXZlIHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpdCBsYXRlci4KLSAgICAgICAgLy8gSWYgaXRzIGZy
b20gYW4gaW5wdXQgbWV0aG9kLCB0aGVuIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgaW5zZXJ0IHRo
ZSB0ZXh0IG5vdy4gIAotICAgICAgICAvLyBXZSBhc3N1bWUgaXQncyBmcm9tIHRoZSBpbnB1dCBt
ZXRob2QgaWYgd2UgaGF2ZSBtYXJrZWQgdGV4dC4KLSAgICAgICAgLy8gRklYTUU6IEluIHRoZW9y
eSwgdGhpcyBjb3VsZCBiZSB3cm9uZyBmb3Igc29tZSBpbnB1dCBtZXRob2RzLCBzbyB3ZSBzaG91
bGQgdHJ5IHRvIGZpbmQKLSAgICAgICAgLy8gYW5vdGhlciB3YXkgdG8gZGV0ZXJtaW5lIGlmIHRo
ZSBjYWxsIGlzIGZyb20gdGhlIGlucHV0IG1ldGhvZAotICAgICAgICBib29sIHNob3VsZFNhdmVD
b21tYW5kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5zaG91bGRTYXZlQ29tbWFuZDsKLSAg
ICAgICAgaWYgKGV2ZW50ICYmIHNob3VsZFNhdmVDb21tYW5kICYmICFpc0Zyb21JbnB1dE1ldGhv
ZCkgewotICAgICAgICAgICAgZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoS2V5cHJl
c3NDb21tYW5kKCJpbnNlcnRUZXh0OiIsIHRleHQpKTsKLSAgICAgICAgICAgIF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGV2ZW50VGV4dCA9IHRl
eHQ7Ci0gICAgICAgIGV2ZW50VGV4dC5yZXBsYWNlKE5TQmFja1RhYkNoYXJhY3RlciwgTlNUYWJD
aGFyYWN0ZXIpOyAvLyBzYW1lIHRoaW5nIGlzIGRvbmUgaW4gS2V5RXZlbnRNYWMubW0gaW4gV2Vi
Q29yZQotICAgICAgICBpZiAoY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVk
aXQoKSkgewotICAgICAgICAgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3Np
dGlvbigpKQotICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IGNvcmVGcmFtZS0+ZWRpdG9y
KCktPmluc2VydFRleHQoZXZlbnRUZXh0LCBldmVudCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihldmVudFRleHQpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICghcGFyYW1ldGVycykKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGlmIChpc0Zyb21JbnB1dE1ldGhvZCkgewotICAgICAgICAv
LyBBbGxvdyBkb0NvbW1hbmRCeVNlbGVjdG9yOiB0byBiZSBjYWxsZWQgYWZ0ZXIgaW5zZXJ0VGV4
dDogYnkgcmVzZXR0aW5nIGludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMKLSAgICAgICAgX3By
aXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgICAg
ICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBZRVM7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gZXZlbnRIYW5kbGVkOwot
fQotCi0tICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXIKLXsKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBpc1RleHRJ
bnB1dChjb3JlRnJhbWUpICYmICFpc0luUGFzc3dvcmRGaWVsZChjb3JlRnJhbWUpOwotICAgIGlm
IChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCkgewot
ICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID0gZXhwb3NlSW5wdXRDb250ZXh0
OwotICAgICAgICAvLyBMZXQgQXBwS2l0IGNhY2hlIGEgcG90ZW50aWFsbHkgY2hhbmdlZCBpbnB1
dCBjb250ZXh0LgotICAgICAgICAvLyBXZWJDb3JlIHJvdXRpbmVseSBzZXRzIHRoZSBzZWxlY3Rp
b24gdG8gTm9uZSB3aGVuIGVkaXRpbmcsIGFuZCBJTXMgYmVjb21lIHVuaGFwcHkgd2hlbiBhbiBp
bnB1dCBjb250ZXh0IHN1ZGRlbmx5IHR1cm5zIG5pbCwgc2VlIGJ1ZyAyNjAwOS4KLSAgICAgICAg
aWYgKCFjb3JlRnJhbWUgfHwgIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpKQotICAg
ICAgICAgICAgW05TQXBwIHVwZGF0ZVdpbmRvd3NdOwotICAgIH0KLQotICAgIGlmICghY29yZUZy
YW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPmlnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hhbmdl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHN0YXJ0OwotICAgIHVuc2lnbmVk
IGVuZDsKLSAgICBpZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+Z2V0Q29tcG9zaXRpb25TZWxlY3Rp
b24oc3RhcnQsIGVuZCkpCi0gICAgICAgIFtbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFu
YWdlcl0gbWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZWQ6TlNNYWtlUmFuZ2Uoc3RhcnQsIGVuZCAt
IHN0YXJ0KSBjbGllbnQ6c2VsZl07Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvcmVGcmFtZS0+ZWRp
dG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJiaW5nU2VsZWN0aW9uKCk7Ci0g
ICAgICAgIFtbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl0gbWFya2VkVGV4dEFi
YW5kb25lZDpzZWxmXTsKLSAgICB9Ci19Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotQGVu
ZAorLy8gVGhpcyBjbGFzcyBoYW5kbGVzIHRoZSBjb21wbGV0ZTogb3BlcmF0aW9uLgorLy8gSXQg
Y291bnRzIG9uIGl0cyBob3N0IHZpZXcgdG8gY2FsbCBlbmRSZXZlcnRpbmdDaGFuZ2U6IHdoZW5l
dmVyIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gbmVlZHMgdG8gYmUgYWJvcnRlZC4KIAotLyoKLSAg
ICBUaGlzIGNsYXNzIHJ1bnMgdGhlIHNob3cgZm9yIGhhbmRpbmcgdGhlIGNvbXBsZXRlOiBOU1Rl
eHRWaWV3IG9wZXJhdGlvbi4gIEl0IGNvdW50cyBvbiBpdHMgSFRNTCB2aWV3Ci0gICAgdG8gY2Fs
bCBlbmRSZXZlcnRpbmdDaGFuZ2U6IHdoZW5ldmVyIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gbmVl
ZHMgdG8gYmUgYWJvcnRlZC4KLSAKLSAgICBUaGUgY2xhc3MgaXMgaW4gb25lIG9mIHR3byBtb2Rl
czogIFBvcHVwV2luZG93IHNob3dpbmcsIG9yIG5vdC4gIEl0IGlzIHNob3duIHdoZW4gYSBjb21w
bGV0aW9uIHlpZWxkcwotICAgIG1vcmUgdGhhbiBvbmUgbWF0Y2guICBJZiBhIGNvbXBsZXRpb24g
eWllbGRzIG9uZSBvciB6ZXJvIG1hdGNoZXMsIGl0IGlzIG5vdCBzaG93biwgYW5kICoqdGhlcmUg
aXMgbm8KLSAgICBzdGF0ZSBjYXJyaWVkIGFjcm9zcyB0byB0aGUgbmV4dCBjb21wbGV0aW9uKiou
Ci0gKi8KKy8vIFRoZSBjbGFzcyBpcyBpbiBvbmUgb2YgdHdvIG1vZGVzOiBQb3B1cCB3aW5kb3cg
c2hvd2luZywgb3Igbm90LgorLy8gSXQgaXMgc2hvd24gd2hlbiBhIGNvbXBsZXRpb24geWllbGRz
IG1vcmUgdGhhbiBvbmUgbWF0Y2guCisvLyBJZiBhIGNvbXBsZXRpb24geWllbGRzIG9uZSBvciB6
ZXJvIG1hdGNoZXMsIGl0IGlzIG5vdCBzaG93biwgYW5kIHRoZXJlIGlzIG5vIHN0YXRlIGNhcnJp
ZWQgYWNyb3NzIHRvIHRoZSBuZXh0IGNvbXBsZXRpb24uCiAKLUBpbXBsZW1lbnRhdGlvbiBXZWJU
ZXh0Q29tcGxldGVDb250cm9sbGVyCitAaW1wbGVtZW50YXRpb24gV2ViVGV4dENvbXBsZXRpb25D
b250cm9sbGVyCiAKLS0gKGlkKWluaXRXaXRoSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopdmlldwor
LSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopdmlldyBIVE1MVmlldzooV2ViSFRNTFZp
ZXcgKilodG1sVmlldwogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxm
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIF92aWV3ID0gdmlldzsKKyAgICBfaHRtbFZpZXcg
PSBodG1sVmlldzsKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtNTkxNyw3ICs3MSw3IEBAIHN0
YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXQKIHsKICAgICAvLyBGSVhNRTog
Mzc2OTY1NCAtIFdlIHNob3VsZCBwcmVzZXJ2ZSBjYXNlIG9mIHN0cmluZyBiZWluZyBpbnNlcnRl
ZCwgZXZlbiBpbiBwcmVmaXggKGJ1dCB0aGVuIGFsc28gYmUKICAgICAvLyBhYmxlIHRvIHJldmVy
dCB0aGF0KS4gIE1pbWljIE5TVGV4dC4KLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2Zy
YW1lXTsKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX2h0bWxWaWV3IF9mcmFtZV07CiAgICAgTlNT
dHJpbmcgKm5ld1RleHQgPSBbbWF0Y2ggc3Vic3RyaW5nRnJvbUluZGV4OnByZWZpeExlbmd0aF07
CiAgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3VGV4dCBzZWxlY3RSZXBs
YWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKIH0KQEAgLTU5NjcsMTMgKzEyMSwxMiBAQCBz
dGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAtICh2b2lkKV9wbGFjZVBv
cHVwV2luZG93OihOU1BvaW50KXRvcExlZnQKIHsKICAgICBpbnQgbnVtYmVyVG9TaG93ID0gW19j
b21wbGV0aW9ucyBjb3VudF07Ci0gICAgaWYgKG51bWJlclRvU2hvdyA+IDIwKSB7CisgICAgaWYg
KG51bWJlclRvU2hvdyA+IDIwKQogICAgICAgICBudW1iZXJUb1Nob3cgPSAyMDsKLSAgICB9CiAK
ICAgICBOU1JlY3Qgd2luZG93RnJhbWU7CiAgICAgTlNQb2ludCB3b3JkU3RhcnQgPSB0b3BMZWZ0
OwotICAgIHdpbmRvd0ZyYW1lLm9yaWdpbiA9IFtbX3ZpZXcgd2luZG93XSBjb252ZXJ0QmFzZVRv
U2NyZWVuOltfdmlldyBjb252ZXJ0UG9pbnQ6d29yZFN0YXJ0IHRvVmlldzpuaWxdXTsKKyAgICB3
aW5kb3dGcmFtZS5vcmlnaW4gPSBbW192aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpb
X2h0bWxWaWV3IGNvbnZlcnRQb2ludDp3b3JkU3RhcnQgdG9WaWV3Om5pbF1dOwogICAgIHdpbmRv
d0ZyYW1lLnNpemUuaGVpZ2h0ID0gbnVtYmVyVG9TaG93ICogW190YWJsZVZpZXcgcm93SGVpZ2h0
XSArIChudW1iZXJUb1Nob3cgKyAxKSAqIFtfdGFibGVWaWV3IGludGVyY2VsbFNwYWNpbmddLmhl
aWdodDsKICAgICB3aW5kb3dGcmFtZS5vcmlnaW4ueSAtPSB3aW5kb3dGcmFtZS5zaXplLmhlaWdo
dDsKICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25h
cnlXaXRoT2JqZWN0c0FuZEtleXM6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOjEyLjBmXSwgTlNG
b250QXR0cmlidXRlTmFtZSwgbmlsXTsKQEAgLTYwMTYsNyArMTY5LDcgQEAgc3RhdGljIHZvaWQg
ZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogICAgICAgICB9CiAKICAgICAgICAgLy8gR2V0
IHByZWNlZWRpbmcgd29yZCBzdGVtCi0gICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBf
ZnJhbWVdOworICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX2h0bWxWaWV3IF9mcmFtZV07CiAg
ICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlvbigp
LT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKICAgICAgICAgRE9NUmFuZ2UgKndob2xlV29y
ZCA9IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpTZWxlY3Rpb25Db250
cm9sbGVyOjpFWFRFTkQKICAgICAgICAgICAgIGRpcmVjdGlvbjpTZWxlY3Rpb25Db250cm9sbGVy
OjpCQUNLV0FSRCBncmFudWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwpAQCAtNjAzOCw3ICsxOTEs
NyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAKICAgICAgICAg
Ly8gTG9va3VwIG1hdGNoZXMKICAgICAgICAgW19jb21wbGV0aW9ucyByZWxlYXNlXTsKLSAgICAg
ICAgX2NvbXBsZXRpb25zID0gW2NoZWNrZXIgY29tcGxldGlvbnNGb3JQYXJ0aWFsV29yZFJhbmdl
Ok5TTWFrZVJhbmdlKDAsIFtwcmVmaXhTdHIgbGVuZ3RoXSkgaW5TdHJpbmc6cHJlZml4U3RyIGxh
bmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOltbX3ZpZXcgX3dlYlZpZXddIHNwZWxs
Q2hlY2tlckRvY3VtZW50VGFnXV07CisgICAgICAgIF9jb21wbGV0aW9ucyA9IFtjaGVja2VyIGNv
bXBsZXRpb25zRm9yUGFydGlhbFdvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBbcHJlZml4U3RyIGxl
bmd0aF0pIGluU3RyaW5nOnByZWZpeFN0ciBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0
aFRhZzpbX3ZpZXcgc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKICAgICAgICAgW19jb21wbGV0
aW9ucyByZXRhaW5dOwogICAgIAogICAgICAgICBpZiAoIV9jb21wbGV0aW9ucyB8fCBbX2NvbXBs
ZXRpb25zIGNvdW50XSA9PSAwKSB7CkBAIC02MDcyLDEzICsyMjUsMTMgQEAgc3RhdGljIHZvaWQg
ZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogICAgICAgICBfcG9wdXBXaW5kb3cgPSBuaWw7
CiAKICAgICAgICAgaWYgKHJldmVydENoYW5nZSkgewotICAgICAgICAgICAgV2ViRnJhbWUgKmZy
YW1lID0gW192aWV3IF9mcmFtZV07CisgICAgICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX2h0
bWxWaWV3IF9mcmFtZV07CiAgICAgICAgICAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dDpfb3JpZ2luYWxTdHJpbmcgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpO
T107Ci0gICAgICAgIH0gZWxzZSBpZiAoW192aWV3IF9oYXNTZWxlY3Rpb25dKSB7CisgICAgICAg
IH0gZWxzZSBpZiAoW19odG1sVmlldyBfaGFzU2VsZWN0aW9uXSkgewogICAgICAgICAgICAgaWYg
KGdvTGVmdCkKLSAgICAgICAgICAgICAgICBbX3ZpZXcgbW92ZUJhY2t3YXJkOm5pbF07CisgICAg
ICAgICAgICAgICAgW19odG1sVmlldyBtb3ZlQmFja3dhcmQ6bmlsXTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBbX3ZpZXcgbW92ZUZvcndhcmQ6bmlsXTsKKyAgICAgICAgICAg
ICAgICBbX2h0bWxWaWV3IG1vdmVGb3J3YXJkOm5pbF07CiAgICAgICAgIH0KICAgICAgICAgW19v
cmlnaW5hbFN0cmluZyByZWxlYXNlXTsKICAgICAgICAgX29yaWdpbmFsU3RyaW5nID0gbmlsOwpA
QCAtNjE2OSwyNjUgKzMyMiwzIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0
cmlidXQKIH0KIAogQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkRvY3Vt
ZW50UHJpdmF0ZVByb3RvY29scykKLQotLSAoTlNSZWN0KXNlbGVjdGlvblJlY3QKLXsKLSAgICBp
ZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCi0gICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9mcmFt
ZV0pLT5zZWxlY3Rpb25Cb3VuZHMoKTsKLSAgICByZXR1cm4gTlNaZXJvUmVjdDsKLX0KLQotLSAo
TlNBcnJheSAqKXNlbGVjdGlvblRleHRSZWN0cwotewotICAgIGlmICghW3NlbGYgX2hhc1NlbGVj
dGlvbl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4g
bGlzdDsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0g
ICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uVGV4dFJlY3RzKGxpc3QpOwotCi0gICAgdW5zaWdu
ZWQgc2l6ZSA9IGxpc3Quc2l6ZSgpOwotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgW3Jlc3Vs
dCBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpsaXN0W2ldXV07Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotLSAoTlNWaWV3ICopc2VsZWN0aW9uVmlldwotewotICAgIHJl
dHVybiBzZWxmOwotfQotCi0tIChOU0ltYWdlICopc2VsZWN0aW9uSW1hZ2VGb3JjaW5nQmxhY2tU
ZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0Ci17Ci0gICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25d
KQotICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uSW1hZ2UoZm9y
Y2VCbGFja1RleHQpOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TUmVjdClzZWxlY3Rpb25J
bWFnZVJlY3QKLXsKLSAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCi0gICAgICAgIHJldHVy
biBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25Cb3VuZHMoKTsKLSAgICByZXR1cm4gTlNa
ZXJvUmVjdDsKLX0KLQotLSAoTlNBcnJheSAqKXBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbgot
ewotICAgIGlmIChbc2VsZiBfY2FuU21hcnRDb3B5T3JEZWxldGVdKSB7Ci0gICAgICAgIE5TTXV0
YWJsZUFycmF5ICp0eXBlcyA9IFtbW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5
cGVzXSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOwotICAgICAgICBbdHlwZXMgYWRkT2JqZWN0
OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKLSAgICAgICAgcmV0dXJuIHR5cGVzOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHJldHVybiBbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJk
VHlwZXNdOwotICAgIH0KLX0KLQotLSAodm9pZCl3cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJk
VHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQKLXsKLSAgICBbc2VsZiBfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5
cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6bmlsXTsK
LX0KLQotLSAodm9pZClzZWxlY3RBbGwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3RBbGwoKTsKLX0KLQotLSAodm9pZClkZXNlbGVjdEFsbAotewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZy
YW1lKQotICAgICAgICByZXR1cm47Ci0gICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xlYXIo
KTsKLX0KLQotLSAoTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICByZXR1cm4gW1tzZWxmIF9mcmFt
ZV0gX3N0cmluZ0ZvclJhbmdlOltzZWxmIF9kb2N1bWVudFJhbmdlXV07Ci19Ci0KLS0gKE5TQXR0
cmlidXRlZFN0cmluZyAqKV9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKLXsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7Ci0jaWYg
IUxPR19ESVNBQkxFRCAgICAgICAgCi0gICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCk7Ci0jZW5kaWYgICAgCi0gICAgYXR0cmlidXRlZFN0cmluZyA9IFtbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gX2luaXRXaXRoRE9NUmFuZ2U6cmFuZ2VdIGF1dG9yZWxlYXNl
XTsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICBMT0coVGltaW5nLCAiY3JlYXRpbmcgYXR0cmli
dXRlZCBzdHJpbmcgZnJvbSBzZWxlY3Rpb24gdG9vayAlZiBzZWNvbmRzLiIsIGR1cmF0aW9uKTsK
LSNlbmRpZgotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOwotfQotCi0tIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50
ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6W2Rv
Y3VtZW50IF9kb2N1bWVudFJhbmdlXV07Ci0gICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7Ci0g
ICAgICAgIERvY3VtZW50KiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRvY3VtZW50KTsKLSAgICAgICAg
YXR0cmlidXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlOlJhbmdlOjpjcmVhdGUoY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAs
IGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jaGlsZE5vZGVDb3VudCgpKS5nZXQoKV07Ci0g
ICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOwotfQotCi0tIChOU1N0cmluZyAqKXNl
bGVjdGVkU3RyaW5nCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3RlZFN0cmlu
Z107Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0cmlu
ZwotewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9h
dHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdXTsKLSAgICBp
ZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7Ci0gICAgICAgIGlmIChjb3JlRnJhbWUpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtOU0F0
dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOnJhbmdlLmdldCgp
XTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKLX0KLQot
LSAoQk9PTClzdXBwb3J0c1RleHRFbmNvZGluZwotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0g
KEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2Fy
ZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3RhcnRJ
blNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uCi17Ci0gICAgaWYgKCFbc3RyaW5nIGxl
bmd0aF0pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZmluZFN0
cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZywgc3RhcnRJblNlbGVjdGlv
bik7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJEb2N1bWVu
dEludGVybmFsUHJvdG9jb2xzKQotCi0tIChOU0RpY3Rpb25hcnkgKillbGVtZW50QXRQb2ludDoo
TlNQb2ludClwb2ludAotewotICAgIHJldHVybiBbc2VsZiBlbGVtZW50QXRQb2ludDpwb2ludCBh
bGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOwotfQotCi0tIChOU0RpY3Rpb25hcnkgKillbGVtZW50QXRQ
b2ludDooTlNQb2ludClwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6KEJPT0wpYWxsb3cKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVG
cmFtZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW1tbV2ViRWxlbWVudERpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludChwb2ludCksIGFsbG93KV0gYXV0b3Jl
bGVhc2VdOwotfQotCi0tIChOU1VJbnRlZ2VyKW1hcmtBbGxNYXRjaGVzRm9yVGV4dDooTlNTdHJp
bmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1pdDooTlNVSW50ZWdl
cilsaW1pdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwot
ICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY29yZUZy
YW1lLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjYXNlRmxhZywgbGltaXQpOwotfQot
Ci0tICh2b2lkKXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3VmFs
dWUKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBp
ZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcmVGcmFtZS0+c2V0TWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChuZXdWYWx1ZSk7Ci19Ci0KLS0gKEJPT0wpbWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5tYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7Ci19Ci0KLS0gKHZvaWQpdW5tYXJrQWxsVGV4
dE1hdGNoZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
LSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm47Ci0gICAgZG9jdW1lbnQtPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRl
eHRNYXRjaCk7Ci19Ci0KLS0gKE5TQXJyYXkgKilyZWN0c0ZvclRleHRNYXRjaGVzCi17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJh
bWUpCi0gICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07Ci0gICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheV07Ci0KLSAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBk
b2N1bWVudC0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRj
aCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSByZWN0cy5zaXplKCk7Ci0gICAgTlNNdXRhYmxlQXJy
YXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3VudF07Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCi0gICAg
ICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdHNbaW5kZXhd
XV07ICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUBlbmQKLQotLy8gVGhpcyBpcyB1c2Vk
IGJ5IEFwcEtpdCBhbmQgaXMgaW5jbHVkZWQgaGVyZSBzbyB0aGF0IFdlYkRhdGFQcm90b2NvbFNj
aGVtZSBpcyBvbmx5IGRlZmluZWQgb25jZS4KLUBpbXBsZW1lbnRhdGlvbiBOU1VSTCAoV2ViRGF0
YVVSTCkKLQotKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRhdGFVUkwKLXsKLSAgICBDRlVVSURS
ZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0
cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKLSAgICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNV
UkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJUA6Ly8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZ11dOwotICAgIENG
UmVsZWFzZShVVUlEU3RyaW5nKTsKLSAgICByZXR1cm4gVVJMOwotfQotCi1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBXZWJSZXNwb25kZXJDaGFpblNpbmsKLQotLSAoaWQpaW5pdFdpdGhSZXNwb25k
ZXJDaGFpbjooTlNSZXNwb25kZXIgKiljaGFpbgotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
Ci0gICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gY2hhaW47Ci0gICAgd2hpbGUgKE5TUmVzcG9u
ZGVyICpuZXh0ID0gW19sYXN0UmVzcG9uZGVySW5DaGFpbiBuZXh0UmVzcG9uZGVyXSkKLSAgICAg
ICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gbmV4dDsKLSAgICBbX2xhc3RSZXNwb25kZXJJbkNo
YWluIHNldE5leHRSZXNwb25kZXI6c2VsZl07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGV0YWNoCi17Ci0gICAgW19sYXN0UmVzcG9uZGVySW5DaGFpbiBzZXROZXh0UmVzcG9uZGVy
Om5pbF07Ci0gICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gbmlsOwotfQotCi0tIChCT09MKXJl
Y2VpdmVkVW5oYW5kbGVkQ29tbWFuZAotewotICAgIHJldHVybiBfcmVjZWl2ZWRVbmhhbmRsZWRD
b21tYW5kOwotfQotCi0tICh2b2lkKW5vUmVzcG9uZGVyRm9yOihTRUwpc2VsZWN0b3IKLXsKLSAg
ICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOwotfQotCi0tICh2b2lkKWRvQ29tbWFu
ZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1h
bmQgPSBZRVM7Ci19Ci0KLS0gKEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwpYWN0aW9uIHdpdGg6KGlk
KW9iamVjdAotewotICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQgPSBZRVM7Ci0gICAgcmV0
dXJuIFlFUzsKLX0KLQotQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlVJRGVsZWdh
dGVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlVJRGVsZWdh
dGVQcml2YXRlLmgJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlVJ
RGVsZWdhdGVQcml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw0ICsxMjYsMTMgQEAgZW51
bSB7IAogCiAtIChCT09MKXdlYlZpZXc6KFdlYlZpZXcgKilzZW5kZXIgZnJhbWU6KFdlYkZyYW1l
ICopZnJhbWUgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbjooV2ViR2VvbG9jYXRpb24gKiln
ZW9sb2NhdGlvbiBzZWN1cml0eU9yaWdpbjooV2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW47CiAK
Ky8qIQorICAgIEBtZXRob2Qgd2ViVmlldzpwcmludEZyYW1lOgorICAgIEBhYnN0cmFjdCBJbmZv
cm1zIHRoYXQgYSBXZWJGcmFtZSBuZWVkcyB0byBiZSBwcmludGVkCisgICAgQHBhcmFtIHdlYlZp
ZXcgVGhlIFdlYlZpZXcgc2VuZGluZyB0aGUgZGVsZWdhdGUgbWV0aG9kCisgICAgQHBhcmFtIGZy
YW1lVmlldyBUaGUgV2ViRnJhbWUgbmVlZGluZyB0byBiZSBwcmludGVkCisgICAgQGRpc2N1c3Np
b24gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYSBzY3JpcHQgb3IgdXNlciByZXF1ZXN0cyB0
aGUgcGFnZSB0byBiZSBwcmludGVkLgorKi8KKy0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNl
bmRlciBwcmludEZyYW1lOihXZWJGcmFtZSAqKWZyYW1lOworCiBAZW5kCkluZGV4OiBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVy
ZW5jZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCiAjaW1w
b3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29u
dHJvbGxlci5oIgogI2ltcG9ydCAiV2ViVGV4dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJXZWJVSURl
bGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgpAQCAtMTUzLDYgKzE1
NCwyNiBAQAogI2ltcG9ydCA8V2ViS2l0L1dlYkRhc2hib2FyZFJlZ2lvbi5oPgogI2VuZGlmCiAK
K0BjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7CisKK0BpbnRlcmZhY2UgTlNSZXNwb25kZXIgKFdl
Yk5TUmVzcG9uZGVyRGV0YWlscykKKy0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4
dDsKK0BlbmQKKworQGludGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoV2ViTlNTcGVsbENoZWNrZXJE
ZXRhaWxzKQorLSAodm9pZClfcHJlZmxpZ2h0Q2hvc2VuU3BlbGxTZXJ2ZXI7CitAZW5kCisKK0Bp
bnRlcmZhY2UgTlNWaWV3IChXZWJOU1ZpZXdEZXRhaWxzKQorLSAoTlNWaWV3ICopX2hpdFRlc3Q6
KE5TUG9pbnQgKilhUG9pbnQgZHJhZ1R5cGVzOihOU1NldCAqKXR5cGVzOworLSAodm9pZClfYXV0
b3Njcm9sbEZvckRyYWdnaW5nSW5mbzooaWQpZHJhZ0luZm8gdGltZURlbHRhOihOU1RpbWVJbnRl
cnZhbClyZXBlYXREZWx0YTsKKy0gKEJPT0wpX3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0lu
Zm86KGlkKWRyYWdJbmZvOworQGVuZAorCitAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRv
d0RldGFpbHMpIAorLSAoaWQpX29sZEZpcnN0UmVzcG9uZGVyQmVmb3JlQmVjb21pbmc7CitAZW5k
CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAt
MzAyLDMyICszMjMsMTkgQEAgbWFjcm8oeWFua0FuZFNlbGVjdCkgXAogI2RlZmluZSBVc2luZ0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdQcm9wZXJ0eSBAIl9pc1VzaW5nQWNjZWxlcmF0ZWRDb21wb3Np
dGluZyIKICNlbmRpZiAgICAgICAgICAgIAogCi0KIHN0YXRpYyBCT09MIHNfZGlkU2V0Q2FjaGVN
b2RlbDsKIHN0YXRpYyBXZWJDYWNoZU1vZGVsIHNfY2FjaGVNb2RlbCA9IFdlYkNhY2hlTW9kZWxE
b2N1bWVudFZpZXdlcjsKIAogc3RhdGljIEJPT0wgYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nOwog
c3RhdGljIGludCBwbHVnaW5EYXRhYmFzZUNsaWVudENvdW50ID0gMDsKIAorc3RhdGljIFdlYlZp
ZXcgKmxhc3RNb3VzZW92ZXJWaWV3OworCiAjaWZuZGVmIE5ERUJVRwogc3RhdGljIGNvbnN0IGNo
YXIgd2ViVmlld0lzT3BlbltdID0gIkF0IGxlYXN0IG9uZSBXZWJWaWV3IGlzIHN0aWxsIG9wZW4u
IjsKICNlbmRpZgogCi1AaW50ZXJmYWNlIE5TU3BlbGxDaGVja2VyIChBcHBLaXRTZWNyZXRzSUtu
b3cpCi0tICh2b2lkKV9wcmVmbGlnaHRDaG9zZW5TcGVsbFNlcnZlcjsKLUBlbmQKLQotQGludGVy
ZmFjZSBOU1ZpZXcgKEFwcEtpdFNlY3JldHNJS25vdykKLS0gKE5TVmlldyAqKV9oaXRUZXN0OihO
U1BvaW50ICopYVBvaW50IGRyYWdUeXBlczooTlNTZXQgKil0eXBlczsKLS0gKHZvaWQpX2F1dG9z
Y3JvbGxGb3JEcmFnZ2luZ0luZm86KGlkKWRyYWdJbmZvIHRpbWVEZWx0YTooTlNUaW1lSW50ZXJ2
YWwpcmVwZWF0RGVsdGE7Ci0tIChCT09MKV9zaG91bGRBdXRvc2Nyb2xsRm9yRHJhZ2dpbmdJbmZv
OihpZClkcmFnSW5mbzsKLUBlbmQKLQotQGludGVyZmFjZSBOU1dpbmRvdyAoQXBwS2l0U2VjcmV0
c0lLbm93KSAKLS0gKGlkKV9vbGRGaXJzdFJlc3BvbmRlckJlZm9yZUJlY29taW5nOwotQGVuZAot
Ci1AaW50ZXJmYWNlIE5TT2JqZWN0IChWYWxpZGF0ZVdpdGhvdXREZWxlZ2F0ZSkKK0BpbnRlcmZh
Y2UgTlNPYmplY3QgKFdlYlZhbGlkYXRlV2l0aG91dERlbGVnYXRlKQogLSAoQk9PTCl2YWxpZGF0
ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50
ZXJmYWNlSXRlbT4paXRlbTsKIEBlbmQKIApAQCAtNDIxLDcgKzQyOSw3IEBAIHN0YXRpYyBjb25z
dCBjaGFyIHdlYlZpZXdJc09wZW5bXSA9ICJBdCAKICAgICBCT09MIHNob3VsZFVwZGF0ZVdoaWxl
T2Zmc2NyZWVuOwogICAgIAogICAgIC8vIFdoZW4gdGhpcyBmbGFnIGlzIHNldCwgd2Ugd2lsbCBu
b3QgbWFrZSBhbnkgc3Vidmlld3MgdW5kZXJuZWF0aCB0aGlzIFdlYlZpZXcuICBUaGlzIG1lYW5z
IG5vIFdlYkZyYW1lVmlld3MgYW5kIG5vIFdlYkhUTUxWaWV3cy4KLSAgICBCT09MIHVzZURvY3Vt
ZW50Vmlld3M7CisgICAgQk9PTCB1c2VzRG9jdW1lbnRWaWV3czsKICAgICAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLy8gV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBuZXh0
IHRpbWUgYSBXZWJIVE1MVmlldyBkcmF3cywgaXQgbmVlZHMgdG8gdGVtcG9yYXJpbHkgZGlzYWJs
ZSBzY3JlZW4gdXBkYXRlcwpAQCAtNDM2LDYgKzQ0NCwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciB3
ZWJWaWV3SXNPcGVuW10gPSAiQXQgCiAgICAgTlNQYXN0ZWJvYXJkICppbnNlcnRpb25QYXN0ZWJv
YXJkOwogICAgICAgICAgICAgCiAgICAgTlNTaXplIGxhc3RMYXlvdXRTaXplOworCisgICAgQk9P
TCBpZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50czsKKworICAgIE5TRXZlbnQgKm1vdXNlRG93bkV2
ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKyAgICBCT09MIGhhbmRsaW5n
TW91c2VEb3duRXZlbnQ7CisgICAgTlNFdmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVy
IGhhbmRsaW5nIHRoZSBldmVudC4KKworICAgIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciAq
Y29tcGxldGlvbkNvbnRyb2xsZXI7CisKKyAgICBOU1RpbWVyICphdXRvc2Nyb2xsVGltZXI7Cisg
ICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKKworICAgIENGUnVuTG9vcFRpbWVy
UmVmIHVwZGF0ZU1vdXNlb3ZlclRpbWVyOwogfQogQGVuZAogCkBAIC03NTMsNyArNzc0LDcgQEAg
c3RhdGljIGJvb2wgcnVubmluZ1RpZ2VyTWFpbCgpCiAKIC0gKEJPT0wpX3VzZXNEb2N1bWVudFZp
ZXdzCiB7Ci0gICAgcmV0dXJuIF9wcml2YXRlLT51c2VEb2N1bWVudFZpZXdzOworICAgIHJldHVy
biBfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3M7CiB9CiAKIC0gKHZvaWQpX2NvbW1vbkluaXRp
YWxpemF0aW9uV2l0aEZyYW1lTmFtZTooTlNTdHJpbmcgKilmcmFtZU5hbWUgZ3JvdXBOYW1lOihO
U1N0cmluZyAqKWdyb3VwTmFtZSB1c2VzRG9jdW1lbnRWaWV3czooQk9PTCl1c2VzRG9jdW1lbnRW
aWV3cwpAQCAtNzcyLDEwICs3OTMsMTAgQEAgc3RhdGljIGJvb2wgcnVubmluZ1RpZ2VyTWFpbCgp
CiAgICAgX3ByaXZhdGUtPm1haW5GcmFtZURvY3VtZW50UmVhZHkgPSBOTzsKICAgICBfcHJpdmF0
ZS0+ZHJhd3NCYWNrZ3JvdW5kID0gWUVTOwogICAgIF9wcml2YXRlLT5iYWNrZ3JvdW5kQ29sb3Ig
PSBbW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MSBhbHBoYToxXSByZXRhaW5dOwotICAg
IF9wcml2YXRlLT51c2VEb2N1bWVudFZpZXdzID0gdXNlc0RvY3VtZW50Vmlld3M7CisgICAgX3By
aXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzID0gdXNlc0RvY3VtZW50Vmlld3M7CiAKICAgICBXZWJG
cmFtZVZpZXcgKmZyYW1lVmlldyA9IG5pbDsKLSAgICBpZiAoX3ByaXZhdGUtPnVzZURvY3VtZW50
Vmlld3MpIHsKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CiAgICAgICAg
IE5TUmVjdCBmID0gW3NlbGYgZnJhbWVdOwogICAgICAgICBmcmFtZVZpZXcgPSBbW1dlYkZyYW1l
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTogTlNNYWtlUmVjdCgwLDAsZi5zaXplLndpZHRoLGYu
c2l6ZS5oZWlnaHQpXTsKICAgICAgICAgW2ZyYW1lVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5T
Vmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwpAQCAtODk5LDcgKzkyMCw3
IEBAIHN0YXRpYyBib29sIHJ1bm5pbmdUaWdlck1haWwoKQogCiAtICh2b2lkKWRyYXdTaW5nbGVS
ZWN0OihOU1JlY3QpcmVjdAogewotICAgIEFTU0VSVCghX3ByaXZhdGUtPnVzZURvY3VtZW50Vmll
d3MpOworICAgIEFTU0VSVCghX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKTsKICAgICAKICAg
ICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBoaWNzU3RhdGVdOwogICAgIE5TUmVjdENsaXAo
cmVjdCk7CkBAIC05MjMsMTggKzk0NCwxOCBAQCBzdGF0aWMgYm9vbCBydW5uaW5nVGlnZXJNYWls
KCkKIAogLSAoQk9PTClpc0ZsaXBwZWQgCiB7Ci0gICAgcmV0dXJuIF9wcml2YXRlICYmICFfcHJp
dmF0ZS0+dXNlRG9jdW1lbnRWaWV3czsKKyAgICByZXR1cm4gX3ByaXZhdGUgJiYgIV9wcml2YXRl
LT51c2VzRG9jdW1lbnRWaWV3czsKIH0KIAogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlz
aXplCiB7CiAgICAgaWYgKCFOU0VxdWFsU2l6ZXMoX3ByaXZhdGUtPmxhc3RMYXlvdXRTaXplLCBz
aXplKSkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwor
ICAgICAgICBGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CiAgICAgICAgIC8v
IEZJWE1FOiBWaWV3bGVzcyBXZWJLaXQgaXMgYnJva2VuIHdpdGggU2FmYXJpIGJhbm5lcnMgKGUu
Zy4sIHRoZSBGaW5kIGJhbm5lcikuICBXZSdsbCBoYXZlIHRvIGZpZ3VyZSBvdXQgYSB3YXkgZm9y
CiAgICAgICAgIC8vIFNhZmFyaSB0byBjb21tdW5pY2F0ZSB0aGF0IHRoaXMgc3BhY2UgaXMgYmVp
bmcgY29uc3VtZWQuICBGb3IgV2ViS2l0IHdpdGggZG9jdW1lbnQgdmlld3MsIHRoZXJlJ3Mgbm8K
ICAgICAgICAgLy8gbmVlZCB0byBkbyBhbiBleHBsaWNpdCByZXNpemUsIHNpbmNlIFdlYkZyYW1l
Vmlld3MgaGF2ZSBhdXRvIHJlc2l6aW5nIHR1cm5lZCBvbiBhbmQgd2lsbCBoYW5kbGUgY2hhbmdp
bmcKICAgICAgICAgLy8gdGhlaXIgYm91bmRzIGF1dG9tYXRpY2FsbHkuIFNlZSA8cmRhcjovL3By
b2JsZW0vNjgzNTU3Mz4gZm9yIGRldGFpbHMuCi0gICAgICAgIGlmICghX3ByaXZhdGUtPnVzZURv
Y3VtZW50Vmlld3MpCisgICAgICAgIGlmICghX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKQog
ICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+cmVzaXplKEludFNpemUoc2l6ZSkpOwogICAgICAg
ICBmcmFtZS0+dmlldygpLT5zZXROZWVkc0xheW91dCgpOwogICAgICAgICBbc2VsZiBzZXROZWVk
c0Rpc3BsYXk6WUVTXTsKQEAgLTk0NSwxOSArOTY2LDIxIEBAIHN0YXRpYyBib29sIHJ1bm5pbmdU
aWdlck1haWwoKQogfQogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSB8fCAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikKKwogLSAodm9pZClfdmlld1dpbGxEcmF3SW50ZXJuYWwK
IHsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOworICAgIEZyYW1l
KiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoZnJhbWUgJiYgZnJhbWUt
PnZpZXcoKSkKICAgICAgICAgZnJhbWUtPnZpZXcoKS0+bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUo
KTsKIH0KKwogI2VuZGlmCiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKIAogLSAodm9pZCl2
aWV3V2lsbERyYXcKIHsKLSAgICBpZiAoIV9wcml2YXRlLT51c2VEb2N1bWVudFZpZXdzKQorICAg
IGlmICghX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKQogICAgICAgICBbc2VsZiBfdmlld1dp
bGxEcmF3SW50ZXJuYWxdOwogICAgIFtzdXBlciB2aWV3V2lsbERyYXddOwogfQpAQCAtOTY3LDcg
Kzk5MCw3IEBAIHN0YXRpYyBib29sIHJ1bm5pbmdUaWdlck1haWwoKQogCiAtICh2b2lkKWRyYXdS
ZWN0OihOU1JlY3QpcmVjdAogewotICAgIGlmIChfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cykK
KyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKQogICAgICAgICByZXR1cm4gW3N1
cGVyIGRyYXdSZWN0OnJlY3RdOwogICAgIAogICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwpAQCAt
MTE1OSw2ICsxMTgyLDkgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVk
KAogICAgIGlmICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgaWYgKGxhc3RNb3VzZW92ZXJWaWV3ID09IHNlbGYpCisgICAgICAgIGxhc3RNb3Vz
ZW92ZXJWaWV3ID0gbmlsOworCiAjaWZuZGVmIE5ERUJVRwogICAgIFdURjo6UmVmQ291bnRlZExl
YWtDb3VudGVyOjpjYW5jZWxNZXNzYWdlU3VwcHJlc3Npb24od2ViVmlld0lzT3Blbik7CiAjZW5k
aWYKQEAgLTExNzAsNyArMTE5Niw3IEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJkb3du
RW5hYmxlZCgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChGcmFtZSogbWFpbkZy
YW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKSkKKyAgICBpZiAoRnJhbWUqIG1haW5GcmFtZSA9
IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKICAgICAgICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+ZGV0
YWNoRnJvbVBhcmVudCgpOwogCiAgICAgW3NlbGYgX3JlbW92ZUZyb21BbGxXZWJWaWV3c1NldF07
CkBAIC0xOTMwLDcgKzE5NTYsNyBAQCBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoCiAtIChOU0RpY3Rpb25hcnkgKilfZGFzaGJvYXJkUmVnaW9ucwogewogICAgIC8vIE9u
bHkgcmV0dXJuIHJlZ2lvbnMgZnJvbSBtYWluIGZyYW1lLgotICAgIEZyYW1lKiBtYWluRnJhbWUg
PSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOworICAgIEZyYW1lKiBtYWluRnJhbWUgPSBbc2VsZiBf
bWFpbkNvcmVGcmFtZV07CiAgICAgaWYgKCFtYWluRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcmVnaW9ucyA9IG1haW5GcmFtZS0+ZGFzaGJvYXJk
UmVnaW9uc0RpY3Rpb25hcnkoKTsKQEAgLTIwNTAsOCArMjA3Niw3IEBAIFdlYlNjcmlwdERlYnVn
RGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gKIAogLSAodm9pZClzZXRQcm9oaWJpdHNNYWluRnJh
bWVTY3JvbGxpbmc6KEJPT0wpcHJvaGliaXRzCiB7Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IGNv
cmUoW3NlbGYgbWFpbkZyYW1lXSk7Ci0gICAgaWYgKG1haW5GcmFtZSkKKyAgICBpZiAoRnJhbWUq
IG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKICAgICAgICAgbWFpbkZyYW1lLT52
aWV3KCktPnNldFByb2hpYml0c1Njcm9sbGluZyhwcm9oaWJpdHMpOwogfQogCkBAIC0yMDYzLDE0
ICsyMDg4LDEzIEBAIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gKIAog
LSAodm9pZClfc2V0SW5WaWV3U291cmNlTW9kZTooQk9PTClmbGFnCiB7Ci0gICAgRnJhbWUqIG1h
aW5GcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7Ci0gICAgaWYgKG1haW5GcmFtZSkKKyAg
ICBpZiAoRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKICAgICAgICAg
bWFpbkZyYW1lLT5zZXRJblZpZXdTb3VyY2VNb2RlKGZsYWcpOwogfQogCiAtIChCT09MKV9pblZp
ZXdTb3VyY2VNb2RlCiB7Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZy
YW1lXSk7CisgICAgRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAg
ICByZXR1cm4gbWFpbkZyYW1lICYmIG1haW5GcmFtZS0+aW5WaWV3U291cmNlTW9kZSgpOwogfQog
CkBAIC0yMTEzLDEzICsyMTM3LDEzIEBAIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2gKIAogLSAodm9pZClfYXR0YWNoU2NyaXB0RGVidWdnZXJUb0FsbEZyYW1lcwogewot
ICAgIGZvciAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCisgICAgZm9yIChGcmFtZSogZnJh
bWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBba2l0KGZyYW1lKSBfYXR0YWNoU2NyaXB0RGVidWdn
ZXJdOwogfQogCiAtICh2b2lkKV9kZXRhY2hTY3JpcHREZWJ1Z2dlckZyb21BbGxGcmFtZXMKIHsK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQorICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgW2tpdChmcmFtZSkgX2RldGFjaFNjcmlwdERlYnVn
Z2VyXTsKIH0KIApAQCAtMjE4Miw3ICsyMjA2LDcgQEAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUlt
cGxlbWVudGF0aW9uQ2FjaAogICAgIEludFBvaW50IHJlY3RTdGFydChyZWN0Lm9yaWdpbi54LCBy
ZWN0Lm9yaWdpbi55KTsKICAgICBJbnRQb2ludCByZWN0RW5kKHJlY3Qub3JpZ2luLnggKyByZWN0
LnNpemUud2lkdGgsIHJlY3Qub3JpZ2luLnkgKyByZWN0LnNpemUuaGVpZ2h0KTsKICAgICAKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjIxNiw3ICsyMjQwLDcgQEAgV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaAogCiAtICh2b2lkKV9leGVjdXRlQ29yZUNv
bW1hbmRCeU5hbWU6KE5TU3RyaW5nICopbmFtZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZQogewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOworICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CiAgICAgaWYgKCFjb3JlRnJhbWUp
CiAgICAgICAgIHJldHVybjsKICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWUp
LmV4ZWN1dGUodmFsdWUpOwpAQCAtMjI3Myw0MiArMjI5Nyw2IEBAIFdlYlNjcmlwdERlYnVnRGVs
ZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gKICAgICByZXR1cm4gaGFuZEN1cnNvcigpLmltcGwoKTsK
IH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotLSAoQk9PTClfbmVlZHNP
bmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbgotewotICAgIHJldHVybiBfcHJpdmF0ZS0+bmVl
ZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjsKLX0KLQotLSAodm9pZClfc2V0TmVlZHNP
bmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjooQk9PTCluZWVkc1N5bmNocm9uaXphdGlvbgot
ewotICAgIF9wcml2YXRlLT5uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uID0gbmVl
ZHNTeW5jaHJvbml6YXRpb247Ci19Ci0KLS0gKHZvaWQpX3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1lKil3ZWJGcmFtZQotewotICAgIEJPT0wgZW50ZXJpbmcg
PSBfcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA9PSAwOwotICAgIGlmIChlbnRlcmlu
ZykKLSAgICAgICAgW3NlbGYgd2lsbENoYW5nZVZhbHVlRm9yS2V5OlVzaW5nQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ1Byb3BlcnR5XTsKLSAgICArK19wcml2YXRlLT5hY2NlbGVyYXRlZEZyYW1lc0Nv
dW50OwotICAgIGlmIChlbnRlcmluZykKLSAgICAgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JL
ZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nUHJvcGVydHldOwotfQotCi0tICh2b2lkKV9z
dG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWUK
LXsKLSAgICBCT09MIGxlYXZpbmcgPSBfcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA9
PSAxOwotICAgIEFTU0VSVChfcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA+IDApOwot
ICAgIAotICAgIGlmIChsZWF2aW5nKQotICAgICAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JL
ZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nUHJvcGVydHldOwotICAgIC0tX3ByaXZhdGUt
PmFjY2VsZXJhdGVkRnJhbWVzQ291bnQ7Ci0gICAgaWYgKGxlYXZpbmcpCi0gICAgICAgIFtzZWxm
IGRpZENoYW5nZVZhbHVlRm9yS2V5OlVzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5
XTsKLX0KLQotI2VuZGlmICAgIAotCiAtIChCT09MKV9pc1VzaW5nQWNjZWxlcmF0ZWRDb21wb3Np
dGluZwogewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTI3MTMsNyArMjcw
MSw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKIAogLSAodm9p
ZClhZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5kb3c6KE5TV2luZG93ICopd2luZG93CiB7Ci0gICAg
aWYgKCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyAmJiB3aW5kb3cpIHsKKyAgICBpZiAoIV9w
cml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cyAmJiB3aW5kb3cpIHsKICAgICAgICAgW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3Rvcihfd2luZG93RGlkQmVjb21lS2V5OikKICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dE
aWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CiAgICAgICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2Vs
ZWN0b3IoX3dpbmRvd0RpZFJlc2lnbktleTopCkBAIC0yNzI2LDcgKzI3MTQsNyBAQCBzdGF0aWMg
Ym9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAtICh2b2lkKXJlbW92ZVdpbmRvd09i
c2VydmVycwogewogICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIGlm
ICghX3ByaXZhdGUtPnVzZURvY3VtZW50Vmlld3MgJiYgd2luZG93KSB7CisgICAgaWYgKCFfcHJp
dmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MgJiYgd2luZG93KSB7CiAgICAgICAgIFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZgogICAgICAgICAg
ICAgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAg
ICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZl
cjpzZWxmCkBAIC0yNzc5LDExICsyNzY3LDExIEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0lu
aXRUaHJlYWRXb3JrYXIKIAogLSAodm9pZClfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCiB7
Ci0gICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyk7Ci0gICAgW3NlbGYgX3Vw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOltzZWxmIG1haW5GcmFtZV1dOworICAg
IEFTU0VSVCghX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKTsKKyAgICBbV2ViVmlldyBfdXBk
YXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlRm9yRnJhbWU6W3NlbGYgbWFpbkZyYW1lXV07CiB9CiAK
LS0gKHZvaWQpX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOihXZWJGcmFtZSAq
KXdlYkZyYW1lCisrICh2b2lkKV91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVGb3JGcmFtZToo
V2ViRnJhbWUgKil3ZWJGcmFtZQogewogICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2ViRnJhbWUp
OwogICAgIGlmICghZnJhbWUpCkBAIC0yNzk1LDI0ICsyNzgzLDI4IEBAIHN0YXRpYyBib29sIG5l
ZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKIAogICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2Vs
ZiB3aW5kb3ddOwogICAgIEJPT0wgd2luZG93SXNLZXkgPSBbd2luZG93IGlzS2V5V2luZG93XTsK
LSAgICBCT09MIHdpbmRvd09yU2hlZXRJc0tleSA9IHdpbmRvd0lzS2V5IHx8IFtbd2luZG93IGF0
dGFjaGVkU2hlZXRdIGlzS2V5V2luZG93XTsKIAotICAgIFdlYkZyYW1lVmlldyAqbWFpbkZyYW1l
VmlldyA9IFtbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld107Ci0gICAgaWQgPFdlYkRvY3VtZW50
Vmlldz4gZG9jdW1lbnRWaWV3ID0gW21haW5GcmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsKLSAgICBC
T09MIGRvY3VtZW50Vmlld0lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXIgPSBbZG9jdW1lbnRWaWV3
IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0gJiYgWyhXZWJIVE1MVmlldyAqKWRv
Y3VtZW50VmlldyBfaXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcl07Ci0gICAgICAgIAorICAgIE5T
VmlldyAqY29udGVudFZpZXcgPSBfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MgPyBbW3NlbGYg
bWFpbkZyYW1lXSBmcmFtZVZpZXddIDogc2VsZjsKICAgICBOU1Jlc3BvbmRlciAqZmlyc3RSZXNw
b25kZXIgPSBbd2luZG93IGZpcnN0UmVzcG9uZGVyXTsKLSAgICBpZiAoW2ZpcnN0UmVzcG9uZGVy
IGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dIAotICAgICAgICAmJiBbKE5TVmlldyAqKWZp
cnN0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOm1haW5GcmFtZVZpZXddKQorICAgIGlmIChbZmly
c3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0gJiYgWyhOU1ZpZXcgKilm
aXJzdFJlc3BvbmRlciBpc0Rlc2NlbmRhbnRPZjpzZWxmXSkgeworICAgICAgICBCT09MIGRvY3Vt
ZW50Vmlld0lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXI7CisgICAgICAgIGlmICghX3ByaXZhdGUt
PnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2ViVmlldyBwcm9i
YWJseSBuZWVkcyBhICJyZXNpZ25pbmcgZmlyc3QgcmVzcG9uZGVyIiBzdGF0ZSBqdXN0IGFzIFdl
YkhUTUxWaWV3IGhhcy4KKyAgICAgICAgICAgIGRvY3VtZW50Vmlld0lzUmVzaWduaW5nRmlyc3RS
ZXNwb25kZXIgPSBOTzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlkIDxXZWJEb2N1
bWVudFZpZXc+IGRvY3VtZW50VmlldyA9IFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRv
Y3VtZW50Vmlld107CisgICAgICAgICAgICBkb2N1bWVudFZpZXdJc1Jlc2lnbmluZ0ZpcnN0UmVz
cG9uZGVyID0gW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
ICYmIFsoV2ViSFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX2lzUmVzaWduaW5nRmlyc3RSZXNwb25k
ZXJdOworICAgICAgICB9CiAgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3Rp
dmUod2luZG93SXNLZXkgJiYgIWRvY3VtZW50Vmlld0lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXIp
OworICAgIH0KIAotICAgIEZyYW1lKiBmb2N1c2VkRnJhbWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRG
b2N1c2VkKGZyYW1lID09IGZvY3VzZWRGcmFtZSAmJiB3aW5kb3dPclNoZWV0SXNLZXkpOworICAg
IEJPT0wgd2luZG93T3JTaGVldElzS2V5ID0gd2luZG93SXNLZXkgfHwgW1t3aW5kb3cgYXR0YWNo
ZWRTaGVldF0gaXNLZXlXaW5kb3ddOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0Rm9jdXNl
ZChmcmFtZSA9PSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkg
JiYgd2luZG93T3JTaGVldElzS2V5KTsKIH0KIAogLSAodm9pZClfd2luZG93RGlkQmVjb21lS2V5
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIEFTU0VSVCghX3ByaXZhdGUt
PnVzZURvY3VtZW50Vmlld3MpOworICAgIEFTU0VSVCghX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZp
ZXdzKTsKICAgICBOU1dpbmRvdyAqa2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOwog
ICAgIGlmIChrZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8fCBrZXlXaW5kb3cgPT0gW1tzZWxm
IHdpbmRvd10gYXR0YWNoZWRTaGVldF0pCiAgICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGVdOwpAQCAtMjgyMCw3ICsyODEyLDcgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJW
aWV3SW5pdFRocmVhZFdvcmthcgogCiAtICh2b2lkKV93aW5kb3dEaWRSZXNpZ25LZXk6KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0gICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNlRG9j
dW1lbnRWaWV3cyk7CisgICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpOwog
ICAgIE5TV2luZG93ICpmb3JtZXJLZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07CiAg
ICAgaWYgKGZvcm1lcktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGZvcm1lcktleVdpbmRv
dyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkKICAgICAgICAgW3NlbGYgX3VwZGF0
ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07CkBAIC0yODI4LDcgKzI4MjAsNyBAQCBzdGF0aWMgYm9v
bCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAKIC0gKHZvaWQpX3dpbmRvd1dpbGxPcmRl
ck9uU2NyZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIEFTU0VSVCgh
X3ByaXZhdGUtPnVzZURvY3VtZW50Vmlld3MpOworICAgIEFTU0VSVCghX3ByaXZhdGUtPnVzZXNE
b2N1bWVudFZpZXdzKTsKICAgICBpZiAoIVtzZWxmIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVu
XSkKICAgICAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5OllFU107CiB9CkBAIC0yOTQ5LDIxICsy
OTQxLDIxIEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKIC0gKFdl
YkZyYW1lICopbWFpbkZyYW1lCiB7CiAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGluIGluaXRp
YWxpemF0aW9uLCBiZWZvcmUgX3ByaXZhdGUgaGFzIGJlZW4gc2V0IHVwICgzNDY1NjEzKQotICAg
IGlmICghX3ByaXZhdGUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgaWYgKCFfcHJpdmF0ZS0+
cGFnZSkKKyAgICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5wYWdlLT5tYWluRnJhbWUoKSk7CiB9
CiAKIC0gKFdlYkZyYW1lICopc2VsZWN0ZWRGcmFtZQogewotICAgIC8vIElmIHRoZSBmaXJzdCBy
ZXNwb25kZXIgaXMgYSB2aWV3IGluIG91ciB0cmVlLCB3ZSBnZXQgdGhlIGZyYW1lIGNvbnRhaW5p
bmcgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICAvLyBUaGlzIGlzIGZhc3RlciB0aGFuIHNlYXJj
aGluZyB0aGUgZnJhbWUgaGllcmFyY2h5LCBhbmQgd2lsbCBnaXZlIHVzIGEgcmVzdWx0IGV2ZW4g
aW4gdGhlIGNhc2UKLSAgICAvLyB3aGVyZSB0aGUgZm9jdXNlZCBmcmFtZSBkb2Vzbid0IGFjdHVh
bGx5IGNvbnRhaW4gYSBzZWxlY3Rpb24uCi0gICAgV2ViRnJhbWUgKmZvY3VzZWRGcmFtZSA9IFtz
ZWxmIF9mb2N1c2VkRnJhbWVdOwotICAgIGlmIChmb2N1c2VkRnJhbWUpCi0gICAgICAgIHJldHVy
biBmb2N1c2VkRnJhbWU7CisgICAgaWYgKF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykgewor
ICAgICAgICAvLyBJZiB0aGUgZmlyc3QgcmVzcG9uZGVyIGlzIGEgdmlldyBpbiBvdXIgdHJlZSwg
d2UgZ2V0IHRoZSBmcmFtZSBjb250YWluaW5nIHRoZSBmaXJzdCByZXNwb25kZXIuCisgICAgICAg
IC8vIFRoaXMgaXMgZmFzdGVyIHRoYW4gc2VhcmNoaW5nIHRoZSBmcmFtZSBoaWVyYXJjaHksIGFu
ZCB3aWxsIGdpdmUgdXMgYSByZXN1bHQgZXZlbiBpbiB0aGUgY2FzZQorICAgICAgICAvLyB3aGVy
ZSB0aGUgZm9jdXNlZCBmcmFtZSBkb2Vzbid0IGFjdHVhbGx5IGNvbnRhaW4gYSBzZWxlY3Rpb24u
CisgICAgICAgIFdlYkZyYW1lICpmb2N1c2VkRnJhbWUgPSBbc2VsZiBfZm9jdXNlZEZyYW1lXTsK
KyAgICAgICAgaWYgKGZvY3VzZWRGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBmb2N1c2VkRnJh
bWU7CisgICAgfQogICAgIAogICAgIC8vIElmIHRoZSBmaXJzdCByZXNwb25kZXIgaXMgb3V0c2lk
ZSBvZiBvdXIgdmlldyB0cmVlLCB3ZSBzZWFyY2ggZm9yIGEgZnJhbWUgY29udGFpbmluZyBhIHNl
bGVjdGlvbi4KICAgICAvLyBUaGVyZSBzaG91bGQgYmUgYXQgbW9zdCBvbmx5IG9uZSBvZiB0aGVz
ZS4KQEAgLTI5NzksNyArMjk3MSw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJl
YWRXb3JrYXIKICAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5wYWdlLT5iYWNrRm9yd2FyZExpc3Qo
KSk7CiB9CiAKLS0gKHZvaWQpc2V0TWFpbnRhaW5zQmFja0ZvcndhcmRMaXN0OiAoQk9PTClmbGFn
CistICh2b2lkKXNldE1haW50YWluc0JhY2tGb3J3YXJkTGlzdDooQk9PTClmbGFnCiB7CiAgICAg
aWYgKCFfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzAzMSw3ICszMDIzLDcg
QEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcgogICAgIAogICAgIC8v
IEZJWE1FOiBpdCB3b3VsZCBiZSBuaWNlIHRvIHJld29yayB0aGlzIGNvZGUgc28gdGhhdCBfcHJp
dmF0ZS0+em9vbU11bHRpcGxpZXIgZG9lc24ndCBleGlzdCBhbmQgY2FsbGVycwogICAgIC8vIGFs
bCBhY2Nlc3MgX3ByaXZhdGUtPnBhZ2UtPnNldHRpbmdzKCkuCi0gICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxm
IF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoY29yZUZyYW1lKQogICAgICAgICBjb3JlRnJhbWUt
PnNldFpvb21GYWN0b3IobSwgaXNUZXh0T25seSk7CiB9CkBAIC0zMTc4LDcgKzMxNzAsNyBAQCBz
dGF0aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAgICAgTlNTdHJpbmcgKm9s
ZEVuY29kaW5nID0gW3NlbGYgY3VzdG9tVGV4dEVuY29kaW5nTmFtZV07CiAgICAgaWYgKGVuY29k
aW5nID09IG9sZEVuY29kaW5nIHx8IFtlbmNvZGluZyBpc0VxdWFsVG9TdHJpbmc6b2xkRW5jb2Rp
bmddKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtz
ZWxmIG1haW5GcmFtZV0pKQorICAgIGlmIChGcmFtZSogbWFpbkZyYW1lID0gW3NlbGYgX21haW5D
b3JlRnJhbWVdKQogICAgICAgICBtYWluRnJhbWUtPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJp
ZGVFbmNvZGluZyhlbmNvZGluZyk7CiB9CiAKQEAgLTMyMTksNyArMzIxMSw3IEBAIHN0YXRpYyBi
b29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKIAogLSAoV2ViU2NyaXB0T2JqZWN0ICop
d2luZG93U2NyaXB0T2JqZWN0CiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
bWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1l
XTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4g
Y29yZUZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2NyaXB0T2JqZWN0KCk7CkBAIC0zMjM4LDE3ICsz
MjMwLDIxIEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKICAgICBp
ZiAoaG9zdFdpbmRvdyA9PSBfcHJpdmF0ZS0+aG9zdFdpbmRvdykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7Ci0gICAgZm9y
IChGcmFtZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkt
PnRyYXZlcnNlTmV4dChjb3JlRnJhbWUpKQotICAgICAgICBbW1traXQoZnJhbWUpIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XSB2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6aG9zdFdpbmRvd107Cisg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKKyAgICBpZiAoX3By
aXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Y29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoY29y
ZUZyYW1lKSkKKyAgICAgICAgICAgIFtbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZp
ZXddIHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzpob3N0V2luZG93XTsKKyAgICB9CiAgICAgaWYg
KF9wcml2YXRlLT5ob3N0V2luZG93ICYmIFtzZWxmIHdpbmRvd10gIT0gX3ByaXZhdGUtPmhvc3RX
aW5kb3cpCiAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVt
b3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVj
dDpfcHJpdmF0ZS0+aG9zdFdpbmRvd107CiAgICAgaWYgKGhvc3RXaW5kb3cpCiAgICAgICAgIFtb
TlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoX3dpbmRvd1dpbGxDbG9zZTopIG5hbWU6TlNXaW5kb3dXaWxsQ2xvc2VO
b3RpZmljYXRpb24gb2JqZWN0Omhvc3RXaW5kb3ddOwogICAgIFtfcHJpdmF0ZS0+aG9zdFdpbmRv
dyByZWxlYXNlXTsKICAgICBfcHJpdmF0ZS0+aG9zdFdpbmRvdyA9IFtob3N0V2luZG93IHJldGFp
bl07Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZy
YW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dChjb3JlRnJhbWUpKQotICAgICAgICBbW1traXQoZnJh
bWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSB2aWV3RGlkTW92ZVRvSG9zdFdpbmRvd107Cisg
ICAgaWYgKF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykgeworICAgICAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVy
c2VOZXh0KGNvcmVGcmFtZSkpCisgICAgICAgICAgICBbW1traXQoZnJhbWUpIGZyYW1lVmlld10g
ZG9jdW1lbnRWaWV3XSB2aWV3RGlkTW92ZVRvSG9zdFdpbmRvd107CisgICAgfQogfQogCiAtIChO
U1dpbmRvdyAqKWhvc3RXaW5kb3cKQEAgLTMyODQsNyArMzI4MCw3IEBAIHN0YXRpYyBib29sIG5l
ZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKICAgICByZXR1cm4gW3NlbGYgX2VsZW1lbnRBdFdp
bmRvd1BvaW50OltzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXV07CiB9CiAKLS8v
IFRoZSBmb2xsb3dpbmcgMiBpbnRlcm5hbCBOU1ZpZXcgbWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRo
ZSBkcmFnIGRlc3RpbmF0aW9uIGJ5IG1ha2Ugc2Nyb2xsaW5nIHdoaWxlIGRyYWdnaW5nIHdvcmsu
CisvLyBUaGUgZm9sbG93aW5nIDIgaW50ZXJuYWwgTlNWaWV3IG1ldGhvZHMgYXJlIGNhbGxlZCBv
biB0aGUgZHJhZyBkZXN0aW5hdGlvbiB0byBtYWtlIHNjcm9sbGluZyB3aGlsZSBkcmFnZ2luZyB3
b3JrLgogLy8gU2Nyb2xsaW5nIHdoaWxlIGRyYWdnaW5nIHdpbGwgb25seSB3b3JrIGlmIHRoZSBk
cmFnIGRlc3RpbmF0aW9uIGlzIGluIGEgc2Nyb2xsIHZpZXcuIFRoZSBXZWJWaWV3IGlzIHRoZSBk
cmFnIGRlc3RpbmF0aW9uLiAKIC8vIFdoZW4gZHJhZ2dpbmcgdG8gYSBXZWJWaWV3LCB0aGUgZG9j
dW1lbnQgc3VidmlldyBzaG91bGQgc2Nyb2xsLCBidXQgaXQgZG9lc24ndCBiZWNhdXNlIGl0IGlz
IG5vdCB0aGUgZHJhZyBkZXN0aW5hdGlvbi4gCiAvLyBGb3J3YXJkIHRoZXNlIGNhbGxzIHRvIHRo
ZSBkb2N1bWVudCBzdWJ2aWV3IHRvIG1ha2UgaXRzIHNjcm9sbCB2aWV3IHNjcm9sbC4KQEAgLTMz
NTMsODcgKzMzNDksOTggQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmth
cgogICAgIHJldHVybiBjb3JlKHNlbGYpLT5kcmFnQ29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygm
ZHJhZ0RhdGEpOwogfQogCi0tIChOU1ZpZXcgKilfaGl0VGVzdDooTlNQb2ludCAqKWFQb2ludCBk
cmFnVHlwZXM6KE5TU2V0ICopdHlwZXMKKy0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50ICop
cG9pbnQgZHJhZ1R5cGVzOihOU1NldCAqKXR5cGVzCiB7Ci0gICAgTlNWaWV3ICpoaXRWaWV3ID0g
W3N1cGVyIF9oaXRUZXN0OmFQb2ludCBkcmFnVHlwZXM6dHlwZXNdOwotICAgIGlmICghaGl0Vmll
dyAmJiBbW3NlbGYgc3VwZXJ2aWV3XSBtb3VzZToqYVBvaW50IGluUmVjdDpbc2VsZiBmcmFtZV1d
KSB7CisgICAgTlNWaWV3ICpoaXRWaWV3ID0gW3N1cGVyIF9oaXRUZXN0OnBvaW50IGRyYWdUeXBl
czp0eXBlc107CisgICAgaWYgKCFoaXRWaWV3ICYmIFtbc2VsZiBzdXBlcnZpZXddIG1vdXNlOipw
b2ludCBpblJlY3Q6W3NlbGYgZnJhbWVdXSkKICAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgcmV0dXJuIGhpdFZpZXc7Ci0gICAgfQorICAgIHJldHVybiBoaXRWaWV3
OwogfQogCiAtIChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgogewotICAgIHJldHVybiBbW1tz
ZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBhY2NlcHRzRmlyc3RSZXNwb25kZXJdOworICAgIGlm
IChfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpCisgICAgICAgIHJldHVybiBbW1tzZWxmIG1h
aW5GcmFtZV0gZnJhbWVWaWV3XSBhY2NlcHRzRmlyc3RSZXNwb25kZXJdOworCisgICAgLy8gRklY
TUUgKFZpZXdsZXNzKTogTmVlZCBtb3JlIGNvZGUgZnJvbSBXZWJIVE1MVmlldyBoZXJlLgorICAg
IHJldHVybiBZRVM7CiB9CiAKIC0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKIHsKLSAgICBp
ZiAoX3ByaXZhdGUtPmJlY29taW5nRmlyc3RSZXNwb25kZXIpIHsKLSAgICAgICAgLy8gRml4IGZv
ciB1bnJlcHJvIGluZmluaXRlIHJlY3Vyc2lvbiByZXBvcnRlZCBpbiByYWRhciA0NDQ4MTgxLiBJ
ZiB3ZSBoaXQgdGhpcyBhc3NlcnQgb24KLSAgICAgICAgLy8gYSBkZWJ1ZyBidWlsZCwgd2Ugc2hv
dWxkIGZpZ3VyZSBvdXQgd2hhdCBjYXVzZXMgdGhlIHByb2JsZW0gYW5kIGRvIGEgYmV0dGVyIGZp
eC4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBOTzsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gVGhpcyB3b3JrcyB0b2dldGhlciB3aXRoIHNldE5leHRLZXlWaWV3
IHRvIHNwbGljZSB0aGUgV2ViVmlldyBpbnRvCi0gICAgLy8gdGhlIGtleSBsb29wIHNpbWlsYXIg
dG8gdGhlIHdheSBOU1Njcm9sbFZpZXcgZG9lcyB0aGlzLiBOb3RlIHRoYXQKLSAgICAvLyBXZWJG
cmFtZVZpZXcgaGFzIHZlcnkgc2ltaWxhciBjb2RlLgotICAgIE5TV2luZG93ICp3aW5kb3cgPSBb
c2VsZiB3aW5kb3ddOwotICAgIFdlYkZyYW1lVmlldyAqbWFpbkZyYW1lVmlldyA9IFtbc2VsZiBt
YWluRnJhbWVdIGZyYW1lVmlld107CisgICAgaWYgKF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3
cykgeworICAgICAgICBpZiAoX3ByaXZhdGUtPmJlY29taW5nRmlyc3RSZXNwb25kZXIpIHsKKyAg
ICAgICAgICAgIC8vIEZpeCBmb3IgdW5yZXBybyBpbmZpbml0ZSByZWN1cnNpb24gcmVwb3J0ZWQg
aW4gUmFkYXIgNDQ0ODE4MS4gSWYgd2UgaGl0IHRoaXMgYXNzZXJ0IG9uCisgICAgICAgICAgICAv
LyBhIGRlYnVnIGJ1aWxkLCB3ZSBzaG91bGQgZmlndXJlIG91dCB3aGF0IGNhdXNlcyB0aGUgcHJv
YmxlbSBhbmQgZG8gYSBiZXR0ZXIgZml4LgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBzZXROZXh0S2V5VmlldyB0byBzcGxpY2UgdGhl
IFdlYlZpZXcgaW50bworICAgICAgICAvLyB0aGUga2V5IGxvb3Agc2ltaWxhciB0byB0aGUgd2F5
IE5TU2Nyb2xsVmlldyBkb2VzIHRoaXMuIE5vdGUgdGhhdAorICAgICAgICAvLyBXZWJGcmFtZVZp
ZXcgaGFzIHZlcnkgc2ltaWxhciBjb2RlLgorICAgICAgICBOU1dpbmRvdyAqd2luZG93ID0gW3Nl
bGYgd2luZG93XTsKKyAgICAgICAgV2ViRnJhbWVWaWV3ICptYWluRnJhbWVWaWV3ID0gW1tzZWxm
IG1haW5GcmFtZV0gZnJhbWVWaWV3XTsKKworICAgICAgICBOU1Jlc3BvbmRlciAqcHJldmlvdXNG
aXJzdFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIF9vbGRGaXJzdFJlc3BvbmRlckJlZm9yZUJl
Y29taW5nXTsKKyAgICAgICAgQk9PTCBmcm9tT3V0c2lkZSA9ICFbcHJldmlvdXNGaXJzdFJlc3Bv
bmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSB8fCAoIVsoTlNWaWV3ICopcHJldmlv
dXNGaXJzdFJlc3BvbmRlciBpc0Rlc2NlbmRhbnRPZjpzZWxmXSAmJiBwcmV2aW91c0ZpcnN0UmVz
cG9uZGVyICE9IHNlbGYpOworCisgICAgICAgIGlmIChbd2luZG93IGtleVZpZXdTZWxlY3Rpb25E
aXJlY3Rpb25dID09IE5TU2VsZWN0aW5nUHJldmlvdXMpIHsKKyAgICAgICAgICAgIE5TVmlldyAq
cHJldmlvdXNWYWxpZEtleVZpZXcgPSBbc2VsZiBwcmV2aW91c1ZhbGlkS2V5Vmlld107CisgICAg
ICAgICAgICBpZiAocHJldmlvdXNWYWxpZEtleVZpZXcgIT0gc2VsZiAmJiBwcmV2aW91c1ZhbGlk
S2V5VmlldyAhPSBtYWluRnJhbWVWaWV3KSB7CisgICAgICAgICAgICAgICAgX3ByaXZhdGUtPmJl
Y29taW5nRmlyc3RSZXNwb25kZXIgPSBZRVM7CisgICAgICAgICAgICAgICAgX3ByaXZhdGUtPmJl
Y29taW5nRmlyc3RSZXNwb25kZXJGcm9tT3V0c2lkZSA9IGZyb21PdXRzaWRlOworICAgICAgICAg
ICAgICAgIFt3aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnByZXZpb3VzVmFsaWRLZXlWaWV3XTsK
KyAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRz
aWRlID0gTk87CisgICAgICAgICAgICAgICAgX3ByaXZhdGUtPmJlY29taW5nRmlyc3RSZXNwb25k
ZXIgPSBOTzsKKyAgICAgICAgICAgICAgICByZXR1cm4gWUVTOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9CiAKLSAgICBOU1Jlc3BvbmRlciAqcHJldmlv
dXNGaXJzdFJlc3BvbmRlciA9IFtbc2VsZiB3aW5kb3ddIF9vbGRGaXJzdFJlc3BvbmRlckJlZm9y
ZUJlY29taW5nXTsKLSAgICBCT09MIGZyb21PdXRzaWRlID0gIVtwcmV2aW91c0ZpcnN0UmVzcG9u
ZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dIHx8ICghWyhOU1ZpZXcgKilwcmV2aW91
c0ZpcnN0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOnNlbGZdICYmIHByZXZpb3VzRmlyc3RSZXNw
b25kZXIgIT0gc2VsZik7Ci0gICAgCi0gICAgaWYgKFt3aW5kb3cga2V5Vmlld1NlbGVjdGlvbkRp
cmVjdGlvbl0gPT0gTlNTZWxlY3RpbmdQcmV2aW91cykgewotICAgICAgICBOU1ZpZXcgKnByZXZp
b3VzVmFsaWRLZXlWaWV3ID0gW3NlbGYgcHJldmlvdXNWYWxpZEtleVZpZXddOwotICAgICAgICBp
ZiAoKHByZXZpb3VzVmFsaWRLZXlWaWV3ICE9IHNlbGYpICYmIChwcmV2aW91c1ZhbGlkS2V5Vmll
dyAhPSBtYWluRnJhbWVWaWV3KSkgeworICAgICAgICBpZiAoW21haW5GcmFtZVZpZXcgYWNjZXB0
c0ZpcnN0UmVzcG9uZGVyXSkgewogICAgICAgICAgICAgX3ByaXZhdGUtPmJlY29taW5nRmlyc3RS
ZXNwb25kZXIgPSBZRVM7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3Bv
bmRlckZyb21PdXRzaWRlID0gZnJvbU91dHNpZGU7Ci0gICAgICAgICAgICBbd2luZG93IG1ha2VG
aXJzdFJlc3BvbmRlcjpwcmV2aW91c1ZhbGlkS2V5Vmlld107CisgICAgICAgICAgICBbd2luZG93
IG1ha2VGaXJzdFJlc3BvbmRlcjptYWluRnJhbWVWaWV3XTsKICAgICAgICAgICAgIF9wcml2YXRl
LT5iZWNvbWluZ0ZpcnN0UmVzcG9uZGVyRnJvbU91dHNpZGUgPSBOTzsKICAgICAgICAgICAgIF9w
cml2YXRlLT5iZWNvbWluZ0ZpcnN0UmVzcG9uZGVyID0gTk87CiAgICAgICAgICAgICByZXR1cm4g
WUVTOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICB9
CisgICAgICAgIH0gCisKKyAgICAgICAgcmV0dXJuIE5POwogICAgIH0KLSAgICAKLSAgICBpZiAo
W21haW5GcmFtZVZpZXcgYWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSkgewotICAgICAgICBfcHJpdmF0
ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKLSAgICAgICAgX3ByaXZhdGUtPmJlY29t
aW5nRmlyc3RSZXNwb25kZXJGcm9tT3V0c2lkZSA9IGZyb21PdXRzaWRlOwotICAgICAgICBbd2lu
ZG93IG1ha2VGaXJzdFJlc3BvbmRlcjptYWluRnJhbWVWaWV3XTsKLSAgICAgICAgX3ByaXZhdGUt
PmJlY29taW5nRmlyc3RSZXNwb25kZXJGcm9tT3V0c2lkZSA9IE5POwotICAgICAgICBfcHJpdmF0
ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlciA9IE5POwotICAgICAgICByZXR1cm4gWUVTOwotICAg
IH0gCi0gICAgCi0gICAgcmV0dXJuIE5POworCisgICAgLy8gRklYTUUgKFZpZXdsZXNzKTogTmVl
ZCBtb3JlIGNvZGUgZnJvbSBXZWJIVE1MVmlldyBoZXJlLgorICAgIHJldHVybiBZRVM7CiB9CiAK
IC0gKE5TVmlldyAqKV93ZWJjb3JlX2VmZmVjdGl2ZUZpcnN0UmVzcG9uZGVyCiB7Ci0gICAgV2Vi
RnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddOwotICAg
IHJldHVybiBmcmFtZVZpZXcgPyBbZnJhbWVWaWV3IF93ZWJjb3JlX2VmZmVjdGl2ZUZpcnN0UmVz
cG9uZGVyXSA6IFtzdXBlciBfd2ViY29yZV9lZmZlY3RpdmVGaXJzdFJlc3BvbmRlcl07CisgICAg
aWYgKF9wcml2YXRlICYmIF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykgeworICAgICAgICBp
ZiAoV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXdd
KQorICAgICAgICAgICAgcmV0dXJuIFtmcmFtZVZpZXcgX3dlYmNvcmVfZWZmZWN0aXZlRmlyc3RS
ZXNwb25kZXJdOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIF93ZWJjb3JlX2VmZmVjdGl2ZUZp
cnN0UmVzcG9uZGVyXTsKIH0KIAotLSAodm9pZClzZXROZXh0S2V5VmlldzooTlNWaWV3ICopYVZp
ZXcKKy0gKHZvaWQpc2V0TmV4dEtleVZpZXc6KE5TVmlldyAqKXZpZXcKIHsKLSAgICAvLyBUaGlz
IHdvcmtzIHRvZ2V0aGVyIHdpdGggYmVjb21lRmlyc3RSZXNwb25kZXIgdG8gc3BsaWNlIHRoZSBX
ZWJWaWV3IGludG8KLSAgICAvLyB0aGUga2V5IGxvb3Agc2ltaWxhciB0byB0aGUgd2F5IE5TU2Ny
b2xsVmlldyBkb2VzIHRoaXMuIE5vdGUgdGhhdAotICAgIC8vIFdlYkZyYW1lVmlldyBoYXMgdmVy
eSBzaW1pbGFyIGNvZGUuCi0gICAgV2ViRnJhbWVWaWV3ICptYWluRnJhbWVWaWV3ID0gW1tzZWxm
IG1haW5GcmFtZV0gZnJhbWVWaWV3XTsKLSAgICBpZiAobWFpbkZyYW1lVmlldyAhPSBuaWwpIHsK
LSAgICAgICAgW21haW5GcmFtZVZpZXcgc2V0TmV4dEtleVZpZXc6YVZpZXddOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIFtzdXBlciBzZXROZXh0S2V5VmlldzphVmlld107CisgICAgaWYgKF9wcml2
YXRlICYmIF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykgeworICAgICAgICAvLyBUaGlzIHdv
cmtzIHRvZ2V0aGVyIHdpdGggYmVjb21lRmlyc3RSZXNwb25kZXIgdG8gc3BsaWNlIHRoZSBXZWJW
aWV3IGludG8KKyAgICAgICAgLy8gdGhlIGtleSBsb29wIHNpbWlsYXIgdG8gdGhlIHdheSBOU1Nj
cm9sbFZpZXcgZG9lcyB0aGlzLiBOb3RlIHRoYXQKKyAgICAgICAgLy8gV2ViRnJhbWVWaWV3IGhh
cyBzaW1pbGFyIGNvZGUuCisgICAgICAgIGlmIChXZWJGcmFtZVZpZXcgKm1haW5GcmFtZVZpZXcg
PSBbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddKSB7CisgICAgICAgICAgICBbbWFpbkZyYW1l
VmlldyBzZXROZXh0S2V5Vmlldzp2aWV3XTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogICAgIH0KKworICAgIFtzdXBlciBzZXROZXh0S2V5Vmlldzp2aWV3XTsKIH0KIAotc3RhdGlj
IFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZSAqY3VyciwgQk9PTCBmb3J3YXJkLCBC
T09MIHdyYXBGbGFnKQorc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZSAq
ZnJhbWUsIEJPT0wgZm9yd2FyZCwgQk9PTCB3cmFwRmxhZykKIHsKLSAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShjdXJyKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7CiAg
ICAgcmV0dXJuIGtpdChmb3J3YXJkCiAgICAgICAgID8gY29yZUZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dFdpdGhXcmFwKHdyYXBGbGFnKQogICAgICAgICA6IGNvcmVGcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZVByZXZpb3VzV2l0aFdyYXAod3JhcEZsYWcpKTsKQEAgLTM0NzQsNyArMzQ4MSw2IEBA
IHN0YXRpYyBXZWJGcmFtZSAqaW5jcmVtZW50RnJhbWUoV2ViRnJhbWUKIHsKICAgICBpZiAoIV9w
cml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm4gMC4wOwotCiAgICAgcmV0dXJuIF9wcml2YXRl
LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogfQogCkBAIC0zNjQyLDYg
KzM2NDgsODQgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogICAg
IHJldHVybiBbcHJldmlvdXNWaWV3IHByZXZpb3VzVmFsaWRLZXlWaWV3XTsKIH0KIAorLSAodm9p
ZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIEZJWE1FIChWaWV3bGVzcyk6
IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBXZWJIVE1MVmlldywgd2hpY2ggbmVl
ZHMgdG8KKyAgICAvLyBkbyB0aGUgc2FtZSB3b3JrIGluIHRoZSB1c2VzRG9jdW1lbnRWaWV3cyBj
YXNlLiBXZSBkb24ndCB3YW50IHRvIG1haW50YWluIHR3bworICAgIC8vIGR1cGxpY2F0ZSBjb3Bp
ZXMgb2YgdGhpcyBtZXRob2QuCisKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdz
KSB7CisgICAgICAgIFtzdXBlciBtb3VzZURvd246ZXZlbnRdOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRo
aXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hp
bmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0
aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0
IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAg
ICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgUmV0YWluUHRyPFdlYlZpZXc+
IHByb3RlY3RvciA9IHNlbGY7CisgICAgaWYgKFtbc2VsZiBpbnB1dENvbnRleHRdIHdhbnRzVG9I
YW5kbGVNb3VzZUV2ZW50c10gJiYgW1tzZWxmIGlucHV0Q29udGV4dF0gaGFuZGxlTW91c2VFdmVu
dDpldmVudF0pCisgICAgICAgIHJldHVybjsKKworICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNl
RG93bkV2ZW50ID0gWUVTOworCisgICAgLy8gUmVjb3JkIHRoZSBtb3VzZSBkb3duIHBvc2l0aW9u
IHNvIHdlIGNhbiBkZXRlcm1pbmUgZHJhZyBoeXN0ZXJlc2lzLgorICAgIFtzZWxmIF9zZXRNb3Vz
ZURvd25FdmVudDpldmVudF07CisKKyAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFu
YWdlciA9IFtOU0lucHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKKyAgICBpZiAoW2N1
cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElu
cHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgZ290byBkb25lOwor
CisgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6
Tk8gbW92ZUxlZnQ6Tk9dOworCisgICAgLy8gSWYgdGhlIHdlYiBwYWdlIGhhbmRsZXMgdGhlIGNv
bnRleHQgbWVudSBldmVudCBhbmQgbWVudUZvckV2ZW50OiByZXR1cm5zIG5pbCwgd2UnbGwgZ2V0
IGNvbnRyb2wgY2xpY2sgZXZlbnRzIGhlcmUuCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXNz
IHRoZW0gYWxvbmcgdG8gS0hUTUwgYSBzZWNvbmQgdGltZS4KKyAgICBpZiAoIShbZXZlbnQgbW9k
aWZpZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNrKSkgeworICAgICAgICBfcHJpdmF0ZS0+aWdu
b3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBOTzsKKworICAgICAgICAvLyBEb24ndCBkbyBhbnkg
bW91c2VvdmVyIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3duLgorICAgICAgICBbc2VsZiBfY2FuY2Vs
VXBkYXRlTW91c2VvdmVyVGltZXJdOworCisgICAgICAgIC8vIExldCBXZWJDb3JlIGdldCBhIGNo
YW5jZSB0byBkZWFsIHdpdGggdGhlIGV2ZW50LiBUaGlzIHdpbGwgY2FsbCBiYWNrIHRvIHVzCisg
ICAgICAgIC8vIHRvIHN0YXJ0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlmIGFwcHJvcHJpYXRlLgor
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdKQorICAgICAg
ICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZURvd24oZXZlbnQpOworICAgIH0KKwor
ZG9uZToKKyAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POworfQorCist
ICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIEZJWE1FIChWaWV3bGVz
cyk6IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBXZWJIVE1MVmlldywgd2hpY2gg
bmVlZHMgdG8KKyAgICAvLyBkbyB0aGUgc2FtZSB3b3JrIGluIHRoZSB1c2VzRG9jdW1lbnRWaWV3
cyBjYXNlLiBXZSBkb24ndCB3YW50IHRvIG1haW50YWluIHR3bworICAgIC8vIGR1cGxpY2F0ZSBj
b3BpZXMgb2YgdGhpcyBtZXRob2QuCisKKyAgICBBU1NFUlQoIV9wcml2YXRlLT51c2VzRG9jdW1l
bnRWaWV3cyk7CisKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0
aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNo
aW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQg
dGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhh
dCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisg
ICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFtzZWxmIF9zZXRNb3VzZURv
d25FdmVudDpuaWxdOworCisgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIg
PSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CisgICAgaWYgKFtjdXJyZW50
SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1h
bmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybjsKKworICAgIFtz
ZWxmIHJldGFpbl07CisKKyAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CisgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKKyAgICAgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5tb3VzZVVwKGV2ZW50KTsKKyAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVy
V2l0aEZha2VFdmVudF07CisKKyAgICBbc2VsZiByZWxlYXNlXTsKK30KKwogQGVuZAogCiBAaW1w
bGVtZW50YXRpb24gV2ViVmlldyAoV2ViSUJBY3Rpb25zKQpAQCAtMzkzNiwxNSArNDAyMCwyMSBA
QCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lCiAgICAgICAgIHJldHVy
bjsKICAgICAKICAgICBfcHJpdmF0ZS0+aG92ZXJGZWVkYmFja1N1c3BlbmRlZCA9IG5ld1ZhbHVl
OwotICAgIGlkIDxXZWJEb2N1bWVudFZpZXc+IGRvY3VtZW50VmlldyA9IFtbW3NlbGYgbWFpbkZy
YW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgLy8gRklYTUU6IGluIGEgcGVyZmVj
dCB3b3JsZCB3ZSdkIGRvIHRoaXMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IHdvcmtlZCB3aXRoIGFu
eSBkb2N1bWVudCB2aWV3LAotICAgIC8vIHN1Y2ggYXMgYnkgY2FsbGluZyBhIHByb3RvY29sIG1l
dGhvZCBvciB1c2luZyByZXNwb25kc1RvU2VsZWN0b3Igb3Igc2VuZGluZyBhIG5vdGlmaWNhdGlv
bi4KLSAgICAvLyBCdXQgdW50aWwgdGhlcmUgaXMgYW55IG5lZWQgZm9yIHRoZXNlIG1vcmUgZ2Vu
ZXJhbCBzb2x1dGlvbnMsIHdlJ2xsIGp1c3QgaGFyZHdpcmUgaXQgdG8gd29yawotICAgIC8vIHdp
dGggV2ViSFRNTFZpZXcuCi0gICAgLy8gTm90ZSB0aGF0IF9ob3ZlckZlZWRiYWNrU3VzcGVuZGVk
Q2hhbmdlZCBuZWVkcyB0byBiZSBjYWxsZWQgb25seSBvbiB0aGUgbWFpbiBXZWJIVE1MVmlldywg
bm90Ci0gICAgLy8gb24gZWFjaCBzdWJmcmFtZSBzZXBhcmF0ZWx5LgotICAgIGlmIChbZG9jdW1l
bnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCi0gICAgICAgIFsoV2Vi
SFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX2hvdmVyRmVlZGJhY2tTdXNwZW5kZWRDaGFuZ2VkXTsK
KworICAgIGlmIChfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgaWQgPFdl
YkRvY3VtZW50Vmlldz4gZG9jdW1lbnRWaWV3ID0gW1tbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgLy8gRklYTUU6IGluIGEgcGVyZmVjdCB3b3JsZCB3
ZSdkIGRvIHRoaXMgaW4gYSBnZW5lcmFsIHdheSB0aGF0IHdvcmtlZCB3aXRoIGFueSBkb2N1bWVu
dCB2aWV3LAorICAgICAgICAvLyBzdWNoIGFzIGJ5IGNhbGxpbmcgYSBwcm90b2NvbCBtZXRob2Qg
b3IgdXNpbmcgcmVzcG9uZHNUb1NlbGVjdG9yIG9yIHNlbmRpbmcgYSBub3RpZmljYXRpb24uCisg
ICAgICAgIC8vIEJ1dCB1bnRpbCB0aGVyZSBpcyBhbnkgbmVlZCBmb3IgdGhlc2UgbW9yZSBnZW5l
cmFsIHNvbHV0aW9ucywgd2UnbGwganVzdCBoYXJkd2lyZSBpdCB0byB3b3JrCisgICAgICAgIC8v
IHdpdGggV2ViSFRNTFZpZXcuCisgICAgICAgIC8vIE5vdGUgdGhhdCBfaG92ZXJGZWVkYmFja1N1
c3BlbmRlZENoYW5nZWQgbmVlZHMgdG8gYmUgY2FsbGVkIG9ubHkgb24gdGhlIG1haW4gV2ViSFRN
TFZpZXcsIG5vdAorICAgICAgICAvLyBvbiBlYWNoIHN1YmZyYW1lIHNlcGFyYXRlbHkuCisgICAg
ICAgIGlmIChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0p
CisgICAgICAgICAgICBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9ob3ZlckZlZWRiYWNr
U3VzcGVuZGVkQ2hhbmdlZF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbc2VsZiBf
dXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07CiB9CiAKIC0gKEJPT0wpaXNIb3ZlckZlZWRi
YWNrU3VzcGVuZGVkCkBAIC00MDAyLDcgKzQwOTIsNyBAQCBzdGF0aWMgV2ViRnJhbWUgKmluY3Jl
bWVudEZyYW1lKFdlYkZyYW1lCiAKIC0gKEJPT0wpc2hvdWxkQ2xvc2UKIHsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm4gWUVTOwogICAgIHJldHVybiBjb3JlRnJhbWUtPnNob3VsZENsb3NlKCk7CkBAIC00MDY1
LDcgKzQxNTUsNyBAQCBzdGF0aWMgTlNBcHBsZUV2ZW50RGVzY3JpcHRvciogYWVEZXNjRnJvCiAK
IC0gKE5TQXBwbGVFdmVudERlc2NyaXB0b3IgKilhZURlc2NCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
RnJvbVN0cmluZzooTlNTdHJpbmcgKilzY3JpcHQKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21h
aW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIGlmICghY29yZUZyYW1lLT5kb2N1bWVudCgpKQpAQCAtNDQ0MCw3ICs0NTMwLDcgQEAgc3Rh
dGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0ZybwogICAgICAgICBfcHJpdmF0ZS0+
ZWRpdGFibGUgPSBmbGFnOwogICAgICAgICBpZiAoIV9wcml2YXRlLT50YWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHNDaGFuZ2VkICYmIF9wcml2YXRlLT5wYWdlKQogICAgICAgICAgICAgX3ByaXZh
dGUtPnBhZ2UtPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyghZmxhZyk7Ci0gICAgICAg
IEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOworICAgICAgICBGcmFt
ZSogbWFpbkZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgICAgICBpZiAobWFpbkZy
YW1lKSB7CiAgICAgICAgICAgICBpZiAoZmxhZykgewogICAgICAgICAgICAgICAgIG1haW5GcmFt
ZS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CkBAIC01MTE3LDYgKzUyMDcsNyBA
QCBzdGF0aWMgV2ViRnJhbWVWaWV3ICpjb250YWluaW5nRnJhbWVWaWV3CiB7CiAgICAgaWYgKF9w
cml2YXRlLT5jbG9zZWQpCiAgICAgICAgIHJldHVybiBuaWw7CisgICAgQVNTRVJUKF9wcml2YXRl
LT51c2VzRG9jdW1lbnRWaWV3cyk7CiAgICAgTlNWaWV3ICp2aWV3ID0gW3NlbGYgaGl0VGVzdDpb
W3NlbGYgc3VwZXJ2aWV3XSBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXV07CiAgICAg
aWYgKCFbdmlldyBpc0Rlc2NlbmRhbnRPZjpbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddXSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTUzNjIsNiArNTQ1MywxODQgQEAgc3RhdGljIFdlYkZy
YW1lVmlldyAqY29udGFpbmluZ0ZyYW1lVmlldwogICAgIF9wcml2YXRlLT5pbnNlcnRpb25QYXN0
ZWJvYXJkID0gcGFzdGVib2FyZDsKIH0KIAorLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5T
RXZlbnQgKilldmVudAoreworICAgIEFTU0VSVCghZXZlbnQgfHwgW2V2ZW50IHR5cGVdID09IE5T
TGVmdE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNSaWdodE1vdXNlRG93biB8fCBbZXZl
bnQgdHlwZV0gPT0gTlNPdGhlck1vdXNlRG93bik7CisKKyAgICBpZiAoZXZlbnQgPT0gX3ByaXZh
dGUtPm1vdXNlRG93bkV2ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBbZXZlbnQgcmV0YWlu
XTsKKyAgICBbX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRl
LT5tb3VzZURvd25FdmVudCA9IGV2ZW50OworfQorCistICh2b2lkKV9jYW5jZWxVcGRhdGVNb3Vz
ZW92ZXJUaW1lcgoreworICAgIGlmIChfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpIHsK
KyAgICAgICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2YXRlLT51cGRhdGVNb3VzZW92
ZXJUaW1lcik7CisgICAgICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGlt
ZXIpOworICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIgPSBOVUxMOworICAg
IH0KK30KKworLSAodm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcgoreworICAgIE5TVGltZXIgKnRp
bWVyID0gX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lcjsKKyAgICBfcHJpdmF0ZS0+YXV0b3Njcm9s
bFRpbWVyID0gbmlsOworICAgIFtfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCByZWxl
YXNlXTsKKyAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9IG5pbDsKKyAgICBb
dGltZXIgaW52YWxpZGF0ZV07CisgICAgW3RpbWVyIHJlbGVhc2VdOworfQorCisrICh2b2lkKV91
cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIFdlYlZpZXcg
Km9sZFZpZXcgPSBsYXN0TW91c2VvdmVyVmlldzsKKworICAgIGxhc3RNb3VzZW92ZXJWaWV3ID0g
bmlsOworCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFtbZXZlbnQgd2luZG93XSBjb250ZW50
Vmlld107CisgICAgTlNQb2ludCBsb2NhdGlvbkZvckhpdFRlc3QgPSBbW2NvbnRlbnRWaWV3IHN1
cGVydmlld10gY29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpu
aWxdOworICAgIGZvciAoTlNWaWV3ICpoaXRWaWV3ID0gW2NvbnRlbnRWaWV3IGhpdFRlc3Q6bG9j
YXRpb25Gb3JIaXRUZXN0XTsgaGl0VmlldzsgaGl0VmlldyA9IFtoaXRWaWV3IHN1cGVydmlld10p
IHsKKyAgICAgICAgaWYgKFtoaXRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYlZpZXcgY2xhc3NdXSkg
eworICAgICAgICAgICAgbGFzdE1vdXNlb3ZlclZpZXcgPSBzdGF0aWNfY2FzdDxXZWJWaWV3ICo+
KGhpdFZpZXcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobGFzdE1vdXNlb3ZlclZpZXcgJiYgbGFzdE1vdXNlb3ZlclZpZXctPl9wcml2YXRlLT5ob3Zl
ckZlZWRiYWNrU3VzcGVuZGVkKQorICAgICAgICBsYXN0TW91c2VvdmVyVmlldyA9IG5pbDsKKwor
ICAgIGlmIChsYXN0TW91c2VvdmVyVmlldyAhPSBvbGRWaWV3KSB7CisgICAgICAgIGlmIChGcmFt
ZSogb2xkQ29yZUZyYW1lID0gW29sZFZpZXcgX21haW5Db3JlRnJhbWVdKSB7CisgICAgICAgICAg
ICBOU0V2ZW50ICpvbGRWaWV3RXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNN
b3VzZU1vdmVkCisgICAgICAgICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoLTEsIC0xKQor
ICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlm
aWVyRmxhZ3NdCisgICAgICAgICAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFs
U2luY2VSZWZlcmVuY2VEYXRlXQorICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW29sZFZp
ZXcgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgICAgICAgICAgY29udGV4dDpbW05TQXBw
IGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAgICAgICAgICAgICBldmVudE51bWJlcjowIGNs
aWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKKyAgICAgICAgICAgIG9sZENvcmVGcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPm1vdXNlTW92ZWQob2xkVmlld0V2ZW50KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghbGFzdE1vdXNlb3ZlclZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbbGFzdE1vdXNlb3ZlclZpZXcgbWFpbkZyYW1lXSkpCisg
ICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOworfQor
CistICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50Cit7CisgICAgW3NlbGYgX2Nh
bmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKKyAgICAKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQg
PSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkCisgICAgICAgIGxvY2F0
aW9uOltbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2Nh
dGlvbl1dCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlm
aWVyRmxhZ3NdCisgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVm
ZXJlbmNlRGF0ZV0KKyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051
bWJlcl0KKyAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAg
ICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgCisgICAg
W1tzZWxmIGNsYXNzXSBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OmZha2VFdmVudF07Cit9CisK
Ky0gKHZvaWQpX3NldFRvb2xUaXA6KE5TU3RyaW5nICopdG9vbFRpcAoreworICAgIGlmIChfcHJp
dmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgaWQgZG9jdW1lbnRWaWV3ID0gW1tb
c2VsZiBzZWxlY3RlZEZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgICAgIGlm
IChbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAg
ICAgICAgICBbZG9jdW1lbnRWaWV3IF9zZXRUb29sVGlwOnRvb2xUaXBdOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRklYTUUgKFZpZXdsZXNzKTogQ29kZSB0byBoYW5kbGUgdG9v
bHRpcHMgbmVlZHMgdG8gbW92ZSBpbnRvIFdlYlZpZXcuCit9CisKKy0gKHZvaWQpX3NlbGVjdGlv
bkNoYW5nZWQKK3sKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAg
ICAgIGlkIGRvY3VtZW50VmlldyA9IFtbW3NlbGYgc2VsZWN0ZWRGcmFtZV0gZnJhbWVWaWV3XSBk
b2N1bWVudFZpZXddOworICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltX
ZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAgICAgICAgW2RvY3VtZW50VmlldyBfc2VsZWN0aW9u
Q2hhbmdlZF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRSAoVmlld2xl
c3MpOiBXZSdsbCBuZWVkIGNvZGUgaGVyZS4KK30KKworLSAoRnJhbWUqKV9tYWluQ29yZUZyYW1l
Cit7CisgICAgcmV0dXJuIChfcHJpdmF0ZSAmJiBfcHJpdmF0ZS0+cGFnZSkgPyBfcHJpdmF0ZS0+
cGFnZS0+bWFpbkZyYW1lKCkgOiAwOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCistIChCT09MKV9uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uCit7Cisg
ICAgcmV0dXJuIF9wcml2YXRlLT5uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uOwor
fQorCistICh2b2lkKV9zZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uOihCT09M
KW5lZWRzU3luY2hyb25pemF0aW9uCit7CisgICAgX3ByaXZhdGUtPm5lZWRzT25lU2hvdERyYXdp
bmdTeW5jaHJvbml6YXRpb24gPSBuZWVkc1N5bmNocm9uaXphdGlvbjsKK30KKworLSAodm9pZClf
c3RhcnRlZEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTooV2ViRnJhbWUqKXdlYkZyYW1l
Cit7CisgICAgQk9PTCBlbnRlcmluZyA9IF9wcml2YXRlLT5hY2NlbGVyYXRlZEZyYW1lc0NvdW50
ID09IDA7CisgICAgaWYgKGVudGVyaW5nKQorICAgICAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVG
b3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nUHJvcGVydHldOworICAgICsrX3ByaXZh
dGUtPmFjY2VsZXJhdGVkRnJhbWVzQ291bnQ7CisgICAgaWYgKGVudGVyaW5nKQorICAgICAgICBb
c2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdQcm9w
ZXJ0eV07Cit9CisKKy0gKHZvaWQpX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJh
bWU6KFdlYkZyYW1lKil3ZWJGcmFtZQoreworICAgIEJPT0wgbGVhdmluZyA9IF9wcml2YXRlLT5h
Y2NlbGVyYXRlZEZyYW1lc0NvdW50ID09IDE7CisgICAgQVNTRVJUKF9wcml2YXRlLT5hY2NlbGVy
YXRlZEZyYW1lc0NvdW50ID4gMCk7CisgICAgCisgICAgaWYgKGxlYXZpbmcpCisgICAgICAgIFtz
ZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdQcm9w
ZXJ0eV07CisgICAgLS1fcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudDsKKyAgICBpZiAo
bGVhdmluZykKKyAgICAgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2NlbGVy
YXRlZENvbXBvc2l0aW5nUHJvcGVydHldOworfQorCitzdGF0aWMgdm9pZCB2aWV3VXBkYXRlUnVu
TG9vcE9ic2VydmVyQ2FsbEJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGl2
aXR5LCB2b2lkKiBpbmZvKQoreworICAgIFdlYlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJldF9j
YXN0PFdlYlZpZXcqPihpbmZvKTsKKyAgICBbd2ViVmlldyBfdmlld1dpbGxEcmF3SW50ZXJuYWxd
OworICAgIFt3ZWJWaWV3LT5fcHJpdmF0ZSBfY2xlYXJWaWV3VXBkYXRlUnVuTG9vcE9ic2VydmVy
XTsKK30KKworLSAodm9pZClfc2NoZWR1bGVWaWV3VXBkYXRlCit7CisgICAgLy8gVGhpcyBpcyB0
aGUgY29tcG9zaXRpbmcgZXF1aXZhbGVudCBvZiAtdmlld1dpbGxEcmF3LiBXaGVuIHdlIGtub3cg
dGhhdCBjb21wb3NpdGluZyBsYXllcnMKKyAgICAvLyBoYXZlIGJlZW4gc2V0IGFzIG5lZWRpbmcg
ZGlzcGxheSwgd2UgaGF2ZSB0byBtYWtlIGFuIGVhZ2VyIGxheW91dCBoYXBwZW4gYmVmb3JlIHRo
ZQorICAgIC8vIGxheWVycyBnZXQgY29tbWl0dGVkIGJ5IENvcmVBbmltYXRpb24uCisKKyAgICBp
ZiAoX3ByaXZhdGUtPnZpZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFJ1biBiZWZvcmUgQXBwS2l0IGRvZXMgaXRzIHdpbmRvdyB1cGRhdGUuCisgICAg
Y29uc3QgQ0ZJbmRleCBydW5Mb29wT3JkZXIgPSBOU0Rpc3BsYXlXaW5kb3dSdW5Mb29wT3JkZXJp
bmcgLSAxOworCisgICAgLy8gVGhlIFdlYlZpZXcgYWx3YXlzIG91dGxpdmVzIHRoZSBvYnNlcnZl
ciwgc28gbm8gbmVlZCB0byByZXRhaW4vcmVsZWFzZS4KKyAgICBDRlJ1bkxvb3BPYnNlcnZlckNv
bnRleHQgY29udGV4dCA9IHsgMCwgc2VsZiwgMCwgMCwgMCB9OworCisgICAgX3ByaXZhdGUtPnZp
ZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNlcnZlckNyZWF0ZShOVUxMLAor
ICAgICAgICBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCBGQUxTRSAv
KiBvbmUgc2hvdCAqLywKKyAgICAgICAgcnVuTG9vcE9yZGVyLCB2aWV3VXBkYXRlUnVuTG9vcE9i
c2VydmVyQ2FsbEJhY2ssICZjb250ZXh0KTsKKworICAgIENGUnVuTG9vcEFkZE9ic2VydmVyKENG
UnVuTG9vcEdldEN1cnJlbnQoKSwgX3ByaXZhdGUtPnZpZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXIs
IGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Cit9CisKKyNlbmRpZgorCiBAZW5kCiAKIC8vIFdlIHVz
ZSB0aGVzZSBmdW5jdGlvbnMgdG8gY2FsbCB0aGUgZGVsZWdhdGVzIGFuZCBibG9jayBleGNlcHRp
b25zLiBUaGVzZSBmdW5jdGlvbnMgYXJlCkBAIC01ODkzLDM3ICs2MTYyLDYgQEAgQk9PTCBDYWxs
Rm9ybURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbihCTwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi1zdGF0aWMgdm9pZCB2aWV3VXBkYXRl
UnVuTG9vcE9ic2VydmVyQ2FsbEJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFj
dGl2aXR5LCB2b2lkKiBpbmZvKQotewotICAgIFdlYlZpZXcqIHdlYlZpZXcgPSByZWludGVycHJl
dF9jYXN0PFdlYlZpZXcqPihpbmZvKTsKLSAgICBbd2ViVmlldyBfdmlld1dpbGxEcmF3SW50ZXJu
YWxdOwotICAgIFt3ZWJWaWV3LT5fcHJpdmF0ZSBfY2xlYXJWaWV3VXBkYXRlUnVuTG9vcE9ic2Vy
dmVyXTsKLX0KLQotLSAodm9pZClfc2NoZWR1bGVWaWV3VXBkYXRlCi17Ci0gICAgLy8gVGhpcyBp
cyB0aGUgY29tcG9zaXRpbmcgZXF1aXZhbGVudCBvZiAtdmlld1dpbGxEcmF3LiBXaGVuIHdlIGtu
b3cgdGhhdCBjb21wb3NpdGluZyBsYXllcnMKLSAgICAvLyBoYXZlIGJlZW4gc2V0IGFzIG5lZWRp
bmcgZGlzcGxheSwgd2UgaGF2ZSB0byBtYWtlIGFuIGVhZ2VyIGxheW91dCBoYXBwZW4gYmVmb3Jl
IHRoZQotICAgIC8vIGxheWVycyBnZXQgY29tbWl0dGVkIGJ5IENBLgotICAgIGlmICghX3ByaXZh
dGUtPnZpZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXIpIHsKLSAgICAgICAgY29uc3QgQ0ZJbmRleCBy
dW5Mb29wT3JkZXIgPSBOU0Rpc3BsYXlXaW5kb3dSdW5Mb29wT3JkZXJpbmctMTsgLy8gUnVuIGJl
Zm9yZSBBcHBLaXQgZG9lcyBpdHMgd2luZG93IHVwZGF0ZQotICAgICAgICBDRlJ1bkxvb3BPYnNl
cnZlckNvbnRleHQgY29udGV4dCA9IHsKLSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihzZWxmKSwKLSAgICAgICAgICAgIE5VTEwsICAgLy8gVGhlIFdl
YlZpZXcgYWx3YXlzIG91dGxpdmVzIHRoZSBvYnNlcnZlciwgc28gbm8gbmVlZCB0byByZXRhaW4v
cmVsZWFzZS4KLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMCi0gICAgICAgIH07
Ci0gICAgICAgIF9wcml2YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9ic2VydmVyID0gQ0ZSdW5Mb29w
T2JzZXJ2ZXJDcmVhdGUoTlVMTCwga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5Mb29w
RXhpdCwgZmFsc2UgLyogb25lIHNob3QgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bkxvb3BPcmRlciwgdmlld1VwZGF0ZVJ1bkxv
b3BPYnNlcnZlckNhbGxCYWNrLCAmY29udGV4dCk7Ci0KLSAgICAgICAgQ0ZSdW5Mb29wQWRkT2Jz
ZXJ2ZXIoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBfcHJpdmF0ZS0+dmlld1VwZGF0ZVJ1bkxvb3BP
YnNlcnZlciwga0NGUnVuTG9vcENvbW1vbk1vZGVzKTsKLSAgICB9Ci0gICAgCi19Ci0jZW5kaWYK
LQogQGVuZAogCiAjaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRApJbmRleDogV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDI0ICszOCwyMiBAQAog
CiAjaWZkZWYgX19jcGx1c3BsdXMKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBLZXli
b2FyZEV2ZW50OworICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEtVUkw7CisgICAgY2xhc3Mg
S2V5Ym9hcmRFdmVudDsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFN0cmluZzsKIH0KLXR5
cGVkZWYgV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCBXZWJDb3JlS2V5Ym9hcmRFdmVudDsKLXR5cGVk
ZWYgV2ViQ29yZTo6UGFnZSBXZWJDb3JlUGFnZTsKLSNlbHNlCi1AY2xhc3MgV2ViQ29yZUtleWJv
YXJkRXZlbnQ7Ci1AY2xhc3MgV2ViQ29yZVBhZ2U7CiAjZW5kaWYKIAogQGNsYXNzIFdlYkJhc2VQ
bHVnaW5QYWNrYWdlOwogQGNsYXNzIFdlYkRvd25sb2FkOwogQGNsYXNzIFdlYk5vZGVIaWdobGln
aHQ7CiAKKyNpZmRlZiBfX2NwbHVzcGx1cworCiBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdF
ZGl0aW5nRXh0cmFzKQotLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihXZWJDb3Jl
S2V5Ym9hcmRFdmVudCAqKWV2ZW50IHNob3VsZFNhdmVDb21tYW5kOihCT09MKXNob3VsZFNhdmU7
CistIChCT09MKV9pbnRlcmNlcHRFZGl0aW5nS2V5RXZlbnQ6KFdlYkNvcmU6OktleWJvYXJkRXZl
bnQqKWV2ZW50IHNob3VsZFNhdmVDb21tYW5kOihCT09MKXNob3VsZFNhdmU7CiAtIChCT09MKV9z
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKWN1cnJlbnRSYW5nZSB0b0RP
TVJhbmdlOihET01SYW5nZSAqKXByb3Bvc2VkUmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZm
aW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkgc3RpbGxTZWxlY3Rpbmc6KEJPT0wpZmxhZzsKIEBlbmQK
IApAQCAtNjYsMTcgKzY0LDQ2IEBAIHR5cGVkZWYgV2ViQ29yZTo6UGFnZSBXZWJDb3JlUGFnZTsK
IEBlbmQKIAogQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3SW50ZXJuYWwpCi0jaWZkZWYgX19j
cGx1c3BsdXMKKworLSAoV2ViQ29yZTo6RnJhbWUqKV9tYWluQ29yZUZyYW1lOworCiAtIChXZWJD
b3JlOjpTdHJpbmcpX3VzZXJBZ2VudEZvclVSTDooY29uc3QgV2ViQ29yZTo6S1VSTCYpdXJsOwog
LSAoV2ViQ29yZTo6S2V5Ym9hcmRVSU1vZGUpX2tleWJvYXJkVUlNb2RlOworCistIChCT09MKV9i
ZWNvbWluZ0ZpcnN0UmVzcG9uZGVyRnJvbU91dHNpZGU7CisKKy0gKHZvaWQpX3JlZ2lzdGVyRm9y
SWNvbk5vdGlmaWNhdGlvbjooQk9PTClsaXN0ZW47CistICh2b2lkKV9kaXNwYXRjaERpZFJlY2Vp
dmVJY29uRnJvbVdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOworCistICh2b2lkKV9zZXRN
b3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZClfY2FuY2VsVXBkYXRlTW91
c2VvdmVyVGltZXI7CistICh2b2lkKV9zdG9wQXV0b3Njcm9sbFRpbWVyOworLSAodm9pZClfdXBk
YXRlTW91c2VvdmVyV2l0aEZha2VFdmVudDsKKy0gKHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQ7Cist
ICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXRvb2xUaXA7CisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCistIChCT09MKV9uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uOworLSAodm9pZClfc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjoo
Qk9PTCluZWVkc1N5bmNocm9uaXphdGlvbjsKKy0gKHZvaWQpX3N0YXJ0ZWRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1lKil3ZWJGcmFtZTsKKy0gKHZvaWQpX3N0b3BwZWRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1lKil3ZWJGcmFtZTsKKy0gKHZv
aWQpX3NjaGVkdWxlVmlld1VwZGF0ZTsKICNlbmRpZgorCiBAZW5kCiAKLUBpbnRlcmZhY2UgV2Vi
VmlldyAoV2ViVmlld01pc2NJbnRlcm5hbCkKKyNlbmRpZgorCisvLyBGSVhNRTogVGVtcG9yYXJ5
IHdheSB0byBleHBvc2UgbWV0aG9kcyB0aGF0IGFyZSBpbiB0aGUgd3JvbmcgY2F0ZWdvcnkgaW5z
aWRlIFdlYlZpZXcuCitAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZpZXdPdGhlckludGVybmFsKQog
CiArICh2b2lkKV9zZXRDYWNoZU1vZGVsOihXZWJDYWNoZU1vZGVsKWNhY2hlTW9kZWw7CiArIChX
ZWJDYWNoZU1vZGVsKV9jYWNoZU1vZGVsOwotLSAoV2ViQ29yZVBhZ2UqKXBhZ2U7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworLSAoV2ViQ29yZTo6UGFnZSopcGFnZTsKKyNlbmRpZgorCiAtIChOU01l
bnUgKilfbWVudUZvckVsZW1lbnQ6KE5TRGljdGlvbmFyeSAqKWVsZW1lbnQgZGVmYXVsdEl0ZW1z
OihOU0FycmF5ICopaXRlbXM7CiAtIChpZClfVUlEZWxlZ2F0ZUZvcndhcmRlcjsKIC0gKGlkKV9l
ZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXI7CkBAIC0xMjMsMTIgKzE1MCw4IEBAIHR5cGVkZWYgV2Vi
Q29yZTo6UGFnZSBXZWJDb3JlUGFnZTsKIC0gKHZvaWQpX2FkZE9iamVjdDooaWQpb2JqZWN0IGZv
cklkZW50aWZpZXI6KHVuc2lnbmVkIGxvbmcpaWRlbnRpZmllcjsKIC0gKGlkKV9vYmplY3RGb3JJ
ZGVudGlmaWVyOih1bnNpZ25lZCBsb25nKWlkZW50aWZpZXI7CiAtICh2b2lkKV9yZW1vdmVPYmpl
Y3RGb3JJZGVudGlmaWVyOih1bnNpZ25lZCBsb25nKWlkZW50aWZpZXI7Ci0tIChCT09MKV9iZWNv
bWluZ0ZpcnN0UmVzcG9uZGVyRnJvbU91dHNpZGU7CiAKLS0gKHZvaWQpX3JlZ2lzdGVyRm9ySWNv
bk5vdGlmaWNhdGlvbjooQk9PTClsaXN0ZW47Ci0tICh2b2lkKV9kaXNwYXRjaERpZFJlY2VpdmVJ
Y29uRnJvbVdlYkZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOwotCi0tICh2b2lkKV9zZXRab29t
TXVsdGlwbGllcjooZmxvYXQpbSBpc1RleHRPbmx5OihCT09MKWlzVGV4dE9ubHk7CistICh2b2lk
KV9zZXRab29tTXVsdGlwbGllcjooZmxvYXQpbXVsdGlwbGllciBpc1RleHRPbmx5OihCT09MKWlz
VGV4dE9ubHk7CiAtIChmbG9hdClfem9vbU11bHRpcGxpZXI6KEJPT0wpaXNUZXh0T25seTsKIC0g
KGZsb2F0KV9yZWFsWm9vbU11bHRpcGxpZXI7CiAtIChCT09MKV9yZWFsWm9vbU11bHRpcGxpZXJJ
c1RleHRPbmx5OwpAQCAtMTQwLDIzICsxNjMsMTcgQEAgdHlwZWRlZiBXZWJDb3JlOjpQYWdlIFdl
YkNvcmVQYWdlOwogLSAoSUJBY3Rpb24pX3Jlc2V0Wm9vbTooaWQpc2VuZGVyIGlzVGV4dE9ubHk6
KEJPT0wpaXNUZXh0T25seTsKIAogLSAoQk9PTClfbXVzdERyYXdVbmlvbmVkUmVjdDooTlNSZWN0
KXJlY3Qgc2luZ2xlUmVjdHM6KGNvbnN0IE5TUmVjdCAqKXJlY3RzIGNvdW50OihOU0ludGVnZXIp
Y291bnQ7Ci0tICh2b2lkKV91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVGb3JGcmFtZTooV2Vi
RnJhbWUgKil3ZWJGcmFtZTsKKysgKHZvaWQpX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZv
ckZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lOwogCiArIChCT09MKV9jYW5IYW5kbGVSZXF1ZXN0
OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0IGZvck1haW5GcmFtZTooQk9PTClmb3JNYWluRnJhbWU7
CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0tIChCT09MKV9uZWVkc09uZVNo
b3REcmF3aW5nU3luY2hyb25pemF0aW9uOwotLSAodm9pZClfc2V0TmVlZHNPbmVTaG90RHJhd2lu
Z1N5bmNocm9uaXphdGlvbjooQk9PTCluZWVkc1N5bmNocm9uaXphdGlvbjsKLS0gKHZvaWQpX3N0
YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1lKil3ZWJGcmFtZTsK
LS0gKHZvaWQpX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1l
Kil3ZWJGcmFtZTsKLS0gKHZvaWQpX3NjaGVkdWxlVmlld1VwZGF0ZTsKLSNlbmRpZgotCiAtICh2
b2lkKV9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOwog
CiBAZW5kCiAKLXR5cGVkZWYgc3RydWN0IF9XZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoZSB7CisjaWZkZWYgX19jcGx1c3BsdXMKKworc3RydWN0IFdlYlJlc291cmNlRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlIHsKICAgICBJTVAgZGlkQ2FuY2VsQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VGdW5jOwogICAgIElNUCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VG
dW5jOwogICAgIElNUCBpZGVudGlmaWVyRm9yUmVxdWVzdEZ1bmM7CkBAIC0xNjksOSArMTg2LDkg
QEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYlJlc291cmNlRGVsZWdhdGVJbXBsZQogICAgIElNUCB3aWxs
Q2FjaGVSZXNwb25zZUZ1bmM7CiAgICAgSU1QIHBsdWdJbkZhaWxlZFdpdGhFcnJvckZ1bmM7CiAg
ICAgSU1QIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlRnVuYzsKLX0gV2ViUmVzb3VyY2VEZWxl
Z2F0ZUltcGxlbWVudGF0aW9uQ2FjaGU7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfV2ViRnJhbWVM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlIHsKK3N0cnVjdCBXZWJGcmFtZUxvYWREZWxl
Z2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUgewogICAgIElNUCBkaWRDbGVhcldpbmRvd09iamVjdEZv
ckZyYW1lRnVuYzsKICAgICBJTVAgd2luZG93U2NyaXB0T2JqZWN0QXZhaWxhYmxlRnVuYzsKICAg
ICBJTVAgZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWVGdW5jOwpAQCAtMTkwLDkgKzIwNyw5
IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGwKICAgICBJTVAgZGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0SW5GcmFtZUZ1bmM7CiAgICAgSU1QIGRpZFJlY2Vp
dmVJY29uRm9yRnJhbWVGdW5jOwogICAgIElNUCBkaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFt
ZUZ1bmM7Ci19IFdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZTsKK307CiAK
LXR5cGVkZWYgc3RydWN0IF9XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNo
ZSB7CitzdHJ1Y3QgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUgewog
ICAgIEJPT0wgZGlkUGFyc2VTb3VyY2VFeHBlY3RzQmFzZUxpbmVOdW1iZXI7CiAgICAgSU1QIGRp
ZFBhcnNlU291cmNlRnVuYzsKICAgICBJTVAgZmFpbGVkVG9QYXJzZVNvdXJjZUZ1bmM7CkBAIC0y
MDAsMTMgKzIxNywxMSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUlt
CiAgICAgSU1QIHdpbGxFeGVjdXRlU3RhdGVtZW50RnVuYzsKICAgICBJTVAgd2lsbExlYXZlQ2Fs
bEZyYW1lRnVuYzsKICAgICBJTVAgZXhjZXB0aW9uV2FzUmFpc2VkRnVuYzsKLX0gV2ViU2NyaXB0
RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGU7Cit9OwogCi1XZWJSZXNvdXJjZURlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSogV2ViVmlld0dldFJlc291cmNlTG9hZERlbGVnYXRlSW1w
bGVtZW50YXRpb25zKFdlYlZpZXcgKndlYlZpZXcpOwotV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBs
ZW1lbnRhdGlvbkNhY2hlKiBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlv
bnMoV2ViVmlldyAqd2ViVmlldyk7Ci1XZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRp
b25DYWNoZSogV2ViVmlld0dldFNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMoV2Vi
VmlldyAqd2ViVmlldyk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cworV2ViUmVzb3VyY2VEZWxlZ2F0
ZUltcGxlbWVudGF0aW9uQ2FjaGUqIFdlYlZpZXdHZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZUltcGxl
bWVudGF0aW9ucyhXZWJWaWV3ICopOworV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlv
bkNhY2hlKiBXZWJWaWV3R2V0RnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMoV2ViVmll
dyAqKTsKK1dlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBXZWJWaWV3
R2V0U2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9ucyhXZWJWaWV3ICopOwogCiBpZCBD
YWxsRm9ybURlbGVnYXRlKFdlYlZpZXcgKiwgU0VMLCBpZCwgaWQpOwogaWQgQ2FsbEZvcm1EZWxl
Z2F0ZShXZWJWaWV3ICpzZWxmLCBTRUwgc2VsZWN0b3IsIGlkIG9iamVjdDEsIGlkIG9iamVjdDIs
IGlkIG9iamVjdDMsIGlkIG9iamVjdDQsIGlkIG9iamVjdDUpOwpJbmRleDogV2ViS2l0L3d4L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDMw
OSkKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBA
QAorMjAwOS0wNS0zMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRXeDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6IFVzZSBGcmFtZVZpZXc6OmNy
ZWF0ZQorICAgICAgICBhbmQgUmVmUHRyIGluc3RlYWQgb2YgdGhlIG9sZCAiY3JhenkiIHJlZmVy
ZW5jZSBjb3VudGluZy4KKwogMjAwOS0wNS0yMyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIFBhcnQgMiBvZiAyOiBCdWcgMjU0OTU6IEltcGxlbWVudCBQYXNz
T3duUHRyIGFuZCByZXBsYWNlIHVzZXMgb2Ygc3RkOjphdXRvX3B0cgpJbmRleDogV2ViS2l0L3d4
L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAJKHJldmlzaW9uIDQ0
MzA5KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5MCwxNSArODkwLDE0IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnRXeDo6dHJhbnNpdGlvblRvQ28KIAogICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7CiAKLSAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldzsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBmcmFtZVZpZXc7CiAg
ICAgaWYgKGlzTWFpbkZyYW1lKQotICAgICAgICBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KG1f
ZnJhbWUsIEludFJlY3QobV93ZWJWaWV3LT5HZXRSZWN0KCkpLnNpemUoKSk7CisgICAgICAgIGZy
YW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRlKG1fZnJhbWUsIEludFJlY3QobV93ZWJWaWV3LT5H
ZXRSZWN0KCkpLnNpemUoKSk7CiAgICAgZWxzZQotICAgICAgICBmcmFtZVZpZXcgPSBuZXcgRnJh
bWVWaWV3KG1fZnJhbWUpOworICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSht
X2ZyYW1lKTsKIAogICAgIEFTU0VSVChmcmFtZVZpZXcpOwogICAgIG1fZnJhbWUtPnNldFZpZXco
ZnJhbWVWaWV3KTsKLSAgICBmcmFtZVZpZXctPmRlcmVmKCk7IC8vIEZyYW1lVmlld3MgYXJlIGNy
ZWF0ZWQgd2l0aCBhIHJlZiBjb3VudCBvZiAxLiBSZWxlYXNlIHRoaXMgcmVmIHNpbmNlIHdlJ3Zl
IGFzc2lnbmVkIGl0IHRvIGZyYW1lLgogCiAgICAgZnJhbWVWaWV3LT5zZXRQbGF0Zm9ybVdpZGdl
dChtX3dlYlZpZXcpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30826</attachid>
            <date>2009-06-01 00:11:15 -0700</date>
            <delta_ts>2009-06-01 02:11:00 -0700</delta_ts>
            <desc>newer work in progress</desc>
            <filename>ViewlessEventPatch.txt</filename>
            <type>text/plain</type>
            <size>1152905</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIzIEBACisyMDA5LTA1LTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjYxMTI6IHZpZXdsZXNzIFdlYktpdCAtLSBtYWtlIGV2ZW50cyB3b3JrCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjExMgorCisgICAgICAgIFRoZSBt
YWluIGZpeCBoZXJlIGlzIHRvIG1ha2UgbW91c2UgYW5kIHdoZWVsIGV2ZW50IGNvb3JkaW5hdGVz
IGluIHRoZSBjb29yZGluYXRlCisgICAgICAgIHN5c3RlbSBvZiB0aGUgdG9wIGxldmVsIE5TVmll
dyByYXRoZXIgdGhhbiB0aGUgTlNXaW5kb3cgd2hlbiBpbiB0aGUgdmlld2xlc3MgbW9kZS4KKyAg
ICAgICAgVGhpcyBpcyB0aGUgZGVzaWduIEh5YXR0IGNob3NlLCBidXQgdGhlIGV2ZW50IHBhcnQg
b2YgaXQgd2Fzbid0IGRvbmUgeWV0LgorCisgICAgICAgIEFsc28gZml4IEZyYW1lVmlldyB0byBk
byBub3JtYWwgcmVmZXJlbmNlIGNvdW50aW5nIGluc3RlYWQgb2YgYSBzdHJhbmdlIG1vZGVsIHdp
dGgKKyAgICAgICAgYW4gZXhwbGljaXQgZGVyZWYgbmVhciBjcmVhdGlvbiB0aW1lLgorCisgICAg
ICAgICogV2ViQ29yZS5iYXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFu
ZGxlTW91c2VVcCk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaW50byB0aGUgZmlsZQorICAgICAgICB0
byByZWR1Y2UgY29uZGl0aW9uYWxzIGluIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmV2ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZCk6IERpdHRvLgorCisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogUmVkdWNlZCBpbmNsdWRlcy4gRml4ZWQgZm9ybWF0
dGluZyBvZiBPYmplY3RpdmUtQyB0eXBlcy4KKyAgICAgICAgTWFkZSBjdXJyZW50TlNFdmVudCBh
IHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uIEFkZGVkIHNlbmRDb250ZXh0TWVudUV2ZW50IGFuZAor
ICAgICAgICBldmVudE1heVN0YXJ0RHJhZyBmdW5jdGlvbnMgdGhhdCB0YWtlcyBOU0V2ZW50ICog
c28gdGhlIGNvbnZlcnNpb24gdG8gUGxhdGZvcm1Nb3VzZUV2ZW50CisgICAgICAgIGNhbiBiZSBk
b25lIGhlcmUgcmF0aGVyIHRoYW4gaW4gV2ViS2l0LiBSZWR1Y2VkICNpZiBieSBtYWtpbmcgZXZl
bnRMb29wSGFuZGxlTW91c2VVcCBhbmQKKyAgICAgICAgZXZlbnRMb29wSGFuZGxlTW91c2VEcmFn
Z2VkIHVuY29uZGl0aW9uYWwuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpzZXRWaWV3KTogTWFkZSB0aGlzIHRha2UgYSBQYXNzUmVmUHRyIHNp
bmNlIGl0IHRha2VzIG93bmVyc2hpcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVW
aWV3KTogQ2hhbmdlZCB0byB1c2UgUmVmUHRyIGFuZCBGcmFtZVZpZXc6OmNyZWF0ZSBhbmQgcmVt
b3ZlCisgICAgICAgIHRoZSBleHBsaWNpdCBkZXJlZi4KKworICAgICAgICAqIHBhZ2UvRnJhbWUu
aDogQ2hhbmdlZCBzZXRWaWV3IHRvIHRha2UgYSBQYXNzUmVmUHRyLgorCisgICAgICAgICogcGFn
ZS9GcmFtZVRyZWUuY3BwOiBBZGRlZCBuZXdseS1uZWVkZWQgaW5jbHVkZS4KKworICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6RnJhbWVW
aWV3KTogR290IHJpZCBvZiBvbmUgb2YgdGhlIHR3byBjb25zdHJ1Y3RvcnMsIGFuZCByZW1vdmVk
CisgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbiBvZiBtX3JlZkNvdW50IGFuZCBjYWxsIHRvIHNo
b3cgZnJvbSB0aGUgcmVhbWluaW5nIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
Y3JlYXRlKTogQWRkZWQgdHdvIGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBkbyB3aGF0IHRoZSB0d28K
KyAgICAgICAgY29uc3RydWN0b3JzIGRpZCBiZWZvcmUsIGV4Y2VwdCB0aGF0IHRoZXkgcmV0dXJu
IGEgUGFzc1JlZlB0ciB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgIHJlZmVyZW5jZSBjb3VudGlu
ZyBpcyBoYW5kbGVkIGNvcnJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6fkZy
YW1lVmlldyk6IFJlbW92ZWQgYXNzZXJ0aW9uIGZyb20gd2hlbiBGcmFtZVZpZXcgaW1wbGVtZW50
ZWQKKyAgICAgICAgaXRzIG93biByZWZlcmVuY2UgY291bnRpbmcuCisKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOiBJbmhlcml0IGZyb20gUmVmQ291bnRlZCBmb3IgcmVmZXJlbmNlIGNvdW50
aW5nLiBNYWRlIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBwcml2YXRlIGFuZCBhZGRlZCBjcmVh
dGUgZnVuY3Rpb25zLiBHb3QgcmlkIG9mIHRoZSBoYW5kLWltcGxlbWVudGVkCisgICAgICAgIHJl
ZmVyZW5jZSBjb3VudGluZyBpbiB0aGlzIGNsYXNzLgorCisgICAgICAgICogcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVudE5TRXZlbnRTbG90KTog
UmVuYW1lZCBjdXJyZW50RXZlbnQgdG8gY3VycmVudE5TRXZlbnRTbG90IHRvCisgICAgICAgIG1h
a2UgaXQgbW9yZSBjbGVhciBob3cgaXQgcmVsYXRlcyB0byBjdXJyZW50TlNFdmVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZlbnQpOiBVcGRhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q3VycmVudEV2ZW50U2NvcGU6OkN1cnJlbnRFdmVudFNjb3BlKTogQWRk
ZWQuIFVzZSB0byBzZXQvcmVzZXQgdGhlCisgICAgICAgIGN1cnJlbnQgZXZlbnQgaW4gYSBmb29s
cHJvb2Ygd2F5LgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudEV2ZW50U2NvcGU6On5DdXJyZW50
RXZlbnRTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp3aGVl
bEV2ZW50KTogVXNlIEN1cnJlbnRFdmVudFNjb3BlLiBQYXNzIHRoZSBwbGF0Zm9ybQorICAgICAg
ICB3aW5kb3cgaW4gd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFBsYXRmb3JtV2hlZWxFdmVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOiBVc2UgQ3VycmVudEV2ZW50
U2NvcGUuCisgICAgICAgIChXZWJDb3JlOjpsYXN0RXZlbnRJc01vdXNlVXApOiBVc2UgY3VycmVu
dE5TRXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25F
dmVudFRvV2lkZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmV2
ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpldmVudExvb3BIYW5kbGVNb3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZSk6IFVzZQorICAg
ICAgICBjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50IHRvIGdldCBhIG1vdXNlIGV2ZW50IHRoYXQg
aGFzIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBwbGF0Zm9ybSB3aW5kb3cgcGFzc2VkIHRvIGNy
ZWF0ZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRU
b1dpZGdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZURv
d24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VEcmFnZ2Vk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlVXApOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50
KTogQWRkZWQuIFBhc3NlcyB0aGUKKyAgICAgICAgcGxhdGZvcm0gd2luZG93IHRoYXQncyBub3cg
bmVlZGVkIHRvIGNyZWF0ZSBhIFBsYXRmb3JtTW91c2VFdmVudC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZXZlbnRNYXlTdGFydERyYWcpOiBBZGRlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcyBhbmQg
Y29uc3RydWN0b3IgZGVmaW5pdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOiBTb3J0ZWQgdGhpbmdzIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyAgICAgICAg
Q2hhbmdlZCBNYWMgY29uc3RydWN0b3IgdG8gdGFrZSBhIHdpbmRvd1ZpZXcgYXMgd2VsbCBhcyB0
aGUgZXZlbnQuIFRoaXMgaXMKKyAgICAgICAgbmVlZGVkIGluIHZpZXdsZXNzIG1vZGUsIHNpbmNl
IHRoZSAid2luZG93IiBpcyBhY3R1YWxseSBhbiBOU1ZpZXcsIHNvIHRoZQorICAgICAgICBldmVu
dCBoYXMgdG8ga25vdyB3aGljaCB2aWV3IHRvIGNvbXB1dGUgdGhlIGNvb3JkaW5hdGVzIHdpdGgu
IE1hZGUgdGhlCisgICAgICAgIHNhbWUgY2hhbmdlIHRvIHBvaW50Rm9yRXZlbnQuCisgICAgICAg
ICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6IERpdHRvLgorCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXRmb3JtTW91c2VFdmVudE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBv
aW50Rm9yRXZlbnQpOiBDb252ZXJ0IHBvaW50IGZyb20gd2luZG93IGNvb3JkaW5hdGVzIHRvIHZp
ZXcKKyAgICAgICAgY29vcmRpbmF0ZXMgaWYgYSB3aW5kb3dWaWV3IGlzIHBhc3NlZCBpbi4gVGhp
cyBpcyB1c2VkIGluIHZpZXdsZXNzIG1vZGUuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1v
dXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XaGVlbEV2ZW50TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvdyk6IEZpeGVkIGNhc2Ugd2hlcmUgdGhlcmUKKyAgICAgICAgaXMgbm8gcGxh
dGZvcm0gd2lkZ2V0IGFuZCBubyBwYXJlbnQuIEJlZm9yZSBpdCB3b3VsZCB5aWVsZCB1bnByZWRp
Y3RhYmxlCisgICAgICAgIHJlc3VsdHMgYmVjYXVzZSBvZiBkaXNwYXRjaGluZyB0byBhIG5pbCBv
YmplY3QgYW5kIHJldHVybmluZyBhIHN0cnVjdHVyZS4KKyAgICAgICAgTm93IGl0IHJldHVybnMg
dGhlIHBvaW50IHdpdGhvdXQgY2hhbmdpbmcgY29vcmRpbmF0ZXMgYXQgYWxsLCB3aGljaCBpcyB3
aGF0CisgICAgICAgIHdlIG5lZWQgZm9yIHRoaXMgY2FzZSBpbiB2aWV3bGVzcyBtb2RlLgorCisg
ICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oOiBSZW1vdmVkIHVuaGVscGZ1bCBtYXgg
YW5kIG1pbiBmdW5jdGlvbnMuIFRoZXNlCisgICAgICAgIGp1c3QgZG8gd2hhdCBzdGQ6Om1heCBh
bmQgc3RkOjptaW4gd2lsbCBhbHJlYWR5IGRvIGF1dG9tYXRpY2FsbHkgZm9yIHRoaXMKKyAgICAg
ICAgdHlwZSwgc28gdGhleSBhcmUgbm90IGhlbHBmdWwuCisKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OlNWR0ltYWdlKTog
UmVtb3ZlZCB1bm5lZWRlZCBpbml0aWFsIHZhbHVlcyBmb3IgdHlwZXMKKyAgICAgICAgdGhhdCBp
bml0aWFsaXplIHRvIHplcm8gd2l0aG91dCBhbnl0aGluZyBleHBsaWNpdC4KKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjp+U1ZHSW1hZ2UpOiBVcGRhdGUgc2luY2UgbV9mcmFtZSBhbmQgbV9m
cmFtZVZpZXcgYXJlCisgICAgICAgIG5vIGxvbmdlciBzdG9yZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2U6OnVzZXNDb250YWluZXJTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpT
VkdJbWFnZTo6c2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Omhhc1Jl
bGF0aXZlV2lkdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpoYXNSZWxh
dGl2ZUhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2VkKTog
RGl0dG8uCisKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDogUmVtb3ZlZCB1bm5l
ZWRlZCBpbmNsdWRlcyBhbmQgdW5uZWVkZWQgZGF0YQorICAgICAgICBtZW1iZXJzIG1fZG9jdW1l
bnQsIG1fZnJhbWUsIG1fZnJhbWVWaWV3LCBhbmQgbV9taW5TaXplLgorCiAyMDA5LTA1LTMxICBE
aXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlr
b2xhcyBaaW1tZXJtYW5uLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJD
b3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw5ICsyMzIsMTAgQEAg
X19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxNHNjcm9sbE92ZXJmbAogX19aTjdXZWJDb3JlMTJF
dmVudEhhbmRsZXIxNXNlbmRTY3JvbGxFdmVudEV2CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjE3ZHJhZ1NvdXJjZUVuZGVkQXRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEVOU18xM0RyYWdP
cGVyYXRpb25FCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE3ZHJhZ1NvdXJjZU1vdmVkVG9F
UktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdl
dmVudE1heVN0YXJ0RHJhZ0VQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBo
YW5kbGVUZXh0SW5wdXRFdmVudEVSS05TXzZTdHJpbmdFUE5TXzVFdmVudEViYgogX19aTjdXZWJD
b3JlMTJFdmVudEhhbmRsZXIyMGhpdFRlc3RSZXN1bHRBdFBvaW50RVJLTlNfOEludFBvaW50RWJi
Ci1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwc2VuZENvbnRleHRNZW51RXZlbnRFUktOU18x
OFBsYXRmb3JtTW91c2VFdmVudEUKK19fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBzZW5kQ29u
dGV4dE1lbnVFdmVudEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjdjYXBz
TG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWRFdgogX19aTjdXZWJDb3JlMTJFdmVudEhhbmRsZXI3bW91
c2VVcEVQN05TRXZlbnQKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyOGtleUV2ZW50RVA3TlNF
dmVudApAQCAtMzk1LDcgKzM5Niw2IEBAIF9fWk43V2ViQ29yZTE2dGhyZWFkR2xvYmFsRGF0YUV2
CiBfX1pON1dlYkNvcmUxN0RPTUltcGxlbWVudGF0aW9uMTRpc1RleHRNSU1FVHlwZUVSS05TXzZT
dHJpbmdFCiBfX1pON1dlYkNvcmUxN0dseXBoUGFnZVRyZWVOb2RlMTh0cmVlR2x5cGhQYWdlQ291
bnRFdgogX19aTjdXZWJDb3JlMTdlcXVhbElnbm9yaW5nQ2FzZUVQTlNfMTBTdHJpbmdJbXBsRVMx
XwotX19aTjdXZWJDb3JlMThQbGF0Zm9ybU1vdXNlRXZlbnRDMUVQN05TRXZlbnQKIF9fWk43V2Vi
Q29yZTE4aXNTdGFydE9mUGFyYWdyYXBoRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FCiBfX1pON1dl
YkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyMHBhdXNlQW5pbWF0aW9uQXRUaW1lRVBOU18xMlJl
bmRlck9iamVjdEVSS05TXzZTdHJpbmdFZAogX19aTjdXZWJDb3JlMTlBbmltYXRpb25Db250cm9s
bGVyMjFwYXVzZVRyYW5zaXRpb25BdFRpbWVFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfNlN0cmlu
Z0VkCkBAIC01MTksNyArNTE5LDcgQEAgX19aTjdXZWJDb3JlNUZyYW1lMjhzZWFyY2hGb3JMYWJl
bHNCZWZvcgogX19aTjdXZWJDb3JlNUZyYW1lMzRzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkRWIKIF9fWk43V2ViQ29yZTVGcmFtZTRpbml0RXYKIF9fWk43V2ViQ29yZTVGcmFtZTZz
Y3JpcHRFdgotX19aTjdXZWJDb3JlNUZyYW1lN3NldFZpZXdFUE5TXzlGcmFtZVZpZXdFCitfX1pO
N1dlYkNvcmU1RnJhbWU3c2V0Vmlld0VOM1dURjEwUGFzc1JlZlB0cklOU185RnJhbWVWaWV3RUVF
CiBfX1pON1dlYkNvcmU1RnJhbWVDMUVQTlNfNFBhZ2VFUE5TXzIxSFRNTEZyYW1lT3duZXJFbGVt
ZW50RVBOU18xN0ZyYW1lTG9hZGVyQ2xpZW50RQogX19aTjdXZWJDb3JlNUZyYW1lRDFFdgogX19a
TjdXZWJDb3JlNUltYWdlMTJzdXBwb3J0c1R5cGVFUktOU182U3RyaW5nRQpAQCAtNjgzLDggKzY4
Myw4IEBAIF9fWk43V2ViQ29yZTlGcmFtZVZpZXcyMnNldEJhc2VCYWNrZ3JvdW4KIF9fWk43V2Vi
Q29yZTlGcmFtZVZpZXcyM2xheW91dElmTmVlZGVkUmVjdXJzaXZlRXYKIF9fWk43V2ViQ29yZTlG
cmFtZVZpZXcyOWZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlRWZmYgogX19aTjdXZWJDb3Jl
OUZyYW1lVmlldzI5c2V0U2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW5FYgotX19aTjdXZWJDb3Jl
OUZyYW1lVmlld0MxRVBOU181RnJhbWVFCi1fX1pON1dlYkNvcmU5RnJhbWVWaWV3QzFFUE5TXzVG
cmFtZUVSS05TXzdJbnRTaXplRQorX19aTjdXZWJDb3JlOUZyYW1lVmlldzZjcmVhdGVFUE5TXzVG
cmFtZUUKK19fWk43V2ViQ29yZTlGcmFtZVZpZXc2Y3JlYXRlRVBOU181RnJhbWVFUktOU183SW50
U2l6ZUUKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXMxMGxpc3RpbmdUYWdFCiBfX1pON1dlYkNvcmU5
SFRNTE5hbWVzMTF0ZXh0YXJlYVRhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXMxM2Jsb2NrcXVv
dGVUYWdFCkBAIC03NzMsNyArNzczLDYgQEAgX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04Y2hp
bGRyZW5FdgogX19aTks3V2ViQ29yZTExSGlzdG9yeUl0ZW04cmVmZXJyZXJFdgogX19aTks3V2Vi
Q29yZTExSGlzdG9yeUl0ZW05dXJsU3RyaW5nRXYKIF9fWk5LN1dlYkNvcmUxMUhpc3RvcnlJdGVt
OXZpZXdTdGF0ZUV2Ci1fX1pOSzdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2V2ZW50TWF5U3RhcnRE
cmFnRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiBfX1pOSzdXZWJDb3JlMTJFdmVudEhhbmRs
ZXIyMGN1cnJlbnRLZXlib2FyZEV2ZW50RXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTEy
ZGF0YWJhc2VQYXRoRXYKIF9fWk5LN1dlYkNvcmUxMkljb25EYXRhYmFzZTI0c2hvdWxkU3RvcFRo
cmVhZEFjdGl2aXR5RXYKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiA0NDMwOSkK
KysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
NiArMTE3LDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzY3JvbGxBbmRBY2NlcHRFdmVudCgKICAg
ICAgICAgZS5hY2NlcHQoKTsKIH0KIAorI2lmICFQTEFURk9STShNQUMpCisKK2lubGluZSBib29s
IEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VVcChjb25zdCBNb3VzZUV2ZW50V2l0
aEhpdFRlc3RSZXN1bHRzJikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29s
IEV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFuZGxlTW91c2VEcmFnZ2VkKGNvbnN0IE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworI2VuZGlm
CisKIEV2ZW50SGFuZGxlcjo6RXZlbnRIYW5kbGVyKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJh
bWUoZnJhbWUpCiAgICAgLCBtX21vdXNlUHJlc3NlZChmYWxzZSkKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyMiArMjcsMTUgQEAKICNkZWZpbmUgRXZlbnRIYW5k
bGVyX2gKIAogI2luY2x1ZGUgIkRyYWdBY3Rpb25zLmgiCi0jaW5jbHVkZSAiRm9jdXNEaXJlY3Rp
b24uaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JvbGxU
eXBlcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBQTEFURk9STShNQUMpCi0jaW5jbHVkZSAiV2Vi
Q29yZUtleWJvYXJkVUlNb2RlLmgiCi0jaWZuZGVmIF9fT0JKQ19fCi1jbGFzcyBOU0V2ZW50Owor
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoX19PQkpDX18pCiBjbGFzcyBOU1ZpZXc7CiAj
ZW5kaWYKLSNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUxLDcgKzQ0LDYgQEAg
Y2xhc3MgQ2xpcGJvYXJkOwogY2xhc3MgQ3Vyc29yOwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGbG9h
dFBvaW50OwotY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBIaXRUZXN0UmVx
dWVzdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7CkBAIC02OCw3ICs2MCw2IEBAIGNsYXNzIFNjcm9s
bGJhcjsKIGNsYXNzIFN0cmluZzsKIGNsYXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKIGNsYXNzIFRl
eHRFdmVudDsKLWNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFdpZGdldDsKICAgICAKIGV4
dGVybiBjb25zdCBpbnQgTGlua0RyYWdIeXN0ZXJlc2lzOwpAQCAtMTU5LDIxICsxNTAsMjQgQEAg
cHVibGljOgogICAgIHZvaWQgc2VuZFJlc2l6ZUV2ZW50KCk7CiAgICAgdm9pZCBzZW5kU2Nyb2xs
RXZlbnQoKTsKICAgICAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSAmJiBk
ZWZpbmVkKF9fT0JKQ19fKQogICAgIFBhc3NSZWZQdHI8S2V5Ym9hcmRFdmVudD4gY3VycmVudEtl
eWJvYXJkRXZlbnQoKSBjb25zdDsKIAotICAgIHZvaWQgbW91c2VEb3duKE5TRXZlbnQqKTsKLSAg
ICB2b2lkIG1vdXNlRHJhZ2dlZChOU0V2ZW50Kik7Ci0gICAgdm9pZCBtb3VzZVVwKE5TRXZlbnQq
KTsKLSAgICB2b2lkIG1vdXNlTW92ZWQoTlNFdmVudCopOwotICAgIGJvb2wga2V5RXZlbnQoTlNF
dmVudCopOwotICAgIGJvb2wgd2hlZWxFdmVudChOU0V2ZW50Kik7CisgICAgdm9pZCBtb3VzZURv
d24oTlNFdmVudCAqKTsKKyAgICB2b2lkIG1vdXNlRHJhZ2dlZChOU0V2ZW50ICopOworICAgIHZv
aWQgbW91c2VVcChOU0V2ZW50ICopOworICAgIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50ICopOwor
ICAgIGJvb2wga2V5RXZlbnQoTlNFdmVudCAqKTsKKyAgICBib29sIHdoZWVsRXZlbnQoTlNFdmVu
dCAqKTsKKworICAgIGJvb2wgc2VuZENvbnRleHRNZW51RXZlbnQoTlNFdmVudCAqKTsKKyAgICBi
b29sIGV2ZW50TWF5U3RhcnREcmFnKE5TRXZlbnQgKik7CiAKLSAgICB2b2lkIHNlbmRGYWtlRXZl
bnRzQWZ0ZXJXaWRnZXRUcmFja2luZyhOU0V2ZW50KiBpbml0aWF0aW5nRXZlbnQpOworICAgIHZv
aWQgc2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRyYWNraW5nKE5TRXZlbnQgKmluaXRpYXRpbmdF
dmVudCk7CiAKICAgICB2b2lkIHNldEFjdGl2YXRpb25FdmVudE51bWJlcihpbnQgbnVtKSB7IG1f
YWN0aXZhdGlvbkV2ZW50TnVtYmVyID0gbnVtOyB9CiAKLSAgICBOU0V2ZW50ICpjdXJyZW50TlNF
dmVudCgpOworICAgIHN0YXRpYyBOU0V2ZW50ICpjdXJyZW50TlNFdmVudCgpOwogI2VuZGlmCiAK
IHByaXZhdGU6CkBAIC0xOTMsOCArMTg3LDggQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPENs
aXBib2FyZD4gY3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdDsKICAgICAKICAgICBib29s
IGV2ZW50QWN0aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25zdDsKLSAg
ICB2b2lkIHNlbGVjdENsb3Nlc3RXb3JkRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdp
dGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpOwotICAgIHZvaWQgc2VsZWN0Q2xvc2VzdFdvcmRPckxp
bmtGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVu
dCk7CisgICAgdm9pZCBzZWxlY3RDbG9zZXN0V29yZEZyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKKyAgICB2b2lkIHNlbGVjdENsb3Nlc3RXb3JkT3JM
aW5rRnJvbU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwog
CiAgICAgYm9vbCBoYW5kbGVNb3VzZURvdWJsZUNsaWNrRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50Jik7CiAKQEAgLTI2NiwxNCArMjYwLDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZSBm
b2xsb3dpbmcgYXJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGhhbmRsZU1vdXNlVXAgYW5k
IGhhbmRsZURyYWcuICAKICAgICAvLyBJZiB0aGV5IHJldHVybiB0cnVlIGl0IGluZGljYXRlcyB0
aGF0IHRoZXkgaGF2ZSBjb25zdW1lZCB0aGUgZXZlbnQuCi0jaWYgUExBVEZPUk0oTUFDKQogICAg
IGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VVcChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RS
ZXN1bHRzJik7CiAgICAgYm9vbCBldmVudExvb3BIYW5kbGVNb3VzZURyYWdnZWQoY29uc3QgTW91
c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwotICAgIE5TVmlldyAqbW91c2VEb3duVmlld0lm
U3RpbGxHb29kKCk7Ci0jZWxzZQotICAgIGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VVcChjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBi
b29sIGV2ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJikgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgogCiAgICAgYm9vbCBpbnZlcnRT
ZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCopIGNvbnN0OwogCkBAIC0yODEsNiArMjY5
LDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIGNhcHR1cmVzRHJhZ2dpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2NhcHR1cmVzRHJhZ2dpbmc7IH0KIAorI2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5l
ZChfX09CSkNfXykKKyAgICBOU1ZpZXcgKm1vdXNlRG93blZpZXdJZlN0aWxsR29vZCgpOworCisg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSBjb25zdDsK
KyNlbmRpZgorCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBib29sIG1fbW91c2VQcmVzc2Vk
OwpAQCAtMzA0LDYgKzI5OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2F1dG9zY3JvbGxJblBy
b2dyZXNzOwogICAgIGJvb2wgbV9tb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGw7CiAgICAgYm9v
bCBtX21vdXNlRG93bldhc0luU3ViZnJhbWU7CisKICNpZiBFTkFCTEUoU1ZHKQogICAgIGJvb2wg
bV9zdmdQYW47CiAgICAgUmVmUHRyPFNWR0VsZW1lbnRJbnN0YW5jZT4gbV9pbnN0YW5jZVVuZGVy
TW91c2U7CkBAIC0zMzgsNyArMzMzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2VuZGluZ0V2
ZW50VG9TdWJ2aWV3OwogICAgIGludCBtX2FjdGl2YXRpb25FdmVudE51bWJlcjsKICNlbmRpZgot
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDQ0MzA5
KQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIy
MSw3IEBAIEZyYW1lVmlldyogRnJhbWU6OnZpZXcoKSBjb25zdAogICAgIHJldHVybiBtX3ZpZXcu
Z2V0KCk7CiB9CiAKLXZvaWQgRnJhbWU6OnNldFZpZXcoRnJhbWVWaWV3KiB2aWV3KQordm9pZCBG
cmFtZTo6c2V0VmlldyhQYXNzUmVmUHRyPEZyYW1lVmlldz4gdmlldykKIHsKICAgICAvLyBEZXRh
Y2ggdGhlIGRvY3VtZW50IG5vdywgc28gYW55IG9uVW5sb2FkIGhhbmRsZXJzIGdldCBydW4gLSBp
ZgogICAgIC8vIHdlIHdhaXQgdW50aWwgdGhlIHZpZXcgaXMgZGVzdHJveWVkLCB0aGVuIHRoaW5n
cyB3b24ndCBiZQpAQCAtMTc1MSwyMCArMTc1MSwxOCBAQCB2b2lkIEZyYW1lOjpjcmVhdGVWaWV3
KGNvbnN0IEludFNpemUmIHZpCiAKICAgICBzZXRWaWV3KDApOwogCi0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXc7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gZnJhbWVWaWV3OwogICAgIGlmIChpc01h
aW5GcmFtZSkgewotICAgICAgICBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3KHRoaXMsIHZpZXdw
b3J0U2l6ZSk7CisgICAgICAgIGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRlKHRoaXMsIHZp
ZXdwb3J0U2l6ZSk7CiAgICAgICAgIGZyYW1lVmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKGZpeGVk
TGF5b3V0U2l6ZSk7CiAgICAgICAgIGZyYW1lVmlldy0+c2V0VXNlRml4ZWRMYXlvdXQodXNlRml4
ZWRMYXlvdXQpOwogICAgIH0gZWxzZQotICAgICAgICBmcmFtZVZpZXcgPSBuZXcgRnJhbWVWaWV3
KHRoaXMpOworICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZSh0aGlzKTsKIAog
ICAgIGZyYW1lVmlldy0+c2V0U2Nyb2xsYmFyTW9kZXMoaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUs
IHZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7CiAgICAgZnJhbWVWaWV3LT51cGRhdGVEZWZhdWx0U2Ny
b2xsYmFyU3RhdGUoKTsKIAogICAgIHNldFZpZXcoZnJhbWVWaWV3KTsKLSAgICAvLyBGcmFtZVZp
ZXdzIGFyZSBjcmVhdGVkIHdpdGggYSByZWYgY291bnQgb2YgMS4gUmVsZWFzZSB0aGlzIHJlZiBz
aW5jZSB3ZSd2ZSBhc3NpZ25lZCBpdCB0byBmcmFtZS4KLSAgICBmcmFtZVZpZXctPmRlcmVmKCk7
CiAKICAgICBpZiAoYmFja2dyb3VuZENvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgZnJhbWVWaWV3
LT51cGRhdGVCYWNrZ3JvdW5kUmVjdXJzaXZlbHkoYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVu
dCk7CkBAIC0xNzczLDcgKzE3NzEsNyBAQCB2b2lkIEZyYW1lOjpjcmVhdGVWaWV3KGNvbnN0IElu
dFNpemUmIHZpCiAgICAgICAgIGZyYW1lVmlldy0+c2V0UGFyZW50VmlzaWJsZSh0cnVlKTsKIAog
ICAgIGlmIChvd25lclJlbmRlcmVyKCkpCi0gICAgICAgIG93bmVyUmVuZGVyZXIoKS0+c2V0V2lk
Z2V0KGZyYW1lVmlldyk7CisgICAgICAgIG93bmVyUmVuZGVyZXIoKS0+c2V0V2lkZ2V0KGZyYW1l
Vmlldy5nZXQoKSk7CiAKICAgICBpZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG93
bmVyRWxlbWVudCgpKQogICAgICAgICB2aWV3KCktPnNldENhbkhhdmVTY3JvbGxiYXJzKG93bmVy
LT5zY3JvbGxpbmdNb2RlKCkgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKSW5kZXg6IFdlYkNvcmUv
cGFnZS9GcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5oCShyZXZpc2lv
biA0NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01LDcg
KzUsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAyMDAwLTIwMDEgU2ltb24gSGF1c21hbm4g
PGhhdXNtYW5uQGtkZS5vcmc+CiAgKiAgICAgICAgICAgICAgICAgICAgIDIwMDAtMjAwMSBEaXJr
IE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KICAqICAgICAgICAgICAgICAgICAgICAgMjAwMCBT
dGVmYW4gU2NoaW1hbnNraSA8MVN0ZWluQGdteC5kZT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAy
MDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgpAQCAtOTEsNyArOTEsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZyYW1lKHBhZ2UsIG93
bmVyRWxlbWVudCwgY2xpZW50KSk7CiAgICAgfQotICAgIHZvaWQgc2V0VmlldyhGcmFtZVZpZXcq
KTsKKyAgICB2b2lkIHNldFZpZXcoUGFzc1JlZlB0cjxGcmFtZVZpZXc+KTsKICAgICB+RnJhbWUo
KTsKICAgICAKICAgICB2b2lkIGluaXQoKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCShyZXZpc2lvbiA0
NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAKICNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZp
c2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MCw4ICs5MCw3IEBAIHN0cnVjdCBTY2hlZHVsZWRFdmVudCB7CiB9OwogCiBGcmFtZVZp
ZXc6OkZyYW1lVmlldyhGcmFtZSogZnJhbWUpCi0gICAgOiBtX3JlZkNvdW50KDEpCi0gICAgLCBt
X2ZyYW1lKGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fdm1vZGUoU2Nyb2xs
YmFyQXV0bykKICAgICAsIG1faG1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAsIG1fc2xvd1JlcGFp
bnRPYmplY3RDb3VudCgwKQpAQCAtMTEzLDM1ICsxMTIsMjEgQEAgRnJhbWVWaWV3OjpGcmFtZVZp
ZXcoRnJhbWUqIGZyYW1lKQogICAgICwgbV9zZXROZWVkc0xheW91dFdhc0RlZmVycmVkKGZhbHNl
KQogewogICAgIGluaXQoKTsKLSAgICBzaG93KCk7CiB9CiAKLUZyYW1lVmlldzo6RnJhbWVWaWV3
KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUpCi0gICAgOiBtX3JlZkNv
dW50KDEpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV92bW9kZShTY3JvbGxiYXJBdXRv
KQotICAgICwgbV9obW9kZShTY3JvbGxiYXJBdXRvKQotICAgICwgbV9zbG93UmVwYWludE9iamVj
dENvdW50KDApCi0gICAgLCBtX2xheW91dFRpbWVyKHRoaXMsICZGcmFtZVZpZXc6OmxheW91dFRp
bWVyRmlyZWQpCi0gICAgLCBtX2xheW91dFJvb3QoMCkKLSAgICAsIG1fcG9zdExheW91dFRhc2tz
VGltZXIodGhpcywgJkZyYW1lVmlldzo6cG9zdExheW91dFRpbWVyRmlyZWQpCi0gICAgLCBtX25l
ZWRUb0luaXRTY3JvbGxiYXJzKHRydWUpCi0gICAgLCBtX2lzVHJhbnNwYXJlbnQoZmFsc2UpCi0g
ICAgLCBtX2Jhc2VCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9tZWRpYVR5
cGUoInNjcmVlbiIpCi0gICAgLCBtX2VucXVldWVFdmVudHMoMCkKLSAgICAsIG1fb3ZlcmZsb3dT
dGF0dXNEaXJ0eSh0cnVlKQotICAgICwgbV92aWV3cG9ydFJlbmRlcmVyKDApCi0gICAgLCBtX3dh
c1Njcm9sbGVkQnlVc2VyKGZhbHNlKQotICAgICwgbV9pblByb2dyYW1tYXRpY1Njcm9sbChmYWxz
ZSkKLSAgICAsIG1fZGVmZXJyZWRSZXBhaW50VGltZXIodGhpcywgJkZyYW1lVmlldzo6ZGVmZXJy
ZWRSZXBhaW50VGltZXJGaXJlZCkKLSAgICAsIG1fc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4o
dHJ1ZSkKLSAgICAsIG1fZGVmZXJTZXROZWVkc0xheW91dHMoMCkKLSAgICAsIG1fc2V0TmVlZHNM
YXlvdXRXYXNEZWZlcnJlZChmYWxzZSkKK1Bhc3NSZWZQdHI8RnJhbWVWaWV3PiBGcmFtZVZpZXc6
OmNyZWF0ZShGcmFtZSogZnJhbWUpCiB7Ci0gICAgaW5pdCgpOwotICAgIFdpZGdldDo6c2V0RnJh
bWVSZWN0KEludFJlY3QoeCgpLCB5KCksIGluaXRpYWxTaXplLndpZHRoKCksIGluaXRpYWxTaXpl
LmhlaWdodCgpKSk7Ci0gICAgc2hvdygpOworICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXcgPSBh
ZG9wdFJlZihuZXcgRnJhbWVWaWV3KGZyYW1lKSk7CisgICAgdmlldy0+c2hvdygpOworICAgIHJl
dHVybiB2aWV3LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxGcmFtZVZpZXc+IEZyYW1lVmll
dzo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUpCit7Cisg
ICAgUmVmUHRyPEZyYW1lVmlldz4gdmlldyA9IGFkb3B0UmVmKG5ldyBGcmFtZVZpZXcoZnJhbWUp
KTsKKyAgICB2aWV3LT5XaWRnZXQ6OnNldEZyYW1lUmVjdChJbnRSZWN0KHZpZXctPnBvcygpLCBp
bml0aWFsU2l6ZSkpOworICAgIHZpZXctPnNob3coKTsKKyAgICByZXR1cm4gdmlldy5yZWxlYXNl
KCk7CiB9CiAKIEZyYW1lVmlldzo6fkZyYW1lVmlldygpCkBAIC0xNTYsNyArMTQxLDYgQEAgRnJh
bWVWaWV3Ojp+RnJhbWVWaWV3KCkKICAgICBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGZhbHNl
KTsgLy8gUmVtb3ZlIG5hdGl2ZSBzY3JvbGxiYXJzIG5vdyBiZWZvcmUgd2UgbG9zZSB0aGUgY29u
bmVjdGlvbiB0byB0aGUgSG9zdFdpbmRvdy4KICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihm
YWxzZSk7CiAgICAgCi0gICAgQVNTRVJUKG1fcmVmQ291bnQgPT0gMCk7CiAgICAgQVNTRVJUKG1f
c2NoZWR1bGVkRXZlbnRzLmlzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX2VucXVldWVFdmVudHMp
OwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDEyIEBAIGNsYXNzIFN0cmluZzsK
IAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFRpbWVyOwogCi1jbGFzcyBGcmFtZVZpZXcg
OiBwdWJsaWMgU2Nyb2xsVmlldyB7CitjbGFzcyBGcmFtZVZpZXcgOiBwdWJsaWMgU2Nyb2xsVmll
dywgcHVibGljIFJlZkNvdW50ZWQ8RnJhbWVWaWV3PiB7CiBwdWJsaWM6CiAgICAgZnJpZW5kIGNs
YXNzIFJlbmRlclZpZXc7CiAKLSAgICBGcmFtZVZpZXcoRnJhbWUqKTsKLSAgICBGcmFtZVZpZXco
RnJhbWUqLCBjb25zdCBJbnRTaXplJiBpbml0aWFsU2l6ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RnJhbWVWaWV3PiBjcmVhdGUoRnJhbWUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGcmFt
ZVZpZXc+IGNyZWF0ZShGcmFtZSosIGNvbnN0IEludFNpemUmIGluaXRpYWxTaXplKTsKIAogICAg
IHZpcnR1YWwgfkZyYW1lVmlldygpOwogCkBAIC02NCwxMCArNjQsNiBAQCBwdWJsaWM6CiAgICAg
RnJhbWUqIGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZS5nZXQoKTsgfQogICAgIHZvaWQg
Y2xlYXJGcmFtZSgpOwogCi0gICAgdm9pZCByZWYoKSB7ICsrbV9yZWZDb3VudDsgfQotICAgIHZv
aWQgZGVyZWYoKSB7IGlmICghLS1tX3JlZkNvdW50KSBkZWxldGUgdGhpczsgfQotICAgIGJvb2wg
aGFzT25lUmVmKCkgeyByZXR1cm4gbV9yZWZDb3VudCA9PSAxOyB9Ci0KICAgICBpbnQgbWFyZ2lu
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbnMud2lkdGgoKTsgfSAvLyAtMSBtZWFucyBk
ZWZhdWx0CiAgICAgaW50IG1hcmdpbkhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2lucy5o
ZWlnaHQoKTsgfSAvLyAtMSBtZWFucyBkZWZhdWx0CiAgICAgdm9pZCBzZXRNYXJnaW5XaWR0aChp
bnQpOwpAQCAtMTkwLDYgKzE4Niw4IEBAIHB1YmxpYzoKIAogCiBwcml2YXRlOgorICAgIEZyYW1l
VmlldyhGcmFtZSopOworCiAgICAgdm9pZCByZXNldCgpOwogICAgIHZvaWQgaW5pdCgpOwogCkBA
IC0yMjIsNyArMjIwLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgZG91YmxlIHNDdXJy
ZW50UGFpbnRUaW1lU3RhbXA7IC8vIHVzZWQgZm9yIGRldGVjdGluZyBkZWNvZGVkIHJlc291cmNl
IHRocmFzaCBpbiB0aGUgY2FjaGUKIAotICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CiAgICAgSW50
U2l6ZSBtX3NpemU7CiAgICAgSW50U2l6ZSBtX21hcmdpbnM7CiAgICAgT3duUHRyPEhhc2hTZXQ8
UmVuZGVyUGFydE9iamVjdCo+ID4gbV93aWRnZXRVcGRhdGVTZXQ7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjEsNyArNjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGRvdWJsZSBFdmVu
dEhhbmRsZXI6OlRleHREcmFnRGVsYXkgPSAwLjE1OwogCi1zdGF0aWMgUmV0YWluUHRyPE5TRXZl
bnQ+JiBjdXJyZW50RXZlbnQoKQorc3RhdGljIFJldGFpblB0cjxOU0V2ZW50PiYgY3VycmVudE5T
RXZlbnRTbG90KCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFJldGFpblB0cjxOU0V2ZW50
PiwgZXZlbnQsICgpKTsKICAgICByZXR1cm4gZXZlbnQ7CkBAIC02OSwxOSArNjksNDYgQEAgc3Rh
dGljIFJldGFpblB0cjxOU0V2ZW50PiYgY3VycmVudEV2ZW50KAogCiBOU0V2ZW50ICpFdmVudEhh
bmRsZXI6OmN1cnJlbnROU0V2ZW50KCkKIHsKLSAgICByZXR1cm4gY3VycmVudEV2ZW50KCkuZ2V0
KCk7CisgICAgcmV0dXJuIGN1cnJlbnROU0V2ZW50U2xvdCgpLmdldCgpOworfQorCitjbGFzcyBD
dXJyZW50RXZlbnRTY29wZSA6IE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDdXJyZW50RXZl
bnRTY29wZShOU0V2ZW50ICopOworICAgIH5DdXJyZW50RXZlbnRTY29wZSgpOworCitwcml2YXRl
OgorICAgIFJldGFpblB0cjxOU0V2ZW50PiBtX3NhdmVkQ3VycmVudEV2ZW50OworI2lmbmRlZiBO
REVCVUcKKyAgICBSZXRhaW5QdHI8TlNFdmVudD4gbV9ldmVudDsKKyNlbmRpZgorfTsKKworaW5s
aW5lIEN1cnJlbnRFdmVudFNjb3BlOjpDdXJyZW50RXZlbnRTY29wZShOU0V2ZW50ICpldmVudCkK
KyAgICA6IG1fc2F2ZWRDdXJyZW50RXZlbnQoY3VycmVudE5TRXZlbnRTbG90KCkpCisjaWZuZGVm
IE5ERUJVRworICAgICwgbV9ldmVudChldmVudCkKKyNlbmRpZgoreworICAgIGN1cnJlbnROU0V2
ZW50U2xvdCgpID0gZXZlbnQ7Cit9CisKK2lubGluZSBDdXJyZW50RXZlbnRTY29wZTo6fkN1cnJl
bnRFdmVudFNjb3BlKCkKK3sKKyAgICBBU1NFUlQoY3VycmVudE5TRXZlbnRTbG90KCkgPT0gbV9l
dmVudCk7CisgICAgY3VycmVudE5TRXZlbnRTbG90KCkgPSBtX3NhdmVkQ3VycmVudEV2ZW50Owog
fQogCiBib29sIEV2ZW50SGFuZGxlcjo6d2hlZWxFdmVudChOU0V2ZW50ICpldmVudCkKIHsKLSAg
ICBSZXRhaW5QdHI8TlNFdmVudD4gb2xkQ3VycmVudEV2ZW50ID0gY3VycmVudEV2ZW50KCk7Ci0g
ICAgY3VycmVudEV2ZW50KCkgPSBldmVudDsKKyAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUGxhdGZv
cm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgIGhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOwogCi0gICAgQVNT
RVJUKGN1cnJlbnRFdmVudCgpID09IGV2ZW50KTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IG9sZEN1
cnJlbnRFdmVudDsKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCwgcGFn
ZS0+Y2hyb21lKCktPnBsYXRmb3JtV2luZG93KCkpOworICAgIGhhbmRsZVdoZWVsRXZlbnQod2hl
ZWxFdmVudCk7CiAKICAgICByZXR1cm4gd2hlZWxFdmVudC5pc0FjY2VwdGVkKCk7CiB9CkBAIC0x
NjUsMjAgKzE5MiwxMiBAQCBib29sIEV2ZW50SGFuZGxlcjo6bmVlZHNLZXlib2FyZEV2ZW50RGlz
CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjprZXlFdmVudChOU0V2ZW50ICpldmVudCkKIHsKLSAgICBi
b29sIHJlc3VsdDsKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBBU1NF
UlQoW2V2ZW50IHR5cGVdID09IE5TS2V5RG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNLZXlVcCk7
CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gb2xkQ3VycmVudEV2ZW50ID0gY3VycmVudEV2ZW50
KCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBldmVudDsKLQotICAgIHJlc3VsdCA9IGtleUV2ZW50
KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOwotICAgIAotICAgIEFTU0VSVChjdXJyZW50
RXZlbnQoKSA9PSBldmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBvbGRDdXJyZW50RXZlbnQ7
Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50
KTsKKyAgICByZXR1cm4ga2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7CiAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0yMjAsMTcgKzIzOSwxNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2CiAKIHN0YXRpYyBib29sIGxh
c3RFdmVudElzTW91c2VVcCgpCiB7Ci0gICAgLy8gTWFueSBBSyB3aWRnZXRzIHJ1biB0aGVpciBv
d24gZXZlbnQgbG9vcHMgYW5kIGNvbnN1bWUgZXZlbnRzIHdoaWxlIHRoZSBtb3VzZSBpcyBkb3du
LgotICAgIC8vIFdoZW4gdGhleSBmaW5pc2gsIGN1cnJlbnRFdmVudCBpcyB0aGUgbW91c2VVcCB0
aGF0IHRoZXkgZXhpdGVkIG9uLiAgV2UgbmVlZCB0byB1cGRhdGUKLSAgICAvLyB0aGUga2h0bWwg
c3RhdGUgd2l0aCB0aGlzIG1vdXNlVXAsIHdoaWNoIGtodG1sIG5ldmVyIHNhdy4gIFRoaXMgbWV0
aG9kIGxldHMgdXMgZGV0ZWN0Ci0gICAgLy8gdGhhdCBzdGF0ZS4KKyAgICAvLyBNYW55IEFwcEtp
dCB3aWRnZXRzIHJ1biB0aGVpciBvd24gZXZlbnQgbG9vcHMgYW5kIGNvbnN1bWUgZXZlbnRzIHdo
aWxlIHRoZSBtb3VzZSBpcyBkb3duLgorICAgIC8vIFdoZW4gdGhleSBmaW5pc2gsIGN1cnJlbnRF
dmVudCBpcyB0aGUgbW91c2VVcCB0aGF0IHRoZXkgZXhpdGVkIG9uLiBXZSBuZWVkIHRvIHVwZGF0
ZQorICAgIC8vIHRoZSBXZWJDb3JlIHN0YXRlIHdpdGggdGhpcyBtb3VzZVVwLCB3aGljaCB3ZSBu
ZXZlciBzYXcuIFRoaXMgbWV0aG9kIGxldHMgdXMgZGV0ZWN0CisgICAgLy8gdGhhdCBzdGF0ZS4g
SGFuZGxpbmcgdGhpcyB3YXMgY3JpdGljYWwgd2hlbiB3ZSB1c2VkIEFwcEtpdCB3aWRnZXRzIGZv
ciBmb3JtIGVsZW1lbnRzLgorICAgIC8vIEl0J3Mgbm90IGNsZWFyIGluIHdoYXQgY2FzZXMgdGhp
cyBpcyBoZWxwZnVsIG5vdyAtLSBpdCdzIHBvc3NpYmxlIGl0IGNhbiBiZSByZW1vdmVkLiAKIAog
ICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICBOU0V2ZW50ICpjdXJyZW50RXZl
bnRBZnRlckhhbmRsaW5nTW91c2VEb3duID0gW05TQXBwIGN1cnJlbnRFdmVudF07Ci0gICAgaWYg
KGN1cnJlbnRFdmVudCgpICE9IGN1cnJlbnRFdmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gJiYK
LSAgICAgICAgW2N1cnJlbnRFdmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gdHlwZV0gPT0gTlNM
ZWZ0TW91c2VVcCAmJgotICAgICAgICBbY3VycmVudEV2ZW50QWZ0ZXJIYW5kbGluZ01vdXNlRG93
biB0aW1lc3RhbXBdID49IFtjdXJyZW50RXZlbnQoKS5nZXQoKSB0aW1lc3RhbXBdKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZl
bnQoKSAhPSBjdXJyZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duCisgICAgICAgICYmIFtj
dXJyZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duIHR5cGVdID09IE5TTGVmdE1vdXNlVXAK
KyAgICAgICAgJiYgW2N1cnJlbnRFdmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gdGltZXN0YW1w
XSA+PSBbRXZlbnRIYW5kbGVyOjpjdXJyZW50TlNFdmVudCgpIHRpbWVzdGFtcF07CiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTIzOCw3ICsy
NTcsOCBAQCBzdGF0aWMgYm9vbCBsYXN0RXZlbnRJc01vdXNlVXAoKQogCiBib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAg
Ly8gRklYTUU6IHRoaXMgbWV0aG9kIGFsd2F5cyByZXR1cm5zIHRydWUKKyAgICAvLyBGSVhNRTog
VGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyB0cnVlLiBJdCBzaG91bGQgYmUgY2hhbmdlZCBl
aXRoZXIgdG8gcmV0dXJuCisgICAgLy8gZmFsc2UgaW4gc29tZSBjYXNlcyBvciB0aGUgcmV0dXJu
IHZhbHVlIHNob3VsZCBiZSByZW1vdmVkLgogCiAgICAgaWYgKCF3aWRnZXQpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJoaXQgYSBSZW5kZXJXaWRnZXQgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgV2lk
Z2V0LCBtZWFucyBhIGZyYW1lIGlzIGhhbGYtY29uc3RydWN0ZWQiKTsKQEAgLTI1MCw3ICsyNzAs
NyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XCiAgICAgTlNWaWV3
ICpub2RlVmlldyA9IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKTsKICAgICBBU1NFUlQobm9kZVZp
ZXcpOwogICAgIEFTU0VSVChbbm9kZVZpZXcgc3VwZXJ2aWV3XSk7Ci0gICAgTlNWaWV3ICp2aWV3
ID0gW25vZGVWaWV3IGhpdFRlc3Q6W1tub2RlVmlldyBzdXBlcnZpZXddIGNvbnZlcnRQb2ludDpb
Y3VycmVudEV2ZW50KCkuZ2V0KCkgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXV07Cisg
ICAgTlNWaWV3ICp2aWV3ID0gW25vZGVWaWV3IGhpdFRlc3Q6W1tub2RlVmlldyBzdXBlcnZpZXdd
IGNvbnZlcnRQb2ludDpbY3VycmVudE5TRXZlbnQoKSBsb2NhdGlvbkluV2luZG93XSBmcm9tVmll
dzpuaWxdXTsKICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgLy8gV2UgcHJvYmFibHkgaGl0IHRo
ZSBib3JkZXIgb2YgYSBSZW5kZXJXaWRnZXQKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNjMs
NyArMjgzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvVwogICAg
IGlmIChwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmZpcnN0UmVzcG9uZGVyKCkgIT0gdmlldykg
ewogICAgICAgICAvLyBOb3JtYWxseSBbTlNXaW5kb3cgc2VuZEV2ZW50Ol0gaGFuZGxlcyBzZXR0
aW5nIHRoZSBmaXJzdCByZXNwb25kZXIuCiAgICAgICAgIC8vIEJ1dCBpbiBvdXIgY2FzZSwgdGhl
IGV2ZW50IHdhcyBzZW50IHRvIHRoZSB2aWV3IHJlcHJlc2VudGluZyB0aGUgZW50aXJlIHdlYiBw
YWdlLgotICAgICAgICBpZiAoW2N1cnJlbnRFdmVudCgpLmdldCgpIGNsaWNrQ291bnRdIDw9IDEg
JiYgW3ZpZXcgYWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSAmJiBbdmlldyBuZWVkc1BhbmVsVG9CZWNv
bWVLZXldKQorICAgICAgICBpZiAoW2N1cnJlbnROU0V2ZW50KCkgY2xpY2tDb3VudF0gPD0gMSAm
JiBbdmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdICYmIFt2aWV3IG5lZWRzUGFuZWxUb0JlY29t
ZUtleV0pCiAgICAgICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPm1ha2VGaXJzdFJl
c3BvbmRlcih2aWV3KTsKICAgICB9CiAKQEAgLTI4MCw3ICszMDAsNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XCiAKICAgICBBU1NFUlQoIW1fc2VuZGluZ0V2ZW50
VG9TdWJ2aWV3KTsKICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IHRydWU7Ci0gICAgW3Zp
ZXcgbW91c2VEb3duOmN1cnJlbnRFdmVudCgpLmdldCgpXTsKKyAgICBbdmlldyBtb3VzZURvd246
Y3VycmVudE5TRXZlbnQoKV07CiAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsK
ICAgICAKICAgICBpZiAoIXdhc0RlZmVycmluZ0xvYWRpbmcpCkBAIC0zNTUsNyArMzc1LDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OmV2ZW50TG9vcEhhbmRsZU1vdXNlRAogICAgICAgICBBU1NFUlQo
IW1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3KTsKICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZp
ZXcgPSB0cnVlOwogICAgICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgICAg
IFt2aWV3IG1vdXNlRHJhZ2dlZDpjdXJyZW50RXZlbnQoKS5nZXQoKV07CisgICAgICAgIFt2aWV3
IG1vdXNlRHJhZ2dlZDpjdXJyZW50TlNFdmVudCgpXTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsKICAg
ICB9CkBAIC0zODIsNyArNDAyLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50TG9vcEhhbmRs
ZU1vdXNlVQogICAgICAgICBBU1NFUlQoIW1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3KTsKICAgICAg
ICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0cnVlOwogICAgICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0gICAgICAgIFt2aWV3IG1vdXNlVXA6Y3VycmVudEV2ZW50KCkuZ2V0
KCldOworICAgICAgICBbdmlldyBtb3VzZVVwOmN1cnJlbnROU0V2ZW50KCldOwogICAgICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgICAgICBtX3NlbmRpbmdFdmVudFRvU3Vidmll
dyA9IGZhbHNlOwogICAgIH0KQEAgLTM5NCw3ICs0MTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
cGFzc1N1YmZyYW1lRXZlbnRUb1N1CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwogCi0gICAgc3dpdGNoIChbY3VycmVudEV2ZW50KCkuZ2V0KCkgdHlwZV0pIHsKKyAgICBzd2l0
Y2ggKFtjdXJyZW50TlNFdmVudCgpIHR5cGVdKSB7CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VE
cmFnZ2VkOgogICAgICAgICBjYXNlIE5TT3RoZXJNb3VzZURyYWdnZWQ6CiAgICAgICAgIGNhc2Ug
TlNSaWdodE1vdXNlRHJhZ2dlZDoKQEAgLTQwNSwxMiArNDI1LDEyIEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpwYXNzU3ViZnJhbWVFdmVudFRvU3UKICAgICAgICAgICAgIGlmIChzdWJmcmFtZS0+cGFn
ZSgpLT5kcmFnQ29udHJvbGxlcigpLT5kaWRJbml0aWF0ZURyYWcoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2UgTlNNb3VzZU1vdmVkOgotICAgICAgICAgICAg
Ly8gU2luY2Ugd2UncmUgcGFzc2luZyBpbiBjdXJyZW50RXZlbnQoKSBoZXJlLCB3ZSBjYW4gY2Fs
bAorICAgICAgICAgICAgLy8gU2luY2Ugd2UncmUgcGFzc2luZyBpbiBjdXJyZW50TlNFdmVudCgp
IGhlcmUsIHdlIGNhbiBjYWxsCiAgICAgICAgICAgICAvLyBoYW5kbGVNb3VzZU1vdmVFdmVudCgp
IGRpcmVjdGx5LCBzaW5jZSB0aGUgc2F2ZS9yZXN0b3JlIG9mCi0gICAgICAgICAgICAvLyBjdXJy
ZW50RXZlbnQoKSB0aGF0IG1vdXNlTW92ZWQoKSBkb2VzIHdvdWxkIGhhdmUgbm8gZWZmZWN0Lgor
ICAgICAgICAgICAgLy8gY3VycmVudE5TRXZlbnQoKSB0aGF0IG1vdXNlTW92ZWQoKSBkb2VzIHdv
dWxkIGhhdmUgbm8gZWZmZWN0LgogICAgICAgICAgICAgQVNTRVJUKCFtX3NlbmRpbmdFdmVudFRv
U3Vidmlldyk7CiAgICAgICAgICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IHRydWU7Ci0g
ICAgICAgICAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50
KGN1cnJlbnRFdmVudCgpLmdldCgpLCBob3ZlcmVkTm9kZSk7CisgICAgICAgICAgICBzdWJmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1v
dXNlRXZlbnQoKSwgaG92ZXJlZE5vZGUpOwogICAgICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1
YnZpZXcgPSBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKQEAgLTQz
NCw3ICs0NTQsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgQVNTRVJUKCFtX3NlbmRp
bmdFdmVudFRvU3Vidmlldyk7CiAgICAgICAgICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9
IHRydWU7Ci0gICAgICAgICAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNl
UmVsZWFzZUV2ZW50KGN1cnJlbnRFdmVudCgpLmdldCgpKTsKKyAgICAgICAgICAgIHN1YmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY3VycmVudFBsYXRmb3Jt
TW91c2VFdmVudCgpKTsKICAgICAgICAgICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFs
c2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDg0LDEzICs1MDQs
MTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZQogewogICAgIEJF
R0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKICAgICAgICAgCi0gICAgaWYgKFtjdXJyZW50RXZl
bnQoKS5nZXQoKSB0eXBlXSAhPSBOU1Njcm9sbFdoZWVsIHx8IG1fc2VuZGluZ0V2ZW50VG9TdWJ2
aWV3IHx8ICF3aWRnZXQpIAorICAgIGlmIChbY3VycmVudE5TRXZlbnQoKSB0eXBlXSAhPSBOU1Nj
cm9sbFdoZWVsIHx8IG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3IHx8ICF3aWRnZXQpIAogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBOU1ZpZXcqIG5vZGVWaWV3ID0gd2lkZ2V0LT5wbGF0Zm9y
bVdpZGdldCgpOwogICAgIEFTU0VSVChub2RlVmlldyk7CiAgICAgQVNTRVJUKFtub2RlVmlldyBz
dXBlcnZpZXddKTsKLSAgICBOU1ZpZXcgKnZpZXcgPSBbbm9kZVZpZXcgaGl0VGVzdDpbW25vZGVW
aWV3IHN1cGVydmlld10gY29udmVydFBvaW50OltjdXJyZW50RXZlbnQoKS5nZXQoKSBsb2NhdGlv
bkluV2luZG93XSBmcm9tVmlldzpuaWxdXTsKKyAgICBOU1ZpZXcgKnZpZXcgPSBbbm9kZVZpZXcg
aGl0VGVzdDpbW25vZGVWaWV3IHN1cGVydmlld10gY29udmVydFBvaW50OltjdXJyZW50TlNFdmVu
dCgpIGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF1dOwogICAgIGlmICghdmlldykKICAg
ICAgICAgLy8gV2UgcHJvYmFibHkgaGl0IHRoZSBib3JkZXIgb2YgYSBSZW5kZXJXaWRnZXQKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTAxLDcgKzUyMSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpwYXNzV2hlZWxFdmVudFRvV2lkZ2UKICAgICAvLyBjcmFzaCBpZiB0aGUgTlNTY3JvbGxWaWV3
IGlzIHJlbGVhc2VkIGR1cmluZyB0aW1lciBvciBuZXR3b3JrIGNhbGxiYWNrIGRpc3BhdGNoCiAg
ICAgLy8gaW4gdGhlIG5lc3RlZCB0cmFja2luZyBydW5sb29wIHRoYXQgLVtOU1Njcm9sbFZpZXcg
c2Nyb2xsV2hlZWw6XSBydW5zLgogICAgIHNldE5TU2Nyb2xsVmlld1Njcm9sbFdoZWVsU2hvdWxk
UmV0YWluU2VsZih0cnVlKTsKLSAgICBbdmlldyBzY3JvbGxXaGVlbDpjdXJyZW50RXZlbnQoKS5n
ZXQoKV07CisgICAgW3ZpZXcgc2Nyb2xsV2hlZWw6Y3VycmVudE5TRXZlbnQoKV07CiAgICAgc2V0
TlNTY3JvbGxWaWV3U2Nyb2xsV2hlZWxTaG91bGRSZXRhaW5TZWxmKGZhbHNlKTsKICAgICBtX3Nl
bmRpbmdFdmVudFRvU3VidmlldyA9IGZhbHNlOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTIyLDE0
ICs1NDIsOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VEb3duKE5TRXZlbnQgKmV2CiAKICAg
ICBtX21vdXNlRG93blZpZXcgPSBuaWw7CiAgICAgCi0gICAgUmV0YWluUHRyPE5TRXZlbnQ+IG9s
ZEN1cnJlbnRFdmVudCA9IGN1cnJlbnRFdmVudCgpOwotICAgIGN1cnJlbnRFdmVudCgpID0gZXZl
bnQ7Ci0gICAgbV9tb3VzZURvd24gPSBQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpOwotICAgIAot
ICAgIGhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7Ci0gICAgCi0gICAgQVNTRVJUKGN1cnJl
bnRFdmVudCgpID09IGV2ZW50KTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IG9sZEN1cnJlbnRFdmVu
dDsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCk7CisgICAgbV9tb3VzZURvd24g
PSBjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCk7CisgICAgaGFuZGxlTW91c2VQcmVzc0V2ZW50
KG1fbW91c2VEb3duKTsKIAogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CkBAIC01
NDIsMTMgKzU1Nyw4IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZURyYWdnZWQoTlNFdmVudCAK
IAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0cjxOU0V2
ZW50PiBvbGRDdXJyZW50RXZlbnQgPSBjdXJyZW50RXZlbnQoKTsKLSAgICBjdXJyZW50RXZlbnQo
KSA9IGV2ZW50OwotCi0gICAgaGFuZGxlTW91c2VNb3ZlRXZlbnQoZXZlbnQpOwotICAgIAotICAg
IEFTU0VSVChjdXJyZW50RXZlbnQoKSA9PSBldmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBv
bGRDdXJyZW50RXZlbnQ7CisgICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOworICAg
IGhhbmRsZU1vdXNlTW92ZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7CiAKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQpAQCAtNTYxLDggKzU3MSw3IEBAIHZvaWQg
RXZlbnRIYW5kbGVyOjptb3VzZVVwKE5TRXZlbnQgKmV2ZW4KIAogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBvbGRDdXJyZW50RXZlbnQg
PSBjdXJyZW50RXZlbnQoKTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IGV2ZW50OworICAgIEN1cnJl
bnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKIAogICAgIC8vIE91ciBiZWhhdmlvciBoZXJlIGlz
IGEgbGl0dGxlIGRpZmZlcmVudCB0aGF0IFF0LiBRdCBhbHdheXMgc2VuZHMKICAgICAvLyBhIG1v
dXNlIHJlbGVhc2UgZXZlbnQsIGV2ZW4gZm9yIGEgZG91YmxlIGNsaWNrLiBUbyBjb3JyZWN0IHBy
b2JsZW1zCkBAIC01NzMsMTIgKzU4Miw5IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZVVwKE5T
RXZlbnQgKmV2ZW4KICAgICAvLyB0cmVhdGVkIGFzIGFub3RoZXIgZG91YmxlIGNsaWNrLiBIZW5j
ZSB0aGUgIiUgMiIgYmVsb3cuCiAgICAgaW50IGNsaWNrQ291bnQgPSBbZXZlbnQgY2xpY2tDb3Vu
dF07CiAgICAgaWYgKGNsaWNrQ291bnQgPiAwICYmIGNsaWNrQ291bnQgJSAyID09IDApCi0gICAg
ICAgIGhhbmRsZU1vdXNlRG91YmxlQ2xpY2tFdmVudChldmVudCk7CisgICAgICAgIGhhbmRsZU1v
dXNlRG91YmxlQ2xpY2tFdmVudChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkpOwogICAgIGVs
c2UKLSAgICAgICAgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwotICAgIAotICAgIEFT
U0VSVChjdXJyZW50RXZlbnQoKSA9PSBldmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBvbGRD
dXJyZW50RXZlbnQ7CisgICAgICAgIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGN1cnJlbnRQbGF0
Zm9ybU1vdXNlRXZlbnQoKSk7CiAgICAgCiAgICAgbV9tb3VzZURvd25WaWV3ID0gbmlsOwogCkBA
IC02NTcsMTUgKzY2Myw4IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjptb3VzZU1vdmVkKE5TRXZlbnQg
KmUKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLQotICAgIFJldGFpblB0cjxOU0V2ZW50PiBvbGRDdXJyZW50RXZlbnQgPSBjdXJyZW50RXZl
bnQoKTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IGV2ZW50OwotICAgIAotICAgIG1vdXNlTW92ZWQo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgCi0gICAgQVNTRVJUKGN1cnJlbnRFdmVu
dCgpID09IGV2ZW50KTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IG9sZEN1cnJlbnRFdmVudDsKLQor
ICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBtb3VzZU1vdmVkKGN1cnJl
bnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
IH0KIApAQCAtNjk1LDQgKzY5NCwyOCBAQCB1bnNpZ25lZCBFdmVudEhhbmRsZXI6OmFjY2Vzc0tl
eU1vZGlmaWVyCiAgICAgcmV0dXJuIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q3RybEtleSB8IFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6QWx0S2V5OwogfQogCitQbGF0Zm9ybU1vdXNlRXZlbnQgRXZl
bnRIYW5kbGVyOjpjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkgY29uc3QKK3sKKyAgICBOU1Zp
ZXcgKndpbmRvd1ZpZXcgPSBuaWw7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdl
KCkpCisgICAgICAgIHdpbmRvd1ZpZXcgPSBwYWdlLT5jaHJvbWUoKS0+cGxhdGZvcm1XaW5kb3co
KTsKKyAgICByZXR1cm4gUGxhdGZvcm1Nb3VzZUV2ZW50KGN1cnJlbnROU0V2ZW50KCksIHdpbmRv
d1ZpZXcpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQoTlNF
dmVudCAqZXZlbnQpCit7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc2VuZENvbnRleHRN
ZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBwYWdlLT5jaHJvbWUoKS0+cGxhdGZv
cm1XaW5kb3coKSkpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRNYXlTdGFydERyYWco
TlNFdmVudCAqZXZlbnQpCit7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZXZlbnRNYXlT
dGFydERyYWcoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCBwYWdlLT5jaHJvbWUoKS0+cGxhdGZv
cm1XaW5kb3coKSkpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkocmV2aXNpb24g
NDQzMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTggKzI3LDEzIEBACiAjZGVmaW5lIEhvc3RXaW5kb3dfaAogCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIldpZGdldC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50UmVj
dDsKLQogY2xhc3MgSG9zdFdpbmRvdyA6IE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKLSAgICBIb3N0
V2luZG93KCkge30KLSAgICB2aXJ0dWFsIH5Ib3N0V2luZG93KCkge30KKyAgICB2aXJ0dWFsIH5I
b3N0V2luZG93KCkgeyB9CiAKICAgICAvLyBUaGUgcmVwYWludCBtZXRob2QgYXNrcyB0aGUgaG9z
dCB3aW5kb3cgdG8gcmVwYWludCBhIHJlY3QgaW4gdGhlIHdpbmRvdydzIGNvb3JkaW5hdGUgc3Bh
Y2UuICBUaGUKICAgICAvLyBjb250ZW50Q2hhbmdlZCBib29sZWFuIGluZGljYXRlcyB3aGV0aGVy
IG9yIG5vdCB0aGUgV2ViIHBhZ2UgY29udGVudCBhY3R1YWxseSBjaGFuZ2VkIChvciBpZiBhIHJl
cGFpbnQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAkocmV2aXNpb24g
NDQzMDkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI2ICsyNyw2IEBA
CiAjZGVmaW5lIFBsYXRmb3JtTW91c2VFdmVudF9oCiAKICNpbmNsdWRlICJJbnRQb2ludC5oIgot
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgUExBVEZPUk0oTUFDKQotI2lmZGVmIF9f
T0JKQ19fCi1AY2xhc3MgTlNFdmVudDsKLUBjbGFzcyBOU1NjcmVlbjsKLUBjbGFzcyBOU1dpbmRv
dzsKLSNlbHNlCi1jbGFzcyBOU0V2ZW50OwotY2xhc3MgTlNTY3JlZW47Ci1jbGFzcyBOU1dpbmRv
dzsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi10eXBlZGVmIHN0cnVjdCBI
V05EX18qIEhXTkQ7Ci10eXBlZGVmIHVuc2lnbmVkIFVJTlQ7Ci10eXBlZGVmIHVuc2lnbmVkIFdQ
QVJBTTsKLXR5cGVkZWYgbG9uZyBMUEFSQU07Ci0jZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykK
IHR5cGVkZWYgc3RydWN0IF9HZGtFdmVudEJ1dHRvbiBHZGtFdmVudEJ1dHRvbjsKQEAgLTU5LDYg
KzM5LDEzIEBAIGNsYXNzIFFJbnB1dEV2ZW50OwogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShXSU4pCit0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVm
IHVuc2lnbmVkIFVJTlQ7Cit0eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKK3R5cGVkZWYgbG9uZyBM
UEFSQU07CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdYKQogY2xhc3Mgd3hNb3VzZUV2ZW50Owog
I2VuZGlmCkBAIC04NCw5ICs3MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsK
ICAgICAgICAgfQogCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChjb25zdCBJbnRQb2ludCYg
cG9zLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zLCBNb3VzZUJ1dHRvbiBidXR0b24sIE1vdXNl
RXZlbnRUeXBlIGV2ZW50VHlwZSwKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBNb3VzZUJ1
dHRvbiBidXR0b24sIE1vdXNlRXZlbnRUeXBlIGV2ZW50VHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBjbGlja0NvdW50LCBib29sIHNoaWZ0LCBib29sIGN0cmwsIGJvb2wgYWx0
LCBib29sIG1ldGEsIGRvdWJsZSB0aW1lc3RhbXApCi0gICAgICAgICAgICA6IG1fcG9zaXRpb24o
cG9zKSwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb3MpLCBtX2J1dHRvbihidXR0b24pCisgICAg
ICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICAgICAsIG1fZ2xvYmFsUG9z
aXRpb24oZ2xvYmFsUG9zaXRpb24pCisgICAgICAgICAgICAsIG1fYnV0dG9uKGJ1dHRvbikKICAg
ICAgICAgICAgICwgbV9ldmVudFR5cGUoZXZlbnRUeXBlKQogICAgICAgICAgICAgLCBtX2NsaWNr
Q291bnQoY2xpY2tDb3VudCkKICAgICAgICAgICAgICwgbV9zaGlmdEtleShzaGlmdCkKQEAgLTEx
MiwzMiArMTAxLDM0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtZXRhS2V5
KCkgY29uc3QgeyByZXR1cm4gbV9tZXRhS2V5OyB9CiAgICAgICAgIHVuc2lnbmVkIG1vZGlmaWVy
RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX21vZGlmaWVyRmxhZ3M7IH0KICAgICAgICAgCi0gICAg
ICAgIC8vdGltZSBpbiBzZWNvbmRzCisgICAgICAgIC8vIFRpbWUgaW4gc2Vjb25kcy4KICAgICAg
ICAgZG91YmxlIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9CiAKLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50Kik7Ci0g
ICAgICAgIGludCBldmVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZlbnROdW1iZXI7IH0K
LSNlbmRpZgotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEhX
TkQsIFVJTlQsIFdQQVJBTSwgTFBBUkFNLCBib29sIGFjdGl2YXRlZFdlYlZpZXcgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgc2V0Q2xpY2tDb3VudChpbnQgY291bnQpIHsgbV9jbGlja0NvdW50ID0g
Y291bnQ7IH0KLSAgICAgICAgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4g
bV9hY3RpdmF0ZWRXZWJWaWV3OyB9Ci0jZW5kaWYKICNpZiBQTEFURk9STShHVEspIAogICAgICAg
ICBQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qKTsKICAgICAgICAgUGxhdGZvcm1N
b3VzZUV2ZW50KEdka0V2ZW50TW90aW9uKik7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykg
JiYgZGVmaW5lZChfX09CSkNfXykKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQg
KiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKKyAgICAgICAgaW50IGV2ZW50TnVtYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9ldmVudE51bWJlcjsgfQorI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICAg
ICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KFFJbnB1dEV2ZW50KiwgaW50IGNsaWNrQ291bnQpOwog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChI
V05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSwgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3ID0gZmFsc2Up
OworICAgICAgICB2b2lkIHNldENsaWNrQ291bnQoaW50IGNvdW50KSB7IG1fY2xpY2tDb3VudCA9
IGNvdW50OyB9CisgICAgICAgIGJvb2wgYWN0aXZhdGVkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJu
IG1fYWN0aXZhdGVkV2ViVmlldzsgfQorI2VuZGlmCisKICNpZiBQTEFURk9STShXWCkKICAgICAg
ICAgUGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IHd4TW91c2VFdmVudCYsIGNvbnN0IHd4UG9pbnQm
IGdsb2JhbFBvaW50LCBpbnQgY2xpY2tDb3VudCk7CiAjZW5kaWYKIAotCi0gICAgcHJvdGVjdGVk
OgorICAgIHByaXZhdGU6CiAgICAgICAgIEludFBvaW50IG1fcG9zaXRpb247CiAgICAgICAgIElu
dFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CiAgICAgICAgIE1vdXNlQnV0dG9uIG1fYnV0dG9uOwpA
QCAtMTQ5LDE4ICsxNDAsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1f
bWV0YUtleTsKICAgICAgICAgZG91YmxlIG1fdGltZXN0YW1wOyAvLyB1bml0OiBzZWNvbmRzCiAg
ICAgICAgIHVuc2lnbmVkIG1fbW9kaWZpZXJGbGFnczsKKwogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAgICAgaW50IG1fZXZlbnROdW1iZXI7CiAjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICAgICAgYm9vbCBtX2FjdGl2YXRlZFdlYlZpZXc7CiAjZW5kaWYKICAgICB9OwogCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIEludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRv
d1BvaW50LCBOU1dpbmRvdyAqd2luZG93KTsKLSAgICBJbnRQb2ludCBwb2ludEZvckV2ZW50KE5T
RXZlbnQgKmV2ZW50KTsKLSAgICBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQg
KmV2ZW50KTsKKyNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQoX19PQkpDX18pCisgICAgSW50
UG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93ICop
OworICAgIEludFBvaW50IHBvaW50Rm9yRXZlbnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1Zp
ZXcpOworICAgIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqKTsKICNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtV2hlZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1X
aGVlbEV2ZW50LmgJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVdoZWVsRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOCwyMCArMjgsNiBAQAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKIAotI2lmIFBM
QVRGT1JNKE1BQykKLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIE5TRXZlbnQ7Ci0jZWxzZQotY2xh
c3MgTlNFdmVudDsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi10eXBlZGVm
IHN0cnVjdCBIV05EX18qIEhXTkQ7Ci10eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKLXR5cGVkZWYg
bG9uZyBMUEFSQU07Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3RydWN0
IF9HZGtFdmVudFNjcm9sbCBHZGtFdmVudFNjcm9sbDsKICNlbmRpZgpAQCAtNTIsNiArMzgsMTIg
QEAgY2xhc3MgUVdoZWVsRXZlbnQ7CiBRVF9FTkRfTkFNRVNQQUNFCiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFdJTikKK3R5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsKK3R5cGVkZWYgdW5zaWdu
ZWQgV1BBUkFNOwordHlwZWRlZiBsb25nIExQQVJBTTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0o
V1gpCiBjbGFzcyB3eE1vdXNlRXZlbnQ7CiBjbGFzcyB3eFBvaW50OwpAQCAtOTMsMjMgKzg1LDI3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhY2NlcHQoKSB7IG1faXNBY2Nl
cHRlZCA9IHRydWU7IH0KICAgICAgICAgdm9pZCBpZ25vcmUoKSB7IG1faXNBY2NlcHRlZCA9IGZh
bHNlOyB9CiAKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChO
U0V2ZW50Kik7Ci0jZW5kaWYKLSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIFBsYXRmb3JtV2hl
ZWxFdmVudChIV05ELCBXUEFSQU0sIExQQVJBTSwgYm9vbCBpc01vdXNlSFdoZWVsKTsKLSNlbmRp
ZgogI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50
U2Nyb2xsKik7CiAjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgJiYgZGVmaW5lZChfX09CSkNf
XykKKyAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dW
aWV3KTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudChRV2hlZWxFdmVudCopOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAg
IFBsYXRmb3JtV2hlZWxFdmVudChIV05ELCBXUEFSQU0sIExQQVJBTSwgYm9vbCBpc01vdXNlSFdo
ZWVsKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV1gpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxF
dmVudChjb25zdCB3eE1vdXNlRXZlbnQmLCBjb25zdCB3eFBvaW50Jik7CiAjZW5kaWYKIAotICAg
IHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwog
ICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwogICAgICAgICBmbG9hdCBtX2RlbHRh
WDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtTW91c2VFdmVudE1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybU1vdXNlRXZlbnRNYWMu
bW0JKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Nb3Vz
ZUV2ZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMiArNjgsMTIgQEAgc3RhdGljIGlu
dCBjbGlja0NvdW50Rm9yRXZlbnQoTlNFdmVudCAqZQogICAgIH0KIH0KIAotSW50UG9pbnQgZ2xv
YmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93KiB3aW5kb3cpCitJ
bnRQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5kb3cg
KndpbmRvdykKIHsKICAgICByZXR1cm4gSW50UG9pbnQoZmxpcFNjcmVlblBvaW50KFt3aW5kb3cg
Y29udmVydEJhc2VUb1NjcmVlbjp3aW5kb3dQb2ludF0sIHNjcmVlbkZvcldpbmRvdyh3aW5kb3cp
KSk7CiB9CiAKLUludFBvaW50IHBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCitJbnRQb2lu
dCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCiB7CiAg
ICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKICAgICAgICAgY2FzZSBOU0xlZnRNb3VzZURvd246
CkBAIC04NiwxMSArODYsMTQgQEAgSW50UG9pbnQgcG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVu
dCkKICAgICAgICAgY2FzZSBOU090aGVyTW91c2VVcDoKICAgICAgICAgY2FzZSBOU090aGVyTW91
c2VEcmFnZ2VkOgogICAgICAgICBjYXNlIE5TTW91c2VNb3ZlZDoKLSAgICAgICAgY2FzZSBOU1Nj
cm9sbFdoZWVsOgotICAgICAgICAgICAgLy8gTm90ZTogVGhpcyBoYXMgaXRzIG9yaWdpbiBhdCB0
aGUgYm90dG9tIGxlZnQgb2YgdGhlIHdpbmRvdy4KLSAgICAgICAgICAgIC8vIFRoZSBZIGNvb3Jk
aW5hdGUgZ2V0cyBmbGlwcGVkIGJ5IFNjcm9sbFZpZXc6OnZpZXdwb3J0VG9Db250ZW50cy4KLSAg
ICAgICAgICAgIC8vIFdlIHNob3VsZCBwcm9iYWJseSBjaGFuZ2UgYm90aCB0aGlzIGFuZCB0aGF0
IHRvIG5vdCB1c2UgImJvdHRvbSBsZWZ0IG9yaWdpbiIgY29vcmRpbmF0ZXMgYXQgYWxsLgotICAg
ICAgICAgICAgcmV0dXJuIEludFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSk7CisgICAg
ICAgIGNhc2UgTlNTY3JvbGxXaGVlbDogeworICAgICAgICAgICAgLy8gTm90ZTogVGhpcyB3aWxs
IGhhdmUgaXRzIG9yaWdpbiBhdCB0aGUgYm90dG9tIGxlZnQgb2YgdGhlIHdpbmRvdyB1bmxlc3Mg
d2luZG93VmlldyBpcyBmbGlwcGVkLgorICAgICAgICAgICAgLy8gSW4gdGhvc2UgY2FzZXMsIHRo
ZSBZIGNvb3JkaW5hdGUgZ2V0cyBmbGlwcGVkIGJ5IFdpZGdldDo6Y29udmVydEZyb21Db250YWlu
aW5nV2luZG93LgorICAgICAgICAgICAgTlNQb2ludCBsb2NhdGlvbiA9IFtldmVudCBsb2NhdGlv
bkluV2luZG93XTsKKyAgICAgICAgICAgIGlmICh3aW5kb3dWaWV3KQorICAgICAgICAgICAgICAg
IGxvY2F0aW9uID0gW3dpbmRvd1ZpZXcgY29udmVydFBvaW50OmxvY2F0aW9uIGZyb21WaWV3Om5p
bF07CisgICAgICAgICAgICByZXR1cm4gSW50UG9pbnQobG9jYXRpb24pOworICAgICAgICB9CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKICAgICB9CkBA
IC0xMzksOCArMTQyLDggQEAgc3RhdGljIE1vdXNlRXZlbnRUeXBlIG1vdXNlRXZlbnRGb3JOU0V2
ZQogICAgIH0KIH0KIAotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoTlNF
dmVudCogZXZlbnQpCi0gICAgOiBtX3Bvc2l0aW9uKHBvaW50Rm9yRXZlbnQoZXZlbnQpKQorUGxh
dGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoTlNFdmVudCogZXZlbnQsIE5TVmll
dyAqd2luZG93VmlldykKKyAgICA6IG1fcG9zaXRpb24ocG9pbnRGb3JFdmVudChldmVudCwgd2lu
ZG93VmlldykpCiAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZl
bnQpKQogICAgICwgbV9idXR0b24obW91c2VCdXR0b25Gb3JFdmVudChldmVudCkpCiAgICAgLCBt
X2V2ZW50VHlwZShtb3VzZUV2ZW50Rm9yTlNFdmVudChldmVudCkpCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL21hYy9XaGVlbEV2ZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vbWFjL1doZWVsRXZlbnRNYWMubW0JKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvV2hlZWxFdmVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1X
aGVlbEV2ZW50KE5TRXZlbnQqIGV2ZW50KQotICAgIDogbV9wb3NpdGlvbihwb2ludEZvckV2ZW50
KGV2ZW50KSkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KE5TRXZlbnQq
IGV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCisgICAgOiBtX3Bvc2l0aW9uKHBvaW50Rm9yRXZl
bnQoZXZlbnQsIHdpbmRvd1ZpZXcpKQogICAgICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb2lu
dEZvckV2ZW50KGV2ZW50KSkKICAgICAsIG1fZ3JhbnVsYXJpdHkoU2Nyb2xsQnlQaXhlbFdoZWVs
RXZlbnQpCiAgICAgLCBtX2lzQWNjZXB0ZWQoZmFsc2UpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9XaWRnZXRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lk
Z2V0TWFjLm1tCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdl
dE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjg1LDcgKzI4NSw5IEBAIHZvaWQgV2lkZ2V0Ojph
ZnRlck1vdXNlRG93bihOU1ZpZXcgKnZpZXcKIAogSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIGlm
ICghcGxhdGZvcm1XaWRnZXQoKSAmJiBwYXJlbnQoKSkgeworICAgIGlmICghcGxhdGZvcm1XaWRn
ZXQoKSkgeworICAgICAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICAgICAgcmV0dXJuIHBvaW50
OwogICAgICAgICBJbnRQb2ludCByZXN1bHQgPSBwYXJlbnQoKS0+Y29udmVydEZyb21Db250YWlu
aW5nV2luZG93KHBvaW50KTsKICAgICAgICAgcmVzdWx0Lm1vdmUocGFyZW50KCktPnNjcm9sbFgo
KSAtIHgoKSwgcGFyZW50KCktPnNjcm9sbFkoKSAtIHkoKSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0zMDAsNyArMzAyLDkgQEAgSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdXaQogCiBJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNv
bnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpICYm
IHBhcmVudCgpKSB7CisgICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKSB7CisgICAgICAgIGlmICgh
cGFyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gcmVjdDsKICAgICAgICAgSW50UmVjdCByZXN1
bHQgPSBwYXJlbnQoKS0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93KHJlY3QpOwogICAgICAg
ICByZXN1bHQubW92ZShwYXJlbnQoKS0+c2Nyb2xsWCgpIC0geCgpLCBwYXJlbnQoKS0+c2Nyb2xs
WSgpIC0geSgpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQXBwbGV0LmNwcAkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJBcHBsZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBAQAotLyoqCi0gKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgSFRNTCB3aWRnZXQgZm9yIEtERS4KLSAqCisvKgogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI0LDEzICsyMiwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlJlbmRlckFwcGxldC5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTEFwcGxldEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVt
ZW50LmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NDMsMjMgKzM4LDE5IEBAIFJlbmRlckFwcGxldDo6UmVuZGVyQXBwbGV0KEhUTUxBcHBsZXRFbGUK
ICAgICBzZXRJbmxpbmUodHJ1ZSk7CiB9CiAKLVJlbmRlckFwcGxldDo6flJlbmRlckFwcGxldCgp
Ci17Ci19Ci0KIEludFNpemUgUmVuZGVyQXBwbGV0OjppbnRyaW5zaWNTaXplKCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IG1ha2Ugc2Vuc2UuIFdlIGNhbid0IGp1c3Qgc3Rh
cnQgcmV0dXJuaW5nCiAgICAgLy8gYSBkaWZmZXJlbnQgc2l6ZSBvbmNlIHdlJ3ZlIGNyZWF0ZWQg
dGhlIHdpZGdldCBhbmQgZXhwZWN0CiAgICAgLy8gbGF5b3V0IGFuZCBzaXppbmcgdG8gYmUgY29y
cmVjdC4gV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGFuZAogICAgIC8vIHBhc3MgdGhlIGFwcHJvcHJp
YXRlIGludHJpbnNpYyBzaXplIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICByZXR1cm4gbV93aWRn
ZXQgPyBJbnRTaXplKDUwLCA1MCkgOiBJbnRTaXplKDE1MCwgMTUwKTsKKyAgICByZXR1cm4gd2lk
Z2V0KCkgPyBJbnRTaXplKDUwLCA1MCkgOiBJbnRTaXplKDE1MCwgMTUwKTsKIH0KIAogdm9pZCBS
ZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KCkKIHsKICAgICBIVE1MQXBwbGV0
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50Kj4obm9kZSgp
KTsKLSAgICBpZiAobV93aWRnZXQgfHwgIWVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRy
ZW4oKSkKKyAgICBpZiAod2lkZ2V0KCkgfHwgIWVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hp
bGRyZW4oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IEphdmEgYXBwbGV0cyBj
YW4ndCBiZSByZXNpemVkICh0aGlzIGlzIGEgYnVnIGluIEFwcGxlJ3MgSmF2YSBpbXBsZW1lbnRh
dGlvbikuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuaAkocmV2aXNpb24gNDQzMDkpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMiw4ICszMiwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUmVuZGVyQXBwbGV0IDogcHVibGljIFJl
bmRlcldpZGdldCB7CiAgICAgcHVibGljOgogICAgICAgICBSZW5kZXJBcHBsZXQoSFRNTEFwcGxl
dEVsZW1lbnQqLCBjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYgYXJncyk7Ci0gICAgICAg
IHZpcnR1YWwgflJlbmRlckFwcGxldCgpOwogCisgICAgICAgIHZvaWQgY3JlYXRlV2lkZ2V0SWZO
ZWNlc3NhcnkoKTsKKworICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciog
cmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJBcHBsZXQiOyB9CiAKICAgICAgICAg
dmlydHVhbCBib29sIGlzQXBwbGV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNDEsOSAr
NDMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKICAgICAgICAgdmlydHVhbCBJbnRTaXplIGludHJpbnNpY1NpemUoKSBjb25zdDsKIAotICAg
ICAgICB2b2lkIGNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KCk7Ci0KLSAgICBwcml2YXRlOgogICAg
ICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX2FyZ3M7CiAgICAgfTsKIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckZyYW1lLmNwcAkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEsOCBAQAotLyoq
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QuCi0gKgorLyoKICAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgogICogICAgICAgICAg
IChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpICgxU3RlaW5AZ214LmRlKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxNSArMjMsMTIgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyRnJhbWVT
ZXQuaCIKKwogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZVNldEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVt
ZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKLQogUmVuZGVyRnJhbWU6OlJlbmRlckZyYW1lKEhUTUxGcmFtZUVsZW1lbnQqIGZyYW1lKQog
ICAgIDogUmVuZGVyUGFydChmcmFtZSkKIHsKQEAgLTQyLDIxICszNywyNSBAQCBSZW5kZXJGcmFt
ZTo6UmVuZGVyRnJhbWUoSFRNTEZyYW1lRWxlbWVuCiAKIEZyYW1lRWRnZUluZm8gUmVuZGVyRnJh
bWU6OmVkZ2VJbmZvKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRnJhbWVFZGdlSW5mbyhlbGVtZW50
KCktPm5vUmVzaXplKCksIGVsZW1lbnQoKS0+aGFzRnJhbWVCb3JkZXIoKSk7CisgICAgSFRNTEZy
YW1lRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnQqPihub2Rl
KCkpOworICAgIHJldHVybiBGcmFtZUVkZ2VJbmZvKGVsZW1lbnQtPm5vUmVzaXplKCksIGVsZW1l
bnQtPmhhc0ZyYW1lQm9yZGVyKCkpOwogfQogCiB2b2lkIFJlbmRlckZyYW1lOjp2aWV3Q2xlYXJl
ZCgpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKSAmJiBtX3dpZGdldCAmJiBtX3dpZGdldC0+aXNGcmFt
ZVZpZXcoKSkgewotICAgICAgICBGcmFtZVZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPihtX3dpZGdldCk7Ci0gICAgICAgIGludCBtYXJnaW53ID0gZWxlbWVudCgpLT5nZXRNYXJn
aW5XaWR0aCgpOwotICAgICAgICBpbnQgbWFyZ2luaCA9IGVsZW1lbnQoKS0+Z2V0TWFyZ2luSGVp
Z2h0KCk7Ci0KLSAgICAgICAgaWYgKG1hcmdpbncgIT0gLTEpCi0gICAgICAgICAgICB2aWV3LT5z
ZXRNYXJnaW5XaWR0aChtYXJnaW53KTsKLSAgICAgICAgaWYgKG1hcmdpbmggIT0gLTEpCi0gICAg
ICAgICAgICB2aWV3LT5zZXRNYXJnaW5IZWlnaHQobWFyZ2luaCk7Ci0gICAgfQorICAgIEhUTUxG
cmFtZUVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4obm9k
ZSgpKTsKKyAgICBpZiAoIWVsZW1lbnQgfHwgIXdpZGdldCgpIHx8ICF3aWRnZXQoKS0+aXNGcmFt
ZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KCkpOworCisgICAgaW50IG1hcmdpbncgPSBlbGVtZW50
LT5nZXRNYXJnaW5XaWR0aCgpOworICAgIGludCBtYXJnaW5oID0gZWxlbWVudC0+Z2V0TWFyZ2lu
SGVpZ2h0KCk7CisKKyAgICBpZiAobWFyZ2ludyAhPSAtMSkKKyAgICAgICAgdmlldy0+c2V0TWFy
Z2luV2lkdGgobWFyZ2ludyk7CisgICAgaWYgKG1hcmdpbmggIT0gLTEpCisgICAgICAgIHZpZXct
PnNldE1hcmdpbkhlaWdodChtYXJnaW5oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZS5oCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSArMSw3IEBACiAv
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0LgotICoKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChD
KSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NSwyMyArMjMsMjMgQEAKICNpZm5kZWYgUmVuZGVyRnJhbWVfaAogI2RlZmluZSBSZW5kZXJGcmFt
ZV9oCiAKLSNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFy
dC5oIgogI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgSFRNTEZyYW1lRWxlbWVudDsKKwogY2xhc3MgUmVuZGVyRnJhbWUgOiBwdWJsaWMg
UmVuZGVyUGFydCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyRnJhbWUoSFRNTEZyYW1lRWxlbWVudCop
OwogCisgICAgRnJhbWVFZGdlSW5mbyBlZGdlSW5mbygpIGNvbnN0OworCitwcml2YXRlOgogICAg
IHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJG
cmFtZSI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIEhUTUxGcmFtZUVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4oUmVuZGVyUGFydDo6bm9kZSgpKTsgfQotCi0gICAg
RnJhbWVFZGdlSW5mbyBlZGdlSW5mbygpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHZpZXdD
bGVhcmVkKCk7CiB9OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAkocmV2aXNpb24g
NDQzMDkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMCArMSw4IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUg
cHJvamVjdC4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5u
QGtkZS5vcmc+CiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVp
bkBnbXguZGUpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIyLDIxICsy
MCwxNSBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KIFJlbmRlclBhcnQ6OlJlbmRl
clBhcnQoRWxlbWVudCogbm9kZSkKICAgICA6IFJlbmRlcldpZGdldChub2RlKQogewpAQCAtNDQs
NDEgKzM2LDM0IEBAIFJlbmRlclBhcnQ6OlJlbmRlclBhcnQoRWxlbWVudCogbm9kZSkKICAgICBz
ZXRJbmxpbmUoZmFsc2UpOwogfQogCi1SZW5kZXJQYXJ0Ojp+UmVuZGVyUGFydCgpCit2b2lkIFJl
bmRlclBhcnQ6OnNldFdpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICAvLyBTaW5jZSBkZXJl
ZiBlbmRzIHVwIGNhbGxpbmcgc2V0V2lkZ2V0IGJhY2sgb24gdXMsIG5lZWQgdG8gbWFrZSBzdXJl
Ci0gICAgLy8gdGhhdCB3aWRnZXQgaXMgYWxyZWFkeSAwIHNvIGl0IHdvbid0IGRvIGFueSB3b3Jr
LgotICAgIFdpZGdldCogd2lkZ2V0ID0gbV93aWRnZXQ7Ci0gICAgbV93aWRnZXQgPSAwOworICAg
IGlmICh3aWRnZXQgPT0gdGhpcy0+d2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlm
ICh3aWRnZXQgJiYgd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAgICAgICBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPih3aWRnZXQpLT5kZXJlZigpOwotICAgIGVsc2UKLSAgICAgICAgZGVsZXRlIHdp
ZGdldDsKLX0KKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+cmVmKCk7
CisgICAgUmVuZGVyV2lkZ2V0OjpzZXRXaWRnZXQod2lkZ2V0KTsKIAotdm9pZCBSZW5kZXJQYXJ0
OjpzZXRXaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgaWYgKHdpZGdldCAhPSBtX3dpZGdl
dCkgewotICAgICAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPnJlZigpOwotICAgICAgICBS
ZW5kZXJXaWRnZXQ6OnNldFdpZGdldCh3aWRnZXQpOwotCi0gICAgICAgIC8vIG1ha2Ugc3VyZSB0
aGUgc2Nyb2xsYmFycyBhcmUgc2V0IGNvcnJlY3RseSBmb3IgcmVzdG9yZQotICAgICAgICAvLyAj
IyMgZmluZCBiZXR0ZXIgZml4Ci0gICAgICAgIHZpZXdDbGVhcmVkKCk7Ci0gICAgfQorICAgIC8v
IG1ha2Ugc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgc2V0IGNvcnJlY3RseSBmb3IgcmVzdG9yZQor
ICAgIC8vICMjIyBmaW5kIGJldHRlciBmaXgKKyAgICB2aWV3Q2xlYXJlZCgpOwogfQogCiB2b2lk
IFJlbmRlclBhcnQ6OnZpZXdDbGVhcmVkKCkKIHsKIH0KIAotdm9pZCBSZW5kZXJQYXJ0OjpkZWxl
dGVXaWRnZXQoKQordm9pZCBSZW5kZXJQYXJ0OjpkZWxldGVXaWRnZXQoV2lkZ2V0KiB3aWRnZXQp
CiB7Ci0gICAgaWYgKG1fd2lkZ2V0ICYmIG1fd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQotICAgICAg
ICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX3dpZGdldCktPmRlcmVmKCk7CisgICAgLy8gU2lu
Y2UgZGVyZWYgZW5kcyB1cCBjYWxsaW5nIHNldFdpZGdldCBiYWNrIG9uIHVzLCBuZWVkIHRvIG1h
a2Ugc3VyZQorICAgIC8vIHRoYXQgd2lkZ2V0IGlzIGFscmVhZHkgMCBzbyBpdCB3b24ndCBkbyBh
bnkgd29yay4KKyAgICBBU1NFUlQoIXRoaXMtPndpZGdldCgpKTsKKworICAgIGlmICh3aWRnZXQg
JiYgd2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
Pih3aWRnZXQpLT5kZXJlZigpOwogICAgIGVsc2UKLSAgICAgICAgZGVsZXRlIG1fd2lkZ2V0Owor
ICAgICAgICBkZWxldGUgd2lkZ2V0OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJQYXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5o
CShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgS0RFIHByb2plY3QuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNt
YW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDI4ICsyNywyMyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEZyYW1lOwotY2xhc3MgSFRNTEZyYW1lT3duZXJFbGVtZW50Owot
CiBjbGFzcyBSZW5kZXJQYXJ0IDogcHVibGljIFJlbmRlcldpZGdldCB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyUGFydChFbGVtZW50Kik7Ci0gICAgdmlydHVhbCB+UmVuZGVyUGFydCgpOwogICAgIAot
ICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclBhcnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clBhcnQiOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0KFdpZGdldCopOwotCiAgICAg
Ym9vbCBoYXNGYWxsYmFja0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc0ZhbGxiYWNrQ29u
dGVudDsgfQogCisgICAgdmlydHVhbCB2b2lkIHNldFdpZGdldChXaWRnZXQqKTsKICAgICB2aXJ0
dWFsIHZvaWQgdmlld0NsZWFyZWQoKTsKIAogcHJvdGVjdGVkOgogICAgIGJvb2wgbV9oYXNGYWxs
YmFja0NvbnRlbnQ7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVdpZGdldCgp
OworICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclBhcnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJl
bmRlclBhcnQiOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlV2lkZ2V0KFdpZGdldCopOwog
fTsKIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHJldmlz
aW9uIDQ0MzA5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFu
biA8aGF1c21hbm5Aa2RlLm9yZz4KICAqICAgICAgICAgICAoQykgMjAwMCBTdGVmYW4gU2NoaW1h
bnNraSAoMVN0ZWluQGdteC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yNSwyNSArMjUsMjIgQEAKICNpbmNsdWRlICJSZW5k
ZXJQYXJ0T2JqZWN0LmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MRW1iZWRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQYXJhbUVs
ZW1lbnQuaCIKLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKLSNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2VuZGlm
CiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQbHVnaW5EYXRhLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlRl
eHQuaCIKIAorI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC02MSw4ICs1OCw4IEBAIFJlbmRlclBhcnRPYmplY3Q6
OlJlbmRlclBhcnRPYmplY3QoRWxlbWUKIAogUmVuZGVyUGFydE9iamVjdDo6flJlbmRlclBhcnRP
YmplY3QoKQogewotICAgIGlmIChtX3ZpZXcpCi0gICAgICAgIG1fdmlldy0+cmVtb3ZlV2lkZ2V0
VG9VcGRhdGUodGhpcyk7CisgICAgaWYgKGZyYW1lVmlldygpKQorICAgICAgICBmcmFtZVZpZXco
KS0+cmVtb3ZlV2lkZ2V0VG9VcGRhdGUodGhpcyk7CiB9CiAKIHN0YXRpYyBib29sIGlzVVJMQWxs
b3dlZChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHVybCkKQEAgLTE1MSw3ICsxNDgsNyBA
QCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldChib29sCiAgICAgU3RyaW5nIHNl
cnZpY2VUeXBlOwogICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtTmFtZXM7CiAgICAgVmVjdG9yPFN0
cmluZz4gcGFyYW1WYWx1ZXM7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV92aWV3LT5mcmFtZSgpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lVmlldygpLT5mcmFtZSgpOwogCiAgICAgaWYgKG5vZGUo
KS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKSB7CiAgICAgICAgIEhUTUxPYmplY3RFbGVtZW50KiBv
ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihub2RlKCkpOwpAQCAtMzM3LDE2ICsz
MzQsMTYgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpsYXlvdXQoKQogCiAgICAgUmVuZGVyUGFy
dDo6bGF5b3V0KCk7CiAKLSAgICBpZiAoIW1fd2lkZ2V0ICYmIG1fdmlldykKLSAgICAgICAgbV92
aWV3LT5hZGRXaWRnZXRUb1VwZGF0ZSh0aGlzKTsKKyAgICBpZiAoIXdpZGdldCgpICYmIGZyYW1l
VmlldygpKQorICAgICAgICBmcmFtZVZpZXcoKS0+YWRkV2lkZ2V0VG9VcGRhdGUodGhpcyk7CiAK
ICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6
dmlld0NsZWFyZWQoKQogewotICAgIGlmIChub2RlKCkgJiYgbV93aWRnZXQgJiYgbV93aWRnZXQt
PmlzRnJhbWVWaWV3KCkpIHsKLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8
RnJhbWVWaWV3Kj4obV93aWRnZXQpOworICAgIGlmIChub2RlKCkgJiYgd2lkZ2V0KCkgJiYgd2lk
Z2V0KCktPmlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KCkpOwogICAgICAgICBpbnQgbWFyZ2ludyA9IC0xOwog
ICAgICAgICBpbnQgbWFyZ2luaCA9IC0xOwogICAgICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1l
KGlmcmFtZVRhZykpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmgJKHJl
dmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBLREUgcHJvamVjdC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1
c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMzQsMTAgKzMyLDEyIEBAIHB1YmxpYzoKICAgICBSZW5kZXJQYXJ0T2JqZWN0KEVs
ZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJQYXJ0T2JqZWN0KCk7CiAKKyAgICB2b2lkIHVw
ZGF0ZVdpZGdldChib29sIG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpOworCitwcml2YXRl
OgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJQYXJ0T2JqZWN0IjsgfQogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZv
aWQgdXBkYXRlV2lkZ2V0KGJvb2wgb25seUNyZWF0ZU5vbk5ldHNjYXBlUGx1Z2lucyk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgdmlld0NsZWFyZWQoKTsKIH07CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5ICsxLDcgQEAKLS8qKgotICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEhUTUwgd2lkZ2V0IGZvciBLREUuCi0gKgorLyoKICAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yNywxMyArMjUsOCBAQAogCiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTQ3LDE0ICs0MCwxMSBAQCBzdGF0aWMgSGFzaE1h
cDxjb25zdCBXaWRnZXQqLCBSZW5kZXJXaWRnCiB9CiAKIFJlbmRlcldpZGdldDo6UmVuZGVyV2lk
Z2V0KE5vZGUqIG5vZGUpCi0gICAgICA6IFJlbmRlclJlcGxhY2VkKG5vZGUpCi0gICAgICAsIG1f
d2lkZ2V0KDApCi0gICAgICAsIG1fcmVmQ291bnQoMCkKLXsKLSAgICAvLyBhIHJlcGxhY2VkIGVs
ZW1lbnQgZG9lc24ndCBzdXBwb3J0IGJlaW5nIGFub255bW91cwotICAgIEFTU0VSVChub2RlKTsK
LSAgICBtX3ZpZXcgPSBub2RlLT5kb2N1bWVudCgpLT52aWV3KCk7Ci0KKyAgICA6IFJlbmRlclJl
cGxhY2VkKG5vZGUpCisgICAgLCBtX3dpZGdldCgwKQorICAgICwgbV9mcmFtZVZpZXcobm9kZS0+
ZG9jdW1lbnQoKS0+dmlldygpKQorICAgICwgbV9yZWZDb3VudCgwKQorewogICAgIHZpZXcoKS0+
YWRkV2lkZ2V0KHRoaXMpOwogCiAgICAgLy8gUmVmZXJlbmNlIGNvdW50aW5nIGlzIHVzZWQgdG8g
cHJldmVudCB0aGUgd2lkZ2V0IGZyb20gYmVpbmcKQEAgLTgyLDggKzcyLDggQEAgdm9pZCBSZW5k
ZXJXaWRnZXQ6OmRlc3Ryb3koKQogICAgIHJlbW92ZSgpOwogCiAgICAgaWYgKG1fd2lkZ2V0KSB7
Ci0gICAgICAgIGlmIChtX3ZpZXcpCi0gICAgICAgICAgICBtX3ZpZXctPnJlbW92ZUNoaWxkKG1f
d2lkZ2V0KTsKKyAgICAgICAgaWYgKG1fZnJhbWVWaWV3KQorICAgICAgICAgICAgbV9mcmFtZVZp
ZXctPnJlbW92ZUNoaWxkKG1fd2lkZ2V0KTsKICAgICAgICAgd2lkZ2V0UmVuZGVyZXJNYXAoKS5y
ZW1vdmUobV93aWRnZXQpOwogICAgIH0KICAgICAKQEAgLTExMCw3ICsxMDAsOSBAQCB2b2lkIFJl
bmRlcldpZGdldDo6ZGVzdHJveSgpCiBSZW5kZXJXaWRnZXQ6On5SZW5kZXJXaWRnZXQoKQogewog
ICAgIEFTU0VSVChtX3JlZkNvdW50IDw9IDApOwotICAgIGRlbGV0ZVdpZGdldCgpOworICAgIFdp
ZGdldCogd2lkZ2V0ID0gbV93aWRnZXQ7CisgICAgbV93aWRnZXQgPSAwOworICAgIGRlbGV0ZVdp
ZGdldCh3aWRnZXQpOwogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6c2V0V2lkZ2V0R2VvbWV0cnko
Y29uc3QgSW50UmVjdCYgZnJhbWUpCkBAIC0xMjgsOCArMTIwLDEwIEBAIHZvaWQgUmVuZGVyV2lk
Z2V0OjpzZXRXaWRnZXQoV2lkZ2V0KiB3aWQKICAgICBpZiAod2lkZ2V0ICE9IG1fd2lkZ2V0KSB7
CiAgICAgICAgIGlmIChtX3dpZGdldCkgewogICAgICAgICAgICAgbV93aWRnZXQtPnJlbW92ZUZy
b21QYXJlbnQoKTsKLSAgICAgICAgICAgIHdpZGdldFJlbmRlcmVyTWFwKCkucmVtb3ZlKG1fd2lk
Z2V0KTsKLSAgICAgICAgICAgIGRlbGV0ZVdpZGdldCgpOworICAgICAgICAgICAgV2lkZ2V0KiBv
bGRXaWRnZXQgPSBtX3dpZGdldDsKKyAgICAgICAgICAgIG1fd2lkZ2V0ID0gMDsKKyAgICAgICAg
ICAgIHdpZGdldFJlbmRlcmVyTWFwKCkucmVtb3ZlKG9sZFdpZGdldCk7CisgICAgICAgICAgICBk
ZWxldGVXaWRnZXQob2xkV2lkZ2V0KTsKICAgICAgICAgfQogICAgICAgICBtX3dpZGdldCA9IHdp
ZGdldDsKICAgICAgICAgaWYgKG1fd2lkZ2V0KSB7CkBAIC0xNDUsNyArMTM5LDcgQEAgdm9pZCBS
ZW5kZXJXaWRnZXQ6OnNldFdpZGdldChXaWRnZXQqIHdpZAogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgbV93aWRnZXQtPnNob3coKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fdmlldy0+YWRkQ2hpbGQobV93aWRnZXQpOworICAgICAgICAgICAgbV9mcmFt
ZVZpZXctPmFkZENoaWxkKG1fd2lkZ2V0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE4NCw3
ICsxNzgsNyBAQCB2b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBwYWluCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fdmlldyB8fCBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUpCisgICAgaWYgKCFtX2ZyYW1lVmlldyB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAg
IHJldHVybjsKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTI4NCw5ICsyNzgsOSBAQCB2b2lkIFJl
bmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsCiAgICAgfQogfQogCi12b2lkIFJlbmRl
cldpZGdldDo6ZGVsZXRlV2lkZ2V0KCkKK3ZvaWQgUmVuZGVyV2lkZ2V0OjpkZWxldGVXaWRnZXQo
V2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgZGVsZXRlIG1fd2lkZ2V0OworICAgIGRlbGV0ZSB3aWRn
ZXQ7CiB9CiAKIFJlbmRlcldpZGdldCogUmVuZGVyV2lkZ2V0OjpmaW5kKGNvbnN0IFdpZGdldCog
d2lkZ2V0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDQ0MzA5KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
OCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhUTUwgd2lkZ2V0IGZv
ciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzLDQ2ICszMSw0MCBA
QCBjbGFzcyBXaWRnZXQ7CiAKIGNsYXNzIFJlbmRlcldpZGdldCA6IHB1YmxpYyBSZW5kZXJSZXBs
YWNlZCwgcHJpdmF0ZSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQgewogcHVibGljOgotICAgIFJl
bmRlcldpZGdldChOb2RlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyV2lkZ2V0KCk7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNXaWRnZXQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotCi0gICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3koKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0KICAgICBXaWRn
ZXQqIHdpZGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkZ2V0OyB9Ci0gICAgc3RhdGljIFJlbmRl
cldpZGdldCogZmluZChjb25zdCBXaWRnZXQqKTsKLQotICAgIFJlbmRlckFyZW5hKiByZWYoKSB7
ICsrbV9yZWZDb3VudDsgcmV0dXJuIHJlbmRlckFyZW5hKCk7IH0KLSAgICB2b2lkIGRlcmVmKFJl
bmRlckFyZW5hKik7CisgICAgdmlydHVhbCB2b2lkIHNldFdpZGdldChXaWRnZXQqKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7CisgICAgc3Rh
dGljIFJlbmRlcldpZGdldCogZmluZChjb25zdCBXaWRnZXQqKTsKIAogICAgIHZvaWQgdXBkYXRl
V2lkZ2V0UG9zaXRpb24oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRXaWRnZXQoV2lkZ2V0Kik7
Citwcm90ZWN0ZWQ6CisgICAgUmVuZGVyV2lkZ2V0KE5vZGUqKTsKIAotICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQg
eCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKKyAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVWaWV3OyB9CiAKLXByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIHNldFdpZGdldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVXaWRnZXQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNXaWRnZXQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAvLyBPdmVybGFwVGVzdFJlcXVlc3RDbGll
bnQKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHgsIGludCB5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25T
dGF0ZShTZWxlY3Rpb25TdGF0ZSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBp
bnQgdHksIEhpdFRlc3RBY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVXaWRnZXQoV2lk
Z2V0Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wpOwogCi1w
cm90ZWN0ZWQ6Ci0gICAgV2lkZ2V0KiBtX3dpZGdldDsKLSAgICBGcmFtZVZpZXcqIG1fdmlldzsK
KyAgICB2b2lkIHNldFdpZGdldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKIAotcHJpdmF0ZToK
KyAgICBSZW5kZXJBcmVuYSogcmVmKCkgeyArK21fcmVmQ291bnQ7IHJldHVybiByZW5kZXJBcmVu
YSgpOyB9CisgICAgdm9pZCBkZXJlZihSZW5kZXJBcmVuYSopOworCisgICAgV2lkZ2V0KiBtX3dp
ZGdldDsKKyAgICBGcmFtZVZpZXcqIG1fZnJhbWVWaWV3OwogICAgIGludCBtX3JlZkNvdW50Owog
fTsKIApJbmRleDogV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgJKHJldmlzaW9uIDQ0MzA5KQorKysg
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDgg
KzYyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGlubGluZSBib29sIG9wZXJhdG9yPj0o
Y29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZhbHVlKCkg
PiBiLnZhbHVlKCkgfHwgb3BlcmF0b3I9PShhLCBiKTsgfQogICAgIGlubGluZSBib29sIG9wZXJh
dG9yPD0oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBhLnZh
bHVlKCkgPCBiLnZhbHVlKCkgfHwgb3BlcmF0b3I9PShhLCBiKTsgfQogCi0gICAgaW5saW5lIFNN
SUxUaW1lIG1heChjb25zdCBTTUlMVGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJu
IHN0ZDo6bWF4KGEudmFsdWUoKSwgYi52YWx1ZSgpKTsgfQotICAgIGlubGluZSBTTUlMVGltZSBt
aW4oY29uc3QgU01JTFRpbWUmIGEsIGNvbnN0IFNNSUxUaW1lJiBiKSB7IHJldHVybiBzdGQ6Om1p
bihhLnZhbHVlKCksIGIudmFsdWUoKSk7IH0KICAgICBTTUlMVGltZSBvcGVyYXRvcisoY29uc3Qg
U01JTFRpbWUmLCBjb25zdCBTTUlMVGltZSYpOwogICAgIFNNSUxUaW1lIG9wZXJhdG9yLShjb25z
dCBTTUlMVGltZSYsIGNvbnN0IFNNSUxUaW1lJik7CiAgICAgLy8gU28gbXVsdGlwbHlpbmcgdGlt
ZXMgZG9lcyBub3QgbWFrZSB0b28gbXVjaCBzZW5zZSBidXQgU01JTCBkZWZpbmVzIGl0IGZvciBk
dXJhdGlvbiAqIHJlcGVhdENvdW50CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCShy
ZXZpc2lvbiA0NDMwOSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRXJp
YyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzAsMTIgKzMwLDE0IEBACiAKICNpbmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJFbXB0eUNsaWVudHMuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTQ2LDggKzQ4LDYgQEAKICNpbmNsdWRlICJTVkdTVkdFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKIAotI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5o
IgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0ltYWdlQ2hyb21lQ2xpZW50IDog
cHVibGljIEVtcHR5Q2hyb21lQ2xpZW50IHsKQEAgLTc2LDM2ICs3NiwzMyBAQCBwcml2YXRlOgog
CiBTVkdJbWFnZTo6U1ZHSW1hZ2UoSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAgOiBJbWFn
ZShvYnNlcnZlcikKLSAgICAsIG1fZG9jdW1lbnQoMCkKLSAgICAsIG1fY2hyb21lQ2xpZW50KDAp
Ci0gICAgLCBtX3BhZ2UoMCkKLSAgICAsIG1fZnJhbWUoMCkKLSAgICAsIG1fZnJhbWVWaWV3KDAp
CiB7CiB9CiAKIFNWR0ltYWdlOjp+U1ZHSW1hZ2UoKQogewotICAgIGlmIChtX2ZyYW1lKQotICAg
ICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+ZnJhbWVEZXRhY2hlZCgpOyAvLyBCcmVhayBib3RoIHRo
ZSBsb2FkZXIgYW5kIHZpZXcgcmVmZXJlbmNlcyB0byB0aGUgZnJhbWUKKyAgICBpZiAobV9wYWdl
KSB7CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5mcmFtZURldGFjaGVk
KCk7IC8vIEJyZWFrIGJvdGggdGhlIGxvYWRlciBhbmQgdmlldyByZWZlcmVuY2VzIHRvIHRoZSBm
cmFtZQorCisgICAgICAgIC8vIENsZWFyIGV4cGxpY2l0bHkgYmVjYXVzZSB3ZSB3YW50IHRvIGRl
bGV0ZSB0aGUgcGFnZSBiZWZvcmUgdGhlIENocm9tZUNsaWVudC4KKyAgICAgICAgLy8gRklYTUU6
IEkgYmVsaWV2ZSB0aGF0J3MgYWxyZWFkeSBndWFyYW50ZWVkIGJ5IEMrKyBvYmplY3QgZGVzdHJ1
Y3Rpb24gcnVsZXMsCisgICAgICAgIC8vIHNvIHRoaXMgbWF5IG1hdHRlciBvbmx5IGZvciB0aGUg
YXNzZXJ0aW9uIGJlbG93LgorICAgICAgICBtX3BhZ2UuY2xlYXIoKTsKKyAgICB9CiAKLSAgICAv
LyBDbGVhciB0aGVzZSBtYW51YWxseSBzbyB3ZSBjYW4gc2FmZWx5IGRlbGV0ZSB0aGUgQ2hyb21l
Q2xpZW50IGFmdGVyd2FyZHMKLSAgICBtX2ZyYW1lVmlldy5jbGVhcigpOwotICAgIG1fZnJhbWUu
Y2xlYXIoKTsKLSAgICBtX3BhZ2UuY2xlYXIoKTsKLSAgICAKICAgICAvLyBWZXJpZnkgdGhhdCBw
YWdlIHRlYXJkb3duIGRlc3Ryb3llZCB0aGUgQ2hyb21lCiAgICAgQVNTRVJUKCFtX2Nocm9tZUNs
aWVudC0+aW1hZ2UoKSk7CiB9CiAKIHZvaWQgU1ZHSW1hZ2U6OnNldENvbnRhaW5lclNpemUoY29u
c3QgSW50U2l6ZSYgY29udGFpbmVyU2l6ZSkKIHsKLSAgICBpZiAoY29udGFpbmVyU2l6ZS53aWR0
aCgpIDw9IDAgfHwgY29udGFpbmVyU2l6ZS5oZWlnaHQoKSA8PSAwKQorICAgIGlmIChjb250YWlu
ZXJTaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX2ZyYW1lKQor
ICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgU1ZHU1ZHRWxlbWVudCogcm9v
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkp
LT5yb290RWxlbWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7
CisgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVu
dCo+KGZyYW1lLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFbGVt
ZW50KQogICAgICAgICByZXR1cm47CiAKQEAgLTExNCw5ICsxMTEsMTAgQEAgdm9pZCBTVkdJbWFn
ZTo6c2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbgogCiBib29sIFNWR0ltYWdlOjp1c2VzQ29udGFp
bmVyU2l6ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9wYWdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpLT5yb290RWxlbWVu
dCgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgU1ZHU1ZH
RWxlbWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KGZyYW1lLT5k
b2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RFbGVtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTEyNSwxMCArMTIzLDEwIEBAIGJvb2wgU1ZHSW1hZ2U6OnVz
ZXNDb250YWluZXJTaXplKCkgY29uc3QKIAogSW50U2l6ZSBTVkdJbWFnZTo6c2l6ZSgpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4g
SW50U2l6ZSgpOwotICAgIAotICAgIFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHRG9jdW1lbnQqPihtX2ZyYW1lLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsK
KyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOworICAgIFNWR1NWR0VsZW1l
bnQqIHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihmcmFtZS0+ZG9jdW1l
bnQoKSktPnJvb3RFbGVtZW50KCk7CiAgICAgaWYgKCFyb290RWxlbWVudCkKICAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKICAgICAKQEAgLTE1MSw5ICsxNDksOSBAQCBJbnRTaXplIFNWR0ltYWdl
OjpzaXplKCkgY29uc3QKIAogYm9vbCBTVkdJbWFnZTo6aGFzUmVsYXRpdmVXaWR0aCgpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9wYWdlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdE
b2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpLT5yb290RWxlbWVudCgpOworICAgIFNWR1NW
R0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihtX3BhZ2Ut
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAoIXJvb3RF
bGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2Miw5ICsxNjAsOSBAQCBib29s
IFNWR0ltYWdlOjpoYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QKIAogYm9vbCBTVkdJbWFnZTo6aGFz
UmVsYXRpdmVIZWlnaHQoKSBjb25zdAogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1f
cGFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihtX2ZyYW1lLT5kb2N1bWVudCgpKS0+cm9v
dEVsZW1lbnQoKTsKKyAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0RvY3VtZW50Kj4obV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKSktPnJvb3RFbGVt
ZW50KCk7CiAgICAgaWYgKCFyb290RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0xNzMsMjIgKzE3MSwyNCBAQCBib29sIFNWR0ltYWdlOjpoYXNSZWxhdGl2ZUhlaWdodCgpIGNv
bnN0CiAKIHZvaWQgU1ZHSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9w
YWdlKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpLT52aWV3KCk7CisKICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgY29u
dGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wKTsKICAgICBjb250ZXh0LT5j
bGlwKGVuY2xvc2luZ0ludFJlY3QoZHN0UmVjdCkpOwogICAgIGlmIChjb21wb3NpdGVPcCAhPSBD
b21wb3NpdGVTb3VyY2VPdmVyKQotICAgICAgICBjb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxh
eWVyKDEuMGYpOworICAgICAgICBjb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEpOwog
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZShkc3RSZWN0LmxvY2F0aW9uKCkueCgpLCBkc3RSZWN0Lmxv
Y2F0aW9uKCkueSgpKTsKLSAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNpemUoZHN0UmVjdC53aWR0
aCgpL3NyY1JlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKS9zcmNSZWN0LmhlaWdodCgpKSk7
CisgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKGRzdFJlY3Qud2lkdGgoKSAvIHNyY1JlY3Qu
d2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKIAotICAgIG1f
ZnJhbWUtPnZpZXcoKS0+cmVzaXplKHNpemUoKSk7CisgICAgdmlldy0+cmVzaXplKHNpemUoKSk7
CiAKLSAgICBpZiAobV9mcmFtZS0+dmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICBtX2Zy
YW1lLT52aWV3KCktPmxheW91dCgpOwotICAgIG1fZnJhbWUtPnZpZXcoKS0+cGFpbnQoY29udGV4
dCwgZW5jbG9zaW5nSW50UmVjdChzcmNSZWN0KSk7CisgICAgaWYgKHZpZXctPm5lZWRzTGF5b3V0
KCkpCisgICAgICAgIHZpZXctPmxheW91dCgpOworICAgIHZpZXctPnBhaW50KGNvbnRleHQsIGVu
Y2xvc2luZ0ludFJlY3Qoc3JjUmVjdCkpOwogCiAgICAgaWYgKGNvbXBvc2l0ZU9wICE9IENvbXBv
c2l0ZVNvdXJjZU92ZXIpCiAgICAgICAgIGNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CkBAIC0yMDUsMjAgKzIwNSwyMiBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1h
Z2VGb3JDCiAgICAgLy8gZnJhbWUgY2FjaGUsIG9yIGJldHRlciB5ZXQsIG5vdCB1c2UgYSBjYWNo
ZSBmb3IgdGlsZWQgZHJhd2luZyBhdCBhbGwsIGluc3RlYWQKICAgICAvLyBoYXZpbmcgYSB0aWxl
ZCBkcmF3aW5nIGNhbGxiYWNrIChob3BlZnVsbHkgbm9uLXZpcnR1YWwpLgogICAgIGlmICghbV9m
cmFtZUNhY2hlKSB7CisgICAgICAgIGlmICghbV9wYWdlKQorICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIG1fZnJhbWVDYWNoZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBmYWxz
ZSk7CiAgICAgICAgIGlmICghbV9mcmFtZUNhY2hlKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1h
Z2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZW5kZXJTdWJ0cmVlVG9JbWFnZSht
X2ZyYW1lQ2FjaGUuZ2V0KCksIG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKTsKKyAgICAgICAg
cmVuZGVyU3VidHJlZVRvSW1hZ2UobV9mcmFtZUNhY2hlLmdldCgpLCBtX3BhZ2UtPm1haW5GcmFt
ZSgpLT5jb250ZW50UmVuZGVyZXIoKSk7CiAgICAgfQogICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUt
PmltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiB9CiAKIGJvb2wgU1ZHSW1h
Z2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogewotICAgIGludCBsZW5ndGgg
PSBtX2RhdGEtPnNpemUoKTsKLSAgICBpZiAoIWxlbmd0aCkgLy8gaWYgdGhpcyB3YXMgYW4gZW1w
dHkgaW1hZ2UKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiBpcyBhbiBlbXB0eSBpbWFnZS4K
KyAgICBpZiAoIW1fZGF0YS0+c2l6ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKKwog
ICAgIGlmIChhbGxEYXRhUmVjZWl2ZWQpIHsKICAgICAgICAgc3RhdGljIEZyYW1lTG9hZGVyQ2xp
ZW50KiBkdW1teUZyYW1lTG9hZGVyQ2xpZW50ID0gIG5ldyBFbXB0eUZyYW1lTG9hZGVyQ2xpZW50
OwogICAgICAgICBzdGF0aWMgRWRpdG9yQ2xpZW50KiBkdW1teUVkaXRvckNsaWVudCA9IG5ldyBF
bXB0eUVkaXRvckNsaWVudDsKQEAgLTIyOCwyOCArMjMwLDI5IEBAIGJvb2wgU1ZHSW1hZ2U6OmRh
dGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVIKIAogICAgICAgICBtX2Nocm9tZUNsaWVudC5zZXQobmV3
IFNWR0ltYWdlQ2hyb21lQ2xpZW50KHRoaXMpKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBJZiB0aGlzIFNWRyBlbmRzIHVwIGxvYWRpbmcgaXRzZWxmLCB3ZSdsbCBsZWFrIHRoaXMgRnJh
bWUgKGFuZCBhc3NvY2lhdGVkIERPTSAmIHJlbmRlciB0cmVlcykuCi0gICAgICAgIC8vIFRoZSBD
YWNoZSBjb2RlIGRvZXMgbm90IGtub3cgYWJvdXQgQ2FjaGVkSW1hZ2VzIGhvbGRpbmcgRnJhbWVz
IGFuZCB3b24ndCBrbm93IHRvIGJyZWFrIHRoZSBjeWNsZS4KKyAgICAgICAgLy8gRklYTUU6IElm
IHRoaXMgU1ZHIGVuZHMgdXAgbG9hZGluZyBpdHNlbGYsIHdlIG1pZ2h0IGxlYWsgdGhlIHdvcmxk
LgorICAgICAgICAvLyBUSGUgY29tbWVudCBzYWlkIHRoYXQgdGhlIENhY2hlIGNvZGUgZG9lcyBu
b3Qga25vdyBhYm91dCBDYWNoZWRJbWFnZXMKKyAgICAgICAgLy8gaG9sZGluZyBGcmFtZXMgYW5k
IHdvbid0IGtub3cgdG8gYnJlYWsgdGhlIGN5Y2xlLiBCdXQgCiAgICAgICAgIG1fcGFnZS5zZXQo
bmV3IFBhZ2UobV9jaHJvbWVDbGllbnQuZ2V0KCksIGR1bW15Q29udGV4dE1lbnVDbGllbnQsIGR1
bW15RWRpdG9yQ2xpZW50LCBkdW1teURyYWdDbGllbnQsIGR1bW15SW5zcGVjdG9yQ2xpZW50KSk7
CiAgICAgICAgIG1fcGFnZS0+c2V0dGluZ3MoKS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoZmFsc2Up
OwogICAgICAgICBtX3BhZ2UtPnNldHRpbmdzKCktPnNldFBsdWdpbnNFbmFibGVkKGZhbHNlKTsK
IAotICAgICAgICBtX2ZyYW1lID0gRnJhbWU6OmNyZWF0ZShtX3BhZ2UuZ2V0KCksIDAsIGR1bW15
RnJhbWVMb2FkZXJDbGllbnQpOwotICAgICAgICBtX2ZyYW1lVmlldyA9IG5ldyBGcmFtZVZpZXco
bV9mcmFtZS5nZXQoKSk7Ci0gICAgICAgIG1fZnJhbWVWaWV3LT5kZXJlZigpOyAvLyBGSVhNRTog
RnJhbWVWaWV3IHN0YXJ0cyB3aXRoIGEgcmVmY291bnQgb2YgMQotICAgICAgICBtX2ZyYW1lLT5z
ZXRWaWV3KG1fZnJhbWVWaWV3LmdldCgpKTsKLSAgICAgICAgbV9mcmFtZS0+aW5pdCgpOworICAg
ICAgICBSZWZQdHI8RnJhbWU+IGZyYW1lID0gRnJhbWU6OmNyZWF0ZShtX3BhZ2UuZ2V0KCksIDAs
IGR1bW15RnJhbWVMb2FkZXJDbGllbnQpOworICAgICAgICBmcmFtZS0+c2V0VmlldyhGcmFtZVZp
ZXc6OmNyZWF0ZShmcmFtZS5nZXQoKSkpOworICAgICAgICBmcmFtZS0+aW5pdCgpOwogICAgICAg
ICBSZXNvdXJjZVJlcXVlc3QgZmFrZVJlcXVlc3QoS1VSTCgiIikpOwotICAgICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+bG9hZChmYWtlUmVxdWVzdCwgZmFsc2UpOyAvLyBNYWtlIHN1cmUgdGhlIERv
Y3VtZW50TG9hZGVyIGlzIGNyZWF0ZWQKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNhbmNl
bENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MKLSAgICAg
ICAgbV9mcmFtZS0+bG9hZGVyKCktPmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKLSAgICAgICAg
bV9mcmFtZS0+bG9hZGVyKCktPnNldFJlc3BvbnNlTUlNRVR5cGUoImltYWdlL3N2Zyt4bWwiKTsK
LSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUg
ZW1wdHkgZG9jdW1lbnQKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPndyaXRlKG1fZGF0YS0+
ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5lbmQo
KTsKLSAgICAgICAgbV9mcmFtZVZpZXctPnNldFRyYW5zcGFyZW50KHRydWUpOyAvLyBTVkcgSW1h
Z2VzIGFyZSB0cmFuc3BhcmVudC4KKyAgICAgICAgRnJhbWVMb2FkZXIqIGxvYWRlciA9IGZyYW1l
LT5sb2FkZXIoKTsKKyAgICAgICAgbG9hZGVyLT5sb2FkKGZha2VSZXF1ZXN0LCBmYWxzZSk7IC8v
IE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMgY3JlYXRlZAorICAgICAgICBsb2FkZXIt
PmNhbmNlbENvbnRlbnRQb2xpY3lDaGVjaygpOyAvLyBjYW5jZWwgYW55IHBvbGljeSBjaGVja3MK
KyAgICAgICAgbG9hZGVyLT5jb21taXRQcm92aXNpb25hbExvYWQoMCk7CisgICAgICAgIGxvYWRl
ci0+c2V0UmVzcG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOworICAgICAgICBsb2FkZXIt
PmJlZ2luKEtVUkwoKSk7IC8vIGNyZWF0ZSB0aGUgZW1wdHkgZG9jdW1lbnQKKyAgICAgICAgbG9h
ZGVyLT53cml0ZShtX2RhdGEtPmRhdGEoKSwgbV9kYXRhLT5zaXplKCkpOworICAgICAgICBsb2Fk
ZXItPmVuZCgpOworICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRUcmFuc3BhcmVudCh0cnVlKTsg
Ly8gU1ZHIEltYWdlcyBhcmUgdHJhbnNwYXJlbnQuCiAgICAgfQotICAgIHJldHVybiBtX2ZyYW1l
VmlldzsKKworICAgIHJldHVybiBtX3BhZ2U7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuaAkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjksMTUgKzMwLDEwIEBACiAjaWYgRU5BQkxFKFNWRykKIAogI2luY2x1ZGUg
IkltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgi
Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0g
ICAgY2xhc3MgU1ZHRG9jdW1lbnQ7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgRnJhbWVW
aWV3OworCisgICAgY2xhc3MgSW1hZ2VCdWZmZXI7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFz
cyBTVkdJbWFnZUNocm9tZUNsaWVudDsKICAgICAKQEAgLTcyLDEyICs2OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgCi0gICAgICAgIFNWR0RvY3VtZW50
KiBtX2RvY3VtZW50OwogICAgICAgICBPd25QdHI8U1ZHSW1hZ2VDaHJvbWVDbGllbnQ+IG1fY2hy
b21lQ2xpZW50OwogICAgICAgICBPd25QdHI8UGFnZT4gbV9wYWdlOwotICAgICAgICBSZWZQdHI8
RnJhbWU+IG1fZnJhbWU7Ci0gICAgICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fZnJhbWVWaWV3Owot
ICAgICAgICBJbnRTaXplIG1fbWluU2l6ZTsKICAgICAgICAgT3duUHRyPEltYWdlQnVmZmVyPiBt
X2ZyYW1lQ2FjaGU7CiAgICAgfTsKIH0KSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOSBAQAorMjAwOS0wNS0zMSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkIFdl
YlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oL21tLgorCiAyMDA5LTA1LTI4ICBNYXJrIFJvd2Ug
IDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQW5kZXJzIENh
cmxzc29uLgpJbmRleDogV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsOCBAQAogCQk5MzRDMTE2NzBEODcxMEJCMDBD
MzJBQkQgLyogV2ViRHluYW1pY1Njcm9sbEJhcnNWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNEMxMTY2MEQ4NzEwQkIwMEMzMkFC
RCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oICovOyB9OwogCQk5MzRDNEE5
MTBGMDE0MDZDMDA5MzcyQzAgLyogV2ViTlNPYmplY3RFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzRDNEE5MDBGMDE0MDZDMDA5MzcyQzAg
LyogV2ViTlNPYmplY3RFeHRyYXMubW0gKi87IH07CiAJCTkzNEM0QUEwMEYwMTQxRjcwMDkzNzJD
MCAvKiBXZWJSZXNvdXJjZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzRDNEE5RjBGMDE0MUY3MDA5MzcyQzAgLyogV2ViUmVzb3VyY2VJ
bnRlcm5hbC5oICovOyB9OworCQk5MzZBMkRFODBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4dENv
bXBsZXRpb25Db250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTM2QTJERTcwRkQyRDA4MDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0aW9u
Q29udHJvbGxlci5tbSAqLzsgfTsKKwkJOTM2QTJERUEwRkQyRDA4NDAwRDMxMkRCIC8qIFdlYlRl
eHRDb21wbGV0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTM2QTJERTkwRkQyRDA4NDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0
aW9uQ29udHJvbGxlci5oICovOyB9OwogCQk5Mzk4MTAxMTA4MjRCRjAxMDA4REYwMzggLyogV2Vi
QmFja0ZvcndhcmRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzOTQ0NjA3RDAyMEY1MEVEMEVDQTE3NjcgLyogV2ViQmFja0ZvcndhcmRMaXN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk5Mzk4MTAx
MjA4MjRCRjAxMDA4REYwMzggLyogV2ViSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyMEZCMTkwMjIxREVGRDAxQzFBNTI1IC8qIFdlYkhp
c3RvcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJ
CTkzOTgxMDEzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIaXN0b3J5SXRlbS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzk0NDYwN0YwMjBGNTBFRDBFQ0Ex
NzY3IC8qIFdlYkhpc3RvcnlJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVi
bGljLCApOyB9OyB9OwpAQCAtNTM3LDYgKzUzOSw4IEBACiAJCTkzNEMxMTY2MEQ4NzEwQkIwMEMz
MkFCRCAvKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXdJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzRDNEE5MDBGMDE0MDZDMDA5MzcyQzAgLyog
V2ViTlNPYmplY3RFeHRyYXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJOU09iamVjdEV4dHJhcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTM0QzRBOUYwRjAxNDFGNzAwOTM3MkMwIC8qIFdlYlJlc291cmNlSW50ZXJuYWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUmVzb3VyY2VJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5MzZBMkRFNzBGRDJEMDgwMDBEMzEyREIgLyogV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5MzZBMkRFOTBGRDJEMDg0MDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlRleHRD
b21wbGV0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Mzk4
MTEzMjA4MjRCRjAxMDA4REYwMzggLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5wbGlzdC54
bWw7IG5hbWUgPSBJbmZvLnBsaXN0OyBwYXRoID0gbWFjL0luZm8ucGxpc3Q7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDE7IH07CiAJCTkzOTgxMTMz
MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gV2ViS2l0LmZyYW1ld29yazsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJOTNBRUIxN0QwMzJDMTczNTAwODYzNUNFIC8qIFdlYktpdExvZ2dp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXRMb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OwpAQCAtMTA2NCw2ICsxMDY4LDggQEAKIAkJCQk3RTZGRUYwNjA4OTg1QTcy
MDBDNDRDM0YgLyogV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZS5tbSAqLywKIAkJCQlDMDE2N0JGNjBE
N0Y1REQwMDAyODY5NkUgLyogV2ViU2NyaXB0RGVidWdnZXIuaCAqLywKIAkJCQlDMDE2N0JGNzBE
N0Y1REQwMDAyODY5NkUgLyogV2ViU2NyaXB0RGVidWdnZXIubW0gKi8sCisJCQkJOTM2QTJERTkw
RkQyRDA4NDAwRDMxMkRCIC8qIFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oICovLAorCQkJ
CTkzNkEyREU3MEZEMkQwODAwMEQzMTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIu
bW0gKi8sCiAJCQkJRjgzNEFBRDUwRTY0QjFDNzAwRTI3MzdDIC8qIFdlYlRleHRJdGVyYXRvci5o
ICovLAogCQkJCUY4MzRBQUQ2MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0b3IubW0g
Ki8sCiAJCQkJNTE1RTI3Q0MwNDU4Qzg2NTAwQ0EyRDNBIC8qIFdlYlVJRGVsZWdhdGUuaCAqLywK
QEAgLTE0MTYsNiArMTQyMiw3IEBACiAJCQkJQUI5RkJCQkIwRjg1ODJCMDAwNkFEQzQzIC8qIFdl
YkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEFFQkZGNjMwRjlG
QThCRTAwMEQ0ODZCIC8qIFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hlY2tQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwQUI3NTIzNzBGQTJFNERCMDBEN0NCQjEgLyogV2ViTmV0c2NhcGVDb250
YWluZXJDaGVja0NvbnRleHRJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MzZBMkRFQTBGRDJE
MDg0MDBEMzEyREIgLyogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE3NDIsNiArMTc0OSw3IEBACiAJCQkJMEFFQkZGNjQwRjlGQThCRTAwMEQ0ODZCIC8q
IFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hlY2tQcml2YXRlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEFCNzUyMzgwRkEyRTREQjAwRDdDQkIxIC8qIFdlYk5ldHNjYXBlQ29udGFpbmVyQ2hlY2tDb250
ZXh0SW5mby5tbSBpbiBTb3VyY2VzICovLAogCQkJCUUxNTY2MzE5MEZCNjFDMUYwMEMxOTlDQSAv
KiBXZWJEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTkzNkEyREU4MEZEMkQwODAwMEQz
MTJEQiAvKiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTU3IEBACisyMDA5LTA1LTMxICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBCdWcgMjYxMTI6IHZpZXdsZXNzIFdlYktpdCAtLSBtYWtlIGV2ZW50cyB3b3JrCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjExMgorCisgICAgICAg
IE9uZSBjaGFuZ2UgaGVyZSBpcyB0byBtYWtlIHRoZSAtW1dlYkZyYW1lIGZyYW1lVmlld10gZnVu
Y3Rpb24gYXNzZXJ0IGlmIGV2ZXIgY2FsbGVkCisgICAgICAgIGluIHZpZXdsZXNzIG1vZGUsIGFu
ZCBmaXggbWFueSBjYWxsZXJzIHRoYXQgd291bGQgdHJpcCB0aGF0IGFzc2VydGlvbi4KKworICAg
ICAgICBBIG1ham9yIGNoYW5nZSBpcyB0byBwdXQgc29tZSBtZXRob2RzIGFuZCBkYXRhIGluIFdl
YlZpZXcgdGhhdCBhcmUgY3VycmVudGx5IGluCisgICAgICAgIFdlYkhUTUxWaWV3LCB1c2VkIG9u
bHkgaW4gdmlld2xlc3MgbW9kZS4gQSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB1c2UgdGhlIFdlYlZp
ZXcKKyAgICAgICAgbWV0aG9kcyB3aGVuZXZlciBwb3NzaWJsZSwgZXZlbiB3aGVuIG5vdCBpbiB0
aGUgdmlld2xlc3MgbW9kZS4KKworICAgICAgICBBbHNvIGZpeCBGcmFtZVZpZXcgdG8gZG8gbm9y
bWFsIHJlZmVyZW5jZSBjb3VudGluZyBpbnN0ZWFkIG9mIGEgc3RyYW5nZSBtb2RlbCB3aXRoCisg
ICAgICAgIGFuIGV4cGxpY2l0IGRlcmVmIG5lYXIgY3JlYXRpb24gdGltZS4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNocm9tZUNs
aWVudDo6c2Nyb2xsUmVjdEludG9WaWV3KTogQWRkIGNvZGUgdG8gc3RhcnQgaW4gdGhlIGFwcHJv
cHJpYXRlIHBsYWNlCisgICAgICAgIHdoZW4gZGVhbGluZyB3aXRoIHZpZXdsZXNzIG1vZGUuIFRo
aXMgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB2aXNpdGluZyB0aGUgR29vZ2xlIGhvbWUgcGFnZS4KKyAg
ICAgICAgKFdlYkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcCk6IENoYW5nZWQgdG8gY2FsbCBXZWJW
aWV3IGluc3RlYWQgb2YgV2ViSFRNTFZpZXcuCisgICAgICAgIChXZWJDaHJvbWVDbGllbnQ6OnBy
aW50KTogQ2hhbmdlZCB0byB1c2UgYSBuZXcgc2VsZWN0b3IgdGhhdCBkb2Vzbid0IHJlcXVpcmUg
YQorICAgICAgICBXZWJGcmFtZVZpZXcgaWYgcHJlc2VudC4gQWxzbyBkb24ndCBldmVuIHRyeSB0
byB1c2UgdGhlIG9sZCBzZWxlY3RvciBpbiB2aWV3bGVzcyBtb2RlLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50
OjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKTogQ2hhbmdlZCB0byBjYWxsIFdlYlZpZXcgaW5z
dGVhZCBvZiBXZWJIVE1MVmlldy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRp
b25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOiBBZGRlZCBtb3JlIGNvZGUgcGF0aHMgZm9yCisgICAg
ICAgIHZpZXdsZXNzIG1vZGUgdG8gc2tpcCB0aGluZ3Mgd2UgY2FuJ3QgZG8gaW4gdGhhdCBtb2Rl
LCB3aXRoIGFwcHJvcHJpYXRlIEZJWE1FLgorICAgICAgICBVc2UgRnJhbWU6OmNyZWF0ZSBhbmQg
UmVmUHRyIGFuZCBlbGltaW5hdGUgdGhlIHN0cmFuZ2UgcmVmZXJlbmNlIGNvdW50aW5nIG9mIEZy
YW1lVmlldy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRGF0YVNvdXJjZS5tbToKKyAgICAgICAg
KC1bV2ViRGF0YVNvdXJjZSBfcmVjZWl2ZWREYXRhOl0pOiBBZGRlZCBhIF91c2VzRG9jdW1lbnRW
aWV3cyBndWFyZCBhcm91bmQgY29kZSB0aGF0J3MKKyAgICAgICAgc3BlY2lmaWMgdG8gZG9jdW1l
bnQgdmlld3MuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtX
ZWJGcmFtZSBfdXBkYXRlQmFja2dyb3VuZEFuZFVwZGF0ZXNXaGlsZU9mZnNjcmVlbl0pOiBBZGRl
ZCBhIF91c2VzRG9jdW1lbnRWaWV3cworICAgICAgICBndWFyZCBhcm91bmQgY29kZSB0aGF0J3Mg
c3BlY2lmaWMgdG8gZG9jdW1lbnQgdmlld3MuCisgICAgICAgICgtW1dlYkZyYW1lIF9oYXNTZWxl
Y3Rpb25dKTogQWRkZWQgYW4gaW1wbGVtZW50YXRpb24gZm9yIHZpZXdsZXNzIG1vZGUuCisgICAg
ICAgICgtW1dlYkZyYW1lIF9jbGVhclNlbGVjdGlvbl0pOiBBc3NlcnQgd2UncmUgbm90IGluIHZp
ZXdsZXNzIG1vZGU7IGl0IGRvZXNuJ3QgcmVhbGx5CisgICAgICAgIG1ha2Ugc2Vuc2UgdG8gY2xl
YXIgdGhlIHNlbGVjdGlvbiBpbiBvbmx5IG9uZSBmcmFtZSBpbiB2aWV3bGVzcyBtb2RlLiBMYXRl
ciB3ZSBjYW4KKyAgICAgICAgZGVjaWRlIHdoYXQgdG8gZG8uCisgICAgICAgICgtW1dlYkZyYW1l
IF9kcmFnU291cmNlTW92ZWRUbzpdKTogQXNzZXJ0IHdlJ3JlIG5vdCBpbiB2aWV3bGVzcyBtb2Rl
OyB0aGUgZHJhZ2dpbmcKKyAgICAgICAgY29kZSBmb3Igdmlld2xlc3MgbW9kZSBzaG91bGRuJ3Qg
aGF2ZSB0byBpbnZvbHZlIHRoZSBXZWJGcmFtZSBvYmplY3QgYXQgYWxsLgorICAgICAgICAoLVtX
ZWJGcmFtZSBfZHJhZ1NvdXJjZUVuZGVkQXQ6b3BlcmF0aW9uOl0pOiBEaXR0by4KKyAgICAgICAg
KC1bV2ViRnJhbWUgZnJhbWVWaWV3XSk6IEFzc2VydCB3ZSdyZSBub3QgaW4gdmlld2xlc3MgbW9k
ZS4gVGhpcyBhc3NlcnRpb24gZmlyZXMKKyAgICAgICAgb2Z0ZW4sIGJ1dCBpdCdzIGEgZ3JlYXQg
cG9pbnRlciB0byBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgY2hhbmdlZC4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3UHJpdmF0ZSBkZWFs
bG9jXSk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIG9mIGNvbXBDb250cm9sbGVyIHRvCisgICAg
ICAgIGNvbXBsZXRpb25Db250cm9sbGVyLgorICAgICAgICAoLVtXZWJIVE1MVmlld1ByaXZhdGUg
Y2xlYXJdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9mcmFtZU9yQm91bmRzQ2hh
bmdlZF0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgaGl0VGVzdDpdKTogVHdlYWtl
ZCBhIGNvbW1lbnQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF91cGRhdGVNb3VzZW92ZXJXaXRo
RXZlbnQ6XSk6IEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBmYWtlIGV2ZW50IGZvcgorICAgICAgICBt
b3ZpbmcgdGhlIG1vdXNlIG91dCBvZiB0aGUgb2xkIHZpZXcgZW5kZWQgdXAgb3ZlcndyaXRpbmcg
dGhlIGV2ZW50IGZvciBtb3ZpbmcKKyAgICAgICAgdGhlIG1vdXNlIHdpdGhpbiB0aGUgbmV3IHZp
ZXcuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1lbnVGb3JFdmVudDpdKTogVXBkYXRlZCBmb3Ig
bmFtZSBjaGFuZ2Ugb2YgY29tcENvbnRyb2xsZXIgdG8KKyAgICAgICAgY29tcGxldGlvbkNvbnRy
b2xsZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHdpbmRvd0RpZFJlc2lnbktleTpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHdpbmRvd1dpbGxDbG9zZTpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkhUTUxWaWV3IHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDpd
KTogQWRkZWQgbWlzc2luZyBicmFjZXMuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1vdXNlRG93
bjpdKTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2Ugb2YgY29tcENvbnRyb2xsZXIgdG8KKyAgICAg
ICAgY29tcGxldGlvbkNvbnRyb2xsZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHJlc2lnbkZp
cnN0UmVzcG9uZGVyXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBrZXlEb3duOl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgY29tcGxldGU6XSk6IERpdHRvLiBBbmQg
Zm9yIHRoZSBjaGFuZ2UgaW4gdGhlIGNsYXNzJ3MgbmFtZSBhbmQKKyAgICAgICAgaXRzIGluaXRp
YWxpemF0aW9uIGFyZ3VtZW50cy4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2ludGVyY2VwdEVk
aXRpbmdLZXlFdmVudDpzaG91bGRTYXZlQ29tbWFuZDpdKTogRGl0dG8uCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oOiBDb3BpZWQgZnJvbSBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0uCisgICAgICAgIFJlbW92ZWQgZXZlcnl0aGluZyBl
eGNlcHQgZm9yIHRoZSBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAg
ICogV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW06IENvcGllZCBmcm9tIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbS4KKyAgICAgICAgRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlVJRGVsZWdhdGVQcml2YXRlLmg6IEFkZGVkIHdlYlZpZXc6cHJpbnRG
cmFtZTogbWV0aG9kLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOiBNb3ZlZCBpbmNs
dWRlcyBhbmQgZmllbGRzIGluIGZyb20gV2ViSFRNTFZpZXcuCisgICAgICAgICgtW1dlYlZpZXcg
X3VzZXNEb2N1bWVudFZpZXdzXSk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIGZyb20gdXNlRG9j
dW1lbnRWaWV3cworICAgICAgICB0byB1c2VzRG9jdW1lbnRWaWV3cy4KKyAgICAgICAgKC1bV2Vi
VmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTp1c2VzRG9j
dW1lbnRWaWV3czpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgZHJhd1NpbmdsZVJlY3Q6
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IGlzRmxpcHBlZF0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViVmlldyBzZXRGcmFtZVNpemU6XSk6IERpdHRvLiBBbHNvIGNoYW5nZWQgdG8gdXNl
IF9tYWluQ29yZUZyYW1lIG1ldGhvZC4KKyAgICAgICAgKC1bV2ViVmlldyBfdmlld1dpbGxEcmF3
SW50ZXJuYWxdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgdmlld1dpbGxEcmF3XSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJWaWV3IGRyYXdSZWN0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViVmlldyBfY2xvc2VdKTogQWRkZWQgY29kZSB0byBuaWwgb3V0IHRoZSBsYXN0TW91c2VvdmVy
VmlldyBnbG9iYWwuCisgICAgICAgICgtW1dlYlZpZXcgX2Rhc2hib2FyZFJlZ2lvbnNdKTogVXNl
IF9tYWluQ29yZUZyYW1lLgorICAgICAgICAoLVtXZWJWaWV3IHNldFByb2hpYml0c01haW5GcmFt
ZVNjcm9sbGluZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX3NldEluVmlld1NvdXJj
ZU1vZGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9pblZpZXdTb3VyY2VNb2RlXSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9hdHRhY2hTY3JpcHREZWJ1Z2dlclRvQWxsRnJh
bWVzXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9kZXRhY2hTY3JpcHREZWJ1Z2dlckZy
b21BbGxGcmFtZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgdGV4dEl0ZXJhdG9yRm9y
UmVjdDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5
TmFtZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgYWRkV2luZG93T2JzZXJ2
ZXJzRm9yV2luZG93Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyByZW1vdmVXaW5kb3dP
YnNlcnZlcnNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX3VwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBfdXBkYXRlRm9jdXNlZEFu
ZEFjdGl2ZVN0YXRlRm9yRnJhbWU6XSk6IFR1cm5lZCBpbnRvIGEgY2xhc3MgbWV0aG9kLgorICAg
ICAgICBBZGRlZCBjb2RlIHRvIGhhbmRsZSB0aGUgdmlld2xlc3MgY2FzZSB3aXRob3V0IGNhbGxp
bmcgZnJhbWVWaWV3LgorICAgICAgICAoLVtXZWJWaWV3IF93aW5kb3dEaWRCZWNvbWVLZXk6XSk6
IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIGZyb20gdXNlRG9jdW1lbnRWaWV3cworICAgICAgICB0
byB1c2VzRG9jdW1lbnRWaWV3cy4KKyAgICAgICAgKC1bV2ViVmlldyBfd2luZG93RGlkUmVzaWdu
S2V5Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBfd2luZG93V2lsbE9yZGVyT25TY3Jl
ZW46XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IG1haW5GcmFtZV0pOiBUd2Vha2VkLgor
ICAgICAgICAoLVtXZWJWaWV3IHNlbGVjdGVkRnJhbWVdKTogQWRkZWQgYSBjb25kaXRpb25hbCB0
byBhdm9pZCB0cnlpbmcgdG8gZ2V0IGF0IHRoZQorICAgICAgICBmcmFtZSB2aWV3IGluIHZpZXds
ZXNzIGNhc2UuCisgICAgICAgICgtW1dlYlZpZXcgX3NldFpvb21NdWx0aXBsaWVyOmlzVGV4dE9u
bHk6XSk6IFVzZSBfbWFpbkNvcmVGcmFtZS4KKyAgICAgICAgKC1bV2ViVmlldyBzZXRDdXN0b21U
ZXh0RW5jb2RpbmdOYW1lOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyB3aW5kb3dTY3Jp
cHRPYmplY3RdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2V0SG9zdFdpbmRvdzpdKTog
RGl0dG8uIEFsc28gcHV0IHNvbWUgY29kZSB0aGF0J3MgbmVlZGVkIG9ubHkgZm9yCisgICAgICAg
IGRvY3VtZW50IHZpZXdzIGluc2lkZSBfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MuCisgICAg
ICAgICgtW1dlYlZpZXcgX2hpdFRlc3Q6ZHJhZ1R5cGVzOl0pOiBUd2Vha2VkLgorICAgICAgICAo
LVtXZWJWaWV3IGFjY2VwdHNGaXJzdFJlc3BvbmRlcl0pOiBBZGRlZCBjYXNlIGZvciB2aWV3bGVz
cyBtb2RlIGFsb25nIHdpdGggYQorICAgICAgICBGSVhNRSwgc2luY2UgaXQncyBub3QgY29tcGxl
dGUuCisgICAgICAgICgtW1dlYlZpZXcgYmVjb21lRmlyc3RSZXNwb25kZXJdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYlZpZXcgX3dlYmNvcmVfZWZmZWN0aXZlRmlyc3RSZXNwb25kZXJdKTogUHV0
IHRoZSBib2R5IG9mIHRoaXMgaW5zaWRlCisgICAgICAgIGEgdXNlc0RvY3VtZW50VmlldyBjaGVj
aywgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRoZSBmaXJzdCByZXNwb25kZXIgZm9yd2FyZGluZwor
ICAgICAgICBpbiB2aWV3bGVzcyBtb2RlLgorICAgICAgICAoLVtXZWJWaWV3IHNldE5leHRLZXlW
aWV3Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBtb3VzZURvd246XSk6IEFkZGVkLiBD
b3BpZWQgZnJvbSBXZWJIVE1MVmlldy4gRklYTUUgaW4gaGVyZSBzdWdnZXN0cworICAgICAgICB0
aGF0IHdlIG1ha2UgV2ViSFRNTFZpZXcgc2hhcmUgdGhpcyBvbmUgc29vbiwgd2hpY2ggSSB0aGlu
ayBpcyBwcmFjdGljYWwuCisgICAgICAgICgtW1dlYlZpZXcgbW91c2VVcDpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYlZpZXcgc2V0SG92ZXJGZWVkYmFja1N1c3BlbmRlZDpdKTogQWRkZWQgYSBj
b2RlIHBhdGggZm9yIHZpZXdsZXNzIG1vZGUuCisgICAgICAgICgtW1dlYlZpZXcgc2hvdWxkQ2xv
c2VdKTogVXNlIF9tYWluQ29yZUZyYW1lLgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmll
dyBzZXRFZGl0YWJsZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX2ZyYW1lVmlld0F0
V2luZG93UG9pbnQ6XSk6IEFkZGVkIGFuIGFzc2VydGlvbiB0aGF0IHdlJ3JlIG5vdCBpbgorICAg
ICAgICB2aWV3bGVzcyBtb2RlIHNpbmNlIHRoaXMgbWV0aG9kIG1ha2VzIG5vIHNlbnNlIGluIHRo
YXQgbW9kZS4KKyAgICAgICAgKC1bV2ViVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6XSk6IEFkZGVk
LiBDb3BpZWQgZnJvbSBXZWJIVE1MVmlldy4gSSBwbGFuIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0
aGUgb25lIGluIFdlYkhUTUxWaWV3IHNvb24uCisgICAgICAgICgtW1dlYlZpZXcgX2NhbmNlbFVw
ZGF0ZU1vdXNlb3ZlclRpbWVyXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9zdG9wQXV0
b3Njcm9sbFRpbWVyXSk6IERpdHRvLgorICAgICAgICAoK1tXZWJWaWV3IF91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF91cGRhdGVNb3VzZW92
ZXJXaXRoRmFrZUV2ZW50XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9zZXRUb29sVGlw
Ol0pOiBBZGRlZC4gQ2FsbHMgdGhyb3VnaCB0byB0aGUgV2ViSFRNTFZpZXcgdmVyc2lvbi4KKyAg
ICAgICAgKC1bV2ViVmlldyBfc2VsZWN0aW9uQ2hhbmdlZF0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViVmlldyBfbWFpbkNvcmVGcmFtZV0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViVmlldyBfbmVl
ZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbl0pOiBNb3ZlZCBpbnRvIHRoZSBXZWJJbnRl
cm5hbAorICAgICAgICBjYXRlZ29yeS4KKyAgICAgICAgKC1bV2ViVmlldyBfc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcg
X3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJWaWV3IF9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOl0pOiBE
aXR0by4KKyAgICAgICAgKHZpZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjayk6IERpdHRv
LgorICAgICAgICAoLVtXZWJWaWV3IF9zY2hlZHVsZVZpZXdVcGRhdGVdKTogRGl0dG8uCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOiBNYWRlIG1vc3Qgb2YgdGhlIGZpbGUg
bm90IGNvbXBpbGUgYXQgYWxsIHdoZW4KKyAgICAgICAgaW5jbHVkZWQgZnJvbSBub24tQysrIHNv
dXJjZSBmaWxlcywgZWxtaW5hdGluZyBzb21lIGV4Y2VzcyBkZWNsYXJhdGlvbnMgYW5kCisgICAg
ICAgIHR5cGVkZWZzLiBNb3ZlZCBtb3JlIG1ldGhvZHMgaW50byB0aGUgcmVhbCBpbnRlcm5hbCBj
YXRlZ29yeS4gQWRkZWQgbmV3CisgICAgICAgIG1ldGhvZHMgX3NldE1vdXNlRG93bkV2ZW50LCBf
Y2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXIsIF9zdG9wQXV0b3Njcm9sbFRpbWVyLAorICAgICAg
ICBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudCwgX3NlbGVjdGlvbkNoYW5nZWQsIGFuZCBf
c2V0VG9vbFRpcDouCisKIDIwMDktMDUtMzAgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgSlNMb2NrIHRvIC1bV2ViU2NyaXB0Q2FsbEZyYW1lIHNjb3Bl
Q2hhaW5dCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQkocmV2aXNpb24gNDQzMDkpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDc3LDE2ICs0NzcsMjAgQEAgdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OnNjcm9sbFJlY3RJbnRvVmlldwogICAgIC8vIEZJWE1FOiBUaGlzIHNj
cm9sbGluZyBiZWhhdmlvciBzaG91bGQgYmUgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIGVtYmVk
ZGluZyBjbGllbnQgKHJhdGhlciB0aGFuIHNvbWV0aGluZwogICAgIC8vIHdlIGp1c3QgZG8gb3Vy
c2VsdmVzKS4KICAgICAKLSAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQgYmFjayB0byBkb2N1bWVu
dCB2aWV3IGNvb3JkaW5hdGVzIGluIG9yZGVyIHRvIGxldCB0aGUgZmxpcHBpbmcgY29udmVyc2lv
biB0YWtlIHBsYWNlLiAgSXQganVzdAotICAgIC8vIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgdGhl
IHNjcm9sbFJlY3RJbnRvVmlldyBBUEkgdG8gdGFrZSBkb2N1bWVudCB2aWV3IGNvb3JkaW5hdGVz
LgogICAgIEludFJlY3Qgc2Nyb2xsUmVjdCA9IHI7Ci0gICAgc2Nyb2xsUmVjdC5tb3ZlKHNjcm9s
bFZpZXctPnNjcm9sbE9mZnNldCgpKTsKKyAgICBOU1ZpZXcgKnN0YXJ0VmlldyA9IG1fd2ViVmll
dzsKKyAgICBpZiAoW21fd2ViVmlldyBfdXNlc0RvY3VtZW50Vmlld3NdKSB7CisgICAgICAgIC8v
IFdlIGhhdmUgdG8gY29udmVydCBiYWNrIHRvIGRvY3VtZW50IHZpZXcgY29vcmRpbmF0ZXMuCisg
ICAgICAgIC8vIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgdGhlIHNjcm9sbFJlY3RJbnRvVmll
dyBBUEkgdG8gdGFrZSBkb2N1bWVudCB2aWV3IGNvb3JkaW5hdGVzLgorICAgICAgICBzY3JvbGxS
ZWN0Lm1vdmUoc2Nyb2xsVmlldy0+c2Nyb2xsT2Zmc2V0KCkpOworICAgICAgICBzdGFydFZpZXcg
PSBbW1ttX3dlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAg
fQogICAgIE5TUmVjdCByZWN0ID0gc2Nyb2xsUmVjdDsKLSAgICBmb3IgKE5TVmlldyAqdmlldyA9
IFtbW21fd2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsgdmlldzsg
dmlldyA9IFt2aWV3IHN1cGVydmlld10pIHsgCisgICAgZm9yIChOU1ZpZXcgKnZpZXcgPSBzdGFy
dFZpZXc7IHZpZXc7IHZpZXcgPSBbdmlldyBzdXBlcnZpZXddKSB7IAogICAgICAgICBpZiAoW3Zp
ZXcgaXNLaW5kT2ZDbGFzczpbTlNDbGlwVmlldyBjbGFzc11dKSB7IAogICAgICAgICAgICAgTlND
bGlwVmlldyAqY2xpcFZpZXcgPSAoTlNDbGlwVmlldyAqKXZpZXc7IAogICAgICAgICAgICAgTlNW
aWV3ICpkb2N1bWVudFZpZXcgPSBbY2xpcFZpZXcgZG9jdW1lbnRWaWV3XTsgCi0gICAgICAgICAg
ICBbZG9jdW1lbnRWaWV3IHNjcm9sbFJlY3RUb1Zpc2libGU6W2RvY3VtZW50VmlldyBjb252ZXJ0
UmVjdDpyZWN0IGZyb21WaWV3OltbW21fd2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9j
dW1lbnRWaWV3XV1dOyAKKyAgICAgICAgICAgIFtkb2N1bWVudFZpZXcgc2Nyb2xsUmVjdFRvVmlz
aWJsZTpbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6c3RhcnRWaWV3XV07
IAogICAgICAgICB9IAogICAgIH0KIH0KQEAgLTUwMiwxMyArNTA2LDE2IEBAIHZvaWQgV2ViQ2hy
b21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWwKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNl
dFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwKQogewotICAgIFsoV2ViSFRNTFZpZXcgKilb
W1ttX3dlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gX3NldFRvb2xU
aXA6dG9vbFRpcF07CisgICAgW21fd2ViVmlldyBfc2V0VG9vbFRpcDp0b29sVGlwXTsKIH0KIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1lKiBmcmFtZSkKIHsKLSAgICBXZWJGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IFtraXQoZnJhbWUpIGZyYW1lVmlld107Ci0gICAgQ2FsbFVJRGVs
ZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpwcmludEZyYW1lVmlldzopLCBmcmFt
ZVZpZXcpOworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IGtpdChmcmFtZSk7CisgICAgaWYgKFtb
bV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmll
dzpwcmludEZyYW1lOildKQorICAgICAgICBDYWxsVUlEZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxl
Y3Rvcih3ZWJWaWV3OnByaW50RnJhbWU6KSwgd2ViRnJhbWUpOworICAgIGVsc2UgaWYgKFttX3dl
YlZpZXcgX3VzZXNEb2N1bWVudFZpZXdzXSkKKyAgICAgICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJW
aWV3LCBAc2VsZWN0b3Iod2ViVmlldzpwcmludEZyYW1lVmlldzopLCBbd2ViRnJhbWUgZnJhbWVW
aWV3XSk7CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC02NDksMTUgKzY1NiwxNiBAQCBT
dHJpbmcgV2ViQ2hyb21lQ2xpZW50OjpnZW5lcmF0ZVJlcGxhY2VtCiB9CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290
R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIp
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogICAgIFdlYkZyYW1lVmlldyAq
ZnJhbWVWaWV3ID0gW2tpdChmcmFtZSkgZnJhbWVWaWV3XTsKLSAgICBXZWJIVE1MVmlldyAqZG9j
VmlldyA9IChXZWJIVE1MVmlldyAqKVtmcmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsKKyAgICBXZWJI
VE1MVmlldyAqZG9jdW1lbnRWaWV3ID0gKFdlYkhUTUxWaWV3ICopW2ZyYW1lVmlldyBkb2N1bWVu
dFZpZXddOwogICAgIGlmIChncmFwaGljc0xheWVyKQotICAgICAgICBbZG9jVmlldyBhdHRhY2hS
b290TGF5ZXI6Z3JhcGhpY3NMYXllci0+bmF0aXZlTGF5ZXIoKV07CisgICAgICAgIFtkb2N1bWVu
dFZpZXcgYXR0YWNoUm9vdExheWVyOmdyYXBoaWNzTGF5ZXItPm5hdGl2ZUxheWVyKCldOwogICAg
IGVsc2UKLSAgICAgICAgW2RvY1ZpZXcgZGV0YWNoUm9vdExheWVyXTsKKyAgICAgICAgW2RvY3Vt
ZW50VmlldyBkZXRhY2hSb290TGF5ZXJdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CiB9CiAKQEAgLTY3NCw2ICs2ODIsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVW
aWV3VXBkYXRlCiAgICAgW21fd2ViVmlldyBfc2NoZWR1bGVWaWV3VXBkYXRlXTsKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQorCiAjZW5kaWYKIAogdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSogZnJhbWUsIEdl
b2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOSAr
MjgwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRDbwogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbigpCiB7Ci0gICAgTlNW
aWV3IDxXZWJEb2N1bWVudFZpZXc+ICp2aWV3ID0gW1tbbV93ZWJWaWV3IHNlbGVjdGVkRnJhbWVd
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpb
V2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgWyhXZWJIVE1MVmlldyAqKXZpZXcgX3NlbGVj
dGlvbkNoYW5nZWRdOworICAgIFttX3dlYlZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgcXVpcmsgaXMgbmVlZGVkIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vNTAw
OTYyNT4gLSBXZSBjYW4gcGhhc2UgaXQgb3V0IG9uY2UgQXBlcnR1cmUgY2FuIGFkb3B0IHRoZSBu
ZXcgYmVoYXZpb3Igb24gdGhlaXIgZW5kCiAgICAgaWYgKCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIo
V0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9BUEVSVFVSRV9RVUlSSykgJiYgW1tbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0gaXNFcXVhbFRvU3RyaW5nOkAiY29tLmFw
cGxlLkFwZXJ0dXJlIl0pCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTAzNywyOCArMTAzNywzMCBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9u
VG9DCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZv
ck5ld1BhZ2UoKQogewotICAgIFdlYkZyYW1lVmlldyAqdiA9IG1fd2ViRnJhbWUtPl9wcml2YXRl
LT53ZWJGcmFtZVZpZXc7Ci0gICAgV2ViRGF0YVNvdXJjZSAqZHMgPSBbbV93ZWJGcmFtZS5nZXQo
KSBfZGF0YVNvdXJjZV07CisgICAgV2ViVmlldyAqd2ViVmlldyA9IGdldFdlYlZpZXcobV93ZWJG
cmFtZS5nZXQoKSk7CisgICAgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSA9IFttX3dlYkZyYW1l
LmdldCgpIF9kYXRhU291cmNlXTsKKyAgICBib29sIHVzZXNEb2N1bWVudFZpZXdzID0gW3dlYlZp
ZXcgX3VzZXNEb2N1bWVudFZpZXdzXTsKIAotICAgIGJvb2wgd2lsbFByb2R1Y2VIVE1MVmlldyA9
IFtbV2ViRnJhbWVWaWV3IGNsYXNzXSBfdmlld0NsYXNzRm9yTUlNRVR5cGU6W2RzIF9yZXNwb25z
ZU1JTUVUeXBlXV0gPT0gW1dlYkhUTUxWaWV3IGNsYXNzXTsKLSAgICBib29sIGNhblNraXBDcmVh
dGlvbiA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxvYWRlcigpLT5jb21taXR0aW5nRmlyc3RS
ZWFsTG9hZCgpICYmIHdpbGxQcm9kdWNlSFRNTFZpZXc7Ci0gICAgaWYgKGNhblNraXBDcmVhdGlv
bikgewotICAgICAgICBbW3YgZG9jdW1lbnRWaWV3XSBzZXREYXRhU291cmNlOmRzXTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAodXNlc0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAg
Ly8gRklYTUUgKFZpZXdsZXNzKTogSSBhc3N1bWUgd2Ugd2FudCB0aGUgZXF1aXZhbGVudCBvZiB0
aGlzIG9wdGltaXphdGlvbiBmb3Igdmlld2xlc3MgbW9kZSB0b28uCisgICAgICAgIGJvb2wgd2ls
bFByb2R1Y2VIVE1MVmlldyA9IFtbV2ViRnJhbWVWaWV3IGNsYXNzXSBfdmlld0NsYXNzRm9yTUlN
RVR5cGU6W2RhdGFTb3VyY2UgX3Jlc3BvbnNlTUlNRVR5cGVdXSA9PSBbV2ViSFRNTFZpZXcgY2xh
c3NdOworICAgICAgICBib29sIGNhblNraXBDcmVhdGlvbiA9IGNvcmUobV93ZWJGcmFtZS5nZXQo
KSktPmxvYWRlcigpLT5jb21taXR0aW5nRmlyc3RSZWFsTG9hZCgpICYmIHdpbGxQcm9kdWNlSFRN
TFZpZXc7CisgICAgICAgIGlmIChjYW5Ta2lwQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIFtbbV93
ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBkb2N1bWVudFZpZXddIHNldERhdGFTb3Vy
Y2U6ZGF0YVNvdXJjZV07CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgIC8v
IERvbid0IHN1cHByZXNzIHNjcm9sbGJhcnMgYmVmb3JlIHRoZSB2aWV3IGNyZWF0aW9uIGlmIHdl
J3JlIG1ha2luZyB0aGUgdmlldyBmb3IgYSBub24tSFRNTCB2aWV3LgotICAgIGlmICghd2lsbFBy
b2R1Y2VIVE1MVmlldykKLSAgICAgICAgW1t2IF9zY3JvbGxWaWV3XSBzZXRTY3JvbGxCYXJzU3Vw
cHJlc3NlZDpOTyByZXBhaW50T25VbnN1cHByZXNzOk5PXTsKKyAgICAgICAgLy8gRG9uJ3Qgc3Vw
cHJlc3Mgc2Nyb2xsYmFycyBiZWZvcmUgdGhlIHZpZXcgY3JlYXRpb24gaWYgd2UncmUgbWFraW5n
IHRoZSB2aWV3IGZvciBhIG5vbi1IVE1MIHZpZXcuCisgICAgICAgIGlmICghd2lsbFByb2R1Y2VI
VE1MVmlldykKKyAgICAgICAgICAgIFtbbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmll
dyBfc2Nyb2xsVmlld10gc2V0U2Nyb2xsQmFyc1N1cHByZXNzZWQ6Tk8gcmVwYWludE9uVW5zdXBw
cmVzczpOT107CisgICAgfQogICAgIAogICAgIC8vIGNsZWFuIHVwIHdlYmtpdCBwbHVnaW4gaW5z
dGFuY2VzIGJlZm9yZSBXZWJIVE1MVmlldyBnZXRzIGZyZWVkLgotICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkpOwogICAgIFt3ZWJWaWV3IHJlbW92ZVBs
dWdpbkluc3RhbmNlVmlld3NGb3I6KG1fd2ViRnJhbWUuZ2V0KCkpXTsKICAgICAKLSAgICBCT09M
IHVzZURvY3VtZW50Vmlld3MgPSBbd2ViVmlldyBfdXNlc0RvY3VtZW50Vmlld3NdOwogICAgIE5T
VmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gbmlsOwotICAgIGlmICh1c2VE
b2N1bWVudFZpZXdzKSB7Ci0gICAgICAgIGRvY3VtZW50VmlldyA9IFt2IF9tYWtlRG9jdW1lbnRW
aWV3Rm9yRGF0YVNvdXJjZTpkc107CisgICAgaWYgKHVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAg
ICAgIGRvY3VtZW50VmlldyA9IFttX3dlYkZyYW1lLT5fcHJpdmF0ZS0+d2ViRnJhbWVWaWV3IF9t
YWtlRG9jdW1lbnRWaWV3Rm9yRGF0YVNvdXJjZTpkYXRhU291cmNlXTsKICAgICAgICAgaWYgKCFk
b2N1bWVudFZpZXcpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA3MiwyOCArMTA3
NCwyOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9DCiAgICAgaWYg
KGlzTWFpbkZyYW1lICYmIGNvcmVGcmFtZS0+dmlldygpKQogICAgICAgICBjb3JlRnJhbWUtPnZp
ZXcoKS0+c2V0UGFyZW50VmlzaWJsZShmYWxzZSk7CiAgICAgY29yZUZyYW1lLT5zZXRWaWV3KDAp
OwotICAgIEZyYW1lVmlldyogY29yZVZpZXc7Ci0gICAgaWYgKHVzZURvY3VtZW50Vmlld3MpCi0g
ICAgICAgIGNvcmVWaWV3ID0gbmV3IEZyYW1lVmlldyhjb3JlRnJhbWUpOworICAgIFJlZlB0cjxG
cmFtZVZpZXc+IGNvcmVWaWV3OworICAgIGlmICh1c2VzRG9jdW1lbnRWaWV3cykKKyAgICAgICAg
Y29yZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShjb3JlRnJhbWUpOwogICAgIGVsc2UKLSAgICAg
ICAgY29yZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGNvcmVGcmFtZSwgSW50U2l6ZShbd2ViVmlldyBi
b3VuZHNdLnNpemUpKTsKKyAgICAgICAgY29yZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShjb3Jl
RnJhbWUsIEludFNpemUoW3dlYlZpZXcgYm91bmRzXS5zaXplKSk7CiAgICAgY29yZUZyYW1lLT5z
ZXRWaWV3KGNvcmVWaWV3KTsKLSAgICBjb3JlVmlldy0+ZGVyZWYoKTsgLy8gRklYTUU6IEVsaW1p
bmF0ZSB0aGlzIGNyYXp5IHJlZmNvdW50aW5nIQogCiAgICAgW21fd2ViRnJhbWUuZ2V0KCkgX3Vw
ZGF0ZUJhY2tncm91bmRBbmRVcGRhdGVzV2hpbGVPZmZzY3JlZW5dOwogCi0gICAgW3YgX2luc3Rh
bGxdOworICAgIGlmICh1c2VzRG9jdW1lbnRWaWV3cykKKyAgICAgICAgW21fd2ViRnJhbWUtPl9w
cml2YXRlLT53ZWJGcmFtZVZpZXcgX2luc3RhbGxdOwogCiAgICAgaWYgKGlzTWFpbkZyYW1lKQog
ICAgICAgICBjb3JlVmlldy0+c2V0UGFyZW50VmlzaWJsZSh0cnVlKTsKIAotICAgIC8vIENhbGwg
c2V0RGF0YVNvdXJjZSBvbiB0aGUgZG9jdW1lbnQgdmlldyBhZnRlciBpdCBoYXMgYmVlbiBwbGFj
ZWQgaW4gdGhlIHZpZXcgaGllcmFyY2h5LgotICAgIC8vIFRoaXMgd2hhdCB3ZSBmb3IgdGhlIHRv
cC1sZXZlbCB2aWV3LCBzbyBzaG91bGQgZG8gdGhpcyBmb3Igdmlld3MgaW4gc3ViZnJhbWVzIGFz
IHdlbGwuCi0gICAgW2RvY3VtZW50VmlldyBzZXREYXRhU291cmNlOmRzXTsKKyAgICBpZiAodXNl
c0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgLy8gQ2FsbCBzZXREYXRhU291cmNlIG9uIHRoZSBk
b2N1bWVudCB2aWV3IGFmdGVyIGl0IGhhcyBiZWVuIHBsYWNlZCBpbiB0aGUgdmlldyBoaWVyYXJj
aHkuCisgICAgICAgIC8vIFRoaXMgd2hhdCB3ZSBmb3IgdGhlIHRvcC1sZXZlbCB2aWV3LCBzbyBz
aG91bGQgZG8gdGhpcyBmb3Igdmlld3MgaW4gc3ViZnJhbWVzIGFzIHdlbGwuCisgICAgICAgIFtk
b2N1bWVudFZpZXcgc2V0RGF0YVNvdXJjZTpkYXRhU291cmNlXTsKKyAgICB9CiAgICAgCiAgICAg
aWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIgPSBjb3JlRnJhbWUtPm93bmVyRWxlbWVu
dCgpKQogICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJhcnMob3du
ZXItPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdheXNPZmYpOwotICAgIAogfQogCiBS
ZXRhaW5QdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lcj4gV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNl
dFVwUG9saWN5TGlzdGVuZXIoRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbikKSW5kZXg6IFdl
YktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCShyZXZpc2lvbiA0NDMwOSkKKysrIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0
LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVzRnJvbUNsYXNzKE5TTQogICAgIFJldGFp
blB0cjxXZWJEYXRhU291cmNlKj4gcHJvdGVjdChzZWxmKTsKICAgICAKICAgICBbW3NlbGYgcmVw
cmVzZW50YXRpb25dIHJlY2VpdmVkRGF0YTpkYXRhIHdpdGhEYXRhU291cmNlOnNlbGZdOwotICAg
IFtbW1tzZWxmIHdlYkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gZGF0YVNvdXJjZVVw
ZGF0ZWQ6c2VsZl07CisKKyAgICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfdXNlc0RvY3VtZW50Vmll
d3NdKQorICAgICAgICBbW1tbc2VsZiB3ZWJGcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXdd
IGRhdGFTb3VyY2VVcGRhdGVkOnNlbGZdOwogfQogCiAtICh2b2lkKV9zZXRNYWluRG9jdW1lbnRF
cnJvcjooTlNFcnJvciAqKWVycm9yCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShyZXZpc2lv
biA0NDMwOSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMzE4LDIyICszMTgsMjQgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2Vi
RnJhbWUpCiAKICAgICBGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsKLSAgICAgICAgV2ViRnJhbWUgKndlYkZy
YW1lID0ga2l0KGZyYW1lKTsKLSAgICAgICAgLy8gRG9uJ3QgY2FsbCBzZXREcmF3c0JhY2tncm91
bmQ6WUVTIGhlcmUgYmVjYXVzZSBpdCBtYXkgYmUgTk8gYmVjYXVzZSBvZiBhIGxvYWQKLSAgICAg
ICAgLy8gaW4gcHJvZ3Jlc3M7IFdlYkZyYW1lTG9hZGVyQ2xpZW50IGtlZXBzIGl0IHNldCB0byBO
TyBkdXJpbmcgdGhlIGxvYWQgcHJvY2Vzcy4KLSAgICAgICAgaWYgKCFkcmF3c0JhY2tncm91bmQp
Ci0gICAgICAgICAgICBbW1t3ZWJGcmFtZSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBzZXREcmF3
c0JhY2tncm91bmQ6Tk9dOwotICAgICAgICBbW1t3ZWJGcmFtZSBmcmFtZVZpZXddIF9zY3JvbGxW
aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3VuZENvbG9yXTsKLSAgICAgICAgaWQgZG9j
dW1lbnRWaWV3ID0gW1t3ZWJGcmFtZSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgICAg
IGlmIChbZG9jdW1lbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0RHJhd3NC
YWNrZ3JvdW5kOildKQotICAgICAgICAgICAgW2RvY3VtZW50VmlldyBzZXREcmF3c0JhY2tncm91
bmQ6ZHJhd3NCYWNrZ3JvdW5kXTsKLSAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KV0pCi0gICAgICAgICAgICBb
ZG9jdW1lbnRWaWV3IHNldEJhY2tncm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOwotICAgICAg
ICBpZiAoZnJhbWUgJiYgZnJhbWUtPnZpZXcoKSkgewotICAgICAgICAgICAgZnJhbWUtPnZpZXco
KS0+c2V0VHJhbnNwYXJlbnQoIWRyYXdzQmFja2dyb3VuZCk7Ci0gICAgICAgICAgICBDb2xvciBj
b2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW2JhY2tncm91bmRDb2xvciBjb2xvclVzaW5nQ29sb3JT
cGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSk7Ci0gICAgICAgICAgICBmcmFtZS0+dmll
dygpLT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKGNvbG9yKTsKLSAgICAgICAgICAgIGZyYW1lLT52
aWV3KCktPnNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKFt3ZWJWaWV3IHNob3VsZFVwZGF0
ZVdoaWxlT2Zmc2NyZWVuXSk7CisgICAgICAgIGlmIChbd2ViVmlldyBfdXNlc0RvY3VtZW50Vmll
d3NdKSB7CisgICAgICAgICAgICAvLyBEb24ndCBjYWxsIHNldERyYXdzQmFja2dyb3VuZDpZRVMg
aGVyZSBiZWNhdXNlIGl0IG1heSBiZSBOTyBiZWNhdXNlIG9mIGEgbG9hZAorICAgICAgICAgICAg
Ly8gaW4gcHJvZ3Jlc3M7IFdlYkZyYW1lTG9hZGVyQ2xpZW50IGtlZXBzIGl0IHNldCB0byBOTyBk
dXJpbmcgdGhlIGxvYWQgcHJvY2Vzcy4KKyAgICAgICAgICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9
IGtpdChmcmFtZSk7CisgICAgICAgICAgICBpZiAoIWRyYXdzQmFja2dyb3VuZCkKKyAgICAgICAg
ICAgICAgICBbW1t3ZWJGcmFtZSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBzZXREcmF3c0JhY2tn
cm91bmQ6Tk9dOworICAgICAgICAgICAgW1tbd2ViRnJhbWUgZnJhbWVWaWV3XSBfc2Nyb2xsVmll
d10gc2V0QmFja2dyb3VuZENvbG9yOmJhY2tncm91bmRDb2xvcl07CisgICAgICAgICAgICBpZCBk
b2N1bWVudFZpZXcgPSBbW3dlYkZyYW1lIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICAg
ICAgICAgIGlmIChbZG9jdW1lbnRWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0
RHJhd3NCYWNrZ3JvdW5kOildKQorICAgICAgICAgICAgICAgIFtkb2N1bWVudFZpZXcgc2V0RHJh
d3NCYWNrZ3JvdW5kOmRyYXdzQmFja2dyb3VuZF07CisgICAgICAgICAgICBpZiAoW2RvY3VtZW50
VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xvcjopXSkK
KyAgICAgICAgICAgICAgICBbZG9jdW1lbnRWaWV3IHNldEJhY2tncm91bmRDb2xvcjpiYWNrZ3Jv
dW5kQ29sb3JdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZy
YW1lLT52aWV3KCkpIHsKKyAgICAgICAgICAgIHZpZXctPnNldFRyYW5zcGFyZW50KCFkcmF3c0Jh
Y2tncm91bmQpOworICAgICAgICAgICAgdmlldy0+c2V0QmFzZUJhY2tncm91bmRDb2xvcihjb2xv
ckZyb21OU0NvbG9yKFtiYWNrZ3JvdW5kQ29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5T
RGV2aWNlUkdCQ29sb3JTcGFjZV0pKTsKKyAgICAgICAgICAgIHZpZXctPnNldFNob3VsZFVwZGF0
ZVdoaWxlT2Zmc2NyZWVuKFt3ZWJWaWV3IHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuXSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzAsMjEgKzM3MiwyNyBAQCBXZWJWaWV3ICpnZXRXZWJW
aWV3KFdlYkZyYW1lICp3ZWJGcmFtZSkKIAogLSAoQk9PTClfaGFzU2VsZWN0aW9uCiB7Ci0gICAg
aWQgZG9jdW1lbnRWaWV3ID0gW19wcml2YXRlLT53ZWJGcmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsg
ICAgCisgICAgaWYgKFtnZXRXZWJWaWV3KHNlbGYpIF91c2VzRG9jdW1lbnRWaWV3c10pIHsKKyAg
ICAgICAgaWQgZG9jdW1lbnRWaWV3ID0gW19wcml2YXRlLT53ZWJGcmFtZVZpZXcgZG9jdW1lbnRW
aWV3XTsgICAgCiAKLSAgICAvLyBvcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBjYXNlIHRvIGF2b2lk
IGNyZWF0aW5nIHBvdGVudGlhbGx5IGxhcmdlIHNlbGVjdGlvbiBzdHJpbmcKLSAgICBpZiAoW2Rv
Y3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAgICBp
ZiAoRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUpCi0gICAgICAgICAgICBy
ZXR1cm4gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOworICAgICAgICAvLyBvcHRp
bWl6YXRpb24gZm9yIGNvbW1vbiBjYXNlIHRvIGF2b2lkIGNyZWF0aW5nIHBvdGVudGlhbGx5IGxh
cmdlIHNlbGVjdGlvbiBzdHJpbmcKKyAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOwogCi0gICAgaWYgKFtkb2N1bWVudFZpZXcgY29u
Zm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJEb2N1bWVudFRleHQpXSkKLSAgICAgICAgcmV0
dXJuIFtbZG9jdW1lbnRWaWV3IHNlbGVjdGVkU3RyaW5nXSBsZW5ndGhdID4gMDsKLSAgICAKLSAg
ICByZXR1cm4gTk87CisgICAgICAgIGlmIChbZG9jdW1lbnRWaWV3IGNvbmZvcm1zVG9Qcm90b2Nv
bDpAcHJvdG9jb2woV2ViRG9jdW1lbnRUZXh0KV0pCisgICAgICAgICAgICByZXR1cm4gW1tkb2N1
bWVudFZpZXcgc2VsZWN0ZWRTdHJpbmddIGxlbmd0aF0gPiAwOworICAgICAgICAKKyAgICAgICAg
cmV0dXJuIE5POworICAgIH0KKworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29y
ZUZyYW1lOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNSYW5nZSgpOwogfQogCiAtICh2b2lkKV9jbGVhclNlbGVjdGlvbgogeworICAgIEFTU0VSVChb
Z2V0V2ViVmlldyhzZWxmKSBfdXNlc0RvY3VtZW50Vmlld3NdKTsKICAgICBpZCBkb2N1bWVudFZp
ZXcgPSBbX3ByaXZhdGUtPndlYkZyYW1lVmlldyBkb2N1bWVudFZpZXddOyAgICAKICAgICBpZiAo
W2RvY3VtZW50VmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6QHByb3RvY29sKFdlYkRvY3VtZW50VGV4
dCldKQogICAgICAgICBbZG9jdW1lbnRWaWV3IGRlc2VsZWN0QWxsXTsKQEAgLTkxMCw2ICs5MTgs
NyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAgICAgRnJhbWVW
aWV3KiB2aWV3ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+dmlldygpOwogICAgIGlmICghdmlldykK
ICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChbZ2V0V2ViVmlldyhzZWxmKSBfdXNlc0RvY3Vt
ZW50Vmlld3NdKTsKICAgICAvLyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZpZXIga2V5cyBo
ZXJlLCBidXQgdGhleSBzaG91bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCiAgICAgUGxhdGZvcm1N
b3VzZUV2ZW50IGV2ZW50KEludFBvaW50KHdpbmRvd0xvYyksIGdsb2JhbFBvaW50KHdpbmRvd0xv
YywgW3ZpZXctPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSksCiAgICAgICAgIExlZnRCdXR0b24s
IE1vdXNlRXZlbnRNb3ZlZCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGN1cnJlbnRU
aW1lKCkpOwpAQCAtOTIzLDYgKzkzMiw3IEBAIHN0YXRpYyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAq
ZGF0YVNvdXJjZSgKICAgICBGcmFtZVZpZXcqIHZpZXcgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52
aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKFtnZXRX
ZWJWaWV3KHNlbGYpIF91c2VzRG9jdW1lbnRWaWV3c10pOwogICAgIC8vIEZJWE1FOiBUaGVzZSBh
cmUgZmFrZSBtb2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSByZWFsIG9uZXMg
aW5zdGVhZC4KICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQod2luZG93TG9j
KSwgZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3dd
KSwKICAgICAgICAgTGVmdEJ1dHRvbiwgTW91c2VFdmVudE1vdmVkLCAwLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7CkBAIC0xMTc5LDYgKzExODksNyBAQCBzdGF0
aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2UoCiAKIC0gKFdlYkZyYW1lVmlldyAq
KWZyYW1lVmlldwogeworICAgIEFTU0VSVCghZ2V0V2ViVmlldyhzZWxmKSB8fCBbZ2V0V2ViVmll
dyhzZWxmKSBfdXNlc0RvY3VtZW50Vmlld3NdKTsKICAgICByZXR1cm4gX3ByaXZhdGUtPndlYkZy
YW1lVmlldzsKIH0KIApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkocmV2aXNpb24g
NDQzMDkpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDYgKzY4LDcgQEAKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgog
I2ltcG9ydCAiV2ViUmVzb3VyY2VQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0
b3IuaCIKKyNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAi
V2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaCIKICNp
bXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgpAQCAtMTAwLDcgKzEwMSw2IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
UGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2hhcmVk
QnVmZmVyLmg+CkBAIC0yMzcsNyArMjM3LDYgQEAgZXh0ZXJuIE5TU3RyaW5nICpOU1RleHRJbnB1
dFJlcGxhY2VtZW50UgogCiBAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMp
CiAtIChpZClfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKLS0gKHZvaWQpX3NldEZv
cmNlQWN0aXZlQ29udHJvbHM6KEJPT0wpZmxhZzsKIEBlbmQKIAogQGludGVyZmFjZSBOU0F0dHJp
YnV0ZWRTdHJpbmcgKFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCkBAIC00MDUsMjQgKzQw
NCw2IEBAIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCogcHJvbWlzZWREYXQKIC0gKHZvaWQp
X3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleTooaWQpa2V5OwogQGVuZAog
Ci0vLyBIYW5kbGVzIHRoZSBjb21wbGV0ZTogdGV4dCBjb21tYW5kCi1AaW50ZXJmYWNlIFdlYlRl
eHRDb21wbGV0ZUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TlNUYWJsZVZpZXdEZWxlZ2F0ZSwgTlNU
YWJsZVZpZXdEYXRhU291cmNlPiB7Ci1AcHJpdmF0ZQotICAgIFdlYkhUTUxWaWV3ICpfdmlldzsK
LSAgICBOU1dpbmRvdyAqX3BvcHVwV2luZG93OwotICAgIE5TVGFibGVWaWV3ICpfdGFibGVWaWV3
OwotICAgIE5TQXJyYXkgKl9jb21wbGV0aW9uczsKLSAgICBOU1N0cmluZyAqX29yaWdpbmFsU3Ry
aW5nOwotICAgIGludCBwcmVmaXhMZW5ndGg7Ci19Ci0tIChpZClpbml0V2l0aEhUTUxWaWV3OihX
ZWJIVE1MVmlldyAqKXZpZXc7Ci0tICh2b2lkKWRvQ29tcGxldGlvbjsKLS0gKHZvaWQpZW5kUmV2
ZXJ0aW5nQ2hhbmdlOihCT09MKXJldmVydENoYW5nZSBtb3ZlTGVmdDooQk9PTClnb0xlZnQ7Ci0t
IChCT09MKXBvcHVwV2luZG93SXNPcGVuOwotLSAoQk9PTClmaWx0ZXJLZXlEb3duOihOU0V2ZW50
ICopZXZlbnQ7Ci0tICh2b2lkKV9yZWZsZWN0U2VsZWN0aW9uOwotQGVuZAotCiBzdHJ1Y3QgV2Vi
SFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHsKICAgICBLZXlib2FyZEV2ZW50
KiBldmVudDsKICAgICBCT09MIGV2ZW50V2FzSGFuZGxlZDsKQEAgLTQ3OSw3ICs0NjAsNyBAQCBz
dHJ1Y3QgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhCiAgICAgQk9PTCBuZXh0UmVz
cG9uZGVyRGlzYWJsZWRPbmNlOwogI2VuZGlmCiAgICAgCi0gICAgV2ViVGV4dENvbXBsZXRlQ29u
dHJvbGxlciAqY29tcENvbnRyb2xsZXI7CisgICAgV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVy
ICpjb21wbGV0aW9uQ29udHJvbGxlcjsKICAgICAKICAgICBCT09MIHRyYW5zcGFyZW50QmFja2dy
b3VuZDsKIApAQCAtNTYxLDcgKzU0Miw3IEBAIHN0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChU
cmlTdGF0ZSBzdGEKICAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOwogICAgIFtwbHVnaW5Db250
cm9sbGVyIHJlbGVhc2VdOwogICAgIFt0b29sVGlwIHJlbGVhc2VdOwotICAgIFtjb21wQ29udHJv
bGxlciByZWxlYXNlXTsKKyAgICBbY29tcGxldGlvbkNvbnRyb2xsZXIgcmVsZWFzZV07CiAgICAg
W2RhdGFTb3VyY2UgcmVsZWFzZV07CiAgICAgW2hpZ2hsaWdodGVycyByZWxlYXNlXTsKICAgICBp
ZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCkBAIC01ODYsNyArNTY3LDcgQEAgc3RhdGlj
IE5TQ2VsbFN0YXRlVmFsdWUga2l0KFRyaVN0YXRlIHN0YQogICAgIFtrZXlEb3duRXZlbnQgcmVs
ZWFzZV07CiAgICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07CiAgICAgW3Rvb2xUaXAgcmVs
ZWFzZV07Ci0gICAgW2NvbXBDb250cm9sbGVyIHJlbGVhc2VdOworICAgIFtjb21wbGV0aW9uQ29u
dHJvbGxlciByZWxlYXNlXTsKICAgICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKICAgICBbaGlnaGxp
Z2h0ZXJzIHJlbGVhc2VdOwogICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKQEAg
LTU5Niw3ICs1NzcsNyBAQCBzdGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3Rh
CiAgICAga2V5RG93bkV2ZW50ID0gbmlsOwogICAgIHBsdWdpbkNvbnRyb2xsZXIgPSBuaWw7CiAg
ICAgdG9vbFRpcCA9IG5pbDsKLSAgICBjb21wQ29udHJvbGxlciA9IG5pbDsKKyAgICBjb21wbGV0
aW9uQ29udHJvbGxlciA9IG5pbDsKICAgICBkYXRhU291cmNlID0gbmlsOwogICAgIGhpZ2hsaWdo
dGVycyA9IG5pbDsKICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IDA7CkBAIC0xMTk5
LDcgKzExODAsNyBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjCiAg
ICAgaWYgKCFOU0VxdWFsUG9pbnRzKF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24sIG9yaWdp
bikpIHsKICAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
KQogICAgICAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZFNjcm9sbEV2ZW50
KCk7Ci0gICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdl
Ok5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxl
ciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwogICAgICAgICAKICAgICAgICAg
V2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKICAgICAgICAgW1t3ZWJWaWV3IF9V
SURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlkU2Nyb2xsRG9jdW1lbnRJbkZy
YW1lVmlldzpbc2VsZiBfZnJhbWVWaWV3XV07CkBAIC0xNDMxLDggKzE0MTIsOCBAQCBzdGF0aWMg
dm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjCiAgICAgLy8gICAgICB3aGVuIHRoZXJl
IGlzIEhUTUwgb3ZlcmxhcHBpbmcgdGhlIHZpZXcsIHNlZSBidWcgNDM2MTYyNikKICAgICAvLyAg
IDQpIE5TQWNjZXNzaWJpbGl0eUhpdFRlc3QgcmVsaWVzIG9uIHRoaXMgZm9yIGNoZWNraW5nIHRo
ZSBjdXJzb3IgcG9zaXRpb24uCiAgICAgLy8gICAgICBPdXIgY2hlY2sgZm9yIHRoYXQgaXMgd2hl
dGhlciB0aGUgZXZlbnQgaXMgTlNGbGFnc0NoYW5nZWQuICBUaGlzIHdvcmtzCi0gICAgLy8gICAg
ICBmb3IgVm9pY2VPdmVyJ3MgY250bC1vcHQtZjUgY29tbWFuZCAobW92ZSBmb2N1cyB0byBpdGVt
IHVuZGVyIGN1cnNvcikKLSAgICAvLyAgICAgIGFuZCBEaWN0aW9uYXJ5J3MgY21kLWNudGwtRCAo
b3BlbiBkaWN0aW9uYXJ5IHBvcHVwIGZvciBpdGVtIHVuZGVyIGN1cnNvcikuCisgICAgLy8gICAg
ICBmb3IgVm9pY2VPdmVyJ3MgQ29udHJvbC1PcHRpb24tRjUgY29tbWFuZCAobW92ZSBmb2N1cyB0
byBpdGVtIHVuZGVyIGN1cnNvcikKKyAgICAvLyAgICAgIGFuZCBEaWN0aW9uYXJ5J3MgQ29tbWFu
ZC1Db250cm9sLUQgKG9wZW4gZGljdGlvbmFyeSBwb3B1cCBmb3IgaXRlbSB1bmRlciBjdXJzb3Ip
LgogICAgIC8vICAgICAgVGhpcyBpcyBvZiBjb3Vyc2UgYSBoYWNrLgogCiAgICAgQk9PTCBjYXB0
dXJlSGl0c09uU3Vidmlld3M7CkBAIC0xNjAxLDE4ICsxNTgyLDE4IEBAIHN0YXRpYyB2b2lkIF91
cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWMKICAgICBpZiAobGFzdEhpdFZpZXcgIT0gdmlldyAm
JiBsYXN0SGl0VmlldyAmJiBbbGFzdEhpdFZpZXcgX2ZyYW1lXSkgewogICAgICAgICAvLyBJZiB3
ZSBhcmUgbW92aW5nIG91dCBvZiBhIHZpZXcgKG9yIGZyYW1lKSwgbGV0J3MgcHJldGVuZCB0aGUg
bW91c2UgbW92ZWQKICAgICAgICAgLy8gYWxsIHRoZSB3YXkgb3V0IG9mIHRoYXQgdmlldy4gQnV0
IHdlIGhhdmUgdG8gYWNjb3VudCBmb3Igc2Nyb2xsaW5nLCBiZWNhdXNlCi0gICAgICAgIC8vIGto
dG1sIGRvZXNuJ3QgdW5kZXJzdGFuZCBvdXIgY2xpcHBpbmcuCisgICAgICAgIC8vIFdlYkNvcmUg
ZG9lc24ndCB1bmRlcnN0YW5kIG91ciBjbGlwcGluZy4KICAgICAgICAgTlNSZWN0IHZpc2libGVS
ZWN0ID0gW1tbW2xhc3RIaXRWaWV3IF9mcmFtZV0gZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gZG9j
dW1lbnRWaXNpYmxlUmVjdF07CiAgICAgICAgIGZsb2F0IHlTY3JvbGwgPSB2aXNpYmxlUmVjdC5v
cmlnaW4ueTsKICAgICAgICAgZmxvYXQgeFNjcm9sbCA9IHZpc2libGVSZWN0Lm9yaWdpbi54Owog
Ci0gICAgICAgIGV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3Zl
ZAotICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0xIC0geFNj
cm9sbCwgLTEgLSB5U2Nyb2xsICkKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZs
YWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQotICAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0
ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1t2aWV3IHdpbmRvd10g
d2luZG93TnVtYmVyXQotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBj
dXJyZW50RXZlbnRdIGNvbnRleHRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1i
ZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgICAgIE5TRXZlbnQgKmV2ZW50ID0g
W05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAgICAgICAgbG9j
YXRpb246TlNNYWtlUG9pbnQoLTEgLSB4U2Nyb2xsLCAtMSAtIHlTY3JvbGwpCisgICAgICAgICAg
ICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQorICAg
ICAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRl
XQorICAgICAgICAgICAgd2luZG93TnVtYmVyOltbdmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl0K
KyAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAg
ICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKICAgICAgICAg
aWYgKEZyYW1lKiBsYXN0SGl0Q29yZUZyYW1lID0gY29yZShbbGFzdEhpdFZpZXcgX2ZyYW1lXSkp
CiAgICAgICAgICAgICBsYXN0SGl0Q29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3Zl
ZChldmVudCk7CiAgICAgfQpAQCAtMTc4Niw3ICsxNzY3LDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0
ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhYwogICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIHNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZF0gJiYgW1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVj
dDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07CiB9CiAKLS0gKHZvaWQpX3N0YXJ0QXV0b3Njcm9s
bFRpbWVyOiAoTlNFdmVudCAqKXRyaWdnZXJFdmVudAorLSAodm9pZClfc3RhcnRBdXRvc2Nyb2xs
VGltZXI6KE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKIHsKICAgICBpZiAoX3ByaXZhdGUtPmF1dG9z
Y3JvbGxUaW1lciA9PSBuaWwpIHsKICAgICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9
IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6QVVUT1NDUk9MTF9JTlRF
UlZBTApAQCAtMTk2NCw3ICsxOTQ1LDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZU1vdXNlb3ZlclRp
bWVyQ2FsbGJhYwogewogICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3Rh
dGVUaW1lcl07CiAKLSAgICBbW3NlbGYgX3dlYlZpZXddIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZl
U3RhdGVGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKKyAgICBbV2ViVmlldyBfdXBkYXRlRm9jdXNl
ZEFuZEFjdGl2ZVN0YXRlRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07CiB9CiAKIC0gKHZvaWQpX3dy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCkBAIC0z
MDc5LDcgKzMwNjAsNyBAQCBzdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRl
CiAgICAgLy8gaW5zaWRlIEFwcEtpdCBjb2RlLgogICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVs
ZWFzZV07CiAKLSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5n
ZTpOTyBtb3ZlTGVmdDpOT107CisgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBl
bmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwogCiAgICAgUmVmUHRyPEZyYW1lPiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQpAQCAt
MzA5Myw3ICszMDc0LDcgQEAgc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0
ZQogICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gWUVTOwogICAgIHBhZ2Ut
PmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jbGVhckNvbnRleHRNZW51KCk7CiAgICAgY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VEb3duKGV2ZW50KTsKLSAgICBCT09MIGhhbmRsZWRF
dmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KFBs
YXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoZXZlbnQpOwogICAgIF9w
cml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gTk87CiAKICAgICBpZiAoIWhhbmRsZWRF
dmVudCkKQEAgLTMzMDYsNyArMzI4Nyw3IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGUKIAogICAgIGlmIChmb3JtZXJLZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8
fCBmb3JtZXJLZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVldF0pIHsKICAg
ICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci0gICAgICAgIFtfcHJp
dmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsK
KyAgICAgICAgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFu
Z2U6Tk8gbW92ZUxlZnQ6Tk9dOwogICAgIH0KIH0KIApAQCAtMzMxNyw3ICszMjk4LDcgQEAgc3Rh
dGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6
Tk8gbW92ZUxlZnQ6Tk9dOworICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5k
UmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKICAgICBbW3NlbGYgX3BsdWdpbkNvbnRy
b2xsZXJdIGRlc3Ryb3lBbGxQbHVnaW5zXTsKIH0KIApAQCAtMzM4NSwxMiArMzM2NiwxMyBAQCBz
dGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCiAgICAgV2ViSFRNTFZpZXcg
KmhpdEhUTUxWaWV3ID0gW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8gKFdl
YkhUTUxWaWV3ICopaGl0VmlldyA6IG5pbDsKICAgICBpZiAoaGl0SFRNTFZpZXcpIHsKICAgICAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxl
Y3Rpb25FdmVudDpldmVudF0pCisgICAgICAgIGlmIChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9u
RXZlbnQ6ZXZlbnRdKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W2hpdEhUTUxWaWV3IF9mcmFtZV0pKSB7CiAgICAgICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9z
ZXRNb3VzZURvd25FdmVudDpldmVudF07CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZlbnRNYXlTdGFydERyYWcoZXZlbnQpOwogICAgICAgICAg
ICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKICAgICAgICAgICAg
IH0KKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICByZXR1cm4g
W2hpdFZpZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OmV2ZW50XTsKQEAgLTM0
MTYsNyArMzM5OCw3IEBAIHN0YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUK
ICAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAm
JiBbY3VycmVudElucHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKICAgICAgICAg
Z290byBkb25lOwogCi0gICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdD
aGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xs
ZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKIAogICAgIC8vIElmIHRoZSB3
ZWIgcGFnZSBoYW5kbGVzIHRoZSBjb250ZXh0IG1lbnUgZXZlbnQgYW5kIG1lbnVGb3JFdmVudDog
cmV0dXJucyBuaWwsIHdlJ2xsIGdldCBjb250cm9sIGNsaWNrIGV2ZW50cyBoZXJlLgogICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gcGFzcyB0aGVtIGFsb25nIHRvIEtIVE1MIGEgc2Vjb25kIHRpbWUu
CkBAIC0zNjc5LDcgKzM2NjEsNyBAQCBzdGF0aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChGcmFt
ZSogY29yCiAgICAgQk9PTCByZXNpZ24gPSBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJdOwog
ICAgIGlmIChyZXNpZ24pIHsKICAgICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVzcG9u
ZGVyID0gWUVTOwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGlu
Z0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNv
bnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKICAgICAgICAgaWYg
KCFbc2VsZiBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pIHsgCiAgICAgICAgICAgICBbc2Vs
ZiBkZXNlbGVjdEFsbF07CiAgICAgICAgICAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX2lzUGVy
Zm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKQEAgLTM5NzksMTUgKzM5NjEsMTUgQEAgc3RhdGlj
IEJPT0wgaXNJblBhc3N3b3JkRmllbGQoRnJhbWUqIGNvcgogICAgIFtfcHJpdmF0ZS0+a2V5RG93
bkV2ZW50IHJlbGVhc2VdOwogICAgIF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPSBbZXZlbnQgcmV0
YWluXTsKIAotICAgIEJPT0wgY29tcGxldGlvblBvcHVwV2FzT3BlbiA9IF9wcml2YXRlLT5jb21w
Q29udHJvbGxlciAmJiBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIHBvcHVwV2luZG93SXNPcGVu
XTsKKyAgICBCT09MIGNvbXBsZXRpb25Qb3B1cFdhc09wZW4gPSBfcHJpdmF0ZS0+Y29tcGxldGlv
bkNvbnRyb2xsZXIgJiYgW19wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciBwb3B1cFdpbmRv
d0lzT3Blbl07CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAg
ICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkgewogICAgICAgICAvLyBXZWJDb3JlIHBy
b2Nlc3NlZCBhIGtleSBldmVudCwgYmFpbCBvbiBhbnkgcHJlZXhpc3RpbmcgY29tcGxldGU6IFVJ
CiAgICAgICAgIGlmIChjb21wbGV0aW9uUG9wdXBXYXNPcGVuKQotICAgICAgICAgICAgW19wcml2
YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsK
LSAgICB9IGVsc2UgaWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgfHwgIVtfcHJpdmF0ZS0+
Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5RG93bjpldmVudF0pIHsKKyAgICAgICAgICAgIFtfcHJp
dmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVm
dDpOT107CisgICAgfSBlbHNlIGlmICghX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIHx8
ICFbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGZpbHRlcktleURvd246ZXZlbnRdKSB7
CiAgICAgICAgIC8vIE5vdCBjb25zdW1lZCBieSBjb21wbGV0ZTogcG9wdXAgd2luZG93Ci0gICAg
ICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3Zl
TGVmdDpOT107CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5kUmV2
ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CiAgICAgICAgIGNhbGxTdXBlciA9IFlFUzsK
ICAgICB9CiAgICAgaWYgKGNhbGxTdXBlcikKQEAgLTQ2MTMsOSArNDU5NSw5IEBAIE5TU3Ryb2tl
Q29sb3JBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0MKIAogICAgIGlmICghW3NlbGYgX2NhbkVk
aXRdKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIp
Ci0gICAgICAgIF9wcml2YXRlLT5jb21wQ29udHJvbGxlciA9IFtbV2ViVGV4dENvbXBsZXRlQ29u
dHJvbGxlciBhbGxvY10gaW5pdFdpdGhIVE1MVmlldzpzZWxmXTsKLSAgICBbX3ByaXZhdGUtPmNv
bXBDb250cm9sbGVyIGRvQ29tcGxldGlvbl07CisgICAgaWYgKCFfcHJpdmF0ZS0+Y29tcGxldGlv
bkNvbnRyb2xsZXIpCisgICAgICAgIF9wcml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciA9IFtb
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6W3NlbGYg
X3dlYlZpZXddIEhUTUxWaWV3OnNlbGZdOworICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRy
b2xsZXIgZG9Db21wbGV0aW9uXTsKIH0KIAogLSAodm9pZCljaGVja1NwZWxsaW5nOihpZClzZW5k
ZXIKQEAgLTUzNDAsNyArNTMyMiw3IEBAIHN0YXRpYyBDR1BvaW50IGNvcmVHcmFwaGljc1NjcmVl
blBvaW50Rm8KIAogICAgIGlmIChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRmb3Jt
RXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKSkgewogICAgICAgICBOU0V2ZW50ICptYWNFdmVudCA9
IHBsYXRmb3JtRXZlbnQtPm1hY0V2ZW50KCk7Ci0gICAgICAgIGlmIChbbWFjRXZlbnQgdHlwZV0g
PT0gTlNLZXlEb3duICYmIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5RG93bjpt
YWNFdmVudF0pCisgICAgICAgIGlmIChbbWFjRXZlbnQgdHlwZV0gPT0gTlNLZXlEb3duICYmIFtf
cHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZmlsdGVyS2V5RG93bjptYWNFdmVudF0pCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChbbWFjRXZlbnQg
dHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpCkBAIC01ODg0LDI5MiArNTg2Niw2IEBAIHN0YXRpYyB2
b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0cmlidXQKIAogQGVuZAogCi0vKgotICAgIFRoaXMg
Y2xhc3MgcnVucyB0aGUgc2hvdyBmb3IgaGFuZGluZyB0aGUgY29tcGxldGU6IE5TVGV4dFZpZXcg
b3BlcmF0aW9uLiAgSXQgY291bnRzIG9uIGl0cyBIVE1MIHZpZXcKLSAgICB0byBjYWxsIGVuZFJl
dmVydGluZ0NoYW5nZTogd2hlbmV2ZXIgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBuZWVkcyB0byBi
ZSBhYm9ydGVkLgotIAotICAgIFRoZSBjbGFzcyBpcyBpbiBvbmUgb2YgdHdvIG1vZGVzOiAgUG9w
dXBXaW5kb3cgc2hvd2luZywgb3Igbm90LiAgSXQgaXMgc2hvd24gd2hlbiBhIGNvbXBsZXRpb24g
eWllbGRzCi0gICAgbW9yZSB0aGFuIG9uZSBtYXRjaC4gIElmIGEgY29tcGxldGlvbiB5aWVsZHMg
b25lIG9yIHplcm8gbWF0Y2hlcywgaXQgaXMgbm90IHNob3duLCBhbmQgKip0aGVyZSBpcyBubwot
ICAgIHN0YXRlIGNhcnJpZWQgYWNyb3NzIHRvIHRoZSBuZXh0IGNvbXBsZXRpb24qKi4KLSAqLwot
Ci1AaW1wbGVtZW50YXRpb24gV2ViVGV4dENvbXBsZXRlQ29udHJvbGxlcgotCi0tIChpZClpbml0
V2l0aEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKXZpZXcKLXsKLSAgICBzZWxmID0gW3N1cGVyIGlu
aXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBfdmlldyA9IHZp
ZXc7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtfcG9w
dXBXaW5kb3cgcmVsZWFzZV07Ci0gICAgW19jb21wbGV0aW9ucyByZWxlYXNlXTsKLSAgICBbX29y
aWdpbmFsU3RyaW5nIHJlbGVhc2VdOwotICAgIAotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQot
LSAodm9pZClfaW5zZXJ0TWF0Y2g6KE5TU3RyaW5nICopbWF0Y2gKLXsKLSAgICAvLyBGSVhNRTog
Mzc2OTY1NCAtIFdlIHNob3VsZCBwcmVzZXJ2ZSBjYXNlIG9mIHN0cmluZyBiZWluZyBpbnNlcnRl
ZCwgZXZlbiBpbiBwcmVmaXggKGJ1dCB0aGVuIGFsc28gYmUKLSAgICAvLyBhYmxlIHRvIHJldmVy
dCB0aGF0KS4gIE1pbWljIE5TVGV4dC4KLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2Zy
YW1lXTsKLSAgICBOU1N0cmluZyAqbmV3VGV4dCA9IFttYXRjaCBzdWJzdHJpbmdGcm9tSW5kZXg6
cHJlZml4TGVuZ3RoXTsKLSAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdU
ZXh0IHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwotfQotCi0vLyBtb3N0
bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0KLS0gKHZvaWQpX2J1aWxkVUkK
LXsKLSAgICBOU1JlY3Qgc2Nyb2xsRnJhbWUgPSBOU01ha2VSZWN0KDAsIDAsIDEwMCwgMTAwKTsK
LSAgICBOU1JlY3QgdGFibGVGcmFtZSA9IE5TWmVyb1JlY3Q7ICAgIAotICAgIHRhYmxlRnJhbWUu
c2l6ZSA9IFtOU1Njcm9sbFZpZXcgY29udGVudFNpemVGb3JGcmFtZVNpemU6c2Nyb2xsRnJhbWUu
c2l6ZSBoYXNIb3Jpem9udGFsU2Nyb2xsZXI6Tk8gaGFzVmVydGljYWxTY3JvbGxlcjpZRVMgYm9y
ZGVyVHlwZTpOU05vQm9yZGVyXTsKLSAgICAvLyBBZGRlZCBjYXN0IHRvIHdvcmsgYXJvdW5kIHBy
b2JsZW0gd2l0aCBtdWx0aXBsZSBGb3VuZGF0aW9uIGluaXRXaXRoSWRlbnRpZmllcjogbWV0aG9k
cyB3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXIgdHlwZXMuCi0gICAgTlNUYWJsZUNvbHVtbiAqY29s
dW1uID0gWyhOU1RhYmxlQ29sdW1uICopW05TVGFibGVDb2x1bW4gYWxsb2NdIGluaXRXaXRoSWRl
bnRpZmllcjpbTlNOdW1iZXIgbnVtYmVyV2l0aEludDowXV07Ci0gICAgW2NvbHVtbiBzZXRXaWR0
aDp0YWJsZUZyYW1lLnNpemUud2lkdGhdOwotICAgIFtjb2x1bW4gc2V0RWRpdGFibGU6Tk9dOwot
ICAgIAotICAgIF90YWJsZVZpZXcgPSBbW05TVGFibGVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
OnRhYmxlRnJhbWVdOwotICAgIFtfdGFibGVWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3
V2lkdGhTaXphYmxlXTsKLSAgICBbX3RhYmxlVmlldyBhZGRUYWJsZUNvbHVtbjpjb2x1bW5dOwot
ICAgIFtjb2x1bW4gcmVsZWFzZV07Ci0gICAgW190YWJsZVZpZXcgc2V0R3JpZFN0eWxlTWFzazpO
U1RhYmxlVmlld0dyaWROb25lXTsKLSAgICBbX3RhYmxlVmlldyBzZXRDb3JuZXJWaWV3Om5pbF07
Ci0gICAgW190YWJsZVZpZXcgc2V0SGVhZGVyVmlldzpuaWxdOwotICAgIFtfdGFibGVWaWV3IHNl
dENvbHVtbkF1dG9yZXNpemluZ1N0eWxlOk5TVGFibGVWaWV3VW5pZm9ybUNvbHVtbkF1dG9yZXNp
emluZ1N0eWxlXTsKLSAgICBbX3RhYmxlVmlldyBzZXREZWxlZ2F0ZTpzZWxmXTsKLSAgICBbX3Rh
YmxlVmlldyBzZXREYXRhU291cmNlOnNlbGZdOwotICAgIFtfdGFibGVWaWV3IHNldFRhcmdldDpz
ZWxmXTsKLSAgICBbX3RhYmxlVmlldyBzZXREb3VibGVBY3Rpb246QHNlbGVjdG9yKHRhYmxlQWN0
aW9uOildOwotICAgIAotICAgIE5TU2Nyb2xsVmlldyAqc2Nyb2xsVmlldyA9IFtbTlNTY3JvbGxW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOnNjcm9sbEZyYW1lXTsKLSAgICBbc2Nyb2xsVmlldyBz
ZXRCb3JkZXJUeXBlOk5TTm9Cb3JkZXJdOwotICAgIFtzY3JvbGxWaWV3IHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsZXI6WUVTXTsKLSAgICBbc2Nyb2xsVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmll
d1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGVdOwotICAgIFtzY3JvbGxWaWV3IHNl
dERvY3VtZW50VmlldzpfdGFibGVWaWV3XTsKLSAgICBbX3RhYmxlVmlldyByZWxlYXNlXTsKLSAg
ICAKLSAgICBfcG9wdXBXaW5kb3cgPSBbW05TV2luZG93IGFsbG9jXSBpbml0V2l0aENvbnRlbnRS
ZWN0OnNjcm9sbEZyYW1lIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrIGJhY2tpbmc6
TlNCYWNraW5nU3RvcmVCdWZmZXJlZCBkZWZlcjpOT107Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRB
bHBoYVZhbHVlOjAuODhmXTsKLSAgICBbX3BvcHVwV2luZG93IHNldENvbnRlbnRWaWV3OnNjcm9s
bFZpZXddOwotICAgIFtzY3JvbGxWaWV3IHJlbGVhc2VdOwotICAgIFtfcG9wdXBXaW5kb3cgc2V0
SGFzU2hhZG93OllFU107Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRPbmVTaG90OllFU107Ci0gICAg
W19wb3B1cFdpbmRvdyBfc2V0Rm9yY2VBY3RpdmVDb250cm9sczpZRVNdOwotICAgIFtfcG9wdXBX
aW5kb3cgc2V0UmVsZWFzZWRXaGVuQ2xvc2VkOk5PXTsKLX0KLQotLy8gbW9zdGx5IGxpZnRlZCBm
cm9tIE5TVGV4dFZpZXdfS2V5QmluZGluZy5tCi0tICh2b2lkKV9wbGFjZVBvcHVwV2luZG93OihO
U1BvaW50KXRvcExlZnQKLXsKLSAgICBpbnQgbnVtYmVyVG9TaG93ID0gW19jb21wbGV0aW9ucyBj
b3VudF07Ci0gICAgaWYgKG51bWJlclRvU2hvdyA+IDIwKSB7Ci0gICAgICAgIG51bWJlclRvU2hv
dyA9IDIwOwotICAgIH0KLQotICAgIE5TUmVjdCB3aW5kb3dGcmFtZTsKLSAgICBOU1BvaW50IHdv
cmRTdGFydCA9IHRvcExlZnQ7Ci0gICAgd2luZG93RnJhbWUub3JpZ2luID0gW1tfdmlldyB3aW5k
b3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W192aWV3IGNvbnZlcnRQb2ludDp3b3JkU3RhcnQgdG9W
aWV3Om5pbF1dOwotICAgIHdpbmRvd0ZyYW1lLnNpemUuaGVpZ2h0ID0gbnVtYmVyVG9TaG93ICog
W190YWJsZVZpZXcgcm93SGVpZ2h0XSArIChudW1iZXJUb1Nob3cgKyAxKSAqIFtfdGFibGVWaWV3
IGludGVyY2VsbFNwYWNpbmddLmhlaWdodDsKLSAgICB3aW5kb3dGcmFtZS5vcmlnaW4ueSAtPSB3
aW5kb3dGcmFtZS5zaXplLmhlaWdodDsKLSAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TRm9udCBzeXN0ZW1G
b250T2ZTaXplOjEyLjBmXSwgTlNGb250QXR0cmlidXRlTmFtZSwgbmlsXTsKLSAgICBmbG9hdCBt
YXhXaWR0aCA9IDAuMGY7Ci0gICAgaW50IG1heEluZGV4ID0gLTE7Ci0gICAgaW50IGk7Ci0gICAg
Zm9yIChpID0gMDsgaSA8IG51bWJlclRvU2hvdzsgaSsrKSB7Ci0gICAgICAgIGZsb2F0IHdpZHRo
ID0gY2VpbGYoW1tfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDppXSBzaXplV2l0aEF0dHJpYnV0
ZXM6YXR0cmlidXRlc10ud2lkdGgpOwotICAgICAgICBpZiAod2lkdGggPiBtYXhXaWR0aCkgewot
ICAgICAgICAgICAgbWF4V2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgIG1heEluZGV4ID0gaTsK
LSAgICAgICAgfQotICAgIH0KLSAgICB3aW5kb3dGcmFtZS5zaXplLndpZHRoID0gMTAwOwotICAg
IGlmIChtYXhJbmRleCA+PSAwKSB7Ci0gICAgICAgIG1heFdpZHRoID0gY2VpbGYoW05TU2Nyb2xs
VmlldyBmcmFtZVNpemVGb3JDb250ZW50U2l6ZTpOU01ha2VTaXplKG1heFdpZHRoLCAxMDAuMGYp
IGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNhbFNjcm9sbGVyOllFUyBib3JkZXJU
eXBlOk5TTm9Cb3JkZXJdLndpZHRoKTsKLSAgICAgICAgbWF4V2lkdGggPSBjZWlsZihbTlNXaW5k
b3cgZnJhbWVSZWN0Rm9yQ29udGVudFJlY3Q6TlNNYWtlUmVjdCgwLjBmLCAwLjBmLCBtYXhXaWR0
aCwgMTAwLjBmKSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFza10uc2l6ZS53aWR0aCk7
Ci0gICAgICAgIG1heFdpZHRoICs9IDUuMGY7Ci0gICAgICAgIHdpbmRvd0ZyYW1lLnNpemUud2lk
dGggPSBNQVgobWF4V2lkdGgsIHdpbmRvd0ZyYW1lLnNpemUud2lkdGgpOwotICAgICAgICBtYXhX
aWR0aCA9IE1JTig0MDAuMGYsIHdpbmRvd0ZyYW1lLnNpemUud2lkdGgpOwotICAgIH0KLSAgICBb
X3BvcHVwV2luZG93IHNldEZyYW1lOndpbmRvd0ZyYW1lIGRpc3BsYXk6Tk9dOwotICAgIAotICAg
IFtfdGFibGVWaWV3IHJlbG9hZERhdGFdOwotICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4
ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6MF0gYnlFeHRlbmRpbmdTZWxlY3Rpb246
Tk9dOwotICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTowXTsKLSAgICBbc2VsZiBf
cmVmbGVjdFNlbGVjdGlvbl07Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRMZXZlbDpOU1BvcFVwTWVu
dVdpbmRvd0xldmVsXTsKLSAgICBbX3BvcHVwV2luZG93IG9yZGVyRnJvbnQ6bmlsXTsgICAgCi0g
ICAgW1tfdmlldyB3aW5kb3ddIGFkZENoaWxkV2luZG93Ol9wb3B1cFdpbmRvdyBvcmRlcmVkOk5T
V2luZG93QWJvdmVdOwotfQotCi0tICh2b2lkKWRvQ29tcGxldGlvbgotewotICAgIGlmICghX3Bv
cHVwV2luZG93KSB7Ci0gICAgICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxD
aGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07Ci0gICAgICAgIGlmICghY2hlY2tlcikgewotICAg
ICAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVtCi0g
ICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVdOwotICAgICAgICBET01SYW5n
ZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7Ci0gICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3Jh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6RVhURU5E
Ci0gICAgICAgICAgICBkaXJlY3Rpb246U2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dBUkQgZ3Jh
bnVsYXJpdHk6V29yZEdyYW51bGFyaXR5XTsKLSAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3
aG9sZVdvcmQgY2xvbmVSYW5nZV07Ci0gICAgICAgIFtwcmVmaXggc2V0RW5kOltzZWxlY3Rpb24g
c3RhcnRDb250YWluZXJdIG9mZnNldDpbc2VsZWN0aW9uIHN0YXJ0T2Zmc2V0XV07Ci0KLSAgICAg
ICAgLy8gUmVqZWN0IHNvbWUgTk9QIGNhc2VzCi0gICAgICAgIGlmIChbcHJlZml4IGNvbGxhcHNl
ZF0pIHsKLSAgICAgICAgICAgIE5TQmVlcCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIE5TU3RyaW5nICpwcmVmaXhTdHIgPSBbZnJhbWUgX3N0cmluZ0ZvclJhbmdl
OnByZWZpeF07Ci0gICAgICAgIE5TU3RyaW5nICp0cmltbWVkUHJlZml4ID0gW3ByZWZpeFN0ciBz
dHJpbmdCeVRyaW1taW5nQ2hhcmFjdGVyc0luU2V0OltOU0NoYXJhY3RlclNldCB3aGl0ZXNwYWNl
QW5kTmV3bGluZUNoYXJhY3RlclNldF1dOwotICAgICAgICBpZiAoW3RyaW1tZWRQcmVmaXggbGVu
Z3RoXSA9PSAwKSB7Ci0gICAgICAgICAgICBOU0JlZXAoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBwcmVmaXhMZW5ndGggPSBbcHJlZml4U3RyIGxlbmd0aF07Ci0K
LSAgICAgICAgLy8gTG9va3VwIG1hdGNoZXMKLSAgICAgICAgW19jb21wbGV0aW9ucyByZWxlYXNl
XTsKLSAgICAgICAgX2NvbXBsZXRpb25zID0gW2NoZWNrZXIgY29tcGxldGlvbnNGb3JQYXJ0aWFs
V29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIFtwcmVmaXhTdHIgbGVuZ3RoXSkgaW5TdHJpbmc6cHJl
Zml4U3RyIGxhbmd1YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOltbX3ZpZXcgX3dlYlZp
ZXddIHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnXV07Ci0gICAgICAgIFtfY29tcGxldGlvbnMgcmV0
YWluXTsKLSAgICAKLSAgICAgICAgaWYgKCFfY29tcGxldGlvbnMgfHwgW19jb21wbGV0aW9ucyBj
b3VudF0gPT0gMCkgewotICAgICAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
W19jb21wbGV0aW9ucyBjb3VudF0gPT0gMSkgewotICAgICAgICAgICAgW3NlbGYgX2luc2VydE1h
dGNoOltfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDowXV07Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoIV9vcmlnaW5hbFN0cmluZyk7ICAgICAgIC8vIHRoaXMgc2hvdWxk
IG9ubHkgYmUgc2V0IElGRiB3ZSBoYXZlIGEgcG9wdXAgd2luZG93Ci0gICAgICAgICAgICBfb3Jp
Z2luYWxTdHJpbmcgPSBbW2ZyYW1lIF9zdHJpbmdGb3JSYW5nZTpzZWxlY3Rpb25dIHJldGFpbl07
Ci0gICAgICAgICAgICBbc2VsZiBfYnVpbGRVSV07Ci0gICAgICAgICAgICBOU1JlY3Qgd29yZFJl
Y3QgPSBbZnJhbWUgX2NhcmV0UmVjdEF0Tm9kZTpbd2hvbGVXb3JkIHN0YXJ0Q29udGFpbmVyXSBv
ZmZzZXQ6W3dob2xlV29yZCBzdGFydE9mZnNldF0gYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0
eURvd25zdHJlYW1dOwotICAgICAgICAgICAgLy8gKzEgdG8gYmUgdW5kZXIgdGhlIHdvcmQsIG5v
dCB0aGUgY2FyZXQKLSAgICAgICAgICAgIC8vIEZJWE1FIC0gMzc2OTY1MiAtIFdyb25nIHBvc2l0
aW9uaW5nIGZvciByaWdodCB0byBsZWZ0IGxhbmd1YWdlcy4gIFdlIHNob3VsZCBsaW5lIHVwIHRo
ZSB1cHBlcgotICAgICAgICAgICAgLy8gcmlnaHQgY29ybmVyIHdpdGggdGhlIGNhcmV0IGluc3Rl
YWQgb2YgdXBwZXIgbGVmdCwgYW5kIHRoZSArMSB3b3VsZCBiZSBhIC0xLgotICAgICAgICAgICAg
TlNQb2ludCB3b3JkTG93ZXJMZWZ0ID0geyBOU01pblgod29yZFJlY3QpKzEsIE5TTWF4WSh3b3Jk
UmVjdCkgfTsKLSAgICAgICAgICAgIFtzZWxmIF9wbGFjZVBvcHVwV2luZG93OndvcmRMb3dlckxl
ZnRdOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5n
Q2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0gICAgfQotfQotCi0tICh2b2lkKWVuZFJldmVydGlu
Z0NoYW5nZTooQk9PTClyZXZlcnRDaGFuZ2UgbW92ZUxlZnQ6KEJPT0wpZ29MZWZ0Ci17Ci0gICAg
aWYgKF9wb3B1cFdpbmRvdykgewotICAgICAgICAvLyB0ZWFyIGRvd24gVUkKLSAgICAgICAgW1tf
dmlldyB3aW5kb3ddIHJlbW92ZUNoaWxkV2luZG93Ol9wb3B1cFdpbmRvd107Ci0gICAgICAgIFtf
cG9wdXBXaW5kb3cgb3JkZXJPdXQ6c2VsZl07Ci0gICAgICAgIC8vIE11c3QgYXV0b3JlbGVhc2Ug
YmVjYXVzZSBldmVudCB0cmFja2luZyBjb2RlIG1heSBiZSBvbiB0aGUgc3RhY2sgdG91Y2hpbmcg
VUkKLSAgICAgICAgW19wb3B1cFdpbmRvdyBhdXRvcmVsZWFzZV07Ci0gICAgICAgIF9wb3B1cFdp
bmRvdyA9IG5pbDsKLQotICAgICAgICBpZiAocmV2ZXJ0Q2hhbmdlKSB7Ci0gICAgICAgICAgICBX
ZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKLSAgICAgICAgICAgIFtmcmFtZSBfcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBzZWxlY3RSZXBsYWNlbWVudDpZ
RVMgc21hcnRSZXBsYWNlOk5PXTsKLSAgICAgICAgfSBlbHNlIGlmIChbX3ZpZXcgX2hhc1NlbGVj
dGlvbl0pIHsKLSAgICAgICAgICAgIGlmIChnb0xlZnQpCi0gICAgICAgICAgICAgICAgW192aWV3
IG1vdmVCYWNrd2FyZDpuaWxdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFtf
dmlldyBtb3ZlRm9yd2FyZDpuaWxdOwotICAgICAgICB9Ci0gICAgICAgIFtfb3JpZ2luYWxTdHJp
bmcgcmVsZWFzZV07Ci0gICAgICAgIF9vcmlnaW5hbFN0cmluZyA9IG5pbDsKLSAgICB9Ci0gICAg
Ly8gZWxzZSB0aGVyZSBpcyBubyBzdGF0ZSB0byBhYm9ydCBpZiB0aGUgd2luZG93IHdhcyBub3Qg
dXAKLX0KLQotLSAoQk9PTClwb3B1cFdpbmRvd0lzT3BlbgotewotICAgIHJldHVybiBfcG9wdXBX
aW5kb3cgIT0gbmlsOwotfQotCi0vLyBXZWJIVE1MVmlldyBnaXZlcyB1cyBhIGNyYWNrIGF0IGtl
eSBldmVudHMgaXQgc2Vlcy4gUmV0dXJuIHdoZXRoZXIgd2UgY29uc3VtZWQgdGhlIGV2ZW50Lgot
Ly8gVGhlIGZlYXR1cmVzIGZvciB0aGUgdmFyaW91cyBrZXlzIG1pbWljIE5TVGV4dFZpZXcuCi0t
IChCT09MKWZpbHRlcktleURvd246KE5TRXZlbnQgKilldmVudAotewotICAgIGlmICghX3BvcHVw
V2luZG93KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVu
dCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOwotICAgIGlmICghW3N0cmluZyBsZW5ndGhd
KQotICAgICAgICByZXR1cm4gTk87Ci0gICAgdW5pY2hhciBjID0gW3N0cmluZyBjaGFyYWN0ZXJB
dEluZGV4OjBdOwotICAgIGlmIChjID09IE5TVXBBcnJvd0Z1bmN0aW9uS2V5KSB7Ci0gICAgICAg
IGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVkUm93XTsKLSAgICAgICAgaWYg
KDAgPCBzZWxlY3RlZFJvdykgewotICAgICAgICAgICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5k
ZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDpzZWxlY3RlZFJvdyAtIDFdIGJ5RXh0
ZW5kaW5nU2VsZWN0aW9uOk5PXTsKLSAgICAgICAgICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1Rv
VmlzaWJsZTpzZWxlY3RlZFJvdyAtIDFdOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBZRVM7
Ci0gICAgfQotICAgIGlmIChjID09IE5TRG93bkFycm93RnVuY3Rpb25LZXkpIHsKLSAgICAgICAg
aW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOwotICAgICAgICBpZiAo
c2VsZWN0ZWRSb3cgPCAoaW50KVtfY29tcGxldGlvbnMgY291bnRdIC0gMSkgewotICAgICAgICAg
ICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJ
bmRleDpzZWxlY3RlZFJvdyArIDFdIGJ5RXh0ZW5kaW5nU2VsZWN0aW9uOk5PXTsKLSAgICAgICAg
ICAgIFtfdGFibGVWaWV3IHNjcm9sbFJvd1RvVmlzaWJsZTpzZWxlY3RlZFJvdyArIDFdOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIGlmIChjID09IE5TUmlnaHRB
cnJvd0Z1bmN0aW9uS2V5IHx8IGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAnXHQnKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IGJhY2t0YWI/Ci0gICAgICAgIFtzZWxmIGVu
ZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIHJldHVybiBZRVM7Ci0g
ICAgfQotICAgIGlmIChjID09IE5TTGVmdEFycm93RnVuY3Rpb25LZXkpIHsKLSAgICAgICAgW3Nl
bGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0OllFU107Ci0gICAgICAgIHJldHVybiBZ
RVM7Ci0gICAgfQotICAgIGlmIChjID09IDB4MUIgfHwgYyA9PSBOU0Y1RnVuY3Rpb25LZXkpIHsK
LSAgICAgICAgLy8gRklYTUU6IEY1PwotICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6
WUVTIG1vdmVMZWZ0Ok5PXTsKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMg
PT0gJyAnIHx8IGMgPj0gMHgyMSAmJiBjIDw9IDB4MkYgfHwgYyA+PSAweDNBICYmIGMgPD0gMHg0
MCB8fCBjID49IDB4NUIgJiYgYyA8PSAweDYwIHx8IGMgPj0gMHg3QiAmJiBjIDw9IDB4N0QpIHsK
LSAgICAgICAgLy8gRklYTUU6IElzIHRoZSBhYm92ZSBsaXN0IG9mIGtleXMgcmVhbGx5IGRlZmlu
aXRpdmU/Ci0gICAgICAgIC8vIE9yaWdpbmFsbHkgdGhpcyBjb2RlIGNhbGxlZCBpc3B1bmN0OyBh
cmVuJ3QgdGhlcmUgb3RoZXIgcHVuY3R1YXRpb24ga2V5cyBvbiBpbnRlcm5hdGlvbmFsIGtleWJv
YXJkcz8KLSAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsK
LSAgICAgICAgcmV0dXJuIE5POyAvLyBsZXQgdGhlIGNoYXIgZ2V0IGluc2VydGVkCi0gICAgfQot
ICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClfcmVmbGVjdFNlbGVjdGlvbgotewotICAgIGlu
dCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVkUm93XTsKLSAgICBBU1NFUlQoc2Vs
ZWN0ZWRSb3cgPj0gMCAmJiBzZWxlY3RlZFJvdyA8IChpbnQpW19jb21wbGV0aW9ucyBjb3VudF0p
OwotICAgIFtzZWxmIF9pbnNlcnRNYXRjaDpbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6c2Vs
ZWN0ZWRSb3ddXTsKLX0KLQotLSAodm9pZCl0YWJsZUFjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAg
W3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOwotICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpO
TyBtb3ZlTGVmdDpOT107Ci19Ci0KLS0gKE5TSW50ZWdlciludW1iZXJPZlJvd3NJblRhYmxlVmll
dzooTlNUYWJsZVZpZXcgKil0YWJsZVZpZXcKLXsKLSAgICByZXR1cm4gW19jb21wbGV0aW9ucyBj
b3VudF07Ci19Ci0KLS0gKGlkKXRhYmxlVmlldzooTlNUYWJsZVZpZXcgKil0YWJsZVZpZXcgb2Jq
ZWN0VmFsdWVGb3JUYWJsZUNvbHVtbjooTlNUYWJsZUNvbHVtbiAqKXRhYmxlQ29sdW1uIHJvdzoo
TlNJbnRlZ2VyKXJvdwotewotICAgIHJldHVybiBbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6
cm93XTsKLX0KLQotLSAodm9pZCl0YWJsZVZpZXdTZWxlY3Rpb25EaWRDaGFuZ2U6KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOwot
fQotCi1AZW5kCi0KIEBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRQcml2
YXRlUHJvdG9jb2xzKQogCiAtIChOU1JlY3Qpc2VsZWN0aW9uUmVjdApJbmRleDogV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24g
NDQyOTIpCShmcm9tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbTo0NDI5MikKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY0MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgIChDKSAyMDA2LCAyMDA3IEdyYWhhbSBEZW5uaXMgKGdyYWhhbS5kZW5uaXNAZ21h
aWwuY29tKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgIldlYkhUTUxWaWV3LmgiCisKKyNpbXBvcnQgIkRPTUNTU1N0eWxl
RGVjbGFyYXRpb25JbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NRG9jdW1lbnRGcmFnbWVudEludGVy
bmFsLmgiCisjaW1wb3J0ICJET01Eb2N1bWVudEludGVybmFsLmgiCisjaW1wb3J0ICJET01Ob2Rl
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVJhbmdlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkFy
Y2hpdmUuaCIKKyNpbXBvcnQgIldlYkNsaXBWaWV3LmgiCisjaW1wb3J0ICJXZWJET01PcGVyYXRp
b25zSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV2ViRGVmYXVsdFVJRGVsZWdhdGUuaCIKKyNpbXBvcnQgIldlYkRvY3VtZW50SW50ZXJuYWwu
aCIKKyNpbXBvcnQgIldlYkR5bmFtaWNTY3JvbGxCYXJzVmlldy5oIgorI2ltcG9ydCAiV2ViRWRp
dGluZ0RlbGVnYXRlLmgiCisjaW1wb3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5oIgorI2ltcG9y
dCAiV2ViRnJhbWVJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViRnJhbWVQcml2YXRlLmgiCisjaW1w
b3J0ICJXZWJGcmFtZVZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViSFRNTFJlcHJlc2VudGF0
aW9uUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCAi
V2ViS2l0TG9nZ2luZy5oIgorI2ltcG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKKyNpbXBv
cnQgIldlYktpdFZlcnNpb25DaGVja3MuaCIKKyNpbXBvcnQgIldlYkxvY2FsaXphYmxlU3RyaW5n
cy5oIgorI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCisjaW1wb3J0ICJX
ZWJOU0V2ZW50RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLmgiCisj
aW1wb3J0ICJXZWJOU0ltYWdlRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU09iamVjdEV4dHJhcy5o
IgorI2ltcG9ydCAiV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU1ByaW50
T3BlcmF0aW9uRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgorI2ltcG9ydCAi
V2ViTlNWaWV3RXh0cmFzLmgiCisjaW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKKyNp
bXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIKKyNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIu
aCIKKyNpbXBvcnQgIldlYlByZWZlcmVuY2VzLmgiCisjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1By
aXZhdGUuaCIKKyNpbXBvcnQgIldlYlJlc291cmNlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViU3Ry
aW5nVHJ1bmNhdG9yLmgiCisjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCisjaW1wb3J0ICJX
ZWJVSURlbGVnYXRlUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCisjaW1w
b3J0IDxBcHBLaXQvTlNBY2Nlc3NpYmlsaXR5Lmg+CisjaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkSW1hZ2UuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvQ2FjaGVkUmVzb3VyY2VDbGllbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29s
b3JNYWMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvQ29udGV4dE1lbnVDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RHJhZ0NvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0VkaXRvckRlbGV0ZUFjdGlvbi5oPgorI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL0V2ZW50SGFuZGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9FeGNl
cHRpb25IYW5kbGVycy5oPgorI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgorI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSGl0
VGVzdFJlc3VsdC5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9LZXlib2FyZEV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Q
YWdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmFuZ2Uu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2VsZWN0aW9uQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvVGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4
dHJhcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlVGV4dFJlbmRlcmVyLmg+CisjaW1wb3J0
IDxXZWJDb3JlL21hcmt1cC5oPgorI2ltcG9ydCA8V2ViS2l0L0RPTS5oPgorI2ltcG9ydCA8V2Vi
S2l0L0RPTUV4dGVuc2lvbnMuaD4KKyNpbXBvcnQgPFdlYktpdC9ET01Qcml2YXRlLmg+CisjaW1w
b3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNpbXBvcnQgPGRsZmNuLmg+CisjaW1wb3J0
IDxsaW1pdHM+CisjaW1wb3J0IDxydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KKworI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6
Q29yZS5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK0BpbnRlcmZhY2UgTlNXaW5k
b3cgKEJvcmRlclZpZXdBY2Nlc3MpCistIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldzsKK0BlbmQK
KworQGltcGxlbWVudGF0aW9uIE5TV2luZG93IChCb3JkZXJWaWV3QWNjZXNzKQorLSAoTlNWaWV3
Kilfd2ViX2JvcmRlclZpZXcKK3sKKyAgICByZXR1cm4gX2JvcmRlclZpZXc7Cit9CitAZW5kCisK
K0BpbnRlcmZhY2UgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25kZXIgeworICAgIE5T
UmVzcG9uZGVyKiBfbGFzdFJlc3BvbmRlckluQ2hhaW47CisgICAgQk9PTCBfcmVjZWl2ZWRVbmhh
bmRsZWRDb21tYW5kOworfQorLSAoaWQpaW5pdFdpdGhSZXNwb25kZXJDaGFpbjooTlNSZXNwb25k
ZXIgKiljaGFpbjsKKy0gKHZvaWQpZGV0YWNoOworLSAoQk9PTClyZWNlaXZlZFVuaGFuZGxlZENv
bW1hbmQ7CitAZW5kCisKK3N0YXRpYyBJTVAgb2xkU2V0Q3Vyc29ySU1QID0gTlVMTDsKKworI2lm
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisKK3N0YXRpYyBJTVAgb2xkUmVzZXRDdXJzb3JSZWN0c0lN
UCA9IE5VTEw7CitzdGF0aWMgQk9PTCBjYW5TZXRDdXJzb3IgPSBZRVM7CisKK3N0YXRpYyB2b2lk
IHJlc2V0Q3Vyc29yUmVjdHMoTlNXaW5kb3cqIHNlbGYsIFNFTCBjbWQpCit7CisgICAgTlNQb2lu
dCBwb2ludCA9IFtzZWxmIG1vdXNlTG9jYXRpb25PdXRzaWRlT2ZFdmVudFN0cmVhbV07CisgICAg
TlNWaWV3KiB2aWV3ID0gW1tzZWxmIF93ZWJfYm9yZGVyVmlld10gaGl0VGVzdDpwb2ludF07Cisg
ICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAgICAg
ICAgV2ViSFRNTFZpZXcgKmh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3Kil2aWV3OworICAgICAgICBO
U1BvaW50IGxvY2FsUG9pbnQgPSBbaHRtbFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3
Om5pbF07CisgICAgICAgIE5TRGljdGlvbmFyeSAqZGljdCA9IFtodG1sVmlldyBlbGVtZW50QXRQ
b2ludDpsb2NhbFBvaW50IGFsbG93U2hhZG93Q29udGVudDpOT107CisgICAgICAgIERPTUVsZW1l
bnQgKmVsZW1lbnQgPSBbZGljdCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudERPTU5vZGVLZXldOwor
ICAgICAgICBpZiAoIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxBcHBsZXRFbGVtZW50
IGNsYXNzXV0gJiYgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxPYmplY3RFbGVtZW50
IGNsYXNzXV0gJiYKKyAgICAgICAgICAgICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1M
RW1iZWRFbGVtZW50IGNsYXNzXV0pCisgICAgICAgICAgICBjYW5TZXRDdXJzb3IgPSBOTzsKKyAg
ICB9CisgICAgb2xkUmVzZXRDdXJzb3JSZWN0c0lNUChzZWxmLCBjbWQpOworICAgIGNhblNldEN1
cnNvciA9IFlFUzsKK30KKworc3RhdGljIHZvaWQgc2V0Q3Vyc29yKE5TQ3Vyc29yKiBzZWxmLCBT
RUwgY21kKQoreworICAgIGlmIChjYW5TZXRDdXJzb3IpCisgICAgICAgIG9sZFNldEN1cnNvcklN
UChzZWxmLCBjbWQpOworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCBzZXRDdXJzb3IoTlNXaW5k
b3cqIHNlbGYsIFNFTCBjbWQsIE5TUG9pbnQgcG9pbnQpCit7CisgICAgTlNWaWV3KiB2aWV3ID0g
W1tzZWxmIF93ZWJfYm9yZGVyVmlld10gaGl0VGVzdDpwb2ludF07CisgICAgaWYgKFt2aWV3IGlz
S2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgV2ViSFRNTFZpZXcg
Kmh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3Kil2aWV3OworICAgICAgICBOU1BvaW50IGxvY2FsUG9p
bnQgPSBbaHRtbFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF07CisgICAgICAg
IE5TRGljdGlvbmFyeSAqZGljdCA9IFtodG1sVmlldyBlbGVtZW50QXRQb2ludDpsb2NhbFBvaW50
IGFsbG93U2hhZG93Q29udGVudDpOT107CisgICAgICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBb
ZGljdCBvYmplY3RGb3JLZXk6V2ViRWxlbWVudERPTU5vZGVLZXldOworICAgICAgICBpZiAoIVtl
bGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxBcHBsZXRFbGVtZW50IGNsYXNzXV0gJiYgIVtl
bGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxPYmplY3RFbGVtZW50IGNsYXNzXV0gJiYKKyAg
ICAgICAgICAgICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MRW1iZWRFbGVtZW50IGNs
YXNzXV0pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIG9sZFNldEN1cnNvcklNUChz
ZWxmLCBjbWQsIHBvaW50KTsKK30KKworI2VuZGlmCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKK0BpbnRlcmZhY2UgV2ViTGF5ZXJIb3N0aW5nVmlldyA6IE5TVmlldworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gV2ViTGF5ZXJIb3N0aW5nVmlldworCisvLyBFbXB0eSBOU1Zp
ZXdzIGludGVyY2VwdCByaWdodE1vdXNlRG93bjogdG8gZG8gY29udGV4dCBtZW51IGhhbmRsaW5n
LCBidXQgd2UgbmVlZCB0aGUgV2ViTGF5ZXJIb3N0aW5nVmlldyB0bworLy8gbGV0IHJpZ2h0IG1v
dXNlIGNsaWNrcyB0aHJvdWdoLgorLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2
ZW50Cit7CisgICAgW1tzZWxmIG5leHRSZXNwb25kZXJdIHBlcmZvcm1TZWxlY3RvcjpfY21kIHdp
dGhPYmplY3Q6ZXZlbnRdOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKK2V4dGVybiAiQyIgeworCisvLyBOZWVkIHRvIGRlY2xhcmUgdGhlc2Ug
YXR0cmlidXRlIG5hbWVzIGJlY2F1c2UgQXBwS2l0IGV4cG9ydHMgdGhlbSBidXQgZG9lcyBub3Qg
bWFrZSB0aGVtIGF2YWlsYWJsZSBpbiBBUEkgb3IgU1BJIGhlYWRlcnMuCisKK2V4dGVybiBOU1N0
cmluZyAqTlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZTsKK2V4dGVybiBOU1N0cmlu
ZyAqTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZTsKKworfQorCitAaW50
ZXJmYWNlIE5TVmlldyAoV2ViTlNWaWV3RGV0YWlscykKKy0gKHZvaWQpX3JlY3Vyc2l2ZURpc3Bs
YXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6
KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5TVmlldyAqKXZp
c2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKKy0gKHZvaWQpX3JlY3Vyc2l2ZURpc3Bs
YXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDooTlNS
ZWN0KXZpc1JlY3Q7CistICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZSBkaXNwbGF5UmVj
dElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0IGluQ29udGV4dDooTlNHcmFwaGlj
c0NvbnRleHQgKiljb250ZXh0IHRvcFZpZXc6KEJPT0wpdG9wVmlldzsKKy0gKE5TUmVjdClfZGly
dHlSZWN0OworLSAodm9pZClfc2V0RHJhd3NPd25EZXNjZW5kYW50czooQk9PTClkcmF3c093bkRl
c2NlbmRhbnRzOworLSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3Jz
OworLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlOworQGVuZAorCitAaW50ZXJmYWNlIE5T
QXBwbGljYXRpb24gKFdlYk5TQXBwbGljYXRpb25EZXRhaWxzKQorLSAodm9pZClzcGVha1N0cmlu
ZzooTlNTdHJpbmcgKilzdHJpbmc7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYk5T
V2luZG93RGV0YWlscykKKy0gKGlkKV9uZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nOwor
LSAodm9pZClfc2V0Rm9yY2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOworQGVuZAorCitAaW50
ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWlscykK
Ky0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlOworLSAoRE9NRG9jdW1l
bnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudDoo
RE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAq
KWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsKK0BlbmQKKworQGlu
dGVyZmFjZSBOU1NwZWxsQ2hlY2tlciAoV2ViTlNTcGVsbENoZWNrZXJEZXRhaWxzKQorLSAodm9p
ZClsZWFybldvcmQ6KE5TU3RyaW5nICopd29yZDsKK0BlbmQKKworLy8gQnkgaW1hZ2luZyB0byBh
IHdpZHRoIGEgbGl0dGxlIHdpZGVyIHRoYW4gdGhlIGF2YWlsYWJsZSBwaXhlbHMsCisvLyB0aGlu
IHBhZ2VzIHdpbGwgYmUgc2NhbGVkIGRvd24gYSBsaXR0bGUsIG1hdGNoaW5nIHRoZSB3YXkgdGhl
eQorLy8gcHJpbnQgaW4gSUUgYW5kIENhbWluby4gVGhpcyBsZXRzIHRoZW0gdXNlIGZld2VyIHNo
ZWV0cyB0aGFuIHRoZXkKKy8vIHdvdWxkIG90aGVyd2lzZSwgd2hpY2ggaXMgcHJlc3VtYWJseSB3
aHkgb3RoZXIgYnJvd3NlcnMgZG8gdGhpcy4KKy8vIFdpZGUgcGFnZXMgd2lsbCBiZSBzY2FsZWQg
ZG93biBtb3JlIHRoYW4gdGhpcy4KKyNkZWZpbmUgUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9y
ICAgICAxLjI1ZgorCisvLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIGhvdyBzbWFsbCB3ZSBhcmUg
d2lsbGluZyB0byByZWR1Y2UgdGhlIHBhZ2UgY29udGVudAorLy8gaW4gb3JkZXIgdG8gYWNjb21t
b2RhdGUgdGhlIHdpZGVzdCBsaW5lLiBJZiB0aGUgcGFnZSB3b3VsZCBoYXZlIHRvIGJlCisvLyBy
ZWR1Y2VkIHNtYWxsZXIgdG8gbWFrZSB0aGUgd2lkZXN0IGxpbmUgZml0LCB3ZSBqdXN0IGNsaXAg
aW5zdGVhZCAodGhpcworLy8gYmVoYXZpb3IgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSwgYXQg
bGVhc3QpCisjZGVmaW5lIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvciAgICAgMi4wZgorCisv
LyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIGhvdyBzaG9ydCB0aGUgbGFzdCBwcmludGVkIHBhZ2Ug
b2YgYSBtdWx0aS1wYWdlIHByaW50IHNlc3Npb24KKy8vIGNhbiBiZSBiZWZvcmUgd2UgdHJ5IHRv
IHNocmluayB0aGUgc2NhbGUgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcGFnZXMs
IGFuZAorLy8gdGh1cyBlbGltaW5hdGUgdGhlIG9ycGhhbi4KKyNkZWZpbmUgTGFzdFByaW50ZWRQ
YWdlT3JwaGFuUmF0aW8gICAgICAwLjFmCisKKy8vIFRoaXMgbnVtYmVyIGRldGVybWluZXMgdGhl
IGFtb3VudCB0aGUgc2NhbGUgZmFjdG9yIGlzIGFkanVzdGVkIHRvIHRyeSB0byBlbGltaW5hdGUg
b3JwaGFucy4KKy8vIEl0IGhhcyBubyBkaXJlY3QgbWF0aGVtYXRpY2FsIHJlbGF0aW9uc2hpcCB0
byBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbywgZHVlIHRvIHZhcmlhYmxlCisvLyBudW1iZXJz
IG9mIHBhZ2VzLCBsb2dpYyB0byBhdm9pZCBicmVha2luZyBlbGVtZW50cywgYW5kIENTUy1zdXBw
bGllZCBoYXJkIHBhZ2UgYnJlYWtzLgorI2RlZmluZSBQcmludGluZ09ycGhhblNocmlua0FkanVz
dG1lbnQgIDEuMWYKKworI2RlZmluZSBBVVRPU0NST0xMX0lOVEVSVkFMICAgICAgICAgICAgIDAu
MWYKKworI2RlZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9YICAgICAgICAgICAgIDQuMGYKKy8vS2Vl
cCBib3JkZXJfeSBpbiBzeW5jaCB3aXRoIERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlcklu
c2V0CisjZGVmaW5lIERSQUdfTEFCRUxfQk9SREVSX1kgICAgICAgICAgICAgMi4wZgorI2RlZmlu
ZSBEUkFHX0xBQkVMX1JBRElVUyAgICAgICAgICAgICAgIDUuMGYKKyNkZWZpbmUgRFJBR19MQUJF
TF9CT1JERVJfWV9PRkZTRVQgICAgICAgICAgICAgIDIuMGYKKworI2RlZmluZSBNSU5fRFJBR19M
QUJFTF9XSURUSF9CRUZPUkVfQ0xJUCAgICAgICAgMTIwLjBmCisjZGVmaW5lIE1BWF9EUkFHX0xB
QkVMX1dJRFRIICAgICAgICAgICAgICAgICAgICAzMjAuMGYKKworI2RlZmluZSBEUkFHX0xJTktf
TEFCRUxfRk9OVF9TSVpFICAgMTEuMGYKKyNkZWZpbmUgRFJBR19MSU5LX1VSTF9GT05UX1NJWkUg
ICAxMC4wZgorCisvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0
aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KKyNkZWZpbmUg
VFJBQ0tJTkdfUkVDVF9UQUcgMHhCQURGQUNFCisKKy8vIEZJWE1FOiBUaGlzIGNvbnN0YW50IGlz
IGNvcGllZCBmcm9tIEFwcEtpdCdzIF9OWFNtYXJ0UGFzdGUgY29uc3RhbnQuCisjZGVmaW5lIFdl
YlNtYXJ0UGFzdGVQYm9hcmRUeXBlIEAiTmVYVCBzbWFydCBwYXN0ZSBwYXN0ZWJvYXJkIHR5cGUi
CisKKyNkZWZpbmUgU1RBTkRBUkRfV0VJR0hUIDUKKyNkZWZpbmUgTUlOX0JPTERfV0VJR0hUIDcK
KyNkZWZpbmUgU1RBTkRBUkRfQk9MRF9XRUlHSFQgOQorCisvLyBGYWtlIFVSTCBzY2hlbWUuCisj
ZGVmaW5lIFdlYkRhdGFQcm90b2NvbFNjaGVtZSBAIndlYmtpdC1mYWtlLXVybCIKKworLy8gPHJk
YXI6Ly9wcm9ibGVtLzQ5ODU1MjQ+IFJlZmVyZW5jZXMgdG8gV2ViQ29yZVNjcm9sbFZpZXcgYXMg
YSBzdWJ2aWV3IG9mIGEgV2ViSFRNTFZpZXcgbWF5IGJlIHByZXNlbnQKKy8vIGluIHNvbWUgTklC
IGZpbGVzLCBzbyBOU1VuYXJjaGl2ZXIgbXVzdCBiZSBzdGlsbCBhYmxlIHRvIGxvb2sgdXAgdGhp
cyBub3ctdW51c2VkIGNsYXNzLgorQGludGVyZmFjZSBXZWJDb3JlU2Nyb2xsVmlldyA6IE5TU2Ny
b2xsVmlldworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViQ29yZVNjcm9sbFZpZXcKK0BlbmQK
KworLy8gaWYgWUVTLCBkbyB0aGUgc3RhbmRhcmQgTlNWaWV3IGhpdCB0ZXN0ICh3aGljaCBjYW4n
dCBnaXZlIHRoZSByaWdodCByZXN1bHQgd2hlbiBIVE1MIG92ZXJsYXBzIGEgdmlldykKK3N0YXRp
YyBCT09MIGZvcmNlTlNWaWV3SGl0VGVzdDsKKworLy8gaWYgWUVTLCBkbyB0aGUgInRvcCBXZWJI
VE1MVmlldyIgaGl0IHRlc3QgKHdoaWNoIHdlJ2QgbGlrZSB0byBkbyBhbGwgdGhlIHRpbWUgYnV0
IGNhbid0IGJlY2F1c2Ugb2YgSmF2YSByZXF1aXJlbWVudHMgW3NlZSBidWcgNDM0OTcyMV0pCitz
dGF0aWMgQk9PTCBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdDsKKworc3RhdGljIFdlYkhUTUxWaWV3
ICpsYXN0SGl0VmlldzsKKworLy8gV2UgbmVlZCB0aGlzIHRvIGJlIGFibGUgdG8gc2FmZWx5IHJl
ZmVyZW5jZSB0aGUgQ2FjaGVkSW1hZ2UgZm9yIHRoZSBwcm9taXNlZCBkcmFnIGRhdGEKK3N0YXRp
YyBDYWNoZWRSZXNvdXJjZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkKK3sKKyAgICBzdGF0
aWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQqIHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50ID0gbmV3
IENhY2hlZFJlc291cmNlQ2xpZW50OworICAgIHJldHVybiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNs
aWVudDsKK30KKworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJu
YWwpCistIChCT09MKV9pbWFnZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRoczsKKy0gKERP
TURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bh
c3RlYm9hcmQgKilwYXN0ZWJvYXJkIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0IGFsbG93
UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0OworLSAoTlNTdHJpbmcgKilfcGxhaW5UZXh0
RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7CistICh2b2lkKV9wYXN0
ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0
OihCT09MKWFsbG93UGxhaW5UZXh0OworLSAodm9pZClfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOworLSAodm9pZClfcmVtb3ZlTW91c2VN
b3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5OworLSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3T2Jz
ZXJ2ZXJzOworLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzOworLSAoQk9PTClfc2hvdWxk
SW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFnbWVudCByZXBsYWNpbmdE
T01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlv
bilhY3Rpb247CistIChCT09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQgcmVw
bGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNl
cnRBY3Rpb24pYWN0aW9uOworLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9u
OworLSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0OworLSAoRE9NUmFuZ2UgKilfc2VsZWN0
ZWRSYW5nZTsKKy0gKEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlOwor
LSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50OworLSAodm9pZClf
d3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9QYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6
KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmc7CistIChET01SYW5nZSAqKV9k
b2N1bWVudFJhbmdlOworLSAodm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVu
dDsKKy0gKFdlYkhUTUxWaWV3ICopX3RvcEhUTUxWaWV3OworLSAoQk9PTClfaXNUb3BIVE1MVmll
dzsKKy0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmU7CistICh2b2lkKV93ZWJf
c2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemU7CistICh2b2lkKV93ZWJf
Y2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmU7CitAZW5kCisKKyNpZiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKworQGludGVyZmFj
ZSBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdUZXh0Q2hlY2tpbmdJbnRlcm5hbCkKKy0gKHZvaWQp
b3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVyOworLSAoQk9PTClzbWFydElu
c2VydERlbGV0ZUVuYWJsZWQ7CistICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDoo
Qk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVTbWFydEluc2VydERlbGV0ZTooaWQpc2VuZGVyOwor
LSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDsKKy0gKHZvaWQpc2V0
QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRv
Z2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOihpZClzZW5kZXI7CistIChCT09MKWlzQXV0
b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ7CistICh2b2lkKXNldEF1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRl
Y3Rpb246KGlkKXNlbmRlcjsKKy0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5h
YmxlZDsKKy0gKHZvaWQpc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wp
ZmxhZzsKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjooaWQpc2VuZGVy
OworLSAoQk9PTClpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ7CistICh2b2lkKXNl
dEF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ6KEJPT0wpZmxhZzsKKy0gKHZvaWQpdG9n
Z2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXI7CistIChCT09MKWlzQXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKKy0gKHZvaWQpc2V0QXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcjsKK0BlbmQKKworI2VuZGlmCisKK0BpbnRlcmZh
Y2UgV2ViSFRNTFZpZXcgKFdlYkZvcndhcmREZWNsYXJhdGlvbikgLy8gRklYTUU6IFB1dCB0aGlz
IGluIGEgbm9ybWFsIGNhdGVnb3J5IGFuZCBzdG9wIGRvaW5nIHRoZSBmb3J3YXJkIGRlY2xhcmF0
aW9uIHRyaWNrLgorLSAodm9pZClfc2V0UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBh
Z2VXaWR0aDooZmxvYXQpbWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBh
Z2VXaWR0aCBhZGp1c3RWaWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZTsKK0BlbmQKKworQGNs
YXNzIE5TVGV4dElucHV0Q29udGV4dDsKK0BpbnRlcmZhY2UgTlNSZXNwb25kZXIgKEFwcEtpdERl
dGFpbHMpCistIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQ7CitAZW5kCisKK0Bp
bnRlcmZhY2UgTlNPYmplY3QgKE5TVGV4dElucHV0Q29udGV4dERldGFpbHMpCistIChCT09MKXdh
bnRzVG9IYW5kbGVNb3VzZUV2ZW50czsKKy0gKEJPT0wpaGFuZGxlTW91c2VFdmVudDooTlNFdmVu
dCAqKWV2ZW50OworQGVuZAorCitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJOU1RleHRJbnB1
dFN1cHBvcnQpIDxOU1RleHRJbnB1dD4KKy0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0
TWFuYWdlcjsKK0BlbmQKKworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRWRpdGluZ1N0eWxl
U3VwcG9ydCkKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlTdHlsZTsKKy0gKE5T
U3RyaW5nICopX2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcjsKK0BlbmQKKworQGludGVy
ZmFjZSBOU1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorLSAodm9pZClfd2ViX2FkZERl
c2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVBcnJheSAqKSBhcnJheTsKK0Bl
bmQKKworQGludGVyZmFjZSBOU011dGFibGVEaWN0aW9uYXJ5IChXZWJIVE1MVmlld0ZpbGVJbnRl
cm5hbCkKKy0gKHZvaWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleToo
aWQpa2V5OworQGVuZAorCisvLyBIYW5kbGVzIHRoZSBjb21wbGV0ZTogdGV4dCBjb21tYW5kCitA
aW50ZXJmYWNlIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgOiBOU09iamVjdCA8TlNUYWJsZVZp
ZXdEZWxlZ2F0ZSwgTlNUYWJsZVZpZXdEYXRhU291cmNlPiB7CitAcHJpdmF0ZQorICAgIFdlYkhU
TUxWaWV3ICpfdmlldzsKKyAgICBOU1dpbmRvdyAqX3BvcHVwV2luZG93OworICAgIE5TVGFibGVW
aWV3ICpfdGFibGVWaWV3OworICAgIE5TQXJyYXkgKl9jb21wbGV0aW9uczsKKyAgICBOU1N0cmlu
ZyAqX29yaWdpbmFsU3RyaW5nOworICAgIGludCBwcmVmaXhMZW5ndGg7Cit9CistIChpZClpbml0
V2l0aEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKXZpZXc7CistICh2b2lkKWRvQ29tcGxldGlvbjsK
Ky0gKHZvaWQpZW5kUmV2ZXJ0aW5nQ2hhbmdlOihCT09MKXJldmVydENoYW5nZSBtb3ZlTGVmdDoo
Qk9PTClnb0xlZnQ7CistIChCT09MKXBvcHVwV2luZG93SXNPcGVuOworLSAoQk9PTClmaWx0ZXJL
ZXlEb3duOihOU0V2ZW50ICopZXZlbnQ7CistICh2b2lkKV9yZWZsZWN0U2VsZWN0aW9uOworQGVu
ZAorCitzdHJ1Y3QgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHsKKyAg
ICBLZXlib2FyZEV2ZW50KiBldmVudDsKKyAgICBCT09MIGV2ZW50V2FzSGFuZGxlZDsKKyAgICBC
T09MIHNob3VsZFNhdmVDb21tYW5kOworICAgIC8vIFRoZSBJbnB1dCBNZXRob2QgbWF5IGNvbnN1
bWUgYW4gZXZlbnQgYW5kIG5vdCB0ZWxsIHVzLCBpbgorICAgIC8vIHdoaWNoIGNhc2Ugd2Ugc2hv
dWxkIG5vdCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSBET00KKyAgICBCT09MIGNvbnN1bWVkQnlJ
TTsKK307CisKK0BpbnRlcmZhY2UgV2ViSFRNTFZpZXdQcml2YXRlIDogTlNPYmplY3QgeworQHB1
YmxpYworICAgIEJPT0wgY2xvc2VkOworICAgIEJPT0wgbmVlZHNUb0FwcGx5U3R5bGVzOworICAg
IEJPT0wgaWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHM7CisgICAgQk9PTCBwcmludGluZzsKKyAg
ICBCT09MIGF2b2lkaW5nUHJpbnRPcnBoYW47CisgICAgQk9PTCBvYnNlcnZpbmdNb3VzZU1vdmVk
Tm90aWZpY2F0aW9uczsKKyAgICBCT09MIG9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnM7
CisgICAgQk9PTCBvYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zOworICAgIEJPT0wgcmVzaWdu
aW5nRmlyc3RSZXNwb25kZXI7CisgICAgCisgICAgaWQgc2F2ZWRTdWJ2aWV3czsKKyAgICBCT09M
IHN1YnZpZXdzU2V0QXNpZGU7CisgICAgCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorICAgIE5TVmlldyAqbGF5ZXJIb3N0aW5nVmlldzsKKyNlbmRpZgorCisgICAgTlNFdmVudCAq
bW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgorICAgIEJP
T0wgaGFuZGxpbmdNb3VzZURvd25FdmVudDsKKyAgICBOU0V2ZW50ICprZXlEb3duRXZlbnQ7IC8v
IEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgorCisgICAgLy8gQSBXZWJIVE1MVmlldyBo
YXMgYSBzaW5nbGUgaW5wdXQgY29udGV4dCwgYnV0IHdlIHJldHVybiBuaWwgd2hlbiBpbiBub24t
ZWRpdGFibGUgY29udGVudCB0byBhdm9pZCBtYWtpbmcgaW5wdXQgbWV0aG9kcyBkbyB0aGVpciB3
b3JrLgorICAgIC8vIFRoaXMgc3RhdGUgaXMgc2F2ZWQgZWFjaCB0aW1lIHNlbGVjdGlvbiBjaGFu
Z2VzLCBiZWNhdXNlIGNvbXB1dGluZyBpdCBjYXVzZXMgc3R5bGUgcmVjYWxjLCB3aGljaCBpcyBu
b3QgYWx3YXlzIHNhZmUgdG8gZG8uCisgICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQ7CisKKyAg
ICBOU1BvaW50IGxhc3RTY3JvbGxQb3NpdGlvbjsKKworICAgIFdlYlBsdWdpbkNvbnRyb2xsZXIg
KnBsdWdpbkNvbnRyb2xsZXI7CisgICAgCisgICAgTlNTdHJpbmcgKnRvb2xUaXA7CisgICAgTlNU
b29sVGlwVGFnIGxhc3RUb29sVGlwVGFnOworICAgIGlkIHRyYWNraW5nUmVjdE93bmVyOworICAg
IHZvaWQgKnRyYWNraW5nUmVjdFVzZXJEYXRhOworICAgIAorICAgIE5TVGltZXIgKmF1dG9zY3Jv
bGxUaW1lcjsKKyAgICBOU0V2ZW50ICphdXRvc2Nyb2xsVHJpZ2dlckV2ZW50OworICAgIAorICAg
IE5TQXJyYXkgKnBhZ2VSZWN0czsKKworICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmhpZ2hsaWdo
dGVyczsKKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgQk9PTCBuZXh0UmVzcG9uZGVy
RGlzYWJsZWRPbmNlOworI2VuZGlmCisgICAgCisgICAgV2ViVGV4dENvbXBsZXRlQ29udHJvbGxl
ciAqY29tcENvbnRyb2xsZXI7CisgICAgCisgICAgQk9PTCB0cmFuc3BhcmVudEJhY2tncm91bmQ7
CisKKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIGludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnM7CisgICAgQk9PTCByZWNlaXZlZE5PT1A7CisgICAgCisgICAg
V2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZTsKKyAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSogcHJv
bWlzZWREcmFnVElGRkRhdGFTb3VyY2U7CisgICAgCisgICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBk
YXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXI7CisgICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBk
YXRlTW91c2VvdmVyVGltZXI7CisKKyAgICBTRUwgc2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVj
dG9yOworCisjaWZuZGVmIE5ERUJVRworICAgIEJPT0wgZW51bWVyYXRpbmdTdWJ2aWV3czsKKyNl
bmRpZgorfQorLSAodm9pZCljbGVhcjsKK0BlbmQKKworc3RhdGljIE5TQ2VsbFN0YXRlVmFsdWUg
a2l0KFRyaVN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2Fz
ZSBGYWxzZVRyaVN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIE5TT2ZmU3RhdGU7CisgICAgICAg
IGNhc2UgVHJ1ZVRyaVN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIE5TT25TdGF0ZTsKKyAgICAg
ICAgY2FzZSBNaXhlZFRyaVN0YXRlOgorICAgICAgICAgICAgcmV0dXJuIE5TTWl4ZWRTdGF0ZTsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5TT2ZmU3RhdGU7
Cit9CisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlld1ByaXZhdGUKKworKyAodm9pZClpbml0
aWFsaXplCit7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisjaWZuZGVmIEJVSUxE
SU5HX09OX1RJR0VSCisgICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRocmVhZChzZWxmKTsK
KyNlbmRpZgorCisgICAgaWYgKCFvbGRTZXRDdXJzb3JJTVApIHsKKyNpZmRlZiBCVUlMRElOR19P
Tl9USUdFUgorICAgICAgICBNZXRob2Qgc2V0Q3Vyc29yTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFu
Y2VNZXRob2QoW05TQ3Vyc29yIGNsYXNzXSwgQHNlbGVjdG9yKHNldCkpOworI2Vsc2UKKyAgICAg
ICAgTWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKFtOU1dp
bmRvdyBjbGFzc10sIEBzZWxlY3Rvcihfc2V0Q3Vyc29yRm9yTW91c2VMb2NhdGlvbjopKTsKKyNl
bmRpZgorICAgICAgICBBU1NFUlQoc2V0Q3Vyc29yTWV0aG9kKTsKKworICAgICAgICBvbGRTZXRD
dXJzb3JJTVAgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24oc2V0Q3Vyc29yTWV0aG9kLCAoSU1Q
KXNldEN1cnNvcik7CisgICAgICAgIEFTU0VSVChvbGRTZXRDdXJzb3JJTVApOworICAgIH0KKyAg
ICAKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIGlmICghb2xkUmVzZXRDdXJzb3JSZWN0
c0lNUCkgeworICAgICAgICBNZXRob2QgcmVzZXRDdXJzb3JSZWN0c01ldGhvZCA9IGNsYXNzX2dl
dEluc3RhbmNlTWV0aG9kKFtOU1dpbmRvdyBjbGFzc10sIEBzZWxlY3RvcihyZXNldEN1cnNvclJl
Y3RzKSk7CisgICAgICAgIEFTU0VSVChyZXNldEN1cnNvclJlY3RzTWV0aG9kKTsKKyAgICAgICAg
b2xkUmVzZXRDdXJzb3JSZWN0c0lNUCA9IG1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihyZXNldEN1
cnNvclJlY3RzTWV0aG9kLCAoSU1QKXJlc2V0Q3Vyc29yUmVjdHMpOworICAgICAgICBBU1NFUlQo
b2xkUmVzZXRDdXJzb3JSZWN0c0lNUCk7CisgICAgfQorI2VuZGlmCisKK30KKworLSAodm9pZClk
ZWFsbG9jCit7CisgICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhy
ZWFkKFtXZWJIVE1MVmlld1ByaXZhdGUgY2xhc3NdLCBzZWxmKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQVNTRVJUKCFhdXRvc2Nyb2xsVGltZXIpOworICAgIEFTU0VSVCghYXV0b3Njcm9sbFRy
aWdnZXJFdmVudCk7CisgICAgQVNTRVJUKCF1cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1l
cik7CisgICAgQVNTRVJUKCF1cGRhdGVNb3VzZW92ZXJUaW1lcik7CisgICAgCisgICAgW21vdXNl
RG93bkV2ZW50IHJlbGVhc2VdOworICAgIFtrZXlEb3duRXZlbnQgcmVsZWFzZV07CisgICAgW3Bs
dWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07CisgICAgW3Rvb2xUaXAgcmVsZWFzZV07CisgICAgW2Nv
bXBDb250cm9sbGVyIHJlbGVhc2VdOworICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOworICAgIFto
aWdobGlnaHRlcnMgcmVsZWFzZV07CisgICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNl
KQorICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21p
c2VkRGF0YUNsaWVudCgpKTsKKworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClm
aW5hbGl6ZQoreworICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOworCisgICAgaWYgKHByb21pc2Vk
RHJhZ1RJRkZEYXRhU291cmNlKQorICAgICAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+
cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKKworICAgIFtzdXBlciBmaW5hbGl6
ZV07Cit9CisKKy0gKHZvaWQpY2xlYXIKK3sKKyAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFzZV07
CisgICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKKyAgICBbcGx1Z2luQ29udHJvbGxlciByZWxl
YXNlXTsKKyAgICBbdG9vbFRpcCByZWxlYXNlXTsKKyAgICBbY29tcENvbnRyb2xsZXIgcmVsZWFz
ZV07CisgICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07CisgICAgW2hpZ2hsaWdodGVycyByZWxlYXNl
XTsKKyAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCisgICAgICAgIHByb21pc2Vk
RHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwor
CisgICAgbW91c2VEb3duRXZlbnQgPSBuaWw7CisgICAga2V5RG93bkV2ZW50ID0gbmlsOworICAg
IHBsdWdpbkNvbnRyb2xsZXIgPSBuaWw7CisgICAgdG9vbFRpcCA9IG5pbDsKKyAgICBjb21wQ29u
dHJvbGxlciA9IG5pbDsKKyAgICBkYXRhU291cmNlID0gbmlsOworICAgIGhpZ2hsaWdodGVycyA9
IG5pbDsKKyAgICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IDA7CisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgbGF5ZXJIb3N0aW5nVmlldyA9IG5pbDsKKyNlbmRp
ZgorfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViSFRNTFZpZXdG
aWxlSW50ZXJuYWwpCisKKy0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2UKK3sKKyAgICByZXR1
cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBfZG9jdW1lbnRSYW5nZV07Cit9CisKKy0g
KEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJheSAqKXBhdGhzCit7CisgICAgTlNFbnVt
ZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVudW1lcmF0b3JdOworICAgIE5TU3Ry
aW5nICpwYXRoOworICAgIAorICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5leHRPYmpl
Y3RdKSAhPSBuaWwpIHsKKyAgICAgICAgTlNTdHJpbmcgKk1JTUVUeXBlID0gV0tHZXRNSU1FVHlw
ZUZvckV4dGVuc2lvbihbcGF0aCBwYXRoRXh0ZW5zaW9uXSk7CisgICAgICAgIGlmIChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShNSU1FVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gTk87Cit9CisK
Ky0gKFdlYkRhdGFTb3VyY2UgKilfZGF0YVNvdXJjZQoreworICAgIHJldHVybiBfcHJpdmF0ZS0+
ZGF0YVNvdXJjZTsKK30KKworLSAoV2ViVmlldyAqKV93ZWJWaWV3Cit7CisgICAgcmV0dXJuIFtf
cHJpdmF0ZS0+ZGF0YVNvdXJjZSBfd2ViVmlld107Cit9CisKKy0gKFdlYkZyYW1lVmlldyAqKV9m
cmFtZVZpZXcKK3sKKyAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0g
ZnJhbWVWaWV3XTsKK30KKworLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdt
ZW50V2l0aFBhdGhzOihOU0FycmF5ICopcGF0aHMKK3sKKyAgICBET01Eb2N1bWVudEZyYWdtZW50
ICpmcmFnbWVudDsKKyAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbcGF0aHMgb2JqZWN0
RW51bWVyYXRvcl07CisgICAgTlNNdXRhYmxlQXJyYXkgKmRvbU5vZGVzID0gW1tOU011dGFibGVB
cnJheSBhbGxvY10gaW5pdF07CisgICAgTlNTdHJpbmcgKnBhdGg7CisgICAgCisgICAgd2hpbGUg
KChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgeworICAgICAgICAvLyBO
b24taW1hZ2UgZmlsZSB0eXBlczsgX3dlYl91c2VyVmlzaWJsZVN0cmluZyBpcyBhcHByb3ByaWF0
ZSBoZXJlIGJlY2F1c2UgdGhpcyB3aWxsCisgICAgICAgIC8vIGJlIHBhc3RlZCBhcyB2aXNpYmxl
IHRleHQuCisgICAgICAgIE5TU3RyaW5nICp1cmwgPSBbW1tOU1VSTCBmaWxlVVJMV2l0aFBhdGg6
cGF0aF0gX3dlYmtpdF9jYW5vbmljYWxpemVdIF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAg
ICAgICBbZG9tTm9kZXMgYWRkT2JqZWN0OltbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gY3Jl
YXRlVGV4dE5vZGU6IHVybF1dOworICAgIH0KKyAgICAKKyAgICBmcmFnbWVudCA9IFtbc2VsZiBf
ZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOmRvbU5vZGVzXTsg
CisgICAgCisgICAgW2RvbU5vZGVzIHJlbGVhc2VdOworICAgIAorICAgIHJldHVybiBbZnJhZ21l
bnQgZmlyc3RDaGlsZF0gIT0gbmlsID8gZnJhZ21lbnQgOiBuaWw7Cit9CisKKysgKE5TQXJyYXkg
KilfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uCit7CisgICAg
c3RhdGljIE5TQXJyYXkgKmVsZW1lbnRzID0gbmlsOworICAgIGlmIChlbGVtZW50cyA9PSBuaWwp
IHsKKyAgICAgICAgZWxlbWVudHMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoK
KyAgICAgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ugd2FudCBzdHlsZSB0byBiZSBpbmxp
bmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkgaW5zZXJ0ZWQuCisgICAgICAgICAgICBA
InN0eWxlIiwKKyAgICAgICAgICAgIC8vIE9taXQgeG1sIHNvIHRoZSByZXN1bHQgaXMgbm90IFhI
VE1MLgorICAgICAgICAgICAgQCJ4bWwiLCAKKyAgICAgICAgICAgIC8vIE9taXQgdGFncyB0aGF0
IHdpbGwgZ2V0IHN0cmlwcGVkIHdoZW4gY29udmVydGVkIHRvIGEgZnJhZ21lbnQgYW55d2F5Lgor
ICAgICAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJib2R5IiwKKyAgICAg
ICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgorICAgICAgICAgICAgQCJhcHBsZXQiLCBA
ImJhc2Vmb250IiwgQCJjZW50ZXIiLCBAImRpciIsIEAiZm9udCIsIEAiaXNpbmRleCIsIEAibWVu
dSIsIEAicyIsIEAic3RyaWtlIiwgQCJ1IiwKKyAgICAgICAgICAgIC8vIE9taXQgb2JqZWN0IHNv
IG5vIGZpbGUgYXR0YWNobWVudHMgYXJlIHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICAg
ICAgQCJvYmplY3QiLCBuaWxdOworICAgICAgICBDRlJldGFpbihlbGVtZW50cyk7CisgICAgfQor
ICAgIHJldHVybiBlbGVtZW50czsKK30KKworc3RhdGljIE5TVVJMKiB1bmlxdWVVUkxXaXRoUmVs
YXRpdmVQYXJ0KE5TU3RyaW5nICpyZWxhdGl2ZVBhcnQpCit7CisgICAgQ0ZVVUlEUmVmIFVVSURS
ZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CisgICAgTlNTdHJpbmcgKlVV
SURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgVVVJRFJlZik7CisgICAgQ0ZSZWxlYXNlKFVVSURSZWYpOworICAgIE5TVVJMICpVUkwg
PSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8v
JUAvJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmcsIHJlbGF0aXZlUGFydF1d
OworICAgIENGUmVsZWFzZShVVUlEU3RyaW5nKTsKKworICAgIHJldHVybiBVUkw7Cit9CisKKy0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihO
U1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2UgKiljb250ZXh0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1BsYWluVGV4dDooQk9PTClhbGxv
d1BsYWluVGV4dAoreworICAgIE5TQXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9hcmQgdHlwZXNdOwor
ICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gbmlsOworCisgICAgaWYgKFt0eXBl
cyBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdt
ZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBl
OldlYkFyY2hpdmVQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZy
YWdtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
IGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSAmJgorICAg
ICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBh
c3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OworICAgIAorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6
TlNIVE1MUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TSFRNTFBib2FyZFR5cGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpj
b250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJy
ZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgCisgICAgaWYgKFt0
eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVu
dCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpO
U1JURlBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2FyZFR5cGVdICYmCisg
ICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6
cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAg
cmV0dXJuIGZyYWdtZW50OworCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1RJRkZQ
Ym9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVu
dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNl
czowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKworICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6TlNQREZQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNQREZQYm9hcmRU
eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNv
bnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworCisjaWYgZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQor
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNQSUNUUGJvYXJkVHlwZV0gJiYKKyAgICAg
ICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0
ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JUeXBlOk5TUElDVFBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7CisjZW5kaWYKKworICAgIC8vIE9ubHkgMTAuNSBhbmQgaGlnaGVyIHN1cHBv
cnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBwYXN0ZWJvYXJkIHR5cGVzIHdpdGggVVRJcywgYnV0
IHdlIGRvbid0IGJlbGlldmUKKyAgICAvLyB0aGF0IGFueSBhcHBsaWNhdGlvbnMgb24gVGlnZXIg
cHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBVVEksIGxpa2UgUE5HLCBvbiB0aGUg
cGFzdGVib2FyZC4KKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyopa1VU
VHlwZVBOR10gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRG
cm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmluZyopa1VUVHlwZVBORworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRl
eHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291
cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICAgICAgCisgICAgaWYgKFt0
eXBlcyBjb250YWluc09iamVjdDpOU1VSTFBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVu
dCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpO
U1VSTFBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
CisgICAgICAgIAorICAgIGlmIChhbGxvd1BsYWluVGV4dCAmJiBbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5
cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29u
dGV4dDpjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJyZXNvdXJjZXM6MF0pKSB7CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAoTlNTdHJpbmcgKilfcGxhaW5UZXh0RnJvbVBh
c3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICBOU0FycmF5ICp0eXBl
cyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKKyAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pCisgICAgICAgIHJldHVybiBbW3Bhc3RlYm9hcmQgc3Ry
aW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9u
aWNhbE1hcHBpbmddOworICAgIAorICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0
cmluZyA9IG5pbDsKKyAgICBOU1N0cmluZyAqc3RyaW5nOworCisgICAgaWYgKFt0eXBlcyBjb250
YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9
IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQgZGF0
YUZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAg
IGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCAmJiBbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNS
VEZQYm9hcmRUeXBlXSkKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBi
b2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICBpZiAoYXR0cmlidXRlZFN0
cmluZyAhPSBuaWwpIHsKKyAgICAgICAgc3RyaW5nID0gW1thdHRyaWJ1dGVkU3RyaW5nIHN0cmlu
Z10gY29weV07CisgICAgICAgIFthdHRyaWJ1dGVkU3RyaW5nIHJlbGVhc2VdOworICAgICAgICBy
ZXR1cm4gW3N0cmluZyBhdXRvcmVsZWFzZV07CisgICAgfQorICAgIAorICAgIGlmIChbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSkgeworICAgICAgICBzdHJpbmcg
PSBbW3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVd
IGNvbXBvbmVudHNKb2luZWRCeVN0cmluZzpAIlxuIl07CisgICAgICAgIGlmIChzdHJpbmcgIT0g
bmlsKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9CisgICAgCisgICAgTlNVUkwg
KlVSTDsKKyAgICAKKyAgICBpZiAoKFVSTCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDpwYXN0
ZWJvYXJkXSkpIHsKKyAgICAgICAgc3RyaW5nID0gW1VSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5n
XTsKKyAgICAgICAgaWYgKFtzdHJpbmcgbGVuZ3RoXSA+IDApCisgICAgICAgICAgICByZXR1cm4g
c3RyaW5nOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKV9wYXN0
ZVdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0
OihCT09MKWFsbG93UGxhaW5UZXh0Cit7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtbc2VsZiBf
d2ViVmlld10gcmV0YWluXTsKKyAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpw
YXN0ZWJvYXJkXTsKKworICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9zZWxlY3RlZFJhbmdl
XTsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZy
YWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCBpbkNvbnRleHQ6cmFuZ2UgYWxsb3dQbGFp
blRleHQ6YWxsb3dQbGFpblRleHRdOworICAgIGlmIChmcmFnbWVudCAmJiBbc2VsZiBfc2hvdWxk
SW5zZXJ0RnJhZ21lbnQ6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rp
b246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCisgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9y
ZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50Ok5P
IHNtYXJ0UmVwbGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVi
b2FyZF0gbWF0Y2hTdHlsZTpOT107CisKKyAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVi
b2FyZDpuaWxdOworICAgIFt3ZWJWaWV3IHJlbGVhc2VdOworfQorCistICh2b2lkKV9wYXN0ZUFz
UGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAg
ICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5dOworICAgIFt3ZWJW
aWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworCisgICAgTlNTdHJpbmcg
KnRleHQgPSBbc2VsZiBfcGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisgICAg
aWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dGV4dCBnaXZlbkFjdGlv
bjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKKyAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3Jl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0ZXh0IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVw
bGFjZTpbc2VsZiBfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF1dOwor
CisgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6bmlsXTsKKyAgICBbd2ViVmll
dyByZWxlYXNlXTsKK30KKworLSAodm9pZClfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25k
aXRpb25hbGx5Cit7CisgICAgaWYgKCFfcHJpdmF0ZSB8fCAhX3ByaXZhdGUtPm9ic2VydmluZ01v
dXNlTW92ZWROb3RpZmljYXRpb25zKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6
V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om5pbF07CisgICAgX3ByaXZhdGUtPm9i
c2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zID0gZmFsc2U7Cit9CisKKy0gKHZvaWQpX3Jl
bW92ZVN1cGVydmlld09ic2VydmVycworeworICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2YXRl
LT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBlcnZpZXddOworICAgIGlmICghc3Vw
ZXJ2aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNO
b3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNl
bnRlciBkZWZhdWx0Q2VudGVyXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2Vy
dmVyOnNlbGYgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3Vw
ZXJ2aWV3XTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFt
ZTpOU1ZpZXdCb3VuZHNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107Cisg
ICAgCisgICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMgPSBmYWxz
ZTsKK30KKworLSAodm9pZClfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCit7CisgICAgaWYgKCFfcHJp
dmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIGlmICghd2luZG93
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlm
aWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKKyAg
ICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0Rp
ZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKKyAgICBbbm90aWZpY2F0aW9uQ2Vu
dGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNh
dGlvbiBvYmplY3Q6bmlsXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVy
OnNlbGYgbmFtZTpOU1dpbmRvd1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsK
KyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXS1dpbmRv
d1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0aW9uKCkgb2JqZWN0OndpbmRvd107CisgICAgCisg
ICAgX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMgPSBmYWxzZTsKK30KKwor
LSAoQk9PTClfc2hvdWxkSW5zZXJ0RnJhZ21lbnQ6KERPTURvY3VtZW50RnJhZ21lbnQgKilmcmFn
bWVudCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2Vi
Vmlld0luc2VydEFjdGlvbilhY3Rpb24KK3sKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYg
X3dlYlZpZXddOworICAgIERPTU5vZGUgKmNoaWxkID0gW2ZyYWdtZW50IGZpcnN0Q2hpbGRdOwor
ICAgIGlmIChbZnJhZ21lbnQgbGFzdENoaWxkXSA9PSBjaGlsZCAmJiBbY2hpbGQgaXNLaW5kT2ZD
bGFzczpbRE9NQ2hhcmFjdGVyRGF0YSBjbGFzc11dKQorICAgICAgICByZXR1cm4gW1t3ZWJWaWV3
IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnRU
ZXh0OlsoRE9NQ2hhcmFjdGVyRGF0YSAqKWNoaWxkIGRhdGFdIHJlcGxhY2luZ0RPTVJhbmdlOnJh
bmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07CisgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0Rl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0Tm9kZTpmcmFnbWVu
dCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOworfQorCistIChC
T09MKV9zaG91bGRJbnNlcnRUZXh0OihOU1N0cmluZyAqKXRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9u
Cit7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAgICByZXR1cm4g
W1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91
bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0
aW9uXTsKK30KKworLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0
cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCit7Cisg
ICAgcmV0dXJuIFtzZWxmIF9zaG91bGRJbnNlcnRUZXh0OnRleHQgcmVwbGFjaW5nRE9NUmFuZ2U6
W3NlbGYgX3NlbGVjdGVkUmFuZ2VdIGdpdmVuQWN0aW9uOmFjdGlvbl07Cit9CisKKy8vIENhbGN1
bGF0ZSB0aGUgdmVydGljYWwgc2l6ZSBvZiB0aGUgdmlldyB0aGF0IGZpdHMgb24gYSBzaW5nbGUg
cGFnZQorLSAoZmxvYXQpX2NhbGN1bGF0ZVByaW50SGVpZ2h0Cit7CisgICAgLy8gT2J0YWluIHRo
ZSBwcmludCBpbmZvIG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uCisgICAgTlNQcmlu
dEluZm8gKnBpID0gW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dIHByaW50SW5m
b107CisgICAgCisgICAgLy8gQ2FsY3VsYXRlIHRoZSBwYWdlIGhlaWdodCBpbiBwb2ludHMKKyAg
ICBOU1NpemUgcGFwZXJTaXplID0gW3BpIHBhcGVyU2l6ZV07CisgICAgcmV0dXJuIHBhcGVyU2l6
ZS5oZWlnaHQgLSBbcGkgdG9wTWFyZ2luXSAtIFtwaSBib3R0b21NYXJnaW5dOworfQorCistIChE
T01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSA6IG5pbDsKK30KKworLSAoQk9P
TClfc2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKK3sKKyAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPnNob3VsZERlbGV0ZVJhbmdlKGNvcmUocmFuZ2UpKTsKK30KKwor
LSAoTlNWaWV3ICopX2hpdFZpZXdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8g
VXN1YWxseSwgd2UgaGFjayBBSydzIGhpdFRlc3QgbWV0aG9kIHRvIGNhdGNoIGFsbCBldmVudHMg
YXQgdGhlIHRvcG1vc3QgV2ViSFRNTFZpZXcuICAKKyAgICAvLyBDYWxsZXJzIG9mIHRoaXMgbWV0
aG9kLCBob3dldmVyLCB3YW50IHRvIHF1ZXJ5IHRoZSBkZWVwZXN0IHZpZXcgaW5zdGVhZC4KKyAg
ICBmb3JjZU5TVmlld0hpdFRlc3QgPSBZRVM7CisgICAgTlNWaWV3ICpoaXRWaWV3ID0gW1tbc2Vs
ZiB3aW5kb3ddIGNvbnRlbnRWaWV3XSBoaXRUZXN0OltldmVudCBsb2NhdGlvbkluV2luZG93XV07
CisgICAgZm9yY2VOU1ZpZXdIaXRUZXN0ID0gTk87ICAgIAorICAgIHJldHVybiBoaXRWaWV3Owor
fQorCistICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkg
Kil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0
cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZworewor
ICAgIC8vIFB1dCBIVE1MIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7CisgICAgICAgIGlmIChSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gY29yZUFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9t
U2VsZWN0aW9uKGNvcmUoW3NlbGYgX2ZyYW1lXSkpKSB7CisgICAgICAgICAgICBpZiAoUmV0YWlu
UHRyPENGRGF0YVJlZj4gZGF0YSA9IGNvcmVBcmNoaXZlID8gY29yZUFyY2hpdmUtPnJhd0RhdGFS
ZXByZXNlbnRhdGlvbigpIDogMCkKKyAgICAgICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRh
OihOU0RhdGEgKilkYXRhLmdldCgpIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFB1dCB0aGUgYXR0cmlidXRlZCBzdHJpbmcgb24g
dGhlIHBhc3RlYm9hcmQgKFJURi9SVEZEIGZvcm1hdCkuCisgICAgaWYgKFt0eXBlcyBjb250YWlu
c09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSkgeworICAgICAgICBpZiAoYXR0cmlidXRlZFN0cmlu
ZyA9PSBuaWwpIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3Rl
ZEF0dHJpYnV0ZWRTdHJpbmddOworICAgICAgICB9ICAgICAgICAKKyAgICAgICAgTlNEYXRhICpS
VEZERGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
W2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAg
ICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRGRERhdGEgZm9yVHlwZTpOU1JURkRQYm9hcmRUeXBl
XTsKKyAgICB9ICAgICAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJv
YXJkVHlwZV0pIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmlsKSB7CisgICAg
ICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5n
XTsKKyAgICAgICAgfQorICAgICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRh
Y2htZW50c10pIHsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbYXR0cmlidXRlZFN0
cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0ZXJz
XTsKKyAgICAgICAgfQorICAgICAgICBOU0RhdGEgKlJURkRhdGEgPSBbYXR0cmlidXRlZFN0cmlu
ZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkg
ZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6UlRG
RGF0YSBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV07CisgICAgfQorICAgIAorICAgIC8vIFB1dCBw
bGFpbiBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQuCisgICAgaWYgKFt0eXBlcyBjb250YWluc09i
amVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7CisgICAgICAgIC8vIE1hcCAmbmJzcDsgdG8gYSBw
bGFpbiBvbGQgc3BhY2UgYmVjYXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291cmNlIGNvZGUsIG90
aGVyIGJyb3dzZXJzIGRvIGl0LAorICAgICAgICAvLyBhbmQgYmVjYXVzZSBIVE1MIGZvcmNlcyB5
b3UgdG8gZG8gdGhpcyBhbnkgdGltZSB5b3Ugd2FudCB0d28gc3BhY2VzIGluIGEgcm93LgorICAg
ICAgICBOU011dGFibGVTdHJpbmcgKnMgPSBbW3NlbGYgc2VsZWN0ZWRTdHJpbmddIG11dGFibGVD
b3B5XTsKKyAgICAgICAgY29uc3QgdW5pY2hhciBOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyID0g
MHhBMDsKKyAgICAgICAgTlNTdHJpbmcgKk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBbTlNTdHJp
bmcgc3RyaW5nV2l0aENoYXJhY3RlcnM6Jk5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgbGVuZ3Ro
OjFdOworICAgICAgICBbcyByZXBsYWNlT2NjdXJyZW5jZXNPZlN0cmluZzpOb25CcmVha2luZ1Nw
YWNlU3RyaW5nIHdpdGhTdHJpbmc6QCIgIiBvcHRpb25zOjAgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
W3MgbGVuZ3RoXSldOworICAgICAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6cyBmb3JUeXBlOk5T
U3RyaW5nUGJvYXJkVHlwZV07CisgICAgICAgIFtzIHJlbGVhc2VdOworICAgIH0KKyAgICAKKyAg
ICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSAmJiBbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdKSB7CisgICAgICAgIFtwYXN0ZWJvYXJkIHNldERh
dGE6bmlsIGZvclR5cGU6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOworICAgIH0KK30KKworLSAo
dm9pZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIEFTU0VSVCgh
ZXZlbnQgfHwgW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0g
PT0gTlNSaWdodE1vdXNlRG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNPdGhlck1vdXNlRG93bik7
CisKKyAgICBpZiAoZXZlbnQgPT0gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBbZXZlbnQgcmV0YWluXTsKKyAgICBbX3ByaXZhdGUtPm1vdXNlRG93bkV2
ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5tb3VzZURvd25FdmVudCA9IGV2ZW50OworfQor
CistICh2b2lkKV9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcgoreworICAg
IGlmIChfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpIHsKKyAgICAg
ICAgQ0ZSdW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0
aXZlU3RhdGVUaW1lcik7CisgICAgICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+dXBkYXRlRm9jdXNl
ZEFuZEFjdGl2ZVN0YXRlVGltZXIpOworICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFu
ZEFjdGl2ZVN0YXRlVGltZXIgPSBOVUxMOworICAgIH0KK30KKworLSAodm9pZClfY2FuY2VsVXBk
YXRlTW91c2VvdmVyVGltZXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRp
bWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShfcHJpdmF0ZS0+dXBkYXRl
TW91c2VvdmVyVGltZXIpOworICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUtPnVwZGF0ZU1vdXNl
b3ZlclRpbWVyKTsKKyAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyID0gTlVM
TDsKKyAgICB9Cit9CisKKy0gKFdlYkhUTUxWaWV3ICopX3RvcEhUTUxWaWV3Cit7CisgICAgLy8g
RklYTUU6IHRoaXMgY2FuIGZhaWwgaWYgdGhlIGRhdGFTb3VyY2UgaXMgbmlsLCB3aGljaCBoYXBw
ZW5zIHdoZW4gdGhlIFdlYlZpZXcgaXMgdGVhcmluZyBkb3duIGZyb20gdGhlIHdpbmRvdyBjbG9z
aW5nLgorICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICopW1tbW19wcml2YXRl
LT5kYXRhU291cmNlIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3
XTsKKyAgICBBU1NFUlQodmlldyk7CisgICAgQVNTRVJUKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dl
YkhUTUxWaWV3IGNsYXNzXV0pOworICAgIHJldHVybiB2aWV3OworfQorCistIChCT09MKV9pc1Rv
cEhUTUxWaWV3Cit7CisgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGEgY2FjaGVkIGJvb2xl
YW4gdGhhdCBkb2Vzbid0IHJlbHkgb24gX3RvcEhUTUxWaWV3IHNpbmNlIHRoYXQgY2FuIGZhaWwg
KHNlZSBfdG9wSFRNTFZpZXcpLgorICAgIHJldHVybiBzZWxmID09IFtzZWxmIF90b3BIVE1MVmll
d107Cit9CisKKy0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmUKK3sKKyAgICBb
c2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdp
ZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworCisjaWZuZGVmIE5ERUJVRworICAgIF9wcml2
YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOworI2VuZGlmCisKKyAgICBOU011dGFibGVB
cnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdOworCisgICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTpk
ZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRh
bnRXZWJIVE1MVmlld3MgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKQorICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDpp
XSBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRo
OjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworCisgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
cmVsZWFzZV07CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vi
dmlld3MgPSBOTzsKKyNlbmRpZgorfQorCistICh2b2lkKV93ZWJfY2xlYXJQcmludGluZ01vZGVS
ZWN1cnNpdmUKK3sKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDow
LjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7CisjZW5kaWYK
KworICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFi
bGVBcnJheSBhbGxvY10gaW5pdF07CisKKyAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJI
VE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOworCisgICAgdW5zaWduZWQg
Y291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3
cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYg
bWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKKworICAgIFtkZXNjZW5k
YW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOworCisjaWZuZGVmIE5ERUJVRworICAgIF9wcml2YXRl
LT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87CisjZW5kaWYKK30KKworLSAodm9pZClfd2ViX3Nl
dFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplCit7CisgICAgW3NlbGYgX3Nl
dFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBm
IGFkanVzdFZpZXdTaXplOllFU107CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVu
dW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7CisjZW5kaWYKKworICAgIE5TTXV0YWJsZUFycmF5ICpk
ZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisK
KyAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRh
bnRXZWJIVE1MVmlld3NdOworCisgICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhU
TUxWaWV3cyBjb3VudF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQ
cmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBh
ZGp1c3RWaWV3U2l6ZTpZRVNdOworCisgICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgcmVsZWFz
ZV07CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3Mg
PSBOTzsKKyNlbmRpZgorfQorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAo
V2ViUHJpdmF0ZSkKKworKyAoTlNBcnJheSAqKXN1cHBvcnRlZE1JTUVUeXBlcworeworICAgIHJl
dHVybiBbV2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZE1JTUVUeXBlc107Cit9CisKKysg
KE5TQXJyYXkgKilzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlcworeworICAgIHJldHVybiBbV2ViSFRN
TFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZEltYWdlTUlNRVR5cGVzXTsKK30KKworKyAoTlNBcnJh
eSAqKXN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzCit7CisgICAgcmV0dXJuIFtXZWJIVE1MUmVw
cmVzZW50YXRpb24gc3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZXNdOworfQorCisrIChOU0FycmF5
ICopdW5zdXBwb3J0ZWRUZXh0TUlNRVR5cGVzCit7CisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5
V2l0aE9iamVjdHM6CisgICAgICAgIEAidGV4dC9jYWxlbmRhciIsICAgICAgIC8vIGlDYWwKKyAg
ICAgICAgQCJ0ZXh0L3gtY2FsZW5kYXIiLAorICAgICAgICBAInRleHQveC12Y2FsZW5kYXIiLAor
ICAgICAgICBAInRleHQvdmNhbGVuZGFyIiwKKyAgICAgICAgQCJ0ZXh0L3ZjYXJkIiwgICAgICAg
ICAgLy8gdkNhcmQKKyAgICAgICAgQCJ0ZXh0L3gtdmNhcmQiLAorICAgICAgICBAInRleHQvZGly
ZWN0b3J5IiwKKyAgICAgICAgQCJ0ZXh0L2xkaWYiLCAgICAgICAgICAgLy8gTmV0c2NhcGUgQWRk
cmVzcyBCb29rCisgICAgICAgIEAidGV4dC9xaWYiLCAgICAgICAgICAgIC8vIFF1aWNrZW4KKyAg
ICAgICAgQCJ0ZXh0L3gtcWlmIiwKKyAgICAgICAgQCJ0ZXh0L3gtY3N2IiwgICAgICAgICAgLy8g
Q1NWIChmb3IgQWRkcmVzcyBCb29rIGFuZCBNaWNyb3NvZnQgT3V0bG9vaykKKyAgICAgICAgQCJ0
ZXh0L3gtdmNmIiwgICAgICAgICAgLy8gdkNhcmQgdHlwZSB1c2VkIGluIFN1biBhZmZpbml0eSBh
cHAKKyAgICAgICAgQCJ0ZXh0L3J0ZiIsICAgICAgICAgICAgLy8gUmljaCBUZXh0IEZvcm1hdAor
ICAgICAgICBuaWxdOworfQorCisrICh2b2lkKV9wb3N0RmxhZ3NDaGFuZ2VkRXZlbnQ6KE5TRXZl
bnQgKilmbGFnc0NoYW5nZWRFdmVudAoreworICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZv
cjogPHJkYXI6Ly9wcm9ibGVtLzI5ODE2MTk+IE5TUmVzcG9uZGVyX1ByaXZhdGUgc2hvdWxkIGlu
Y2x1ZGUgbm90aWZpY2F0aW9uIGZvciBGbGFnc0NoYW5nZWQKKyAgICBOU0V2ZW50ICpmYWtlRXZl
bnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkCisgICAgICAgIGxv
Y2F0aW9uOltbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltO
U0V2ZW50IG1vdXNlTG9jYXRpb25dXQorICAgICAgICBtb2RpZmllckZsYWdzOltmbGFnc0NoYW5n
ZWRFdmVudCBtb2RpZmllckZsYWdzXQorICAgICAgICB0aW1lc3RhbXA6W2ZsYWdzQ2hhbmdlZEV2
ZW50IHRpbWVzdGFtcF0KKyAgICAgICAgd2luZG93TnVtYmVyOltmbGFnc0NoYW5nZWRFdmVudCB3
aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6W2ZsYWdzQ2hhbmdlZEV2ZW50IGNvbnRleHRd
CisgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworCisgICAg
Ly8gUHJldGVuZCBpdCdzIGEgbW91c2UgbW92ZS4KKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdCisgICAgICAgIHBvc3ROb3RpZmljYXRpb25OYW1lOldLTW91c2VNb3Zl
ZE5vdGlmaWNhdGlvbigpIG9iamVjdDpzZWxmCisgICAgICAgIHVzZXJJbmZvOltOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6ZmFrZUV2ZW50IGZvcktleTpAIk5TRXZlbnQiXV07Cit9
CisKKy0gKGlkKV9icmlkZ2UKK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBleGlzdHMgdG8gbWFpbnRh
aW4gY29tcGF0aWJpbGl0eSB3aXRoIExlb3BhcmQncyBEaWN0aW9uYXJ5LmFwcCwgc2luY2UgaXQK
KyAgICAvLyBjYWxscyBfYnJpZGdlIHRvIGdldCBhY2Nlc3MgdG8gY29udmVydE5TUmFuZ2VUb0RP
TVJhbmdlOiBhbmQgY29udmVydERPTVJhbmdlVG9OU1JhbmdlOi4KKyAgICAvLyBSZXR1cm4gdGhl
IFdlYkZyYW1lLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBjb21wYXRpYmlsaXR5IG1ldGhvZHMuIDxy
ZGFyOi8vcHJvYmxlbS82MDAyMTYwPgorICAgIHJldHVybiBbc2VsZiBfZnJhbWVdOworfQorCist
ICh2b2lkKV91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50Cit7CisgICAgW3NlbGYgX2NhbmNl
bFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKKyAgICAKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBb
TlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkCisgICAgICAgIGxvY2F0aW9u
Oltbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlv
bl1dCisgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVy
RmxhZ3NdCisgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV0KKyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJl
cl0KKyAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAg
ICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgCisgICAgW3Nl
bGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpmYWtlRXZlbnRdOworfQorCitzdGF0aWMgdm9p
ZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjayhDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwg
dm9pZCAqaW5mbykKK3sKKyAgICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKWlu
Zm87CisgICAgCisgICAgW3ZpZXcgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOworfQor
CistICh2b2lkKV9mcmFtZU9yQm91bmRzQ2hhbmdlZAoreworICAgIE5TUG9pbnQgb3JpZ2luID0g
W1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmlnaW47CisgICAgaWYgKCFOU0VxdWFsUG9pbnRz
KF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24sIG9yaWdpbikpIHsKKyAgICAgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICAgICAgY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZFNjcm9sbEV2ZW50KCk7CisgICAgICAgIFtfcHJpdmF0
ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAg
ICAgICAgCisgICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAg
ICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRpZFNj
cm9sbERvY3VtZW50SW5GcmFtZVZpZXc6W3NlbGYgX2ZyYW1lVmlld11dOworICAgIH0KKyAgICBf
cHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gb3JpZ2luOworCisgICAgaWYgKFtzZWxmIHdp
bmRvd10gJiYgIV9wcml2YXRlLT5jbG9zZWQgJiYgIV9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJU
aW1lcikgeworICAgICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4dCA9IHsgMCwgc2Vs
ZiwgTlVMTCwgTlVMTCwgTlVMTCB9OworICAgICAgICAKKyAgICAgICAgLy8gVXNlIGEgMTAwbXMg
ZGVsYXkgc28gdGhhdCB0aGUgc3ludGhldGljIG1vdXNlIG92ZXIgdXBkYXRlIGRvZXNuJ3QgY2F1
c2UgY3Vyc29yIHRocmFzaGluZyB3aGVuIHBhZ2VzIGFyZSBsb2FkaW5nCisgICAgICAgIC8vIGFu
ZCBzY3JvbGxpbmcgcmFwaWRseSBiYWNrIHRvIGJhY2suCisgICAgICAgIF9wcml2YXRlLT51cGRh
dGVNb3VzZW92ZXJUaW1lciA9IENGUnVuTG9vcFRpbWVyQ3JlYXRlKE5VTEwsIENGQWJzb2x1dGVU
aW1lR2V0Q3VycmVudCgpICsgMC4xLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRlTW91c2VvdmVyVGlt
ZXJDYWxsYmFjaywgJmNvbnRleHQpOworICAgICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lciwga0NGUnVuTG9v
cERlZmF1bHRNb2RlKTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3NldEFzaWRlU3Vidmlld3MKK3sK
KyAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKKyAgICBBU1NFUlQoX3By
aXZhdGUtPnNhdmVkU3Vidmlld3MgPT0gbmlsKTsKKyAgICBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3
cyA9IF9zdWJ2aWV3czsKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8g
V2UgbmVlZCB0byBrZWVwIHRoZSBsYXllci1ob3N0aW5nIHZpZXcgaW4gdGhlIHN1YnZpZXdzLCBv
dGhlcndpc2UgdGhlIGxheWVycyBmbGFzaC4KKyAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGlu
Z1ZpZXcpIHsKKyAgICAgICAgTlNBcnJheSogbmV3U3Vidmlld3MgPSBbW05TQXJyYXkgYWxsb2Nd
IGluaXRXaXRoT2JqZWN0czpfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldywgbmlsXTsKKyAgICAg
ICAgX3N1YnZpZXdzID0gbmV3U3Vidmlld3M7CisgICAgfSBlbHNlCisgICAgICAgIF9zdWJ2aWV3
cyA9IG5pbDsKKyNlbHNlCisgICAgX3N1YnZpZXdzID0gbmlsOworI2VuZGlmICAgIAorICAgIF9w
cml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlID0gWUVTOworIH0KKyAKKyAtICh2b2lkKV9yZXN0b3Jl
U3Vidmlld3MKKyB7CisgICAgQVNTRVJUKF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKF9wcml2YXRlLT5sYXllckhv
c3RpbmdWaWV3KSB7CisgICAgICAgIFtfc3Vidmlld3MgcmVsZWFzZV07CisgICAgICAgIF9zdWJ2
aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOworICAgIH0gZWxzZSB7CisgICAgICAgIEFT
U0VSVChfc3Vidmlld3MgPT0gbmlsKTsKKyAgICAgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNh
dmVkU3Vidmlld3M7CisgICAgfQorI2Vsc2UKKyAgICBBU1NFUlQoX3N1YnZpZXdzID09IG5pbCk7
CisgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNhdmVkU3Vidmlld3M7CisjZW5kaWYgICAgCisg
ICAgX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPSBuaWw7CisgICAgX3ByaXZhdGUtPnN1YnZpZXdz
U2V0QXNpZGUgPSBOTzsKK30KKworI2lmbmRlZiBOREVCVUcKKworLSAodm9pZClkaWRBZGRTdWJ2
aWV3OihOU1ZpZXcgKilzdWJ2aWV3Cit7CisgICAgaWYgKF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1
YnZpZXdzKQorICAgICAgICBMT0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAlcyB3YXMgYWRkZWQg
ZHVyaW5nIHN1YnZpZXcgZW51bWVyYXRpb24gZm9yIGxheW91dCBvciBwcmludGluZyBtb2RlIGNo
YW5nZS4gVGhpcyB2aWV3IG1pZ2h0IHBhaW50IHdpdGhvdXQgZmlyc3QgcmVjZWl2aW5nIGxheW91
dC4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNsYXNzXSkpOworfQorCistICh2b2lk
KXdpbGxSZW1vdmVTdWJ2aWV3OihOU1ZpZXcgKilzdWJ2aWV3Cit7CisgICAgLy8gSGF2ZSB0byBu
dWxsLWNoZWNrIF9wcml2YXRlLCBzaW5jZSB0aGlzIGNhbiBiZSBjYWxsZWQgdmlhIC1kZWFsbG9j
IHdoZW4KKyAgICAvLyBjbGVhbmluZyB1cCB0aGUgdGhlIGxheWVySG9zdGluZ1ZpZXcuCisgICAg
aWYgKF9wcml2YXRlICYmIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzKQorICAgICAgICBM
T0coVmlldywgIkEgdmlldyBvZiBjbGFzcyAlcyB3YXMgcmVtb3ZlZCBkdXJpbmcgc3VidmlldyBl
bnVtZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1vZGUgY2hhbmdlLiBXZSB3aWxsIHN0
aWxsIGRvIGxheW91dCBvciB0aGUgcHJpbnRpbmcgbW9kZSBjaGFuZ2UgZXZlbiB0aG91Z2ggdGhp
cyB2aWV3IGlzIG5vIGxvbmdlciBpbiB0aGUgdmlldyBoaWVyYXJjaHkuIiwgb2JqZWN0X2dldENs
YXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKK30KKworI2VuZGlmCisKKyNpZmRlZiBCVUlMRElO
R19PTl9USUdFUgorCisvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGFyZSBhYm91dCB0byBkcmF3
LCBidXQgYmVmb3JlIG91ciBkaXJ0eSByZWN0IGlzIHByb3BhZ2F0ZWQgdG8gb3VyIGFuY2VzdG9y
cy4KKy8vIFRoYXQncyB0aGUgcGVyZmVjdCB0aW1lIHRvIGRvIGEgbGF5b3V0LCBleGNlcHQgdGhh
dCBpZGVhbGx5IHdlJ2Qgd2FudCB0byBiZSBzdXJlIHRoYXQgd2UncmUgZGlydHkKKy8vIGJlZm9y
ZSBkb2luZyBpdC4gQXMgYSBjb21wcm9taXNlLCB3aGVuIHdlJ3JlIG9wYXF1ZSB3ZSBkbyB0aGUg
bGF5b3V0IG9ubHkgd2hlbiBhY3R1YWxseSBhc2tlZCB0bworLy8gZHJhdywgYnV0IHdoZW4gd2Un
cmUgdHJhbnNwYXJlbnQgd2UgZG8gdGhlIGxheW91dCBhdCB0aGlzIHN0YWdlIHNvIHZpZXdzIGJl
aGluZCB1cyBrbm93IHRoYXQgdGhleQorLy8gbmVlZCB0byBiZSByZWRyYXduIChpbiBjYXNlIHRo
ZSBsYXlvdXQgY2F1c2VzIHNvbWUgdGhpbmdzIHRvIGdldCBkaXJ0aWVkKS4KKy0gKHZvaWQpX3By
b3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9ycworeworICAgIGlmICghW1tzZWxmIF93
ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdKQorICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVl
ZGVkUmVjdXJzaXZlXTsKKyAgICBbc3VwZXIgX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFu
Y2VzdG9yc107Cit9CisKKyNlbHNlCisKKy0gKHZvaWQpdmlld1dpbGxEcmF3Cit7CisgICAgLy8g
T24gd2luZG93IGNsb3NlIHdlIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGRhdGFzb3VyY2UgaXMg
bmlsLCB0aGVuIGhpdCBhbiBhc3NlcnQgaW4gX3RvcEhUTUxWaWV3CisgICAgLy8gU28gY2hlY2sg
aWYgdGhlIGRhdGFTb3VyY2UgaXMgbmlsIGJlZm9yZSBjYWxsaW5nIFtzZWxmIF9pc1RvcEhUTUxW
aWV3XSwgdGhpcyBjYW4gYmUgcmVtb3ZlZAorICAgIC8vIG9uY2UgdGhlIEZJWE1FIGluIF9pc1Rv
cEhUTUxWaWV3IGlzIGZpeGVkLgorICAgIGlmIChfcHJpdmF0ZS0+ZGF0YVNvdXJjZSAmJiBbc2Vs
ZiBfaXNUb3BIVE1MVmlld10pCisgICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1
cnNpdmVdOworICAgIFtzdXBlciB2aWV3V2lsbERyYXddOworfQorCisjZW5kaWYKKworLy8gRG9u
J3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0Lgor
LSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5nT3BhY2l0eTooTlNS
ZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVS
ZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzooQk9PTCl0b3BWaWV3Cit7
CisgICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJp
bnQgcHJvY2Vzcy4KKyAgICAvLyBJZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQgd2Un
cmUgcHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZlciBoYXZlIHRvIGRvIHRoaXMuCisgICAgQk9P
TCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGluZzsKKyAgICBCT09MIGlzUHJp
bnRpbmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVu
XTsKKyAgICBpZiAoaXNQcmludGluZykgeworICAgICAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2Rl
KQorICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOworI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgICAgICBlbHNlCisgICAgICAgICAgICBbc2VsZiBf
d2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAod2Fz
SW5QcmludGluZ01vZGUpCisgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1
cnNpdmVdOworCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKworICAgIC8vIEJlY2F1c2UgVGln
ZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVyZS4K
KyAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKKyAgICBbX3N1YnZpZXdz
IG1ha2VPYmplY3RzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfcHJvcGFnYXRlRGlydHlSZWN0
c1RvT3BhcXVlQW5jZXN0b3JzKV07CisKKyNlbmRpZgorCisgICAgW3NlbGYgX3NldEFzaWRlU3Vi
dmlld3NdOworICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9yaW5n
T3BhY2l0eTpyZWN0IGlzVmlzaWJsZVJlY3Q6aXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVj
dEZvclZpZXc6dmlzaWJsZVZpZXcgdG9wVmlldzp0b3BWaWV3XTsKKyAgICBbc2VsZiBfcmVzdG9y
ZVN1YnZpZXdzXTsKKworICAgIGlmICh3YXNJblByaW50aW5nTW9kZSAhPSBpc1ByaW50aW5nKSB7
CisgICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgICAgIFtzZWxmIF93ZWJf
c2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3Nl
bGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07CisgICAgfQorfQorCisvLyBEb24n
dCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJlIG9mIHRoYXQuCist
ICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3VzOihCT09MKW5lZWRz
TG9ja0ZvY3VzIHZpc1JlY3Q6KE5TUmVjdCl2aXNSZWN0Cit7CisgICAgQk9PTCBuZWVkVG9TZXRB
c2lkZVN1YnZpZXdzID0gIV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlOworCisgICAgQk9PTCB3
YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5wcmludGluZzsKKyAgICBCT09MIGlzUHJpbnRp
bmcgPSAhW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXTsK
KworICAgIGlmIChuZWVkVG9TZXRBc2lkZVN1YnZpZXdzKSB7CisgICAgICAgIC8vIFRoaXMgaGVs
cHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nlc3MuCisgICAg
ICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGluZywg
dGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KKyAgICAgICAgaWYgKGlzUHJpbnRp
bmcpIHsKKyAgICAgICAgICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpCisgICAgICAgICAgICAg
ICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOworI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFtzZWxmIF93ZWJf
bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworI2VuZGlmCisgICAgICAgIH0gZWxzZSBpZiAod2Fz
SW5QcmludGluZ01vZGUpCisgICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2Rl
UmVjdXJzaXZlXTsKKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKyAgICAgICAgLy8gQmVj
YXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZpZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxheW91
dCBoZXJlLgorICAgICAgICBOU1JlY3QgYm91bmRzQmVmb3JlTGF5b3V0ID0gW3NlbGYgYm91bmRz
XTsKKyAgICAgICAgaWYgKCFOU0lzRW1wdHlSZWN0KHZpc1JlY3QpKQorICAgICAgICAgICAgW3Nl
bGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisKKyAgICAgICAgLy8gSWYgbGF5b3V0
IGNoYW5nZXMgdGhlIHZpZXcncyBib3VuZHMsIHRoZW4gd2UgbmVlZCB0byByZWNvbXB1dGUgdGhl
IHZpc1JlY3QuCisgICAgICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZSB2aXNSZWN0IHBhc3NlZCB0
byB1cyB3YXMgYmFzZWQgb24gdGhlIGJvdW5kcyBhdCB0aGUgdGltZQorICAgICAgICAvLyB3ZSB3
ZXJlIGNhbGxlZC4gVGhpcyBtZXRob2QgaXMgb25seSBkaXNwbGF5ZWQgdG8gZHJhdyAiYWxsIiwg
c28gaXQncyBzYWZlCisgICAgICAgIC8vIHRvIGp1c3QgY2FsbCB2aXNpYmxlUmVjdCB0byBjb21w
dXRlIHRoZSBlbnRpcmUgcmVjdGFuZ2xlLgorICAgICAgICBpZiAoIU5TRXF1YWxSZWN0cyhib3Vu
ZHNCZWZvcmVMYXlvdXQsIFtzZWxmIGJvdW5kc10pKQorICAgICAgICAgICAgdmlzUmVjdCA9IFtz
ZWxmIHZpc2libGVSZWN0XTsKKworI2VuZGlmCisKKyAgICAgICAgW3NlbGYgX3NldEFzaWRlU3Vi
dmlld3NdOworICAgIH0KKworICAgIFtzdXBlciBfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0
aExvY2tGb2N1czpuZWVkc0xvY2tGb2N1cyB2aXNSZWN0OnZpc1JlY3RdOworCisgICAgaWYgKG5l
ZWRUb1NldEFzaWRlU3Vidmlld3MpIHsKKyAgICAgICAgaWYgKHdhc0luUHJpbnRpbmdNb2RlICE9
IGlzUHJpbnRpbmcpIHsKKyAgICAgICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSkKKyAgICAg
ICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJl
Y3Vyc2l2ZV07CisgICAgICAgIH0KKworICAgICAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsK
KyAgICB9Cit9CisKKy8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0
YWtlIGNhcmUgb2YgdGhhdC4KKy0gKHZvaWQpX3JlY3Vyc2l2ZTooQk9PTClyZWN1cnNlIGRpc3Bs
YXlSZWN0SWdub3JpbmdPcGFjaXR5OihOU1JlY3QpZGlzcGxheVJlY3QgaW5Db250ZXh0OihOU0dy
YXBoaWNzQ29udGV4dCAqKWNvbnRleHQgdG9wVmlldzooQk9PTCl0b3BWaWV3Cit7CisjaWZkZWYg
QlVJTERJTkdfT05fVElHRVIgCisgICAgLy8gQmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZp
ZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxheW91dCBoZXJlLgorICAgIFtzZWxmIF93ZWJfbGF5
b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworI2VuZGlmCisKKyAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2
aWV3c107CisgICAgW3N1cGVyIF9yZWN1cnNpdmU6cmVjdXJzZSBkaXNwbGF5UmVjdElnbm9yaW5n
T3BhY2l0eTpkaXNwbGF5UmVjdCBpbkNvbnRleHQ6Y29udGV4dCB0b3BWaWV3OnRvcFZpZXddOwor
ICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOworfQorCistIChCT09MKV9pbnNpZGVBbm90aGVy
SFRNTFZpZXcKK3sKKyAgICByZXR1cm4gc2VsZiAhPSBbc2VsZiBfdG9wSFRNTFZpZXddOworfQor
CistIChOU1ZpZXcgKiloaXRUZXN0OihOU1BvaW50KXBvaW50Cit7CisgICAgLy8gV2ViSFRNTFZp
ZXcgb2JqZWN0cyBoYW5kbGUgYWxsIGV2ZW50cyBmb3Igb2JqZWN0cyBpbnNpZGUgdGhlbS4KKyAg
ICAvLyBUbyBnZXQgdGhvc2UgZXZlbnRzLCB3ZSBwcmV2ZW50IGhpdCB0ZXN0aW5nIGZyb20gQXBw
S2l0LgorCisgICAgLy8gQnV0IHRoZXJlIGFyZSB0aHJlZSBleGNlcHRpb25zIHRvIHRoaXM6Cisg
ICAgLy8gICAxKSBGb3IgcmlnaHQgbW91c2UgY2xpY2tzIGFuZCBjb250cm9sIGNsaWNrcyB3ZSBk
b24ndCB5ZXQgaGF2ZSBhbiBpbXBsZW1lbnRhdGlvbgorICAgIC8vICAgICAgdGhhdCB3b3JrcyBm
b3IgbmVzdGVkIHZpZXdzLCBzbyB3ZSBsZXQgdGhlIGhpdCB0ZXN0aW5nIGdvIHRocm91Z2ggdGhl
CisgICAgLy8gICAgICBzdGFuZGFyZCBOU1ZpZXcgY29kZSBwYXRoIChuZWVkcyB0byBiZSBmaXhl
ZCwgc2VlIGJ1ZyA0MzYxNjE4KS4KKyAgICAvLyAgIDIpIEphdmEgZGVwZW5kcyBvbiBkb2luZyBh
IGhpdCB0ZXN0IGluc2lkZSBpdCdzIG1vdXNlIG1vdmVkIGhhbmRsaW5nLAorICAgIC8vICAgICAg
c28gd2UgbGV0IHRoZSBoaXQgdGVzdGluZyBnbyB0aHJvdWdoIHRoZSBzdGFuZGFyZCBOU1ZpZXcg
Y29kZSBwYXRoCisgICAgLy8gICAgICB3aGVuIHRoZSBjdXJyZW50IGV2ZW50IGlzIGEgbW91c2Ug
bW92ZSAoZXhjZXB0IHdoZW4gd2UgYXJlIGNhbGxpbmcKKyAgICAvLyAgICAgIGZyb20gX3VwZGF0
ZU1vdXNlb3ZlcldpdGhFdmVudCwgc28gd2UgaGF2ZSB0byB1c2UgYSBnbG9iYWwsCisgICAgLy8g
ICAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCwgZm9yIHRoYXQpCisgICAgLy8gICAzKSBUaGUg
YWNjZXB0c0ZpcnN0TW91c2U6IGFuZCBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6
IG1ldGhvZHMKKyAgICAvLyAgICAgIGJvdGggbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHZpZXcg
dG8gY2hlY2sgd2l0aCBpbnNpZGUgdGhlIFdlYkhUTUxWaWV3LgorICAgIC8vICAgICAgVGhleSB1
c2UgYSBnbG9iYWwgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBoaXRUZXN0OiBzbyB0aGV5IGNh
biBnZXQgdGhlCisgICAgLy8gICAgICByaWdodCB2aWV3LiBUaGUgZ2xvYmFsIGlzIGZvcmNlTlNW
aWV3SGl0VGVzdCBhbmQgdGhlIG1ldGhvZCB0aGV5IHVzZSB0bworICAgIC8vICAgICAgZG8gdGhl
IGhpdCB0ZXN0aW5nIGlzIF9oaXRWaWV3Rm9yRXZlbnQ6LiAoQnV0IHRoaXMgZG9lcyBub3Qgd29y
ayBjb3JyZWN0bHkKKyAgICAvLyAgICAgIHdoZW4gdGhlcmUgaXMgSFRNTCBvdmVybGFwcGluZyB0
aGUgdmlldywgc2VlIGJ1ZyA0MzYxNjI2KQorICAgIC8vICAgNCkgTlNBY2Nlc3NpYmlsaXR5SGl0
VGVzdCByZWxpZXMgb24gdGhpcyBmb3IgY2hlY2tpbmcgdGhlIGN1cnNvciBwb3NpdGlvbi4KKyAg
ICAvLyAgICAgIE91ciBjaGVjayBmb3IgdGhhdCBpcyB3aGV0aGVyIHRoZSBldmVudCBpcyBOU0Zs
YWdzQ2hhbmdlZC4gIFRoaXMgd29ya3MKKyAgICAvLyAgICAgIGZvciBWb2ljZU92ZXIncyBjbnRs
LW9wdC1mNSBjb21tYW5kIChtb3ZlIGZvY3VzIHRvIGl0ZW0gdW5kZXIgY3Vyc29yKQorICAgIC8v
ICAgICAgYW5kIERpY3Rpb25hcnkncyBjbWQtY250bC1EIChvcGVuIGRpY3Rpb25hcnkgcG9wdXAg
Zm9yIGl0ZW0gdW5kZXIgY3Vyc29yKS4KKyAgICAvLyAgICAgIFRoaXMgaXMgb2YgY291cnNlIGEg
aGFjay4KKworICAgIEJPT0wgY2FwdHVyZUhpdHNPblN1YnZpZXdzOworICAgIGlmIChmb3JjZU5T
Vmlld0hpdFRlc3QpCisgICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9IE5POworICAgIGVs
c2UgaWYgKGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0KQorICAgICAgICBjYXB0dXJlSGl0c09uU3Vi
dmlld3MgPSBZRVM7CisgICAgZWxzZSB7CisgICAgICAgIE5TRXZlbnQgKmV2ZW50ID0gW1tzZWxm
IHdpbmRvd10gY3VycmVudEV2ZW50XTsKKyAgICAgICAgY2FwdHVyZUhpdHNPblN1YnZpZXdzID0g
IShbZXZlbnQgdHlwZV0gPT0gTlNNb3VzZU1vdmVkCisgICAgICAgICAgICB8fCBbZXZlbnQgdHlw
ZV0gPT0gTlNSaWdodE1vdXNlRG93bgorICAgICAgICAgICAgfHwgKFtldmVudCB0eXBlXSA9PSBO
U0xlZnRNb3VzZURvd24gJiYgKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1h
c2spICE9IDApCisgICAgICAgICAgICB8fCBbZXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQp
OworICAgIH0KKworICAgIGlmICghY2FwdHVyZUhpdHNPblN1YnZpZXdzKQorICAgICAgICByZXR1
cm4gW3N1cGVyIGhpdFRlc3Q6cG9pbnRdOworICAgIGlmIChbW3NlbGYgc3VwZXJ2aWV3XSBtb3Vz
ZTpwb2ludCBpblJlY3Q6W3NlbGYgZnJhbWVdXSkKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAg
cmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfY2xlYXJMYXN0SGl0Vmlld0lmU2VsZgoreworICAg
IGlmIChsYXN0SGl0VmlldyA9PSBzZWxmKQorICAgICAgICBsYXN0SGl0VmlldyA9IG5pbDsKK30K
KworLSAoTlNUcmFja2luZ1JlY3RUYWcpYWRkVHJhY2tpbmdSZWN0OihOU1JlY3QpcmVjdCBvd25l
cjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilkYXRhIGFzc3VtZUluc2lkZTooQk9PTClhc3N1
bWVJbnNpZGUKK3sKKyAgICBBU1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09IG5p
bCk7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7CisgICAgX3ByaXZh
dGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gZGF0YTsKKyAgICByZXR1cm4gVFJBQ0tJTkdfUkVD
VF9UQUc7Cit9CisKKy0gKE5TVHJhY2tpbmdSZWN0VGFnKV9hZGRUcmFja2luZ1JlY3Q6KE5TUmVj
dClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRl
OihCT09MKWFzc3VtZUluc2lkZSB1c2VUcmFja2luZ051bTooaW50KXRhZworeworICAgIEFTU0VS
VCh0YWcgPT0gMCB8fCB0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpOworICAgIEFTU0VSVChfcHJp
dmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKKyAgICBfcHJpdmF0ZS0+dHJhY2tpbmdS
ZWN0T3duZXIgPSBvd25lcjsKKyAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGEgPSBk
YXRhOworICAgIHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsKK30KKworLSAodm9pZClfYWRkVHJh
Y2tpbmdSZWN0czooTlNSZWN0ICopcmVjdHMgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhTGlzdDoo
dm9pZCAqKil1c2VyRGF0YUxpc3QgYXNzdW1lSW5zaWRlTGlzdDooQk9PTCAqKWFzc3VtZUluc2lk
ZUxpc3QgdHJhY2tpbmdOdW1zOihOU1RyYWNraW5nUmVjdFRhZyAqKXRyYWNraW5nTnVtcyBjb3Vu
dDooaW50KWNvdW50Cit7CisgICAgQVNTRVJUKGNvdW50ID09IDEpOworICAgIEFTU0VSVCh0cmFj
a2luZ051bXNbMF0gPT0gMCB8fCB0cmFja2luZ051bXNbMF0gPT0gVFJBQ0tJTkdfUkVDVF9UQUcp
OworICAgIEFTU0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKKyAgICBf
cHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsKKyAgICBfcHJpdmF0ZS0+dHJhY2tp
bmdSZWN0VXNlckRhdGEgPSB1c2VyRGF0YUxpc3RbMF07CisgICAgdHJhY2tpbmdOdW1zWzBdID0g
VFJBQ0tJTkdfUkVDVF9UQUc7Cit9CisKKy0gKHZvaWQpcmVtb3ZlVHJhY2tpbmdSZWN0OihOU1Ry
YWNraW5nUmVjdFRhZyl0YWcKK3sKKyAgICBpZiAodGFnID09IDApCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoX3ByaXZhdGUgJiYgKHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRykpIHsK
KyAgICAgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gbmlsOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmIChfcHJpdmF0ZSAmJiAodGFnID09IF9wcml2YXRlLT5s
YXN0VG9vbFRpcFRhZykpIHsKKyAgICAgICAgW3N1cGVyIHJlbW92ZVRyYWNraW5nUmVjdDp0YWdd
OworICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSAwOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIC8vIElmIGFueSBvdGhlciB0cmFja2luZyByZWN0IGlzIGJlaW5n
IHJlbW92ZWQsIHdlIGRvbid0IGtub3cgaG93IGl0IHdhcyBjcmVhdGVkCisgICAgLy8gYW5kIGl0
J3MgcG9zc2libGUgdGhlcmUncyBhIGxlYWsgaW52b2x2ZWQgKHNlZSAzNTAwMjE3KQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCistICh2b2lkKV9yZW1vdmVUcmFja2luZ1JlY3RzOihO
U1RyYWNraW5nUmVjdFRhZyAqKXRhZ3MgY291bnQ6KGludCljb3VudAoreworICAgIGludCBpOwor
ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGludCB0YWcgPSB0YWdz
W2ldOworICAgICAgICBpZiAodGFnID09IDApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgQVNTRVJUKHRhZyA9PSBUUkFDS0lOR19SRUNUX1RBRyk7CisgICAgICAgIGlmIChfcHJpdmF0
ZSAhPSBuaWwpIHsKKyAgICAgICAgICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG5p
bDsKKyAgICAgICAgfQorICAgIH0KK30KKworLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUV4aXRl
ZAoreworICAgIC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0cmFja2luZ051bWJl
ciwgYW5kIHVzZXJEYXRhLgorICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGVudGVy
RXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUV4aXRlZAorICAgICAgICBsb2NhdGlvbjpOU01ha2VQ
b2ludCgwLCAwKQorICAgICAgICBtb2RpZmllckZsYWdzOjAKKyAgICAgICAgdGltZXN0YW1wOjAK
KyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAg
ICAgY29udGV4dDpOVUxMCisgICAgICAgIGV2ZW50TnVtYmVyOjAKKyAgICAgICAgdHJhY2tpbmdO
dW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKKyAgICAgICAgdXNlckRhdGE6X3ByaXZhdGUtPnRyYWNr
aW5nUmVjdFVzZXJEYXRhXTsKKyAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyIG1vdXNl
RXhpdGVkOmZha2VFdmVudF07Cit9CisKKy0gKHZvaWQpX3NlbmRUb29sVGlwTW91c2VFbnRlcmVk
Cit7CisgICAgLy8gTm90aGluZyBtYXR0ZXJzIGV4Y2VwdCB3aW5kb3csIHRyYWNraW5nTnVtYmVy
LCBhbmQgdXNlckRhdGEuCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgZW50ZXJF
eGl0RXZlbnRXaXRoVHlwZTpOU01vdXNlRW50ZXJlZAorICAgICAgICBsb2NhdGlvbjpOU01ha2VQ
b2ludCgwLCAwKQorICAgICAgICBtb2RpZmllckZsYWdzOjAKKyAgICAgICAgdGltZXN0YW1wOjAK
KyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAg
ICAgY29udGV4dDpOVUxMCisgICAgICAgIGV2ZW50TnVtYmVyOjAKKyAgICAgICAgdHJhY2tpbmdO
dW1iZXI6VFJBQ0tJTkdfUkVDVF9UQUcKKyAgICAgICAgdXNlckRhdGE6X3ByaXZhdGUtPnRyYWNr
aW5nUmVjdFVzZXJEYXRhXTsKKyAgICBbX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyIG1vdXNl
RW50ZXJlZDpmYWtlRXZlbnRdOworfQorCistICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAq
KXN0cmluZworeworICAgIE5TU3RyaW5nICp0b29sVGlwID0gW3N0cmluZyBsZW5ndGhdID09IDAg
PyBuaWwgOiBzdHJpbmc7CisgICAgTlNTdHJpbmcgKm9sZFRvb2xUaXAgPSBfcHJpdmF0ZS0+dG9v
bFRpcDsKKyAgICBpZiAoKHRvb2xUaXAgPT0gbmlsIHx8IG9sZFRvb2xUaXAgPT0gbmlsKSA/IHRv
b2xUaXAgPT0gb2xkVG9vbFRpcCA6IFt0b29sVGlwIGlzRXF1YWxUb1N0cmluZzpvbGRUb29sVGlw
XSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChvbGRUb29sVGlwKSB7CisgICAg
ICAgIFtzZWxmIF9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkXTsKKyAgICAgICAgW29sZFRvb2xUaXAg
cmVsZWFzZV07CisgICAgfQorICAgIF9wcml2YXRlLT50b29sVGlwID0gW3Rvb2xUaXAgY29weV07
CisgICAgaWYgKHRvb2xUaXApIHsKKyAgICAgICAgLy8gU2VlIHJhZGFyIDM1MDAyMTcgZm9yIHdo
eSB3ZSByZW1vdmUgYWxsIHRvb2x0aXBzIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNpbmdsZSBvbmUg
d2UgY3JlYXRlZC4KKyAgICAgICAgW3NlbGYgcmVtb3ZlQWxsVG9vbFRpcHNdOworICAgICAgICBO
U1JlY3Qgd2lkZU9wZW5SZWN0ID0gTlNNYWtlUmVjdCgtMTAwMDAwLCAtMTAwMDAwLCAyMDAwMDAs
IDIwMDAwMCk7CisgICAgICAgIF9wcml2YXRlLT5sYXN0VG9vbFRpcFRhZyA9IFtzZWxmIGFkZFRv
b2xUaXBSZWN0OndpZGVPcGVuUmVjdCBvd25lcjpzZWxmIHVzZXJEYXRhOk5VTExdOworICAgICAg
ICBbc2VsZiBfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWRdOworICAgIH0KK30KKworLSAoTlNTdHJp
bmcgKil2aWV3OihOU1ZpZXcgKil2aWV3IHN0cmluZ0ZvclRvb2xUaXA6KE5TVG9vbFRpcFRhZyl0
YWcgcG9pbnQ6KE5TUG9pbnQpcG9pbnQgdXNlckRhdGE6KHZvaWQgKilkYXRhCit7CisgICAgcmV0
dXJuIFtbX3ByaXZhdGUtPnRvb2xUaXAgY29weV0gYXV0b3JlbGVhc2VdOworfQorCistICh2b2lk
KV91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGlmIChf
cHJpdmF0ZS0+Y2xvc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBOU1ZpZXcgKmNvbnRlbnRW
aWV3ID0gW1tldmVudCB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKKyAgICBOU1BvaW50IGxvY2F0aW9u
Rm9ySGl0VGVzdCA9IFtbY29udGVudFZpZXcgc3VwZXJ2aWV3XSBjb252ZXJ0UG9pbnQ6W2V2ZW50
IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07CisgICAgCisgICAgZm9yY2VXZWJIVE1M
Vmlld0hpdFRlc3QgPSBZRVM7CisgICAgTlNWaWV3ICpoaXRWaWV3ID0gW2NvbnRlbnRWaWV3IGhp
dFRlc3Q6bG9jYXRpb25Gb3JIaXRUZXN0XTsKKyAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCA9
IE5POworICAgIAorICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gbmlsOworICAgIGlmIChbaGl0Vmll
dyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dICYmICFbWyhXZWJIVE1MVmlldyAq
KWhpdFZpZXcgX3dlYlZpZXddIGlzSG92ZXJGZWVkYmFja1N1c3BlbmRlZF0pCisgICAgICAgIHZp
ZXcgPSAoV2ViSFRNTFZpZXcgKiloaXRWaWV3OyAgICAKKworICAgIGlmICh2aWV3KQorICAgICAg
ICBbdmlldyByZXRhaW5dOworCisgICAgaWYgKGxhc3RIaXRWaWV3ICE9IHZpZXcgJiYgbGFzdEhp
dFZpZXcgJiYgW2xhc3RIaXRWaWV3IF9mcmFtZV0pIHsKKyAgICAgICAgLy8gSWYgd2UgYXJlIG1v
dmluZyBvdXQgb2YgYSB2aWV3IChvciBmcmFtZSksIGxldCdzIHByZXRlbmQgdGhlIG1vdXNlIG1v
dmVkCisgICAgICAgIC8vIGFsbCB0aGUgd2F5IG91dCBvZiB0aGF0IHZpZXcuIEJ1dCB3ZSBoYXZl
IHRvIGFjY291bnQgZm9yIHNjcm9sbGluZywgYmVjYXVzZQorICAgICAgICAvLyBraHRtbCBkb2Vz
bid0IHVuZGVyc3RhbmQgb3VyIGNsaXBwaW5nLgorICAgICAgICBOU1JlY3QgdmlzaWJsZVJlY3Qg
PSBbW1tbbGFzdEhpdFZpZXcgX2ZyYW1lXSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBkb2N1bWVu
dFZpc2libGVSZWN0XTsKKyAgICAgICAgZmxvYXQgeVNjcm9sbCA9IHZpc2libGVSZWN0Lm9yaWdp
bi55OworICAgICAgICBmbG9hdCB4U2Nyb2xsID0gdmlzaWJsZVJlY3Qub3JpZ2luLng7CisKKyAg
ICAgICAgZXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNNb3VzZU1vdmVkCisg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoLTEgLSB4U2Nyb2xs
LCAtMSAtIHlTY3JvbGwgKQorICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6
W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdCisgICAgICAgICAgICAgICAgICAg
ICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQor
ICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW3ZpZXcgd2luZG93XSB3aW5k
b3dOdW1iZXJdCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJl
bnRFdmVudF0gY29udGV4dF0KKyAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJlcjow
IGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKKyAgICAgICAgaWYgKEZyYW1lKiBsYXN0SGl0Q29y
ZUZyYW1lID0gY29yZShbbGFzdEhpdFZpZXcgX2ZyYW1lXSkpCisgICAgICAgICAgICBsYXN0SGl0
Q29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CisgICAgfQorCisg
ICAgbGFzdEhpdFZpZXcgPSB2aWV3OworCisgICAgaWYgKHZpZXcpIHsKKyAgICAgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFt2aWV3IF9mcmFtZV0pKQorICAgICAgICAgICAgY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CisKKyAgICAgICAgW3ZpZXcg
cmVsZWFzZV07CisgICAgfQorfQorCisvLyBrZWVwIGluIHN5bmMgd2l0aCBXZWJQYXN0ZWJvYXJk
SGVscGVyOjppbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzCisrIChOU0FycmF5ICopX2luc2VydGFi
bGVQYXN0ZWJvYXJkVHlwZXMKK3sKKyAgICBzdGF0aWMgTlNBcnJheSAqdHlwZXMgPSBuaWw7Cisg
ICAgaWYgKCF0eXBlcykgeworICAgICAgICB0eXBlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBlLCBOU0hUTUxQYm9hcmRUeXBlLCBOU0ZpbGVu
YW1lc1Bib2FyZFR5cGUsIE5TVElGRlBib2FyZFR5cGUsIE5TUERGUGJvYXJkVHlwZSwKKyNpZiBk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
CisgICAgICAgICAgICBOU1BJQ1RQYm9hcmRUeXBlLAorI2VuZGlmCisgICAgICAgICAgICBOU1VS
TFBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUsIE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQ
Ym9hcmRUeXBlLCBOU0NvbG9yUGJvYXJkVHlwZSwga1VUVHlwZVBORywgbmlsXTsKKyAgICAgICAg
Q0ZSZXRhaW4odHlwZXMpOworICAgIH0KKyAgICByZXR1cm4gdHlwZXM7Cit9CisKKysgKE5TQXJy
YXkgKilfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzCit7CisgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBwdXQgZGF0YSBmb3IgTlNIVE1MUGJvYXJkVHlwZSBvbiB0aGUgcGFzdGVib2FyZCBidXQgTWlj
cm9zb2Z0IEV4Y2VsIGRvZXNuJ3QgbGlrZSBvdXIgZm9ybWF0IG9mIEhUTUwgKDM2NDA0MjMpLgor
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOldlYkFyY2hpdmVQYm9hcmRUeXBl
LCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlwZSwg
bmlsXTsKK30KKworLSAoTlNJbWFnZSAqKV9kcmFnSW1hZ2VGb3JVUkw6KE5TU3RyaW5nKil1cmxT
dHJpbmcgd2l0aExhYmVsOihOU1N0cmluZyopbGFiZWwKK3sKKyAgICBCT09MIGRyYXdVUkxTdHJp
bmcgPSBZRVM7CisgICAgQk9PTCBjbGlwVVJMU3RyaW5nID0gTk8sIGNsaXBMYWJlbFN0cmluZyA9
IE5POworICAgIAorICAgIGlmICghbGFiZWwpIHsKKyAgICAgICAgZHJhd1VSTFN0cmluZyA9IE5P
OworICAgICAgICBsYWJlbCA9IHVybFN0cmluZzsKKyAgICB9CisgICAgCisgICAgTlNGb250ICps
YWJlbEZvbnQgPSBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGNvbnZlcnRGb250
OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpEUkFHX0xJTktfTEFCRUxfRk9OVF9TSVpFXQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b0hhdmVUcmFpdDpOU0JvbGRGb250TWFza107CisgICAgTlNGb250ICp1cmxGb250ID0gW05TRm9u
dCBzeXN0ZW1Gb250T2ZTaXplOiBEUkFHX0xJTktfVVJMX0ZPTlRfU0laRV07CisgICAgTlNTaXpl
IGxhYmVsU2l6ZTsKKyAgICBsYWJlbFNpemUud2lkdGggPSBbbGFiZWwgX3dlYl93aWR0aFdpdGhG
b250OiBsYWJlbEZvbnRdOworICAgIGxhYmVsU2l6ZS5oZWlnaHQgPSBbbGFiZWxGb250IGFzY2Vu
ZGVyXSAtIFtsYWJlbEZvbnQgZGVzY2VuZGVyXTsKKyAgICBpZiAobGFiZWxTaXplLndpZHRoID4g
TUFYX0RSQUdfTEFCRUxfV0lEVEgpeworICAgICAgICBsYWJlbFNpemUud2lkdGggPSBNQVhfRFJB
R19MQUJFTF9XSURUSDsKKyAgICAgICAgY2xpcExhYmVsU3RyaW5nID0gWUVTOworICAgIH0KKyAg
ICAKKyAgICBOU1NpemUgaW1hZ2VTaXplLCB1cmxTdHJpbmdTaXplOworICAgIGltYWdlU2l6ZS53
aWR0aCA9IGxhYmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmOworICAg
IGltYWdlU2l6ZS5oZWlnaHQgPSBsYWJlbFNpemUuaGVpZ2h0ICsgRFJBR19MQUJFTF9CT1JERVJf
WSAqIDIuMGY7CisgICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKKyAgICAgICAgdXJsU3RyaW5nU2l6
ZS53aWR0aCA9IFt1cmxTdHJpbmcgX3dlYl93aWR0aFdpdGhGb250OiB1cmxGb250XTsKKyAgICAg
ICAgdXJsU3RyaW5nU2l6ZS5oZWlnaHQgPSBbdXJsRm9udCBhc2NlbmRlcl0gLSBbdXJsRm9udCBk
ZXNjZW5kZXJdOworICAgICAgICBpbWFnZVNpemUuaGVpZ2h0ICs9IHVybFN0cmluZ1NpemUuaGVp
Z2h0OworICAgICAgICBpZiAodXJsU3RyaW5nU2l6ZS53aWR0aCA+IE1BWF9EUkFHX0xBQkVMX1dJ
RFRIKSB7CisgICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBNQVgoTUFYX0RSQUdfTEFCRUxf
V0lEVEggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwgTUlOX0RSQUdfTEFCRUxfV0lEVEhf
QkVGT1JFX0NMSVApOworICAgICAgICAgICAgY2xpcFVSTFN0cmluZyA9IFlFUzsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGltYWdlU2l6ZS53aWR0aCA9IE1BWChsYWJlbFNpemUud2lk
dGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZiwgdXJsU3RyaW5nU2l6ZS53aWR0aCArIERS
QUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBOU0ltYWdl
ICpkcmFnSW1hZ2UgPSBbW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6IGltYWdlU2l6ZV0g
YXV0b3JlbGVhc2VdOworICAgIFtkcmFnSW1hZ2UgbG9ja0ZvY3VzXTsKKyAgICAKKyAgICBbW05T
Q29sb3IgY29sb3JXaXRoRGV2aWNlUmVkOiAwLjdmIGdyZWVuOiAwLjdmIGJsdWU6IDAuN2YgYWxw
aGE6IDAuOGZdIHNldF07CisgICAgCisgICAgLy8gRHJhZyBhIHJlY3RhbmdsZSB3aXRoIHJvdW5k
ZWQgY29ybmVycy8KKyAgICBOU0JlemllclBhdGggKnBhdGggPSBbTlNCZXppZXJQYXRoIGJlemll
clBhdGhdOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtl
UmVjdCgwLjBmLCAwLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFE
SVVTICogMi4wZildOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDog
TlNNYWtlUmVjdCgwLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBm
LCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZildOwor
ICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdChpbWFn
ZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIGltYWdlU2l6ZS5oZWlnaHQg
LSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJB
R19MQUJFTF9SQURJVVMgKiAyLjBmKV07CisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhP
dmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdfTEFCRUxfUkFESVVT
ICogMi4wZiwgMC4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElV
UyAqIDIuMGYpXTsKKyAgICAKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5T
TWFrZVJlY3QoRFJBR19MQUJFTF9SQURJVVMsIDAuMGYsIGltYWdlU2l6ZS53aWR0aCAtIERSQUdf
TEFCRUxfUkFESVVTICogMi4wZiwgaW1hZ2VTaXplLmhlaWdodCldOworICAgIFtwYXRoIGFwcGVu
ZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdCgwLjBmLCBEUkFHX0xBQkVMX1JBRElVUywg
RFJBR19MQUJFTF9SQURJVVMgKyAxMC4wZiwgaW1hZ2VTaXplLmhlaWdodCAtIDIuMGYgKiBEUkFH
X0xBQkVMX1JBRElVUyldOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNN
YWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAtIDIwLjBmLCBEUkFH
X0xBQkVMX1JBRElVUywgRFJBR19MQUJFTF9SQURJVVMgKyAyMC4wZiwgaW1hZ2VTaXplLmhlaWdo
dCAtIDIuMGYgKiBEUkFHX0xBQkVMX1JBRElVUyldOworICAgIFtwYXRoIGZpbGxdOworICAgIAor
ICAgIE5TQ29sb3IgKnRvcENvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MC4w
ZiBhbHBoYTowLjc1Zl07CisgICAgTlNDb2xvciAqYm90dG9tQ29sb3IgPSBbTlNDb2xvciBjb2xv
cldpdGhEZXZpY2VXaGl0ZToxLjBmIGFscGhhOjAuNWZdOworICAgIGlmIChkcmF3VVJMU3RyaW5n
KSB7CisgICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQorICAgICAgICAgICAgdXJsU3RyaW5nID0g
W1dlYlN0cmluZ1RydW5jYXRvciBjZW50ZXJUcnVuY2F0ZVN0cmluZzogdXJsU3RyaW5nIHRvV2lk
dGg6aW1hZ2VTaXplLndpZHRoIC0gKERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKSB3aXRoRm9u
dDp1cmxGb250XTsKKyAgICAgICAgCisgICAgICAgIFt1cmxTdHJpbmcgX3dlYl9kcmF3RG91Ymxl
ZEF0UG9pbnQ6TlNNYWtlUG9pbnQoRFJBR19MQUJFTF9CT1JERVJfWCwgRFJBR19MQUJFTF9CT1JE
RVJfWSAtIFt1cmxGb250IGRlc2NlbmRlcl0pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNvbG9yIGZvbnQ6dXJs
Rm9udF07CisgICAgfQorICAgIAorICAgIGlmIChjbGlwTGFiZWxTdHJpbmcpCisgICAgICAgIGxh
YmVsID0gW1dlYlN0cmluZ1RydW5jYXRvciByaWdodFRydW5jYXRlU3RyaW5nOiBsYWJlbCB0b1dp
ZHRoOmltYWdlU2l6ZS53aWR0aCAtIChEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZikgd2l0aEZv
bnQ6bGFiZWxGb250XTsKKyAgICBbbGFiZWwgX3dlYl9kcmF3RG91YmxlZEF0UG9pbnQ6TlNNYWtl
UG9pbnQgKERSQUdfTEFCRUxfQk9SREVSX1gsIGltYWdlU2l6ZS5oZWlnaHQgLSBEUkFHX0xBQkVM
X0JPUkRFUl9ZX09GRlNFVCAtIFtsYWJlbEZvbnQgcG9pbnRTaXplXSkKKyAgICAgICAgICAgICAg
ICAgICAgICB3aXRoVG9wQ29sb3I6dG9wQ29sb3IgYm90dG9tQ29sb3I6Ym90dG9tQ29sb3IgZm9u
dDpsYWJlbEZvbnRdOworICAgIAorICAgIFtkcmFnSW1hZ2UgdW5sb2NrRm9jdXNdOworICAgIAor
ICAgIHJldHVybiBkcmFnSW1hZ2U7Cit9CisKKy0gKE5TSW1hZ2UgKilfZHJhZ0ltYWdlRm9yTGlu
a0VsZW1lbnQ6KE5TRGljdGlvbmFyeSAqKWVsZW1lbnQKK3sKKyAgICBOU1VSTCAqbGlua1VSTCA9
IFtlbGVtZW50IG9iamVjdEZvcktleTogV2ViRWxlbWVudExpbmtVUkxLZXldOworICAgIAorICAg
IE5TU3RyaW5nICpsYWJlbCA9IFtlbGVtZW50IG9iamVjdEZvcktleTogV2ViRWxlbWVudExpbmtM
YWJlbEtleV07CisgICAgTlNTdHJpbmcgKnVybFN0cmluZyA9IFtsaW5rVVJMIF93ZWJfdXNlclZp
c2libGVTdHJpbmddOworICAgIHJldHVybiBbc2VsZiBfZHJhZ0ltYWdlRm9yVVJMOnVybFN0cmlu
ZyB3aXRoTGFiZWw6bGFiZWxdOworfQorCistICh2b2lkKXBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6
KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZTowXTsKK30KKworLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQg
KilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCit7CisgICAg
aWYgKFt0eXBlIGlzRXF1YWw6TlNSVEZEUGJvYXJkVHlwZV0gJiYgW1twYXN0ZWJvYXJkIHR5cGVz
XSBjb250YWluc09iamVjdDpXZWJBcmNoaXZlUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgV2ViQXJj
aGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXV07CisgICAgICAgIFtwYXN0ZWJv
YXJkIF93ZWJfd3JpdGVQcm9taXNlZFJURkRGcm9tQXJjaGl2ZTphcmNoaXZlIGNvbnRhaW5zSW1h
Z2U6W1twYXN0ZWJvYXJkIHR5cGVzXSBjb250YWluc09iamVjdDpOU1RJRkZQYm9hcmRUeXBlXV07
CisgICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOworICAgIH0gZWxzZSBpZiAoW3R5cGUgaXNFcXVh
bDpOU1RJRkZQYm9hcmRUeXBlXSAmJiBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0p
IHsKKyAgICAgICAgaWYgKEltYWdlKiBpbWFnZSA9IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRh
U291cmNlXS0+aW1hZ2UoKSkKKyAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6KE5TRGF0
YSAqKWltYWdlLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKSBmb3JUeXBlOk5TVElGRlBib2FyZFR5
cGVdOworICAgICAgICBbc2VsZiBzZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTowXTsKKyAg
ICB9Cit9CisKKy0gKHZvaWQpX2hhbmRsZUF1dG9zY3JvbGxGb3JNb3VzZURyYWdnZWQ6KE5TRXZl
bnQgKilldmVudCAKK3sgCisgICAgW3NlbGYgYXV0b3Njcm9sbDpldmVudF07IAorICAgIFtzZWxm
IF9zdGFydEF1dG9zY3JvbGxUaW1lcjpldmVudF07IAorfSAKKworLSAoV2ViUGx1Z2luQ29udHJv
bGxlciAqKV9wbHVnaW5Db250cm9sbGVyCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5wbHVnaW5D
b250cm9sbGVyOworfQorCistICh2b2lkKV9sYXlvdXRGb3JQcmludGluZworeworICAgIC8vIFNl
dCBwcmludGluZyBtb2RlIHRlbXBvcmFyaWx5IHNvIHdlIGNhbiBhZGp1c3QgdGhlIHNpemUgb2Yg
dGhlIHZpZXcuIFRoaXMgd2lsbCBhbGxvdworICAgIC8vIEFwcEtpdCdzIHBhZ2luYXRpb24gY29k
ZSB0byB1c2UgdGhlIGNvcnJlY3QgaGVpZ2h0IGZvciB0aGUgcGFnZSBjb250ZW50LiBMZWF2aW5n
IHByaW50aW5nCisgICAgLy8gbW9kZSBvbiBpbmRlZmluaXRlbHkgd291bGQgaW50ZXJmZXJlIHdp
dGggTWFpbCdzIHByaW50aW5nIG1lY2hhbmlzbSAoYXQgbGVhc3QpLCBzbyB3ZSBqdXN0CisgICAg
Ly8gdHVybiBpdCBvZmYgYWdhaW4gYWZ0ZXIgYWRqdXN0aW5nIHRoZSBzaXplLgorICAgIFtzZWxm
IF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlQW5kQWRqdXN0Vmlld1NpemVdOworICAgIFtz
ZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOworfQorCistICh2b2lkKV9zbWFy
dEluc2VydEZvclN0cmluZzooTlNTdHJpbmcgKilwYXN0ZVN0cmluZyByZXBsYWNpbmdSYW5nZToo
RE9NUmFuZ2UgKilyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6KE5TU3RyaW5nICoqKWJlZm9y
ZVN0cmluZyBhZnRlclN0cmluZzooTlNTdHJpbmcgKiopYWZ0ZXJTdHJpbmcKK3sKKyAgICBpZiAo
IXBhc3RlU3RyaW5nIHx8ICFyYW5nZVRvUmVwbGFjZSB8fCAhW1tzZWxmIF93ZWJWaWV3XSBzbWFy
dEluc2VydERlbGV0ZUVuYWJsZWRdKSB7CisgICAgICAgIGlmIChiZWZvcmVTdHJpbmcpCisgICAg
ICAgICAgICAqYmVmb3JlU3RyaW5nID0gbmlsOworICAgICAgICBpZiAoYWZ0ZXJTdHJpbmcpCisg
ICAgICAgICAgICAqYWZ0ZXJTdHJpbmcgPSBuaWw7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgW1tzZWxmIF9mcmFtZV0gX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOnBhc3RlU3RyaW5n
IHJlcGxhY2luZ1JhbmdlOnJhbmdlVG9SZXBsYWNlIGJlZm9yZVN0cmluZzpiZWZvcmVTdHJpbmcg
YWZ0ZXJTdHJpbmc6YWZ0ZXJTdHJpbmddOworfQorCistIChCT09MKV9jYW5TbWFydFJlcGxhY2VX
aXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAoreworICAgIHJldHVybiBb
W3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0gJiYgW1twYXN0ZWJvYXJk
IHR5cGVzXSBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07Cit9CisKKy0g
KHZvaWQpX3N0YXJ0QXV0b3Njcm9sbFRpbWVyOiAoTlNFdmVudCAqKXRyaWdnZXJFdmVudAorewor
ICAgIGlmIChfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVyID09IG5pbCkgeworICAgICAgICBfcHJp
dmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gW1tOU1RpbWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJ
bnRlcnZhbDpBVVRPU0NST0xMX0lOVEVSVkFMCisgICAgICAgICAgICB0YXJnZXQ6c2VsZiBzZWxl
Y3RvcjpAc2VsZWN0b3IoX2F1dG9zY3JvbGwpIHVzZXJJbmZvOm5pbCByZXBlYXRzOllFU10gcmV0
YWluXTsKKyAgICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBbdHJpZ2dl
ckV2ZW50IHJldGFpbl07CisgICAgfQorfQorCisvLyBGSVhNRTogX3NlbGVjdGlvblJlY3QgaXMg
ZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBzZWxlY3Rpb25SZWN0LCB3aGljaCBpcyBpbiBwcm90b2Nv
bCBXZWJEb2N1bWVudFNlbGVjdGlvbi4KKy8vIFdlIGNhbid0IHJlbW92ZSB0aGlzIHlldCBiZWNh
dXNlIGl0J3Mgc3RpbGwgaW4gdXNlIGJ5IE1haWwuCistIChOU1JlY3QpX3NlbGVjdGlvblJlY3QK
K3sKKyAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07Cit9CisKKy0gKHZvaWQpX3N0b3BB
dXRvc2Nyb2xsVGltZXIKK3sKKyAgICBOU1RpbWVyICp0aW1lciA9IF9wcml2YXRlLT5hdXRvc2Ny
b2xsVGltZXI7CisgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IG5pbDsKKyAgICBbX3By
aXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgcmVsZWFzZV07CisgICAgX3ByaXZhdGUtPmF1
dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7CisgICAgW3RpbWVyIGludmFsaWRhdGVdOworICAg
IFt0aW1lciByZWxlYXNlXTsKK30KKworLSAodm9pZClfYXV0b3Njcm9sbAoreworICAgIC8vIEd1
YXJhbnRlZSB0aGF0IHRoZSBhdXRvc2Nyb2xsIHRpbWVyIGlzIGludmFsaWRhdGVkLCBldmVuIGlm
IHdlIGRvbid0IHJlY2VpdmUKKyAgICAvLyBhIG1vdXNlIHVwIGV2ZW50LgorICAgIEJPT0wgaXNT
dGlsbERvd24gPSBDR0V2ZW50U291cmNlQnV0dG9uU3RhdGUoa0NHRXZlbnRTb3VyY2VTdGF0ZUNv
bWJpbmVkU2Vzc2lvblN0YXRlLCBrQ0dNb3VzZUJ1dHRvbkxlZnQpOyAgIAorICAgIGlmICghaXNT
dGlsbERvd24peworICAgICAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3Vz
ZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VEcmFnZ2VkCisgICAgICAgIGxvY2F0aW9uOltbc2Vs
ZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlvbl1dCisg
ICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tOU0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3Nd
CisgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0
ZV0KKyAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAg
ICAgICAgY29udGV4dDpbW05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAgICAgZXZl
bnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgW3NlbGYgbW91c2VEcmFn
Z2VkOmZha2VFdmVudF07Cit9CisKKy0gKEJPT0wpX2NhbkVkaXQKK3sKKyAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXQoKTsKK30KKworLSAoQk9PTClfY2FuRWRpdFJpY2hs
eQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJl
dHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdFJpY2hseSgpOwor
fQorCistIChCT09MKV9jYW5BbHRlckN1cnJlbnRTZWxlY3Rpb24KK3sKKyAgICByZXR1cm4gW3Nl
bGYgX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnRdICYmIFtzZWxmIF9pc0VkaXRhYmxlXTsK
K30KKworLSAoQk9PTClfaGFzU2VsZWN0aW9uCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5pc1JhbmdlKCk7Cit9CisKKy0gKEJPT0wpX2hhc1NlbGVjdGlvbk9ySW5zZXJ0
aW9uUG9pbnQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
KyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ2FyZXRP
clJhbmdlKCk7Cit9CisKKy0gKEJPT0wpX2hhc0luc2VydGlvblBvaW50Cit7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAm
JiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0KCk7Cit9CisKKy0gKEJPT0wpX2lzRWRp
dGFibGUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAg
ICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVk
aXRhYmxlKCk7Cit9CisKKy0gKEJPT0wpX3RyYW5zcGFyZW50QmFja2dyb3VuZAoreworICAgIHJl
dHVybiBfcHJpdmF0ZS0+dHJhbnNwYXJlbnRCYWNrZ3JvdW5kOworfQorCistICh2b2lkKV9zZXRU
cmFuc3BhcmVudEJhY2tncm91bmQ6KEJPT0wpZgoreworICAgIF9wcml2YXRlLT50cmFuc3BhcmVu
dEJhY2tncm91bmQgPSBmOworfQorCistIChOU0ltYWdlICopX3NlbGVjdGlvbkRyYWdnaW5nSW1h
Z2UKK3sKKyAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pIHsKKyAgICAgICAgTlNJbWFnZSAq
ZHJhZ0ltYWdlID0gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uSW1hZ2UoKTsKKyAgICAg
ICAgW2RyYWdJbWFnZSBfd2ViX2Rpc3NvbHZlVG9GcmFjdGlvbjpXZWJEcmFnSW1hZ2VBbHBoYV07
CisgICAgICAgIHJldHVybiBkcmFnSW1hZ2U7CisgICAgfQorICAgIHJldHVybiBuaWw7Cit9CisK
Ky0gKE5TUmVjdClfc2VsZWN0aW9uRHJhZ2dpbmdSZWN0Cit7CisgICAgLy8gTWFpbCBjdXJyZW50
bHkgY2FsbHMgdGhpcyBtZXRob2QuIFdlIGNhbiBlbGltaW5hdGUgaXQgd2hlbiBNYWlsIG5vIGxv
bmdlciBjYWxscyBpdC4KKyAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdF07Cit9CisKKy0g
KERPTU5vZGUgKilfaW5zZXJ0T3JkZXJlZExpc3QKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmluc2VydE9yZGVyZWRMaXN0KCkuZ2V0KCkpIDogbmlsOworfQorCistIChE
T01Ob2RlICopX2luc2VydFVub3JkZXJlZExpc3QKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmluc2VydFVub3JkZXJlZExpc3QoKS5nZXQoKSkgOiBuaWw7Cit9CisKKy0g
KEJPT0wpX2NhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCit7CisgICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5jYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOworfQorCist
IChCT09MKV9jYW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAoreworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKK30KKwor
LSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAoreworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBr
aXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKS5nZXQo
KSkgOiBuaWw7Cit9CisKKy0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxP
cmRlcmVkCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbmNyZWFzZVNl
bGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQoKS5nZXQoKSkgOiBuaWw7Cit9CisKKy0gKERPTU5vZGUg
KilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQKK3sKKyAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0
KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVk
KCkuZ2V0KCkpIDogbmlsOworfQorCistICh2b2lkKV9kZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlm
IChjb3JlRnJhbWUpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmRlY3JlYXNlU2VsZWN0
aW9uTGlzdExldmVsKCk7Cit9CisKKy0gKHZvaWQpX3NldEhpZ2hsaWdodGVyOihpZDxXZWJIVE1M
SGlnaGxpZ2h0ZXI+KWhpZ2hsaWdodGVyIG9mVHlwZTooTlNTdHJpbmcqKXR5cGUKK3sKKyAgICBp
ZiAoIV9wcml2YXRlLT5oaWdobGlnaHRlcnMpCisgICAgICAgIF9wcml2YXRlLT5oaWdobGlnaHRl
cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgIFtfcHJpdmF0ZS0+
aGlnaGxpZ2h0ZXJzIHNldE9iamVjdDpoaWdobGlnaHRlciBmb3JLZXk6dHlwZV07Cit9CisKKy0g
KHZvaWQpX3JlbW92ZUhpZ2hsaWdodGVyT2ZUeXBlOihOU1N0cmluZyopdHlwZQoreworICAgIFtf
cHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIHJlbW92ZU9iamVjdEZvcktleTp0eXBlXTsKK30KKworLSAo
dm9pZClfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlCit7CisgICAgW3NlbGYgX2NhbmNlbFVw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyXTsKKworICAgIFtbc2VsZiBfd2ViVmlld10g
X3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOltzZWxmIF9mcmFtZV1dOworfQor
CistICh2b2lkKV93cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZAoreworICAgIEFTU0VSVChbc2VsZiBfaGFzU2VsZWN0aW9uXSk7CisgICAgTlNBcnJh
eSAqdHlwZXMgPSBbc2VsZiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb25dOworCisgICAgLy8g
RG9uJ3Qgd3JpdGUgUlRGRCB0byB0aGUgcGFzdGVib2FyZCB3aGVuIHRoZSBjb3BpZWQgYXR0cmli
dXRlZCBzdHJpbmcgaGFzIG5vIGF0dGFjaG1lbnRzLgorICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107CisgICAg
TlNNdXRhYmxlQXJyYXkgKm11dGFibGVUeXBlcyA9IG5pbDsKKyAgICBpZiAoIVthdHRyaWJ1dGVk
U3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKSB7CisgICAgICAgIG11dGFibGVUeXBlcyA9IFt0
eXBlcyBtdXRhYmxlQ29weV07CisgICAgICAgIFttdXRhYmxlVHlwZXMgcmVtb3ZlT2JqZWN0Ok5T
UlRGRFBib2FyZFR5cGVdOworICAgICAgICB0eXBlcyA9IG11dGFibGVUeXBlczsKKyAgICB9CisK
KyAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3NlbGYgX3RvcEhUTUxW
aWV3XV07CisgICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0eXBl
cyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOmF0dHJpYnV0
ZWRTdHJpbmddOworICAgIFttdXRhYmxlVHlwZXMgcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpY2xv
c2UKK3sKKyAgICAvLyBDaGVjayBmb3IgYSBuaWwgX3ByaXZhdGUgaGVyZSBpbiBjYXNlIHdlIHdl
cmUgY3JlYXRlZCB3aXRoIGluaXRXaXRoQ29kZXIuIEluIHRoYXQgY2FzZSwgdGhlIFdlYlZpZXcg
aXMganVzdCB0aHJvd2luZworICAgIC8vIG91dCB0aGUgYXJjaGl2ZWQgV2ViSFRNTFZpZXcgYW5k
IHJlY3JlYXRpbmcgYSBuZXcgb25lIGlmIG5lZWRlZC4gU28gY2xvc2UgZG9lc24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nIGluIHRoYXQgY2FzZS4KKyAgICBpZiAoIV9wcml2YXRlIHx8IF9wcml2YXRl
LT5jbG9zZWQpCisgICAgICAgIHJldHVybjsKKworICAgIF9wcml2YXRlLT5jbG9zZWQgPSBZRVM7
CisKKyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOworICAgIFtzZWxmIF9j
YW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07CisgICAgW3NlbGYgX2NsZWFy
TGFzdEhpdFZpZXdJZlNlbGZdOworICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJV
bmNvbmRpdGlvbmFsbHldOworICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNlcnZlcnNdOworICAg
IFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOworICAgIFtfcHJpdmF0ZS0+cGx1Z2lu
Q29udHJvbGxlciBkZXN0cm95QWxsUGx1Z2luc107CisgICAgW19wcml2YXRlLT5wbHVnaW5Db250
cm9sbGVyIHNldERhdGFTb3VyY2U6bmlsXTsKKyAgICAvLyByZW1vdmUgdG9vbHRpcHMgYmVmb3Jl
IGNsZWFyaW5nIF9wcml2YXRlIHNvIHJlbW92ZVRyYWNraW5nUmVjdDogd2lsbCB3b3JrIGNvcnJl
Y3RseQorICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpCisgICAg
ICAgIFtbc2VsZiBfd2ViVmlld10gX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJh
bWU6W3NlbGYgX2ZyYW1lXV07CisjZW5kaWYKKworICAgIFtfcHJpdmF0ZSBjbGVhcl07CisKKyAg
ICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOworICAgIGlmIChwYWdlKQorICAg
ICAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zZXREcmFnZ2luZ0ltYWdlVVJMKEtVUkwoKSk7
Cit9CisKKy0gKEJPT0wpX2hhc0hUTUxEb2N1bWVudAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1
cm4gTk87CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwor
ICAgIHJldHVybiBkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKTsKK30KKwor
LSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6
KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOihOU1N0cmluZyAqKXBib2FyZFR5cGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OihET01S
YW5nZSAqKWNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlcworeworICAgIGlmIChwYm9h
cmRUeXBlID09IFdlYkFyY2hpdmVQYm9hcmRUeXBlKSB7CisgICAgICAgIFdlYkFyY2hpdmUgKmFy
Y2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRh
Rm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOworICAgICAgICBpZiAoc3VicmVzb3VyY2Vz
KQorICAgICAgICAgICAgKnN1YnJlc291cmNlcyA9IFthcmNoaXZlIHN1YnJlc291cmNlc107Cisg
ICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNl
XSBfZG9jdW1lbnRGcmFnbWVudFdpdGhBcmNoaXZlOmFyY2hpdmVdOworICAgICAgICBbYXJjaGl2
ZSByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKyAgICBpZiAocGJv
YXJkVHlwZSA9PSBOU0ZpbGVuYW1lc1Bib2FyZFR5cGUpCisgICAgICAgIHJldHVybiBbc2VsZiBf
ZG9jdW1lbnRGcmFnbWVudFdpdGhQYXRoczpbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JUeXBl
Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV1dOworICAgICAgICAKKyAgICBpZiAocGJvYXJkVHlwZSA9
PSBOU0hUTUxQYm9hcmRUeXBlKSB7CisgICAgICAgIE5TU3RyaW5nICpIVE1MU3RyaW5nID0gW3Bh
c3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlXTsKKyAgICAgICAgLy8gVGhp
cyBpcyBhIGhhY2sgdG8gbWFrZSBNaWNyb3NvZnQncyBIVE1MIHBhc3RlYm9hcmQgZGF0YSB3b3Jr
LiBTZWUgMzc3ODc4NS4KKyAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGhhc1ByZWZpeDpAIlZlcnNp
b246Il0pIHsKKyAgICAgICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBbSFRNTFN0cmluZyByYW5nZU9m
U3RyaW5nOkAiPGh0bWwiIG9wdGlvbnM6TlNDYXNlSW5zZW5zaXRpdmVTZWFyY2hdOworICAgICAg
ICAgICAgaWYgKHJhbmdlLmxvY2F0aW9uICE9IE5TTm90Rm91bmQpCisgICAgICAgICAgICAgICAg
SFRNTFN0cmluZyA9IFtIVE1MU3RyaW5nIHN1YnN0cmluZ0Zyb21JbmRleDpyYW5nZS5sb2NhdGlv
bl07CisgICAgICAgIH0KKyAgICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gPT0gMCkKKyAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICByZXR1cm4gW1tzZWxmIF9m
cmFtZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOkhUTUxTdHJpbmcgYmFzZVVS
TFN0cmluZzpuaWxdOworICAgIH0KKworICAgIC8vIFRoZSBfaGFzSFRNTERvY3VtZW50IGNsYXVz
ZSBoZXJlIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gTlNBdHRyaWJ1dGVkU3RyaW5nOiBS
YWRhciA1MDUyMzY5LgorICAgIC8vIElmIHdlIGNhbGwgX2RvY3VtZW50RnJvbVJhbmdlIG9uIGFu
IFhNTCBkb2N1bWVudCB3ZSdsbCBnZXQgInNldElubmVySFRNTDogbWV0aG9kIG5vdCBmb3VuZCIu
CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgYnVnIDUwNTIzNjkgaXMgZml4ZWQuCisg
ICAgaWYgKFtzZWxmIF9oYXNIVE1MRG9jdW1lbnRdICYmIHBib2FyZFR5cGUgPT0gTlNSVEZQYm9h
cmRUeXBlIHx8IHBib2FyZFR5cGUgPT0gTlNSVEZEUGJvYXJkVHlwZSkgeworICAgICAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IG5pbDsKKyAgICAgICAgaWYgKHBib2FyZFR5cGUgPT0g
TlNSVEZEUGJvYXJkVHlwZSkKKyAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZEUGJv
YXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdOworICAgICAgICBpZiAoc3RyaW5nID09
IG5pbCkKKyAgICAgICAgICAgIHN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFJURjpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURlBib2FyZFR5cGVdIGRvY3Vt
ZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICAgICAgaWYgKHN0cmluZyA9PSBuaWwpCisgICAgICAg
ICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgCisgICAgICAgIE5TRGljdGlvbmFyeSAqZG9j
dW1lbnRBdHRyaWJ1dGVzID0gW1tOU0RpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0Fu
ZEtleXM6CisgICAgICAgICAgICBbW3NlbGYgY2xhc3NdIF9leGNsdWRlZEVsZW1lbnRzRm9yQXR0
cmlidXRlZFN0cmluZ0NvbnZlcnNpb25dLCBOU0V4Y2x1ZGVkRWxlbWVudHNEb2N1bWVudEF0dHJp
YnV0ZSwKKyAgICAgICAgICAgIHNlbGYsIEAiV2ViUmVzb3VyY2VIYW5kbGVyIiwgbmlsXTsKKyAg
ICAgICAgTlNBcnJheSAqczsKKyAgICAgICAgCisgICAgICAgIEJPT0wgd2FzRGVmZXJyaW5nQ2Fs
bGJhY2tzID0gW1tzZWxmIF93ZWJWaWV3XSBkZWZlcnNDYWxsYmFja3NdOworICAgICAgICBpZiAo
IXdhc0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAgICAgIFtbc2VsZiBfd2ViVmlld10gc2V0
RGVmZXJzQ2FsbGJhY2tzOllFU107CisgICAgICAgICAgICAKKyAgICAgICAgRE9NRG9jdW1lbnRG
cmFnbWVudCAqZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVudEZyb21SYW5nZTpOU01ha2VSYW5n
ZSgwLCBbc3RyaW5nIGxlbmd0aF0pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50Oltbc2VsZiBfZnJhbWVdIERPTURvY3Vt
ZW50XSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50QXR0cmlidXRlczpkb2N1bWVudEF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczomc107CisgICAg
ICAgIGlmIChzdWJyZXNvdXJjZXMpCisgICAgICAgICAgICAqc3VicmVzb3VyY2VzID0gczsKKyAg
ICAgICAgCisgICAgICAgIE5TRW51bWVyYXRvciAqZSA9IFtzIG9iamVjdEVudW1lcmF0b3JdOwor
ICAgICAgICBXZWJSZXNvdXJjZSAqcjsKKyAgICAgICAgd2hpbGUgKChyID0gW2UgbmV4dE9iamVj
dF0pKQorICAgICAgICAgICAgW1tzZWxmIF9kYXRhU291cmNlXSBhZGRTdWJyZXNvdXJjZTpyXTsK
KyAgICAgICAgCisgICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJhY2tzKQorICAgICAgICAg
ICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6Tk9dOworICAgICAgICAKKyAg
ICAgICAgW2RvY3VtZW50QXR0cmlidXRlcyByZWxlYXNlXTsKKyAgICAgICAgW3N0cmluZyByZWxl
YXNlXTsKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIH0KKyAgICBpZiAocGJvYXJkVHlw
ZSA9PSBOU1RJRkZQYm9hcmRUeXBlKSB7CisgICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9
IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlw
ZTpOU1RJRkZQYm9hcmRUeXBlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChA
ImltYWdlLnRpZmYiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS90aWZmIiAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFt
ZU5hbWU6bmlsXTsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3Nl
bGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3Vy
Y2VdOworICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFnbWVu
dDsKKyAgICB9CisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNQREZQYm9hcmRUeXBlKSB7CisgICAg
ICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRo
RGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BERlBib2FyZFR5cGVdCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1
bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiYXBwbGljYXRpb24ucGRmIikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAi
YXBwbGljYXRpb24vcGRmIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKKyAgICAgICAg
RE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1
bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOworICAgICAgICBbcmVzb3Vy
Y2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisjaWYgZGVmaW5l
ZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAg
IGlmIChwYm9hcmRUeXBlID09IE5TUElDVFBib2FyZFR5cGUpIHsKKyAgICAgICAgV2ViUmVzb3Vy
Y2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOk5TUElDVFBib2FyZFR5cGVdCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRo
UmVsYXRpdmVQYXJ0KEAiaW1hZ2UucGljdCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImltYWdlL3BpY3QiIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGlu
Z05hbWU6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpm
cmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VS
ZXNvdXJjZTpyZXNvdXJjZV07CisgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAgICAgICAg
cmV0dXJuIGZyYWdtZW50OworICAgIH0KKyNlbmRpZgorICAgIC8vIE9ubHkgMTAuNSBhbmQgaGln
aGVyIHN1cHBvcnQgc2V0dGluZyBhbmQgcmV0cmlldmluZyBwYXN0ZWJvYXJkIHR5cGVzIHdpdGgg
VVRJcywgYnV0IHdlIGRvbid0IGJlbGlldmUKKyAgICAvLyB0aGF0IGFueSBhcHBsaWNhdGlvbnMg
b24gVGlnZXIgcHV0IHR5cGVzIGZvciB3aGljaCB3ZSBvbmx5IGhhdmUgYSBVVEksIGxpa2UgUE5H
LCBvbiB0aGUgcGFzdGVib2FyZC4KKyAgICBpZiAoW3Bib2FyZFR5cGUgaXNFcXVhbFRvU3RyaW5n
OihOU1N0cmluZyopa1VUVHlwZVBOR10pIHsKKyAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNl
ID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JU
eXBlOihOU1N0cmluZyopa1VUVHlwZVBOR10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2
ZVBhcnQoQCJpbWFnZS5wbmciKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS9wbmciIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmls
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZyYW1lTmFtZTpuaWxdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9
IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpy
ZXNvdXJjZV07CisgICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIGZy
YWdtZW50OworICAgIH0KKyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1VSTFBib2FyZFR5cGUpIHsK
KyAgICAgICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJk
XTsKKyAgICAgICAgRE9NRG9jdW1lbnQqIGRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9j
dW1lbnRdOworICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOworICAgICAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgRE9NSFRNTEFuY2hvckVsZW1lbnQg
KmFuY2hvciA9IChET01IVE1MQW5jaG9yRWxlbWVudCAqKVtkb2N1bWVudCBjcmVhdGVFbGVtZW50
OkAiYSJdOworICAgICAgICBOU1N0cmluZyAqVVJMU3RyaW5nID0gW1VSTCBfd2ViX29yaWdpbmFs
RGF0YUFzU3RyaW5nXTsgLy8gT3JpZ2luYWwgZGF0YSBpcyBBU0NJSS1vbmx5LCBzbyB0aGVyZSBp
cyBubyBuZWVkIHRvIHByZWNvbXBvc2UuCisgICAgICAgIGlmIChbVVJMU3RyaW5nIGxlbmd0aF0g
PT0gMCkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIE5TU3RyaW5nICpVUkxUaXRs
ZVN0cmluZyA9IFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOldlYlVSTE5hbWVQYm9hcmRUeXBl
XSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKKyAgICAgICAgRE9NVGV4
dCAqdGV4dCA9IFtkb2N1bWVudCBjcmVhdGVUZXh0Tm9kZTpVUkxUaXRsZVN0cmluZ107CisgICAg
ICAgIFthbmNob3Igc2V0SHJlZjpVUkxTdHJpbmddOworICAgICAgICBbYW5jaG9yIGFwcGVuZENo
aWxkOnRleHRdOworICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtkb2N1
bWVudCBjcmVhdGVEb2N1bWVudEZyYWdtZW50XTsKKyAgICAgICAgW2ZyYWdtZW50IGFwcGVuZENo
aWxkOmFuY2hvcl07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisgICAgaWYgKHBi
b2FyZFR5cGUgPT0gTlNTdHJpbmdQYm9hcmRUeXBlKQorICAgICAgICByZXR1cm4ga2l0KGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoY29yZShjb250ZXh0KSwgW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5
cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBw
aW5nXSkuZ2V0KCkpOworICAgIHJldHVybiBuaWw7Cit9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkgCistICh2b2lkKV9wYXVzZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBsdWdp
bnMgCit7IAorICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3NlbGYgc3Vidmlld3NdOyAKKyAgICB1
bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdzIGNvdW50XTsgCisgICAgdW5zaWdu
ZWQgaW50IHN1YnZpZXdJbmRleDsgCisgICAgCisgICAgZm9yIChzdWJ2aWV3SW5kZXggPSAwOyBz
dWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJbmRleCsrKSB7IAorICAgICAgICBO
U1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpzdWJ2aWV3SW5kZXhdOyAK
KyAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdp
blZpZXcgY2xhc3NdXSkgCisgICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcg
KilzdWJ2aWV3IHN0b3BUaW1lcnNdOworICAgIH0gCit9IAorI2VuZGlmIAorCisjaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpIAorLSAodm9pZClfcmVzdW1lTnVsbEV2ZW50c0ZvckFsbE5l
dHNjYXBlUGx1Z2lucyAKK3sgCisgICAgTlNBcnJheSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2aWV3
c107IAorICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3Q291bnQgPSBbc3Vidmlld3MgY291bnRdOyAK
KyAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4OyAKKyAgICAKKyAgICBmb3IgKHN1YnZpZXdJ
bmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZpZXdDb3VudDsgc3Vidmlld0luZGV4KyspIHsg
CisgICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtzdWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1YnZp
ZXdJbmRleF07IAorICAgICAgICBpZiAoW3N1YnZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5l
dHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKKyAgICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBl
UGx1Z2luVmlldyAqKXN1YnZpZXcgcmVzdGFydFRpbWVyc107IAorICAgIH0gCit9IAorI2VuZGlm
IAorCistIChCT09MKV9pc1VzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZworeworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICByZXR1cm4gX3ByaXZhdGUtPmxheWVySG9zdGlu
Z1ZpZXcgIT0gbmlsOworI2Vsc2UKKyAgICByZXR1cm4gTk87CisjZW5kaWYKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gTlNWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKworLSAo
dm9pZClfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OihOU011dGFibGVBcnJh
eSAqKWFycmF5Cit7CisgICAgdW5zaWduZWQgY291bnQgPSBbX3N1YnZpZXdzIGNvdW50XTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBOU1ZpZXcg
KmNoaWxkID0gW19zdWJ2aWV3cyBvYmplY3RBdEluZGV4OmldOworICAgICAgICBpZiAoW2NoaWxk
IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pCisgICAgICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OmNoaWxkXTsKKyAgICAgICAgW2NoaWxkIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhU
TUxWaWV3c1RvQXJyYXk6YXJyYXldOworICAgIH0KK30KKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gTlNNdXRhYmxlRGljdGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCisKKy0gKHZv
aWQpX3dlYl9zZXRPYmplY3RJZk5vdE5pbDooaWQpb2JqZWN0IGZvcktleTooaWQpa2V5Cit7Cisg
ICAgaWYgKG9iamVjdCA9PSBuaWwpIHsKKyAgICAgICAgW3NlbGYgcmVtb3ZlT2JqZWN0Rm9yS2V5
OmtleV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgW3NlbGYgc2V0T2JqZWN0Om9iamVjdCBmb3JL
ZXk6a2V5XTsKKyAgICB9Cit9CisKK0BlbmQKKworQGludGVyZmFjZSBOU1N0cmluZyAoV2ViSFRN
TFZpZXdGaWxlSW50ZXJuYWwpCistIChCT09MKW1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50OihO
U1N0cmluZyAqKWV4dGVuc2lvbjsKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TU3RyaW5nIChX
ZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKworLSAoQk9PTCltYXRjaGVzRXh0ZW5zaW9uRXF1aXZh
bGVudDooTlNTdHJpbmcgKilleHRlbnNpb24KK3sKKyAgICBpZiAoW3NlbGYgaGFzU3VmZml4OmV4
dGVuc2lvbl0pCisgICAgICAgIHJldHVybiBZRVM7CisgICAgZWxzZSBpZiAoW2V4dGVuc2lvbiBp
c0VxdWFsVG9TdHJpbmc6QCJqcGVnIl0gJiYgW3NlbGYgaGFzU3VmZml4OkAianBnIl0pCisgICAg
ICAgIHJldHVybiBZRVM7CisgICAgcmV0dXJuIE5POworfQorCitAZW5kCisKKyNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgorCisvLyBUaGUgZm9sbG93aW5nIGlzIGEgd29ya2Fyb3VuZCBmb3IKKy8v
IDxyZGFyOi8vcHJvYmxlbS8zNDI5NjMxPiB3aW5kb3cgc3RvcHMgZ2V0dGluZyBtb3VzZSBtb3Zl
ZCBldmVudHMgYWZ0ZXIgZmlyc3QgdG9vbHRpcCBhcHBlYXJzCisvLyBUaGUgdHJpY2sgaXMgdG8g
ZGVmaW5lIGEgY2F0ZWdvcnkgb24gTlNUb29sVGlwUGFuZWwgdGhhdCBpbXBsZW1lbnRzIHNldEFj
Y2VwdHNNb3VzZU1vdmVkRXZlbnRzOi4KKy8vIFNpbmNlIHRoZSBjYXRlZ29yeSB3aWxsIGJlIHNl
YXJjaGVkIGJlZm9yZSB0aGUgcmVhbCBjbGFzcywgd2UnbGwgcHJldmVudCB0aGUgZmxhZyBmcm9t
IGJlaW5nCisvLyBzZXQgb24gdGhlIHRvb2wgdGlwIHBhbmVsLgorCitAaW50ZXJmYWNlIE5TVG9v
bFRpcFBhbmVsIDogTlNQYW5lbAorQGVuZAorCitAaW50ZXJmYWNlIE5TVG9vbFRpcFBhbmVsIChX
ZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TVG9vbFRp
cFBhbmVsIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKworLSAodm9pZClzZXRBY2NlcHRzTW91
c2VNb3ZlZEV2ZW50czooQk9PTClmbGFnCit7CisgICAgLy8gRG8gbm90aGluZywgcHJldmVudGlu
ZyB0aGUgdG9vbCB0aXAgcGFuZWwgZnJvbSB0cnlpbmcgdG8gYWNjZXB0IG1vdXNlLW1vdmVkIGV2
ZW50cy4KK30KKworQGVuZAorCisjZW5kaWYKKworQGludGVyZmFjZSBOU0FycmF5IChXZWJIVE1M
VmlldykKKy0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClz
ZWxlY3RvciB3aXRoT2JqZWN0OihpZClvYmplY3Q7CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBX
ZWJIVE1MVmlldworCisrICh2b2lkKWluaXRpYWxpemUKK3sKKyAgICBbTlNBcHAgcmVnaXN0ZXJT
ZXJ2aWNlc01lbnVTZW5kVHlwZXM6W1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5
cGVzXSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZXM6W1tzZWxmIGNs
YXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc11dOworICAgIEpTQzo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIFdlYkNvcmVPYmpDRmlu
YWxpemVPbk1haW5UaHJlYWQoc2VsZik7CisjZW5kaWYKK30KKworLSAoaWQpaW5pdFdpdGhGcmFt
ZTooTlNSZWN0KWZyYW1lCit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1l
XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgW3NlbGYg
c2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVOb25lXTsKKyAgICAKKyAgICAvLyBNYWtl
IGFsbCBkcmF3aW5nIGdvIHRocm91Z2ggdXMgaW5zdGVhZCBvZiBzdWJ2aWV3cy4KKyAgICBbc2Vs
ZiBfc2V0RHJhd3NPd25EZXNjZW5kYW50czpZRVNdOworICAgIAorICAgIF9wcml2YXRlID0gW1tX
ZWJIVE1MVmlld1ByaXZhdGUgYWxsb2NdIGluaXRdOworCisgICAgX3ByaXZhdGUtPnBsdWdpbkNv
bnRyb2xsZXIgPSBbW1dlYlBsdWdpbkNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoRG9jdW1lbnRW
aWV3OnNlbGZdOworICAgIAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MK
K3sKKyAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dl
YkhUTUxWaWV3IGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGNh
bid0IGFzc2VydCB0aGF0IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGJlY2F1c2UKKyAg
ICAvLyB0aGlzIHZpZXcgY2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldywgZXZlbiB0
aG91Z2gKKyAgICAvLyBpdCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNsb3NlIGlmIG5lZWRl
ZC4KKyAgICBbc2VsZiBjbG9zZV07CisgICAgW19wcml2YXRlIHJlbGVhc2VdOworICAgIF9wcml2
YXRlID0gbmlsOworICAgIFtzdXBlciBkZWFsbG9jXTsKK30KKworLSAodm9pZClmaW5hbGl6ZQor
eworICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOworICAgIC8vIFdlIGNhbid0IGFzc2VydCB0aGF0
IGNsb3NlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGJlY2F1c2UKKyAgICAvLyB0aGlzIHZpZXcg
Y2FuIGJlIHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldywgZXZlbiB0aG91Z2gKKyAgICAvLyBp
dCBjb3VsZCBiZSBuZWVkZWQgbGF0ZXIsIHNvIGNsb3NlIGlmIG5lZWRlZC4KKyAgICBbc2VsZiBj
bG9zZV07CisgICAgW3N1cGVyIGZpbmFsaXplXTsKK30KKworLy8gUmV0dXJucyBZRVMgaWYgdGhl
IGRlbGVnYXRlIHJldHVybnMgWUVTIChzbyB3ZSBzaG91bGQgZG8gbm8gbW9yZSB3b3JrKS4KKy0g
KEJPT0wpY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOihTRUwpc2VsZWN0
b3IKK3sKKyAgICBCT09MIGNhbGxlckFscmVhZHlDYWxsZWREZWxlZ2F0ZSA9IF9wcml2YXRlLT5z
ZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPT0gc2VsZWN0b3I7CisgICAgX3ByaXZhdGUt
PnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IDA7CisgICAgaWYgKGNhbGxlckFscmVh
ZHlDYWxsZWREZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIFdlYlZpZXcgKndlYlZp
ZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVn
YXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rv
cl07Cit9CisKK3N0YXRpYyBTdHJpbmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0
b3IpCit7CisgICAgLy8gQ2hhbmdlIGEgZmV3IGNvbW1hbmQgbmFtZXMgaW50byBvbmVzIHN1cHBv
cnRlZCBieSBXZWJDb3JlOjpFZGl0b3IuCisgICAgLy8gSWYgdGhpcyBsaXN0IGdldHMgdG9vIGxv
bmcgd2UgbWlnaHQgZGVjaWRlIHdlIG5lZWQgdG8gdXNlIGEgaGFzaCB0YWJsZS4KKyAgICBpZiAo
c2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcjopIHx8IHNlbGVj
dG9yID09IEBzZWxlY3RvcihpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcjopKQorICAg
ICAgICByZXR1cm4gIkluc2VydE5ld2xpbmUiOworICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0
b3IoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcjopKQorICAgICAgICByZXR1cm4gIkluc2Vy
dFRhYiI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihwYWdlRG93bjopKQorICAgICAg
ICByZXR1cm4gIk1vdmVQYWdlRG93biI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rvcihw
YWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbjopKQorICAgICAgICByZXR1cm4gIk1vdmVQYWdlRG93
bkFuZE1vZGlmeVNlbGVjdGlvbiI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihwYWdl
VXA6KSkKKyAgICAgICAgcmV0dXJuICJNb3ZlUGFnZVVwIjsKKyAgICBpZiAoc2VsZWN0b3IgPT0g
QHNlbGVjdG9yKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjopKQorICAgICAgICByZXR1cm4gIk1v
dmVQYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb24iOworCisgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGlu
ZyBjb2xvbi4KKyAgICBjb25zdCBjaGFyKiBzZWxlY3Rvck5hbWUgPSBzZWxfZ2V0TmFtZShzZWxl
Y3Rvcik7CisgICAgc2l6ZV90IHNlbGVjdG9yTmFtZUxlbmd0aCA9IHN0cmxlbihzZWxlY3Rvck5h
bWUpOworICAgIGlmIChzZWxlY3Rvck5hbWVMZW5ndGggPCAyIHx8IHNlbGVjdG9yTmFtZVtzZWxl
Y3Rvck5hbWVMZW5ndGggLSAxXSAhPSAnOicpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gU3RyaW5nKHNlbGVjdG9yTmFtZSwgc2VsZWN0b3JOYW1lTGVuZ3RoIC0gMSk7Cit9
CisKKy0gKEVkaXRvcjo6Q29tbWFuZCljb3JlQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3Rv
cgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlm
ICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gRWRpdG9yOjpDb21tYW5kKCk7CisgICAgcmV0
dXJuIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWVGb3JTZWxlY3Rvcihz
ZWxlY3RvcikpOworfQorCistIChFZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1hbmRCeU5hbWU6KGNv
bnN0IGNoYXIqKW5hbWUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIEVkaXRvcjo6Q29tbWFu
ZCgpOworICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWUpOworfQor
CistICh2b2lkKWV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3Rvcgorewor
ICAgIGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6c2Vs
ZWN0b3JdKQorICAgICAgICByZXR1cm47CisgICAgW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9y
OnNlbGVjdG9yXS5leGVjdXRlKCk7Cit9CisKKy0gKHZvaWQpZXhlY3V0ZUNvcmVDb21tYW5kQnlO
YW1lOihjb25zdCBjaGFyKiluYW1lCit7CisgICAgW3NlbGYgY29yZUNvbW1hbmRCeU5hbWU6bmFt
ZV0uZXhlY3V0ZSgpOworfQorCisvLyBUaGVzZSBjb21tYW5kcyBhcmUgZm9yd2FyZGVkIHRvIHRo
ZSBFZGl0b3Igb2JqZWN0IGluIFdlYkNvcmUuCisvLyBJZGVhbGx5IHdlJ2QgZG8gdGhpcyBmb3Ig
YWxsIGVkaXRpbmcgY29tbWFuZHM7IG1vcmUgb2YgdGhlIGNvZGUKKy8vIHNob3VsZCBiZSBtb3Zl
ZCBmcm9tIGhlcmUgdG8gdGhlcmUsIGFuZCBtb3JlIGNvbW1hbmRzIHNob3VsZCBiZQorLy8gYWRk
ZWQgdG8gdGhpcyBsaXN0LgorCisvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIHNldCB0aGluZ3Mg
dXAgc28gdGhhdCBhbGwgdGhlc2Ugc2hhcmUgYSBzaW5nbGUgbWV0aG9kIGltcGxlbWVudGF0aW9u
IGZ1bmN0aW9uLgorLy8gVGhlIGZ1bmN0aW9ucyBhcmUgaWRlbnRpY2FsLgorCisjZGVmaW5lIFdF
QkNPUkVfQ09NTUFORChjb21tYW5kKSAtICh2b2lkKWNvbW1hbmQ6KGlkKXNlbmRlciB7IFtzZWxm
IGV4ZWN1dGVDb3JlQ29tbWFuZEJ5U2VsZWN0b3I6X2NtZF07IH0KKworV0VCQ09SRV9DT01NQU5E
KGFsaWduQ2VudGVyKQorV0VCQ09SRV9DT01NQU5EKGFsaWduSnVzdGlmaWVkKQorV0VCQ09SRV9D
T01NQU5EKGFsaWduTGVmdCkKK1dFQkNPUkVfQ09NTUFORChhbGlnblJpZ2h0KQorV0VCQ09SRV9D
T01NQU5EKGNvcHkpCitXRUJDT1JFX0NPTU1BTkQoY3V0KQorV0VCQ09SRV9DT01NQU5EKGRlbGV0
ZSkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVCYWNrd2FyZCkKK1dFQkNPUkVfQ09NTUFORChkZWxl
dGVCYWNrd2FyZEJ5RGVjb21wb3NpbmdQcmV2aW91c0NoYXJhY3RlcikKK1dFQkNPUkVfQ09NTUFO
RChkZWxldGVGb3J3YXJkKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVnaW5uaW5nT2ZMaW5l
KQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpCitXRUJDT1JF
X0NPTU1BTkQoZGVsZXRlVG9FbmRPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9FbmRP
ZlBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb01hcmspCitXRUJDT1JFX0NPTU1B
TkQoZGVsZXRlV29yZEJhY2t3YXJkKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVdvcmRGb3J3YXJk
KQorV0VCQ09SRV9DT01NQU5EKGlnbm9yZVNwZWxsaW5nKQorV0VCQ09SRV9DT01NQU5EKGluZGVu
dCkKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRCYWNrdGFiKQorV0VCQ09SRV9DT01NQU5EKGluc2Vy
dExpbmVCcmVhaykKK1dFQkNPUkVfQ09NTUFORChpbnNlcnROZXdsaW5lKQorV0VCQ09SRV9DT01N
QU5EKGluc2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yKQorV0VCQ09SRV9DT01NQU5EKGlu
c2VydFBhcmFncmFwaFNlcGFyYXRvcikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRUYWIpCitXRUJD
T1JFX0NPTU1BTkQoaW5zZXJ0VGFiSWdub3JpbmdGaWVsZEVkaXRvcikKK1dFQkNPUkVfQ09NTUFO
RChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCkKK1dFQkNPUkVfQ09NTUFORCht
YWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQorV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0
V3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVCYWNrd2Fy
ZCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJD
T1JFX0NPTU1BTkQobW92ZURvd24pCitXRUJDT1JFX0NPTU1BTkQobW92ZURvd25BbmRNb2RpZnlT
ZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZUZvcndhcmQpCitXRUJDT1JFX0NPTU1BTkQo
bW92ZUZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZUxlZnQp
CitXRUJDT1JFX0NPTU1BTkQobW92ZUxlZnRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NP
TU1BTkQobW92ZVBhcmFncmFwaEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9D
T01NQU5EKG1vdmVQYXJhZ3JhcGhGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9D
T01NQU5EKG1vdmVSaWdodCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlUmlnaHRBbmRNb2RpZnlTZWxl
Y3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudCkKK1dFQkNP
UkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKQor
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGluZSkKK1dFQkNPUkVfQ09NTUFORCht
b3ZlVG9CZWdpbm5pbmdPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQo
bW92ZVRvQmVnaW5uaW5nT2ZQYXJhZ3JhcGgpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5u
aW5nT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRv
QmVnaW5uaW5nT2ZTZW50ZW5jZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlNl
bnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mRG9j
dW1lbnQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVj
dGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQo
bW92ZVRvRW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVU
b0VuZE9mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mUGFyYWdyYXBoQW5k
TW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mU2VudGVuY2UpCitX
RUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dF
QkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKG1vdmVU
b0xlZnRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVRv
UmlnaHRFbmRPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvUmlnaHRFbmRPZkxpbmVBbmRN
b2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVVwKQorV0VCQ09SRV9DT01NQU5E
KG1vdmVVcEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEJhY2t3
YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkQmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24p
CitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVX
b3JkRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZExl
ZnQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VC
Q09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRSaWdo
dEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChvdXRkZW50KQorV0VCQ09SRV9D
T01NQU5EKHBhZ2VEb3duKQorV0VCQ09SRV9DT01NQU5EKHBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0
aW9uKQorV0VCQ09SRV9DT01NQU5EKHBhZ2VVcCkKK1dFQkNPUkVfQ09NTUFORChwYWdlVXBBbmRN
b2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0QWxsKQorV0VCQ09SRV9DT01N
QU5EKHNlbGVjdExpbmUpCitXRUJDT1JFX0NPTU1BTkQoc2VsZWN0UGFyYWdyYXBoKQorV0VCQ09S
RV9DT01NQU5EKHNlbGVjdFNlbnRlbmNlKQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdFRvTWFyaykK
K1dFQkNPUkVfQ09NTUFORChzZWxlY3RXb3JkKQorV0VCQ09SRV9DT01NQU5EKHNldE1hcmspCitX
RUJDT1JFX0NPTU1BTkQoc3Vic2NyaXB0KQorV0VCQ09SRV9DT01NQU5EKHN1cGVyc2NyaXB0KQor
V0VCQ09SRV9DT01NQU5EKHN3YXBXaXRoTWFyaykKK1dFQkNPUkVfQ09NTUFORCh0cmFuc3Bvc2Up
CitXRUJDT1JFX0NPTU1BTkQodW5kZXJsaW5lKQorV0VCQ09SRV9DT01NQU5EKHVuc2NyaXB0KQor
V0VCQ09SRV9DT01NQU5EKHlhbmspCitXRUJDT1JFX0NPTU1BTkQoeWFua0FuZFNlbGVjdCkKKwor
I3VuZGVmIFdFQkNPUkVfQ09NTUFORAorCisjZGVmaW5lIENPTU1BTkRfUFJPTE9HVUUgaWYgKFtz
ZWxmIGNhbGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDpfY21kXSkgcmV0dXJu
OworCistIChJQkFjdGlvbil0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb246KGlkKXNlbmRlcgor
eworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmICghW3NlbGYgX2hhc1NlbGVjdGlvbl0p
IHsKKyAgICAgICAgTlNCZWVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBbTlNQ
YXN0ZWJvYXJkIF93ZWJfc2V0RmluZFBhc3RlYm9hcmRTdHJpbmc6W3NlbGYgc2VsZWN0ZWRTdHJp
bmddIHdpdGhPd25lcjpzZWxmXTsKK30KKworLSAoQk9PTCl3cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCB0eXBlczooTlNBcnJheSAqKXR5cGVzCit7
CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOltzZWxmIF90b3BIVE1M
Vmlld11dOworICAgIFtzZWxmIHdyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0eXBl
cyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9P
TClyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQK
K3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAo
IWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIGlmIChjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgICAgICBbc2VsZiBfcGFzdGVX
aXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGFsbG93UGxhaW5UZXh0OllFU107CisgICAgZWxzZQor
ICAgICAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRd
OworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKGlkKXZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6
KE5TU3RyaW5nICopc2VuZFR5cGUgcmV0dXJuVHlwZTooTlNTdHJpbmcgKilyZXR1cm5UeXBlCit7
CisgICAgQk9PTCBpc1NlbmRUeXBlT0sgPSAhc2VuZFR5cGUgfHwgKFtbc2VsZiBwYXN0ZWJvYXJk
VHlwZXNGb3JTZWxlY3Rpb25dIGNvbnRhaW5zT2JqZWN0OnNlbmRUeXBlXSAmJiBbc2VsZiBfaGFz
U2VsZWN0aW9uXSk7CisgICAgQk9PTCBpc1JldHVyblR5cGVPSyA9ICFyZXR1cm5UeXBlIHx8IChb
W1tzZWxmIGNsYXNzXSBfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlc10gY29udGFpbnNPYmplY3Q6
cmV0dXJuVHlwZV0gJiYgW3NlbGYgX2lzRWRpdGFibGVdKTsKKyAgICBpZiAoaXNTZW5kVHlwZU9L
ICYmIGlzUmV0dXJuVHlwZU9LKQorICAgICAgICByZXR1cm4gc2VsZjsKKyAgICByZXR1cm4gW1tz
ZWxmIG5leHRSZXNwb25kZXJdIHZhbGlkUmVxdWVzdG9yRm9yU2VuZFR5cGU6c2VuZFR5cGUgcmV0
dXJuVHlwZTpyZXR1cm5UeXBlXTsKK30KKworLy8ganVtcFRvU2VsZWN0aW9uIGlzIHRoZSBvbGQg
bmFtZSBmb3Igd2hhdCBBcHBLaXQgbm93IGNhbGxzIGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFy
ZWEuIFNhZmFyaQorLy8gd2FzIHVzaW5nIHRoZSBvbGQganVtcFRvU2VsZWN0aW9uIHNlbGVjdG9y
IGluIGl0cyBtZW51LiBOZXdlciB2ZXJzaW9ucyBvZiBTYWZhcmkgd2lsbCB1c2UgdGhlCisvLyBz
ZWxlY3RvciBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBXZSdsbCBsZWF2ZSB0aGUgb2xk
IHNlbGVjdG9yIGluIHBsYWNlIGZvciB0d28gcmVhc29uczoKKy8vICgxKSBDb21wYXRpYmlsaXR5
IGJldHdlZW4gb2xkZXIgU2FmYXJpIGFuZCBuZXdlciBXZWJLaXQ7ICgyKSBvdGhlciBXZWJLaXQt
YmFzZWQgYXBwbGljYXRpb25zCisvLyBtaWdodCBiZSB1c2luZyB0aGUgc2VsZWN0b3IsIGFuZCB3
ZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZW0uCistICh2b2lkKWp1bXBUb1NlbGVjdGlvbjooaWQp
c2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPnJldmVhbFNlbGVj
dGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKK30KKworLSAoTlNDZWxs
U3RhdGVWYWx1ZSlzZWxlY3Rpb25IYXNTdHlsZTooQ1NTU3R5bGVEZWNsYXJhdGlvbiopc3R5bGUK
K3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAo
IWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5TT2ZmU3RhdGU7CisgICAgcmV0dXJuIGtpdChj
b3JlRnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNTdHlsZShzdHlsZSkpOworfQorCistIChC
T09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6KGlkIDxOU1ZhbGlk
YXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCit7CisgICAgU0VMIGFjdGlvbiA9IFtpdGVtIGFj
dGlvbl07CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgaWYgKERvY3Vt
ZW50KiBkb2MgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBpZiAoZG9jLT5pc1BsdWdp
bkRvY3VtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIGlmIChkb2MtPmlz
SW1hZ2VEb2N1bWVudCgpKSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3Rvcihjb3B5OikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIo
KS0+aXNDb21wbGV0ZSgpOworICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlU3BlbGxpbmc6KQorICAgICAg
ICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfY2hhbmdlU3BlbGxpbmdGcm9tTWVudTopCisg
ICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoZWNrU3BlbGxpbmc6KQorICAgICAg
ICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihjb21wbGV0ZTopCisgICAgICAgICAgICB8fCBh
Y3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlRm9udDopKQorICAgICAgICByZXR1cm4gW3NlbGYgX2Nh
bkVkaXRdOworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Ioc2hvd0d1ZXNzUGFuZWw6KSkg
eworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgICAgICAvLyBNYXRjaCBPUyBYIEFwcEtp
dCBiZWhhdmlvciBmb3IgcG9zdC1UaWdlci4gRG9uJ3QgY2hhbmdlIFRpZ2VyIGJlaGF2aW9yLgor
ICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAg
ICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKKyAg
ICAgICAgICAgIEJPT0wgcGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdOworICAgICAgICAgICAgW21lbnVJ
dGVtIHNldFRpdGxlOnBhbmVsU2hvd2luZworICAgICAgICAgICAgICAgID8gVUlfU1RSSU5HKCJI
aWRlIFNwZWxsaW5nIGFuZCBHcmFtbWFyIiwgIm1lbnUgaXRlbSB0aXRsZSIpCisgICAgICAgICAg
ICAgICAgOiBVSV9TVFJJTkcoIlNob3cgU3BlbGxpbmcgYW5kIEdyYW1tYXIiLCAibWVudSBpdGVt
IHRpdGxlIildOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5F
ZGl0XTsKKyAgICB9CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQmFz
ZVdyaXRpbmdEaXJlY3Rpb246KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvciht
YWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDopCisgICAgICAgICAgICB8fCBhY3Rp
b24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OikpIHsK
KyAgICAgICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb247CisKKyAgICAgICAg
aWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb246KSkgewor
ICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PE5TV3JpdGluZ0RpcmVj
dGlvbj4oW2l0ZW0gdGFnXSk7CisgICAgICAgICAgICBpZiAod3JpdGluZ0RpcmVjdGlvbiA9PSBO
U1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKQorICAgICAgICAgICAgICAgIHJldHVybiBOTzsKKyAg
ICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OikpCisgICAgICAgICAgICB3cml0aW5nRGlyZWN0aW9uID0gTlNXcml0
aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdyaXRp
bmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKKworICAgICAgICBO
U01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFtt
ZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKKyAgICAgICAgICAg
IFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgICAg
ICAgICBzdHlsZS0+c2V0UHJvcGVydHkoImRpcmVjdGlvbiIsIHdyaXRpbmdEaXJlY3Rpb24gPT0g
TlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyAiTFRSIiA6ICJSVEwiLCBlYyk7CisgICAg
ICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3Rpb25IYXNT
dHlsZShzdHlsZS5nZXQoKSldOworICAgICAgICB9CisgICAgICAgIHJldHVybiBbc2VsZiBfY2Fu
RWRpdF07CisgICAgfQorCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VXcml0
aW5nRGlyZWN0aW9uTmF0dXJhbDopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpOU09m
ZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0aW9uOikpIHsKKyAgICAgICAgTlNNZW51
SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0
ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7CisgICAgICAgICAgICBSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICAgICAg
c3R5bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCAiUlRMIiwgZWMpOworICAgICAgICAgICAg
Ly8gVGFrZSBjb250cm9sIG9mIHRoZSB0aXRsZSBvZiB0aGUgbWVudSBpdGVtIGluc3RlYWQgb2Yg
anVzdCBjaGVja2luZy91bmNoZWNraW5nIGl0IGJlY2F1c2UKKyAgICAgICAgICAgIC8vIGEgY2hl
Y2sgd291bGQgYmUgYW1iaWd1b3VzLgorICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOmZy
YW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpCisgICAgICAgICAg
ICAgICAgPyBVSV9TVFJJTkcoIkxlZnQgdG8gUmlnaHQiLCAiTGVmdCB0byBSaWdodCBjb250ZXh0
IG1lbnUgaXRlbSIpCisgICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlJpZ2h0IHRvIExlZnQi
LCAiUmlnaHQgdG8gTGVmdCBjb250ZXh0IG1lbnUgaXRlbSIpXTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0gCisgICAgCisgICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IoY2hhbmdlQXR0cmlidXRlczopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0g
QHNlbGVjdG9yKGNoYW5nZUNvbG9yOikgICAgICAgIAorICAgICAgICAgICAgfHwgYWN0aW9uID09
IEBzZWxlY3RvcihjaGFuZ2VGb250OikpCisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdFJp
Y2hseV07CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2FwaXRhbGl6ZVdvcmQ6
KQorICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihsb3dlcmNhc2VXb3JkOikK
KyAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodXBwZXJjYXNlV29yZDopKQor
ICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl0gJiYgW3NlbGYgX2lzRWRpdGFibGVd
OworCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxl
QXJlYTopCisgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGp1bXBUb1NlbGVj
dGlvbjopCisgICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNvcHlGb250Oikp
CisgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXSB8fCAoW3NlbGYgX2lzRWRpdGFi
bGVdICYmIFtzZWxmIF9oYXNJbnNlcnRpb25Qb2ludF0pOworICAgIAorICAgIGlmIChhY3Rpb24g
PT0gQHNlbGVjdG9yKGNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOikpCisgICAgICAgIHJl
dHVybiBbW3NlbGYgX3dlYlZpZXddIGlzRWRpdGFibGVdICYmIFtzZWxmIF9jYW5FZGl0UmljaGx5
XTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfaWdub3JlU3BlbGxpbmdGcm9t
TWVudTopCisgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKF9sZWFyblNwZWxsaW5n
RnJvbU1lbnU6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcih0YWtlRmluZFN0
cmluZ0Zyb21TZWxlY3Rpb246KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25d
OworICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlOikgfHwgYWN0aW9uID09
IEBzZWxlY3RvcihwYXN0ZUFzUGxhaW5UZXh0OikpCisgICAgICAgIHJldHVybiBmcmFtZSAmJiAo
ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkgfHwgZnJhbWUtPmVkaXRvcigpLT5jYW5Q
YXN0ZSgpKTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZUFzUmljaFRl
eHQ6KSkKKyAgICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1M
UGFzdGUoKQorICAgICAgICAgICAgfHwgKGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSAmJiBm
cmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpKTsKKyAgICAKKyAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBhbmVsQWN0aW9uOikpCisgICAg
ICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihfbG9va1Vw
SW5EaWN0aW9uYXJ5RnJvbU1lbnU6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rp
b25dOworICAgIAorI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIGlmIChhY3Rpb24gPT0g
QHNlbGVjdG9yKHRvZ2dsZUdyYW1tYXJDaGVja2luZzopKSB7CisgICAgICAgIC8vIEZJWE1FIDQ3
OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2lu
ZyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCisgICAgICAgIC8vIHRoZSBzZWxlY3RvciBo
ZXJlIGJlY2F1c2Ugd2UgaW1wbGVtZW50IGl0IGhlcmUsIGFuZCB3ZSBtdXN0IGltcGxlbWVudCBp
dCBoZXJlIGJlY2F1c2UgdGhlIEFwcEtpdCAKKyAgICAgICAgLy8gY29kZSBjaGVja3MgdGhlIGZp
cnN0IHJlc3BvbmRlci4KKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRl
bSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRl
bSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0
dXJuIFlFUzsKKyAgICB9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKG9yZGVyRnJvbnRTdWJzdGl0dXRpb25zUGFuZWw6KSkgeworICAgICAgICBOU01lbnVJ
dGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRl
bSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIEJPT0wg
cGFuZWxTaG93aW5nID0gW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzdWJz
dGl0dXRpb25zUGFuZWxdIGlzVmlzaWJsZV07CisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0
bGU6cGFuZWxTaG93aW5nCisgICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkhpZGUgU3Vic3Rp
dHV0aW9ucyIsICJtZW51IGl0ZW0gdGl0bGUiKQorICAgICAgICAgICAgICAgIDogVUlfU1RSSU5H
KCJTaG93IFN1YnN0aXR1dGlvbnMiLCAibWVudSBpdGVtIHRpdGxlIildOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIC8vIEZJWE1FIDQ3OTkx
MzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgbG9naWMsIGJ1dCB3ZSBtdXN0
IHZhbGlkYXRlIAorICAgIC8vIHRoZSBzZWxlY3RvciBoZXJlIGJlY2F1c2Ugd2UgaW1wbGVtZW50
IGl0IGhlcmUsIGFuZCB3ZSBtdXN0IGltcGxlbWVudCBpdCBoZXJlIGJlY2F1c2UgdGhlIEFwcEtp
dCAKKyAgICAvLyBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOikpIHsKKyAgICAgICAgTlNN
ZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVu
dUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21l
bnVJdGVtIHNldFN0YXRlOltzZWxmIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0gPyBOU09uU3Rh
dGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9
CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0
dXRpb246KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICop
aXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNs
YXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNR
dW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CisgICAg
ICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KSkgeworICAgICAgICBOU01lbnVJ
dGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRl
bSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVudUl0
ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZF0gPyBOU09u
U3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAg
ICB9CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0
aXR1dGlvbjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0g
KilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0g
Y2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRp
Y0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAg
ICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KSkgeworICAgICAgICBOU01l
bnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51
SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVu
dUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkXSA/
IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRd
OworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb246KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01l
bnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01l
bnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNB
dXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3Rh
dGVdOworICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyNlbmRpZgorICAg
IAorICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5kID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVj
dG9yOmFjdGlvbl07CisgICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkgeworICAgICAgICBO
U01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICAgICAgaWYgKFtt
ZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAgICAgICBb
bWVudUl0ZW0gc2V0U3RhdGU6a2l0KGNvbW1hbmQuc3RhdGUoKSldOworICAgICAgICByZXR1cm4g
Y29tbWFuZC5pc0VuYWJsZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gWUVTOworfQorCistIChC
T09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZh
Y2VJdGVtPilpdGVtCit7CisgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIGR1cmluZyB0ZWFyZG93
biB3aGVuIF93ZWJWaWV3IGlzIG5pbC4gUmV0dXJuIE5PIHdoZW4gdGhpcyBoYXBwZW5zLCBiZWNh
dXNlIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVhbgorICAgIC8vIGFzc3VtZXMgdGhlIFdl
YlZJZXcgaXMgbm9uLW5pbC4KKyAgICBpZiAoIVtzZWxmIF93ZWJWaWV3XSkKKyAgICAgICAgcmV0
dXJuIE5POworICAgIEJPT0wgcmVzdWx0ID0gW3NlbGYgdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRl
bVdpdGhvdXREZWxlZ2F0ZTppdGVtXTsKKyAgICByZXR1cm4gQ2FsbFVJRGVsZWdhdGVSZXR1cm5p
bmdCb29sZWFuKHJlc3VsdCwgW3NlbGYgX3dlYlZpZXddLCBAc2VsZWN0b3Iod2ViVmlldzp2YWxp
ZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOmRlZmF1bHRWYWxpZGF0aW9uOiksIGl0ZW0sIHJlc3VsdCk7
Cit9CisKKy0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCit7CisgICAgLy8gRG9uJ3QgYWNj
ZXB0IGZpcnN0IHJlc3BvbmRlciB3aGVuIHdlIGZpcnN0IGNsaWNrIG9uIHRoaXMgdmlldy4KKyAg
ICAvLyBXZSBoYXZlIHRvIHBhc3MgdGhlIGV2ZW50IGRvd24gdGhyb3VnaCBXZWJDb3JlIGZpcnN0
IHRvIGJlIHN1cmUgd2UgZG9uJ3QgaGl0IGEgc3Vidmlldy4KKyAgICAvLyBEbyBhY2NlcHQgZmly
c3QgcmVzcG9uZGVyIGF0IGFueSBvdGhlciB0aW1lLCBmb3IgZXhhbXBsZSBmcm9tIGtleWJvYXJk
IGV2ZW50cywKKyAgICAvLyBvciBmcm9tIGNhbGxzIGJhY2sgZnJvbSBXZWJDb3JlIG9uY2Ugd2Ug
YmVnaW4gbW91c2UtZG93biBldmVudCBoYW5kbGluZy4KKyAgICBOU0V2ZW50ICpldmVudCA9IFtO
U0FwcCBjdXJyZW50RXZlbnRdOworICAgIGlmIChbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91c2VE
b3duCisgICAgICAgICAgICAmJiAhX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQKKyAg
ICAgICAgICAgICYmIE5TUG9pbnRJblJlY3QoW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddLCBbc2Vs
ZiBjb252ZXJ0UmVjdDpbc2VsZiB2aXNpYmxlUmVjdF0gdG9WaWV3Om5pbF0pKSB7CisgICAgICAg
IHJldHVybiBOTzsKKyAgICB9CisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTCltYWludGFp
bnNJbmFjdGl2ZVNlbGVjdGlvbgoreworICAgIC8vIFRoaXMgbWV0aG9kIGhlbHBzIHRvIGRldGVy
bWluZSB3aGV0aGVyIHRoZSBXZWJIVE1MVmlldyBzaG91bGQgbWFpbnRhaW4KKyAgICAvLyBhbiBp
bmFjdGl2ZSBzZWxlY3Rpb24gd2hlbiBpdCdzIG5vdCBmaXJzdCByZXNwb25kZXIuCisgICAgLy8g
VHJhZGl0aW9uYWxseSwgdGhlc2Ugdmlld3MgaGF2ZSBub3QgbWFpbnRhaW5lZCBzdWNoIHNlbGVj
dGlvbnMsCisgICAgLy8gY2xlYXJpbmcgdGhlbSB3aGVuIHRoZSB2aWV3IHdhcyBub3QgZmlyc3Qg
cmVzcG9uZGVyLiBIb3dldmVyLAorICAgIC8vIHRvIGZpeCBidWdzIGxpa2UgdGhpcyBvbmU6Cisg
ICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM2NzIwODg+OiAiRWRpdGFibGUgV2ViVmlld3Mgc2hvdWxk
IG1haW50YWluIGEgc2VsZWN0aW9uIGV2ZW4gCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hlbiB0aGV5J3JlIG5vdCBmaXJzdFJlc3BvbmRlciIKKyAgICAvLyBpdCB3YXMgZGVj
aWRlZCB0byBhZGQgYSBzd2l0Y2ggdG8gYWN0IG1vcmUgbGlrZSBhbiBOU1RleHRWaWV3LgorCisg
ICAgaWYgKFtbc2VsZiBfd2ViVmlld10gbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb25dKQorICAg
ICAgICByZXR1cm4gWUVTOworCisgICAgLy8gUHJlZGljdCB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUg
bG9zaW5nIGZpcnN0IHJlc3BvbmRlciBzdGF0dXMgb25seSB0bworICAgIC8vIGdhaW4gaXQgYmFj
ayBhZ2Fpbi4gV2FudCB0byBrZWVwIHRoZSBzZWxlY3Rpb24gaW4gdGhhdCBjYXNlLgorICAgIGlk
IG5leHRSZXNwb25kZXIgPSBbW3NlbGYgd2luZG93XSBfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJl
c2lnbmluZ107CisgICAgaWYgKFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TU2Nyb2xs
VmlldyBjbGFzc11dKSB7CisgICAgICAgIGlkIGNvbnRlbnRWaWV3ID0gW25leHRSZXNwb25kZXIg
Y29udGVudFZpZXddOworICAgICAgICBpZiAoY29udGVudFZpZXcpCisgICAgICAgICAgICBuZXh0
UmVzcG9uZGVyID0gY29udGVudFZpZXc7CisgICAgfQorICAgIGlmIChbbmV4dFJlc3BvbmRlciBp
c0tpbmRPZkNsYXNzOltOU0NsaXBWaWV3IGNsYXNzXV0pIHsKKyAgICAgICAgaWQgZG9jdW1lbnRW
aWV3ID0gW25leHRSZXNwb25kZXIgZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgaWYgKGRvY3VtZW50
VmlldykKKyAgICAgICAgICAgIG5leHRSZXNwb25kZXIgPSBkb2N1bWVudFZpZXc7CisgICAgfQor
ICAgIGlmIChuZXh0UmVzcG9uZGVyID09IHNlbGYpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBib29sIHNlbGVj
dGlvbklzRWRpdGFibGUgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXND
b250ZW50RWRpdGFibGUoKTsKKyAgICBib29sIG5leHRSZXNwb25kZXJJc0luV2ViVmlldyA9IFtu
ZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dCisgICAgICAgICYmIFtu
ZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5GcmFtZV0g
ZnJhbWVWaWV3XV07CisKKyAgICByZXR1cm4gc2VsZWN0aW9uSXNFZGl0YWJsZSAmJiBuZXh0UmVz
cG9uZGVySXNJbldlYlZpZXc7Cit9CisKKy0gKHZvaWQpYWRkTW91c2VNb3ZlZE9ic2VydmVyCit7
CisgICAgaWYgKCFfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB8fCAhW3NlbGYgX2lzVG9wSFRNTFZpZXdd
IHx8IF9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9ucykKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gVW5sZXNzIHRoZSBEYXNoYm9hcmQgYXNrcyB1cyB0byBkbyB0aGlz
IGZvciBhbGwgd2luZG93cywga2VlcCBhbiBvYnNlcnZlciBnb2luZyBvbmx5IGZvciB0aGUga2V5
IHdpbmRvdy4KKyAgICBpZiAoIShbW3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10gCisjaWYgRU5B
QkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgICAgICAgICAgfHwgW1tzZWxmIF93ZWJWaWV3XSBf
ZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNTZW5kTW91c2VFdmVu
dHNUb0FsbFdpbmRvd3NdCisjZW5kaWYKKyAgICAgICAgKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjpzZWxm
IHNlbGVjdG9yOkBzZWxlY3Rvcihtb3VzZU1vdmVkTm90aWZpY2F0aW9uOikKKyAgICAgICAgbmFt
ZTpXS01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6bmlsXTsKKyAgICBbc2VsZiBfZnJh
bWVPckJvdW5kc0NoYW5nZWRdOworICAgIF9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90
aWZpY2F0aW9ucyA9IHRydWU7Cit9CisKKy0gKHZvaWQpcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVy
Cit7CisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIC8vIERvbid0IHJlbW92ZSB0
aGUgb2JzZXJ2ZXIgaWYgd2UncmUgcnVubmluZyB0aGUgRGFzaGJvYXJkLgorICAgIGlmIChbW3Nl
bGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvckFsd2F5
c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10pCisgICAgICAgIHJldHVybjsKKyNlbmRpZgor
CisgICAgW1tzZWxmIF93ZWJWaWV3XSBfbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQ6bmlsIG1vZGlm
aWVyRmxhZ3M6MF07CisgICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0
aW9uYWxseV07Cit9CisKKy0gKHZvaWQpYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzCit7CisgICAgaWYg
KF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zKQorICAgICAgICByZXR1
cm47CisKKyAgICBOU1ZpZXcgKnN1cGVydmlldyA9IFtzZWxmIHN1cGVydmlld107CisgICAgaWYg
KCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdpbmRvd10pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0
aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkKSBuYW1l
Ok5TVmlld0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOworICAg
IFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
X2ZyYW1lT3JCb3VuZHNDaGFuZ2VkKSBuYW1lOk5TVmlld0JvdW5kc0RpZENoYW5nZU5vdGlmaWNh
dGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKKyAgICAKKyAgICAvLyBJbiBhZGRpdGlvbiB0byByZWdp
c3RlcmluZyBmb3IgZnJhbWUvYm91bmRzIGNoYW5nZSBub3RpZmljYXRpb25zLCBjYWxsIC1fZnJh
bWVPckJvdW5kc0NoYW5nZWQuCisgICAgLy8gSXQgd2lsbCBjaGVjayB0aGUgY3VycmVudCBzY3Jv
bGwgYWdhaW5zdCB0aGUgcHJldmlvdXMgbGF5b3V0J3Mgc2Nyb2xsLiAgV2UgbmVlZCB0bworICAg
IC8vIGRvIHRoaXMgaGVyZSB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGUgV2ViVmlldyBpcyBs
YWlkIG91dCBhdCBvbmUgc2l6ZSwgcmVtb3ZlZCBmcm9tIGl0cworICAgIC8vIHdpbmRvdywgcmVz
aXplZCwgYW5kIGluc2VydGVkIGludG8gYW5vdGhlciB3aW5kb3cuICBPdXIgZnJhbWUvYm91bmRz
IGNoYW5nZWQgbm90aWZpY2F0aW9ucworICAgIC8vIHdpbGwgbm90IGJlIHNlbnQgaW4gdGhhdCBz
aXR1YXRpb24sIHNpbmNlIHdlIG9ubHkgd2F0Y2ggZm9yIGNoYW5nZXMgd2hpbGUgaW4gdGhlIHZp
ZXcgaGllcmFyY2h5LgorICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07CisgICAgCisg
ICAgX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmlld05vdGlmaWNhdGlvbnMgPSB0cnVlOworfQor
CistICh2b2lkKWFkZFdpbmRvd09ic2VydmVycworeworICAgIGlmIChfcHJpdmF0ZS0+b2JzZXJ2
aW5nV2luZG93Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5TV2lu
ZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIGlmICghd2luZG93KQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRl
ciA9IFtOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKKyAgICBbbm90aWZpY2F0
aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZEJl
Y29tZUtleTopIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2JqZWN0Om5p
bF07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3Rvcih3aW5kb3dEaWRSZXNpZ25LZXk6KSBuYW1lOk5TV2luZG93RGlkUmVzaWduS2V5Tm90
aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbENsb3NlOikgbmFtZTpOU1dpbmRv
d1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6d2luZG93XTsKKyAgICBbbm90aWZpY2F0aW9u
Q2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd1dpbGxPcmRl
ck9uU2NyZWVuOikgbmFtZTpXS1dpbmRvd1dpbGxPcmRlck9uU2NyZWVuTm90aWZpY2F0aW9uKCkg
b2JqZWN0OndpbmRvd107CisgICAgCisgICAgX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlm
aWNhdGlvbnMgPSB0cnVlOworfQorCistICh2b2lkKXZpZXdXaWxsTW92ZVRvU3VwZXJ2aWV3OihO
U1ZpZXcgKiluZXdTdXBlcnZpZXcKK3sKKyAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2
ZXJzXTsKK30KKworLSAodm9pZCl2aWV3RGlkTW92ZVRvU3VwZXJ2aWV3Cit7CisgICAgaWYgKFtz
ZWxmIHN1cGVydmlld10gIT0gbmlsKQorICAgICAgICBbc2VsZiBhZGRTdXBlcnZpZXdPYnNlcnZl
cnNdOworfQorCitzdGF0aWMgdm9pZCBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJD
YWxsYmFjayhDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCAqaW5mbykKK3sKKyAgICBXZWJI
VE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKWluZm87CisgICAgW3ZpZXcgX3VwZGF0ZUZv
Y3VzZWRBbmRBY3RpdmVTdGF0ZV07Cit9CisKKy0gKHZvaWQpdmlld1dpbGxNb3ZlVG9XaW5kb3c6
KE5TV2luZG93ICopd2luZG93Cit7CisgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgYXJl
bid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBwZW5zCisgICAgLy8gd2hlbiBkZWNvZGluZyBhIFdl
YlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBkZWNvZGVkIHRoZWlyIHN1YnZpZXdzCisgICAgLy8g
YXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2RlcjogYW5kIHNvIHdvbid0IGJlIG5vcm1hbGx5Cisg
ICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1YiB2aWV3cyBhcmUgZGlzY2FyZGVkIGJ5IFdlYlZp
ZXcuCisgICAgaWYgKCFfcHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6
IFNvbWUgb2YgdGhlc2UgY2FsbHMgbWF5IG5vdCB3b3JrIGJlY2F1c2UgdGhpcyB2aWV3IG1heSBi
ZSBhbHJlYWR5IHJlbW92ZWQgZnJvbSBpdCdzIHN1cGVydmlldy4KKyAgICBbc2VsZiBfcmVtb3Zl
TW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKKyAgICBbc2VsZiBfcmVtb3ZlV2lu
ZG93T2JzZXJ2ZXJzXTsKKyAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKKyAg
ICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJdOworICAgIFtzZWxmIF9jYW5jZWxV
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07CisgICAgCisgICAgW1tzZWxmIF9wbHVn
aW5Db250cm9sbGVyXSBzdG9wQWxsUGx1Z2luc107Cit9CisKKy0gKHZvaWQpdmlld0RpZE1vdmVU
b1dpbmRvdworeworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGFyZW4ndCBpbml0aWFs
aXplZC4gIFRoaXMgaGFwcGVucworICAgIC8vIHdoZW4gZGVjb2RpbmcgYSBXZWJWaWV3LiAgV2hl
biBXZWJWaWV3cyBhcmUgZGVjb2RlZCB0aGVpciBzdWJ2aWV3cworICAgIC8vIGFyZSBjcmVhdGVk
IGJ5IGluaXRXaXRoQ29kZXI6IGFuZCBzbyB3b24ndCBiZSBub3JtYWxseQorICAgIC8vIGluaXRp
YWxpemVkLiAgVGhlIHN0dWIgdmlld3MgYXJlIGRpc2NhcmRlZCBieSBXZWJWaWV3LgorICAgIGlm
ICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CisgICAgaWYgKFtzZWxmIHdpbmRv
d10pIHsKKyAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9IFtbc2VsZiBzdXBl
cnZpZXddIGJvdW5kc10ub3JpZ2luOworICAgICAgICBbc2VsZiBhZGRXaW5kb3dPYnNlcnZlcnNd
OworICAgICAgICBbc2VsZiBhZGRTdXBlcnZpZXdPYnNlcnZlcnNdOworICAgICAgICBbc2VsZiBh
ZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOworCisgICAgICAgIC8vIFNjaGVkdWxlIHRoaXMgdXBkYXRl
LCByYXRoZXIgdGhhbiBtYWtpbmcgdGhlIGNhbGwgcmlnaHQgbm93LgorICAgICAgICAvLyBUaGUg
cmVhc29uIGlzIHRoYXQgcGxhY2luZyB0aGUgY2FyZXQgaW4gdGhlIGp1c3QtaW5zdGFsbGVkIHZp
ZXcgcmVxdWlyZXMKKyAgICAgICAgLy8gdGhlIEhUTUwvWE1MIGRvY3VtZW50IHRvIGJlIGF2YWls
YWJsZSBvbiB0aGUgV2ViQ29yZSBzaWRlLCBidXQgaXQgaXMgbm90CisgICAgICAgIC8vIGF0IHRo
ZSB0aW1lIHRoaXMgY29kZSBpcyBydW5uaW5nLiBIb3dldmVyLCBpdCB3aWxsIGJlIHRoZXJlIG9u
IHRoZSBuZXh0CisgICAgICAgIC8vIGNyYW5rIG9mIHRoZSBydW4gbG9vcC4gRG9pbmcgdGhpcyBo
ZWxwcyB0byBtYWtlIGEgYmxpbmtpbmcgY2FyZXQgYXBwZWFyIAorICAgICAgICAvLyBpbiBhIG5l
dywgZW1wdHkgd2luZG93ICJhdXRvbWF0aWMiLgorICAgICAgICBpZiAoIV9wcml2YXRlLT51cGRh
dGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcikgeworICAgICAgICAgICAgQ0ZSdW5Mb29wVGlt
ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKyAgICAg
ICAgICAgIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lciA9IENGUnVu
TG9vcFRpbWVyQ3JlYXRlKE5VTEwsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpLCAwLCAwLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJDYWxsYmFjaywg
JmNvbnRleHQpOworICAgICAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpLCBfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIsIGtDRlJ1
bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFtbc2VsZiBf
cGx1Z2luQ29udHJvbGxlcl0gc3RhcnRBbGxQbHVnaW5zXTsKKworICAgICAgICBfcHJpdmF0ZS0+
bGFzdFNjcm9sbFBvc2l0aW9uID0gTlNaZXJvUG9pbnQ7CisgICAgfQorfQorCistICh2b2lkKXZp
ZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzooTlNXaW5kb3cgKilob3N0V2luZG93Cit7CisgICAgW1tz
ZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0
b3Iodmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93Oikgd2l0aE9iamVjdDpob3N0V2luZG93XTsKK30K
KworLSAodm9pZCl2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdworeworICAgIFtbc2VsZiBzdWJ2aWV3
c10gX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdEaWRN
b3ZlVG9Ib3N0V2luZG93KSB3aXRoT2JqZWN0Om5pbF07Cit9CisKKworLSAodm9pZClhZGRTdWJ2
aWV3OihOU1ZpZXcgKil2aWV3Cit7CisgICAgW3N1cGVyIGFkZFN1YnZpZXc6dmlld107CisKKyAg
ICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5WaWV3OnZpZXddKQorICAgICAgICBb
W3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGFkZFBsdWdpbjp2aWV3XTsKK30KKworLSAodm9pZCl3
aWxsUmVtb3ZlU3VidmlldzooTlNWaWV3ICopc3VidmlldworeworICAgIGlmIChbV2ViUGx1Z2lu
Q29udHJvbGxlciBpc1BsdWdJblZpZXc6c3Vidmlld10pCisgICAgICAgIFtbc2VsZiBfcGx1Z2lu
Q29udHJvbGxlcl0gZGVzdHJveVBsdWdpbjpzdWJ2aWV3XTsKKworICAgIFtzdXBlciB3aWxsUmVt
b3ZlU3VidmlldzpzdWJ2aWV3XTsKK30KKworLSAodm9pZClyZWFwcGx5U3R5bGVzCit7CisgICAg
aWYgKCFfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzKQorICAgICAgICByZXR1cm47CisgICAg
CisjaWZkZWYgTE9HX1RJTUVTCisgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRD
dXJyZW50KCk7CisjZW5kaWYKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoRnJhbWVWaWV3KiBjb3JlVmlldyA9IGNvcmVGcmFt
ZS0+dmlldygpKQorICAgICAgICAgICAgY29yZVZpZXctPnNldE1lZGlhVHlwZShfcHJpdmF0ZS0+
cHJpbnRpbmcgPyAicHJpbnQiIDogInNjcmVlbiIpOworICAgICAgICBpZiAoRG9jdW1lbnQqIGRv
Y3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQtPnNl
dFByaW50aW5nKF9wcml2YXRlLT5wcmludGluZyk7CisgICAgICAgIGNvcmVGcmFtZS0+cmVhcHBs
eVN0eWxlcygpOworICAgIH0KKyAgICAKKyNpZmRlZiBMT0dfVElNRVMgICAgICAgIAorICAgIGRv
dWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7CisgICAg
TE9HKFRpbWluZywgIiVzIGFwcGx5IHN0eWxlIHNlY29uZHMgPSAlZiIsIFtzZWxmIFVSTF0sIHRo
aXNUaW1lKTsKKyNlbmRpZgorCisgICAgX3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyA9IE5P
OworfQorCisvLyBEbyBhIGxheW91dCwgYnV0IHNldCB1cCBhIG5ldyBmaXhlZCB3aWR0aCBmb3Ig
dGhlIHB1cnBvc2VzIG9mIGRvaW5nIHByaW50aW5nIGxheW91dC4KKy8vIG1pblBhZ2VXaWR0aD09
MCBpbXBsaWVzIGEgbm9uLXByaW50aW5nIGxheW91dAorLSAodm9pZClsYXlvdXRUb01pbmltdW1Q
YWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQ
YWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemUKK3sKKyAgICBb
c2VsZiByZWFwcGx5U3R5bGVzXTsKKyAgICAKKyAgICBpZiAoIVtzZWxmIF9uZWVkc0xheW91dF0p
CisgICAgICAgIHJldHVybjsKKworI2lmZGVmIExPR19USU1FUyAgICAgICAgCisgICAgZG91Ymxl
IHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CisjZW5kaWYKKworICAgIExPRyhW
aWV3LCAiJUAgZG9pbmcgbGF5b3V0Iiwgc2VsZik7CisKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXcoKSkgewor
ICAgICAgICBpZiAobWluUGFnZVdpZHRoID4gMC4wKQorICAgICAgICAgICAgY29yZVZpZXctPmZv
cmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmdlKG1pblBhZ2VXaWR0aCwgbWF4UGFnZVdpZHRoLCBh
ZGp1c3RWaWV3U2l6ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29yZVZpZXctPmZv
cmNlTGF5b3V0KCFhZGp1c3RWaWV3U2l6ZSk7CisgICAgICAgICAgICBpZiAoYWRqdXN0Vmlld1Np
emUpCisgICAgICAgICAgICAgICAgY29yZVZpZXctPmFkanVzdFZpZXdTaXplKCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisjaWZkZWYgTE9HX1RJTUVTICAgICAgICAKKyAgICBkb3VibGUgdGhp
c1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhUaW1p
bmcsICIlcyBsYXlvdXQgc2Vjb25kcyA9ICVmIiwgW3NlbGYgVVJMXSwgdGhpc1RpbWUpOworI2Vu
ZGlmCit9CisKKy0gKHZvaWQpbGF5b3V0Cit7CisgICAgW3NlbGYgbGF5b3V0VG9NaW5pbXVtUGFn
ZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdGluZ1ZpZXdTaXplOk5PXTsK
K30KKworLy8gRGVsaXZlciBtb3VzZXVwIGV2ZW50cyB0byB0aGUgRE9NIGZvciBidXR0b24gMi4K
Ky0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgaWYgd2UgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AgdGhlIGV2ZW50IHdp
bGwgYmUgcmVsZWFzZWQuCisgICAgLy8gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcg
cHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGxhdGVyIGhlcmUgb3IKKyAgICAv
LyBpbnNpZGUgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsK
KworICAgIFtzdXBlciByaWdodE1vdXNlVXA6ZXZlbnRdOworCisgICAgaWYgKEZyYW1lKiBjb3Jl
ZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5tb3VzZVVwKGV2ZW50KTsKK30KKworLSAoTlNNZW51ICopbWVudUZvckV2ZW50OihO
U0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgaWYgd2UgcnVu
IGEgbmVzdGVkIGV2ZW50IGxvb3AgdGhlIGV2ZW50IHdpbGwgYmUgcmVsZWFzZWQuCisgICAgLy8g
UmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNp
bmcgYSBwcm9ibGVtIGxhdGVyIGhlcmUgb3IKKyAgICAvLyBpbnNpZGUgQXBwS2l0IGNvZGUuCisg
ICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFtfcHJpdmF0ZS0+Y29tcENv
bnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKworICAgIFJlZlB0
cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVG
cmFtZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlRnJhbWUt
PnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICAvLyBN
YXRjaCBiZWhhdmlvciBvZiBvdGhlciBicm93c2VycyBieSBzZW5kaW5nIGEgbW91c2Vkb3duIGV2
ZW50IGZvciByaWdodCBjbGlja3MuCisgICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZl
bnQgPSBZRVM7CisgICAgcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNsZWFyQ29udGV4
dE1lbnUoKTsKKyAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZURvd24oZXZlbnQp
OworICAgIEJPT0wgaGFuZGxlZEV2ZW50ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Vu
ZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CisgICAgX3ByaXZh
dGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBOTzsKKworICAgIGlmICghaGFuZGxlZEV2ZW50
KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gUmUtZ2V0IHBhZ2UsIHNpbmNlIGl0IG1p
Z2h0IGhhdmUgZ29uZSBhd2F5IGR1cmluZyBldmVudCBoYW5kbGluZy4KKyAgICBwYWdlID0gY29y
ZUZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisg
ICAgQ29udGV4dE1lbnUqIGNvcmVNZW51ID0gcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCkt
PmNvbnRleHRNZW51KCk7CisgICAgaWYgKCFjb3JlTWVudSkKKyAgICAgICAgcmV0dXJuIG5pbDsK
KworICAgIE5TQXJyYXkqIG1lbnVJdGVtcyA9IGNvcmVNZW51LT5wbGF0Zm9ybURlc2NyaXB0aW9u
KCk7CisgICAgaWYgKCFtZW51SXRlbXMpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBOU1VJ
bnRlZ2VyIGNvdW50ID0gW21lbnVJdGVtcyBjb3VudF07CisgICAgaWYgKCFjb3VudCkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIE5TTWVudSogbWVudSA9IFtbW05TTWVudSBhbGxvY10gaW5p
dF0gYXV0b3JlbGVhc2VdOworICAgIGZvciAoTlNVSW50ZWdlciBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgIFttZW51IGFkZEl0ZW06W21lbnVJdGVtcyBvYmplY3RBdEluZGV4OmldXTsK
KyAgICByZXR1cm4gbWVudTsKK30KKworLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3Ry
aW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcg
d3JhcDooQk9PTCl3cmFwRmxhZworeworICAgIHJldHVybiBbc2VsZiBzZWFyY2hGb3I6c3RyaW5n
IGRpcmVjdGlvbjpmb3J3YXJkIGNhc2VTZW5zaXRpdmU6Y2FzZUZsYWcgd3JhcDp3cmFwRmxhZyBz
dGFydEluU2VsZWN0aW9uOk5PXTsKK30KKworLSAodm9pZCljbGVhckZvY3VzCit7CisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUp
CisgICAgICAgIHJldHVybjsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKK30KKworLSAoQk9PTClpc09wYXF1ZQorewor
ICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFja2dyb3VuZF07Cit9CisKKy0gKHZv
aWQpc2V0TmVlZHNEaXNwbGF5OihCT09MKWZsYWcKK3sKKyAgICBMT0coVmlldywgIiVAIHNldE5l
ZWRzRGlzcGxheTolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7CisgICAgW3N1cGVy
IHNldE5lZWRzRGlzcGxheTpmbGFnXTsKK30KKworLSAodm9pZClzZXROZWVkc0xheW91dDogKEJP
T0wpZmxhZworeworICAgIExPRyhWaWV3LCAiJUAgc2V0TmVlZHNMYXlvdXQ6JUAiLCBzZWxmLCBm
bGFnID8gQCJZRVMiIDogQCJOTyIpOworICAgIGlmICghZmxhZykKKyAgICAgICAgcmV0dXJuOyAv
LyBUaGVyZSdzIG5vIHdheSB0byBzYXkgeW91IGRvbid0IG5lZWQgYSBsYXlvdXQuCisgICAgaWYg
KEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYgKGZyYW1l
LT5kb2N1bWVudCgpICYmIGZyYW1lLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXco
KSkKKyAgICAgICAgICAgIHZpZXctPnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQorfQorCistICh2
b2lkKXNldE5lZWRzVG9BcHBseVN0eWxlczogKEJPT0wpZmxhZworeworICAgIExPRyhWaWV3LCAi
JUAgc2V0TmVlZHNUb0FwcGx5U3R5bGVzOiVAIiwgc2VsZiwgZmxhZyA/IEAiWUVTIiA6IEAiTk8i
KTsKKyAgICBfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzID0gZmxhZzsKK30KKworLSAodm9p
ZClkcmF3U2luZ2xlUmVjdDooTlNSZWN0KXJlY3QKK3sKKyAgICBbTlNHcmFwaGljc0NvbnRleHQg
c2F2ZUdyYXBoaWNzU3RhdGVdOworICAgIE5TUmVjdENsaXAocmVjdCk7CisgICAgICAgIAorICAg
IEFTU0VSVChbW3NlbGYgc3VwZXJ2aWV3XSBpc0tpbmRPZkNsYXNzOltXZWJDbGlwVmlldyBjbGFz
c11dKTsKKworICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXddIHNldEFkZGl0aW9u
YWxDbGlwOnJlY3RdOworCisgICAgQHRyeSB7CisgICAgICAgIGlmIChbc2VsZiBfdHJhbnNwYXJl
bnRCYWNrZ3JvdW5kXSkgeworICAgICAgICAgICAgW1tOU0NvbG9yIGNsZWFyQ29sb3JdIHNldF07
CisgICAgICAgICAgICBOU1JlY3RGaWxsIChyZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIFtb
c2VsZiBfZnJhbWVdIF9kcmF3UmVjdDpyZWN0IGNvbnRlbnRzT25seTpZRVNdOworCisgICAgICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisKKyAgICAgICAgLy8gVGhpcyBo
YWNrIGlzIG5lZWRlZCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzUwMjM1NDU+LiBXZSBjYW4gaGl0IGEg
cmFjZSBjb25kaXRpb24gd2hlcmUgZHJhd1JlY3Qgd2lsbCBiZQorICAgICAgICAvLyBjYWxsZWQg
YWZ0ZXIgdGhlIFdlYlZpZXcgaGFzIGNsb3NlZC4gSWYgdGhlIGNsaWVudCBkaWQgbm90IHByb3Bl
cmx5IGNsb3NlIHRoZSBXZWJWaWV3IGFuZCBzZXQgdGhlIAorICAgICAgICAvLyBVSURlbGVnYXRl
IHRvIG5pbCwgdGhlbiB0aGUgVUlEZWxlZ2F0ZSB3aWxsIGJlIHN0YWxlIGFuZCB0aGlzIGNvZGUg
d2lsbCBjcmFzaC4gCisgICAgICAgIHN0YXRpYyBCT09MIHZlcnNpb24zT3JMYXRlckNsaWVudCA9
IFdlYktpdExpbmtlZE9uT3JBZnRlcihXRUJLSVRfRklSU1RfVkVSU0lPTl9XSVRIT1VUX1FVSUNL
Qk9PS1NfUVVJUkspOworICAgICAgICBpZiAodmVyc2lvbjNPckxhdGVyQ2xpZW50KQorICAgICAg
ICAgICAgW1t3ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlk
RHJhd1JlY3Q6W3dlYlZpZXcgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpzZWxmXV07CisKKyAg
ICAgICAgaWYgKFdlYk5vZGVIaWdobGlnaHQgKmN1cnJlbnRIaWdobGlnaHQgPSBbd2ViVmlldyBj
dXJyZW50Tm9kZUhpZ2hsaWdodF0pCisgICAgICAgICAgICBbY3VycmVudEhpZ2hsaWdodCBzZXRO
ZWVkc1VwZGF0ZUluVGFyZ2V0Vmlld1JlY3Q6W3NlbGYgY29udmVydFJlY3Q6cmVjdCB0b1ZpZXc6
W2N1cnJlbnRIaWdobGlnaHQgdGFyZ2V0Vmlld11dXTsKKworICAgICAgICBbKFdlYkNsaXBWaWV3
ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFkZGl0aW9uYWxDbGlwXTsKKworICAgICAgICBbTlNH
cmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOworICAgIH0gQGNhdGNoIChOU0V4
Y2VwdGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKKyAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxm
IHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07CisgICAgICAgIFtOU0dyYXBoaWNzQ29u
dGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CisgICAgICAgIExPR19FUlJPUigiRXhjZXB0aW9u
IGNhdWdodCB3aGlsZSBkcmF3aW5nOiAlQCIsIGxvY2FsRXhjZXB0aW9uKTsKKyAgICAgICAgW2xv
Y2FsRXhjZXB0aW9uIHJhaXNlXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVj
dClyZWN0Cit7CisgICAgQVNTRVJUX01BSU5fVEhSRUFEKCk7CisgICAgTE9HKFZpZXcsICIlQCBk
cmF3aW5nIiwgc2VsZik7CisKKyAgICBjb25zdCBOU1JlY3QgKnJlY3RzOworICAgIE5TSW50ZWdl
ciBjb3VudDsKKyAgICBbc2VsZiBnZXRSZWN0c0JlaW5nRHJhd246JnJlY3RzIGNvdW50OiZjb3Vu
dF07CisKKyAgICBCT09MIHN1YnZpZXdzV2VyZVNldEFzaWRlID0gX3ByaXZhdGUtPnN1YnZpZXdz
U2V0QXNpZGU7CisgICAgaWYgKHN1YnZpZXdzV2VyZVNldEFzaWRlKQorICAgICAgICBbc2VsZiBf
cmVzdG9yZVN1YnZpZXdzXTsKKworI2lmZGVmIExPR19USU1FUworICAgIGRvdWJsZSBzdGFydCA9
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOworI2VuZGlmCisKKyAgICBpZiAoW1tzZWxmIF93
ZWJWaWV3XSBfbXVzdERyYXdVbmlvbmVkUmVjdDpyZWN0IHNpbmdsZVJlY3RzOnJlY3RzIGNvdW50
OmNvdW50XSkKKyAgICAgICAgW3NlbGYgZHJhd1NpbmdsZVJlY3Q6cmVjdF07CisgICAgZWxzZQor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBbc2Vs
ZiBkcmF3U2luZ2xlUmVjdDpyZWN0c1tpXV07CisKKyNpZmRlZiBMT0dfVElNRVMKKyAgICBkb3Vi
bGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExP
RyhUaW1pbmcsICIlcyBkcmF3IHNlY29uZHMgPSAlZiIsIHdpZGdldC0+cGFydCgpLT5iYXNlVVJM
KCkuVVJMKCkubGF0aW4xKCksIHRoaXNUaW1lKTsKKyNlbmRpZgorCisgICAgaWYgKHN1YnZpZXdz
V2VyZVNldEFzaWRlKQorICAgICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107CisgICAgICAg
IAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoW1tzZWxmIF93ZWJW
aWV3XSBfbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbl0pIHsKKyAgICAgICAgLy8g
RGlzYWJsZSBzY3JlZW4gdXBkYXRlcyBzbyB0aGF0IGRyYXdpbmcgaW50byB0aGUgTlNWaWV3IGFu
ZAorICAgICAgICAvLyBDQUxheWVyIHVwZGF0ZXMgYXBwZWFyIG9uIHRoZSBzY3JlZW4gYXQgdGhl
IHNhbWUgdGltZS4KKyAgICAgICAgW1tzZWxmIHdpbmRvd10gZGlzYWJsZVNjcmVlblVwZGF0ZXNV
bnRpbEZsdXNoXTsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gZmx1c2hdOworICAgICAgICBbW3Nl
bGYgX3dlYlZpZXddIF9zZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uOk5PXTsK
KyAgICB9CisjZW5kaWYKK30KKworLy8gVHVybiBvZmYgdGhlIGFkZGl0aW9uYWwgY2xpcCB3aGls
ZSBjb21wdXRpbmcgb3VyIHZpc2libGVSZWN0LgorLSAoTlNSZWN0KXZpc2libGVSZWN0Cit7Cisg
ICAgaWYgKCEoW1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViQ2xpcFZpZXcgY2xh
c3NdXSkpCisgICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3RdOworICAgICAgICAKKyAg
ICBXZWJDbGlwVmlldyAqY2xpcFZpZXcgPSAoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXdd
OworCisgICAgQk9PTCBoYXNBZGRpdGlvbmFsQ2xpcCA9IFtjbGlwVmlldyBoYXNBZGRpdGlvbmFs
Q2xpcF07CisgICAgaWYgKCFoYXNBZGRpdGlvbmFsQ2xpcCkgeworICAgICAgICByZXR1cm4gW3N1
cGVyIHZpc2libGVSZWN0XTsKKyAgICB9CisgICAgCisgICAgTlNSZWN0IGFkZGl0aW9uYWxDbGlw
ID0gW2NsaXBWaWV3IGFkZGl0aW9uYWxDbGlwXTsKKyAgICBbY2xpcFZpZXcgcmVzZXRBZGRpdGlv
bmFsQ2xpcF07CisgICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW3N1cGVyIHZpc2libGVSZWN0XTsK
KyAgICBbY2xpcFZpZXcgc2V0QWRkaXRpb25hbENsaXA6YWRkaXRpb25hbENsaXBdOworICAgIHJl
dHVybiB2aXNpYmxlUmVjdDsKK30KKworLSAoQk9PTClpc0ZsaXBwZWQgCit7CisgICAgcmV0dXJu
IFlFUzsKK30KKworLSAodm9pZCl3aW5kb3dEaWRCZWNvbWVLZXk6KE5TTm90aWZpY2F0aW9uICop
bm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5fbnAoKSkgeworICAgICAgICBb
c2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNh
dGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE5T
V2luZG93ICprZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9uIG9iamVjdF07CisKKyAgICBpZiAoa2V5
V2luZG93ID09IFtzZWxmIHdpbmRvd10pCisgICAgICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNl
cnZlcl07CisKKyAgICBpZiAoa2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwga2V5V2luZG93
ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKQorICAgICAgICBbc2VsZiBfdXBkYXRl
Rm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKK30KKworLSAodm9pZCl3aW5kb3dEaWRSZXNpZ25LZXk6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5f
bnAoKSkgeworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3
aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIE5TV2luZG93ICpmb3JtZXJLZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9u
IG9iamVjdF07CisKKyAgICBpZiAoZm9ybWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10pCisg
ICAgICAgIFtzZWxmIHJlbW92ZU1vdXNlTW92ZWRPYnNlcnZlcl07CisKKyAgICBpZiAoZm9ybWVy
S2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwgZm9ybWVyS2V5V2luZG93ID09IFtbc2VsZiB3
aW5kb3ddIGF0dGFjaGVkU2hlZXRdKSB7CisgICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGVdOworICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVy
dGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgfQorfQorCistICh2b2lkKXdpbmRvd1dp
bGxDbG9zZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIXB0aHJl
YWRfbWFpbl9ucCgpKSB7CisgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVh
ZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERvbmU6Tk9dOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZl
cnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxl
cl0gZGVzdHJveUFsbFBsdWdpbnNdOworfQorCistICh2b2lkKXdpbmRvd1dpbGxPcmRlck9uU2Ny
ZWVuOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghW1tzZWxmIF93
ZWJWaWV3XSBzaG91bGRVcGRhdGVXaGlsZU9mZnNjcmVlbl0pCisgICAgICAgIFtzZWxmIHNldE5l
ZWRzRGlzcGxheTpZRVNdOworfQorCistICh2b2lkKXNjcm9sbFdoZWVsOihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2
ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEg
bmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBh
dXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9t
IGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tl
dmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmV2ZW50SGFuZGxlcigpLT53
aGVlbEV2ZW50KGV2ZW50KSkKKyAgICAgICAgW3N1cGVyIHNjcm9sbFdoZWVsOmV2ZW50XTsKK30K
KworLSAoQk9PTClfaXNTZWxlY3Rpb25FdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgTlNQ
b2ludCBwb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10g
ZnJvbVZpZXc6bmlsXTsKKyAgICByZXR1cm4gW1tbc2VsZiBlbGVtZW50QXRQb2ludDpwb2ludCBh
bGxvd1NoYWRvd0NvbnRlbnQ6WUVTXSBvYmplY3RGb3JLZXk6V2ViRWxlbWVudElzU2VsZWN0ZWRL
ZXldIGJvb2xWYWx1ZV07Cit9CisKKy0gKEJPT0wpYWNjZXB0c0ZpcnN0TW91c2U6KE5TRXZlbnQg
KilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRo
aXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hp
bmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0
aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0
IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAg
ICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgTlNWaWV3ICpoaXRWaWV3ID0g
W3NlbGYgX2hpdFZpZXdGb3JFdmVudDpldmVudF07CisgICAgV2ViSFRNTFZpZXcgKmhpdEhUTUxW
aWV3ID0gW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8gKFdlYkhUTUxWaWV3
ICopaGl0VmlldyA6IG5pbDsKKyAgICAKKyNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCisg
ICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJl
aGF2aW9yQWx3YXlzQWNjZXB0c0ZpcnN0TW91c2VdKQorICAgICAgICByZXR1cm4gWUVTOworI2Vu
ZGlmCisgICAgCisgICAgaWYgKGhpdEhUTUxWaWV3KSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbaGl0SFRNTFZpZXcg
X2ZyYW1lXSkpIHsKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldEFj
dGl2YXRpb25FdmVudE51bWJlcihbZXZlbnQgZXZlbnROdW1iZXJdKTsKKyAgICAgICAgICAgIFto
aXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworICAgICAgICAgICAgaWYgKFto
aXRIVE1MVmlldyBfaXNTZWxlY3Rpb25FdmVudDpldmVudF0pCisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZlbnRNYXlTdGFydERyYWcoZXZlbnQp
OworICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpuaWxdOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBbaGl0Vmll
dyBhY2NlcHRzRmlyc3RNb3VzZTpldmVudF07Cit9CisKKy0gKEJPT0wpc2hvdWxkRGVsYXlXaW5k
b3dPcmRlcmluZ0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEg
Y2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2
ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2Ug
dGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhl
IGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lk
ZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNl
XTsKKworICAgIE5TVmlldyAqaGl0VmlldyA9IFtzZWxmIF9oaXRWaWV3Rm9yRXZlbnQ6ZXZlbnRd
OworICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFtoaXRWaWV3IGlzS2luZE9mQ2xhc3M6
W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZpZXcgOiBuaWw7CisgICAgaWYgKGhp
dEhUTUxWaWV3KSB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlmIChb
aGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRdKQorICAgICAgICAgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkgeworICAgICAgICAg
ICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmV2ZW50TWF5U3RhcnRE
cmFnKGV2ZW50KTsKKyAgICAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2
ZW50Om5pbF07CisgICAgICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIHJldHVybiBbaGl0VmlldyBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6ZXZl
bnRdOworfQorCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdo
dCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwor
ICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBh
dXRvcmVsZWFzZV07CisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHByb3RlY3RvciA9IHNl
bGY7CisgICAgaWYgKFtbc2VsZiBpbnB1dENvbnRleHRdIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50
c10gJiYgW1tzZWxmIGlucHV0Q29udGV4dF0gaGFuZGxlTW91c2VFdmVudDpldmVudF0pCisgICAg
ICAgIHJldHVybjsKKworICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gWUVT
OworCisgICAgLy8gUmVjb3JkIHRoZSBtb3VzZSBkb3duIHBvc2l0aW9uIHNvIHdlIGNhbiBkZXRl
cm1pbmUgZHJhZyBoeXN0ZXJlc2lzLgorICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpldmVu
dF07CisKKyAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0
TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKKyAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFn
ZXIgd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5k
bGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgZ290byBkb25lOworCisgICAgW19wcml2YXRl
LT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworCisg
ICAgLy8gSWYgdGhlIHdlYiBwYWdlIGhhbmRsZXMgdGhlIGNvbnRleHQgbWVudSBldmVudCBhbmQg
bWVudUZvckV2ZW50OiByZXR1cm5zIG5pbCwgd2UnbGwgZ2V0IGNvbnRyb2wgY2xpY2sgZXZlbnRz
IGhlcmUuCisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXNzIHRoZW0gYWxvbmcgdG8gS0hUTUwg
YSBzZWNvbmQgdGltZS4KKyAgICBpZiAoIShbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0NvbnRy
b2xLZXlNYXNrKSkgeworICAgICAgICBfcHJpdmF0ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVu
dHMgPSBOTzsKKworICAgICAgICAvLyBEb24ndCBkbyBhbnkgbW91c2VvdmVyIHdoaWxlIHRoZSBt
b3VzZSBpcyBkb3duLgorICAgICAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXJd
OworCisgICAgICAgIC8vIExldCBXZWJDb3JlIGdldCBhIGNoYW5jZSB0byBkZWFsIHdpdGggdGhl
IGV2ZW50LiBUaGlzIHdpbGwgY2FsbCBiYWNrIHRvIHVzCisgICAgICAgIC8vIHRvIHN0YXJ0IHRo
ZSBhdXRvc2Nyb2xsIHRpbWVyIGlmIGFwcHJvcHJpYXRlLgorICAgICAgICBpZiAoRnJhbWUqIGNv
cmVmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgICAgICBjb3JlZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5tb3VzZURvd24oZXZlbnQpOworICAgIH0KKworZG9uZToKKyAgICBfcHJp
dmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IE5POworfQorCistICh2b2lkKWRyYWdJbWFn
ZTooTlNJbWFnZSAqKWRyYWdJbWFnZQorICAgICAgICAgICAgICAgYXQ6KE5TUG9pbnQpYXQKKyAg
ICAgICAgICAgb2Zmc2V0OihOU1NpemUpb2Zmc2V0CisgICAgICAgICAgICBldmVudDooTlNFdmVu
dCAqKWV2ZW50CisgICAgICAgcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAor
ICAgICAgICAgICBzb3VyY2U6KGlkKXNvdXJjZQorICAgICAgICBzbGlkZUJhY2s6KEJPT0wpc2xp
ZGVCYWNrCit7CisgICAgQVNTRVJUKHNlbGYgPT0gW3NlbGYgX3RvcEhUTUxWaWV3XSk7CisgICAg
W3N1cGVyIGRyYWdJbWFnZTpkcmFnSW1hZ2UgYXQ6YXQgb2Zmc2V0Om9mZnNldCBldmVudDpldmVu
dCBwYXN0ZWJvYXJkOnBhc3RlYm9hcmQgc291cmNlOnNvdXJjZSBzbGlkZUJhY2s6c2xpZGVCYWNr
XTsKK30KKworLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8v
IFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4g
YSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWln
aHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcK
KyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHBy
b2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0g
YXV0b3JlbGVhc2VdOworCisgICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIg
PSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07CisgICAgaWYgKFtjdXJyZW50
SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1h
bmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCisgICAgICAgIHJldHVybjsKKworICAgIFtz
ZWxmIHJldGFpbl07CisKKyAgICBpZiAoIV9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2
ZW50cykgeworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkg
eworICAgICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQorICAgICAgICAg
ICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VEcmFnZ2VkKGV2
ZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFtzZWxmIHJlbGVhc2VdOworfQorCistIChO
U0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrRm9yTG9jYWw6KEJPT0wp
aXNMb2NhbAoreworICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhU
TUxWaWV3XSk7CisgICAgCisgICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKTsK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25Ob25lOworCisg
ICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBvdmVycmlkZSB0aGUgc291cmNlIHByb3ZpZGVkIG9wZXJh
dGlvbiBoZXJlPyAgV2h5IG5vdCBpbiBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnCisgICAgaWYg
KHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNvdXJjZURyYWdPcGVyYXRpb24oKSA9PSBEcmFnT3Bl
cmF0aW9uTm9uZSkKKyAgICAgICAgcmV0dXJuIE5TRHJhZ09wZXJhdGlvbkdlbmVyaWMgfCBOU0Ry
YWdPcGVyYXRpb25Db3B5OworCisgICAgcmV0dXJuIChOU0RyYWdPcGVyYXRpb24pcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKS0+c291cmNlRHJhZ09wZXJhdGlvbigpOworfQorCistICh2b2lkKWRyYWdn
ZWRJbWFnZTooTlNJbWFnZSAqKWltYWdlIG1vdmVkVG86KE5TUG9pbnQpc2NyZWVuTG9jCit7Cisg
ICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKKyAg
ICAKKyAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNj
cmVlblRvQmFzZTpzY3JlZW5Mb2NdOworICAgIE5TUG9pbnQgd2luZG93TW91c2VMb2MgPSB3aW5k
b3dJbWFnZUxvYzsKKyAgICAKKyAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZp
ZXddKSkgeworICAgICAgICBEcmFnQ29udHJvbGxlciogZHJhZ0NvbnRyb2xsZXIgPSBwYWdlLT5k
cmFnQ29udHJvbGxlcigpOworICAgICAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gTlNNYWtl
UG9pbnQod2luZG93SW1hZ2VMb2MueCArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueCgp
LCB3aW5kb3dJbWFnZUxvYy55ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS55KCkpOwor
ICAgIH0KKyAgICAKKyAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhZ1NvdXJjZU1vdmVkVG86d2luZG93
TW91c2VMb2NdOworfQorCistICh2b2lkKWRyYWdnZWRJbWFnZTooTlNJbWFnZSAqKWFuSW1hZ2Ug
ZW5kZWRBdDooTlNQb2ludClhUG9pbnQgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRpb24pb3BlcmF0
aW9uCit7CisgICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZp
ZXddKTsKKyAgICAKKyAgICBOU1BvaW50IHdpbmRvd0ltYWdlTG9jID0gW1tzZWxmIHdpbmRvd10g
Y29udmVydFNjcmVlblRvQmFzZTphUG9pbnRdOworICAgIE5TUG9pbnQgd2luZG93TW91c2VMb2Mg
PSB3aW5kb3dJbWFnZUxvYzsKKyAgICAKKyAgICBpZiAoUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYg
X3dlYlZpZXddKSkgeworICAgICAgICBEcmFnQ29udHJvbGxlciogZHJhZ0NvbnRyb2xsZXIgPSBw
YWdlLT5kcmFnQ29udHJvbGxlcigpOworICAgICAgICB3aW5kb3dNb3VzZUxvYyA9IE5TTWFrZVBv
aW50KHdpbmRvd0ltYWdlTG9jLnggKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLngoKSwg
d2luZG93SW1hZ2VMb2MueSArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueSgpKTsKKyAg
ICAgICAgZHJhZ0NvbnRyb2xsZXItPmRyYWdFbmRlZCgpOworICAgIH0KKyAgICAKKyAgICBbW3Nl
bGYgX2ZyYW1lXSBfZHJhZ1NvdXJjZUVuZGVkQXQ6d2luZG93TW91c2VMb2Mgb3BlcmF0aW9uOm9w
ZXJhdGlvbl07CisgICAgCisgICAgLy8gUHJldmVudCBxdWV1ZWQgbW91c2VEcmFnZ2VkIGV2ZW50
cyBmcm9tIGNvbWluZyBhZnRlciB0aGUgZHJhZyBhbmQgZmFrZSBtb3VzZVVwIGV2ZW50LgorICAg
IF9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IFlFUzsKKyAgICAKKyAgICAv
LyBPbmNlIHRoZSBkcmFnZ2luZyBtYWNoaW5lcnkga2lja3MgaW4sIHdlIG5vIGxvbmdlciBnZXQg
bW91c2UgZHJhZ3Mgb3IgdGhlIHVwIGV2ZW50LgorICAgIC8vIFdlYkNvcmUgZXhwZWN0cyB0byBn
ZXQgYmFsYW5jZWQgZG93bi91cCdzLCBzbyB3ZSBtdXN0IGZha2UgdXAgYSBtb3VzZXVwLgorICAg
IE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xlZnRN
b3VzZVVwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9uOndpbmRvd01vdXNlTG9jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRl
IHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVy
XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDpb
W05TQXBwIGN1cnJlbnRFdmVudF0gY29udGV4dF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07Cisg
ICAgW3NlbGYgbW91c2VVcDpmYWtlRXZlbnRdOyAvLyBUaGlzIHdpbGwgYWxzbyB1cGRhdGUgdGhl
IG1vdXNlb3ZlciBzdGF0ZS4KK30KKworLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZpbGVz
RHJvcHBlZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERlc3RpbmF0aW9uCit7CisgICAgTlNG
aWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKKyAgICBOU1VSTCAqZHJhZ2dpbmdJbWFnZVVSTCA9
IG5pbDsKKyAgICAKKyAgICBpZiAoV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIHRpZmZSZXNvdXJjZSA9
IFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXSkgeworICAgICAgICAKKyAgICAgICAg
U2hhcmVkQnVmZmVyICpidWZmZXIgPSBzdGF0aWNfY2FzdDxDYWNoZWRSZXNvdXJjZSo+KHRpZmZS
ZXNvdXJjZSktPmRhdGEoKTsKKyAgICAgICAgaWYgKCFidWZmZXIpCisgICAgICAgICAgICBnb3Rv
IG5vUHJvbWlzZWREYXRhOworICAgICAgICAKKyAgICAgICAgTlNEYXRhICpkYXRhID0gYnVmZmVy
LT5jcmVhdGVOU0RhdGEoKTsKKyAgICAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSB0aWZm
UmVzb3VyY2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpOworICAgICAgICBkcmFnZ2luZ0lt
YWdlVVJMID0gW3Jlc3BvbnNlIFVSTF07CisgICAgICAgIHdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFw
cGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0gYXV0b3JlbGVhc2Vd
OworICAgICAgICBOU1N0cmluZyogZmlsZW5hbWUgPSBbcmVzcG9uc2Ugc3VnZ2VzdGVkRmlsZW5h
bWVdOworICAgICAgICBOU1N0cmluZyogdHJ1ZUV4dGVuc2lvbih0aWZmUmVzb3VyY2UtPmltYWdl
KCktPmZpbGVuYW1lRXh0ZW5zaW9uKCkpOworICAgICAgICBpZiAoIVtmaWxlbmFtZSBtYXRjaGVz
RXh0ZW5zaW9uRXF1aXZhbGVudDp0cnVlRXh0ZW5zaW9uXSkKKyAgICAgICAgICAgIGZpbGVuYW1l
ID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi4iXSBzdHJpbmdCeUFwcGVu
ZGluZ1N0cmluZzp0cnVlRXh0ZW5zaW9uXTsKKyAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVk
RmlsZW5hbWU6ZmlsZW5hbWVdOworICAgIH0KKyAgICAKK25vUHJvbWlzZWREYXRhOgorICAgIAor
ICAgIGlmICghd3JhcHBlcikgeworICAgICAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBb
c2VsZiBfaXNUb3BIVE1MVmlld10pOworICAgICAgICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBf
d2ViVmlld10pOworICAgICAgICAKKyAgICAgICAgLy9JZiBhIGxvYWQgb2NjdXJzIG1pZHdheSB0
aHJvdWdoIGEgZHJhZywgdGhlIHZpZXcgbWF5IGJlIGRldGFjaGVkLCB3aGljaCBnaXZlcworICAg
ICAgICAvL3VzIG5vIGFiaWxpdHkgdG8gZ2V0IHRvIHRoZSBvcmlnaW5hbCBQYWdlLCBzbyB3ZSBj
YW5ub3QgYWNjZXNzIGFueSBkcmFnIHN0YXRlCisgICAgICAgIC8vRklYTUU6IGlzIHRoZXJlIGEg
d2F5IHRvIHJlY292ZXI/CisgICAgICAgIGlmICghcGFnZSkgCisgICAgICAgICAgICByZXR1cm4g
bmlsOyAKKyAgICAgICAgCisgICAgICAgIGNvbnN0IEtVUkwmIGltYWdlVVJMID0gcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKS0+ZHJhZ2dpbmdJbWFnZVVSTCgpOworICAgICAgICBBU1NFUlQoIWltYWdl
VVJMLmlzRW1wdHkoKSk7CisgICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBpbWFnZVVSTDsKKwor
ICAgICAgICB3cmFwcGVyID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZmlsZVdyYXBwZXJGb3JVUkw6
ZHJhZ2dpbmdJbWFnZVVSTF07CisgICAgfQorICAgIAorICAgIGlmICh3cmFwcGVyID09IG5pbCkg
eworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZS4iKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVwb3J0IGFuIGVycm9y
IGlmIHdlIGZhaWwgdG8gY3JlYXRlIGEgZmlsZS4KKyAgICBOU1N0cmluZyAqcGF0aCA9IFtbZHJv
cERlc3RpbmF0aW9uIHBhdGhdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbd3JhcHBl
ciBwcmVmZXJyZWRGaWxlbmFtZV1dOworICAgIHBhdGggPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIF93ZWJraXRfcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGg6cGF0aF07Cisg
ICAgaWYgKCFbd3JhcHBlciB3cml0ZVRvRmlsZTpwYXRoIGF0b21pY2FsbHk6Tk8gdXBkYXRlRmls
ZW5hbWVzOllFU10pCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBm
aWxlIHZpYSAtW05TRmlsZVdyYXBwZXIgd3JpdGVUb0ZpbGU6YXRvbWljYWxseTp1cGRhdGVGaWxl
bmFtZXM6XSIpOworICAgIAorICAgIGlmIChkcmFnZ2luZ0ltYWdlVVJMKQorICAgICAgICBbW05T
RmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJraXRfc2V0TWV0YWRhdGFVUkw6W2RyYWdn
aW5nSW1hZ2VVUkwgYWJzb2x1dGVTdHJpbmddIHJlZmVycmVyOm5pbCBhdFBhdGg6cGF0aF07Cisg
ICAgCisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbcGF0aCBsYXN0UGF0aENv
bXBvbmVudF1dOworfQorCistICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAg
IC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBy
dW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQg
bWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNp
bmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBh
IHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFp
bl0gYXV0b3JlbGVhc2VdOworCisgICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07CisK
KyAgICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdl
ciBjdXJyZW50SW5wdXRNYW5hZ2VyXTsKKyAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2Fu
dHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5kbGVNb3Vz
ZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgW3NlbGYgcmV0YWluXTsKKwor
ICAgIFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5w
YWdlKCkpCisgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm1v
dXNlVXAoZXZlbnQpOworICAgIH0KKyAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VF
dmVudF07CisKKyAgICBbc2VsZiByZWxlYXNlXTsKK30KKworLSAodm9pZCltb3VzZU1vdmVkTm90
aWZpY2F0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIFtzZWxmIF91
cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6W1tub3RpZmljYXRpb24gdXNlckluZm9dIG9iamVjdEZv
cktleTpAIk5TRXZlbnQiXV07Cit9CisKKy8vIHJldHVybmluZyBZRVMgZnJvbSB0aGlzIG1ldGhv
ZCBpcyB0aGUgd2F5IHdlIHRlbGwgQXBwS2l0IHRoYXQgaXQgaXMgb2sgZm9yIHRoaXMgdmlldwor
Ly8gdG8gYmUgaW4gdGhlIGtleSBsb29wIGV2ZW4gd2hlbiAidGFiIHRvIGFsbCBjb250cm9scyIg
aXMgbm90IG9uLgorLSAoQk9PTCluZWVkc1BhbmVsVG9CZWNvbWVLZXkKK3sKKyAgICByZXR1cm4g
WUVTOworfQorCisvLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCByZXR1
cm4gYW55dGhpbmcgdGhyb3VnaCB0aGUgTlNUZXh0SW5wdXQKKy8vIEFQSSB3aGVuIGFuIGVkaXRh
YmxlIHJlZ2lvbiBpcyBub3QgY3VycmVudGx5IGZvY3VzZWQuCitzdGF0aWMgQk9PTCBpc1RleHRJ
bnB1dChGcmFtZSogY29yZUZyYW1lKQoreworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgIWNvcmVG
cmFtZS0+c2VsZWN0aW9uKCktPmlzTm9uZSgpICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlz
Q29udGVudEVkaXRhYmxlKCk7Cit9CisKK3N0YXRpYyBCT09MIGlzSW5QYXNzd29yZEZpZWxkKEZy
YW1lKiBjb3JlRnJhbWUpCit7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5pc0luUGFzc3dvcmRGaWVsZCgpOworfQorCistIChCT09MKWJlY29tZUZpcnN0
UmVzcG9uZGVyCit7CisgICAgTlNTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gTlNEaXJl
Y3RTZWxlY3Rpb247CisgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1pbmdQcm9n
cmFtbWF0aWNGb2N1c10pCisgICAgICAgIGRpcmVjdGlvbiA9IFtbc2VsZiB3aW5kb3ddIGtleVZp
ZXdTZWxlY3Rpb25EaXJlY3Rpb25dOworCisgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3Rp
dmVTdGF0ZV07CisgICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07CisgICAgCisgICAgRnJhbWUq
IGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4gWUVTOworCisgICAgQk9PTCBleHBvc2VJbnB1dENvbnRleHQgPSBpc1RleHRJbnB1dChm
cmFtZSkgJiYgIWlzSW5QYXNzd29yZEZpZWxkKGZyYW1lKTsKKyAgICBpZiAoZXhwb3NlSW5wdXRD
b250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKKyAgICAgICAgX3ByaXZh
dGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKKyAgICAgICAgW05T
QXBwIHVwZGF0ZVdpbmRvd3NdOworICAgIH0KKworICAgIGZyYW1lLT5lZGl0b3IoKS0+c2V0U3Rh
cnROZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOworCisgICAgaWYgKGRpcmVjdGlvbiA9PSBOU0Rp
cmVjdFNlbGVjdGlvbikKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAgIFBhZ2UqIHBhZ2UgPSBm
cmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKworICAg
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUoZnJhbWUpOworICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgZG9jdW1l
bnQtPnNldEZvY3VzZWROb2RlKDApOworICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRJ
bml0aWFsRm9jdXMoZGlyZWN0aW9uID09IE5TU2VsZWN0aW5nTmV4dCA/IEZvY3VzRGlyZWN0aW9u
Rm9yd2FyZCA6IEZvY3VzRGlyZWN0aW9uQmFja3dhcmQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmN1cnJlbnRLZXli
b2FyZEV2ZW50KCkuZ2V0KCkpOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpcmVzaWdu
Rmlyc3RSZXNwb25kZXIKK3sKKyAgICBCT09MIHJlc2lnbiA9IFtzdXBlciByZXNpZ25GaXJzdFJl
c3BvbmRlcl07CisgICAgaWYgKHJlc2lnbikgeworICAgICAgICBfcHJpdmF0ZS0+cmVzaWduaW5n
Rmlyc3RSZXNwb25kZXIgPSBZRVM7CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIg
ZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgaWYgKCFbc2VsZiBt
YWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pIHsgCisgICAgICAgICAgICBbc2VsZiBkZXNlbGVj
dEFsbF07CisgICAgICAgICAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10gX2lzUGVyZm9ybWluZ1By
b2dyYW1tYXRpY0ZvY3VzXSkKKyAgICAgICAgICAgICAgICBbc2VsZiBjbGVhckZvY3VzXTsKKyAg
ICAgICAgfQorICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKKyAg
ICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyID0gTk87CisgICAgfQorICAg
IHJldHVybiByZXNpZ247Cit9CisKKy0gKHZvaWQpc2V0RGF0YVNvdXJjZTooV2ViRGF0YVNvdXJj
ZSAqKWRhdGFTb3VyY2UgCit7CisgICAgQVNTRVJUKGRhdGFTb3VyY2UpOworICAgIGlmIChfcHJp
dmF0ZS0+ZGF0YVNvdXJjZSAhPSBkYXRhU291cmNlKSB7CisgICAgICAgIEFTU0VSVCghX3ByaXZh
dGUtPmNsb3NlZCk7CisgICAgICAgIEJPT0wgaGFkRGF0YVNvdXJjZSA9IF9wcml2YXRlLT5kYXRh
U291cmNlICE9IG5pbDsKKworICAgICAgICBbZGF0YVNvdXJjZSByZXRhaW5dOworICAgICAgICBb
X3ByaXZhdGUtPmRhdGFTb3VyY2UgcmVsZWFzZV07CisgICAgICAgIF9wcml2YXRlLT5kYXRhU291
cmNlID0gZGF0YVNvdXJjZTsKKyAgICAgICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIHNl
dERhdGFTb3VyY2U6ZGF0YVNvdXJjZV07CisKKyAgICAgICAgaWYgKCFoYWREYXRhU291cmNlKQor
ICAgICAgICAgICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKKyAgICB9Cit9CisKKy0g
KHZvaWQpZGF0YVNvdXJjZVVwZGF0ZWQ6KFdlYkRhdGFTb3VyY2UgKilkYXRhU291cmNlCit7Cit9
CisKKy8vIFRoaXMgaXMgYW4gb3ZlcnJpZGUgb2YgYW4gTlNDb250cm9sIG1ldGhvZCB0aGF0IHdh
bnRzIHRvIHJlcGFpbnQgdGhlIGVudGlyZSB2aWV3IHdoZW4gdGhlIHdpbmRvdyByZXNpZ25zL2Jl
Y29tZXMKKy8vIGtleS4gIFdlYkhUTUxWaWV3IGlzIGFuIE5TQ29udHJvbCBvbmx5IGJlY2F1c2Ug
aXQgaG9zdHMgTlNDZWxscyB0aGF0IGFyZSBwYWludGVkIGJ5IFdlYkNvcmUncyBBcXVhIHRoZW1l
CisvLyByZW5kZXJlciAoYW5kIHRob3NlIGNlbGxzIG11c3QgYmUgaG9zdGVkIGJ5IGFuIGVuY2xv
c2luZyBOU0NvbnRyb2wgaW4gb3JkZXIgdG8gcGFpbnQgcHJvcGVybHkpLgorLSAodm9pZCl1cGRh
dGVDZWxsOihOU0NlbGwqKWNlbGwKK3sKK30KKworLy8gRG9lcyBzZXROZWVkc0Rpc3BsYXk6Tk8g
YXMgYSBzaWRlIGVmZmVjdCB3aGVuIHByaW50aW5nIGlzIGVuZGluZy4KKy8vIHBhZ2VXaWR0aCAh
PSAwIGltcGxpZXMgd2Ugd2lsbCByZWxheW91dCB0byBhIG5ldyB3aWR0aAorLSAodm9pZClfc2V0
UHJpbnRpbmc6KEJPT0wpcHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDooZmxvYXQpbWluUGFnZVdp
ZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZToo
Qk9PTClhZGp1c3RWaWV3U2l6ZQoreworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFt
ZV07CisgICAgTlNBcnJheSAqc3ViZnJhbWVzID0gW2ZyYW1lIGNoaWxkRnJhbWVzXTsKKyAgICB1
bnNpZ25lZCBuID0gW3N1YmZyYW1lcyBjb3VudF07CisgICAgdW5zaWduZWQgaTsKKyAgICBmb3Ig
KGkgPSAwOyBpICE9IG47ICsraSkgeworICAgICAgICBXZWJGcmFtZSAqc3ViZnJhbWUgPSBbc3Vi
ZnJhbWVzIG9iamVjdEF0SW5kZXg6aV07CisgICAgICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3
ID0gW3N1YmZyYW1lIGZyYW1lVmlld107CisgICAgICAgIGlmIChbW3N1YmZyYW1lIF9kYXRhU291
cmNlXSBfaXNEb2N1bWVudEhUTUxdKSB7CisgICAgICAgICAgICBbKFdlYkhUTUxWaWV3ICopW2Zy
YW1lVmlldyBkb2N1bWVudFZpZXddIF9zZXRQcmludGluZzpwcmludGluZyBtaW5pbXVtUGFnZVdp
ZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOmFkanVzdFZpZXdT
aXplXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwcmludGluZyAhPSBfcHJpdmF0ZS0+
cHJpbnRpbmcpIHsKKyAgICAgICAgW19wcml2YXRlLT5wYWdlUmVjdHMgcmVsZWFzZV07CisgICAg
ICAgIF9wcml2YXRlLT5wYWdlUmVjdHMgPSBuaWw7CisgICAgICAgIF9wcml2YXRlLT5wcmludGlu
ZyA9IHByaW50aW5nOworICAgICAgICBpZiAoIXByaW50aW5nKQorICAgICAgICAgICAgX3ByaXZh
dGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4gPSBOTzsKKyAgICAgICAgW3NlbGYgc2V0TmVlZHNUb0Fw
cGx5U3R5bGVzOllFU107CisgICAgICAgIFtzZWxmIHNldE5lZWRzTGF5b3V0OllFU107CisgICAg
ICAgIFtzZWxmIGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDptaW5QYWdlV2lkdGggbWF4aW11bVBh
Z2VXaWR0aDptYXhQYWdlV2lkdGggYWRqdXN0aW5nVmlld1NpemU6YWRqdXN0Vmlld1NpemVdOwor
ICAgICAgICBpZiAoIXByaW50aW5nKSB7CisgICAgICAgICAgICAvLyBDYW4ndCBkbyB0aGlzIHdo
ZW4gc3RhcnRpbmcgcHJpbnRpbmcgb3IgbmVzdGVkIHByaW50aW5nIHdvbid0IHdvcmssIHNlZSAz
NDkxNDI3LgorICAgICAgICAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5Ok5PXTsKKyAgICAgICAg
fQorICAgIH0KK30KKworLSAoQk9PTCljYW5QcmludEhlYWRlcnNBbmRGb290ZXJzCit7CisgICAg
cmV0dXJuIFlFUzsKK30KKworLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBjYXNlIHdoZXJlIHRo
ZSB3ZWJ2aWV3IGlzIGVtYmVkZGVkIGluIHRoZSB2aWV3IHRoYXQncyBiZWluZyBwcmludGVkLgor
Ly8gSXQgc2hvdWxkbid0IGJlIGNhbGxlZCB3aGVuIHRoZSB3ZWJ2aWV3IGlzIGJlaW5nIHByaW50
ZWQgZGlyZWN0bHkuCistICh2b2lkKWFkanVzdFBhZ2VIZWlnaHROZXc6KENHRmxvYXQgKiluZXdC
b3R0b20gdG9wOihDR0Zsb2F0KW9sZFRvcCBib3R0b206KENHRmxvYXQpb2xkQm90dG9tIGxpbWl0
OihDR0Zsb2F0KWJvdHRvbUxpbWl0Cit7CisgICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50
IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4KKyAgICAvLyBJZiB0aGUgV2ViSFRN
TFZpZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZlciBo
YXZlIHRvIGRvIHRoaXMuCisgICAgQk9PTCB3YXNJblByaW50aW5nTW9kZSA9IF9wcml2YXRlLT5w
cmludGluZzsKKyAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKQorICAgICAgICBbc2VsZiBfc2V0
UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYg
YWRqdXN0Vmlld1NpemU6Tk9dOworCisgICAgZmxvYXQgbmV3Qm90dG9tRmxvYXQgPSAqbmV3Qm90
dG9tOworICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBjb3JlKFtzZWxmIF9mcmFtZV0pLT52aWV3
KCkpCisgICAgICAgIHZpZXctPmFkanVzdFBhZ2VIZWlnaHQoJm5ld0JvdHRvbUZsb2F0LCBvbGRU
b3AsIG9sZEJvdHRvbSwgYm90dG9tTGltaXQpOworCisjaWZkZWYgX19MUDY0X18KKyAgICAvLyBJ
ZiB0aGUgbmV3IGJvdHRvbSBpcyBlcXVhbCB0byB0aGUgb2xkIGJvdHRvbSAod2hlbiBib3RoIGFy
ZSB0cmVhdGVkIGFzIGZsb2F0cyksIHdlIGp1c3QgY29weQorICAgIC8vIG9sZEJvdHRvbSBvdmVy
IHRvIG5ld0JvdHRvbS4gVGhpcyBwcmV2ZW50cyByb3VuZGluZyBlcnJvcnMgdGhhdCBjYW4gb2Nj
dXIgd2hlbiBjb252ZXJ0aW5nIG5ld0JvdHRvbUZsb2F0IHRvIGEgZG91YmxlLgorICAgIGlmIChm
YWJzKChmbG9hdClvbGRCb3R0b20gLSBuZXdCb3R0b21GbG9hdCkgPD0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmVwc2lsb24oKSkgCisgICAgICAgICpuZXdCb3R0b20gPSBvbGRCb3R0b207
CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgICpuZXdCb3R0b20gPSBuZXdCb3R0b21GbG9hdDsK
KyAgICAKKyAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKSB7CisgICAgICAgIE5TUHJpbnRPcGVy
YXRpb24gKmN1cnJlblByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9w
ZXJhdGlvbl07CisgICAgICAgIGlmIChjdXJyZW5QcmludE9wZXJhdGlvbikKKyAgICAgICAgICAg
IC8vIGRlbGF5IF9zZXRQcmludGluZzpOTyB1bnRpbCBiYWNrIHRvIG1haW4gbG9vcCBhcyB0aGlz
IG1ldGhvZCBtYXkgZ2V0IGNhbGxlZCByZXBlYXRlZGx5CisgICAgICAgICAgICBbc2VsZiBwZXJm
b3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDpj
dXJyZW5QcmludE9wZXJhdGlvbiBhZnRlckRlbGF5OjBdOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGFjdHVhbGx5IGV2ZXIgaW52b2tlZCwgaXQgcHJv
YmFibHkgc2hvdWxkbid0IGJlCisgICAgICAgICAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWlu
aW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpO
T107CisgICAgfQorfQorCistIChmbG9hdClfYXZhaWxhYmxlUGFwZXJXaWR0aEZvclByaW50T3Bl
cmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24KK3sKKyAgICBOU1ByaW50
SW5mbyAqcHJpbnRJbmZvID0gW3ByaW50T3BlcmF0aW9uIHByaW50SW5mb107CisgICAgcmV0dXJu
IFtwcmludEluZm8gcGFwZXJTaXplXS53aWR0aCAtIFtwcmludEluZm8gbGVmdE1hcmdpbl0gLSBb
cHJpbnRJbmZvIHJpZ2h0TWFyZ2luXTsKK30KKworLSAoZmxvYXQpX3NjYWxlRmFjdG9yRm9yUHJp
bnRPcGVyYXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJhdGlvbgoreworICAgIGZs
b2F0IHZpZXdXaWR0aCA9IE5TV2lkdGgoW3NlbGYgYm91bmRzXSk7CisgICAgaWYgKHZpZXdXaWR0
aCA8IDEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCIlQCBoYXMgbm8gd2lkdGggd2hlbiBwcmludGlu
ZyIsIHNlbGYpOworICAgICAgICByZXR1cm4gMS4wZjsKKyAgICB9CisKKyAgICBmbG9hdCB1c2Vy
U2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRpb24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rvcl07
CisgICAgZmxvYXQgbWF4U2hyaW5rVG9GaXRTY2FsZUZhY3RvciA9IDEuMGYgLyBQcmludGluZ01h
eGltdW1TaHJpbmtGYWN0b3I7CisgICAgZmxvYXQgc2hyaW5rVG9GaXRTY2FsZUZhY3RvciA9IFtz
ZWxmIF9hdmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRpb25d
L3ZpZXdXaWR0aDsKKyAgICBmbG9hdCBzaHJpbmtUb0F2b2lkT3JwaGFuID0gX3ByaXZhdGUtPmF2
b2lkaW5nUHJpbnRPcnBoYW4gPyAoMS4wZiAvIFByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0bWVu
dCkgOiAxLjBmOworICAgIHJldHVybiB1c2VyU2NhbGVGYWN0b3IgKiBNQVgobWF4U2hyaW5rVG9G
aXRTY2FsZUZhY3Rvciwgc2hyaW5rVG9GaXRTY2FsZUZhY3RvcikgKiBzaHJpbmtUb0F2b2lkT3Jw
aGFuOworfQorCisvLyBGSVhNRSAzNDkxMzQ0OiBUaGlzIGlzIGEgc2VjcmV0IEFwcEtpdC1pbnRl
cm5hbCBtZXRob2QgdGhhdCB3ZSBuZWVkIHRvIG92ZXJyaWRlIGluIG9yZGVyCisvLyB0byBnZXQg
b3VyIHNocmluay10by1maXQgdG8gd29yayB3aXRoIGEgY3VzdG9tIHBhZ2luYXRpb24gc2NoZW1l
LiBXZSBjYW4gZG8gdGhpcyBiZXR0ZXIKKy8vIGlmIEFwcEtpdCBtYWtlcyBpdCBTUEkvQVBJLgor
LSAoQ0dGbG9hdClfcHJvdmlkZVRvdGFsU2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjooTlNQ
cmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uIAoreworICAgIHJldHVybiBbc2VsZiBfc2Nh
bGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJhdGlvbl07Cit9CisKKy8vIFRoaXMg
aXMgdXNlZCBmb3IgQ2FyYm9uIHByaW50aW5nLiBBdCBzb21lIHBvaW50IHdlIG1pZ2h0IHdhbnQg
dG8gbWFrZSB0aGlzIHB1YmxpYyBBUEkuCistICh2b2lkKXNldFBhZ2VXaWR0aEZvclByaW50aW5n
OihmbG9hdClwYWdlV2lkdGgKK3sKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBh
Z2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107Cisg
ICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOnBhZ2VXaWR0aCBtYXhp
bXVtUGFnZVdpZHRoOnBhZ2VXaWR0aCBhZGp1c3RWaWV3U2l6ZTpZRVNdOworfQorCistICh2b2lk
KV9lbmRQcmludE1vZGUKK3sKKyAgICBbc2VsZiBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VX
aWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpZRVNdOworICAg
IFtbc2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5OllFU107Cit9CisKKy0gKHZvaWQpX2RlbGF5
ZWRFbmRQcmludE1vZGU6KE5TUHJpbnRPcGVyYXRpb24gKilpbml0aWF0aW5nT3BlcmF0aW9uCit7
CisgICAgQVNTRVJUX0FSRyhpbml0aWF0aW5nT3BlcmF0aW9uLCBpbml0aWF0aW5nT3BlcmF0aW9u
ICE9IG5pbCk7CisgICAgTlNQcmludE9wZXJhdGlvbiAqY3VycmVudE9wZXJhdGlvbiA9IFtOU1By
aW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dOworICAgIGlmIChpbml0aWF0aW5nT3BlcmF0
aW9uID09IGN1cnJlbnRPcGVyYXRpb24pIHsKKyAgICAgICAgLy8gVGhlIHByaW50IG9wZXJhdGlv
biBpcyBzdGlsbCB1bmRlcndheS4gV2UgZG9uJ3QgZXhwZWN0IHRoaXMgdG8gZXZlciBoYXBwZW4s
IGhlbmNlIHRoZSBhc3NlcnQsIGJ1dCB3ZSdyZQorICAgICAgICAvLyBiZWluZyBleHRyYSBwYXJh
bm9pZCBoZXJlIHNpbmNlIHRoZSBwcmludGluZyBjb2RlIGlzIHNvIGZyYWdpbGUuIERlbGF5IHRo
ZSBjbGVhbnVwCisgICAgICAgIC8vIGZ1cnRoZXIuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5k
UHJpbnRNb2RlOikgd2l0aE9iamVjdDppbml0aWF0aW5nT3BlcmF0aW9uIGFmdGVyRGVsYXk6MF07
CisgICAgfSBlbHNlIGlmIChbY3VycmVudE9wZXJhdGlvbiB2aWV3XSA9PSBzZWxmKSB7CisgICAg
ICAgIC8vIEEgbmV3IHByaW50IGpvYiBoYXMgc3RhcnRlZCwgYnV0IGl0IGlzIHByaW50aW5nIHRo
ZSBzYW1lIFdlYkhUTUxWaWV3IGFnYWluLiBXZSBkb24ndCBleHBlY3QKKyAgICAgICAgLy8gdGhp
cyB0byBldmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2VydCwgYnV0IHdlJ3JlIGJlaW5nIGV4dHJh
IHBhcmFub2lkIGhlcmUgc2luY2UgdGhlIHByaW50aW5nIGNvZGUgaXMgc28KKyAgICAgICAgLy8g
ZnJhZ2lsZS4gRG8gbm90aGluZywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHRoZSBw
cmludCBqb2IgY3VycmVudGx5IGluIHByb2dyZXNzLCBhbmQKKyAgICAgICAgLy8gdGhlIHByaW50
IGpvYiBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBvd24gY2xl
YW51cC4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gVGhlIHByaW50IGpvYiB0aGF0IGtpY2tlZCBvZmYgdGhpcyBkZWxheWVkIGNhbGwgaGFz
IGZpbmlzaGVkLCBhbmQgdGhpcyB2aWV3IGlzIG5vdCBiZWluZworICAgICAgICAvLyBwcmludGVk
IGFnYWluLiBXZSBleHBlY3QgdGhhdCBubyBvdGhlciBwcmludCBqb2IgaGFzIHN0YXJ0ZWQuIFNp
bmNlIHRoaXMgZGVsYXllZCBjYWxsIHdhc24ndAorICAgICAgICAvLyBjYW5jZWxsZWQsIGJlZ2lu
RG9jdW1lbnQgYW5kIGVuZERvY3VtZW50IG11c3Qgbm90IGhhdmUgYmVlbiBjYWxsZWQsIGFuZCB3
ZSBuZWVkIHRvIGNsZWFuIHVwCisgICAgICAgIC8vIHRoZSBwcmludCBtb2RlIGhlcmUuCisgICAg
ICAgIEFTU0VSVChjdXJyZW50T3BlcmF0aW9uID09IG5pbCk7CisgICAgICAgIFtzZWxmIF9lbmRQ
cmludE1vZGVdOworICAgIH0KK30KKworLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYXZh
aWxhYmxlIGZvciBwcmludGluZworLSAoQk9PTClrbm93c1BhZ2VSYW5nZTooTlNSYW5nZVBvaW50
ZXIpcmFuZ2UKK3sKKyAgICAvLyBNdXN0IGRvIHRoaXMgZXhwbGljaXQgZGlzcGxheSBoZXJlLCBi
ZWNhdXNlIG90aGVyd2lzZSB0aGUgdmlldyBtaWdodCByZWRpc3BsYXkgd2hpbGUgdGhlIHByaW50
CisgICAgLy8gc2hlZXQgd2FzIHVwLCB1c2luZyBwcmludGVyIGZvbnRzIChhbmQgbG9va2luZyBk
aWZmZXJlbnQpLgorICAgIFtzZWxmIGRpc3BsYXlJZk5lZWRlZF07CisgICAgW1tzZWxmIHdpbmRv
d10gc2V0QXV0b2Rpc3BsYXk6Tk9dOworICAgIAorICAgIC8vIElmIHdlIGFyZSBhIGZyYW1lc2V0
IGp1c3QgcHJpbnQgd2l0aCB0aGUgbGF5b3V0IHdlIGhhdmUgb25zY3JlZW4sIG90aGVyd2lzZSBy
ZWxheW91dAorICAgIC8vIGFjY29yZGluZyB0byB0aGUgcGFwZXIgc2l6ZQorICAgIGZsb2F0IG1p
bkxheW91dFdpZHRoID0gMC4wZjsKKyAgICBmbG9hdCBtYXhMYXlvdXRXaWR0aCA9IDAuMGY7Cisg
ICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1lKQor
ICAgICAgICByZXR1cm4gTk87CisgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSB8fCAhZnJhbWUt
PmRvY3VtZW50KCktPmlzRnJhbWVTZXQoKSkgeworICAgICAgICBmbG9hdCBwYXBlcldpZHRoID0g
W3NlbGYgX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjpbTlNQcmludE9wZXJh
dGlvbiBjdXJyZW50T3BlcmF0aW9uXV07CisgICAgICAgIG1pbkxheW91dFdpZHRoID0gcGFwZXJX
aWR0aCAqIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvcjsKKyAgICAgICAgbWF4TGF5b3V0V2lk
dGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOworICAgIH0KKyAg
ICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6bWluTGF5b3V0V2lkdGgg
bWF4aW11bVBhZ2VXaWR0aDptYXhMYXlvdXRXaWR0aCBhZGp1c3RWaWV3U2l6ZTpZRVNdOyAvLyB3
aWxsIHJlbGF5b3V0CisgICAgTlNQcmludE9wZXJhdGlvbiAqcHJpbnRPcGVyYXRpb24gPSBbTlNQ
cmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKKyAgICAvLyBDZXJ0YWluIHR5cGVzIG9m
IGVycm9ycywgaW5jbHVkaW5nIGludmFsaWQgcGFnZSByYW5nZXMsIGNhbiBjYXVzZSBiZWdpbkRv
Y3VtZW50IGFuZAorICAgIC8vIGVuZERvY3VtZW50IHRvIGJlIHNraXBwZWQgYWZ0ZXIgd2UndmUg
cHV0IG91cnNlbHZlcyBpbiBwcmludCBtb2RlIChzZWUgNDE0NTkwNSkuIEluIHRob3NlIGNhc2Vz
CisgICAgLy8gd2UgbmVlZCB0byBnZXQgb3V0IG9mIHByaW50IG1vZGUgd2l0aG91dCByZWx5aW5n
IG9uIGFueSBtb3JlIGNhbGxiYWNrcyBmcm9tIHRoZSBwcmludGluZyBtZWNoYW5pc20uCisgICAg
Ly8gSWYgd2UgZ2V0IGFzIGZhciBhcyBiZWdpbkRvY3VtZW50IHdpdGhvdXQgdHJvdWJsZSwgdGhl
biB0aGlzIGRlbGF5ZWQgcmVxdWVzdCB3aWxsIGJlIGNhbmNlbGxlZC4KKyAgICAvLyBJZiBub3Qg
Y2FuY2VsbGVkLCB0aGlzIGRlbGF5ZWQgY2FsbCB3aWxsIGJlIGludm9rZWQgaW4gdGhlIG5leHQg
cGFzcyB0aHJvdWdoIHRoZSBtYWluIGV2ZW50IGxvb3AsCisgICAgLy8gd2hpY2ggaXMgYWZ0ZXIg
YmVnaW5Eb2N1bWVudCBhbmQgZW5kRG9jdW1lbnQgd291bGQgYmUgY2FsbGVkLgorICAgIFtzZWxm
IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRoT2Jq
ZWN0OnByaW50T3BlcmF0aW9uIGFmdGVyRGVsYXk6MF07CisgICAgW1tzZWxmIF93ZWJWaWV3XSBf
YWRqdXN0UHJpbnRpbmdNYXJnaW5zRm9ySGVhZGVyQW5kRm9vdGVyXTsKKyAgICAKKyAgICAvLyBU
aGVyZSBpcyBhIHRoZW9yZXRpY2FsIGNoYW5jZSB0aGF0IHNvbWVvbmUgY291bGQgZG8gc29tZSBk
cmF3aW5nIGJldHdlZW4gaGVyZSBhbmQgZW5kRG9jdW1lbnQsCisgICAgLy8gaWYgc29tZXRoaW5n
IGNhdXNlZCBzZXROZWVkc0Rpc3BsYXkgYWZ0ZXIgdGhpcyBwb2ludC4gSWYgc28sIGl0J3Mgbm90
IGEgYmlnIHRyYWdlZHksIGJlY2F1c2UKKyAgICAvLyB5b3UnZCBzaW1wbHkgc2VlIHRoZSBwcmlu
dGVyIGZvbnRzIG9uIHNjcmVlbi4gQXMgb2YgdGhpcyB3cml0aW5nLCB0aGlzIGRvZXMgbm90IGhh
cHBlbiB3aXRoIFNhZmFyaS4KKworICAgIHJhbmdlLT5sb2NhdGlvbiA9IDE7CisgICAgZmxvYXQg
dG90YWxTY2FsZUZhY3RvciA9IFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOnBy
aW50T3BlcmF0aW9uXTsKKyAgICBmbG9hdCB1c2VyU2NhbGVGYWN0b3IgPSBbcHJpbnRPcGVyYXRp
b24gX3dlYl9wYWdlU2V0dXBTY2FsZUZhY3Rvcl07CisgICAgW19wcml2YXRlLT5wYWdlUmVjdHMg
cmVsZWFzZV07CisgICAgZmxvYXQgZnVsbFBhZ2VIZWlnaHQgPSBmbG9vcmYoW3NlbGYgX2NhbGN1
bGF0ZVByaW50SGVpZ2h0XS90b3RhbFNjYWxlRmFjdG9yKTsKKyAgICBOU0FycmF5ICpuZXdQYWdl
UmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdpZHRoU2Nh
bGVGYWN0b3I6dXNlclNjYWxlRmFjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVpZ2h0OmZ1
bGxQYWdlSGVpZ2h0XTsKKyAgICAKKyAgICAvLyBBcHBLaXQgZ2V0cyBhbGwgbWVzc2VkIHVwIGlm
IHlvdSBnaXZlIGl0IGEgemVyby1sZW5ndGggcGFnZSBjb3VudCAoc2VlIDM1NzYzMzQpLCBzbyBp
ZiB3ZQorICAgIC8vIGhpdCB0aGF0IGNhc2Ugd2UnbGwgcGFzcyBhbG9uZyBhIGRlZ2VuZXJhdGUg
MSBwaXhlbCBzcXVhcmUgdG8gcHJpbnQuIFRoaXMgd2lsbCBwcmludAorICAgIC8vIGEgYmxhbmsg
cGFnZSAod2l0aCBjb3JyZWN0LWxvb2tpbmcgaGVhZGVyIGFuZCBmb290ZXIgaWYgdGhhdCBvcHRp
b24gaXMgb24pLCB3aGljaCBtYXRjaGVzCisgICAgLy8gdGhlIGJlaGF2aW9yIG9mIElFIGFuZCBD
YW1pbm8gYXQgbGVhc3QuCisgICAgaWYgKFtuZXdQYWdlUmVjdHMgY291bnRdID09IDApCisgICAg
ICAgIG5ld1BhZ2VSZWN0cyA9IFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbTlNWYWx1ZSB2YWx1
ZVdpdGhSZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSldXTsKKyAgICBlbHNlIGlmIChbbmV3UGFn
ZVJlY3RzIGNvdW50XSA+IDEpIHsKKyAgICAgICAgLy8gSWYgdGhlIGxhc3QgcGFnZSBpcyBhIHNo
b3J0IG9ycGhhbiwgdHJ5IGFkanVzdGluZyB0aGUgcHJpbnQgaGVpZ2h0IHNsaWdodGx5IHRvIHNl
ZSBpZiB0aGlzIHdpbGwgc3F1ZWV6ZSB0aGUKKyAgICAgICAgLy8gY29udGVudCBvbnRvIG9uZSBm
ZXdlciBwYWdlLiBJZiBpdCBkb2VzLCB1c2UgdGhlIGFkanVzdGVkIHNjYWxlLiBJZiBub3QsIHVz
ZSB0aGUgb3JpZ2luYWwgc2NhbGUuCisgICAgICAgIGZsb2F0IGxhc3RQYWdlSGVpZ2h0ID0gTlNI
ZWlnaHQoW1tuZXdQYWdlUmVjdHMgbGFzdE9iamVjdF0gcmVjdFZhbHVlXSk7CisgICAgICAgIGlm
IChsYXN0UGFnZUhlaWdodC9mdWxsUGFnZUhlaWdodCA8IExhc3RQcmludGVkUGFnZU9ycGhhblJh
dGlvKSB7CisgICAgICAgICAgICBOU0FycmF5ICphZGp1c3RlZFBhZ2VSZWN0cyA9IFtbc2VsZiBf
ZnJhbWVdIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhTY2FsZUZhY3Rvcjp1c2VyU2Nh
bGVGYWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50SGVpZ2h0OmZ1bGxQ
YWdlSGVpZ2h0KlByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0bWVudF07CisgICAgICAgICAgICAv
LyBVc2UgdGhlIGFkanVzdGVkIHJlY3RzIG9ubHkgaWYgdGhlIHBhZ2UgY291bnQgd2VudCBkb3du
CisgICAgICAgICAgICBpZiAoW2FkanVzdGVkUGFnZVJlY3RzIGNvdW50XSA8IFtuZXdQYWdlUmVj
dHMgY291bnRdKSB7CisgICAgICAgICAgICAgICAgbmV3UGFnZVJlY3RzID0gYWRqdXN0ZWRQYWdl
UmVjdHM7CisgICAgICAgICAgICAgICAgX3ByaXZhdGUtPmF2b2lkaW5nUHJpbnRPcnBoYW4gPSBZ
RVM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgX3ByaXZhdGUt
PnBhZ2VSZWN0cyA9IFtuZXdQYWdlUmVjdHMgcmV0YWluXTsKKyAgICAKKyAgICByYW5nZS0+bGVu
Z3RoID0gW19wcml2YXRlLT5wYWdlUmVjdHMgY291bnRdOworICAgIAorICAgIHJldHVybiBZRVM7
Cit9CisKKy8vIFJldHVybiB0aGUgZHJhd2luZyByZWN0YW5nbGUgZm9yIGEgcGFydGljdWxhciBw
YWdlIG51bWJlcgorLSAoTlNSZWN0KXJlY3RGb3JQYWdlOihOU0ludGVnZXIpcGFnZQoreworICAg
IHJldHVybiBbW19wcml2YXRlLT5wYWdlUmVjdHMgb2JqZWN0QXRJbmRleDpwYWdlIC0gMV0gcmVj
dFZhbHVlXTsKK30KKworLSAodm9pZClkcmF3UGFnZUJvcmRlcldpdGhTaXplOihOU1NpemUpYm9y
ZGVyU2l6ZQoreworICAgIEFTU0VSVChOU0VxdWFsU2l6ZXMoYm9yZGVyU2l6ZSwgW1tbTlNQcmlu
dE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludEluZm9dIHBhcGVyU2l6ZV0pKTsgICAg
CisgICAgW1tzZWxmIF93ZWJWaWV3XSBfZHJhd0hlYWRlckFuZEZvb3Rlcl07Cit9CisKKy0gKHZv
aWQpYmVnaW5Eb2N1bWVudAoreworICAgIEB0cnkgeworICAgICAgICAvLyBGcm9tIG5vdyBvbiB3
ZSdsbCBnZXQgYSBjaGFuY2UgdG8gY2FsbCBfZW5kUHJpbnRNb2RlIGluIGVpdGhlciBiZWdpbkRv
Y3VtZW50IG9yCisgICAgICAgIC8vIGVuZERvY3VtZW50LCBzbyB3ZSBjYW4gY2FuY2VsIHRoZSAi
anVzdCBpbiBjYXNlIiBwZW5kaW5nIGNhbGwuCisgICAgICAgIFtOU09iamVjdCBjYW5jZWxQcmV2
aW91c1BlcmZvcm1SZXF1ZXN0c1dpdGhUYXJnZXQ6c2VsZgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXllZEVu
ZFByaW50TW9kZTopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvYmplY3Q6W05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl1dOworICAg
ICAgICBbc3VwZXIgYmVnaW5Eb2N1bWVudF07CisgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICps
b2NhbEV4Y2VwdGlvbikgeworICAgICAgICAvLyBFeGNlcHRpb24gZHVyaW5nIFtzdXBlciBiZWdp
bkRvY3VtZW50XSBtZWFucyB0aGF0IGVuZERvY3VtZW50IHdpbGwgbm90IGdldCBjYWxsZWQsCisg
ICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gY2xlYW4gdXAgb3VyICJwcmludCBtb2RlIiBoZXJlLgor
ICAgICAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZW5kRG9j
dW1lbnQKK3sKKyAgICBbc3VwZXIgZW5kRG9jdW1lbnRdOworICAgIC8vIE5vdGUgc2FkbHkgYXQg
dGhpcyBwb2ludCBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3Jl
ZW5dIGlzIHN0aWxsIE5PIAorICAgIFtzZWxmIF9lbmRQcmludE1vZGVdOworfQorCistICh2b2lk
KWtleURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhh
dCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwg
YW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9u
ZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBl
dmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBv
ciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAg
UmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKKyAgICBCT09MIGV2
ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsK
KworICAgIEJPT0wgY2FsbFN1cGVyID0gTk87CisKKyAgICBbX3ByaXZhdGUtPmtleURvd25FdmVu
dCByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07
CisKKyAgICBCT09MIGNvbXBsZXRpb25Qb3B1cFdhc09wZW4gPSBfcHJpdmF0ZS0+Y29tcENvbnRy
b2xsZXIgJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBwb3B1cFdpbmRvd0lzT3Blbl07Cisg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFldmVu
dFdhc1NlbnRUb1dlYkNvcmUgJiYgY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmtleUV2ZW50KGV2ZW50KSkgeworICAgICAgICAvLyBXZWJDb3JlIHByb2Nlc3NlZCBhIGtl
eSBldmVudCwgYmFpbCBvbiBhbnkgcHJlZXhpc3RpbmcgY29tcGxldGU6IFVJCisgICAgICAgIGlm
IChjb21wbGV0aW9uUG9wdXBXYXNPcGVuKQorICAgICAgICAgICAgW19wcml2YXRlLT5jb21wQ29u
dHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICB9IGVsc2Ug
aWYgKCFfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgfHwgIVtfcHJpdmF0ZS0+Y29tcENvbnRyb2xs
ZXIgZmlsdGVyS2V5RG93bjpldmVudF0pIHsKKyAgICAgICAgLy8gTm90IGNvbnN1bWVkIGJ5IGNv
bXBsZXRlOiBwb3B1cCB3aW5kb3cKKyAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBl
bmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgY2FsbFN1cGVyID0g
WUVTOworICAgIH0KKyAgICBpZiAoY2FsbFN1cGVyKQorICAgICAgICBbc3VwZXIga2V5RG93bjpl
dmVudF07CisgICAgZWxzZQorICAgICAgICBbTlNDdXJzb3Igc2V0SGlkZGVuVW50aWxNb3VzZU1v
dmVzOllFU107Cit9CisKKy0gKHZvaWQpa2V5VXA6KE5TRXZlbnQgKilldmVudAoreworICAgIC8v
IFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4g
YSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWln
aHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcK
KyAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHBy
b2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0g
YXV0b3JlbGVhc2VdOworCisgICAgQk9PTCBldmVudFdhc1NlbnRUb1dlYkNvcmUgPSAoX3ByaXZh
dGUtPmtleURvd25FdmVudCA9PSBldmVudCk7CisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+
IHNlbGZQcm90ZWN0b3IgPSBzZWxmOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUgJiYgIWV2ZW50V2FzU2VudFRvV2ViQ29yZSkK
KyAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOworICAg
IGVsc2UKKyAgICAgICAgW3N1cGVyIGtleVVwOmV2ZW50XTsKK30KKworLSAodm9pZClmbGFnc0No
YW5nZWQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBy
ZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5k
CisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4g
UmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0aGUgY3VycmVudCBldmVu
dCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBB
cHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOworCisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKGNvcmVGcmFtZSkK
KyAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y2Fwc0xvY2tTdGF0ZU1heUhhdmVD
aGFuZ2VkKCk7CisgICAgCisgICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9y
ID0gc2VsZjsKKworICAgIHVuc2lnbmVkIHNob3J0IGtleUNvZGUgPSBbZXZlbnQga2V5Q29kZV07
CisKKyAgICAvL0Rvbid0IG1ha2UgYW4gZXZlbnQgZnJvbSB0aGUgbnVtIGxvY2sgYW5kIGZ1bmN0
aW9uIGtleXMKKyAgICBpZiAoY29yZUZyYW1lICYmIGtleUNvZGUgIT0gMCAmJiBrZXlDb2RlICE9
IDEwICYmIGtleUNvZGUgIT0gNjMpIHsKKyAgICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgICAgIAorICAgIFtzdXBlciBmbGFnc0NoYW5nZWQ6ZXZlbnRdOworfQor
CistIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyaW5nKilhdHRyaWJ1dGVO
YW1lCit7CisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5BdHRyaWJ1dGVdKSB7CisgICAgICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYg
X2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgICAgICBpZiAoYWNjVHJlZSkKKyAgICAg
ICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6YWNjVHJlZV07CisgICAgICAg
IHJldHVybiBuaWw7CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOmF0dHJpYnV0ZU5hbWVdOworfQorCistIChpZClhY2Nlc3NpYmlsaXR5Rm9jdXNl
ZFVJRWxlbWVudAoreworICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJp
bGl0eVRyZWVdOworICAgIGlmIChhY2NUcmVlKQorICAgICAgICByZXR1cm4gW2FjY1RyZWUgYWNj
ZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1lbnRdOworICAgIHJldHVybiBzZWxmOworfQorCistIChp
ZClhY2Nlc3NpYmlsaXR5SGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAgIGlkIGFjY1RyZWUg
PSBbW3NlbGYgX2ZyYW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlmIChhY2NUcmVlKSB7
CisgICAgICAgIE5TUG9pbnQgd2luZG93Q29vcmQgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2Ny
ZWVuVG9CYXNlOnBvaW50XTsKKyAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxpdHlI
aXRUZXN0OltzZWxmIGNvbnZlcnRQb2ludDp3aW5kb3dDb29yZCBmcm9tVmlldzpuaWxdXTsKKyAg
ICB9CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKGlkKV9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9y
U3VidmlldzooTlNWaWV3ICopc3VidmlldworeworICAgIGlkIGFjY1RyZWUgPSBbW3NlbGYgX2Zy
YW1lXSBfYWNjZXNzaWJpbGl0eVRyZWVdOworICAgIGlmICghYWNjVHJlZSkKKyAgICAgICAgcmV0
dXJuIHNlbGY7CisgICAgaWQgcGFyZW50ID0gW2FjY1RyZWUgX2FjY2Vzc2liaWxpdHlQYXJlbnRG
b3JTdWJ2aWV3OnN1YnZpZXddOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gc2Vs
ZjsKKyAgICByZXR1cm4gcGFyZW50OworfQorCistICh2b2lkKWNlbnRlclNlbGVjdGlvbkluVmlz
aWJsZUFyZWE6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1l
LT5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7Cit9
CisKKy0gKE5TRGF0YSAqKV9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1dGVzQXNSVEYKK3sKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpAIngiCisgICAgICAgIGF0dHJpYnV0ZXM6Y29yZUZyYW1lID8gY29yZUZyYW1lLT5mb250
QXR0cmlidXRlc0ZvclNlbGVjdGlvblN0YXJ0KCkgOiBuaWxdOworICAgIE5TRGF0YSAqZGF0YSA9
IFtzdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3RoXSkgZG9j
dW1lbnRBdHRyaWJ1dGVzOm5pbF07CisgICAgW3N0cmluZyByZWxlYXNlXTsKKyAgICByZXR1cm4g
ZGF0YTsKK30KKworLSAoTlNEaWN0aW9uYXJ5ICopX2ZvbnRBdHRyaWJ1dGVzRnJvbUZvbnRQYXN0
ZWJvYXJkCit7CisgICAgTlNQYXN0ZWJvYXJkICpmb250UGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9h
cmQgcGFzdGVib2FyZFdpdGhOYW1lOk5TRm9udFBib2FyZF07CisgICAgaWYgKGZvbnRQYXN0ZWJv
YXJkID09IG5pbCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBOU0RhdGEgKmRhdGEgPSBbZm9u
dFBhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNGb250UGJvYXJkVHlwZV07CisgICAgaWYgKGRhdGEg
PT0gbmlsIHx8IFtkYXRhIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAv
LyBOU1RleHRWaWV3IGRvZXMgc29tZXRoaW5nIG1vcmUgZWZmaWNpZW50IGJ5IHBhcnNpbmcgdGhl
IGF0dHJpYnV0ZXMgb25seSwgYnV0IHRoYXQncyBub3QgYXZhaWxhYmxlIGluIEFQSS4KKyAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhSVEY6ZGF0YSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF0gYXV0b3JlbGVhc2VdOwor
ICAgIGlmIChzdHJpbmcgPT0gbmlsIHx8IFtzdHJpbmcgbGVuZ3RoXSA9PSAwKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBbc3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01h
a2VSYW5nZSgwLCAxKV07Cit9CisKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfZW1wdHlT
dHlsZQoreworICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIGNyZWF0ZUNT
U1N0eWxlRGVjbGFyYXRpb25dOworfQorCistIChOU1N0cmluZyAqKV9jb2xvckFzU3RyaW5nOihO
U0NvbG9yICopY29sb3IKK3sKKyAgICBOU0NvbG9yICpyZ2JDb2xvciA9IFtjb2xvciBjb2xvclVz
aW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKKyAgICAvLyBGSVhNRTog
SWYgY29sb3IgaXMgbm9uLW5pbCBhbmQgcmdiQ29sb3IgaXMgbmlsLCB0aGF0IG1lYW5zIHdlIGdv
dCBzb21lIGtpbmQKKyAgICAvLyBvZiBmYW5jeSBjb2xvciB0aGF0IGNhbid0IGJlIGNvbnZlcnRl
ZCB0byBSR0IuIENoYW5naW5nIHRoYXQgdG8gInRyYW5zcGFyZW50IgorICAgIC8vIG1pZ2h0IG5v
dCBiZSBncmVhdCwgYnV0IGl0J3MgcHJvYmFibHkgT0suCisgICAgaWYgKHJnYkNvbG9yID09IG5p
bCkKKyAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJlbnQiOworICAgIGZsb2F0IHIgPSBbcmdiQ29s
b3IgcmVkQ29tcG9uZW50XTsKKyAgICBmbG9hdCBnID0gW3JnYkNvbG9yIGdyZWVuQ29tcG9uZW50
XTsKKyAgICBmbG9hdCBiID0gW3JnYkNvbG9yIGJsdWVDb21wb25lbnRdOworICAgIGZsb2F0IGEg
PSBbcmdiQ29sb3IgYWxwaGFDb21wb25lbnRdOworICAgIGlmIChhID09IDApCisgICAgICAgIHJl
dHVybiBAInRyYW5zcGFyZW50IjsKKyAgICBpZiAociA9PSAwICYmIGcgPT0gMCAmJiBiID09IDAg
JiYgYSA9PSAxKQorICAgICAgICByZXR1cm4gQCJibGFjayI7CisgICAgaWYgKHIgPT0gMSAmJiBn
ID09IDEgJiYgYiA9PSAxICYmIGEgPT0gMSkKKyAgICAgICAgcmV0dXJuIEAid2hpdGUiOworICAg
IC8vIEZJWE1FOiBMb3RzIG1vcmUgbmFtZWQgY29sb3JzLiBNYXliZSB3ZSBjb3VsZCB1c2UgdGhl
IHRhYmxlIGluIFdlYkNvcmU/CisgICAgaWYgKGEgPT0gMSkKKyAgICAgICAgcmV0dXJuIFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiKCUuMGYsJS4wZiwlLjBmKSIsIHIgKiAyNTUsIGcg
KiAyNTUsIGIgKiAyNTVdOworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
InJnYmEoJS4wZiwlLjBmLCUuMGYsJWYpIiwgciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NSwgYV07
Cit9CisKKy0gKE5TU3RyaW5nICopX3NoYWRvd0FzU3RyaW5nOihOU1NoYWRvdyAqKXNoYWRvdwor
eworICAgIGlmIChzaGFkb3cgPT0gbmlsKQorICAgICAgICByZXR1cm4gQCJub25lIjsKKyAgICBO
U1NpemUgb2Zmc2V0ID0gW3NoYWRvdyBzaGFkb3dPZmZzZXRdOworICAgIGZsb2F0IGJsdXJSYWRp
dXMgPSBbc2hhZG93IHNoYWRvd0JsdXJSYWRpdXNdOworICAgIGlmIChvZmZzZXQud2lkdGggPT0g
MCAmJiBvZmZzZXQuaGVpZ2h0ID09IDAgJiYgYmx1clJhZGl1cyA9PSAwKQorICAgICAgICByZXR1
cm4gQCJub25lIjsKKyAgICBOU0NvbG9yICpjb2xvciA9IFtzaGFkb3cgc2hhZG93Q29sb3JdOwor
ICAgIGlmIChjb2xvciA9PSBuaWwpCisgICAgICAgIHJldHVybiBAIm5vbmUiOworICAgIC8vIEZJ
WE1FOiBIYW5kbGUgbm9uLWludGVncmFsIHZhbHVlcyBoZXJlPworICAgIGlmIChibHVyUmFkaXVz
ID09IDApCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICUu
MGZweCAlLjBmcHgiLCBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0sIG9mZnNldC53aWR0aCwg
b2Zmc2V0LmhlaWdodF07CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
JUAgJS4wZnB4ICUuMGZweCAlLjBmcHgiLCBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0sIG9m
ZnNldC53aWR0aCwgb2Zmc2V0LmhlaWdodCwgYmx1clJhZGl1c107Cit9CisKKy0gKERPTUNTU1N0
eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tRm9udEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAq
KWRpY3Rpb25hcnkKK3sKKyAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxm
IF9lbXB0eVN0eWxlXTsKKworICAgIE5TQ29sb3IgKmNvbG9yID0gW2RpY3Rpb25hcnkgb2JqZWN0
Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgW3N0eWxlIHNldEJh
Y2tncm91bmRDb2xvcjpbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl1dOworCisgICAgTlNGb250
ICpmb250ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwor
ICAgIGlmICghZm9udCkgeworICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWlseTpAIkhlbHZldGlj
YSJdOworICAgICAgICBbc3R5bGUgc2V0Rm9udFNpemU6QCIxMnB4Il07CisgICAgICAgIFtzdHls
ZSBzZXRGb250V2VpZ2h0OkAibm9ybWFsIl07CisgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6
QCJub3JtYWwiXTsKKyAgICB9IGVsc2UgeworICAgICAgICBOU0ZvbnRNYW5hZ2VyICpmbSA9IFtO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQg
bW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2FudCB0byBoYW5kbGUgZmFt
aWx5IG5hbWVzCisgICAgICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtlIHNpbmdsZSBxdW90ZSBv
ciBiYWNrc2xhc2ggaW4gdGhlaXIgbmFtZXMuCisgICAgICAgIFtzdHlsZSBzZXRGb250RmFtaWx5
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJyVAJyIsIFtmb250IGZhbWlseU5hbWVdXV07
CisgICAgICAgIFtzdHlsZSBzZXRGb250U2l6ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
IiUwLmZweCIsIFtmb250IHBvaW50U2l6ZV1dXTsKKyAgICAgICAgLy8gRklYTUU6IE1hcCB0byB0
aGUgZW50aXJlIHJhbmdlIG9mIENTUyB3ZWlnaHQgdmFsdWVzLgorICAgICAgICBpZiAoW2ZtIHdl
aWdodE9mRm9udDpmb250XSA+PSBNSU5fQk9MRF9XRUlHSFQpCisgICAgICAgICAgICBbc3R5bGUg
c2V0Rm9udFdlaWdodDpAImJvbGQiXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0eWxl
IHNldEZvbnRXZWlnaHQ6QCJub3JtYWwiXTsKKyAgICAgICAgaWYgKFtmbSB0cmFpdHNPZkZvbnQ6
Zm9udF0gJiBOU0l0YWxpY0ZvbnRNYXNrKQorICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRTdHls
ZTpAIml0YWxpYyJdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbc3R5bGUgc2V0Rm9udFN0
eWxlOkAibm9ybWFsIl07CisgICAgfQorCisgICAgY29sb3IgPSBbZGljdGlvbmFyeSBvYmplY3RG
b3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBbc3R5bGUgc2V0Q29s
b3I6Y29sb3IgPyBbc2VsZiBfY29sb3JBc1N0cmluZzpjb2xvcl0gOiAoTlNTdHJpbmcgKilAImJs
YWNrIl07CisKKyAgICBOU1NoYWRvdyAqc2hhZG93ID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5
Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07CisgICAgW3N0eWxlIHNldFRleHRTaGFkb3c6W3NlbGYg
X3NoYWRvd0FzU3RyaW5nOnNoYWRvd11dOworCisgICAgaW50IHN0cmlrZXRocm91Z2hJbnQgPSBb
W2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFt
ZV0gaW50VmFsdWVdOworCisgICAgaW50IHN1cGVyc2NyaXB0SW50ID0gW1tkaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGlm
IChzdXBlcnNjcmlwdEludCA+IDApCisgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAi
c3VwZXIiXTsKKyAgICBlbHNlIGlmIChzdXBlcnNjcmlwdEludCA8IDApCisgICAgICAgIFtzdHls
ZSBzZXRWZXJ0aWNhbEFsaWduOkAic3ViIl07CisgICAgZWxzZQorICAgICAgICBbc3R5bGUgc2V0
VmVydGljYWxBbGlnbjpAImJhc2VsaW5lIl07CisgICAgaW50IHVuZGVybGluZUludCA9IFtbZGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZh
bHVlXTsKKyAgICAvLyBGSVhNRTogVW5kZXJsaW5lIHdpbnMgaGVyZSBpZiB3ZSBoYXZlIGJvdGgg
KHNlZSBidWcgMzc5MDQ0MykuCisgICAgaWYgKHN0cmlrZXRocm91Z2hJbnQgPT0gTlNVbmRlcmxp
bmVTdHlsZU5vbmUgJiYgdW5kZXJsaW5lSW50ID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQorICAg
ICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZl
Y3QiIHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKKyAgICBlbHNlIGlmICh1bmRlcmxpbmVJ
bnQgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCisgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpA
Ii1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJsaW5lLXRocm91Z2gi
IHByaW9yaXR5OkAiIl07CisgICAgZWxzZQorICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIt
a2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAidW5kZXJsaW5lIiBwcmlv
cml0eTpAIiJdOworCisgICAgcmV0dXJuIHN0eWxlOworfQorCistICh2b2lkKV9hcHBseVN0eWxl
VG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSB3aXRoVW5kb0FjdGlv
bjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCit7CisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBseVN0
eWxlVG9TZWxlY3Rpb24oY29yZShzdHlsZSksIHVuZG9BY3Rpb24pOworfQorCistICh2b2lkKV9h
cHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb246KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilz
dHlsZSB3aXRoVW5kb0FjdGlvbjooRWRpdEFjdGlvbil1bmRvQWN0aW9uCit7CisgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUt
PmVkaXRvcigpLT5hcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oY29yZShzdHlsZSksIHVu
ZG9BY3Rpb24pOworfQorCistIChCT09MKV9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6KE5TRXZl
bnQgKilldmVudAoreworICAgIEFTU0VSVChbc2VsZiBfd2ViVmlld10pOworICAgIGlmICghW1tb
c2VsZiBfd2ViVmlld10gcHJlZmVyZW5jZXNdIHJlc3BlY3RTdGFuZGFyZFN0eWxlS2V5RXF1aXZh
bGVudHNdKQorICAgICAgICByZXR1cm4gTk87CisgICAgCisgICAgaWYgKCFbc2VsZiBfY2FuRWRp
dF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBpZiAoKFtldmVudCBtb2RpZmllckZs
YWdzXSAmIE5TRGV2aWNlSW5kZXBlbmRlbnRNb2RpZmllckZsYWdzTWFzaykgIT0gTlNDb21tYW5k
S2V5TWFzaykKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIE5TU3RyaW5nICpzdHJpbmcg
PSBbZXZlbnQgY2hhcmFjdGVyc107CisgICAgaWYgKFtzdHJpbmcgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZTpAImIiXSA9PSBOU09yZGVyZWRTYW1lKSB7CisgICAgICAgIFtzZWxmIGV4ZWN1dGVDb3Jl
Q29tbWFuZEJ5TmFtZToiVG9nZ2xlQm9sZCJdOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0K
KyAgICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiaSJdID09IE5TT3JkZXJl
ZFNhbWUpIHsKKyAgICAgICAgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOiJUb2dnbGVJ
dGFsaWMiXTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE5P
OworfQorCistIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZlbnQKK3sK
KyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdp
bGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2
ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVs
ZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNp
bmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCBy
ZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIGlmIChbc2VsZiBfaGFuZGxlU3R5bGVLZXlFcXVp
dmFsZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICAKKyAgICBCT09MIGV2ZW50
V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09IGV2ZW50KTsKKyAg
ICBCT09MIHJldCA9IE5POworCisgICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFzZV07
CisgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOworICAgIAorICAg
IFtzZWxmIHJldGFpbl07CisKKyAgICAvLyBQYXNzIGNvbW1hbmQta2V5IGNvbWJvcyB0aHJvdWdo
IFdlYkNvcmUgaWYgdGhlcmUgaXMgYSBrZXkgYmluZGluZyBhdmFpbGFibGUgZm9yCisgICAgLy8g
dGhpcyBldmVudC4gVGhpcyBsZXRzIHdlYiBwYWdlcyBoYXZlIGEgY3JhY2sgYXQgaW50ZXJjZXB0
aW5nIGNvbW1hbmQtbW9kaWZpZWQga2V5cHJlc3Nlcy4KKyAgICAvLyBCdXQgZG9uJ3QgZG8gaXQg
aWYgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGV2ZW50LgorICAgIC8vIFByZXNzaW5nIEVz
YyByZXN1bHRzIGluIGEgZmFrZSBldmVudCBiZWluZyBzZW50IC0gZG9uJ3QgcGFzcyBpdCB0byBX
ZWJDb3JlLgorICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGV2ZW50ID09IFtOU0Fw
cCBjdXJyZW50RXZlbnRdICYmIHNlbGYgPT0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJd
KQorICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAg
ICAgICAgIHJldCA9IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOworCisg
ICAgaWYgKCFyZXQpCisgICAgICAgIHJldCA9IFtzdXBlciBwZXJmb3JtS2V5RXF1aXZhbGVudDpl
dmVudF07CisKKyAgICBbc2VsZiByZWxlYXNlXTsKKyAgICAKKyAgICByZXR1cm4gcmV0OworfQor
CistICh2b2lkKWNvcHlGb250OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisK
KyAgICAvLyBQdXQgUlRGIHdpdGggZm9udCBhdHRyaWJ1dGVzIG9uIHRoZSBwYXN0ZWJvYXJkLgor
ICAgIC8vIE1heWJlIGxhdGVyIHdlIHNob3VsZCBhZGQgYSBwYXN0ZWJvYXJkIHR5cGUgdGhhdCBj
b250YWlucyBDU1MgdGV4dCBmb3IgIm5hdGl2ZSIgY29weSBhbmQgcGFzdGUgZm9udC4KKyAgICBO
U1Bhc3RlYm9hcmQgKmZvbnRQYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0
aE5hbWU6TlNGb250UGJvYXJkXTsKKyAgICBbZm9udFBhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOltO
U0FycmF5IGFycmF5V2l0aE9iamVjdDpOU0ZvbnRQYm9hcmRUeXBlXSBvd25lcjpuaWxdOworICAg
IFtmb250UGFzdGVib2FyZCBzZXREYXRhOltzZWxmIF9zZWxlY3Rpb25TdGFydEZvbnRBdHRyaWJ1
dGVzQXNSVEZdIGZvclR5cGU6TlNGb250UGJvYXJkVHlwZV07Cit9CisKKy0gKHZvaWQpcGFzdGVG
b250OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICAvLyBSZWFkIFJU
RiB3aXRoIGZvbnQgYXR0cmlidXRlcyBmcm9tIHRoZSBwYXN0ZWJvYXJkLgorICAgIC8vIE1heWJl
IGxhdGVyIHdlIHNob3VsZCBhZGQgYSBwYXN0ZWJvYXJkIHR5cGUgdGhhdCBjb250YWlucyBDU1Mg
dGV4dCBmb3IgIm5hdGl2ZSIgY29weSBhbmQgcGFzdGUgZm9udC4KKyAgICBbc2VsZiBfYXBwbHlT
dHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Gb250QXR0cmlidXRlczpbc2VsZiBfZm9u
dEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmRdXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9u
UGFzdGVGb250XTsKK30KKworLSAodm9pZClwYXN0ZUFzUmljaFRleHQ6KGlkKXNlbmRlcgorewor
ICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIC8vIFNpbmNlIHJpY2ggdGV4dCBhbHdheXMgYmVh
dHMgcGxhaW4gdGV4dCB3aGVuIGJvdGggYXJlIG9uIHRoZSBwYXN0ZWJvYXJkLCBpdCdzIG5vdAor
ICAgIC8vIGNsZWFyIGhvdyB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIHBsYWluIG9sZCBwYXN0ZS4K
KyAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0
ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpOT107Cit9CisKKy0gKE5TRm9udCAqKV9vcmlnaW5hbEZv
bnRBCit7CisgICAgcmV0dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gZm9u
dFdpdGhGYW1pbHk6QCJIZWx2ZXRpY2EiIHRyYWl0czowIHdlaWdodDpTVEFOREFSRF9XRUlHSFQg
c2l6ZToxMC4wZl07Cit9CisKKy0gKE5TRm9udCAqKV9vcmlnaW5hbEZvbnRCCit7CisgICAgcmV0
dXJuIFtbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gZm9udFdpdGhGYW1pbHk6QCJU
aW1lcyIgdHJhaXRzOk5TRm9udEl0YWxpY1RyYWl0IHdlaWdodDpTVEFOREFSRF9CT0xEX1dFSUdI
VCBzaXplOjEyLjBmXTsKK30KKworLSAodm9pZClfYWRkVG9TdHlsZTooRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbiAqKXN0eWxlIGZvbnRBOihOU0ZvbnQgKilhIGZvbnRCOihOU0ZvbnQgKiliCit7Cisg
ICAgLy8gU2luY2UgdGhlcmUncyBubyB3YXkgdG8gZGlyZWN0bHkgYXNrIE5TRm9udE1hbmFnZXIg
d2hhdCBzdHlsZSBjaGFuZ2UgaXQncyBnb2luZyB0byBkbworICAgIC8vIHdlIGluc3RlYWQgcGFz
cyB0d28gInNwZWNpbWVuIiBmb250cyB0byBpdCBhbmQgbGV0IGl0IGNoYW5nZSB0aGVtLiBXZSB0
aGVuIGRlZHVjZSB3aGF0CisgICAgLy8gc3R5bGUgY2hhbmdlIGl0IHdhcyBkb2luZyBieSBsb29r
aW5nIGF0IHdoYXQgaGFwcGVuZWQgdG8gZWFjaCBvZiB0aGUgdHdvIGZvbnRzLgorICAgIC8vIFNv
IGlmIGl0IHdhcyBtYWtpbmcgdGhlIHRleHQgYm9sZCwgYm90aCBmb250cyB3aWxsIGJlIGJvbGQg
YWZ0ZXIgdGhlIGZhY3QuCisKKyAgICBpZiAoYSA9PSBuaWwgfHwgYiA9PSBuaWwpCisgICAgICAg
IHJldHVybjsKKworICAgIE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdOworCisgICAgTlNGb250ICpvYSA9IFtzZWxmIF9vcmlnaW5hbEZvbnRBXTsK
KworICAgIE5TU3RyaW5nICphRmFtaWx5TmFtZSA9IFthIGZhbWlseU5hbWVdOworICAgIE5TU3Ry
aW5nICpiRmFtaWx5TmFtZSA9IFtiIGZhbWlseU5hbWVdOworCisgICAgaW50IGFQb2ludFNpemUg
PSAoaW50KVthIHBvaW50U2l6ZV07CisgICAgaW50IGJQb2ludFNpemUgPSAoaW50KVtiIHBvaW50
U2l6ZV07CisKKyAgICBpbnQgYVdlaWdodCA9IFtmbSB3ZWlnaHRPZkZvbnQ6YV07CisgICAgaW50
IGJXZWlnaHQgPSBbZm0gd2VpZ2h0T2ZGb250OmJdOworCisgICAgQk9PTCBhSXNJdGFsaWMgPSAo
W2ZtIHRyYWl0c09mRm9udDphXSAmIE5TSXRhbGljRm9udE1hc2spICE9IDA7CisgICAgQk9PTCBi
SXNJdGFsaWMgPSAoW2ZtIHRyYWl0c09mRm9udDpiXSAmIE5TSXRhbGljRm9udE1hc2spICE9IDA7
CisKKyAgICBpZiAoW2FGYW1pbHlOYW1lIGlzRXF1YWxUb1N0cmluZzpiRmFtaWx5TmFtZV0pIHsK
KyAgICAgICAgTlNTdHJpbmcgKmZhbWlseU5hbWVGb3JDU1MgPSBhRmFtaWx5TmFtZTsKKworICAg
ICAgICAvLyBUaGUgZmFtaWx5IG5hbWUgbWF5IG5vdCBiZSBzcGVjaWZpYyBlbm91Z2ggdG8gZ2V0
IHVzIHRoZSBmb250IHNwZWNpZmllZC4KKyAgICAgICAgLy8gSW4gc29tZSBjYXNlcywgdGhlIG9u
bHkgd2F5IHRvIGdldCBleGFjdGx5IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yIGlzIHRvIHVzZQor
ICAgICAgICAvLyB0aGUgUG9zdHNjcmlwdCBuYW1lLgorICAgICAgICAKKyAgICAgICAgLy8gRmlu
ZCB0aGUgZm9udCB0aGUgc2FtZSB3YXkgdGhlIHJlbmRlcmluZyBjb2RlIHdvdWxkIGxhdGVyIGlm
IGl0IGVuY291bnRlcmVkIHRoaXMgQ1NTLgorICAgICAgICBOU0ZvbnRUcmFpdE1hc2sgdHJhaXRz
ID0gYUlzSXRhbGljID8gTlNGb250SXRhbGljVHJhaXQgOiAwOworICAgICAgICBOU0ZvbnQgKmZv
dW5kRm9udCA9IFdlYkNvcmVGaW5kRm9udChhRmFtaWx5TmFtZSwgdHJhaXRzLCBhV2VpZ2h0LCBh
UG9pbnRTaXplKTsKKworICAgICAgICAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgZm9udCB3aXRoIHRo
ZSBzYW1lIFBvc3RzY3JpcHQgbmFtZSwgdGhlbiB3ZSdsbCBoYXZlIHRvIHVzZSB0aGUKKyAgICAg
ICAgLy8gUG9zdHNjcmlwdCBuYW1lIHRvIG1ha2UgdGhlIENTUyBzcGVjaWZpYyBlbm91Z2guCisg
ICAgICAgIGlmICghW1tmb3VuZEZvbnQgZm9udE5hbWVdIGlzRXF1YWxUb1N0cmluZzpbYSBmb250
TmFtZV1dKQorICAgICAgICAgICAgZmFtaWx5TmFtZUZvckNTUyA9IFthIGZvbnROYW1lXTsKKwor
ICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0ZWQgZXNjYXBpbmcgY29kZSBp
ZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKKyAgICAgICAgLy8gd2l0aCBjaGFyYWN0
ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0aGVpciBuYW1lcy4KKyAgICAg
ICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCInJUAn
IiwgZmFtaWx5TmFtZUZvckNTU11dOworICAgIH0KKworICAgIGludCBzb2EgPSAoaW50KVtvYSBw
b2ludFNpemVdOworICAgIGlmIChhUG9pbnRTaXplID09IGJQb2ludFNpemUpCisgICAgICAgIFtz
dHlsZSBzZXRGb250U2l6ZTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkcHgiLCBhUG9p
bnRTaXplXV07CisgICAgZWxzZSBpZiAoYVBvaW50U2l6ZSA8IHNvYSkKKyAgICAgICAgW3N0eWxl
IF9zZXRGb250U2l6ZURlbHRhOkAiLTFweCJdOworICAgIGVsc2UgaWYgKGFQb2ludFNpemUgPiBz
b2EpCisgICAgICAgIFtzdHlsZSBfc2V0Rm9udFNpemVEZWx0YTpAIjFweCJdOworCisgICAgaWYg
KGFXZWlnaHQgPT0gYldlaWdodCkKKyAgICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6YVdlaWdo
dCA+IE1JTl9CT0xEX1dFSUdIVCA/IEAiYm9sZCIgOiBAIm5vcm1hbCJdOworCisgICAgaWYgKGFJ
c0l0YWxpYyA9PSBiSXNJdGFsaWMpCisgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6YUlzSXRh
bGljID8gQCJpdGFsaWMiIDogIEAibm9ybWFsIl07Cit9CisKKy0gKERPTUNTU1N0eWxlRGVjbGFy
YXRpb24gKilfc3R5bGVGcm9tRm9udE1hbmFnZXJPcGVyYXRpb24KK3sKKyAgICBET01DU1NTdHls
ZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKKworICAgIE5TRm9udE1h
bmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOworCisgICAgTlNG
b250ICpvYSA9IFtzZWxmIF9vcmlnaW5hbEZvbnRBXTsKKyAgICBOU0ZvbnQgKm9iID0gW3NlbGYg
X29yaWdpbmFsRm9udEJdOyAgICAKKyAgICBbc2VsZiBfYWRkVG9TdHlsZTpzdHlsZSBmb250QTpb
Zm0gY29udmVydEZvbnQ6b2FdIGZvbnRCOltmbSBjb252ZXJ0Rm9udDpvYl1dOworCisgICAgcmV0
dXJuIHN0eWxlOworfQorCistICh2b2lkKWNoYW5nZUZvbnQ6KGlkKXNlbmRlcgoreworICAgIENP
TU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYg
X3N0eWxlRnJvbUZvbnRNYW5hZ2VyT3BlcmF0aW9uXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9u
U2V0Rm9udF07Cit9CisKKy0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGb3JBdHRy
aWJ1dGVDaGFuZ2U6KGlkKXNlbmRlcgoreworICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0
eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOworCisgICAgTlNTaGFkb3cgKnNoYWRvdyA9IFtbTlNT
aGFkb3cgYWxsb2NdIGluaXRdOworICAgIFtzaGFkb3cgc2V0U2hhZG93T2Zmc2V0Ok5TTWFrZVNp
emUoMSwgMSldOworCisgICAgTlNEaWN0aW9uYXJ5ICpvYSA9IFtOU0RpY3Rpb25hcnkgZGljdGlv
bmFyeVdpdGhPYmplY3RzQW5kS2V5czoKKyAgICAgICAgW3NlbGYgX29yaWdpbmFsRm9udEFdLCBO
U0ZvbnRBdHRyaWJ1dGVOYW1lLAorICAgICAgICBuaWxdOworICAgIE5TRGljdGlvbmFyeSAqb2Ig
PSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CisgICAgICAgIFtO
U0NvbG9yIGJsYWNrQ29sb3JdLCBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCisgICAg
ICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRCXSwgTlNGb250QXR0cmlidXRlTmFtZSwKKyAgICAgICAg
W05TQ29sb3Igd2hpdGVDb2xvcl0sIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKKyAg
ICAgICAgc2hhZG93LCBOU1NoYWRvd0F0dHJpYnV0ZU5hbWUsCisgICAgICAgIFtOU051bWJlciBu
dW1iZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdLCBOU1N0cmlrZXRocm91Z2hTdHls
ZUF0dHJpYnV0ZU5hbWUsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OjFdLCBOU1N1
cGVyc2NyaXB0QXR0cmlidXRlTmFtZSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6
TlNVbmRlcmxpbmVTdHlsZVNpbmdsZV0sIE5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lLAor
ICAgICAgICBuaWxdOworCisgICAgW3NoYWRvdyByZWxlYXNlXTsKKworI2lmIDAKKworTlNPYmxp
cXVlbmVzc0F0dHJpYnV0ZU5hbWUgICAgICAgIC8qIGZsb2F0OyBza2V3IHRvIGJlIGFwcGxpZWQg
dG8gZ2x5cGhzLCBkZWZhdWx0IDA6IG5vIHNrZXcgKi8KKyAgICAvLyBmb250LXN0eWxlLCBidXQg
dGhhdCBpcyBqdXN0IGFuIG9uLW9mZiBzd2l0Y2gKKworTlNFeHBhbnNpb25BdHRyaWJ1dGVOYW1l
ICAgICAgICAgIC8qIGZsb2F0OyBsb2cgb2YgZXhwYW5zaW9uIGZhY3RvciB0byBiZSBhcHBsaWVk
IHRvIGdseXBocywgZGVmYXVsdCAwOiBubyBleHBhbnNpb24gKi8KKyAgICAvLyBmb250LXN0cmV0
Y2g/CisKK05TS2VybkF0dHJpYnV0ZU5hbWUgICAgICAgICAgICAgICAvKiBmbG9hdCwgYW1vdW50
IHRvIG1vZGlmeSBkZWZhdWx0IGtlcm5pbmcsIGlmIDAsIGtlcm5pbmcgb2ZmICovCisgICAgLy8g
bGV0dGVyLXNwYWNpbmc/IHByb2JhYmx5IG5vdCBnb29kIGVub3VnaAorCitOU1VuZGVybGluZUNv
bG9yQXR0cmlidXRlTmFtZSAgICAgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6IHNhbWUgYXMgZm9y
ZWdyb3VuZCBjb2xvciAqLworTlNTdHJpa2V0aHJvdWdoQ29sb3JBdHRyaWJ1dGVOYW1lIC8qIE5T
Q29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQgY29sb3IgKi8KKyAgICAvLyB0
ZXh0LWRlY29yYXRpb24tY29sb3I/CisKK05TTGlnYXR1cmVBdHRyaWJ1dGVOYW1lICAgICAgICAg
ICAvKiBpbnQsIGRlZmF1bHQgMTogZGVmYXVsdCBsaWdhdHVyZXMsIDA6IG5vIGxpZ2F0dXJlcywg
MjogYWxsIGxpZ2F0dXJlcyAqLworTlNCYXNlbGluZU9mZnNldEF0dHJpYnV0ZU5hbWUgICAgIC8q
IGZsb2F0LCBpbiBwb2ludHM7IG9mZnNldCBmcm9tIGJhc2VsaW5lLCBkZWZhdWx0IDAgKi8KK05T
U3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBmbG9hdCwgaW4gcGVyY2VudCBvZiBm
b250IHBvaW50IHNpemUsIGRlZmF1bHQgMDogbm8gc3Ryb2tlOyBwb3NpdGl2ZSBmb3Igc3Ryb2tl
IGFsb25lLCBuZWdhdGl2ZSBmb3Igc3Ryb2tlIGFuZCBmaWxsIChhIHR5cGljYWwgdmFsdWUgZm9y
IG91dGxpbmVkIHRleHQgd291bGQgYmUgMy4wKSAqLworTlNTdHJva2VDb2xvckF0dHJpYnV0ZU5h
bWUgICAgICAgIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQgY29s
b3IgKi8KKyAgICAvLyBuZWVkIGV4dGVuc2lvbnM/CisKKyNlbmRpZgorICAgIAorICAgIE5TRGlj
dGlvbmFyeSAqYSA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0ZXM6b2FdOworICAgIE5TRGljdGlv
bmFyeSAqYiA9IFtzZW5kZXIgY29udmVydEF0dHJpYnV0ZXM6b2JdOworCisgICAgTlNDb2xvciAq
Y2EgPSBbYSBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAg
ICBOU0NvbG9yICpjYiA9IFtiIG9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWVdOworICAgIGlmIChjYSA9PSBjYikgeworICAgICAgICBbc3R5bGUgc2V0QmFja2dyb3Vu
ZENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNhXV07CisgICAgfQorCisgICAgW3NlbGYgX2Fk
ZFRvU3R5bGU6c3R5bGUgZm9udEE6W2Egb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
IGZvbnRCOltiIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXV07CisKKyAgICBjYSA9
IFthIG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIGNi
ID0gW2Igb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAg
aWYgKGNhID09IGNiKSB7CisgICAgICAgIFtzdHlsZSBzZXRDb2xvcjpbc2VsZiBfY29sb3JBc1N0
cmluZzpjYV1dOworICAgIH0KKworICAgIE5TU2hhZG93ICpzaGEgPSBbYSBvYmplY3RGb3JLZXk6
TlNTaGFkb3dBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoc2hhKQorICAgICAgICBbc3R5bGUgc2V0
VGV4dFNoYWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6c2hhXV07CisgICAgZWxzZSBpZiAoW2Ig
b2JqZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV0gPT0gbmlsKQorICAgICAgICBbc3R5
bGUgc2V0VGV4dFNoYWRvdzpAIm5vbmUiXTsKKworICAgIGludCBzYSA9IFtbYSBvYmplY3RGb3JL
ZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgaW50
IHNiID0gW1tiIG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVd
IGludFZhbHVlXTsKKyAgICBpZiAoc2EgPT0gc2IpIHsKKyAgICAgICAgaWYgKHNhID09IE5TVW5k
ZXJsaW5lU3R5bGVOb25lKQorICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1s
LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHByaW9yaXR5OkAiIl07
IAorICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gIm5vIGxpbmUtdGhyb3VnaCIgcmF0aGVy
IHRoYW4gIm5vbmUiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0
eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJsaW5lLXRocm91
Z2giIHByaW9yaXR5OkAiIl07CisgICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAiYWRkIGxp
bmUtdGhyb3VnaCIgcmF0aGVyIHRoYW4gImxpbmUtdGhyb3VnaCIKKyAgICB9CisKKyAgICBzYSA9
IFtbYSBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsK
KyAgICBzYiA9IFtbYiBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGlu
dFZhbHVlXTsKKyAgICBpZiAoc2EgPT0gc2IpIHsKKyAgICAgICAgaWYgKHNhID4gMCkKKyAgICAg
ICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3VwZXIiXTsKKyAgICAgICAgZWxzZSBp
ZiAoc2EgPCAwKQorICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdWIiXTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJiYXNl
bGluZSJdOworICAgIH0KKworICAgIGludCB1YSA9IFtbYSBvYmplY3RGb3JLZXk6TlNVbmRlcmxp
bmVTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKKyAgICBpbnQgdWIgPSBbW2Igb2JqZWN0
Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgaWYg
KHVhID09IHViKSB7CisgICAgICAgIGlmICh1YSA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKKyAg
ICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWlu
LWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOworICAgICAgICAgICAgLy8gd2Ug
cmVhbGx5IG1lYW4gIm5vIHVuZGVybGluZSIgcmF0aGVyIHRoYW4gIm5vbmUiCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRp
b25zLWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRlcmxpbmUiIHByaW9yaXR5OkAiIl07CisgICAgICAg
ICAgICAvLyB3ZSByZWFsbHkgbWVhbiAiYWRkIHVuZGVybGluZSIgcmF0aGVyIHRoYW4gInVuZGVy
bGluZSIKKyAgICB9CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKKy0gKHZvaWQpY2hhbmdlQXR0
cmlidXRlczooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYg
X2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGb3JBdHRyaWJ1dGVDaGFuZ2U6c2Vu
ZGVyXSB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uQ2hhbmdlQXR0cmlidXRlc107Cit9CisKKy0g
KERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3Rv
cjooU0VMKXNlbGVjdG9yCit7CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBb
c2VsZiBfZW1wdHlTdHlsZV07CisKKyAgICBBU1NFUlQoW3N0eWxlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpzZWxlY3Rvcl0pOworICAgIFtzdHlsZSBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9i
amVjdDpbc2VsZiBfY29sb3JBc1N0cmluZzpbW05TQ29sb3JQYW5lbCBzaGFyZWRDb2xvclBhbmVs
XSBjb2xvcl1dXTsKKyAgICAKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKKy0gKEVkaXRBY3Rpb24p
X3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7Cisg
ICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KSkKKyAgICAg
ICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRCYWNrZ3JvdW5kQ29sb3I7ICAgIAorICAgIHJldHVybiBF
ZGl0QWN0aW9uU2V0Q29sb3I7Cit9CisKKy0gKHZvaWQpX2NoYW5nZUNTU0NvbG9yVXNpbmdTZWxl
Y3RvcjooU0VMKXNlbGVjdG9yIGluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKK3sKKyAgICBET01D
U1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9zdHlsZUZyb21Db2xvclBhbmVsV2l0
aFNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZp
ZXddOworICAgIGlmIChbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmll
dzp3ZWJWaWV3IHNob3VsZEFwcGx5U3R5bGU6c3R5bGUgdG9FbGVtZW50c0luRE9NUmFuZ2U6cmFu
Z2VdKQorICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
CisgICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hcHBseVN0eWxlKGNvcmUoc3R5bGUp
LCBbc2VsZiBfdW5kb0FjdGlvbkZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOnNlbGVjdG9yXSk7
Cit9CisKKy0gKHZvaWQpY2hhbmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6KGlkKXNlbmRlcgor
eworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIC8vIE1pbWlja2luZyBOU1RleHRWaWV3LCB0
aGlzIG1ldGhvZCBzZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUKKyAgICAvLyBlbnRp
cmUgZG9jdW1lbnQuIFRoZXJlIGlzIG5vIE5TVGV4dFZpZXcgQVBJIGZvciBzZXR0aW5nIHRoZSBi
YWNrZ3JvdW5kCisgICAgLy8gY29sb3Igb24gdGhlIHNlbGVjdGVkIHJhbmdlIG9ubHkuIE5vdGUg
dGhhdCB0aGlzIG1ldGhvZCBpcyBjdXJyZW50bHkKKyAgICAvLyBuZXZlciBjYWxsZWQgZnJvbSB0
aGUgVUkgKHNlZSBjb21tZW50IGluIGNoYW5nZUNvbG9yOikuCisgICAgLy8gRklYTUU6IHRoaXMg
YWN0dWFsbHkgaGFzIG5vIGVmZmVjdCB3aGVuIGNhbGxlZCwgcHJvYmFibHkgZHVlIHRvIDM2NTQ4
NTAuIF9kb2N1bWVudFJhbmdlIHNlZW1zCisgICAgLy8gdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGJl
Y2F1c2UgaXQgd29ya3MgaW4gc3RhcnRTcGVha2luZzosIGFuZCBJIGtub3cgc2V0QmFja2dyb3Vu
ZENvbG9yOiBkb2VzIHRoZQorICAgIC8vIHJpZ2h0IHRoaW5nIGJlY2F1c2UgSSB0ZXN0ZWQgaXQg
d2l0aCBbc2VsZiBfc2VsZWN0ZWRSYW5nZV0uCisgICAgLy8gRklYTUU6IFRoaXMgd29uJ3QgYWN0
dWFsbHkgYXBwbHkgdGhlIHN0eWxlIHRvIHRoZSBlbnRpcmUgcmFuZ2UgaGVyZSwgYmVjYXVzZSBp
dCBlbmRzIHVwIGNhbGxpbmcKKyAgICAvLyBbZnJhbWUgX2FwcGx5U3R5bGU6XSwgd2hpY2ggb3Bl
cmF0ZXMgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBUbyBtYWtlIHRoaXMgd29yayByaWdodCwg
d2UnbGwKKyAgICAvLyBuZWVkIHRvIHNhdmUgb2ZmIHRoZSBzZWxlY3Rpb24sIHRlbXBvcmFyaWx5
IHNldCBpdCB0byB0aGUgZW50aXJlIHJhbmdlLCBtYWtlIHRoZSBjaGFuZ2UsIHRoZW4KKyAgICAv
LyByZXN0b3JlIHRoZSBvbGQgc2VsZWN0aW9uLgorICAgIFtzZWxmIF9jaGFuZ2VDU1NDb2xvclVz
aW5nU2VsZWN0b3I6QHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xvcjopIGluUmFuZ2U6W3NlbGYg
X2RvY3VtZW50UmFuZ2VdXTsKK30KKworLSAodm9pZCljaGFuZ2VDb2xvcjooaWQpc2VuZGVyCit7
CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gRklYTUU6IGluIE5TVGV4dFZpZXcsIHRo
aXMgbWV0aG9kIGNhbGxzIGNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOiB3aGVuIGEKKyAg
ICAvLyBwcml2YXRlIGNhbGwgaGFzIGVhcmxpZXIgYmVlbiBtYWRlIGJ5IFtOU0ZvbnRGb250RWZm
ZWN0c0JveCBjaGFuZ2VDb2xvcjpdLCBzZWUgMzY3NDQ5My4gCisgICAgLy8gQXBwS2l0IHdpbGwg
aGF2ZSB0byBiZSByZXZpc2VkIHRvIGFsbG93IHRoaXMgdG8gd29yayB3aXRoIGFueXRoaW5nIHRo
YXQgaXNuJ3QgYW4gCisgICAgLy8gTlNUZXh0Vmlldy4gSG93ZXZlciwgdGhpcyBtaWdodCBub3Qg
YmUgcmVxdWlyZWQgZm9yIFRpZ2VyLCBzaW5jZSB0aGUgYmFja2dyb3VuZC1jb2xvciAKKyAgICAv
LyBjaGFuZ2luZyBib3ggaW4gdGhlIGZvbnQgcGFuZWwgZG9lc24ndCB3b3JrIGluIE1haWwgKDM2
NzQ0ODEpLCB0aG91Z2ggaXQgZG9lcyBpbiBUZXh0RWRpdC4KKyAgICBbc2VsZiBfYXBwbHlTdHls
ZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOkBzZWxl
Y3RvcihzZXRDb2xvcjopXSAKKyAgICAgICAgICAgICAgICAgIHdpdGhVbmRvQWN0aW9uOkVkaXRB
Y3Rpb25TZXRDb2xvcl07Cit9CisKKy0gKHZvaWQpX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9y
OihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKyAgICBbc2VsZiBz
ZWxlY3RXb3JkOm5pbF07CisgICAgTlNTdHJpbmcgKndvcmQgPSBbW2ZyYW1lIF9zZWxlY3RlZFN0
cmluZ10gcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICAvLyBGSVhNRTogRG9lcyB0aGlz
IG5lZWQgYSBkaWZmZXJlbnQgYWN0aW9uIGNvbnRleHQgb3RoZXIgdGhhbiAidHlwZWQiPworICAg
IGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OndvcmQgZ2l2ZW5BY3Rp
b246V2ViVmlld0luc2VydEFjdGlvblR5cGVkXSkKKyAgICAgICAgW2ZyYW1lIF9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6d29yZCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6Tk9d
OworfQorCistICh2b2lkKXVwcGVyY2FzZVdvcmQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRf
UFJPTE9HVUUKKworICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0
b3IodXBwZXJjYXNlU3RyaW5nKV07Cit9CisKKy0gKHZvaWQpbG93ZXJjYXNlV29yZDooaWQpc2Vu
ZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZVdvcmRDYXNl
V2l0aFNlbGVjdG9yOkBzZWxlY3Rvcihsb3dlcmNhc2VTdHJpbmcpXTsKK30KKworLSAodm9pZClj
YXBpdGFsaXplV29yZDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAg
W3NlbGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBzZWxlY3RvcihjYXBpdGFsaXplZFN0
cmluZyldOworfQorCistICh2b2lkKWNvbXBsZXRlOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5E
X1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyKQorICAgICAgICBfcHJpdmF0ZS0+Y29t
cENvbnRyb2xsZXIgPSBbW1dlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRo
SFRNTFZpZXc6c2VsZl07CisgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBkb0NvbXBsZXRp
b25dOworfQorCistICh2b2lkKWNoZWNrU3BlbGxpbmc6KGlkKXNlbmRlcgoreworICAgIENPTU1B
TkRfUFJPTE9HVUUKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YWR2YW5jZVRvTmV4dE1pc3NwZWxs
aW5nKCk7Cit9CisKKy0gKHZvaWQpc2hvd0d1ZXNzUGFuZWw6KGlkKXNlbmRlcgoreworICAgIENP
TU1BTkRfUFJPTE9HVUUKKworICAgIE5TU3BlbGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxD
aGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07CisgICAgaWYgKCFjaGVja2VyKSB7CisgICAgICAg
IExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBOU1BhbmVsICpzcGVsbGluZ1BhbmVsID0gW2NoZWNrZXIgc3BlbGxpbmdQYW5l
bF07CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gUG9zdC1UaWdlciwgdGhpcyBt
ZW51IGl0ZW0gaXMgYSBzaG93L2hpZGUgdG9nZ2xlLCB0byBtYXRjaCBBcHBLaXQuIExlYXZlIFRp
Z2VyIGJlaGF2aW9yIGFsb25lCisgICAgLy8gdG8gbWF0Y2ggcmVzdCBvZiBPUyBYLgorICAgIGlm
IChbc3BlbGxpbmdQYW5lbCBpc1Zpc2libGVdKSB7CisgICAgICAgIFtzcGVsbGluZ1BhbmVsIG9y
ZGVyT3V0OnNlbmRlcl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyh0cnVlKTsKKyAgICBb
c3BlbGxpbmdQYW5lbCBvcmRlckZyb250OnNlbmRlcl07Cit9CisKKy0gKHZvaWQpX2NoYW5nZVNw
ZWxsaW5nVG9Xb3JkOihOU1N0cmluZyAqKW5ld1dvcmQKK3sKKyAgICBpZiAoIVtzZWxmIF9jYW5F
ZGl0XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRG9uJ3QgY29ycmVjdCB0byBlbXB0eSBz
dHJpbmcuICAoQXBwS2l0IGNoZWNrZWQgdGhpcywgd2UgbWlnaHQgYXMgd2VsbCB0b28uKQorICAg
IGlmICghW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0pIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGlmIChbbmV3V29yZCBpc0VxdWFsVG9TdHJpbmc6QCIiXSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKFtzZWxmIF9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3V29y
ZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0aW9uUGFzdGVkXSkKKyAgICAgICAgW1tzZWxm
IF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3JkIHNlbGVjdFJlcGxhY2Vt
ZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOworfQorCistICh2b2lkKWNoYW5nZVNwZWxsaW5nOihp
ZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBbc2VsZiBfY2hhbmdlU3Bl
bGxpbmdUb1dvcmQ6W1tzZW5kZXIgc2VsZWN0ZWRDZWxsXSBzdHJpbmdWYWx1ZV1dOworfQorCist
ICh2b2lkKXBlcmZvcm1GaW5kUGFuZWxBY3Rpb246KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRf
UFJPTE9HVUUKKworICAgIC8vIEltcGxlbWVudGluZyB0aGlzIHdpbGwgcHJvYmFibHkgcmVxdWly
ZSBjb3B5aW5nIGFsbCBvZiBOU0ZpbmRQYW5lbC5oIGFuZCAubS4KKyAgICAvLyBXZSBuZWVkICph
bG1vc3QqIHRoZSBzYW1lIHRoaW5nIGFzIEFwcEtpdCwgYnV0IG5vdCBxdWl0ZS4KKyAgICBMT0df
RVJST1IoInVuaW1wbGVtZW50ZWQiKTsKK30KKworLSAodm9pZClzdGFydFNwZWFraW5nOihpZClz
ZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBb
c2VsZiBfZnJhbWVdOworICAgIERPTVJhbmdlICpyYW5nZSA9IFtzZWxmIF9zZWxlY3RlZFJhbmdl
XTsKKyAgICBpZiAoIXJhbmdlIHx8IFtyYW5nZSBjb2xsYXBzZWRdKQorICAgICAgICByYW5nZSA9
IFtzZWxmIF9kb2N1bWVudFJhbmdlXTsKKyAgICBbTlNBcHAgc3BlYWtTdHJpbmc6W2ZyYW1lIF9z
dHJpbmdGb3JSYW5nZTpyYW5nZV1dOworfQorCistICh2b2lkKXN0b3BTcGVha2luZzooaWQpc2Vu
ZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW05TQXBwIHN0b3BTcGVha2luZzpz
ZW5kZXJdOworfQorCistICh2b2lkKXRvZ2dsZUJhc2VXcml0aW5nRGlyZWN0aW9uOihpZClzZW5k
ZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBX
cml0aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiA9IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbjsK
KyAgICBzd2l0Y2ggKGNvcmVGcmFtZS0+YmFzZVdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rpb25T
dGFydCgpKSB7CisgICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRv
TGVmdDoKKyAgICAgICAgICAgIGRpcmVjdGlvbiA9IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlv
bjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvLyBUaGUgd3JpdGluZ0RpcmVjdGlvbkZv
clNlbGVjdGlvblN0YXJ0IG1ldGhvZCB3aWxsIG5ldmVyIHJldHVybiAibmF0dXJhbCIuIEl0Cisg
ICAgICAgIC8vIHdpbGwgYWx3YXlzIHJldHVybiBhIGNvbmNyZXRlIGRpcmVjdGlvbi4gU28sIGtl
ZXAgdGhlIGNvbXBpbGVyIGhhcHB5LCBhbmQgYXNzZXJ0IG5vdCByZWFjaGVkLgorICAgICAgICBj
YXNlIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9uKTsKK30KKworLSAodm9pZCljaGFu
Z2VCYXNlV3JpdGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dV
RQorCisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbiA9IHN0YXRpY19jYXN0PE5TV3Jp
dGluZ0RpcmVjdGlvbj4oW3NlbmRlciB0YWddKTsKKyAgICAKKyAgICAvLyBXZSBkaXNhYmxlIHRo
ZSBtZW51IGl0ZW0gdGhhdCBwZXJmb3JtcyB0aGlzIGFjdGlvbiBiZWNhdXNlIHdlIGNhbid0IGlt
cGxlbWVudAorICAgIC8vIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwncyBiZWhhdmlvciB1c2lu
ZyBDU1MuCisgICAgQVNTRVJUKHdyaXRpbmdEaXJlY3Rpb24gIT0gTlNXcml0aW5nRGlyZWN0aW9u
TmF0dXJhbCk7CisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJhc2VXcml0aW5nRGlyZWN0aW9u
KHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgPyBMZWZ0
VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb24pOwor
fQorCitzdGF0aWMgQk9PTCB3cml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFbmFibGVkKCkKK3sK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKyAgICByZXR1cm4gWUVTOworI2Vsc2UKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVm
YXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIHJldHVy
biBbZGVmYXVsdHMgYm9vbEZvcktleTpAIk5TQWxsb3dzQmFzZVdyaXRpbmdEaXJlY3Rpb25LZXlC
aW5kaW5ncyJdIHx8IFtkZWZhdWx0cyBib29sRm9yS2V5OkAiQXBwbGVUZXh0RGlyZWN0aW9uIl07
CisjZW5kaWYKK30KKworLSAodm9pZClfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzooTlNX
cml0aW5nRGlyZWN0aW9uKWRpcmVjdGlvbgoreworICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQor
ICAgICAgICByZXR1cm47CisKKyAgICBzdGF0aWMgQk9PTCBiaW5kaW5nc0VuYWJsZWQgPSB3cml0
aW5nRGlyZWN0aW9uS2V5QmluZGluZ3NFbmFibGVkKCk7CisKKyAgICBpZiAoIWJpbmRpbmdzRW5h
YmxlZCkgeworICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29y
ZUZyYW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24oZGlyZWN0aW9uID09IE5T
V3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9u
IDogUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsKK30KKworLSAodm9pZCltYWtlQmFzZVdy
aXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9M
T0dVRQorCisgICAgW3NlbGYgX2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86TlNXcml0aW5n
RGlyZWN0aW9uTGVmdFRvUmlnaHRdOworfQorCistICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVj
dGlvblJpZ2h0VG9MZWZ0OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAg
ICBbc2VsZiBfY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzpOU1dyaXRpbmdEaXJlY3Rpb25S
aWdodFRvTGVmdF07Cit9CisKKyNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSB8fCBkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCistICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGlyZWN0
aW9uVG9MVFI6KGlkKXNlbmRlcgoreworICAgIFtzZWxmIG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0OnNlbmRlcl07Cit9CisKKy0gKHZvaWQpY2hhbmdlQmFzZVdyaXRpbmdEaXJl
Y3Rpb25Ub1JUTDooaWQpc2VuZGVyCit7CisgICAgW3NlbGYgbWFrZUJhc2VXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQ6c2VuZGVyXTsKK30KKyNlbmRpZgorCistICh2b2lkKW1ha2VCYXNlV3Jp
dGluZ0RpcmVjdGlvbk5hdHVyYWw6KGlkKXNlbmRlcgoreworICAgIExPR19FUlJPUigiU2VudCBm
cm9tICVALiIsIHNlbmRlcik7Cit9CisKKyNpZiAwCisKKy8vIENTUyBkb2VzIG5vdCBoYXZlIGEg
d2F5IHRvIHNwZWNpZnkgYW4gb3V0bGluZSBmb250LCB3aGljaCBtYXkgbWFrZSB0aGlzIGRpZmZp
Y3VsdCB0byBpbXBsZW1lbnQuCisvLyBNYXliZSBhIHNwZWNpYWwgY2FzZSBvZiB0ZXh0LXNoYWRv
dz8KKy0gKHZvaWQpb3V0bGluZTooaWQpc2VuZGVyOworCisvLyBUaGlzIGlzIHBhcnQgb2YgdGFi
bGUgc3VwcG9ydCwgd2hpY2ggbWF5IGJlIGluIE5TVGV4dFZpZXcgZm9yIFRpZ2VyLgorLy8gSXQn
cyBwcm9iYWJseSBzaW1wbGUgdG8gZG8gdGhlIGVxdWl2YWxlbnQgdGhpbmcgZm9yIFdlYktpdC4K
Ky0gKHZvaWQpaW5zZXJ0VGFibGU6KGlkKXNlbmRlcjsKKworLy8gVGhpcyBjb3VsZCBiZSBpbXBv
cnRhbnQuCistICh2b2lkKXRvZ2dsZVRyYWRpdGlvbmFsQ2hhcmFjdGVyU2hhcGU6KGlkKXNlbmRl
cjsKKworLy8gSSdtIG5vdCBzdXJlIHdoYXQgdGhlIGVxdWl2YWxlbnRzIG9mIHRoZXNlIGluIHRo
ZSB3ZWIgd29ybGQgYXJlLgorLSAodm9pZClpbnNlcnRMaW5lU2VwYXJhdG9yOihpZClzZW5kZXI7
CistICh2b2lkKWluc2VydFBhZ2VCcmVhazooaWQpc2VuZGVyOworCisvLyBUaGVzZSBtZXRob2Rz
IGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gTlNUZXh0VmlldyB5ZXQgYXQgdGhlIHRpbWUgb2YgdGhp
cyB3cml0aW5nLgorLSAodm9pZCljaGFuZ2VDYXNlT2ZMZXR0ZXI6KGlkKXNlbmRlcjsKKy0gKHZv
aWQpdHJhbnNwb3NlV29yZHM6KGlkKXNlbmRlcjsKKworI2VuZGlmCisKKyNpZm5kZWYgQlVJTERJ
TkdfT05fVElHRVIKKworLy8gT3ZlcnJpZGUgdGhpcyBzbyB0aGF0IEFwcEtpdCB3aWxsIHNlbmQg
dXMgYXJyb3cga2V5cyBhcyBrZXkgZG93biBldmVudHMgc28gd2UgY2FuCisvLyBzdXBwb3J0IHRo
ZW0gdmlhIHRoZSBrZXkgYmluZGluZ3MgbWVjaGFuaXNtLgorLSAoQk9PTClfd2FudHNLZXlEb3du
Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIGJvb2wgaGF2ZVdlYkNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgZnJhbWUsIG91ciBr
ZXlEb3duIG1ldGhvZCB3aWxsIGhhbmRsZSBrZXkgYmluZGluZ3MgYWZ0ZXIgc2VuZGluZworICAg
IC8vIHRoZSBldmVudCB0aHJvdWdoIHRoZSBET00sIHNvIGFzayBBcHBLaXQgbm90IHRvIGRvIGl0
cyBlYXJseSBzcGVjaWFsIGtleSBiaW5kaW5nCisgICAgLy8gbWFwcGluZy4gSWYgd2UgZG9uJ3Qg
aGF2ZSBhIGZyYW1lLCBqdXN0IGxldCB0aGluZ3Mgd29yayB0aGUgbm9ybWFsIHdheSB3aXRob3V0
CisgICAgLy8gYSBrZXlEb3duLgorICAgIHJldHVybiBoYXZlV2ViQ29yZUZyYW1lOworfQorCisj
ZWxzZQorCisvLyBTdXBlci1oYWNrIGFsZXJ0LgorLy8gQWxsIHRoaXMgY29kZSBhY2NvbXBsaXNo
ZXMgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIF93YW50c0tleURvd25Gb3JFdmVudCBtZXRob2QgYWJv
dmUuCisKKy8vIFJldHVybnMgYSBzZWxlY3RvciBvbmx5IGlmIGNhbGxlZCB3aGlsZToKKy8vICAg
MSkgZmlyc3QgcmVzcG9uZGVyIGlzIHNlbGYKKy8vICAgMikgaGFuZGxpbmcgYSBrZXkgZG93biBl
dmVudAorLy8gICAzKSBub3QgeWV0IGluc2lkZSBrZXlEb3duOiBtZXRob2QKKy8vICAgNCkga2V5
IGlzIGFuIGFycm93IGtleQorLy8gVGhlIHNlbGVjdG9yIGlzIHRoZSBvbmUgdGhhdCBnZXRzIHNl
bnQgYnkgLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJkVUlLZXldIGZvciB0aGlzIGtleS4KKy0g
KFNFTClfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZworeworICAgIE5T
V2luZG93ICp3ID0gW3NlbGYgd2luZG93XTsKKyAgICBpZiAoW3cgZmlyc3RSZXNwb25kZXJdICE9
IHNlbGYpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIE5TRXZlbnQgKmUgPSBbdyBjdXJyZW50
RXZlbnRdOworICAgIGlmIChbZSB0eXBlXSAhPSBOU0tleURvd24pCisgICAgICAgIHJldHVybiBO
VUxMOworICAgIGlmIChlID09IF9wcml2YXRlLT5rZXlEb3duRXZlbnQpCisgICAgICAgIHJldHVy
biBOVUxMOworICAgIE5TU3RyaW5nICpzID0gW2UgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJz
XTsKKyAgICBpZiAoW3MgbGVuZ3RoXSA9PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBz
d2l0Y2ggKFtzIGNoYXJhY3RlckF0SW5kZXg6MF0pIHsKKyAgICAgICAgY2FzZSBOU0Rvd25BcnJv
d0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlRG93bjopOwor
ICAgICAgICBjYXNlIE5TTGVmdEFycm93RnVuY3Rpb25LZXk6CisgICAgICAgICAgICByZXR1cm4g
QHNlbGVjdG9yKG1vdmVMZWZ0Oik7CisgICAgICAgIGNhc2UgTlNSaWdodEFycm93RnVuY3Rpb25L
ZXk6CisgICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVSaWdodDopOworICAgICAgICBj
YXNlIE5TVXBBcnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvciht
b3ZlVXA6KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KK30KKworLy8gUmV0dXJucyBOTyBpbnN0ZWFkIG9mIFlFUyBpZiBjYWxsZWQgb24gdGhlIHNl
bGVjdG9yIHRoYXQgdGhlCisvLyBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vz
c2luZyBtZXRob2QgcmV0dXJucy4KKy8vIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGluc2lkZSAt
W05TV2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0sCisvLyBhbmQgdG9nZXRoZXIgd2l0aCB0
aGUgY2hhbmdlIGJlbG93IHNob3VsZCBjYXVzZSB0aGF0IG1ldGhvZAorLy8gdG8gcmV0dXJuIE5P
IHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBrZXkuCisvLyBBbHNvIHNldCBhIDEtc2hvdCBmbGFn
IGZvciB0aGUgbmV4dFJlc3BvbmRlciBjaGVjayBiZWxvdy4KKy0gKEJPT0wpcmVzcG9uZHNUb1Nl
bGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAoIVtzdXBlciByZXNwb25kc1RvU2VsZWN0
b3I6c2VsZWN0b3JdKQorICAgICAgICByZXR1cm4gTk87CisgICAgU0VMIGFycm93S2V5U2VsZWN0
b3IgPSBbc2VsZiBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZ107Cisg
ICAgaWYgKHNlbGVjdG9yICE9IGFycm93S2V5U2VsZWN0b3IpCisgICAgICAgIHJldHVybiBZRVM7
CisgICAgX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2UgPSBZRVM7CisgICAgcmV0
dXJuIE5POworfQorCisvLyBSZXR1cm5zIG5pbCBpbnN0ZWFkIG9mIHRoZSBuZXh0IHJlc3BvbmRl
ciBpZiBjYWxsZWQgd2hlbiB0aGUKKy8vIG9uZS1zaG90IGZsYWcgaXMgc2V0LCBhbmQgX2Fycm93
S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcKKy8vIHJldHVybnMgc29tZXRoaW5n
IG90aGVyIHRoYW4gTlVMTC4gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW5zaWRlCisvLyAtW05T
V2luZG93IF9wcm9jZXNzS2V5Ym9hcmRVSUtleV0gYW5kIHRvZ2V0aGVyIHdpdGggdGhlIGNoYW5n
ZSBhYm92ZQorLy8gc2hvdWxkIGNhdXNlIHRoYXQgbWV0aG9kIHRvIHJldHVybiBOTyByYXRoZXIg
dGhhbiBoYW5kbGluZyB0aGUga2V5LgorLSAoTlNSZXNwb25kZXIgKiluZXh0UmVzcG9uZGVyCit7
CisgICAgQk9PTCBkaXNhYmxlZCA9IF9wcml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNl
OworICAgIF9wcml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlID0gTk87CisgICAgaWYg
KGRpc2FibGVkICYmIFtzZWxmIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNz
aW5nXSAhPSBOVUxMKQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbc3VwZXIgbmV4
dFJlc3BvbmRlcl07Cit9CisKKyNlbmRpZgorCistICh2b2lkKV91cGRhdGVDb250cm9sVGludHMK
K3sKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygp
OworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIHZpZXctPnVwZGF0ZUNvbnRy
b2xUaW50cygpOworfQorCisvLyBEZXNwaXRlIGl0cyBuYW1lLCB0aGlzIGlzIGNhbGxlZCBhdCBk
aWZmZXJlbnQgdGltZXMgdGhhbiB3aW5kb3dEaWRCZWNvbWVLZXkgaXMuCisvLyBJdCB0YWtlcyBp
bnRvIGFjY291bnQgYWxsIHRoZSBvdGhlciBmYWN0b3JzIHRoYXQgZGV0ZXJtaW5lIHdoZW4gTlND
ZWxsIGRyYXdzCisvLyB3aXRoIGRpZmZlcmVudCB0aW50cywgc28gaXQncyB0aGUgcmlnaHQgY2Fs
bCB0byB1c2UgZm9yIGNvbnRyb2wgdGludHMuIFdlJ2QgcHJlZmVyCisvLyB0byBkbyB0aGlzIHdp
dGggQVBJLiA8cmRhcjovL3Byb2JsZW0vNTEzNjc2MD4KKy0gKHZvaWQpX3dpbmRvd0NoYW5nZWRL
ZXlTdGF0ZQoreworICAgIGlmIChwdGhyZWFkX21haW5fbnAoKSkKKyAgICAgICAgW3NlbGYgX3Vw
ZGF0ZUNvbnRyb2xUaW50c107CisgICAgZWxzZQorICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0
b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKF91cGRhdGVDb250cm9sVGludHMpIHdpdGhPYmplY3Q6
bmlsIHdhaXRVbnRpbERvbmU6Tk9dOworCisgICAgW3N1cGVyIF93aW5kb3dDaGFuZ2VkS2V5U3Rh
dGVdOworfQorCistICh2b2lkKW90aGVyTW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAg
ICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKKyAgICAgICAgW3NlbGYgbW91c2VEb3du
OmV2ZW50XTsKKyAgICBlbHNlCisgICAgICAgIFtzdXBlciBvdGhlck1vdXNlRG93bjpldmVudF07
Cit9CisKKy0gKHZvaWQpb3RoZXJNb3VzZURyYWdnZWQ6KE5TRXZlbnQgKilldmVudAoreworICAg
IGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQorICAgICAgICBbc2VsZiBtb3VzZURyYWdn
ZWQ6ZXZlbnRdOworICAgIGVsc2UKKyAgICAgICAgW3N1cGVyIG90aGVyTW91c2VEcmFnZ2VkOmV2
ZW50XTsKK30KKworLSAodm9pZClvdGhlck1vdXNlVXA6KE5TRXZlbnQgKilldmVudAoreworICAg
IGlmIChbZXZlbnQgYnV0dG9uTnVtYmVyXSA9PSAyKQorICAgICAgICBbc2VsZiBtb3VzZVVwOmV2
ZW50XTsKKyAgICBlbHNlCisgICAgICAgIFtzdXBlciBvdGhlck1vdXNlVXA6ZXZlbnRdOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU0FycmF5IChXZWJIVE1MVmlldykKKworLSAodm9p
ZClfd2ViX21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhP
YmplY3Q6KGlkKW9iamVjdAoreworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAg
IE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtzZWxmIG9iamVjdEVudW1lcmF0b3JdOworICAg
IFdlYk5ldHNjYXBlUGx1Z2luVmlldyAqdmlldzsKKyAgICB3aGlsZSAoKHZpZXcgPSBbZW51bWVy
YXRvciBuZXh0T2JqZWN0XSkgIT0gbmlsKQorICAgICAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFz
czpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKQorICAgICAgICAgICAgW3ZpZXcg
cGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6b2JqZWN0XTsKKyNlbmRpZgorfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViSW50ZXJuYWwpCisKKy0g
KHZvaWQpX3NlbGVjdGlvbkNoYW5nZWQKK3sKKyAgICBbc2VsZiBfdXBkYXRlU2VsZWN0aW9uRm9y
SW5wdXRNYW5hZ2VyXTsKKyAgICBbc2VsZiBfdXBkYXRlRm9udFBhbmVsXTsKKyAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPnNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVlKTsKK30KKworLSAodm9p
ZClfdXBkYXRlRm9udFBhbmVsCit7CisgICAgLy8gRklYTUU6IE5TVGV4dFZpZXcgYmFpbHMgb3V0
IGlmIGJlY29taW5nIG9yIHJlc2lnbmluZyBmaXJzdCByZXNwb25kZXIsIGZvciB3aGljaCBpdCBo
YXMgaXZhciBmbGFncy4gTm90CisgICAgLy8gc3VyZSBpZiB3ZSBuZWVkIHRvIGRvIHNvbWV0aGlu
ZyBzaW1pbGFyLgorICAgIAorICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgLy8g
RklYTUU6IGlzIHRoaXMgZmlyc3QtcmVzcG9uZGVyIGNoZWNrIGNvcnJlY3Q/IFdoYXQgaGFwcGVu
cyBpZiBhIHN1YmZyYW1lIGlzIGVkaXRhYmxlIGFuZCBpcyBmaXJzdCByZXNwb25kZXI/CisgICAg
aWYgKFtOU0FwcCBrZXlXaW5kb3ddICE9IHdpbmRvdyB8fCBbd2luZG93IGZpcnN0UmVzcG9uZGVy
XSAhPSBzZWxmKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYm9vbCBtdWx0aXBsZUZvbnRz
ID0gZmFsc2U7CisgICAgTlNGb250ICpmb250ID0gbmlsOworICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkgeworICAgICAgICBpZiAoY29uc3QgU2ltcGxlRm9u
dERhdGEqIGZkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+Zm9udEZvclNlbGVjdGlvbihtdWx0aXBs
ZUZvbnRzKSkKKyAgICAgICAgICAgIGZvbnQgPSBmZC0+Z2V0TlNGb250KCk7CisgICAgfQorICAg
IAorCisgICAgLy8gRklYTUU6IGZvciBub3csIHJldHVybiBhIGJvZ3VzIGZvbnQgdGhhdCBkaXN0
aW5ndWlzaGVzIHRoZSBlbXB0eSBzZWxlY3Rpb24gZnJvbSB0aGUgbm9uLWVtcHR5CisgICAgLy8g
c2VsZWN0aW9uLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyBvbmNlIHRoZSByZXN0
IG9mIHRoaXMgY29kZSB3b3JrcyBwcm9wZXJseS4KKyAgICBpZiAoZm9udCA9PSBuaWwpCisgICAg
ICAgIGZvbnQgPSBbc2VsZiBfaGFzU2VsZWN0aW9uXSA/IFtOU0ZvbnQgbWVudUZvbnRPZlNpemU6
MjNdIDogW05TRm9udCB0b29sVGlwc0ZvbnRPZlNpemU6MTddOworICAgIEFTU0VSVChmb250ICE9
IG5pbCk7CisKKyAgICBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIHNldFNlbGVj
dGVkRm9udDpmb250IGlzTXVsdGlwbGU6bXVsdGlwbGVGb250c107CisKKyAgICAvLyBGSVhNRTog
d2UgZG9uJ3Qga2VlcCB0cmFjayBvZiBzZWxlY3RlZCBhdHRyaWJ1dGVzLCBvciBzZXQgdGhlbSBv
biB0aGUgZm9udCBwYW5lbC4gVGhpcworICAgIC8vIGFwcGVhcnMgdG8gaGF2ZSBubyBlZmZlY3Qg
b24gdGhlIFVJLiBFLmcuLCB1bmRlcmxpbmVkIHRleHQgaW4gTWFpbCBvciBUZXh0RWRpdCBpcwor
ICAgIC8vIG5vdCByZWZsZWN0ZWQgaW4gdGhlIGZvbnQgcGFuZWwuIE1heWJlIHNvbWVkYXkgdGhp
cyB3aWxsIGNoYW5nZS4KK30KKworLSAoQk9PTClfY2FuU21hcnRDb3B5T3JEZWxldGUKK3sKKyAg
ICBpZiAoIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSkKKyAgICAg
ICAgcmV0dXJuIE5POworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb25HcmFudWxhcml0
eSgpID09IFdvcmRHcmFudWxhcml0eTsKK30KKworLSAoTlNFdmVudCAqKV9tb3VzZURvd25FdmVu
dAoreworICAgIHJldHVybiBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQ7Cit9CisKKy0gKGlkPFdl
YkhUTUxIaWdobGlnaHRlcj4pX2hpZ2hsaWdodGVyRm9yVHlwZTooTlNTdHJpbmcqKXR5cGUKK3sK
KyAgICByZXR1cm4gW19wcml2YXRlLT5oaWdobGlnaHRlcnMgb2JqZWN0Rm9yS2V5OnR5cGVdOwor
fQorCistIChXZWJGcmFtZSAqKV9mcmFtZQoreworICAgIHJldHVybiBbX3ByaXZhdGUtPmRhdGFT
b3VyY2Ugd2ViRnJhbWVdOworfQorCistICh2b2lkKXBhc3RlOihpZClzZW5kZXIKK3sKKyAgICBD
T01NQU5EX1BST0xPR1VFCisKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0
b3IgPSBzZWxmOworICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjb3Jl
RnJhbWUtPmVkaXRvcigpLT50cnlESFRNTFBhc3RlKCkpCisgICAgICAgIHJldHVybjsgLy8gREhU
TUwgZGlkIHRoZSB3aG9sZSBvcGVyYXRpb24KKyAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCkt
PmNhblBhc3RlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICAgICAgW3NlbGYgX3Bhc3RlV2l0
aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0gYWxsb3dQbGFpblRl
eHQ6WUVTXTsKKyAgICBlbHNlCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnBhc3RlQXNQ
bGFpblRleHQoKTsKK30KKworLSAodm9pZClwYXN0ZUFzUGxhaW5UZXh0OihpZClzZW5kZXIKK3sK
KyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFtzZWxmIF9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6W05T
UGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF1dOworfQorCistICh2b2lkKWNsb3NlSWZOb3RD
dXJyZW50VmlldworeworICAgIGlmIChbW1tzZWxmIF9mcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVu
dFZpZXddICE9IHNlbGYpCisgICAgICAgIFtzZWxmIGNsb3NlXTsKK30KKworLSAoRE9NRG9jdW1l
bnRGcmFnbWVudCopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJk
ICopcGFzdGVib2FyZAoreworICAgIHJldHVybiBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0Om5pbCBhbGxvd1BsYWluVGV4dDpOT107Cit9
CisKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKworLSAoQk9PTClpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQKK3sKKyAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVu
ZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVu
dCB0aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQorICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVja3Mg
dGhlIGZpcnN0IHJlc3BvbmRlci4KKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWRdOworfQorCistICh2b2lkKXNldEdyYW1tYXJDaGVja2luZ0VuYWJs
ZWQ6KEJPT0wpZmxhZworeworICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJv
dHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3QgaW1w
bGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhlIEFwcEtpdCBjb2RlIGNo
ZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIFtbc2VsZiBfd2ViVmlld10gc2V0R3JhbW1h
ckNoZWNraW5nRW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVHcmFtbWFyQ2hlY2tp
bmc6KGlkKXNlbmRlcgoreworICAgIC8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJv
dHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1hci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3QgaW1w
bGVtZW50IHRoZSBtZXRob2QgaGVyZSBiZWNhdXNlCisgICAgLy8gdGhlIEFwcEtpdCBjb2RlIGNo
ZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgorICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlR3Jh
bW1hckNoZWNraW5nOnNlbmRlcl07Cit9CisKKworc3RhdGljIENHUG9pbnQgY29yZUdyYXBoaWNz
U2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2ludChOU1BvaW50IHBvaW50KQoreworICAgIE5T
QXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVuc107CisgICAgCisgICAgaWYgKFtzY3Jl
ZW5zIGNvdW50XSA9PSAwKSB7CisgICAgICAgIC8vIFlvdSBjb3VsZCB0aGVvcmV0aWNhbGx5IGdl
dCBoZXJlIGlmIHJ1bm5pbmcgd2l0aCBubyBtb25pdG9yLCBpbiB3aGljaCBjYXNlIGl0IGRvZXNu
J3QgbWF0dGVyCisgICAgICAgIC8vIG11Y2ggd2hlcmUgdGhlICJvbi1zY3JlZW4iIHBvaW50IGlz
LgorICAgICAgICByZXR1cm4gQ0dQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSk7CisgICAgfQor
ICAgIAorICAgIC8vIEZsaXAgdGhlIHkgY29vcmRpbmF0ZSBmcm9tIHRoZSB0b3Agb2YgdGhlIG1l
bnUgYmFyIHNjcmVlbiAtLSBzZWUgNDYzNjM5MAorICAgIHJldHVybiBDR1BvaW50TWFrZShwb2lu
dC54LCBOU01heFkoW1tzY3JlZW5zIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKSAtIHBvaW50Lnkp
OworfQorCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorCistICh2b2lkKW9yZGVyRnJvbnRTdWJzdGl0dXRp
b25zUGFuZWw6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIE5TU3Bl
bGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07
CisgICAgaWYgKCFjaGVja2VyKSB7CisgICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNr
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBOU1BhbmVsICpzdWJzdGl0
dXRpb25zUGFuZWwgPSBbY2hlY2tlciBzdWJzdGl0dXRpb25zUGFuZWxdOworICAgIGlmIChbc3Vi
c3RpdHV0aW9uc1BhbmVsIGlzVmlzaWJsZV0pIHsKKyAgICAgICAgW3N1YnN0aXR1dGlvbnNQYW5l
bCBvcmRlck91dDpzZW5kZXJdOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFtzdWJzdGl0
dXRpb25zUGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOworfQorCisvLyBGSVhNRSA0Nzk5MTM0OiBX
ZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBs
ZW1lbnQgdGhlc2UgbWV0aG9kcyBoZXJlIGJlY2F1c2UKKy8vIHRoZSBBcHBLaXQgY29kZSBjaGVj
a3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KKworLSAoQk9PTClzbWFydEluc2VydERlbGV0ZUVuYWJs
ZWQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJs
ZWRdOworfQorCistICh2b2lkKXNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDooQk9PTClmbGFn
Cit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6Zmxh
Z107Cit9CisKKy0gKHZvaWQpdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcgorewor
ICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6c2VuZGVyXTsKK30K
KworLSAoQk9PTClpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZAoreworICAgIHJl
dHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVk
XTsKK30KKworLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJP
T0wpZmxhZworeworICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0
dXRpb25FbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vi
c3RpdHV0aW9uOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9t
YXRpY1F1b3RlU3Vic3RpdHV0aW9uOnNlbmRlcl07Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uRW5hYmxlZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0
b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHNl
dEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOmZsYWddOworfQorCistICh2b2lkKXRvZ2ds
ZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmll
d10gdG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjpzZW5kZXJdOworfQorCistIChCT09MKWlz
QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93
ZWJWaWV3XSBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkXTsKK30KKworLSAodm9p
ZClzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAg
W1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDpmbGFn
XTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOihpZClzZW5k
ZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRp
b246c2VuZGVyXTsKK30KKworLSAoQk9PTClpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJs
ZWQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1RleHRSZXBsYWNl
bWVudEVuYWJsZWRdOworfQorCistICh2b2lkKXNldEF1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVu
YWJsZWQ6KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljVGV4
dFJlcGxhY2VtZW50RW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnQ6KGlkKXNlbmRlcgoreworICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xl
QXV0b21hdGljVGV4dFJlcGxhY2VtZW50OnNlbmRlcl07Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmll
d10gaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkXTsKK30KKworLSAodm9pZClz
ZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZsYWcKK3sKKyAgICBb
W3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ6Zmxh
Z107Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOihpZClz
ZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbjpzZW5kZXJdOworfQorCisjZW5kaWYKKworLSAodm9pZClfbG9va1VwSW5EaWN0aW9u
YXJ5RnJvbU1lbnU6KGlkKXNlbmRlcgoreworICAgIC8vIERpY3Rpb25hcnkgQVBJIHdpbGwgYWNj
ZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBhcyBpZiBpdCB3ZXJl
IHJlYWwgdGV4dCwKKyAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0byBhdm9pZCB0aGF0LgorICAg
IGlmIChbW1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBfd2Via2l0X3N0cmluZ0J5VHJpbW1pbmdXaGl0
ZXNwYWNlXSBsZW5ndGhdID09IDApCisgICAgICAgIHJldHVybjsKKworICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0clN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107CisK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNv
cmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNSZWN0IHJlY3QgPSBjb3JlRnJhbWUt
PnNlbGVjdGlvbkJvdW5kcygpOworCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgTlNE
aWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW2F0dHJTdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdl
Ok5TTWFrZVJhbmdlKDAsMSldOworICAgIE5TRm9udCAqZm9udCA9IFthdHRyaWJ1dGVzIG9iamVj
dEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAoZm9udCkKKyAgICAgICAgcmVj
dC5vcmlnaW4ueSArPSBbZm9udCBhc2NlbmRlcl07CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJV
SUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIFtz
ZWxmIHNob3dEZWZpbml0aW9uRm9yQXR0cmlidXRlZFN0cmluZzphdHRyU3RyaW5nIGF0UG9pbnQ6
cmVjdC5vcmlnaW5dOworICAgIHJldHVybjsKKyNlbmRpZgorCisgICAgLy8gV2Ugc29mdCBsaW5r
IHRvIGdldCB0aGUgZnVuY3Rpb24gdGhhdCBkaXNwbGF5cyB0aGUgZGljdGlvbmFyeSAoZWl0aGVy
IHBvcC11cCB3aW5kb3cgb3IgYXBwKSB0byBhdm9pZCB0aGUgcGVyZm9ybWFuY2UKKyAgICAvLyBw
ZW5hbHR5IG9mIGxpbmtpbmcgdG8gYW5vdGhlciBmcmFtZXdvcmsuIFRoaXMgZnVuY3Rpb24gY2hh
bmdlZCBzaWduYXR1cmUgYXMgd2VsbCBhcyBmcmFtZXdvcmsgYmV0d2VlbiBUaWdlciBhbmQgTGVv
cGFyZCwKKyAgICAvLyBzbyB0aGUgdHdvIGNhc2VzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuCisK
KyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIHR5cGVkZWYgT1NTdGF0dXMgKCpTZXJ2aWNl
V2luZG93U2hvd0Z1bmN0aW9uKShpZCBpbldvcmRTdHJpbmcsIE5TUmVjdCBpbldvcmRCb3VuZGFy
eSwgVUludDE2IGluTGluZURpcmVjdGlvbik7CisgICAgY29uc3QgY2hhciAqZnJhbWV3b3JrUGF0
aCA9ICIvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BcHBsaWNhdGlvblNlcnZpY2VzLmZyYW1l
d29yay9GcmFtZXdvcmtzL0xhbmdBbmFseXNpcy5mcmFtZXdvcmsvTGFuZ0FuYWx5c2lzIjsKKyAg
ICBjb25zdCBjaGFyICpmdW5jdGlvbk5hbWUgPSAiRENNRGljdGlvbmFyeVNlcnZpY2VXaW5kb3dT
aG93IjsKKyNlbHNlCisgICAgdHlwZWRlZiB2b2lkICgqU2VydmljZVdpbmRvd1Nob3dGdW5jdGlv
bikoaWQgdW51c2VkRGljdGlvbmFyeVJlZiwgaWQgaW5Xb3JkU3RyaW5nLCBDRlJhbmdlIHNlbGVj
dGlvblJhbmdlLCBpZCB1bnVzZWRGb250LCBDR1BvaW50IHRleHRPcmlnaW4sIEJvb2xlYW4gdmVy
dGljYWxUZXh0LCBpZCB1bnVzZWRUcmFuc2Zvcm0pOworICAgIGNvbnN0IGNoYXIgKmZyYW1ld29y
a1BhdGggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1ld29yay9GcmFt
ZXdvcmtzL0hJVG9vbGJveC5mcmFtZXdvcmsvSElUb29sYm94IjsKKyAgICBjb25zdCBjaGFyICpm
dW5jdGlvbk5hbWUgPSAiSElEaWN0aW9uYXJ5V2luZG93U2hvdyI7CisjZW5kaWYKKworICAgIHN0
YXRpYyBib29sIGxvb2tlZEZvckZ1bmN0aW9uID0gZmFsc2U7CisgICAgc3RhdGljIFNlcnZpY2VX
aW5kb3dTaG93RnVuY3Rpb24gZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93ID0gTlVMTDsKKwor
ICAgIGlmICghbG9va2VkRm9yRnVuY3Rpb24pIHsKKyAgICAgICAgdm9pZCogbGFuZ0FuYWx5c2lz
RnJhbWV3b3JrID0gZGxvcGVuKGZyYW1ld29ya1BhdGgsIFJUTERfTEFaWSk7CisgICAgICAgIEFT
U0VSVChsYW5nQW5hbHlzaXNGcmFtZXdvcmspOworICAgICAgICBpZiAobGFuZ0FuYWx5c2lzRnJh
bWV3b3JrKQorICAgICAgICAgICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93ID0gKFNlcnZp
Y2VXaW5kb3dTaG93RnVuY3Rpb24pZGxzeW0obGFuZ0FuYWx5c2lzRnJhbWV3b3JrLCBmdW5jdGlv
bk5hbWUpOworICAgICAgICBsb29rZWRGb3JGdW5jdGlvbiA9IHRydWU7CisgICAgfQorCisgICAg
QVNTRVJUKGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyk7CisgICAgaWYgKCFkaWN0aW9uYXJ5
U2VydmljZVdpbmRvd1Nob3cpIHsKKyAgICAgICAgTlNMb2coQCJDb3VsZG4ndCBmaW5kIHRoZSAl
cyBmdW5jdGlvbiBpbiAlcyIsIGZ1bmN0aW9uTmFtZSwgZnJhbWV3b3JrUGF0aCk7IAorICAgICAg
ICByZXR1cm47CisgICAgfQorCisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBGSVhN
RTogbXVzdCBjaGVjayBmb3IgcmlnaHQtdG8tbGVmdCBoZXJlCisgICAgTlNXcml0aW5nRGlyZWN0
aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDsKKwor
ICAgIC8vIEZJWE1FOiB0aGUgZGljdGlvbmFyeSBBUEkgZXhwZWN0cyB0aGUgcmVjdCBmb3IgdGhl
IGZpcnN0IGxpbmUgb2Ygc2VsZWN0aW9uLiBQYXNzaW5nCisgICAgLy8gdGhlIHJlY3QgZm9yIHRo
ZSBlbnRpcmUgc2VsZWN0aW9uLCBhcyB3ZSBkbyBoZXJlLCBwb3NpdGlvbnMgdGhlIHBvcC11cCB3
aW5kb3cgbmVhcgorICAgIC8vIHRoZSBib3R0b20gb2YgdGhlIHNlbGVjdGlvbiByYXRoZXIgdGhh
biBhdCB0aGUgc2VsZWN0ZWQgd29yZC4KKyAgICByZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6cmVj
dCB0b1ZpZXc6bmlsXTsKKyAgICByZWN0Lm9yaWdpbiA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRC
YXNlVG9TY3JlZW46cmVjdC5vcmlnaW5dOworICAgIE5TRGF0YSAqZGF0YSA9IFthdHRyU3RyaW5n
IFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0clN0cmluZyBsZW5ndGhdKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6bmlsXTsKKyAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3coZGF0YSwg
cmVjdCwgKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQp
ID8gMSA6IDApOworI2Vsc2UKKyAgICAvLyBUaGUgSElEaWN0aW9uYXJ5V2luZG93U2hvdyBmdW5j
dGlvbiByZXF1aXJlcyB0aGUgb3JpZ2luLCBpbiBDRyBzY3JlZW4gY29vcmRpbmF0ZXMsIG9mIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGV4dCBpbiB0aGUgc2VsZWN0aW9uLgorICAgIC8vIEZJWE1F
IDQ5NDU4MDg6IFdlIGFwcHJveGltYXRlIHRoaXMgaW4gYSB3YXkgdGhhdCB3b3JrcyB3ZWxsIHdo
ZW4gYSBzaW5nbGUgd29yZCBpcyBzZWxlY3RlZCwgYW5kIGxlc3Mgd2VsbCBpbiBzb21lIG90aGVy
IGNhc2VzCisgICAgLy8gKGJ1dCBubyB3b3JzZSB0aGFuIHdlIGRpZCBpbiBUaWdlcikKKyAgICBO
U1BvaW50IHdpbmRvd1BvaW50ID0gW3NlbGYgY29udmVydFBvaW50OnJlY3Qub3JpZ2luIHRvVmll
dzpuaWxdOworICAgIE5TUG9pbnQgc2NyZWVuUG9pbnQgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0
QmFzZVRvU2NyZWVuOndpbmRvd1BvaW50XTsKKworICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93
U2hvdyhuaWwsIGF0dHJTdHJpbmcsIENGUmFuZ2VNYWtlKDAsIFthdHRyU3RyaW5nIGxlbmd0aF0p
LCBuaWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlR3JhcGhpY3NTY3Jl
ZW5Qb2ludEZvckFwcEtpdFNjcmVlblBvaW50KHNjcmVlblBvaW50KSwgZmFsc2UsIG5pbCk7Cisj
ZW5kaWYKK30KKworLSAodm9pZClfaG92ZXJGZWVkYmFja1N1c3BlbmRlZENoYW5nZWQKK3sKKyAg
ICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07Cit9CisKKy0gKEJPT0wpX2lu
dGVyY2VwdEVkaXRpbmdLZXlFdmVudDooS2V5Ym9hcmRFdmVudCopZXZlbnQgc2hvdWxkU2F2ZUNv
bW1hbmQ6KEJPT0wpc2hvdWxkU2F2ZQoreworICAgIC8vIEFzayBBcHBLaXQgdG8gcHJvY2VzcyB0
aGUga2V5IGV2ZW50IC0tIGl0IHdpbGwgY2FsbCBiYWNrIHdpdGggZWl0aGVyIGluc2VydFRleHQg
b3IgZG9Db21tYW5kQnlTZWxlY3Rvci4KKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50
c1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmV2ZW50V2FzSGFuZGxlZCA9
IGZhbHNlOworICAgIHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNvbW1hbmQgPSBzaG91bGRTYXZlOwor
ICAgIC8vIElmIHdlJ3JlIGludGVyY2VwdGluZyB0aGUgaW5pdGlhbCBJTSBjYWxsIHdlIGFzc3Vt
ZSB0aGF0IHRoZSBJTSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50LCAKKyAgICAvLyBhbmQgb25seSBj
aGFuZ2UgdGhpcyBhc3N1bXB0aW9uIGlmIG9uZSBvZiB0aGUgTlNUZXh0SW5wdXQvUmVzcG9uZGVy
IGNhbGxiYWNrcyBpcyB1c2VkLgorICAgIC8vIFdlIGFzc3VtZSB0aGUgSU0gd2lsbCAqbm90KiBj
b25zdW1lIGhvdGtleSBzZXF1ZW5jZXMKKyAgICBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTSA9ICFl
dmVudC0+bWV0YUtleSgpICYmIHNob3VsZFNhdmU7CisKKyAgICBpZiAoY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCkpIHsKKyAgICAg
ICAgTlNFdmVudCAqbWFjRXZlbnQgPSBwbGF0Zm9ybUV2ZW50LT5tYWNFdmVudCgpOworICAgICAg
ICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TS2V5RG93biAmJiBbX3ByaXZhdGUtPmNvbXBDb250
cm9sbGVyIGZpbHRlcktleURvd246bWFjRXZlbnRdKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgICAgICBpZiAoW21hY0V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFuZ2Vk
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcGFyYW1ldGVy
cy5ldmVudCA9IGV2ZW50OworICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVycyA9ICZwYXJhbWV0ZXJzOworICAgICAgICBfcHJpdmF0ZS0+cmVjZWl2ZWROT09QID0g
Tk87CisgICAgICAgIGNvbnN0IFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcyA9IGV2
ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCk7CisgICAgICAgIGJvb2wgaGFzS2V5cHJlc3NDb21tYW5k
ID0gIWNvbW1hbmRzLmlzRW1wdHkoKTsKKworICAgICAgICAvLyBGSVhNRTogaW50ZXJwcmV0S2V5
RXZlbnRzIGRvZXNuJ3QgbWF0Y2ggYXBwbGljYXRpb24ga2V5IGVxdWl2YWxlbnRzIChzdWNoIGFz
IENtZCtBKSwKKyAgICAgICAgLy8gYW5kIHNlbmRzIG5vb3A6IGZvciB0aG9zZS4gQXMgYSByZXN1
bHQsIHdlIGRvbid0IGhhbmRsZSB0aG9zZSBmcm9tIHdpdGhpbiBXZWJDb3JlLAorICAgICAgICAv
LyBidXQgc2VuZCBhIGZ1bGwgc2VxdWVuY2Ugb2YgRE9NIGV2ZW50cywgaW5jbHVkaW5nIGFuIHVu
bmVlZGVkIGtleXByZXNzLgorICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRTYXZlQ29tbWFu
ZCB8fCAhaGFzS2V5cHJlc3NDb21tYW5kKQorICAgICAgICAgICAgW3NlbGYgaW50ZXJwcmV0S2V5
RXZlbnRzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDptYWNFdmVudF1dOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gY29tbWFuZHMuc2l6ZSgpOworICAgICAgICAg
ICAgLy8gQXJlIHRoZXJlIGNvbW1hbmRzIHRoYXQgd291bGQganVzdCBjYXVzZSB0ZXh0IGluc2Vy
dGlvbiBpZiBleGVjdXRlZCB2aWEgRWRpdG9yPworICAgICAgICAgICAgLy8gV2ViS2l0IGRvZXNu
J3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IHRoZXkg
c2hvdWxkIGJlIHRyZWF0ZWQsIHNvIHdlIGxlYXZlIGl0IHVwb24gV2ViQ29yZQorICAgICAgICAg
ICAgLy8gdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVkaWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNo
YW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2ZW50IGJlIGdlbmVyYXRlZAorICAgICAg
ICAgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9yIEVudGVy
KS4KKyAgICAgICAgICAgIGJvb2wgaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyA9IGZhbHNlOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3Ry
aW5nKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKV0uaXNUZXh0SW5zZXJ0aW9uKCkpCisgICAgICAg
ICAgICAgICAgICAgIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IHBsYXRm
b3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIpIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUgPT0gImluc2VydFRleHQ6IikK
KyAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmIGluc2VydFRleHQ6Y29tbWFuZHNbaV0udGV4
dF07CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIFtz
ZWxmIGRvQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoY29tbWFuZHNbaV0u
Y29tbWFuZE5hbWUpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOwor
ICAgIH0KKyAgICByZXR1cm4gKCFfcHJpdmF0ZS0+cmVjZWl2ZWROT09QICYmIHBhcmFtZXRlcnMu
ZXZlbnRXYXNIYW5kbGVkKSB8fCBwYXJhbWV0ZXJzLmNvbnN1bWVkQnlJTTsKK30KKworLSAoV2Vi
Q29yZTo6Q2FjaGVkSW1hZ2UqKXByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlCit7CisgICAgcmV0
dXJuIF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTsKK30KKworLSAodm9pZClz
ZXRQcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZTooV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqKXNvdXJj
ZQoreworICAgIGlmIChzb3VyY2UpCisgICAgICAgIHNvdXJjZS0+YWRkQ2xpZW50KHByb21pc2Vk
RGF0YUNsaWVudCgpKTsKKyAgICAKKyAgICBpZiAoX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlKQorICAgICAgICBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2Ut
PnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CisgICAgX3ByaXZhdGUtPnByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlID0gc291cmNlOworfQorCisjdW5kZWYgQ09NTUFORF9QUk9M
T0dVRQorCistICh2b2lkKV9sYXlvdXRJZk5lZWRlZAoreworICAgIEFTU0VSVCghX3ByaXZhdGUt
PnN1YnZpZXdzU2V0QXNpZGUpOworCisgICAgaWYgKF9wcml2YXRlLT5uZWVkc1RvQXBwbHlTdHls
ZXMgfHwgW3NlbGYgX25lZWRzTGF5b3V0XSkKKyAgICAgICAgW3NlbGYgbGF5b3V0XTsKK30KKwor
LSAodm9pZClfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlCit7CisgICAgW3NlbGYgX2xheW91
dElmTmVlZGVkXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdT
dWJ2aWV3cyA9IFlFUzsKKyNlbmRpZgorCisgICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRX
ZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKworICAgIFtzZWxm
IF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxW
aWV3c107CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNv
dW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
W1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX2xheW91dElmTmVlZGVk
XTsKKworICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOworCisjaWZuZGVmIE5E
RUJVRworICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87CisjZW5kaWYKK30K
KworLSAodm9pZCkgX2Rlc3Ryb3lBbGxXZWJQbHVnaW5zCit7CisgICAgW1tzZWxmIF9wbHVnaW5D
b250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2luc107Cit9CisKKy0gKEJPT0wpX2lzUmVzaWduaW5n
Rmlyc3RSZXNwb25kZXIKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVz
cG9uZGVyOworfQorCistIChCT09MKV9uZWVkc0xheW91dAoreworICAgIHJldHVybiBbW3NlbGYg
X2ZyYW1lXSBfbmVlZHNMYXlvdXRdOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorLSAodm9pZClhdHRhY2hSb290TGF5ZXI6KENBTGF5ZXIqKWxheWVyCit7CisgICAgaWYg
KCFfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgeworICAgICAgICBXZWJMYXllckhvc3RpbmdW
aWV3KiBob3N0aW5nVmlldyA9IFtbV2ViTGF5ZXJIb3N0aW5nVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpbc2VsZiBib3VuZHNdXTsKKyAgICAgICAgW2hvc3RpbmdWaWV3IHNldEF1dG9yZXNpemlu
Z01hc2s6KE5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hlaWdodFNpemFibGUpXTsKKyAgICAg
ICAgW3NlbGYgYWRkU3Vidmlldzpob3N0aW5nVmlld107CisgICAgICAgIFtob3N0aW5nVmlldyBy
ZWxlYXNlXTsKKyAgICAgICAgLy8gaG9zdGluZ1ZpZXcgaXMgb3duZWQgYnkgYmVpbmcgYSBzdWJ2
aWV3IG9mIHNlbGYKKyAgICAgICAgX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgPSBob3N0aW5n
VmlldzsKKyAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RhcnRlZEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKKyAgICB9CisKKyAgICAvLyBNYWtlIGEgY29u
dGFpbmVyIGxheWVyLCB3aGljaCB3aWxsIGdldCBzaXplZC9wb3NpdGlvbmVkIGJ5IEFwcEtpdCBh
bmQgQ0EKKyAgICBDQUxheWVyKiB2aWV3TGF5ZXIgPSBbQ0FMYXllciBsYXllcl07CisgICAgW19w
cml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldExheWVyOnZpZXdMYXllcl07CisgICAgW19wcml2
YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6WUVTXTsKKyAgICAKKyAgICAvLyBQ
YXJlbnQgb3VyIHJvb3QgbGF5ZXIgaW4gdGhlIGNvbnRhaW5lciBsYXllcgorICAgIFt2aWV3TGF5
ZXIgYWRkU3VibGF5ZXI6bGF5ZXJdOworfQorCistICh2b2lkKWRldGFjaFJvb3RMYXllcgorewor
ICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgeworICAgICAgICBbX3ByaXZhdGUt
PmxheWVySG9zdGluZ1ZpZXcgc2V0TGF5ZXI6bmlsXTsKKyAgICAgICAgW19wcml2YXRlLT5sYXll
ckhvc3RpbmdWaWV3IHNldFdhbnRzTGF5ZXI6Tk9dOworICAgICAgICBbX3ByaXZhdGUtPmxheWVy
SG9zdGluZ1ZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgICAgIF9wcml2YXRlLT5sYXll
ckhvc3RpbmdWaWV3ID0gbmlsOworICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9zdG9wcGVkQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxmIF9mcmFtZV1dOworICAgIH0KK30KKyNl
bmRpZgorCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5w
dXRTdXBwb3J0KQorCistIChOU0FycmF5ICopdmFsaWRBdHRyaWJ1dGVzRm9yTWFya2VkVGV4dAor
eworICAgIHN0YXRpYyBOU0FycmF5ICp2YWxpZEF0dHJpYnV0ZXM7CisgICAgaWYgKCF2YWxpZEF0
dHJpYnV0ZXMpIHsKKyAgICAgICAgdmFsaWRBdHRyaWJ1dGVzID0gW1tOU0FycmF5IGFsbG9jXSBp
bml0V2l0aE9iamVjdHM6CisgICAgICAgICAgICBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFt
ZSwgTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWUsCisgICAgICAgICAgICBOU01hcmtlZENs
YXVzZVNlZ21lbnRBdHRyaWJ1dGVOYW1lLCBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRy
aWJ1dGVOYW1lLCBuaWxdOworICAgICAgICAvLyBOU1RleHQgYWxzbyBzdXBwb3J0cyB0aGUgZm9s
bG93aW5nIGF0dHJpYnV0ZXMsIGJ1dCBpdCdzCisgICAgICAgIC8vIGhhcmQgdG8gdGVsbCB3aGlj
aCBhcmUgcmVhbGx5IHJlcXVpcmVkIGZvciB0ZXh0IGlucHV0IHRvCisgICAgICAgIC8vIHdvcmsg
d2VsbDsgSSBoYXZlIG5vdCBzZWVuIGFueSBpbnB1dCBtZXRob2QgbWFrZSB1c2Ugb2YgdGhlbSB5
ZXQuCisgICAgICAgIC8vICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCBOU0ZvcmVncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWUsCisgICAgICAgIC8vICAgICBOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWUsIE5TTGFuZ3VhZ2VBdHRyaWJ1dGVOYW1lLgorICAgICAgICBDRlJldGFpbih2YWxpZEF0
dHJpYnV0ZXMpOworICAgIH0KKyAgICBMT0coVGV4dElucHV0LCAidmFsaWRBdHRyaWJ1dGVzRm9y
TWFya2VkVGV4dCAtPiAoLi4uKSIpOworICAgIHJldHVybiB2YWxpZEF0dHJpYnV0ZXM7Cit9CisK
Ky0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dAoreworICAgIHJldHVybiBfcHJp
dmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID8gW3N1cGVyIGlucHV0Q29udGV4dF0gOiBuaWw7Cit9
CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXRleHRTdG9yYWdlCit7CisgICAgaWYgKCFfcHJp
dmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJ0ZXh0
U3RvcmFnZSAtPiBuaWwiKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBbc2VsZiBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdl
Ok5TTWFrZVJhbmdlKDAsIFVJTlRfTUFYKV07CisgICAgCisgICAgTE9HKFRleHRJbnB1dCwgInRl
eHRTdG9yYWdlIC0+IFwiJUBcIiIsIHJlc3VsdCA/IFtyZXN1bHQgc3RyaW5nXSA6IEAiIik7Cisg
ICAgCisgICAgLy8gV2UgaGF2ZSB0byByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIHJhdGhlciB0aGFu
IG51bGwgdG8gcHJldmVudCBUU00gZnJvbSBjYWxsaW5nIC1zdHJpbmcKKyAgICByZXR1cm4gcmVz
dWx0ID8gcmVzdWx0IDogW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmlu
ZzpAIiJdIGF1dG9yZWxlYXNlXTsKK30KKworLSAoTlNVSW50ZWdlciljaGFyYWN0ZXJJbmRleEZv
clBvaW50OihOU1BvaW50KXRoZVBvaW50Cit7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxm
IHdpbmRvd107CisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKKworICAgIGlm
ICh3aW5kb3cpCisgICAgICAgIHRoZVBvaW50ID0gW3dpbmRvdyBjb252ZXJ0U2NyZWVuVG9CYXNl
OnRoZVBvaW50XTsKKyAgICB0aGVQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDp0aGVQb2ludCBm
cm9tVmlldzpuaWxdOworCisgICAgRE9NUmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jaGFyYWN0ZXJS
YW5nZUF0UG9pbnQ6dGhlUG9pbnRdOworICAgIGlmICghcmFuZ2UpIHsKKyAgICAgICAgTE9HKFRl
eHRJbnB1dCwgImNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KCVmLCAlZikgLT4gTlNOb3RGb3VuZCIs
IHRoZVBvaW50LngsIHRoZVBvaW50LnkpOworICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gW2ZyYW1lIF9jb252ZXJ0RE9NUmFuZ2VU
b05TUmFuZ2U6cmFuZ2VdLmxvY2F0aW9uOworICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0ZXJJ
bmRleEZvclBvaW50OiglZiwgJWYpIC0+ICV1IiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSwgcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCistIChOU1JlY3QpZmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2U6KE5TUmFuZ2UpdGhlUmFuZ2UKK3sgICAgCisgICAgV2ViRnJhbWUgKmZyYW1l
ID0gW3NlbGYgX2ZyYW1lXTsKKyAgICAKKyAgICAvLyBKdXN0IHRvIG1hdGNoIE5TVGV4dFZpZXcn
cyBiZWhhdmlvci4gUmVncmVzc2lvbiB0ZXN0cyBjYW5ub3QgZGV0ZWN0IHRoaXM7CisgICAgLy8g
dG8gcmVwcm9kdWNlLCB1c2UgYSB0ZXN0IGFwcGxpY2F0aW9uIGZyb20gaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY4MgorICAgIC8vICh0eXBlIHNvbWV0aGluZzsgdHJ5
IHJhbmdlcyAoMSwgLTEpIGFuZCAoMiwgLTEpLgorICAgIGlmICgodGhlUmFuZ2UubG9jYXRpb24g
KyB0aGVSYW5nZS5sZW5ndGggPCB0aGVSYW5nZS5sb2NhdGlvbikgJiYgKHRoZVJhbmdlLmxvY2F0
aW9uICsgdGhlUmFuZ2UubGVuZ3RoICE9IDApKQorICAgICAgICB0aGVSYW5nZS5sZW5ndGggPSAw
OworICAgIAorICAgIERPTVJhbmdlICpyYW5nZSA9IFtmcmFtZSBfY29udmVydE5TUmFuZ2VUb0RP
TVJhbmdlOnRoZVJhbmdlXTsKKyAgICBpZiAoIXJhbmdlKSB7CisgICAgICAgIExPRyhUZXh0SW5w
dXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAtPiAoMCwgMCwgMCwgMCki
LCB0aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIE5T
TWFrZVJlY3QoMCwgMCwgMCwgMCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChbcmFuZ2Ugc3Rh
cnRDb250YWluZXJdKTsKKyAgICBBU1NFUlQoW3JhbmdlIGVuZENvbnRhaW5lcl0pOworICAgIAor
ICAgIE5TUmVjdCByZXN1bHRSZWN0ID0gW2ZyYW1lIF9maXJzdFJlY3RGb3JET01SYW5nZTpyYW5n
ZV07CisgICAgcmVzdWx0UmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlc3VsdFJlY3QgdG9WaWV3
Om5pbF07CisKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBpZiAo
d2luZG93KQorICAgICAgICByZXN1bHRSZWN0Lm9yaWdpbiA9IFt3aW5kb3cgY29udmVydEJhc2VU
b1NjcmVlbjpyZXN1bHRSZWN0Lm9yaWdpbl07CisgICAgCisgICAgTE9HKFRleHRJbnB1dCwgImZp
cnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICglZiwgJWYsICVmLCAlZikiLCB0
aGVSYW5nZS5sb2NhdGlvbiwgdGhlUmFuZ2UubGVuZ3RoLCByZXN1bHRSZWN0Lm9yaWdpbi54LCBy
ZXN1bHRSZWN0Lm9yaWdpbi55LCByZXN1bHRSZWN0LnNpemUud2lkdGgsIHJlc3VsdFJlY3Quc2l6
ZS5oZWlnaHQpOworICAgIHJldHVybiByZXN1bHRSZWN0OworfQorCistIChOU1JhbmdlKXNlbGVj
dGVkUmFuZ2UKK3sKKyAgICBpZiAoIWlzVGV4dElucHV0KGNvcmUoW3NlbGYgX2ZyYW1lXSkpKSB7
CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+IChOU05vdEZvdW5kLCAw
KSIpOworICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgfQor
ICAgIE5TUmFuZ2UgcmVzdWx0ID0gW1tzZWxmIF9mcmFtZV0gX3NlbGVjdGVkTlNSYW5nZV07CisK
KyAgICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5s
b2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNS
YW5nZSltYXJrZWRSYW5nZQoreworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9mcmFt
ZV07CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUod2ViRnJhbWUpOworICAgIGlmICghY29y
ZUZyYW1lKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoMCwgMCk7CisgICAgTlNSYW5nZSBy
ZXN1bHQgPSBbd2ViRnJhbWUgX2NvbnZlcnRUb05TUmFuZ2U6Y29yZUZyYW1lLT5lZGl0b3IoKS0+
Y29tcG9zaXRpb25SYW5nZSgpLmdldCgpXTsKKworICAgIExPRyhUZXh0SW5wdXQsICJtYXJrZWRS
YW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN1
YnN0cmluZ0Zyb21SYW5nZTooTlNSYW5nZSluc1JhbmdlCit7CisgICAgV2ViRnJhbWUgKmZyYW1l
ID0gW3NlbGYgX2ZyYW1lXTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShmcmFtZSk7Cisg
ICAgaWYgKCFpc1RleHRJbnB1dChjb3JlRnJhbWUpIHx8IGlzSW5QYXNzd29yZEZpZWxkKGNvcmVG
cmFtZSkpIHsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9t
UmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgp
OworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KKyAgICBET01SYW5nZSAqZG9tUmFuZ2UgPSBb
ZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTpuc1JhbmdlXTsKKyAgICBpZiAoIWRvbVJh
bmdlKSB7CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJh
bmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJl
c3VsdCA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
OmNvcmUoZG9tUmFuZ2UpXTsKKyAgICAKKyAgICAvLyBbTlNBdHRyaWJ1dGVkU3RyaW5nKFdlYktp
dEV4dHJhcykgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOl0gIGluc2lzdHMgb24gaW5z
ZXJ0aW5nIGEgdHJhaWxpbmcgCisgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBz
dHJpbmcgd2hpY2ggYnJlYWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJvYmxl
bS81NDAwNTUxPgorICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUgdGhlIHJl
c3VsdGFudCBzdHJpbmcgdG8gdGhlIGNvcnJlY3QgbGVuZ3RoLgorICAgIGlmIChbcmVzdWx0IGxl
bmd0aF0gPiBuc1JhbmdlLmxlbmd0aCkgeworICAgICAgICBBU1NFUlQoW3Jlc3VsdCBsZW5ndGhd
ID09IG5zUmFuZ2UubGVuZ3RoICsgMSk7CisgICAgICAgIEFTU0VSVChbW3Jlc3VsdCBzdHJpbmdd
IGNoYXJhY3RlckF0SW5kZXg6bnNSYW5nZS5sZW5ndGhdID09ICdcbicgfHwgW1tyZXN1bHQgc3Ry
aW5nXSBjaGFyYWN0ZXJBdEluZGV4Om5zUmFuZ2UubGVuZ3RoXSA9PSAnICcpOworICAgICAgICBy
ZXN1bHQgPSBbcmVzdWx0IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgbnNSYW5nZS5sZW5ndGgpXTsKKyAgICB9CisgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0
ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2NhdGlv
biwgbnNSYW5nZS5sZW5ndGgsIFtyZXN1bHQgc3RyaW5nXSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworLy8gdGVzdCBmb3IgMTAuNCBiZWNhdXNlIG9mIDxyZGFyOi8vcHJvYmxlbS80MjQzNDYz
PgorI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCistIChsb25nKWNvbnZlcnNhdGlvbklkZW50aWZp
ZXIKK3sKKyAgICByZXR1cm4gKGxvbmcpc2VsZjsKK30KKyNlbHNlCistIChOU0ludGVnZXIpY29u
dmVyc2F0aW9uSWRlbnRpZmllcgoreworICAgIHJldHVybiAoTlNJbnRlZ2VyKXNlbGY7Cit9Cisj
ZW5kaWYKKworLSAoQk9PTCloYXNNYXJrZWRUZXh0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgQk9PTCByZXN1bHQgPSBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKKyAgICBMT0coVGV4dElucHV0LCAi
aGFzTWFya2VkVGV4dCAtPiAldSIsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
LSAodm9pZCl1bm1hcmtUZXh0Cit7CisgICAgTE9HKFRleHRJbnB1dCwgInVubWFya1RleHQiKTsK
KworICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0
aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KKyAgICBXZWJIVE1MVmlld0ludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVyczsKKyAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyA9IDA7CisKKyAgICBpZiAocGFyYW1ldGVycykgeworICAgICAgICBwYXJhbWV0ZXJzLT5l
dmVudFdhc0hhbmRsZWQgPSBZRVM7CisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9
IE5POworICAgIH0KKyAgICAKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlv
bigpOworfQorCitzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0ZWRTdHJp
bmcgKnN0cmluZywgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiYgcmVzdWx0KQoreworICAg
IGludCBsZW5ndGggPSBbW3N0cmluZyBzdHJpbmddIGxlbmd0aF07CisKKyAgICBpbnQgaSA9IDA7
CisgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKKyAgICAgICAgTlNSYW5nZSByYW5nZTsKKyAgICAg
ICAgTlNEaWN0aW9uYXJ5ICphdHRycyA9IFtzdHJpbmcgYXR0cmlidXRlc0F0SW5kZXg6aSBsb25n
ZXN0RWZmZWN0aXZlUmFuZ2U6JnJhbmdlIGluUmFuZ2U6TlNNYWtlUmFuZ2UoaSwgbGVuZ3RoIC0g
aSldOworCisgICAgICAgIGlmIChOU051bWJlciAqc3R5bGUgPSBbYXR0cnMgb2JqZWN0Rm9yS2V5
Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSkgeworICAgICAgICAgICAgQ29sb3IgY29s
b3IgPSBDb2xvcjo6YmxhY2s7CisgICAgICAgICAgICBpZiAoTlNDb2xvciAqY29sb3JBdHRyID0g
W2F0dHJzIG9iamVjdEZvcktleTpOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZV0pCisgICAg
ICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtjb2xvckF0dHIgY29sb3JVc2lu
Z0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV0pOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChDb21wb3NpdGlvblVuZGVybGluZShyYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5n
ZShyYW5nZSksIGNvbG9yLCBbc3R5bGUgaW50VmFsdWVdID4gMSkpOworICAgICAgICB9CisKKyAg
ICAgICAgaSA9IHJhbmdlLmxvY2F0aW9uICsgcmFuZ2UubGVuZ3RoOworICAgIH0KK30KKworLSAo
dm9pZClzZXRNYXJrZWRUZXh0OihpZClzdHJpbmcgc2VsZWN0ZWRSYW5nZTooTlNSYW5nZSluZXdT
ZWxSYW5nZQoreworICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRP
ZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsgLy8gT3RoZXJ3aXNlLCBOU1N0cmlu
ZworCisgICAgTE9HKFRleHRJbnB1dCwgInNldE1hcmtlZFRleHQ6XCIlQFwiIHNlbGVjdGVkUmFu
Z2U6KCV1LCAldSkiLCBpc0F0dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJp
bmcsIG5ld1NlbFJhbmdlLmxvY2F0aW9uLCBuZXdTZWxSYW5nZS5sZW5ndGgpOworCisgICAgLy8g
VXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5IHRoZSBjYWxsZXIg
b2YgaW50ZXJwcmV0S2V5RXZlbnRzLgorICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRz
UGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzOworICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsK
KworICAgIGlmIChwYXJhbWV0ZXJzKSB7CisgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFu
ZGxlZCA9IFlFUzsKKyAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87CisgICAg
fQorICAgIAorICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIVtzZWxmIF9pc0Vk
aXRhYmxlXSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJs
aW5lPiB1bmRlcmxpbmVzOworICAgIE5TU3RyaW5nICp0ZXh0ID0gc3RyaW5nOworCisgICAgaWYg
KGlzQXR0cmlidXRlZFN0cmluZykgeworICAgICAgICB1bnNpZ25lZCBtYXJrZWRUZXh0TGVuZ3Ro
ID0gWyhOU1N0cmluZyAqKXN0cmluZyBsZW5ndGhdOworICAgICAgICBOU1N0cmluZyAqcmFuZ2VT
dHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRy
aWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0aXZlUmFuZ2U6TlVMTCBpblJhbmdlOk5T
TWFrZVJhbmdlKDAsIG1hcmtlZFRleHRMZW5ndGgpXTsKKyAgICAgICAgTE9HKFRleHRJbnB1dCwg
IiAgICBSZXBsYWNlbWVudFJhbmdlOiAlQCIsIHJhbmdlU3RyaW5nKTsKKyAgICAgICAgLy8gVGhl
IEFwcEtpdCBhZGRzIGEgJ3NlY3JldCcgcHJvcGVydHkgdG8gdGhlIHN0cmluZyB0aGF0IGNvbnRh
aW5zIHRoZSByZXBsYWNlbWVudCByYW5nZS4KKyAgICAgICAgLy8gVGhlIHJlcGxhY2VtZW50IHJh
bmdlIGlzIHRoZSByYW5nZSBvZiB0aGUgdGhlIHRleHQgdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQg
d2l0aCB0aGUgbmV3IHN0cmluZy4KKyAgICAgICAgaWYgKHJhbmdlU3RyaW5nKQorICAgICAgICAg
ICAgW1tzZWxmIF9mcmFtZV0gX3NlbGVjdE5TUmFuZ2U6TlNSYW5nZUZyb21TdHJpbmcocmFuZ2VT
dHJpbmcpXTsKKworICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmddOworICAgICAgICBleHRy
YWN0VW5kZXJsaW5lcyhzdHJpbmcsIHVuZGVybGluZXMpOworICAgIH0KKworICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVybGluZXMsIG5ld1NlbFJhbmdl
LmxvY2F0aW9uLCBOU01heFJhbmdlKG5ld1NlbFJhbmdlKSk7Cit9CisKKy0gKHZvaWQpZG9Db21t
YW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCit7CisgICAgTE9HKFRleHRJbnB1dCwgImRvQ29t
bWFuZEJ5U2VsZWN0b3I6XCIlc1wiIiwgc2VsX2dldE5hbWUoc2VsZWN0b3IpKTsKKworICAgIC8v
IFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVy
IG9mIGludGVycHJldEtleUV2ZW50cy4KKyAgICAvLyBUaGUgc2FtZSBjYWxsIHRvIGludGVycHJl
dEtleUV2ZW50cyBjYW4gZG8gbW9yZSB0aGFuIG9uZSBjb21tYW5kLgorICAgIFdlYkhUTUxWaWV3
SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOworICAgIGlmIChwYXJhbWV0ZXJzKQorICAgICAgICBw
YXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKKworICAgIGlmIChzZWxlY3RvciA9PSBAc2Vs
ZWN0b3Iobm9vcDopKSB7CisgICAgICAgIF9wcml2YXRlLT5yZWNlaXZlZE5PT1AgPSBZRVM7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBLZXlib2FyZEV2ZW50KiBldmVudCA9IHBhcmFt
ZXRlcnMgPyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7CisgICAgYm9vbCBzaG91bGRTYXZlQ29tbWFu
ZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+c2hvdWxkU2F2ZUNvbW1hbmQ7CisKKyAgICBp
ZiAoZXZlbnQgJiYgc2hvdWxkU2F2ZUNvbW1hbmQpCisgICAgICAgIGV2ZW50LT5rZXlwcmVzc0Nv
bW1hbmRzKCkuYXBwZW5kKEtleXByZXNzQ29tbWFuZChOU1N0cmluZ0Zyb21TZWxlY3RvcihzZWxl
Y3RvcikpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgb25seSBkaXJl
Y3QgY2FsbHMgdG8gZG9Db21tYW5kQnlTZWxlY3Rvcjogc2VlIHRoZSBwYXJhbWV0ZXJzIGJ5IHNl
dHRpbmcgdG8gMC4KKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMgPSAwOworCisgICAgICAgIGJvb2wgZXZlbnRXYXNIYW5kbGVkOworCisgICAgICAgIFdlYlZp
ZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgICAgIGlmIChbW3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0
b3I6c2VsZWN0b3JdKQorICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0gdHJ1ZTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxmIGNv
cmVDb21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAgICAgICAgICBpZiAoY29tbWFuZC5p
c1N1cHBvcnRlZCgpKQorICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IGNvbW1hbmQu
ZXhlY3V0ZShldmVudCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiBXZWJLaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGNvbW1hbmQsIHdlIG5lZWQgdG8gcGFzcyB0
aGUgc2VsZWN0b3IgdG8gc3VwZXIuCisgICAgICAgICAgICAgICAgX3ByaXZhdGUtPnNlbGVjdG9y
Rm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IHNlbGVjdG9yOworCisgICAgICAgICAgICAgICAgLy8g
VGhlIHNpbmsgZG9lcyB0d28gdGhpbmdzOiAxKSBUZWxscyB1cyBpZiB0aGUgcmVzcG9uZGVyIHdl
bnQgdW5oYW5kbGVkLCBhbmQKKyAgICAgICAgICAgICAgICAvLyAyKSBwcmV2ZW50cyBhbnkgTlNC
ZWVwOyB3ZSBkb24ndCBldmVyIHdhbnQgdG8gYmVlcCBoZXJlLgorICAgICAgICAgICAgICAgIFdl
YlJlc3BvbmRlckNoYWluU2luayAqc2luayA9IFtbV2ViUmVzcG9uZGVyQ2hhaW5TaW5rIGFsbG9j
XSBpbml0V2l0aFJlc3BvbmRlckNoYWluOnNlbGZdOworICAgICAgICAgICAgICAgIFtzdXBlciBk
b0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKKyAgICAgICAgICAgICAgICBldmVudFdhc0hh
bmRsZWQgPSAhW3NpbmsgcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kXTsKKyAgICAgICAgICAgICAg
ICBbc2luayBkZXRhY2hdOworICAgICAgICAgICAgICAgIFtzaW5rIHJlbGVhc2VdOworCisgICAg
ICAgICAgICAgICAgX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvciA9IDA7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyYW1ldGVycykKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IGV2ZW50V2FzSGFuZGxlZDsK
KworICAgICAgICAvLyBSZXN0b3JlIHRoZSBwYXJhbWV0ZXJzIHNvIHRoYXQgb3RoZXIgY2FsbHMg
dG8gZG9Db21tYW5kQnlTZWxlY3Rvcjogc2VlIHRoZW0sCisgICAgICAgIC8vIGFuZCBvdGhlciBj
b21tYW5kcyBjYW4gcGFydGljaXBhdGUgaW4gc2V0dGluZyB0aGUgImV2ZW50V2FzSGFuZGxlZCIg
ZmxhZy4KKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJzOworICAgIH0KK30KKworLSAodm9pZClpbnNlcnRUZXh0OihpZClzdHJpbmcKK3sK
KyAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpbTlNB
dHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKKworICAgIExP
RyhUZXh0SW5wdXQsICJpbnNlcnRUZXh0OlwiJUBcIiIsIGlzQXR0cmlidXRlZFN0cmluZyA/IFtz
dHJpbmcgc3RyaW5nXSA6IHN0cmluZyk7CisKKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2
ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRz
UGFyYW1ldGVyczsKKyAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9
IDA7CisgICAgaWYgKHBhcmFtZXRlcnMpCisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJ
TSA9IE5POworCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBpbnNlcnRpbmcgYW4gYXR0cmlidXRl
ZCBzdHJpbmcgYnV0IGlucHV0IG1ldGhvZHMgZG9uJ3QgYXBwZWFyIHRvIHJlcXVpcmUgdGhpcy4K
KyAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAg
TlNTdHJpbmcgKnRleHQ7CisgICAgYm9vbCBpc0Zyb21JbnB1dE1ldGhvZCA9IGNvcmVGcmFtZSAm
JiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOworICAgIGlmIChpc0F0dHJp
YnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgdGV4dCA9IFtzdHJpbmcgc3RyaW5nXTsKKyAgICAgICAg
Ly8gV2UgZGVhbCB3aXRoIHRoZSBOU1RleHRJbnB1dFJlcGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVO
YW1lIGF0dHJpYnV0ZSBmcm9tIE5TQXR0cmlidXRlZFN0cmluZyBoZXJlCisgICAgICAgIC8vIHNp
bXBseSBiZWNhdXNlIGl0IGlzIHVzZWQgYnkgYXQgbGVhc3Qgb25lIElucHV0IE1ldGhvZCAtLSBp
dCBjb3JyZXNvbmRzIHRvIHRoZSBrRXZlbnRQYXJhbVRleHRJbnB1dFNlbmRSZXBsYWNlUmFuZ2UK
KyAgICAgICAgLy8gZXZlbnQgaW4gVFNNLiAgVGhpcyBiZWhhdmlvdXIgbWF0Y2hlcyB0aGF0IG9m
IC1bV2ViSFRNTFZpZXcgc2V0TWFya2VkVGV4dDpzZWxlY3RlZFJhbmdlOl0gd2hlbiBpdCByZWNl
aXZlcyBhbgorICAgICAgICAvLyBOU0F0dHJpYnV0ZWRTdHJpbmcKKyAgICAgICAgTlNTdHJpbmcg
KnJhbmdlU3RyaW5nID0gW3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJh
bmdlQXR0cmlidXRlTmFtZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOk5VTEwgaW5S
YW5nZTpOU01ha2VSYW5nZSgwLCBbdGV4dCBsZW5ndGhdKV07CisgICAgICAgIExPRyhUZXh0SW5w
dXQsICIgICAgUmVwbGFjZW1lbnRSYW5nZTogJUAiLCByYW5nZVN0cmluZyk7CisgICAgICAgIGlm
IChyYW5nZVN0cmluZykgeworICAgICAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3NlbGVjdE5TUmFu
Z2U6TlNSYW5nZUZyb21TdHJpbmcocmFuZ2VTdHJpbmcpXTsKKyAgICAgICAgICAgIGlzRnJvbUlu
cHV0TWV0aG9kID0gWUVTOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRleHQgPSBz
dHJpbmc7CisKKyAgICBib29sIGV2ZW50SGFuZGxlZCA9IGZhbHNlOworICAgIGlmIChbdGV4dCBs
ZW5ndGhdKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGV2ZW50ID0gcGFyYW1ldGVycyA/IHBh
cmFtZXRlcnMtPmV2ZW50IDogMDsKKworICAgICAgICAvLyBpbnNlcnRUZXh0IGNhbiBiZSBjYWxs
ZWQgZnJvbSBhbiBpbnB1dCBtZXRob2Qgb3IgZnJvbSBub3JtYWwga2V5IGV2ZW50IHByb2Nlc3Np
bmcKKyAgICAgICAgLy8gSWYgaXRzIGZyb20gbm9ybWFsIGtleSBldmVudCBwcm9jZXNzaW5nLCB3
ZSBtYXkgbmVlZCB0byBzYXZlIHRoZSBhY3Rpb24gdG8gcGVyZm9ybSBpdCBsYXRlci4KKyAgICAg
ICAgLy8gSWYgaXRzIGZyb20gYW4gaW5wdXQgbWV0aG9kLCB0aGVuIHdlIHNob3VsZCBnbyBhaGVh
ZCBhbmQgaW5zZXJ0IHRoZSB0ZXh0IG5vdy4gIAorICAgICAgICAvLyBXZSBhc3N1bWUgaXQncyBm
cm9tIHRoZSBpbnB1dCBtZXRob2QgaWYgd2UgaGF2ZSBtYXJrZWQgdGV4dC4KKyAgICAgICAgLy8g
RklYTUU6IEluIHRoZW9yeSwgdGhpcyBjb3VsZCBiZSB3cm9uZyBmb3Igc29tZSBpbnB1dCBtZXRo
b2RzLCBzbyB3ZSBzaG91bGQgdHJ5IHRvIGZpbmQKKyAgICAgICAgLy8gYW5vdGhlciB3YXkgdG8g
ZGV0ZXJtaW5lIGlmIHRoZSBjYWxsIGlzIGZyb20gdGhlIGlucHV0IG1ldGhvZAorICAgICAgICBi
b29sIHNob3VsZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5zaG91bGRT
YXZlQ29tbWFuZDsKKyAgICAgICAgaWYgKGV2ZW50ICYmIHNob3VsZFNhdmVDb21tYW5kICYmICFp
c0Zyb21JbnB1dE1ldGhvZCkgeworICAgICAgICAgICAgZXZlbnQtPmtleXByZXNzQ29tbWFuZHMo
KS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKCJpbnNlcnRUZXh0OiIsIHRleHQpKTsKKyAgICAgICAg
ICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5n
IGV2ZW50VGV4dCA9IHRleHQ7CisgICAgICAgIGV2ZW50VGV4dC5yZXBsYWNlKE5TQmFja1RhYkNo
YXJhY3RlciwgTlNUYWJDaGFyYWN0ZXIpOyAvLyBzYW1lIHRoaW5nIGlzIGRvbmUgaW4gS2V5RXZl
bnRNYWMubW0gaW4gV2ViQ29yZQorICAgICAgICBpZiAoY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPmNhbkVkaXQoKSkgeworICAgICAgICAgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRv
cigpLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IGNv
cmVGcmFtZS0+ZWRpdG9yKCktPmluc2VydFRleHQoZXZlbnRUZXh0LCBldmVudCk7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbihldmVudFRl
eHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghcGFy
YW1ldGVycykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChpc0Zyb21JbnB1dE1ldGhv
ZCkgeworICAgICAgICAvLyBBbGxvdyBkb0NvbW1hbmRCeVNlbGVjdG9yOiB0byBiZSBjYWxsZWQg
YWZ0ZXIgaW5zZXJ0VGV4dDogYnkgcmVzZXR0aW5nIGludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMKKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBwYXJh
bWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBZRVM7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0g
ZXZlbnRIYW5kbGVkOworfQorCistICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFn
ZXIKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBp
ZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQk9PTCBleHBvc2VJbnB1dENv
bnRleHQgPSBpc1RleHRJbnB1dChjb3JlRnJhbWUpICYmICFpc0luUGFzc3dvcmRGaWVsZChjb3Jl
RnJhbWUpOworICAgIGlmIChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUtPmV4cG9zZUlu
cHV0Q29udGV4dCkgeworICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0ID0gZXhw
b3NlSW5wdXRDb250ZXh0OworICAgICAgICAvLyBMZXQgQXBwS2l0IGNhY2hlIGEgcG90ZW50aWFs
bHkgY2hhbmdlZCBpbnB1dCBjb250ZXh0LgorICAgICAgICAvLyBXZWJDb3JlIHJvdXRpbmVseSBz
ZXRzIHRoZSBzZWxlY3Rpb24gdG8gTm9uZSB3aGVuIGVkaXRpbmcsIGFuZCBJTXMgYmVjb21lIHVu
aGFwcHkgd2hlbiBhbiBpbnB1dCBjb250ZXh0IHN1ZGRlbmx5IHR1cm5zIG5pbCwgc2VlIGJ1ZyAy
NjAwOS4KKyAgICAgICAgaWYgKCFjb3JlRnJhbWUgfHwgIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCkt
PmlzTm9uZSgpKQorICAgICAgICAgICAgW05TQXBwIHVwZGF0ZVdpbmRvd3NdOworICAgIH0KKwor
ICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPmlnbm9yZUNvbXBvc2l0aW9u
U2VsZWN0aW9uQ2hhbmdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHN0YXJ0
OworICAgIHVuc2lnbmVkIGVuZDsKKyAgICBpZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+Z2V0Q29t
cG9zaXRpb25TZWxlY3Rpb24oc3RhcnQsIGVuZCkpCisgICAgICAgIFtbTlNJbnB1dE1hbmFnZXIg
Y3VycmVudElucHV0TWFuYWdlcl0gbWFya2VkVGV4dFNlbGVjdGlvbkNoYW5nZWQ6TlNNYWtlUmFu
Z2Uoc3RhcnQsIGVuZCAtIHN0YXJ0KSBjbGllbnQ6c2VsZl07CisgICAgZWxzZSB7CisgICAgICAg
IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbmZpcm1Db21wb3NpdGlvbldpdGhvdXREaXN0dXJiaW5n
U2VsZWN0aW9uKCk7CisgICAgICAgIFtbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdl
cl0gbWFya2VkVGV4dEFiYW5kb25lZDpzZWxmXTsKKyAgICB9Cit9CisKK0BlbmQKKworLyoKKyAg
ICBUaGlzIGNsYXNzIHJ1bnMgdGhlIHNob3cgZm9yIGhhbmRpbmcgdGhlIGNvbXBsZXRlOiBOU1Rl
eHRWaWV3IG9wZXJhdGlvbi4gIEl0IGNvdW50cyBvbiBpdHMgSFRNTCB2aWV3CisgICAgdG8gY2Fs
bCBlbmRSZXZlcnRpbmdDaGFuZ2U6IHdoZW5ldmVyIHRoZSBjdXJyZW50IGNvbXBsZXRpb24gbmVl
ZHMgdG8gYmUgYWJvcnRlZC4KKyAKKyAgICBUaGUgY2xhc3MgaXMgaW4gb25lIG9mIHR3byBtb2Rl
czogIFBvcHVwV2luZG93IHNob3dpbmcsIG9yIG5vdC4gIEl0IGlzIHNob3duIHdoZW4gYSBjb21w
bGV0aW9uIHlpZWxkcworICAgIG1vcmUgdGhhbiBvbmUgbWF0Y2guICBJZiBhIGNvbXBsZXRpb24g
eWllbGRzIG9uZSBvciB6ZXJvIG1hdGNoZXMsIGl0IGlzIG5vdCBzaG93biwgYW5kICoqdGhlcmUg
aXMgbm8KKyAgICBzdGF0ZSBjYXJyaWVkIGFjcm9zcyB0byB0aGUgbmV4dCBjb21wbGV0aW9uKiou
CisgKi8KKworQGltcGxlbWVudGF0aW9uIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIKKworLSAo
aWQpaW5pdFdpdGhIVE1MVmlldzooV2ViSFRNTFZpZXcgKil2aWV3Cit7CisgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgX3Zp
ZXcgPSB2aWV3OworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAg
ICBbX3BvcHVwV2luZG93IHJlbGVhc2VdOworICAgIFtfY29tcGxldGlvbnMgcmVsZWFzZV07Cisg
ICAgW19vcmlnaW5hbFN0cmluZyByZWxlYXNlXTsKKyAgICAKKyAgICBbc3VwZXIgZGVhbGxvY107
Cit9CisKKy0gKHZvaWQpX2luc2VydE1hdGNoOihOU1N0cmluZyAqKW1hdGNoCit7CisgICAgLy8g
RklYTUU6IDM3Njk2NTQgLSBXZSBzaG91bGQgcHJlc2VydmUgY2FzZSBvZiBzdHJpbmcgYmVpbmcg
aW5zZXJ0ZWQsIGV2ZW4gaW4gcHJlZml4IChidXQgdGhlbiBhbHNvIGJlCisgICAgLy8gYWJsZSB0
byByZXZlcnQgdGhhdCkuICBNaW1pYyBOU1RleHQuCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW192
aWV3IF9mcmFtZV07CisgICAgTlNTdHJpbmcgKm5ld1RleHQgPSBbbWF0Y2ggc3Vic3RyaW5nRnJv
bUluZGV4OnByZWZpeExlbmd0aF07CisgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRl
eHQ6bmV3VGV4dCBzZWxlY3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKK30KKwor
Ly8gbW9zdGx5IGxpZnRlZCBmcm9tIE5TVGV4dFZpZXdfS2V5QmluZGluZy5tCistICh2b2lkKV9i
dWlsZFVJCit7CisgICAgTlNSZWN0IHNjcm9sbEZyYW1lID0gTlNNYWtlUmVjdCgwLCAwLCAxMDAs
IDEwMCk7CisgICAgTlNSZWN0IHRhYmxlRnJhbWUgPSBOU1plcm9SZWN0OyAgICAKKyAgICB0YWJs
ZUZyYW1lLnNpemUgPSBbTlNTY3JvbGxWaWV3IGNvbnRlbnRTaXplRm9yRnJhbWVTaXplOnNjcm9s
bEZyYW1lLnNpemUgaGFzSG9yaXpvbnRhbFNjcm9sbGVyOk5PIGhhc1ZlcnRpY2FsU2Nyb2xsZXI6
WUVTIGJvcmRlclR5cGU6TlNOb0JvcmRlcl07CisgICAgLy8gQWRkZWQgY2FzdCB0byB3b3JrIGFy
b3VuZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgRm91bmRhdGlvbiBpbml0V2l0aElkZW50aWZpZXI6
IG1ldGhvZHMgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyIHR5cGVzLgorICAgIE5TVGFibGVDb2x1
bW4gKmNvbHVtbiA9IFsoTlNUYWJsZUNvbHVtbiAqKVtOU1RhYmxlQ29sdW1uIGFsbG9jXSBpbml0
V2l0aElkZW50aWZpZXI6W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MF1dOworICAgIFtjb2x1bW4g
c2V0V2lkdGg6dGFibGVGcmFtZS5zaXplLndpZHRoXTsKKyAgICBbY29sdW1uIHNldEVkaXRhYmxl
Ok5PXTsKKyAgICAKKyAgICBfdGFibGVWaWV3ID0gW1tOU1RhYmxlVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTp0YWJsZUZyYW1lXTsKKyAgICBbX3RhYmxlVmlldyBzZXRBdXRvcmVzaXppbmdNYXNr
Ok5TVmlld1dpZHRoU2l6YWJsZV07CisgICAgW190YWJsZVZpZXcgYWRkVGFibGVDb2x1bW46Y29s
dW1uXTsKKyAgICBbY29sdW1uIHJlbGVhc2VdOworICAgIFtfdGFibGVWaWV3IHNldEdyaWRTdHls
ZU1hc2s6TlNUYWJsZVZpZXdHcmlkTm9uZV07CisgICAgW190YWJsZVZpZXcgc2V0Q29ybmVyVmll
dzpuaWxdOworICAgIFtfdGFibGVWaWV3IHNldEhlYWRlclZpZXc6bmlsXTsKKyAgICBbX3RhYmxl
VmlldyBzZXRDb2x1bW5BdXRvcmVzaXppbmdTdHlsZTpOU1RhYmxlVmlld1VuaWZvcm1Db2x1bW5B
dXRvcmVzaXppbmdTdHlsZV07CisgICAgW190YWJsZVZpZXcgc2V0RGVsZWdhdGU6c2VsZl07Cisg
ICAgW190YWJsZVZpZXcgc2V0RGF0YVNvdXJjZTpzZWxmXTsKKyAgICBbX3RhYmxlVmlldyBzZXRU
YXJnZXQ6c2VsZl07CisgICAgW190YWJsZVZpZXcgc2V0RG91YmxlQWN0aW9uOkBzZWxlY3Rvcih0
YWJsZUFjdGlvbjopXTsKKyAgICAKKyAgICBOU1Njcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSBbW05T
U2Nyb2xsVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpzY3JvbGxGcmFtZV07CisgICAgW3Njcm9s
bFZpZXcgc2V0Qm9yZGVyVHlwZTpOU05vQm9yZGVyXTsKKyAgICBbc2Nyb2xsVmlldyBzZXRIYXNW
ZXJ0aWNhbFNjcm9sbGVyOllFU107CisgICAgW3Njcm9sbFZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFz
azpOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlXTsKKyAgICBbc2Nyb2xs
VmlldyBzZXREb2N1bWVudFZpZXc6X3RhYmxlVmlld107CisgICAgW190YWJsZVZpZXcgcmVsZWFz
ZV07CisgICAgCisgICAgX3BvcHVwV2luZG93ID0gW1tOU1dpbmRvdyBhbGxvY10gaW5pdFdpdGhD
b250ZW50UmVjdDpzY3JvbGxGcmFtZSBzdHlsZU1hc2s6TlNCb3JkZXJsZXNzV2luZG93TWFzayBi
YWNraW5nOk5TQmFja2luZ1N0b3JlQnVmZmVyZWQgZGVmZXI6Tk9dOworICAgIFtfcG9wdXBXaW5k
b3cgc2V0QWxwaGFWYWx1ZTowLjg4Zl07CisgICAgW19wb3B1cFdpbmRvdyBzZXRDb250ZW50Vmll
dzpzY3JvbGxWaWV3XTsKKyAgICBbc2Nyb2xsVmlldyByZWxlYXNlXTsKKyAgICBbX3BvcHVwV2lu
ZG93IHNldEhhc1NoYWRvdzpZRVNdOworICAgIFtfcG9wdXBXaW5kb3cgc2V0T25lU2hvdDpZRVNd
OworICAgIFtfcG9wdXBXaW5kb3cgX3NldEZvcmNlQWN0aXZlQ29udHJvbHM6WUVTXTsKKyAgICBb
X3BvcHVwV2luZG93IHNldFJlbGVhc2VkV2hlbkNsb3NlZDpOT107Cit9CisKKy8vIG1vc3RseSBs
aWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJpbmRpbmcubQorLSAodm9pZClfcGxhY2VQb3B1cFdp
bmRvdzooTlNQb2ludCl0b3BMZWZ0Cit7CisgICAgaW50IG51bWJlclRvU2hvdyA9IFtfY29tcGxl
dGlvbnMgY291bnRdOworICAgIGlmIChudW1iZXJUb1Nob3cgPiAyMCkgeworICAgICAgICBudW1i
ZXJUb1Nob3cgPSAyMDsKKyAgICB9CisKKyAgICBOU1JlY3Qgd2luZG93RnJhbWU7CisgICAgTlNQ
b2ludCB3b3JkU3RhcnQgPSB0b3BMZWZ0OworICAgIHdpbmRvd0ZyYW1lLm9yaWdpbiA9IFtbX3Zp
ZXcgd2luZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOltfdmlldyBjb252ZXJ0UG9pbnQ6d29yZFN0
YXJ0IHRvVmlldzpuaWxdXTsKKyAgICB3aW5kb3dGcmFtZS5zaXplLmhlaWdodCA9IG51bWJlclRv
U2hvdyAqIFtfdGFibGVWaWV3IHJvd0hlaWdodF0gKyAobnVtYmVyVG9TaG93ICsgMSkgKiBbX3Rh
YmxlVmlldyBpbnRlcmNlbGxTcGFjaW5nXS5oZWlnaHQ7CisgICAgd2luZG93RnJhbWUub3JpZ2lu
LnkgLT0gd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQ7CisgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU0ZvbnQg
c3lzdGVtRm9udE9mU2l6ZToxMi4wZl0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsIG5pbF07CisgICAg
ZmxvYXQgbWF4V2lkdGggPSAwLjBmOworICAgIGludCBtYXhJbmRleCA9IC0xOworICAgIGludCBp
OworICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJUb1Nob3c7IGkrKykgeworICAgICAgICBmbG9h
dCB3aWR0aCA9IGNlaWxmKFtbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6aV0gc2l6ZVdpdGhB
dHRyaWJ1dGVzOmF0dHJpYnV0ZXNdLndpZHRoKTsKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4V2lk
dGgpIHsKKyAgICAgICAgICAgIG1heFdpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBtYXhJbmRl
eCA9IGk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2luZG93RnJhbWUuc2l6ZS53aWR0aCA9IDEw
MDsKKyAgICBpZiAobWF4SW5kZXggPj0gMCkgeworICAgICAgICBtYXhXaWR0aCA9IGNlaWxmKFtO
U1Njcm9sbFZpZXcgZnJhbWVTaXplRm9yQ29udGVudFNpemU6TlNNYWtlU2l6ZShtYXhXaWR0aCwg
MTAwLjBmKSBoYXNIb3Jpem9udGFsU2Nyb2xsZXI6Tk8gaGFzVmVydGljYWxTY3JvbGxlcjpZRVMg
Ym9yZGVyVHlwZTpOU05vQm9yZGVyXS53aWR0aCk7CisgICAgICAgIG1heFdpZHRoID0gY2VpbGYo
W05TV2luZG93IGZyYW1lUmVjdEZvckNvbnRlbnRSZWN0Ok5TTWFrZVJlY3QoMC4wZiwgMC4wZiwg
bWF4V2lkdGgsIDEwMC4wZikgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2tdLnNpemUu
d2lkdGgpOworICAgICAgICBtYXhXaWR0aCArPSA1LjBmOworICAgICAgICB3aW5kb3dGcmFtZS5z
aXplLndpZHRoID0gTUFYKG1heFdpZHRoLCB3aW5kb3dGcmFtZS5zaXplLndpZHRoKTsKKyAgICAg
ICAgbWF4V2lkdGggPSBNSU4oNDAwLjBmLCB3aW5kb3dGcmFtZS5zaXplLndpZHRoKTsKKyAgICB9
CisgICAgW19wb3B1cFdpbmRvdyBzZXRGcmFtZTp3aW5kb3dGcmFtZSBkaXNwbGF5Ok5PXTsKKyAg
ICAKKyAgICBbX3RhYmxlVmlldyByZWxvYWREYXRhXTsKKyAgICBbX3RhYmxlVmlldyBzZWxlY3RS
b3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OjBdIGJ5RXh0ZW5kaW5nU2Vs
ZWN0aW9uOk5PXTsKKyAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dUb1Zpc2libGU6MF07CisgICAg
W3NlbGYgX3JlZmxlY3RTZWxlY3Rpb25dOworICAgIFtfcG9wdXBXaW5kb3cgc2V0TGV2ZWw6TlNQ
b3BVcE1lbnVXaW5kb3dMZXZlbF07CisgICAgW19wb3B1cFdpbmRvdyBvcmRlckZyb250Om5pbF07
ICAgIAorICAgIFtbX3ZpZXcgd2luZG93XSBhZGRDaGlsZFdpbmRvdzpfcG9wdXBXaW5kb3cgb3Jk
ZXJlZDpOU1dpbmRvd0Fib3ZlXTsKK30KKworLSAodm9pZClkb0NvbXBsZXRpb24KK3sKKyAgICBp
ZiAoIV9wb3B1cFdpbmRvdykgeworICAgICAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOworICAgICAgICBpZiAoIWNoZWNrZXIp
IHsKKyAgICAgICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdvcmQg
c3RlbQorICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKKyAgICAgICAg
RE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBET01SYW5nZSAqd2hvbGVXb3JkID0gW2Zy
YW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6
OkVYVEVORAorICAgICAgICAgICAgZGlyZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tX
QVJEIGdyYW51bGFyaXR5OldvcmRHcmFudWxhcml0eV07CisgICAgICAgIERPTVJhbmdlICpwcmVm
aXggPSBbd2hvbGVXb3JkIGNsb25lUmFuZ2VdOworICAgICAgICBbcHJlZml4IHNldEVuZDpbc2Vs
ZWN0aW9uIHN0YXJ0Q29udGFpbmVyXSBvZmZzZXQ6W3NlbGVjdGlvbiBzdGFydE9mZnNldF1dOwor
CisgICAgICAgIC8vIFJlamVjdCBzb21lIE5PUCBjYXNlcworICAgICAgICBpZiAoW3ByZWZpeCBj
b2xsYXBzZWRdKSB7CisgICAgICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBOU1N0cmluZyAqcHJlZml4U3RyID0gW2ZyYW1lIF9zdHJpbmdG
b3JSYW5nZTpwcmVmaXhdOworICAgICAgICBOU1N0cmluZyAqdHJpbW1lZFByZWZpeCA9IFtwcmVm
aXhTdHIgc3RyaW5nQnlUcmltbWluZ0NoYXJhY3RlcnNJblNldDpbTlNDaGFyYWN0ZXJTZXQgd2hp
dGVzcGFjZUFuZE5ld2xpbmVDaGFyYWN0ZXJTZXRdXTsKKyAgICAgICAgaWYgKFt0cmltbWVkUHJl
Zml4IGxlbmd0aF0gPT0gMCkgeworICAgICAgICAgICAgTlNCZWVwKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJlZml4TGVuZ3RoID0gW3ByZWZpeFN0ciBsZW5n
dGhdOworCisgICAgICAgIC8vIExvb2t1cCBtYXRjaGVzCisgICAgICAgIFtfY29tcGxldGlvbnMg
cmVsZWFzZV07CisgICAgICAgIF9jb21wbGV0aW9ucyA9IFtjaGVja2VyIGNvbXBsZXRpb25zRm9y
UGFydGlhbFdvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBbcHJlZml4U3RyIGxlbmd0aF0pIGluU3Ry
aW5nOnByZWZpeFN0ciBsYW5ndWFnZTpuaWwgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpbW192aWV3
IF93ZWJWaWV3XSBzcGVsbENoZWNrZXJEb2N1bWVudFRhZ11dOworICAgICAgICBbX2NvbXBsZXRp
b25zIHJldGFpbl07CisgICAgCisgICAgICAgIGlmICghX2NvbXBsZXRpb25zIHx8IFtfY29tcGxl
dGlvbnMgY291bnRdID09IDApIHsKKyAgICAgICAgICAgIE5TQmVlcCgpOworICAgICAgICB9IGVs
c2UgaWYgKFtfY29tcGxldGlvbnMgY291bnRdID09IDEpIHsKKyAgICAgICAgICAgIFtzZWxmIF9p
bnNlcnRNYXRjaDpbX2NvbXBsZXRpb25zIG9iamVjdEF0SW5kZXg6MF1dOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKCFfb3JpZ2luYWxTdHJpbmcpOyAgICAgICAvLyB0aGlz
IHNob3VsZCBvbmx5IGJlIHNldCBJRkYgd2UgaGF2ZSBhIHBvcHVwIHdpbmRvdworICAgICAgICAg
ICAgX29yaWdpbmFsU3RyaW5nID0gW1tmcmFtZSBfc3RyaW5nRm9yUmFuZ2U6c2VsZWN0aW9uXSBy
ZXRhaW5dOworICAgICAgICAgICAgW3NlbGYgX2J1aWxkVUldOworICAgICAgICAgICAgTlNSZWN0
IHdvcmRSZWN0ID0gW2ZyYW1lIF9jYXJldFJlY3RBdE5vZGU6W3dob2xlV29yZCBzdGFydENvbnRh
aW5lcl0gb2Zmc2V0Olt3aG9sZVdvcmQgc3RhcnRPZmZzZXRdIGFmZmluaXR5Ok5TU2VsZWN0aW9u
QWZmaW5pdHlEb3duc3RyZWFtXTsKKyAgICAgICAgICAgIC8vICsxIHRvIGJlIHVuZGVyIHRoZSB3
b3JkLCBub3QgdGhlIGNhcmV0CisgICAgICAgICAgICAvLyBGSVhNRSAtIDM3Njk2NTIgLSBXcm9u
ZyBwb3NpdGlvbmluZyBmb3IgcmlnaHQgdG8gbGVmdCBsYW5ndWFnZXMuICBXZSBzaG91bGQgbGlu
ZSB1cCB0aGUgdXBwZXIKKyAgICAgICAgICAgIC8vIHJpZ2h0IGNvcm5lciB3aXRoIHRoZSBjYXJl
dCBpbnN0ZWFkIG9mIHVwcGVyIGxlZnQsIGFuZCB0aGUgKzEgd291bGQgYmUgYSAtMS4KKyAgICAg
ICAgICAgIE5TUG9pbnQgd29yZExvd2VyTGVmdCA9IHsgTlNNaW5YKHdvcmRSZWN0KSsxLCBOU01h
eFkod29yZFJlY3QpIH07CisgICAgICAgICAgICBbc2VsZiBfcGxhY2VQb3B1cFdpbmRvdzp3b3Jk
TG93ZXJMZWZ0XTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFtzZWxmIGVuZFJl
dmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOworICAgIH0KK30KKworLSAodm9pZCllbmRS
ZXZlcnRpbmdDaGFuZ2U6KEJPT0wpcmV2ZXJ0Q2hhbmdlIG1vdmVMZWZ0OihCT09MKWdvTGVmdAor
eworICAgIGlmIChfcG9wdXBXaW5kb3cpIHsKKyAgICAgICAgLy8gdGVhciBkb3duIFVJCisgICAg
ICAgIFtbX3ZpZXcgd2luZG93XSByZW1vdmVDaGlsZFdpbmRvdzpfcG9wdXBXaW5kb3ddOworICAg
ICAgICBbX3BvcHVwV2luZG93IG9yZGVyT3V0OnNlbGZdOworICAgICAgICAvLyBNdXN0IGF1dG9y
ZWxlYXNlIGJlY2F1c2UgZXZlbnQgdHJhY2tpbmcgY29kZSBtYXkgYmUgb24gdGhlIHN0YWNrIHRv
dWNoaW5nIFVJCisgICAgICAgIFtfcG9wdXBXaW5kb3cgYXV0b3JlbGVhc2VdOworICAgICAgICBf
cG9wdXBXaW5kb3cgPSBuaWw7CisKKyAgICAgICAgaWYgKHJldmVydENoYW5nZSkgeworICAgICAg
ICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07CisgICAgICAgICAgICBbZnJh
bWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpfb3JpZ2luYWxTdHJpbmcgc2VsZWN0UmVwbGFj
ZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107CisgICAgICAgIH0gZWxzZSBpZiAoW192aWV3IF9o
YXNTZWxlY3Rpb25dKSB7CisgICAgICAgICAgICBpZiAoZ29MZWZ0KQorICAgICAgICAgICAgICAg
IFtfdmlldyBtb3ZlQmFja3dhcmQ6bmlsXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBbX3ZpZXcgbW92ZUZvcndhcmQ6bmlsXTsKKyAgICAgICAgfQorICAgICAgICBbX29yaWdp
bmFsU3RyaW5nIHJlbGVhc2VdOworICAgICAgICBfb3JpZ2luYWxTdHJpbmcgPSBuaWw7CisgICAg
fQorICAgIC8vIGVsc2UgdGhlcmUgaXMgbm8gc3RhdGUgdG8gYWJvcnQgaWYgdGhlIHdpbmRvdyB3
YXMgbm90IHVwCit9CisKKy0gKEJPT0wpcG9wdXBXaW5kb3dJc09wZW4KK3sKKyAgICByZXR1cm4g
X3BvcHVwV2luZG93ICE9IG5pbDsKK30KKworLy8gV2ViSFRNTFZpZXcgZ2l2ZXMgdXMgYSBjcmFj
ayBhdCBrZXkgZXZlbnRzIGl0IHNlZXMuIFJldHVybiB3aGV0aGVyIHdlIGNvbnN1bWVkIHRoZSBl
dmVudC4KKy8vIFRoZSBmZWF0dXJlcyBmb3IgdGhlIHZhcmlvdXMga2V5cyBtaW1pYyBOU1RleHRW
aWV3LgorLSAoQk9PTClmaWx0ZXJLZXlEb3duOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAo
IV9wb3B1cFdpbmRvdykKKyAgICAgICAgcmV0dXJuIE5POworICAgIE5TU3RyaW5nICpzdHJpbmcg
PSBbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXTsKKyAgICBpZiAoIVtzdHJpbmcg
bGVuZ3RoXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIHVuaWNoYXIgYyA9IFtzdHJpbmcgY2hh
cmFjdGVyQXRJbmRleDowXTsKKyAgICBpZiAoYyA9PSBOU1VwQXJyb3dGdW5jdGlvbktleSkgewor
ICAgICAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBzZWxlY3RlZFJvd107CisgICAg
ICAgIGlmICgwIDwgc2VsZWN0ZWRSb3cpIHsKKyAgICAgICAgICAgIFtfdGFibGVWaWV3IHNlbGVj
dFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhTZXRXaXRoSW5kZXg6c2VsZWN0ZWRSb3cgLSAx
XSBieUV4dGVuZGluZ1NlbGVjdGlvbjpOT107CisgICAgICAgICAgICBbX3RhYmxlVmlldyBzY3Jv
bGxSb3dUb1Zpc2libGU6c2VsZWN0ZWRSb3cgLSAxXTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9PSBOU0Rvd25BcnJvd0Z1bmN0aW9uS2V5KSB7Cisg
ICAgICAgIGludCBzZWxlY3RlZFJvdyA9IFtfdGFibGVWaWV3IHNlbGVjdGVkUm93XTsKKyAgICAg
ICAgaWYgKHNlbGVjdGVkUm93IDwgKGludClbX2NvbXBsZXRpb25zIGNvdW50XSAtIDEpIHsKKyAg
ICAgICAgICAgIFtfdGFibGVWaWV3IHNlbGVjdFJvd0luZGV4ZXM6W05TSW5kZXhTZXQgaW5kZXhT
ZXRXaXRoSW5kZXg6c2VsZWN0ZWRSb3cgKyAxXSBieUV4dGVuZGluZ1NlbGVjdGlvbjpOT107Cisg
ICAgICAgICAgICBbX3RhYmxlVmlldyBzY3JvbGxSb3dUb1Zpc2libGU6c2VsZWN0ZWRSb3cgKyAx
XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9PSBO
U1JpZ2h0QXJyb3dGdW5jdGlvbktleSB8fCBjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0g
J1x0JykgeworICAgICAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBiYWNrdGFiPworICAgICAgICBb
c2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgICAgICByZXR1cm4g
WUVTOworICAgIH0KKyAgICBpZiAoYyA9PSBOU0xlZnRBcnJvd0Z1bmN0aW9uS2V5KSB7CisgICAg
ICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpZRVNdOworICAgICAgICBy
ZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9PSAweDFCIHx8IGMgPT0gTlNGNUZ1bmN0aW9u
S2V5KSB7CisgICAgICAgIC8vIEZJWE1FOiBGNT8KKyAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5n
Q2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAg
IGlmIChjID09ICcgJyB8fCBjID49IDB4MjEgJiYgYyA8PSAweDJGIHx8IGMgPj0gMHgzQSAmJiBj
IDw9IDB4NDAgfHwgYyA+PSAweDVCICYmIGMgPD0gMHg2MCB8fCBjID49IDB4N0IgJiYgYyA8PSAw
eDdEKSB7CisgICAgICAgIC8vIEZJWE1FOiBJcyB0aGUgYWJvdmUgbGlzdCBvZiBrZXlzIHJlYWxs
eSBkZWZpbml0aXZlPworICAgICAgICAvLyBPcmlnaW5hbGx5IHRoaXMgY29kZSBjYWxsZWQgaXNw
dW5jdDsgYXJlbid0IHRoZXJlIG90aGVyIHB1bmN0dWF0aW9uIGtleXMgb24gaW50ZXJuYXRpb25h
bCBrZXlib2FyZHM/CisgICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVm
dDpOT107CisgICAgICAgIHJldHVybiBOTzsgLy8gbGV0IHRoZSBjaGFyIGdldCBpbnNlcnRlZAor
ICAgIH0KKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpX3JlZmxlY3RTZWxlY3Rpb24KK3sK
KyAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBzZWxlY3RlZFJvd107CisgICAgQVNT
RVJUKHNlbGVjdGVkUm93ID49IDAgJiYgc2VsZWN0ZWRSb3cgPCAoaW50KVtfY29tcGxldGlvbnMg
Y291bnRdKTsKKyAgICBbc2VsZiBfaW5zZXJ0TWF0Y2g6W19jb21wbGV0aW9ucyBvYmplY3RBdElu
ZGV4OnNlbGVjdGVkUm93XV07Cit9CisKKy0gKHZvaWQpdGFibGVBY3Rpb246KGlkKXNlbmRlcgor
eworICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsKKyAgICBbc2VsZiBlbmRSZXZlcnRpbmdD
aGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOworfQorCistIChOU0ludGVnZXIpbnVtYmVyT2ZSb3dzSW5U
YWJsZVZpZXc6KE5TVGFibGVWaWV3ICopdGFibGVWaWV3Cit7CisgICAgcmV0dXJuIFtfY29tcGxl
dGlvbnMgY291bnRdOworfQorCistIChpZCl0YWJsZVZpZXc6KE5TVGFibGVWaWV3ICopdGFibGVW
aWV3IG9iamVjdFZhbHVlRm9yVGFibGVDb2x1bW46KE5TVGFibGVDb2x1bW4gKil0YWJsZUNvbHVt
biByb3c6KE5TSW50ZWdlcilyb3cKK3sKKyAgICByZXR1cm4gW19jb21wbGV0aW9ucyBvYmplY3RB
dEluZGV4OnJvd107Cit9CisKKy0gKHZvaWQpdGFibGVWaWV3U2VsZWN0aW9uRGlkQ2hhbmdlOihO
U05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0
aW9uXTsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkRvY3Vt
ZW50UHJpdmF0ZVByb3RvY29scykKKworLSAoTlNSZWN0KXNlbGVjdGlvblJlY3QKK3sKKyAgICBp
ZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCisgICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9mcmFt
ZV0pLT5zZWxlY3Rpb25Cb3VuZHMoKTsKKyAgICByZXR1cm4gTlNaZXJvUmVjdDsKK30KKworLSAo
TlNBcnJheSAqKXNlbGVjdGlvblRleHRSZWN0cworeworICAgIGlmICghW3NlbGYgX2hhc1NlbGVj
dGlvbl0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgVmVjdG9yPEZsb2F0UmVjdD4g
bGlzdDsKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisg
ICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uVGV4dFJlY3RzKGxpc3QpOworCisgICAgdW5zaWdu
ZWQgc2l6ZSA9IGxpc3Quc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbW1tO
U011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhDYXBhY2l0eTpzaXplXSBhdXRvcmVsZWFzZV07
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgW3Jlc3Vs
dCBhZGRPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVjdDpsaXN0W2ldXV07CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNWaWV3ICopc2VsZWN0aW9uVmlldworeworICAgIHJl
dHVybiBzZWxmOworfQorCistIChOU0ltYWdlICopc2VsZWN0aW9uSW1hZ2VGb3JjaW5nQmxhY2tU
ZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0Cit7CisgICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25d
KQorICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uSW1hZ2UoZm9y
Y2VCbGFja1RleHQpOworICAgIHJldHVybiBuaWw7Cit9CisKKy0gKE5TUmVjdClzZWxlY3Rpb25J
bWFnZVJlY3QKK3sKKyAgICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCisgICAgICAgIHJldHVy
biBjb3JlKFtzZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25Cb3VuZHMoKTsKKyAgICByZXR1cm4gTlNa
ZXJvUmVjdDsKK30KKworLSAoTlNBcnJheSAqKXBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbgor
eworICAgIGlmIChbc2VsZiBfY2FuU21hcnRDb3B5T3JEZWxldGVdKSB7CisgICAgICAgIE5TTXV0
YWJsZUFycmF5ICp0eXBlcyA9IFtbW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5
cGVzXSBtdXRhYmxlQ29weV0gYXV0b3JlbGVhc2VdOworICAgICAgICBbdHlwZXMgYWRkT2JqZWN0
OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKKyAgICAgICAgcmV0dXJuIHR5cGVzOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHJldHVybiBbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJk
VHlwZXNdOworICAgIH0KK30KKworLSAodm9pZCl3cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJk
VHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQKK3sKKyAgICBbc2VsZiBfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5
cGVzIHRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6bmlsXTsK
K30KKworLSAodm9pZClzZWxlY3RBbGwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoY29yZUZyYW1lKQorICAgICAgICBjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5zZWxlY3RBbGwoKTsKK30KKworLSAodm9pZClkZXNlbGVjdEFsbAoreworICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZy
YW1lKQorICAgICAgICByZXR1cm47CisgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+Y2xlYXIo
KTsKK30KKworLSAoTlNTdHJpbmcgKilzdHJpbmcKK3sKKyAgICByZXR1cm4gW1tzZWxmIF9mcmFt
ZV0gX3N0cmluZ0ZvclJhbmdlOltzZWxmIF9kb2N1bWVudFJhbmdlXV07Cit9CisKKy0gKE5TQXR0
cmlidXRlZFN0cmluZyAqKV9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKK3sKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisjaWYg
IUxPR19ESVNBQkxFRCAgICAgICAgCisgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVH
ZXRDdXJyZW50KCk7CisjZW5kaWYgICAgCisgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gX2luaXRXaXRoRE9NUmFuZ2U6cmFuZ2VdIGF1dG9yZWxlYXNl
XTsKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRp
bWVHZXRDdXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5nLCAiY3JlYXRpbmcgYXR0cmli
dXRlZCBzdHJpbmcgZnJvbSBzZWxlY3Rpb24gdG9vayAlZiBzZWNvbmRzLiIsIGR1cmF0aW9uKTsK
KyNlbmRpZgorICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworfQorCistIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCit7CisgICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50
ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOworICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6W2Rv
Y3VtZW50IF9kb2N1bWVudFJhbmdlXV07CisgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7Cisg
ICAgICAgIERvY3VtZW50KiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRvY3VtZW50KTsKKyAgICAgICAg
YXR0cmlidXRlZFN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlOlJhbmdlOjpjcmVhdGUoY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAs
IGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jaGlsZE5vZGVDb3VudCgpKS5nZXQoKV07Cisg
ICAgfQorICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworfQorCistIChOU1N0cmluZyAqKXNl
bGVjdGVkU3RyaW5nCit7CisgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3RlZFN0cmlu
Z107Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0cmlu
ZworeworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9h
dHRyaWJ1dGVTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdXTsKKyAgICBp
ZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7CisgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtOU0F0
dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlOnJhbmdlLmdldCgp
XTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKK30KKwor
LSAoQk9PTClzdXBwb3J0c1RleHRFbmNvZGluZworeworICAgIHJldHVybiBZRVM7Cit9CisKKy0g
KEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2Fy
ZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcgc3RhcnRJ
blNlbGVjdGlvbjooQk9PTClzdGFydEluU2VsZWN0aW9uCit7CisgICAgaWYgKCFbc3RyaW5nIGxl
bmd0aF0pCisgICAgICAgIHJldHVybiBOTzsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZmluZFN0
cmluZyhzdHJpbmcsIGZvcndhcmQsIGNhc2VGbGFnLCB3cmFwRmxhZywgc3RhcnRJblNlbGVjdGlv
bik7Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJEb2N1bWVu
dEludGVybmFsUHJvdG9jb2xzKQorCistIChOU0RpY3Rpb25hcnkgKillbGVtZW50QXRQb2ludDoo
TlNQb2ludClwb2ludAoreworICAgIHJldHVybiBbc2VsZiBlbGVtZW50QXRQb2ludDpwb2ludCBh
bGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOworfQorCistIChOU0RpY3Rpb25hcnkgKillbGVtZW50QXRQ
b2ludDooTlNQb2ludClwb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6KEJPT0wpYWxsb3cKK3sKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVG
cmFtZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW1tbV2ViRWxlbWVudERpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludChJbnRQb2ludChwb2ludCksIGFsbG93KV0gYXV0b3Jl
bGVhc2VdOworfQorCistIChOU1VJbnRlZ2VyKW1hcmtBbGxNYXRjaGVzRm9yVGV4dDooTlNTdHJp
bmcgKilzdHJpbmcgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyBsaW1pdDooTlNVSW50ZWdl
cilsaW1pdAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwor
ICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY29yZUZy
YW1lLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoc3RyaW5nLCBjYXNlRmxhZywgbGltaXQpOworfQor
CistICh2b2lkKXNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQ6KEJPT0wpbmV3VmFs
dWUKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBp
ZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNvcmVGcmFtZS0+c2V0TWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChuZXdWYWx1ZSk7Cit9CisKKy0gKEJPT0wpbWFya2Vk
VGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5tYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7Cit9CisKKy0gKHZvaWQpdW5tYXJrQWxsVGV4
dE1hdGNoZXMKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
KyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAg
ICByZXR1cm47CisgICAgZG9jdW1lbnQtPnJlbW92ZU1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRl
eHRNYXRjaCk7Cit9CisKKy0gKE5TQXJyYXkgKilyZWN0c0ZvclRleHRNYXRjaGVzCit7CisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJh
bWUpCisgICAgICAgIHJldHVybiBbTlNBcnJheSBhcnJheV07CisgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAg
IHJldHVybiBbTlNBcnJheSBhcnJheV07CisKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBk
b2N1bWVudC0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRj
aCk7CisgICAgdW5zaWduZWQgY291bnQgPSByZWN0cy5zaXplKCk7CisgICAgTlNNdXRhYmxlQXJy
YXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpjb3VudF07Cisg
ICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7ICsraW5kZXgpCisgICAg
ICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6cmVjdHNbaW5kZXhd
XV07ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0BlbmQKKworLy8gVGhpcyBpcyB1c2Vk
IGJ5IEFwcEtpdCBhbmQgaXMgaW5jbHVkZWQgaGVyZSBzbyB0aGF0IFdlYkRhdGFQcm90b2NvbFNj
aGVtZSBpcyBvbmx5IGRlZmluZWQgb25jZS4KK0BpbXBsZW1lbnRhdGlvbiBOU1VSTCAoV2ViRGF0
YVVSTCkKKworKyAoTlNVUkwgKilfd2ViX3VuaXF1ZVdlYkRhdGFVUkwKK3sKKyAgICBDRlVVSURS
ZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0KTsKKyAgICBOU1N0
cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmluZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKKyAgICBDRlJlbGVhc2UoVVVJRFJlZik7CisgICAgTlNV
UkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0
OkAiJUA6Ly8lQCIsIFdlYkRhdGFQcm90b2NvbFNjaGVtZSwgVVVJRFN0cmluZ11dOworICAgIENG
UmVsZWFzZShVVUlEU3RyaW5nKTsKKyAgICByZXR1cm4gVVJMOworfQorCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJSZXNwb25kZXJDaGFpblNpbmsKKworLSAoaWQpaW5pdFdpdGhSZXNwb25k
ZXJDaGFpbjooTlNSZXNwb25kZXIgKiljaGFpbgoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07
CisgICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gY2hhaW47CisgICAgd2hpbGUgKE5TUmVzcG9u
ZGVyICpuZXh0ID0gW19sYXN0UmVzcG9uZGVySW5DaGFpbiBuZXh0UmVzcG9uZGVyXSkKKyAgICAg
ICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gbmV4dDsKKyAgICBbX2xhc3RSZXNwb25kZXJJbkNo
YWluIHNldE5leHRSZXNwb25kZXI6c2VsZl07CisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZv
aWQpZGV0YWNoCit7CisgICAgW19sYXN0UmVzcG9uZGVySW5DaGFpbiBzZXROZXh0UmVzcG9uZGVy
Om5pbF07CisgICAgX2xhc3RSZXNwb25kZXJJbkNoYWluID0gbmlsOworfQorCistIChCT09MKXJl
Y2VpdmVkVW5oYW5kbGVkQ29tbWFuZAoreworICAgIHJldHVybiBfcmVjZWl2ZWRVbmhhbmRsZWRD
b21tYW5kOworfQorCistICh2b2lkKW5vUmVzcG9uZGVyRm9yOihTRUwpc2VsZWN0b3IKK3sKKyAg
ICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOworfQorCistICh2b2lkKWRvQ29tbWFu
ZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1h
bmQgPSBZRVM7Cit9CisKKy0gKEJPT0wpdHJ5VG9QZXJmb3JtOihTRUwpYWN0aW9uIHdpdGg6KGlk
KW9iamVjdAoreworICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQgPSBZRVM7CisgICAgcmV0
dXJuIFlFUzsKK30KKworQGVuZApJbmRleDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21w
bGV0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJU
ZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gNDQyOTIpCisrKyBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNjQzMyArMSw0NSBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAg
KEMpIDIwMDYsIDIwMDcgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKICAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCiAgKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbXBvcnQgIldl
YkhUTUxWaWV3LmgiCi0KLSNpbXBvcnQgIkRPTUNTU1N0eWxlRGVjbGFyYXRpb25JbnRlcm5hbC5o
IgotI2ltcG9ydCAiRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmgiCi0jaW1wb3J0ICJET01E
b2N1bWVudEludGVybmFsLmgiCi0jaW1wb3J0ICJET01Ob2RlSW50ZXJuYWwuaCIKLSNpbXBvcnQg
IkRPTVJhbmdlSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkFyY2hpdmUuaCIKLSNpbXBvcnQgIldl
YkNsaXBWaWV3LmgiCi0jaW1wb3J0ICJXZWJET01PcGVyYXRpb25zSW50ZXJuYWwuaCIKLSNpbXBv
cnQgIldlYkRhdGFTb3VyY2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRGVmYXVsdFVJRGVsZWdh
dGUuaCIKLSNpbXBvcnQgIldlYkRvY3VtZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYkR5bmFt
aWNTY3JvbGxCYXJzVmlldy5oIgotI2ltcG9ydCAiV2ViRWRpdGluZ0RlbGVnYXRlLmgiCi0jaW1w
b3J0ICJXZWJFbGVtZW50RGljdGlvbmFyeS5oIgotI2ltcG9ydCAiV2ViRnJhbWVJbnRlcm5hbC5o
IgotI2ltcG9ydCAiV2ViRnJhbWVQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJGcmFtZVZpZXdJbnRl
cm5hbC5oIgotI2ltcG9ydCAiV2ViSFRNTFJlcHJlc2VudGF0aW9uUHJpdmF0ZS5oIgotI2ltcG9y
dCAiV2ViSFRNTFZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2lt
cG9ydCAiV2ViS2l0TlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYktpdFZlcnNpb25DaGVj
a3MuaCIKLSNpbXBvcnQgIldlYkxvY2FsaXphYmxlU3RyaW5ncy5oIgotI2ltcG9ydCAiV2ViTlNB
dHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU0V2ZW50RXh0cmFzLmgiCi0j
aW1wb3J0ICJXZWJOU0ZpbGVNYW5hZ2VyRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU0ltYWdlRXh0
cmFzLmgiCi0jaW1wb3J0ICJXZWJOU09iamVjdEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNQYXN0
ZWJvYXJkRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1ByaW50T3BlcmF0aW9uRXh0cmFzLmgiCi0j
aW1wb3J0ICJXZWJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiV2ViTlNWaWV3RXh0cmFzLmgiCi0j
aW1wb3J0ICJXZWJOZXRzY2FwZVBsdWdpblZpZXcuaCIKLSNpbXBvcnQgIldlYk5vZGVIaWdobGln
aHQuaCIKLSNpbXBvcnQgIldlYlBsdWdpbkNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlByZWZl
cmVuY2VzLmgiCi0jaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKLSNpbXBvcnQgIldl
YlJlc291cmNlUHJpdmF0ZS5oIgotI2ltcG9ydCAiV2ViU3RyaW5nVHJ1bmNhdG9yLmgiCi0jaW1w
b3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJVSURlbGVnYXRlUHJpdmF0ZS5o
IgotI2ltcG9ydCAiV2ViVmlld0ludGVybmFsLmgiCi0jaW1wb3J0IDxBcHBLaXQvTlNBY2Nlc3Np
YmlsaXR5Lmg+Ci0jaW1wb3J0IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2Vydmlj
ZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaD4KLSNp
bXBvcnQgPFdlYkNvcmUvQ2FjaGVkSW1hZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvQ29udGV4dE1lbnUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ29udGV4dE1lbnVDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0Rv
Y3VtZW50RnJhZ21lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRHJhZ0NvbnRyb2xsZXIuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvRWRpdG9yLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VkaXRvckRlbGV0ZUFj
dGlvbi5oPgotI2ltcG9ydCA8V2ViQ29yZS9FbGVtZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V2
ZW50SGFuZGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9FeGNlcHRpb25IYW5kbGVycy5oPgotI2lt
cG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9s
bGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
TG9hZGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MTmFtZXMuaD4KLSNpbXBvcnQgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgotI2ltcG9y
dCA8V2ViQ29yZS9JbWFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVdlYkFyY2hpdmUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvTUlN
RVR5cGVSZWdpc3RyeS5oPgotI2ltcG9ydCA8V2ViQ29yZS9QYWdlLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybU1v
dXNlRXZlbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
U2VsZWN0aW9uQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlRm9udERhdGEuaD4KLSNpbXBvcnQgPFdlYkNvcmUvVGV4
dC5oPgotI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3JlT2JqQ0V4dHJhcy5oPgotI2ltcG9ydCA8V2Vi
Q29yZS9XZWJDb3JlVGV4dFJlbmRlcmVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL21hcmt1cC5oPgot
I2ltcG9ydCA8V2ViS2l0L0RPTS5oPgotI2ltcG9ydCA8V2ViS2l0L0RPTUV4dGVuc2lvbnMuaD4K
LSNpbXBvcnQgPFdlYktpdC9ET01Qcml2YXRlLmg+Ci0jaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRl
cmZhY2UuaD4KLSNpbXBvcnQgPGRsZmNuLmg+Ci0jaW1wb3J0IDxsaW1pdHM+Ci0jaW1wb3J0IDxy
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLSNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgotI2VuZGlmCi0KLXVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKLXVzaW5n
IG5hbWVzcGFjZSBXVEY7Ci0KLUBpbnRlcmZhY2UgTlNXaW5kb3cgKEJvcmRlclZpZXdBY2Nlc3Mp
Ci0tIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldzsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE5T
V2luZG93IChCb3JkZXJWaWV3QWNjZXNzKQotLSAoTlNWaWV3Kilfd2ViX2JvcmRlclZpZXcKLXsK
LSAgICByZXR1cm4gX2JvcmRlclZpZXc7Ci19Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViUmVzcG9u
ZGVyQ2hhaW5TaW5rIDogTlNSZXNwb25kZXIgewotICAgIE5TUmVzcG9uZGVyKiBfbGFzdFJlc3Bv
bmRlckluQ2hhaW47Ci0gICAgQk9PTCBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kOwotfQotLSAo
aWQpaW5pdFdpdGhSZXNwb25kZXJDaGFpbjooTlNSZXNwb25kZXIgKiljaGFpbjsKLS0gKHZvaWQp
ZGV0YWNoOwotLSAoQk9PTClyZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQ7Ci1AZW5kCi0KLXN0YXRp
YyBJTVAgb2xkU2V0Q3Vyc29ySU1QID0gTlVMTDsKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VS
Ci0KLXN0YXRpYyBJTVAgb2xkUmVzZXRDdXJzb3JSZWN0c0lNUCA9IE5VTEw7Ci1zdGF0aWMgQk9P
TCBjYW5TZXRDdXJzb3IgPSBZRVM7Ci0KLXN0YXRpYyB2b2lkIHJlc2V0Q3Vyc29yUmVjdHMoTlNX
aW5kb3cqIHNlbGYsIFNFTCBjbWQpCi17Ci0gICAgTlNQb2ludCBwb2ludCA9IFtzZWxmIG1vdXNl
TG9jYXRpb25PdXRzaWRlT2ZFdmVudFN0cmVhbV07Ci0gICAgTlNWaWV3KiB2aWV3ID0gW1tzZWxm
IF93ZWJfYm9yZGVyVmlld10gaGl0VGVzdDpwb2ludF07Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9m
Q2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0pIHsKLSAgICAgICAgV2ViSFRNTFZpZXcgKmh0bWxW
aWV3ID0gKFdlYkhUTUxWaWV3Kil2aWV3OwotICAgICAgICBOU1BvaW50IGxvY2FsUG9pbnQgPSBb
aHRtbFZpZXcgY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF07Ci0gICAgICAgIE5TRGlj
dGlvbmFyeSAqZGljdCA9IFtodG1sVmlldyBlbGVtZW50QXRQb2ludDpsb2NhbFBvaW50IGFsbG93
U2hhZG93Q29udGVudDpOT107Ci0gICAgICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBbZGljdCBv
YmplY3RGb3JLZXk6V2ViRWxlbWVudERPTU5vZGVLZXldOwotICAgICAgICBpZiAoIVtlbGVtZW50
IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxBcHBsZXRFbGVtZW50IGNsYXNzXV0gJiYgIVtlbGVtZW50
IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxPYmplY3RFbGVtZW50IGNsYXNzXV0gJiYKLSAgICAgICAg
ICAgICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MRW1iZWRFbGVtZW50IGNsYXNzXV0p
Ci0gICAgICAgICAgICBjYW5TZXRDdXJzb3IgPSBOTzsKLSAgICB9Ci0gICAgb2xkUmVzZXRDdXJz
b3JSZWN0c0lNUChzZWxmLCBjbWQpOwotICAgIGNhblNldEN1cnNvciA9IFlFUzsKLX0KLQotc3Rh
dGljIHZvaWQgc2V0Q3Vyc29yKE5TQ3Vyc29yKiBzZWxmLCBTRUwgY21kKQotewotICAgIGlmIChj
YW5TZXRDdXJzb3IpCi0gICAgICAgIG9sZFNldEN1cnNvcklNUChzZWxmLCBjbWQpOwotfQotCi0j
ZWxzZQotCi1zdGF0aWMgdm9pZCBzZXRDdXJzb3IoTlNXaW5kb3cqIHNlbGYsIFNFTCBjbWQsIE5T
UG9pbnQgcG9pbnQpCi17Ci0gICAgTlNWaWV3KiB2aWV3ID0gW1tzZWxmIF93ZWJfYm9yZGVyVmll
d10gaGl0VGVzdDpwb2ludF07Ci0gICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxW
aWV3IGNsYXNzXV0pIHsKLSAgICAgICAgV2ViSFRNTFZpZXcgKmh0bWxWaWV3ID0gKFdlYkhUTUxW
aWV3Kil2aWV3OwotICAgICAgICBOU1BvaW50IGxvY2FsUG9pbnQgPSBbaHRtbFZpZXcgY29udmVy
dFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF07Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqZGljdCA9
IFtodG1sVmlldyBlbGVtZW50QXRQb2ludDpsb2NhbFBvaW50IGFsbG93U2hhZG93Q29udGVudDpO
T107Ci0gICAgICAgIERPTUVsZW1lbnQgKmVsZW1lbnQgPSBbZGljdCBvYmplY3RGb3JLZXk6V2Vi
RWxlbWVudERPTU5vZGVLZXldOwotICAgICAgICBpZiAoIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6
W0RPTUhUTUxBcHBsZXRFbGVtZW50IGNsYXNzXV0gJiYgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6
W0RPTUhUTUxPYmplY3RFbGVtZW50IGNsYXNzXV0gJiYKLSAgICAgICAgICAgICFbZWxlbWVudCBp
c0tpbmRPZkNsYXNzOltET01IVE1MRW1iZWRFbGVtZW50IGNsYXNzXV0pCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG9sZFNldEN1cnNvcklNUChzZWxmLCBjbWQsIHBvaW50KTsKLX0K
LQotI2VuZGlmCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLUBpbnRlcmZh
Y2UgV2ViTGF5ZXJIb3N0aW5nVmlldyA6IE5TVmlldwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
V2ViTGF5ZXJIb3N0aW5nVmlldwotCi0vLyBFbXB0eSBOU1ZpZXdzIGludGVyY2VwdCByaWdodE1v
dXNlRG93bjogdG8gZG8gY29udGV4dCBtZW51IGhhbmRsaW5nLCBidXQgd2UgbmVlZCB0aGUgV2Vi
TGF5ZXJIb3N0aW5nVmlldyB0bwotLy8gbGV0IHJpZ2h0IG1vdXNlIGNsaWNrcyB0aHJvdWdoLgot
LSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgW1tzZWxmIG5l
eHRSZXNwb25kZXJdIHBlcmZvcm1TZWxlY3RvcjpfY21kIHdpdGhPYmplY3Q6ZXZlbnRdOwotfQot
Ci1AZW5kCi0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLWV4dGVy
biAiQyIgewotCi0vLyBOZWVkIHRvIGRlY2xhcmUgdGhlc2UgYXR0cmlidXRlIG5hbWVzIGJlY2F1
c2UgQXBwS2l0IGV4cG9ydHMgdGhlbSBidXQgZG9lcyBub3QgbWFrZSB0aGVtIGF2YWlsYWJsZSBp
biBBUEkgb3IgU1BJIGhlYWRlcnMuCi0KLWV4dGVybiBOU1N0cmluZyAqTlNNYXJrZWRDbGF1c2VT
ZWdtZW50QXR0cmlidXRlTmFtZTsKLWV4dGVybiBOU1N0cmluZyAqTlNUZXh0SW5wdXRSZXBsYWNl
bWVudFJhbmdlQXR0cmlidXRlTmFtZTsKLQotfQotCi1AaW50ZXJmYWNlIE5TVmlldyAoV2ViTlNW
aWV3RGV0YWlscykKLS0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmlu
Z09wYWNpdHk6KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCBy
ZWN0SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJP
T0wpdG9wVmlldzsKLS0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9j
dXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDooTlNSZWN0KXZpc1JlY3Q7Ci0tICh2b2lk
KV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZSBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTooTlNS
ZWN0KWRpc3BsYXlSZWN0IGluQ29udGV4dDooTlNHcmFwaGljc0NvbnRleHQgKiljb250ZXh0IHRv
cFZpZXc6KEJPT0wpdG9wVmlldzsKLS0gKE5TUmVjdClfZGlydHlSZWN0OwotLSAodm9pZClfc2V0
RHJhd3NPd25EZXNjZW5kYW50czooQk9PTClkcmF3c093bkRlc2NlbmRhbnRzOwotLSAodm9pZClf
cHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3JzOwotLSAodm9pZClfd2luZG93Q2hh
bmdlZEtleVN0YXRlOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TQXBwbGljYXRpb24gKFdlYk5TQXBw
bGljYXRpb25EZXRhaWxzKQotLSAodm9pZClzcGVha1N0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7
Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykKLS0gKGlk
KV9uZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nOwotLSAodm9pZClfc2V0Rm9yY2VBY3Rp
dmVDb250cm9sczooQk9PTClmbGFnOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0
cmluZyAoV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWlscykKLS0gKGlkKV9pbml0V2l0aERPTVJh
bmdlOihET01SYW5nZSAqKXJhbmdlOwotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVu
dEZyb21SYW5nZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudDooRE9NRG9jdW1lbnQgKilkb2N1bWVu
dCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihO
U0FycmF5ICoqKXN1YnJlc291cmNlczsKLUBlbmQKLQotQGludGVyZmFjZSBOU1NwZWxsQ2hlY2tl
ciAoV2ViTlNTcGVsbENoZWNrZXJEZXRhaWxzKQotLSAodm9pZClsZWFybldvcmQ6KE5TU3RyaW5n
ICopd29yZDsKLUBlbmQKLQotLy8gQnkgaW1hZ2luZyB0byBhIHdpZHRoIGEgbGl0dGxlIHdpZGVy
IHRoYW4gdGhlIGF2YWlsYWJsZSBwaXhlbHMsCi0vLyB0aGluIHBhZ2VzIHdpbGwgYmUgc2NhbGVk
IGRvd24gYSBsaXR0bGUsIG1hdGNoaW5nIHRoZSB3YXkgdGhleQotLy8gcHJpbnQgaW4gSUUgYW5k
IENhbWluby4gVGhpcyBsZXRzIHRoZW0gdXNlIGZld2VyIHNoZWV0cyB0aGFuIHRoZXkKLS8vIHdv
dWxkIG90aGVyd2lzZSwgd2hpY2ggaXMgcHJlc3VtYWJseSB3aHkgb3RoZXIgYnJvd3NlcnMgZG8g
dGhpcy4KLS8vIFdpZGUgcGFnZXMgd2lsbCBiZSBzY2FsZWQgZG93biBtb3JlIHRoYW4gdGhpcy4K
LSNkZWZpbmUgUHJpbnRpbmdNaW5pbXVtU2hyaW5rRmFjdG9yICAgICAxLjI1ZgotCi0vLyBUaGlz
IG51bWJlciBkZXRlcm1pbmVzIGhvdyBzbWFsbCB3ZSBhcmUgd2lsbGluZyB0byByZWR1Y2UgdGhl
IHBhZ2UgY29udGVudAotLy8gaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhlIHdpZGVzdCBsaW5l
LiBJZiB0aGUgcGFnZSB3b3VsZCBoYXZlIHRvIGJlCi0vLyByZWR1Y2VkIHNtYWxsZXIgdG8gbWFr
ZSB0aGUgd2lkZXN0IGxpbmUgZml0LCB3ZSBqdXN0IGNsaXAgaW5zdGVhZCAodGhpcwotLy8gYmVo
YXZpb3IgbWF0Y2hlcyBNYWNJRSBhbmQgTW96aWxsYSwgYXQgbGVhc3QpCi0jZGVmaW5lIFByaW50
aW5nTWF4aW11bVNocmlua0ZhY3RvciAgICAgMi4wZgotCi0vLyBUaGlzIG51bWJlciBkZXRlcm1p
bmVzIGhvdyBzaG9ydCB0aGUgbGFzdCBwcmludGVkIHBhZ2Ugb2YgYSBtdWx0aS1wYWdlIHByaW50
IHNlc3Npb24KLS8vIGNhbiBiZSBiZWZvcmUgd2UgdHJ5IHRvIHNocmluayB0aGUgc2NhbGUgaW4g
b3JkZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcGFnZXMsIGFuZAotLy8gdGh1cyBlbGltaW5h
dGUgdGhlIG9ycGhhbi4KLSNkZWZpbmUgTGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0aW8gICAgICAw
LjFmCi0KLS8vIFRoaXMgbnVtYmVyIGRldGVybWluZXMgdGhlIGFtb3VudCB0aGUgc2NhbGUgZmFj
dG9yIGlzIGFkanVzdGVkIHRvIHRyeSB0byBlbGltaW5hdGUgb3JwaGFucy4KLS8vIEl0IGhhcyBu
byBkaXJlY3QgbWF0aGVtYXRpY2FsIHJlbGF0aW9uc2hpcCB0byBMYXN0UHJpbnRlZFBhZ2VPcnBo
YW5SYXRpbywgZHVlIHRvIHZhcmlhYmxlCi0vLyBudW1iZXJzIG9mIHBhZ2VzLCBsb2dpYyB0byBh
dm9pZCBicmVha2luZyBlbGVtZW50cywgYW5kIENTUy1zdXBwbGllZCBoYXJkIHBhZ2UgYnJlYWtz
LgotI2RlZmluZSBQcmludGluZ09ycGhhblNocmlua0FkanVzdG1lbnQgIDEuMWYKLQotI2RlZmlu
ZSBBVVRPU0NST0xMX0lOVEVSVkFMICAgICAgICAgICAgIDAuMWYKLQotI2RlZmluZSBEUkFHX0xB
QkVMX0JPUkRFUl9YICAgICAgICAgICAgIDQuMGYKLS8vS2VlcCBib3JkZXJfeSBpbiBzeW5jaCB3
aXRoIERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0Ci0jZGVmaW5lIERSQUdfTEFC
RUxfQk9SREVSX1kgICAgICAgICAgICAgMi4wZgotI2RlZmluZSBEUkFHX0xBQkVMX1JBRElVUyAg
ICAgICAgICAgICAgIDUuMGYKLSNkZWZpbmUgRFJBR19MQUJFTF9CT1JERVJfWV9PRkZTRVQgICAg
ICAgICAgICAgIDIuMGYKLQotI2RlZmluZSBNSU5fRFJBR19MQUJFTF9XSURUSF9CRUZPUkVfQ0xJ
UCAgICAgICAgMTIwLjBmCi0jZGVmaW5lIE1BWF9EUkFHX0xBQkVMX1dJRFRIICAgICAgICAgICAg
ICAgICAgICAzMjAuMGYKLQotI2RlZmluZSBEUkFHX0xJTktfTEFCRUxfRk9OVF9TSVpFICAgMTEu
MGYKLSNkZWZpbmUgRFJBR19MSU5LX1VSTF9GT05UX1NJWkUgICAxMC4wZgotCi0vLyBBbnkgbm9u
LXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0aGluZyByZWNvZ25pemFibGUgbWln
aHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KLSNkZWZpbmUgVFJBQ0tJTkdfUkVDVF9UQUcgMHhC
QURGQUNFCi0KLS8vIEZJWE1FOiBUaGlzIGNvbnN0YW50IGlzIGNvcGllZCBmcm9tIEFwcEtpdCdz
IF9OWFNtYXJ0UGFzdGUgY29uc3RhbnQuCi0jZGVmaW5lIFdlYlNtYXJ0UGFzdGVQYm9hcmRUeXBl
IEAiTmVYVCBzbWFydCBwYXN0ZSBwYXN0ZWJvYXJkIHR5cGUiCi0KLSNkZWZpbmUgU1RBTkRBUkRf
V0VJR0hUIDUKLSNkZWZpbmUgTUlOX0JPTERfV0VJR0hUIDcKLSNkZWZpbmUgU1RBTkRBUkRfQk9M
RF9XRUlHSFQgOQotCi0vLyBGYWtlIFVSTCBzY2hlbWUuCi0jZGVmaW5lIFdlYkRhdGFQcm90b2Nv
bFNjaGVtZSBAIndlYmtpdC1mYWtlLXVybCIKLQotLy8gPHJkYXI6Ly9wcm9ibGVtLzQ5ODU1MjQ+
IFJlZmVyZW5jZXMgdG8gV2ViQ29yZVNjcm9sbFZpZXcgYXMgYSBzdWJ2aWV3IG9mIGEgV2ViSFRN
TFZpZXcgbWF5IGJlIHByZXNlbnQKLS8vIGluIHNvbWUgTklCIGZpbGVzLCBzbyBOU1VuYXJjaGl2
ZXIgbXVzdCBiZSBzdGlsbCBhYmxlIHRvIGxvb2sgdXAgdGhpcyBub3ctdW51c2VkIGNsYXNzLgot
QGludGVyZmFjZSBXZWJDb3JlU2Nyb2xsVmlldyA6IE5TU2Nyb2xsVmlldwotQGVuZAotCi1AaW1w
bGVtZW50YXRpb24gV2ViQ29yZVNjcm9sbFZpZXcKLUBlbmQKLQotLy8gaWYgWUVTLCBkbyB0aGUg
c3RhbmRhcmQgTlNWaWV3IGhpdCB0ZXN0ICh3aGljaCBjYW4ndCBnaXZlIHRoZSByaWdodCByZXN1
bHQgd2hlbiBIVE1MIG92ZXJsYXBzIGEgdmlldykKLXN0YXRpYyBCT09MIGZvcmNlTlNWaWV3SGl0
VGVzdDsKK0BjbGFzcyBXZWJWaWV3OworQGNsYXNzIFdlYkhUTUxWaWV3OwogCi0vLyBpZiBZRVMs
IGRvIHRoZSAidG9wIFdlYkhUTUxWaWV3IiBoaXQgdGVzdCAod2hpY2ggd2UnZCBsaWtlIHRvIGRv
IGFsbCB0aGUgdGltZSBidXQgY2FuJ3QgYmVjYXVzZSBvZiBKYXZhIHJlcXVpcmVtZW50cyBbc2Vl
IGJ1ZyA0MzQ5NzIxXSkKLXN0YXRpYyBCT09MIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0OwotCi1z
dGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3OwotCi0vLyBXZSBuZWVkIHRoaXMgdG8gYmUg
YWJsZSB0byBzYWZlbHkgcmVmZXJlbmNlIHRoZSBDYWNoZWRJbWFnZSBmb3IgdGhlIHByb21pc2Vk
IGRyYWcgZGF0YQotc3RhdGljIENhY2hlZFJlc291cmNlQ2xpZW50KiBwcm9taXNlZERhdGFDbGll
bnQoKQotewotICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCogc3RhdGljQ2FjaGVkUmVz
b3VyY2VDbGllbnQgPSBuZXcgQ2FjaGVkUmVzb3VyY2VDbGllbnQ7Ci0gICAgcmV0dXJuIHN0YXRp
Y0NhY2hlZFJlc291cmNlQ2xpZW50OwotfQotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJI
VE1MVmlld0ZpbGVJbnRlcm5hbCkKLS0gKEJPT0wpX2ltYWdlRXhpc3RzQXRQYXRoczooTlNBcnJh
eSAqKXBhdGhzOwotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50RnJv
bVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgaW5Db250ZXh0OihET01SYW5n
ZSAqKWNvbnRleHQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7Ci0tIChOU1N0
cmluZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2Fy
ZDsKLS0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9h
cmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRleHQ7Ci0tICh2b2lkKV9wYXN0ZUFz
UGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7Ci0tICh2
b2lkKV9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHk7Ci0tICh2b2lkKV9y
ZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnM7Ci0tICh2b2lkKV9yZW1vdmVXaW5kb3dPYnNlcnZlcnM7
Ci0tIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZy
YWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihX
ZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKLS0gKEJPT0wpX3Nob3VsZEluc2VydFRleHQ6KE5T
U3RyaW5nICopdGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBnaXZlbkFj
dGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247Ci0tIChCT09MKV9zaG91bGRSZXBsYWNl
U2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmlld0lu
c2VydEFjdGlvbilhY3Rpb247Ci0tIChmbG9hdClfY2FsY3VsYXRlUHJpbnRIZWlnaHQ7Ci0tIChE
T01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlOwotLSAoQk9PTClfc2hvdWxkRGVsZXRlUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2U7Ci0tIChOU1ZpZXcgKilfaGl0Vmlld0ZvckV2ZW50OihOU0V2ZW50ICop
ZXZlbnQ7Ci0tICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6KE5TQXJy
YXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgY2FjaGVk
QXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZzsK
LS0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2U7Ci0tICh2b2lkKV9zZXRNb3VzZURvd25FdmVu
dDooTlNFdmVudCAqKWV2ZW50OwotLSAoV2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXc7Ci0tIChC
T09MKV9pc1RvcEhUTUxWaWV3OwotLSAodm9pZClfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2
ZTsKLS0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6
ZTsKLS0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKLUBlbmQKLQotI2lm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld1RleHRDaGVja2luZ0lu
dGVybmFsKQotLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOihpZClzZW5kZXI7
Ci0tIChCT09MKXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsKLS0gKHZvaWQpc2V0U21hcnRJbnNl
cnREZWxldGVFbmFibGVkOihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZVNtYXJ0SW5zZXJ0RGVs
ZXRlOihpZClzZW5kZXI7Ci0tIChCT09MKWlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFi
bGVkOwotLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wp
ZmxhZzsKLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246KGlkKXNlbmRl
cjsKLS0gKEJPT0wpaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDsKLS0gKHZvaWQpc2V0
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKHZvaWQpdG9nZ2xl
QXV0b21hdGljTGlua0RldGVjdGlvbjooaWQpc2VuZGVyOwotLSAoQk9PTClpc0F1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb25FbmFibGVkOwotLSAodm9pZClzZXRBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uRW5hYmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3Rp
dHV0aW9uOihpZClzZW5kZXI7Ci0tIChCT09MKWlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5h
YmxlZDsKLS0gKHZvaWQpc2V0QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDooQk9PTClm
bGFnOwotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQ6KGlkKXNlbmRlcjsK
LS0gKEJPT0wpaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOwotLSAodm9pZClz
ZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOihCT09MKWZsYWc7Ci0tICh2b2lk
KXRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyOwotQGVuZAotCi0j
ZW5kaWYKLQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViRm9yd2FyZERlY2xhcmF0aW9uKSAv
LyBGSVhNRTogUHV0IHRoaXMgaW4gYSBub3JtYWwgY2F0ZWdvcnkgYW5kIHN0b3AgZG9pbmcgdGhl
IGZvcndhcmQgZGVjbGFyYXRpb24gdHJpY2suCi0tICh2b2lkKV9zZXRQcmludGluZzooQk9PTClw
cmludGluZyBtaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VX
aWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdT
aXplOwotQGVuZAotCi1AY2xhc3MgTlNUZXh0SW5wdXRDb250ZXh0OwotQGludGVyZmFjZSBOU1Jl
c3BvbmRlciAoQXBwS2l0RGV0YWlscykKLS0gKE5TVGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29u
dGV4dDsKLUBlbmQKLQotQGludGVyZmFjZSBOU09iamVjdCAoTlNUZXh0SW5wdXRDb250ZXh0RGV0
YWlscykKLS0gKEJPT0wpd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzOwotLSAoQk9PTCloYW5kbGVN
b3VzZUV2ZW50OihOU0V2ZW50ICopZXZlbnQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV2ViSFRNTFZp
ZXcgKFdlYk5TVGV4dElucHV0U3VwcG9ydCkgPE5TVGV4dElucHV0PgotLSAodm9pZClfdXBkYXRl
U2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyOwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3
IChXZWJFZGl0aW5nU3R5bGVTdXBwb3J0KQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9l
bXB0eVN0eWxlOwotLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAqKWNvbG9y
OwotQGVuZAotCi1AaW50ZXJmYWNlIE5TVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0t
ICh2b2lkKV93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0YWJsZUFy
cmF5ICopIGFycmF5OwotQGVuZAotCi1AaW50ZXJmYWNlIE5TTXV0YWJsZURpY3Rpb25hcnkgKFdl
YkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAodm9pZClfd2ViX3NldE9iamVjdElmTm90TmlsOihp
ZClvYmplY3QgZm9yS2V5OihpZClrZXk7Ci1AZW5kCi0KLS8vIEhhbmRsZXMgdGhlIGNvbXBsZXRl
OiB0ZXh0IGNvbW1hbmQKLUBpbnRlcmZhY2UgV2ViVGV4dENvbXBsZXRlQ29udHJvbGxlciA6IE5T
T2JqZWN0IDxOU1RhYmxlVmlld0RlbGVnYXRlLCBOU1RhYmxlVmlld0RhdGFTb3VyY2U+IHsKK0Bp
bnRlcmZhY2UgV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyIDogTlNPYmplY3QgPE5TVGFibGVW
aWV3RGVsZWdhdGUsIE5TVGFibGVWaWV3RGF0YVNvdXJjZT4gewogQHByaXZhdGUKLSAgICBXZWJI
VE1MVmlldyAqX3ZpZXc7CisgICAgV2ViVmlldyAqX3ZpZXc7CisgICAgV2ViSFRNTFZpZXcgKl9o
dG1sVmlldzsKICAgICBOU1dpbmRvdyAqX3BvcHVwV2luZG93OwogICAgIE5TVGFibGVWaWV3ICpf
dGFibGVWaWV3OwogICAgIE5TQXJyYXkgKl9jb21wbGV0aW9uczsKICAgICBOU1N0cmluZyAqX29y
aWdpbmFsU3RyaW5nOwogICAgIGludCBwcmVmaXhMZW5ndGg7CiB9Ci0tIChpZClpbml0V2l0aEhU
TUxWaWV3OihXZWJIVE1MVmlldyAqKXZpZXc7CistIChpZClpbml0V2l0aFdlYlZpZXc6KFdlYlZp
ZXcgKil2aWV3IEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKWh0bWxWaWV3OwogLSAodm9pZClkb0Nv
bXBsZXRpb247CiAtICh2b2lkKWVuZFJldmVydGluZ0NoYW5nZTooQk9PTClyZXZlcnRDaGFuZ2Ug
bW92ZUxlZnQ6KEJPT0wpZ29MZWZ0OwogLSAoQk9PTClwb3B1cFdpbmRvd0lzT3BlbjsKIC0gKEJP
T0wpZmlsdGVyS2V5RG93bjooTlNFdmVudCAqKWV2ZW50OwogLSAodm9pZClfcmVmbGVjdFNlbGVj
dGlvbjsKIEBlbmQKLQotc3RydWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyB7Ci0gICAgS2V5Ym9hcmRFdmVudCogZXZlbnQ7Ci0gICAgQk9PTCBldmVudFdhc0hhbmRs
ZWQ7Ci0gICAgQk9PTCBzaG91bGRTYXZlQ29tbWFuZDsKLSAgICAvLyBUaGUgSW5wdXQgTWV0aG9k
IG1heSBjb25zdW1lIGFuIGV2ZW50IGFuZCBub3QgdGVsbCB1cywgaW4KLSAgICAvLyB3aGljaCBj
YXNlIHdlIHNob3VsZCBub3QgYnViYmxlIHRoZSBldmVudCB1cCB0aGUgRE9NCi0gICAgQk9PTCBj
b25zdW1lZEJ5SU07Ci19OwotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3UHJpdmF0ZSA6IE5TT2Jq
ZWN0IHsKLUBwdWJsaWMKLSAgICBCT09MIGNsb3NlZDsKLSAgICBCT09MIG5lZWRzVG9BcHBseVN0
eWxlczsKLSAgICBCT09MIGlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzOwotICAgIEJPT0wgcHJp
bnRpbmc7Ci0gICAgQk9PTCBhdm9pZGluZ1ByaW50T3JwaGFuOwotICAgIEJPT0wgb2JzZXJ2aW5n
TW91c2VNb3ZlZE5vdGlmaWNhdGlvbnM7Ci0gICAgQk9PTCBvYnNlcnZpbmdTdXBlcnZpZXdOb3Rp
ZmljYXRpb25zOwotICAgIEJPT0wgb2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9uczsKLSAgICBC
T09MIHJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyOwotICAgIAotICAgIGlkIHNhdmVkU3Vidmlld3M7
Ci0gICAgQk9PTCBzdWJ2aWV3c1NldEFzaWRlOwotICAgIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICBOU1ZpZXcgKmxheWVySG9zdGluZ1ZpZXc7Ci0jZW5kaWYKLQotICAg
IE5TRXZlbnQgKm1vdXNlRG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVu
dC4KLSAgICBCT09MIGhhbmRsaW5nTW91c2VEb3duRXZlbnQ7Ci0gICAgTlNFdmVudCAqa2V5RG93
bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KLQotICAgIC8vIEEgV2Vi
SFRNTFZpZXcgaGFzIGEgc2luZ2xlIGlucHV0IGNvbnRleHQsIGJ1dCB3ZSByZXR1cm4gbmlsIHdo
ZW4gaW4gbm9uLWVkaXRhYmxlIGNvbnRlbnQgdG8gYXZvaWQgbWFraW5nIGlucHV0IG1ldGhvZHMg
ZG8gdGhlaXIgd29yay4KLSAgICAvLyBUaGlzIHN0YXRlIGlzIHNhdmVkIGVhY2ggdGltZSBzZWxl
Y3Rpb24gY2hhbmdlcywgYmVjYXVzZSBjb21wdXRpbmcgaXQgY2F1c2VzIHN0eWxlIHJlY2FsYywg
d2hpY2ggaXMgbm90IGFsd2F5cyBzYWZlIHRvIGRvLgotICAgIEJPT0wgZXhwb3NlSW5wdXRDb250
ZXh0OwotCi0gICAgTlNQb2ludCBsYXN0U2Nyb2xsUG9zaXRpb247Ci0KLSAgICBXZWJQbHVnaW5D
b250cm9sbGVyICpwbHVnaW5Db250cm9sbGVyOwotICAgIAotICAgIE5TU3RyaW5nICp0b29sVGlw
OwotICAgIE5TVG9vbFRpcFRhZyBsYXN0VG9vbFRpcFRhZzsKLSAgICBpZCB0cmFja2luZ1JlY3RP
d25lcjsKLSAgICB2b2lkICp0cmFja2luZ1JlY3RVc2VyRGF0YTsKLSAgICAKLSAgICBOU1RpbWVy
ICphdXRvc2Nyb2xsVGltZXI7Ci0gICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsK
LSAgICAKLSAgICBOU0FycmF5ICpwYWdlUmVjdHM7Ci0KLSAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpoaWdobGlnaHRlcnM7Ci0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIEJPT0wgbmV4
dFJlc3BvbmRlckRpc2FibGVkT25jZTsKLSNlbmRpZgotICAgIAotICAgIFdlYlRleHRDb21wbGV0
ZUNvbnRyb2xsZXIgKmNvbXBDb250cm9sbGVyOwotICAgIAotICAgIEJPT0wgdHJhbnNwYXJlbnRC
YWNrZ3JvdW5kOwotCi0gICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJz
KiBpbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIEJPT0wgcmVjZWl2ZWROT09QOwot
ICAgIAotICAgIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3VyY2U7Ci0gICAgV2ViQ29yZTo6Q2FjaGVk
SW1hZ2UqIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOwotICAgIAotICAgIENGUnVuTG9vcFRp
bWVyUmVmIHVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyOwotICAgIENGUnVuTG9vcFRp
bWVyUmVmIHVwZGF0ZU1vdXNlb3ZlclRpbWVyOwotCi0gICAgU0VMIHNlbGVjdG9yRm9yRG9Db21t
YW5kQnlTZWxlY3RvcjsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBCT09MIGVudW1lcmF0aW5nU3Vi
dmlld3M7Ci0jZW5kaWYKLX0KLS0gKHZvaWQpY2xlYXI7Ci1AZW5kCi0KLXN0YXRpYyBOU0NlbGxT
dGF0ZVZhbHVlIGtpdChUcmlTdGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0g
ICAgICAgIGNhc2UgRmFsc2VUcmlTdGF0ZToKLSAgICAgICAgICAgIHJldHVybiBOU09mZlN0YXRl
OwotICAgICAgICBjYXNlIFRydWVUcmlTdGF0ZToKLSAgICAgICAgICAgIHJldHVybiBOU09uU3Rh
dGU7Ci0gICAgICAgIGNhc2UgTWl4ZWRUcmlTdGF0ZToKLSAgICAgICAgICAgIHJldHVybiBOU01p
eGVkU3RhdGU7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBO
U09mZlN0YXRlOwotfQotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXdQcml2YXRlCi0KLSsg
KHZvaWQpaW5pdGlhbGl6ZQotewotICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJl
YWQoc2VsZik7Ci0jZW5kaWYKLQotICAgIGlmICghb2xkU2V0Q3Vyc29ySU1QKSB7Ci0jaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKLSAgICAgICAgTWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNz
X2dldEluc3RhbmNlTWV0aG9kKFtOU0N1cnNvciBjbGFzc10sIEBzZWxlY3RvcihzZXQpKTsKLSNl
bHNlCi0gICAgICAgIE1ldGhvZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1l
dGhvZChbTlNXaW5kb3cgY2xhc3NdLCBAc2VsZWN0b3IoX3NldEN1cnNvckZvck1vdXNlTG9jYXRp
b246KSk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKHNldEN1cnNvck1ldGhvZCk7Ci0KLSAgICAg
ICAgb2xkU2V0Q3Vyc29ySU1QID0gbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKHNldEN1cnNvck1l
dGhvZCwgKElNUClzZXRDdXJzb3IpOwotICAgICAgICBBU1NFUlQob2xkU2V0Q3Vyc29ySU1QKTsK
LSAgICB9Ci0gICAgCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBpZiAoIW9sZFJlc2V0
Q3Vyc29yUmVjdHNJTVApIHsKLSAgICAgICAgTWV0aG9kIHJlc2V0Q3Vyc29yUmVjdHNNZXRob2Qg
PSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNXaW5kb3cgY2xhc3NdLCBAc2VsZWN0b3IocmVz
ZXRDdXJzb3JSZWN0cykpOwotICAgICAgICBBU1NFUlQocmVzZXRDdXJzb3JSZWN0c01ldGhvZCk7
Ci0gICAgICAgIG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRp
b24ocmVzZXRDdXJzb3JSZWN0c01ldGhvZCwgKElNUClyZXNldEN1cnNvclJlY3RzKTsKLSAgICAg
ICAgQVNTRVJUKG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVApOwotICAgIH0KLSNlbmRpZgotCi19Ci0K
LS0gKHZvaWQpZGVhbGxvYwotewotICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0
ZU9uTWFpblRocmVhZChbV2ViSFRNTFZpZXdQcml2YXRlIGNsYXNzXSwgc2VsZikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVCghYXV0b3Njcm9sbFRpbWVyKTsKLSAgICBBU1NFUlQoIWF1
dG9zY3JvbGxUcmlnZ2VyRXZlbnQpOwotICAgIEFTU0VSVCghdXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlVGltZXIpOwotICAgIEFTU0VSVCghdXBkYXRlTW91c2VvdmVyVGltZXIpOwotICAgIAot
ICAgIFttb3VzZURvd25FdmVudCByZWxlYXNlXTsKLSAgICBba2V5RG93bkV2ZW50IHJlbGVhc2Vd
OwotICAgIFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwotICAgIFt0b29sVGlwIHJlbGVhc2Vd
OwotICAgIFtjb21wQ29udHJvbGxlciByZWxlYXNlXTsKLSAgICBbZGF0YVNvdXJjZSByZWxlYXNl
XTsKLSAgICBbaGlnaGxpZ2h0ZXJzIHJlbGVhc2VdOwotICAgIGlmIChwcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZSkKLSAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNs
aWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0K
LS0gKHZvaWQpZmluYWxpemUKLXsKLSAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKLQotICAgIGlm
IChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKLSAgICAgICAgcHJvbWlzZWREcmFnVElGRkRh
dGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0KLSAgICBbc3Vw
ZXIgZmluYWxpemVdOwotfQotCi0tICh2b2lkKWNsZWFyCi17Ci0gICAgW21vdXNlRG93bkV2ZW50
IHJlbGVhc2VdOwotICAgIFtrZXlEb3duRXZlbnQgcmVsZWFzZV07Ci0gICAgW3BsdWdpbkNvbnRy
b2xsZXIgcmVsZWFzZV07Ci0gICAgW3Rvb2xUaXAgcmVsZWFzZV07Ci0gICAgW2NvbXBDb250cm9s
bGVyIHJlbGVhc2VdOwotICAgIFtkYXRhU291cmNlIHJlbGVhc2VdOwotICAgIFtoaWdobGlnaHRl
cnMgcmVsZWFzZV07Ci0gICAgaWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQotICAgICAg
ICBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNs
aWVudCgpKTsKLQotICAgIG1vdXNlRG93bkV2ZW50ID0gbmlsOwotICAgIGtleURvd25FdmVudCA9
IG5pbDsKLSAgICBwbHVnaW5Db250cm9sbGVyID0gbmlsOwotICAgIHRvb2xUaXAgPSBuaWw7Ci0g
ICAgY29tcENvbnRyb2xsZXIgPSBuaWw7Ci0gICAgZGF0YVNvdXJjZSA9IG5pbDsKLSAgICBoaWdo
bGlnaHRlcnMgPSBuaWw7Ci0gICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSAwOwotCi0j
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGxheWVySG9zdGluZ1ZpZXcgPSBu
aWw7Ci0jZW5kaWYKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdl
YkhUTUxWaWV3RmlsZUludGVybmFsKQotCi0tIChET01SYW5nZSAqKV9kb2N1bWVudFJhbmdlCi17
Ci0gICAgcmV0dXJuIFtbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gX2RvY3VtZW50UmFuZ2Vd
OwotfQotCi0tIChCT09MKV9pbWFnZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRocwotewot
ICAgIE5TRW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsK
LSAgICBOU1N0cmluZyAqcGF0aDsKLSAgICAKLSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRv
ciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0gICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IFdL
R2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oW3BhdGggcGF0aEV4dGVuc2lvbl0pOwotICAgICAgICBp
ZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUoTUlN
RVR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IE5POwotfQotCi0tIChXZWJEYXRhU291cmNlICopX2RhdGFTb3VyY2UKLXsKLSAgICByZXR1cm4g
X3ByaXZhdGUtPmRhdGFTb3VyY2U7Ci19Ci0KLS0gKFdlYlZpZXcgKilfd2ViVmlldwotewotICAg
IHJldHVybiBbX3ByaXZhdGUtPmRhdGFTb3VyY2UgX3dlYlZpZXddOwotfQotCi0tIChXZWJGcmFt
ZVZpZXcgKilfZnJhbWVWaWV3Ci17Ci0gICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ug
d2ViRnJhbWVdIGZyYW1lVmlld107Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9j
dW1lbnRGcmFnbWVudFdpdGhQYXRoczooTlNBcnJheSAqKXBhdGhzCi17Ci0gICAgRE9NRG9jdW1l
bnRGcmFnbWVudCAqZnJhZ21lbnQ7Ci0gICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3Bh
dGhzIG9iamVjdEVudW1lcmF0b3JdOwotICAgIE5TTXV0YWJsZUFycmF5ICpkb21Ob2RlcyA9IFtb
TlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotICAgIE5TU3RyaW5nICpwYXRoOwotICAgIAot
ICAgIHdoaWxlICgocGF0aCA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKLSAg
ICAgICAgLy8gTm9uLWltYWdlIGZpbGUgdHlwZXM7IF93ZWJfdXNlclZpc2libGVTdHJpbmcgaXMg
YXBwcm9wcmlhdGUgaGVyZSBiZWNhdXNlIHRoaXMgd2lsbAotICAgICAgICAvLyBiZSBwYXN0ZWQg
YXMgdmlzaWJsZSB0ZXh0LgotICAgICAgICBOU1N0cmluZyAqdXJsID0gW1tbTlNVUkwgZmlsZVVS
TFdpdGhQYXRoOnBhdGhdIF93ZWJraXRfY2Fub25pY2FsaXplXSBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nXTsKLSAgICAgICAgW2RvbU5vZGVzIGFkZE9iamVjdDpbW1tzZWxmIF9mcmFtZV0gRE9NRG9j
dW1lbnRdIGNyZWF0ZVRleHROb2RlOiB1cmxdXTsKLSAgICB9Ci0gICAgCi0gICAgZnJhZ21lbnQg
PSBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczpk
b21Ob2Rlc107IAotICAgIAotICAgIFtkb21Ob2RlcyByZWxlYXNlXTsKLSAgICAKLSAgICByZXR1
cm4gW2ZyYWdtZW50IGZpcnN0Q2hpbGRdICE9IG5pbCA/IGZyYWdtZW50IDogbmlsOwotfQotCi0r
IChOU0FycmF5ICopX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lv
bgotewotICAgIHN0YXRpYyBOU0FycmF5ICplbGVtZW50cyA9IG5pbDsKLSAgICBpZiAoZWxlbWVu
dHMgPT0gbmlsKSB7Ci0gICAgICAgIGVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6Ci0gICAgICAgICAgICAvLyBPbWl0IHN0eWxlIHNpbmNlIHdlIHdhbnQgc3R5bGUg
dG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUgZWFzaWx5IGluc2VydGVkLgotICAg
ICAgICAgICAgQCJzdHlsZSIsCi0gICAgICAgICAgICAvLyBPbWl0IHhtbCBzbyB0aGUgcmVzdWx0
IGlzIG5vdCBYSFRNTC4KLSAgICAgICAgICAgIEAieG1sIiwgCi0gICAgICAgICAgICAvLyBPbWl0
IHRhZ3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZyYWdtZW50
IGFueXdheS4KLSAgICAgICAgICAgIEAiZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9k
eSIsCi0gICAgICAgICAgICAvLyBPbWl0IGRlcHJlY2F0ZWQgdGFncy4KLSAgICAgICAgICAgIEAi
YXBwbGV0IiwgQCJiYXNlZm9udCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAImlzaW5k
ZXgiLCBAIm1lbnUiLCBAInMiLCBAInN0cmlrZSIsIEAidSIsCi0gICAgICAgICAgICAvLyBPbWl0
IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBmcmFnbWVudC4K
LSAgICAgICAgICAgIEAib2JqZWN0IiwgbmlsXTsKLSAgICAgICAgQ0ZSZXRhaW4oZWxlbWVudHMp
OwotICAgIH0KLSAgICByZXR1cm4gZWxlbWVudHM7Ci19Ci0KLXN0YXRpYyBOU1VSTCogdW5pcXVl
VVJMV2l0aFJlbGF0aXZlUGFydChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQotewotICAgIENGVVVJ
RFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOwotICAgIE5T
U3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFs
bG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOwotICAgIENGUmVsZWFzZShVVUlEUmVmKTsKLSAgICBO
U1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlQDovLyVALyVAIiwgV2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nLCByZWxh
dGl2ZVBhcnRdXTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0KLSAgICByZXR1cm4gVVJM
OwotfQotCi0tIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dQbGFpblRleHQ6
KEJPT0wpYWxsb3dQbGFpblRleHQKLXsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJk
IHR5cGVzXTsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IG5pbDsKLQotICAg
IGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdICYmCi0gICAg
ICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFz
dGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAg
IHJldHVybiBmcmFnbWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlw
ZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczow
XSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRh
aW5zT2JqZWN0Ok5TSFRNTFBib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxm
IF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU0hUTUxQYm9h
cmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIAot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSAmJgotICAgICAg
ICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvclR5cGU6TlNSVEZQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJu
IGZyYWdtZW50OwotCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRU
eXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkp
Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLQotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNUSUZGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3Vt
ZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4
dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUERGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50
ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5T
UERGUGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsK
LQotI2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUElDVFBib2FyZFR5cGVd
ICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yVHlwZTpOU1BJQ1RQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAg
ICAgICAgcmV0dXJuIGZyYWdtZW50OwotI2VuZGlmCi0KLSAgICAvLyBPbmx5IDEwLjUgYW5kIGhp
Z2hlciBzdXBwb3J0IHNldHRpbmcgYW5kIHJldHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRo
IFVUSXMsIGJ1dCB3ZSBkb24ndCBiZWxpZXZlCi0gICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25z
IG9uIFRpZ2VyIHB1dCB0eXBlcyBmb3Igd2hpY2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBO
Rywgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDooTlNT
dHJpbmcqKWtVVFR5cGVQTkddICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVu
dEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQ
TkcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29u
dGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgICAgIAot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSAmJgotICAgICAg
ICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvclR5cGU6TlNVUkxQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0dXJu
IGZyYWdtZW50OwotICAgICAgICAKLSAgICBpZiAoYWxsb3dQbGFpblRleHQgJiYgW3R5cGVzIGNv
bnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0g
W3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNTdHJp
bmdQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkgewotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKE5TU3RyaW5nICopX3BsYWlu
VGV4dEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgTlNB
cnJheSAqdHlwZXMgPSBbcGFzdGVib2FyZCB0eXBlc107Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBj
b250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKQotICAgICAgICByZXR1cm4gW1twYXN0
ZWJvYXJkIHN0cmluZ0ZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmlu
Z1dpdGhDYW5vbmljYWxNYXBwaW5nXTsKLSAgICAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTdHJpbmcgPSBuaWw7Ci0gICAgTlNTdHJpbmcgKnN0cmluZzsKLQotICAgIGlmIChb
dHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJpYnV0
ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltwYXN0
ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpO
VUxMXTsKLSAgICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBuaWwgJiYgW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TUlRGUGJvYXJkVHlwZV0pCi0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5
cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07Ci0gICAgaWYgKGF0
dHJpYnV0ZWRTdHJpbmcgIT0gbmlsKSB7Ci0gICAgICAgIHN0cmluZyA9IFtbYXR0cmlidXRlZFN0
cmluZyBzdHJpbmddIGNvcHldOwotICAgICAgICBbYXR0cmlidXRlZFN0cmluZyByZWxlYXNlXTsK
LSAgICAgICAgcmV0dXJuIFtzdHJpbmcgYXV0b3JlbGVhc2VdOwotICAgIH0KLSAgICAKLSAgICBp
ZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0pIHsKLSAgICAg
ICAgc3RyaW5nID0gW1twYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQ
Ym9hcmRUeXBlXSBjb21wb25lbnRzSm9pbmVkQnlTdHJpbmc6QCJcbiJdOwotICAgICAgICBpZiAo
c3RyaW5nICE9IG5pbCkKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgfQotICAgIAot
ICAgIE5TVVJMICpVUkw7Ci0gICAgCi0gICAgaWYgKChVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZF0pKSB7Ci0gICAgICAgIHN0cmluZyA9IFtVUkwgX3dlYl91c2VyVmlz
aWJsZVN0cmluZ107Ci0gICAgICAgIGlmIChbc3RyaW5nIGxlbmd0aF0gPiAwKQotICAgICAgICAg
ICAgcmV0dXJuIHN0cmluZzsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAo
dm9pZClfcGFzdGVXaXRoUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxv
d1BsYWluVGV4dDooQk9PTClhbGxvd1BsYWluVGV4dAotewotICAgIFdlYlZpZXcgKndlYlZpZXcg
PSBbW3NlbGYgX3dlYlZpZXddIHJldGFpbl07Ci0gICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBh
c3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0KLSAgICBET01SYW5nZSAqcmFuZ2UgPSBbc2VsZiBfc2Vs
ZWN0ZWRSYW5nZV07Ci0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBf
ZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0OnJhbmdl
IGFsbG93UGxhaW5UZXh0OmFsbG93UGxhaW5UZXh0XTsKLSAgICBpZiAoZnJhZ21lbnQgJiYgW3Nl
bGYgX3Nob3VsZEluc2VydEZyYWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdl
IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQotICAgICAgICBbW3NlbGYg
X2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBs
YWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJv
YXJkOnBhc3RlYm9hcmRdIG1hdGNoU3R5bGU6Tk9dOwotCi0gICAgW3dlYlZpZXcgX3NldEluc2Vy
dGlvblBhc3RlYm9hcmQ6bmlsXTsKLSAgICBbd2ViVmlldyByZWxlYXNlXTsKLX0KLQotLSAodm9p
ZClfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJv
YXJkCi17Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsK
LSAgICBbd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLQotICAg
IE5TU3RyaW5nICp0ZXh0ID0gW3NlbGYgX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9h
cmRdOwotICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQg
Z2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAgICAgIFtbc2VsZiBf
ZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6dGV4dCBzZWxlY3RSZXBsYWNlbWVudDpO
TyBzbWFydFJlcGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmRdXTsKLQotICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOm5pbF07Ci0g
ICAgW3dlYlZpZXcgcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZU1vdXNlTW92ZWRPYnNl
cnZlclVuY29uZGl0aW9uYWxseQotewotICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2YXRlLT5v
YnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9ucykKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
c2VsZiBuYW1lOldLTW91c2VNb3ZlZE5vdGlmaWNhdGlvbigpIG9iamVjdDpuaWxdOwotICAgIF9w
cml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVkTm90aWZpY2F0aW9ucyA9IGZhbHNlOwotfQotCi0t
ICh2b2lkKV9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnMKLXsKLSAgICBpZiAoIV9wcml2YXRlIHx8
ICFfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIE5TVmlldyAqc3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3XTsKLSAg
ICBpZiAoIXN1cGVydmlldyB8fCAhW3NlbGYgd2luZG93XSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBy
ZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24g
b2JqZWN0OnN1cGVydmlld107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZl
cjpzZWxmIG5hbWU6TlNWaWV3Qm91bmRzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBl
cnZpZXddOwotICAgIAotICAgIF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRp
b25zID0gZmFsc2U7Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZVdpbmRvd09ic2VydmVycwotewotICAg
IGlmICghX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBp
ZiAoIXdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TTm90aWZpY2F0aW9uQ2Vu
dGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6
TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25L
ZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gb2JqZWN0
OndpbmRvd107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5h
bWU6V0tXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlvbigpIG9iamVjdDp3aW5kb3dd
OwotICAgIAotICAgIF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zID0gZmFs
c2U7Ci19Ci0KLS0gKEJPT0wpX3Nob3VsZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdt
ZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5B
Y3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9uCi17Ci0gICAgV2ViVmlldyAqd2ViVmll
dyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICBET01Ob2RlICpjaGlsZCA9IFtmcmFnbWVudCBmaXJz
dENoaWxkXTsKLSAgICBpZiAoW2ZyYWdtZW50IGxhc3RDaGlsZF0gPT0gY2hpbGQgJiYgW2NoaWxk
IGlzS2luZE9mQ2xhc3M6W0RPTUNoYXJhY3RlckRhdGEgY2xhc3NdXSkKLSAgICAgICAgcmV0dXJu
IFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hv
dWxkSW5zZXJ0VGV4dDpbKERPTUNoYXJhY3RlckRhdGEgKiljaGlsZCBkYXRhXSByZXBsYWNpbmdE
T01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOwotICAgIHJldHVybiBbW3dlYlZpZXcg
X2VkaXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydE5v
ZGU6ZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0aW9uXTsK
LX0KLQotLSAoQk9PTClfc2hvdWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2lu
Z0RPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0
aW9uKWFjdGlvbgotewotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0g
ICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Ondl
YlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVu
QWN0aW9uOmFjdGlvbl07Ci19Ci0KLS0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRo
VGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFj
dGlvbgotewotICAgIHJldHVybiBbc2VsZiBfc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2lu
Z0RPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXSBnaXZlbkFjdGlvbjphY3Rpb25dOwotfQot
Ci0vLyBDYWxjdWxhdGUgdGhlIHZlcnRpY2FsIHNpemUgb2YgdGhlIHZpZXcgdGhhdCBmaXRzIG9u
IGEgc2luZ2xlIHBhZ2UKLS0gKGZsb2F0KV9jYWxjdWxhdGVQcmludEhlaWdodAotewotICAgIC8v
IE9idGFpbiB0aGUgcHJpbnQgaW5mbyBvYmplY3QgZm9yIHRoZSBjdXJyZW50IG9wZXJhdGlvbgot
ICAgIE5TUHJpbnRJbmZvICpwaSA9IFtbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9u
XSBwcmludEluZm9dOwotICAgIAotICAgIC8vIENhbGN1bGF0ZSB0aGUgcGFnZSBoZWlnaHQgaW4g
cG9pbnRzCi0gICAgTlNTaXplIHBhcGVyU2l6ZSA9IFtwaSBwYXBlclNpemVdOwotICAgIHJldHVy
biBwYXBlclNpemUuaGVpZ2h0IC0gW3BpIHRvcE1hcmdpbl0gLSBbcGkgYm90dG9tTWFyZ2luXTsK
LX0KLQotLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQotewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7Ci19
Ci0KLS0gKEJPT0wpX3Nob3VsZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlCi17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5zaG91bGREZWxldGVSYW5nZShjb3JlKHJhbmdl
KSk7Ci19Ci0KLS0gKE5TVmlldyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAot
ewotICAgIC8vIFVzdWFsbHksIHdlIGhhY2sgQUsncyBoaXRUZXN0IG1ldGhvZCB0byBjYXRjaCBh
bGwgZXZlbnRzIGF0IHRoZSB0b3Btb3N0IFdlYkhUTUxWaWV3LiAgCi0gICAgLy8gQ2FsbGVycyBv
ZiB0aGlzIG1ldGhvZCwgaG93ZXZlciwgd2FudCB0byBxdWVyeSB0aGUgZGVlcGVzdCB2aWV3IGlu
c3RlYWQuCi0gICAgZm9yY2VOU1ZpZXdIaXRUZXN0ID0gWUVTOwotICAgIE5TVmlldyAqaGl0Vmll
dyA9IFtbW3NlbGYgd2luZG93XSBjb250ZW50Vmlld10gaGl0VGVzdDpbZXZlbnQgbG9jYXRpb25J
bldpbmRvd11dOwotICAgIGZvcmNlTlNWaWV3SGl0VGVzdCA9IE5POyAgICAKLSAgICByZXR1cm4g
aGl0VmlldzsKLX0KLQotLSAodm9pZClfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVz
OihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJk
IGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRT
dHJpbmcKLXsKLSAgICAvLyBQdXQgSFRNTCBvbiB0aGUgcGFzdGVib2FyZC4KLSAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgewotICAgICAgICBpZiAo
UmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGNvcmVBcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6
Y3JlYXRlRnJvbVNlbGVjdGlvbihjb3JlKFtzZWxmIF9mcmFtZV0pKSkgewotICAgICAgICAgICAg
aWYgKFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBjb3JlQXJjaGl2ZSA/IGNvcmVBcmNoaXZl
LT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKSA6IDApCi0gICAgICAgICAgICAgICAgW3Bhc3RlYm9h
cmQgc2V0RGF0YTooTlNEYXRhICopZGF0YS5nZXQoKSBmb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRU
eXBlXTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBQdXQgdGhlIGF0dHJpYnV0ZWQg
c3RyaW5nIG9uIHRoZSBwYXN0ZWJvYXJkIChSVEYvUlRGRCBmb3JtYXQpLgotICAgIGlmIChbdHlw
ZXMgY29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0pIHsKLSAgICAgICAgaWYgKGF0dHJp
YnV0ZWRTdHJpbmcgPT0gbmlsKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3Nl
bGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAg
IE5TRGF0YSAqUlRGRERhdGEgPSBbYXR0cmlidXRlZFN0cmluZyBSVEZERnJvbVJhbmdlOk5TTWFr
ZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpu
aWxdOwotICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkREYXRhIGZvclR5cGU6TlNSVEZE
UGJvYXJkVHlwZV07Ci0gICAgfSAgICAgICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVj
dDpOU1JURlBib2FyZFR5cGVdKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5p
bCkgewotICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmli
dXRlZFN0cmluZ107Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNv
bnRhaW5zQXR0YWNobWVudHNdKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0
dHJpYnV0ZWRTdHJpbmcgX3dlYl9hdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50
Q2hhcmFjdGVyc107Ci0gICAgICAgIH0KLSAgICAgICAgTlNEYXRhICpSVEZEYXRhID0gW2F0dHJp
YnV0ZWRTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5n
IGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOwotICAgICAgICBbcGFzdGVib2FyZCBz
ZXREYXRhOlJURkRhdGEgZm9yVHlwZTpOU1JURlBib2FyZFR5cGVdOwotICAgIH0KLSAgICAKLSAg
ICAvLyBQdXQgcGxhaW4gc3RyaW5nIG9uIHRoZSBwYXN0ZWJvYXJkLgotICAgIGlmIChbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkgewotICAgICAgICAvLyBNYXAgJm5i
c3A7IHRvIGEgcGxhaW4gb2xkIHNwYWNlIGJlY2F1c2UgdGhpcyBpcyBiZXR0ZXIgZm9yIHNvdXJj
ZSBjb2RlLCBvdGhlciBicm93c2VycyBkbyBpdCwKLSAgICAgICAgLy8gYW5kIGJlY2F1c2UgSFRN
TCBmb3JjZXMgeW91IHRvIGRvIHRoaXMgYW55IHRpbWUgeW91IHdhbnQgdHdvIHNwYWNlcyBpbiBh
IHJvdy4KLSAgICAgICAgTlNNdXRhYmxlU3RyaW5nICpzID0gW1tzZWxmIHNlbGVjdGVkU3RyaW5n
XSBtdXRhYmxlQ29weV07Ci0gICAgICAgIGNvbnN0IHVuaWNoYXIgTm9uQnJlYWtpbmdTcGFjZUNo
YXJhY3RlciA9IDB4QTA7Ci0gICAgICAgIE5TU3RyaW5nICpOb25CcmVha2luZ1NwYWNlU3RyaW5n
ID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZOb25CcmVha2luZ1NwYWNlQ2hhcmFj
dGVyIGxlbmd0aDoxXTsKLSAgICAgICAgW3MgcmVwbGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6Tm9u
QnJlYWtpbmdTcGFjZVN0cmluZyB3aXRoU3RyaW5nOkAiICIgb3B0aW9uczowIHJhbmdlOk5TTWFr
ZVJhbmdlKDAsIFtzIGxlbmd0aF0pXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnMg
Zm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOwotICAgICAgICBbcyByZWxlYXNlXTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlPckRlbGV0ZV0gJiYgW3R5cGVzIGNv
bnRhaW5zT2JqZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXSkgewotICAgICAgICBbcGFzdGVi
b2FyZCBzZXREYXRhOm5pbCBmb3JUeXBlOldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKLSAgICB9
Ci19Ci0KLS0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAg
ICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2
ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJN
b3VzZURvd24pOwotCi0gICAgaWYgKGV2ZW50ID09IF9wcml2YXRlLT5tb3VzZURvd25FdmVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgW2V2ZW50IHJldGFpbl07Ci0gICAgW19wcml2YXRlLT5t
b3VzZURvd25FdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgPSBl
dmVudDsKLX0KLQotLSAodm9pZClfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGlt
ZXIKLXsKLSAgICBpZiAoX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVy
KSB7Ci0gICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShfcHJpdmF0ZS0+dXBkYXRlRm9j
dXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOwotICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUtPnVw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKLSAgICAgICAgX3ByaXZhdGUtPnVwZGF0
ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyID0gTlVMTDsKLSAgICB9Ci19Ci0KLS0gKHZvaWQp
X2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyCi17Ci0gICAgaWYgKF9wcml2YXRlLT51cGRhdGVN
b3VzZW92ZXJUaW1lcikgewotICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUoX3ByaXZh
dGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyKTsKLSAgICAgICAgQ0ZSZWxlYXNlKF9wcml2YXRlLT51
cGRhdGVNb3VzZW92ZXJUaW1lcik7Ci0gICAgICAgIF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJU
aW1lciA9IE5VTEw7Ci0gICAgfQotfQotCi0tIChXZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldwot
ewotICAgIC8vIEZJWE1FOiB0aGlzIGNhbiBmYWlsIGlmIHRoZSBkYXRhU291cmNlIGlzIG5pbCwg
d2hpY2ggaGFwcGVucyB3aGVuIHRoZSBXZWJWaWV3IGlzIHRlYXJpbmcgZG93biBmcm9tIHRoZSB3
aW5kb3cgY2xvc2luZy4KLSAgICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKVtb
W1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSBfd2ViVmlld10gbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRv
Y3VtZW50Vmlld107Ci0gICAgQVNTRVJUKHZpZXcpOwotICAgIEFTU0VSVChbdmlldyBpc0tpbmRP
ZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKTsKLSAgICByZXR1cm4gdmlldzsKLX0KLQotLSAo
Qk9PTClfaXNUb3BIVE1MVmlldwotewotICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIGNh
Y2hlZCBib29sZWFuIHRoYXQgZG9lc24ndCByZWx5IG9uIF90b3BIVE1MVmlldyBzaW5jZSB0aGF0
IGNhbiBmYWlsIChzZWUgX3RvcEhUTUxWaWV3KS4KLSAgICByZXR1cm4gc2VsZiA9PSBbc2VsZiBf
dG9wSFRNTFZpZXddOwotfQotCi0tICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZl
Ci17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4
aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLQotI2lmbmRlZiBOREVCVUcK
LSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAg
TlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5
IGFsbG9jXSBpbml0XTsKLQotICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3
c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9
IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVj
dEF0SW5kZXg6aV0gX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11
bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLQotICAgIFtkZXNjZW5kYW50V2Vi
SFRNTFZpZXdzIHJlbGVhc2VdOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVt
ZXJhdGluZ1N1YnZpZXdzID0gTk87Ci0jZW5kaWYKLX0KLQotLSAodm9pZClfd2ViX2NsZWFyUHJp
bnRpbmdNb2RlUmVjdXJzaXZlCi17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1Q
YWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOwot
Ci0jaWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVT
OwotI2VuZGlmCi0KLSAgICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9
IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotCi0gICAgW3NlbGYgX3dlYl9hZGREZXNj
ZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKLQotICAg
IHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rlc2NlbmRhbnRX
ZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VX
aWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107Ci0KLSAg
ICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBOREVCVUcKLSAg
ICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCi19Ci0KLS0gKHZv
aWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZQotewotICAg
IFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdl
V2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpZRVNdOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIF9w
cml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwotI2VuZGlmCi0KLSAgICBOU011dGFi
bGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRdOwotCi0gICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJh
eTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKLQotICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2Nl
bmRhbnRXZWJIVE1MVmlld3MgY291bnRdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRl
eDppXSBfc2V0UHJpbnRpbmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdp
ZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6WUVTXTsKLQotICAgIFtkZXNjZW5kYW50V2ViSFRNTFZp
ZXdzIHJlbGVhc2VdOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGlu
Z1N1YnZpZXdzID0gTk87Ci0jZW5kaWYKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2Vi
SFRNTFZpZXcgKFdlYlByaXZhdGUpCi0KLSsgKE5TQXJyYXkgKilzdXBwb3J0ZWRNSU1FVHlwZXMK
LXsKLSAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRNSU1FVHlwZXNd
OwotfQotCi0rIChOU0FycmF5ICopc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMKLXsKLSAgICByZXR1
cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc107Ci19Ci0K
LSsgKE5TQXJyYXkgKilzdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlcwotewotICAgIHJldHVybiBb
V2ViSFRNTFJlcHJlc2VudGF0aW9uIHN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzXTsKLX0KLQot
KyAoTlNBcnJheSAqKXVuc3VwcG9ydGVkVGV4dE1JTUVUeXBlcwotewotICAgIHJldHVybiBbTlNB
cnJheSBhcnJheVdpdGhPYmplY3RzOgotICAgICAgICBAInRleHQvY2FsZW5kYXIiLCAgICAgICAv
LyBpQ2FsCi0gICAgICAgIEAidGV4dC94LWNhbGVuZGFyIiwKLSAgICAgICAgQCJ0ZXh0L3gtdmNh
bGVuZGFyIiwKLSAgICAgICAgQCJ0ZXh0L3ZjYWxlbmRhciIsCi0gICAgICAgIEAidGV4dC92Y2Fy
ZCIsICAgICAgICAgIC8vIHZDYXJkCi0gICAgICAgIEAidGV4dC94LXZjYXJkIiwKLSAgICAgICAg
QCJ0ZXh0L2RpcmVjdG9yeSIsCi0gICAgICAgIEAidGV4dC9sZGlmIiwgICAgICAgICAgIC8vIE5l
dHNjYXBlIEFkZHJlc3MgQm9vawotICAgICAgICBAInRleHQvcWlmIiwgICAgICAgICAgICAvLyBR
dWlja2VuCi0gICAgICAgIEAidGV4dC94LXFpZiIsCi0gICAgICAgIEAidGV4dC94LWNzdiIsICAg
ICAgICAgIC8vIENTViAoZm9yIEFkZHJlc3MgQm9vayBhbmQgTWljcm9zb2Z0IE91dGxvb2spCi0g
ICAgICAgIEAidGV4dC94LXZjZiIsICAgICAgICAgIC8vIHZDYXJkIHR5cGUgdXNlZCBpbiBTdW4g
YWZmaW5pdHkgYXBwCi0gICAgICAgIEAidGV4dC9ydGYiLCAgICAgICAgICAgIC8vIFJpY2ggVGV4
dCBGb3JtYXQKLSAgICAgICAgbmlsXTsKLX0KLQotKyAodm9pZClfcG9zdEZsYWdzQ2hhbmdlZEV2
ZW50OihOU0V2ZW50ICopZmxhZ3NDaGFuZ2VkRXZlbnQKLXsKLSAgICAvLyBUaGlzIGlzIGEgd29y
a2Fyb3VuZCBmb3I6IDxyZGFyOi8vcHJvYmxlbS8yOTgxNjE5PiBOU1Jlc3BvbmRlcl9Qcml2YXRl
IHNob3VsZCBpbmNsdWRlIG5vdGlmaWNhdGlvbiBmb3IgRmxhZ3NDaGFuZ2VkCi0gICAgTlNFdmVu
dCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAot
ICAgICAgICBsb2NhdGlvbjpbW2ZsYWdzQ2hhbmdlZEV2ZW50IHdpbmRvd10gY29udmVydFNjcmVl
blRvQmFzZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KLSAgICAgICAgbW9kaWZpZXJGbGFnczpb
ZmxhZ3NDaGFuZ2VkRXZlbnQgbW9kaWZpZXJGbGFnc10KLSAgICAgICAgdGltZXN0YW1wOltmbGFn
c0NoYW5nZWRFdmVudCB0aW1lc3RhbXBdCi0gICAgICAgIHdpbmRvd051bWJlcjpbZmxhZ3NDaGFu
Z2VkRXZlbnQgd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0OltmbGFnc0NoYW5nZWRFdmVu
dCBjb250ZXh0XQotICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTow
XTsKLQotICAgIC8vIFByZXRlbmQgaXQncyBhIG1vdXNlIG1vdmUuCi0gICAgW1tOU05vdGlmaWNh
dGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXQotICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpX
S01vdXNlTW92ZWROb3RpZmljYXRpb24oKSBvYmplY3Q6c2VsZgotICAgICAgICB1c2VySW5mbzpb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OmZha2VFdmVudCBmb3JLZXk6QCJOU0V2
ZW50Il1dOwotfQotCi0tIChpZClfYnJpZGdlCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgZXhpc3Rz
IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBMZW9wYXJkJ3MgRGljdGlvbmFyeS5hcHAs
IHNpbmNlIGl0Ci0gICAgLy8gY2FsbHMgX2JyaWRnZSB0byBnZXQgYWNjZXNzIHRvIGNvbnZlcnRO
U1JhbmdlVG9ET01SYW5nZTogYW5kIGNvbnZlcnRET01SYW5nZVRvTlNSYW5nZTouCi0gICAgLy8g
UmV0dXJuIHRoZSBXZWJGcmFtZSwgd2hpY2ggaW1wbGVtZW50cyB0aGUgY29tcGF0aWJpbGl0eSBt
ZXRob2RzLiA8cmRhcjovL3Byb2JsZW0vNjAwMjE2MD4KLSAgICByZXR1cm4gW3NlbGYgX2ZyYW1l
XTsKLX0KLQotLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudAotewotICAgIFtz
ZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07Ci0gICAgCi0gICAgTlNFdmVudCAqZmFr
ZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAotICAgICAg
ICBsb2NhdGlvbjpbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1v
dXNlTG9jYXRpb25dXQotICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50
XSBtb2RpZmllckZsYWdzXQotICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdCi0gICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3
aW5kb3dOdW1iZXJdCi0gICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRl
eHRdCi0gICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOwotICAg
IAotICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6ZmFrZUV2ZW50XTsKLX0KLQot
c3RhdGljIHZvaWQgX3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhY2soQ0ZSdW5Mb29wVGltZXJS
ZWYgdGltZXIsIHZvaWQgKmluZm8pCi17Ci0gICAgV2ViSFRNTFZpZXcgKnZpZXcgPSAoV2ViSFRN
TFZpZXcgKilpbmZvOwotICAgIAotICAgIFt2aWV3IF91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2
ZW50XTsKLX0KLQotLSAodm9pZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKLXsKLSAgICBOU1BvaW50
IG9yaWdpbiA9IFtbc2VsZiBzdXBlcnZpZXddIGJvdW5kc10ub3JpZ2luOwotICAgIGlmICghTlNF
cXVhbFBvaW50cyhfcHJpdmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uLCBvcmlnaW4pKSB7Ci0gICAg
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAg
ICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRTY3JvbGxFdmVudCgpOwotICAgICAg
ICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVm
dDpOT107Ci0gICAgICAgIAotICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZp
ZXddOwotICAgICAgICBbW3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2Vi
VmlldyBkaWRTY3JvbGxEb2N1bWVudEluRnJhbWVWaWV3OltzZWxmIF9mcmFtZVZpZXddXTsKLSAg
ICB9Ci0gICAgX3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9IG9yaWdpbjsKLQotICAgIGlm
IChbc2VsZiB3aW5kb3ddICYmICFfcHJpdmF0ZS0+Y2xvc2VkICYmICFfcHJpdmF0ZS0+dXBkYXRl
TW91c2VvdmVyVGltZXIpIHsKLSAgICAgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IGNvbnRleHQg
PSB7IDAsIHNlbGYsIE5VTEwsIE5VTEwsIE5VTEwgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIFVz
ZSBhIDEwMG1zIGRlbGF5IHNvIHRoYXQgdGhlIHN5bnRoZXRpYyBtb3VzZSBvdmVyIHVwZGF0ZSBk
b2Vzbid0IGNhdXNlIGN1cnNvciB0aHJhc2hpbmcgd2hlbiBwYWdlcyBhcmUgbG9hZGluZwotICAg
ICAgICAvLyBhbmQgc2Nyb2xsaW5nIHJhcGlkbHkgYmFjayB0byBiYWNrLgotICAgICAgICBfcHJp
dmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIgPSBDRlJ1bkxvb3BUaW1lckNyZWF0ZShOVUxMLCBD
RkFic29sdXRlVGltZUdldEN1cnJlbnQoKSArIDAuMSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZU1v
dXNlb3ZlclRpbWVyQ2FsbGJhY2ssICZjb250ZXh0KTsKLSAgICAgICAgQ0ZSdW5Mb29wQWRkVGlt
ZXIoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIs
IGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0gICAgfQotfQotCi0tICh2b2lkKV9zZXRBc2lkZVN1
YnZpZXdzCi17Ci0gICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7Ci0gICAg
QVNTRVJUKF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID09IG5pbCk7Ci0gICAgX3ByaXZhdGUtPnNh
dmVkU3Vidmlld3MgPSBfc3Vidmlld3M7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQotICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0aGUgbGF5ZXItaG9zdGluZyB2aWV3IGluIHRoZSBz
dWJ2aWV3cywgb3RoZXJ3aXNlIHRoZSBsYXllcnMgZmxhc2guCi0gICAgaWYgKF9wcml2YXRlLT5s
YXllckhvc3RpbmdWaWV3KSB7Ci0gICAgICAgIE5TQXJyYXkqIG5ld1N1YnZpZXdzID0gW1tOU0Fy
cmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6X3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcsIG5p
bF07Ci0gICAgICAgIF9zdWJ2aWV3cyA9IG5ld1N1YnZpZXdzOwotICAgIH0gZWxzZQotICAgICAg
ICBfc3Vidmlld3MgPSBuaWw7Ci0jZWxzZQotICAgIF9zdWJ2aWV3cyA9IG5pbDsKLSNlbmRpZiAg
ICAKLSAgICBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSA9IFlFUzsKLSB9Ci0gCi0gLSAodm9p
ZClfcmVzdG9yZVN1YnZpZXdzCi0gewotICAgIEFTU0VSVChfcHJpdmF0ZS0+c3Vidmlld3NTZXRB
c2lkZSk7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChfcHJpdmF0
ZS0+bGF5ZXJIb3N0aW5nVmlldykgewotICAgICAgICBbX3N1YnZpZXdzIHJlbGVhc2VdOwotICAg
ICAgICBfc3Vidmlld3MgPSBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQoX3N1YnZpZXdzID09IG5pbCk7Ci0gICAgICAgIF9zdWJ2aWV3cyA9IF9w
cml2YXRlLT5zYXZlZFN1YnZpZXdzOwotICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUKF9zdWJ2aWV3
cyA9PSBuaWwpOwotICAgIF9zdWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOwotI2Vu
ZGlmICAgIAotICAgIF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID0gbmlsOwotICAgIF9wcml2YXRl
LT5zdWJ2aWV3c1NldEFzaWRlID0gTk87Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi0KLS0gKHZvaWQp
ZGlkQWRkU3VidmlldzooTlNWaWV3ICopc3VidmlldwotewotICAgIGlmIChfcHJpdmF0ZS0+ZW51
bWVyYXRpbmdTdWJ2aWV3cykKLSAgICAgICAgTE9HKFZpZXcsICJBIHZpZXcgb2YgY2xhc3MgJXMg
d2FzIGFkZGVkIGR1cmluZyBzdWJ2aWV3IGVudW1lcmF0aW9uIGZvciBsYXlvdXQgb3IgcHJpbnRp
bmcgbW9kZSBjaGFuZ2UuIFRoaXMgdmlldyBtaWdodCBwYWludCB3aXRob3V0IGZpcnN0IHJlY2Vp
dmluZyBsYXlvdXQuIiwgb2JqZWN0X2dldENsYXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKLX0K
LQotLSAodm9pZCl3aWxsUmVtb3ZlU3VidmlldzooTlNWaWV3ICopc3VidmlldwotewotICAgIC8v
IEhhdmUgdG8gbnVsbC1jaGVjayBfcHJpdmF0ZSwgc2luY2UgdGhpcyBjYW4gYmUgY2FsbGVkIHZp
YSAtZGVhbGxvYyB3aGVuCi0gICAgLy8gY2xlYW5pbmcgdXAgdGhlIHRoZSBsYXllckhvc3RpbmdW
aWV3LgotICAgIGlmIChfcHJpdmF0ZSAmJiBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cykK
LSAgICAgICAgTE9HKFZpZXcsICJBIHZpZXcgb2YgY2xhc3MgJXMgd2FzIHJlbW92ZWQgZHVyaW5n
IHN1YnZpZXcgZW51bWVyYXRpb24gZm9yIGxheW91dCBvciBwcmludGluZyBtb2RlIGNoYW5nZS4g
V2Ugd2lsbCBzdGlsbCBkbyBsYXlvdXQgb3IgdGhlIHByaW50aW5nIG1vZGUgY2hhbmdlIGV2ZW4g
dGhvdWdoIHRoaXMgdmlldyBpcyBubyBsb25nZXIgaW4gdGhlIHZpZXcgaGllcmFyY2h5LiIsIG9i
amVjdF9nZXRDbGFzc05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Ci19Ci0KLSNlbmRpZgotCi0jaWZk
ZWYgQlVJTERJTkdfT05fVElHRVIKLQotLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBhcmUgYWJv
dXQgdG8gZHJhdywgYnV0IGJlZm9yZSBvdXIgZGlydHkgcmVjdCBpcyBwcm9wYWdhdGVkIHRvIG91
ciBhbmNlc3RvcnMuCi0vLyBUaGF0J3MgdGhlIHBlcmZlY3QgdGltZSB0byBkbyBhIGxheW91dCwg
ZXhjZXB0IHRoYXQgaWRlYWxseSB3ZSdkIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHdlJ3JlIGRpcnR5
Ci0vLyBiZWZvcmUgZG9pbmcgaXQuIEFzIGEgY29tcHJvbWlzZSwgd2hlbiB3ZSdyZSBvcGFxdWUg
d2UgZG8gdGhlIGxheW91dCBvbmx5IHdoZW4gYWN0dWFsbHkgYXNrZWQgdG8KLS8vIGRyYXcsIGJ1
dCB3aGVuIHdlJ3JlIHRyYW5zcGFyZW50IHdlIGRvIHRoZSBsYXlvdXQgYXQgdGhpcyBzdGFnZSBz
byB2aWV3cyBiZWhpbmQgdXMga25vdyB0aGF0IHRoZXkKLS8vIG5lZWQgdG8gYmUgcmVkcmF3biAo
aW4gY2FzZSB0aGUgbGF5b3V0IGNhdXNlcyBzb21lIHRoaW5ncyB0byBnZXQgZGlydGllZCkuCi0t
ICh2b2lkKV9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnMKLXsKLSAgICBpZiAo
IVtbc2VsZiBfd2ViVmlld10gZHJhd3NCYWNrZ3JvdW5kXSkKLSAgICAgICAgW3NlbGYgX3dlYl9s
YXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0gICAgW3N1cGVyIF9wcm9wYWdhdGVEaXJ0eVJlY3Rz
VG9PcGFxdWVBbmNlc3RvcnNdOwotfQotCi0jZWxzZQotCi0tICh2b2lkKXZpZXdXaWxsRHJhdwot
ewotICAgIC8vIE9uIHdpbmRvdyBjbG9zZSB3ZSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRh
c291cmNlIGlzIG5pbCwgdGhlbiBoaXQgYW4gYXNzZXJ0IGluIF90b3BIVE1MVmlldwotICAgIC8v
IFNvIGNoZWNrIGlmIHRoZSBkYXRhU291cmNlIGlzIG5pbCBiZWZvcmUgY2FsbGluZyBbc2VsZiBf
aXNUb3BIVE1MVmlld10sIHRoaXMgY2FuIGJlIHJlbW92ZWQKLSAgICAvLyBvbmNlIHRoZSBGSVhN
RSBpbiBfaXNUb3BIVE1MVmlldyBpcyBmaXhlZC4KLSAgICBpZiAoX3ByaXZhdGUtPmRhdGFTb3Vy
Y2UgJiYgW3NlbGYgX2lzVG9wSFRNTFZpZXddKQotICAgICAgICBbc2VsZiBfd2ViX2xheW91dElm
TmVlZGVkUmVjdXJzaXZlXTsKLSAgICBbc3VwZXIgdmlld1dpbGxEcmF3XTsKLX0KLQotI2VuZGlm
Ci0KLS8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUg
b2YgdGhhdC4KLS0gKHZvaWQpX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09w
YWNpdHk6KE5TUmVjdClyZWN0IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0
SXNWaXNpYmxlUmVjdEZvclZpZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wp
dG9wVmlldwotewotICAgIC8vIFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEg
bGFyZ2VyIHByaW50IHByb2Nlc3MuCi0gICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0c2VsZiBp
cyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBkbyB0aGlz
LgotICAgIEJPT0wgd2FzSW5QcmludGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7Ci0gICAg
Qk9PTCBpc1ByaW50aW5nID0gIVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdp
bmdUb1NjcmVlbl07Ci0gICAgaWYgKGlzUHJpbnRpbmcpIHsKLSAgICAgICAgaWYgKCF3YXNJblBy
aW50aW5nTW9kZSkKLSAgICAgICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJz
aXZlXTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0jZW5kaWYKLSAgICB9IGVs
c2UgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQotICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRp
bmdNb2RlUmVjdXJzaXZlXTsKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLSAgICAvLyBC
ZWNhdXNlIFRpZ2VyIGRvZXMgbm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQgdG8gZG8gbGF5
b3V0IGhlcmUuCi0gICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0gICAg
W19zdWJ2aWV3cyBtYWtlT2JqZWN0c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX3Byb3BhZ2F0
ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9ycyldOwotCi0jZW5kaWYKLQotICAgIFtzZWxmIF9z
ZXRBc2lkZVN1YnZpZXdzXTsKLSAgICBbc3VwZXIgX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVk
ZWRJZ25vcmluZ09wYWNpdHk6cmVjdCBpc1Zpc2libGVSZWN0OmlzVmlzaWJsZVJlY3QgcmVjdElz
VmlzaWJsZVJlY3RGb3JWaWV3OnZpc2libGVWaWV3IHRvcFZpZXc6dG9wVmlld107Ci0gICAgW3Nl
bGYgX3Jlc3RvcmVTdWJ2aWV3c107Ci0KLSAgICBpZiAod2FzSW5QcmludGluZ01vZGUgIT0gaXNQ
cmludGluZykgewotICAgICAgICBpZiAod2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgICAgICBb
c2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwotICAgIH0KLX0K
LQotLy8gRG9uJ3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBv
ZiB0aGF0LgotLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czoo
Qk9PTCluZWVkc0xvY2tGb2N1cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVjdAotewotICAgIEJPT0wg
bmVlZFRvU2V0QXNpZGVTdWJ2aWV3cyA9ICFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZTsKLQot
ICAgIEJPT0wgd2FzSW5QcmludGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7Ci0gICAgQk9P
TCBpc1ByaW50aW5nID0gIVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdU
b1NjcmVlbl07Ci0KLSAgICBpZiAobmVlZFRvU2V0QXNpZGVTdWJ2aWV3cykgewotICAgICAgICAv
LyBUaGlzIGhlbHBzIHdoZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9j
ZXNzLgotICAgICAgICAvLyBJZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUg
cHJpbnRpbmcsIHRoZW4gd2Ugd2lsbCBuZXZlciBoYXZlIHRvIGRvIHRoaXMuCi0gICAgICAgIGlm
IChpc1ByaW50aW5nKSB7Ci0gICAgICAgICAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKQotICAg
ICAgICAgICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSNpZm5k
ZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBb
c2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKLSNlbmRpZgotICAgICAgICB9IGVs
c2UgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclBy
aW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0gICAg
ICAgIC8vIEJlY2F1c2UgVGlnZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0
byBkbyBsYXlvdXQgaGVyZS4KLSAgICAgICAgTlNSZWN0IGJvdW5kc0JlZm9yZUxheW91dCA9IFtz
ZWxmIGJvdW5kc107Ci0gICAgICAgIGlmICghTlNJc0VtcHR5UmVjdCh2aXNSZWN0KSkKLSAgICAg
ICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotCi0gICAgICAgIC8v
IElmIGxheW91dCBjaGFuZ2VzIHRoZSB2aWV3J3MgYm91bmRzLCB0aGVuIHdlIG5lZWQgdG8gcmVj
b21wdXRlIHRoZSB2aXNSZWN0LgotICAgICAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUgdmlzUmVj
dCBwYXNzZWQgdG8gdXMgd2FzIGJhc2VkIG9uIHRoZSBib3VuZHMgYXQgdGhlIHRpbWUKLSAgICAg
ICAgLy8gd2Ugd2VyZSBjYWxsZWQuIFRoaXMgbWV0aG9kIGlzIG9ubHkgZGlzcGxheWVkIHRvIGRy
YXcgImFsbCIsIHNvIGl0J3Mgc2FmZQotICAgICAgICAvLyB0byBqdXN0IGNhbGwgdmlzaWJsZVJl
Y3QgdG8gY29tcHV0ZSB0aGUgZW50aXJlIHJlY3RhbmdsZS4KLSAgICAgICAgaWYgKCFOU0VxdWFs
UmVjdHMoYm91bmRzQmVmb3JlTGF5b3V0LCBbc2VsZiBib3VuZHNdKSkKLSAgICAgICAgICAgIHZp
c1JlY3QgPSBbc2VsZiB2aXNpYmxlUmVjdF07Ci0KLSNlbmRpZgotCi0gICAgICAgIFtzZWxmIF9z
ZXRBc2lkZVN1YnZpZXdzXTsKLSAgICB9Ci0KLSAgICBbc3VwZXIgX3JlY3Vyc2l2ZURpc3BsYXlB
bGxEaXJ0eVdpdGhMb2NrRm9jdXM6bmVlZHNMb2NrRm9jdXMgdmlzUmVjdDp2aXNSZWN0XTsKLQot
ICAgIGlmIChuZWVkVG9TZXRBc2lkZVN1YnZpZXdzKSB7Ci0gICAgICAgIGlmICh3YXNJblByaW50
aW5nTW9kZSAhPSBpc1ByaW50aW5nKSB7Ci0gICAgICAgICAgICBpZiAod2FzSW5QcmludGluZ01v
ZGUpCi0gICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVd
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmlu
dGluZ01vZGVSZWN1cnNpdmVdOwotICAgICAgICB9Ci0KLSAgICAgICAgW3NlbGYgX3Jlc3RvcmVT
dWJ2aWV3c107Ci0gICAgfQotfQotCi0vLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2
aWV3cy4gV2UgdGFrZSBjYXJlIG9mIHRoYXQuCi0tICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVj
dXJzZSBkaXNwbGF5UmVjdElnbm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0IGluQ29u
dGV4dDooTlNHcmFwaGljc0NvbnRleHQgKiljb250ZXh0IHRvcFZpZXc6KEJPT0wpdG9wVmlldwot
ewotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSIAotICAgIC8vIEJlY2F1c2UgVGlnZXIgZG9lcyBu
b3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVyZS4KLSAgICBbc2Vs
ZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsKLSNlbmRpZgotCi0gICAgW3NlbGYgX3Nl
dEFzaWRlU3Vidmlld3NdOwotICAgIFtzdXBlciBfcmVjdXJzaXZlOnJlY3Vyc2UgZGlzcGxheVJl
Y3RJZ25vcmluZ09wYWNpdHk6ZGlzcGxheVJlY3QgaW5Db250ZXh0OmNvbnRleHQgdG9wVmlldzp0
b3BWaWV3XTsKLSAgICBbc2VsZiBfcmVzdG9yZVN1YnZpZXdzXTsKLX0KLQotLSAoQk9PTClfaW5z
aWRlQW5vdGhlckhUTUxWaWV3Ci17Ci0gICAgcmV0dXJuIHNlbGYgIT0gW3NlbGYgX3RvcEhUTUxW
aWV3XTsKLX0KLQotLSAoTlNWaWV3ICopaGl0VGVzdDooTlNQb2ludClwb2ludAotewotICAgIC8v
IFdlYkhUTUxWaWV3IG9iamVjdHMgaGFuZGxlIGFsbCBldmVudHMgZm9yIG9iamVjdHMgaW5zaWRl
IHRoZW0uCi0gICAgLy8gVG8gZ2V0IHRob3NlIGV2ZW50cywgd2UgcHJldmVudCBoaXQgdGVzdGlu
ZyBmcm9tIEFwcEtpdC4KLQotICAgIC8vIEJ1dCB0aGVyZSBhcmUgdGhyZWUgZXhjZXB0aW9ucyB0
byB0aGlzOgotICAgIC8vICAgMSkgRm9yIHJpZ2h0IG1vdXNlIGNsaWNrcyBhbmQgY29udHJvbCBj
bGlja3Mgd2UgZG9uJ3QgeWV0IGhhdmUgYW4gaW1wbGVtZW50YXRpb24KLSAgICAvLyAgICAgIHRo
YXQgd29ya3MgZm9yIG5lc3RlZCB2aWV3cywgc28gd2UgbGV0IHRoZSBoaXQgdGVzdGluZyBnbyB0
aHJvdWdoIHRoZQotICAgIC8vICAgICAgc3RhbmRhcmQgTlNWaWV3IGNvZGUgcGF0aCAobmVlZHMg
dG8gYmUgZml4ZWQsIHNlZSBidWcgNDM2MTYxOCkuCi0gICAgLy8gICAyKSBKYXZhIGRlcGVuZHMg
b24gZG9pbmcgYSBoaXQgdGVzdCBpbnNpZGUgaXQncyBtb3VzZSBtb3ZlZCBoYW5kbGluZywKLSAg
ICAvLyAgICAgIHNvIHdlIGxldCB0aGUgaGl0IHRlc3RpbmcgZ28gdGhyb3VnaCB0aGUgc3RhbmRh
cmQgTlNWaWV3IGNvZGUgcGF0aAotICAgIC8vICAgICAgd2hlbiB0aGUgY3VycmVudCBldmVudCBp
cyBhIG1vdXNlIG1vdmUgKGV4Y2VwdCB3aGVuIHdlIGFyZSBjYWxsaW5nCi0gICAgLy8gICAgICBm
cm9tIF91cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQsIHNvIHdlIGhhdmUgdG8gdXNlIGEgZ2xvYmFs
LAotICAgIC8vICAgICAgZm9yY2VXZWJIVE1MVmlld0hpdFRlc3QsIGZvciB0aGF0KQotICAgIC8v
ICAgMykgVGhlIGFjY2VwdHNGaXJzdE1vdXNlOiBhbmQgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmlu
Z0ZvckV2ZW50OiBtZXRob2RzCi0gICAgLy8gICAgICBib3RoIG5lZWQgdG8gZmlndXJlIG91dCB3
aGljaCB2aWV3IHRvIGNoZWNrIHdpdGggaW5zaWRlIHRoZSBXZWJIVE1MVmlldy4KLSAgICAvLyAg
ICAgIFRoZXkgdXNlIGEgZ2xvYmFsIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgaGl0VGVzdDog
c28gdGhleSBjYW4gZ2V0IHRoZQotICAgIC8vICAgICAgcmlnaHQgdmlldy4gVGhlIGdsb2JhbCBp
cyBmb3JjZU5TVmlld0hpdFRlc3QgYW5kIHRoZSBtZXRob2QgdGhleSB1c2UgdG8KLSAgICAvLyAg
ICAgIGRvIHRoZSBoaXQgdGVzdGluZyBpcyBfaGl0Vmlld0ZvckV2ZW50Oi4gKEJ1dCB0aGlzIGRv
ZXMgbm90IHdvcmsgY29ycmVjdGx5Ci0gICAgLy8gICAgICB3aGVuIHRoZXJlIGlzIEhUTUwgb3Zl
cmxhcHBpbmcgdGhlIHZpZXcsIHNlZSBidWcgNDM2MTYyNikKLSAgICAvLyAgIDQpIE5TQWNjZXNz
aWJpbGl0eUhpdFRlc3QgcmVsaWVzIG9uIHRoaXMgZm9yIGNoZWNraW5nIHRoZSBjdXJzb3IgcG9z
aXRpb24uCi0gICAgLy8gICAgICBPdXIgY2hlY2sgZm9yIHRoYXQgaXMgd2hldGhlciB0aGUgZXZl
bnQgaXMgTlNGbGFnc0NoYW5nZWQuICBUaGlzIHdvcmtzCi0gICAgLy8gICAgICBmb3IgVm9pY2VP
dmVyJ3MgY250bC1vcHQtZjUgY29tbWFuZCAobW92ZSBmb2N1cyB0byBpdGVtIHVuZGVyIGN1cnNv
cikKLSAgICAvLyAgICAgIGFuZCBEaWN0aW9uYXJ5J3MgY21kLWNudGwtRCAob3BlbiBkaWN0aW9u
YXJ5IHBvcHVwIGZvciBpdGVtIHVuZGVyIGN1cnNvcikuCi0gICAgLy8gICAgICBUaGlzIGlzIG9m
IGNvdXJzZSBhIGhhY2suCi0KLSAgICBCT09MIGNhcHR1cmVIaXRzT25TdWJ2aWV3czsKLSAgICBp
ZiAoZm9yY2VOU1ZpZXdIaXRUZXN0KQotICAgICAgICBjYXB0dXJlSGl0c09uU3Vidmlld3MgPSBO
TzsKLSAgICBlbHNlIGlmIChmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCkKLSAgICAgICAgY2FwdHVy
ZUhpdHNPblN1YnZpZXdzID0gWUVTOwotICAgIGVsc2UgewotICAgICAgICBOU0V2ZW50ICpldmVu
dCA9IFtbc2VsZiB3aW5kb3ddIGN1cnJlbnRFdmVudF07Ci0gICAgICAgIGNhcHR1cmVIaXRzT25T
dWJ2aWV3cyA9ICEoW2V2ZW50IHR5cGVdID09IE5TTW91c2VNb3ZlZAotICAgICAgICAgICAgfHwg
W2V2ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24KLSAgICAgICAgICAgIHx8IChbZXZlbnQg
dHlwZV0gPT0gTlNMZWZ0TW91c2VEb3duICYmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0Nv
bnRyb2xLZXlNYXNrKSAhPSAwKQotICAgICAgICAgICAgfHwgW2V2ZW50IHR5cGVdID09IE5TRmxh
Z3NDaGFuZ2VkKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNhcHR1cmVIaXRzT25TdWJ2aWV3cykKLSAg
ICAgICAgcmV0dXJuIFtzdXBlciBoaXRUZXN0OnBvaW50XTsKLSAgICBpZiAoW1tzZWxmIHN1cGVy
dmlld10gbW91c2U6cG9pbnQgaW5SZWN0OltzZWxmIGZyYW1lXV0pCi0gICAgICAgIHJldHVybiBz
ZWxmOwotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX2NsZWFyTGFzdEhpdFZpZXdJZlNl
bGYKLXsKLSAgICBpZiAobGFzdEhpdFZpZXcgPT0gc2VsZikKLSAgICAgICAgbGFzdEhpdFZpZXcg
PSBuaWw7Ci19Ci0KLS0gKE5TVHJhY2tpbmdSZWN0VGFnKWFkZFRyYWNraW5nUmVjdDooTlNSZWN0
KXJlY3Qgb3duZXI6KGlkKW93bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6
KEJPT0wpYXNzdW1lSW5zaWRlCi17Ci0gICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RP
d25lciA9PSBuaWwpOwotICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVyOwot
ICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9IGRhdGE7Ci0gICAgcmV0dXJuIFRS
QUNLSU5HX1JFQ1RfVEFHOwotfQotCi0tIChOU1RyYWNraW5nUmVjdFRhZylfYWRkVHJhY2tpbmdS
ZWN0OihOU1JlY3QpcmVjdCBvd25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilkYXRhIGFz
c3VtZUluc2lkZTooQk9PTClhc3N1bWVJbnNpZGUgdXNlVHJhY2tpbmdOdW06KGludCl0YWcKLXsK
LSAgICBBU1NFUlQodGFnID09IDAgfHwgdGFnID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKLSAgICBB
U1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09IG5pbCk7Ci0gICAgX3ByaXZhdGUt
PnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVz
ZXJEYXRhID0gZGF0YTsKLSAgICByZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7Ci19Ci0KLS0gKHZv
aWQpX2FkZFRyYWNraW5nUmVjdHM6KE5TUmVjdCAqKXJlY3RzIG93bmVyOihpZClvd25lciB1c2Vy
RGF0YUxpc3Q6KHZvaWQgKiopdXNlckRhdGFMaXN0IGFzc3VtZUluc2lkZUxpc3Q6KEJPT0wgKilh
c3N1bWVJbnNpZGVMaXN0IHRyYWNraW5nTnVtczooTlNUcmFja2luZ1JlY3RUYWcgKil0cmFja2lu
Z051bXMgY291bnQ6KGludCljb3VudAotewotICAgIEFTU0VSVChjb3VudCA9PSAxKTsKLSAgICBB
U1NFUlQodHJhY2tpbmdOdW1zWzBdID09IDAgfHwgdHJhY2tpbmdOdW1zWzBdID09IFRSQUNLSU5H
X1JFQ1RfVEFHKTsKLSAgICBBU1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09IG5p
bCk7Ci0gICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7Ci0gICAgX3ByaXZh
dGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gdXNlckRhdGFMaXN0WzBdOwotICAgIHRyYWNraW5n
TnVtc1swXSA9IFRSQUNLSU5HX1JFQ1RfVEFHOwotfQotCi0tICh2b2lkKXJlbW92ZVRyYWNraW5n
UmVjdDooTlNUcmFja2luZ1JlY3RUYWcpdGFnCi17Ci0gICAgaWYgKHRhZyA9PSAwKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgaWYgKF9wcml2YXRlICYmICh0YWcgPT0gVFJBQ0tJTkdfUkVD
VF9UQUcpKSB7Ci0gICAgICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG5pbDsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoX3ByaXZhdGUgJiYgKHRhZyA9PSBf
cHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcpKSB7Ci0gICAgICAgIFtzdXBlciByZW1vdmVUcmFja2lu
Z1JlY3Q6dGFnXTsKLSAgICAgICAgX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnID0gMDsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBJZiBhbnkgb3RoZXIgdHJhY2tpbmcgcmVj
dCBpcyBiZWluZyByZW1vdmVkLCB3ZSBkb24ndCBrbm93IGhvdyBpdCB3YXMgY3JlYXRlZAotICAg
IC8vIGFuZCBpdCdzIHBvc3NpYmxlIHRoZXJlJ3MgYSBsZWFrIGludm9sdmVkIChzZWUgMzUwMDIx
NykKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotLSAodm9pZClfcmVtb3ZlVHJhY2tp
bmdSZWN0czooTlNUcmFja2luZ1JlY3RUYWcgKil0YWdzIGNvdW50OihpbnQpY291bnQKLXsKLSAg
ICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpbnQg
dGFnID0gdGFnc1tpXTsKLSAgICAgICAgaWYgKHRhZyA9PSAwKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIEFTU0VSVCh0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpOwotICAgICAgICBp
ZiAoX3ByaXZhdGUgIT0gbmlsKSB7Ci0gICAgICAgICAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0
T3duZXIgPSBuaWw7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKHZvaWQpX3NlbmRUb29sVGlw
TW91c2VFeGl0ZWQKLXsKLSAgICAvLyBOb3RoaW5nIG1hdHRlcnMgZXhjZXB0IHdpbmRvdywgdHJh
Y2tpbmdOdW1iZXIsIGFuZCB1c2VyRGF0YS4KLSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNF
dmVudCBlbnRlckV4aXRFdmVudFdpdGhUeXBlOk5TTW91c2VFeGl0ZWQKLSAgICAgICAgbG9jYXRp
b246TlNNYWtlUG9pbnQoMCwgMCkKLSAgICAgICAgbW9kaWZpZXJGbGFnczowCi0gICAgICAgIHRp
bWVzdGFtcDowCi0gICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1i
ZXJdCi0gICAgICAgIGNvbnRleHQ6TlVMTAotICAgICAgICBldmVudE51bWJlcjowCi0gICAgICAg
IHRyYWNraW5nTnVtYmVyOlRSQUNLSU5HX1JFQ1RfVEFHCi0gICAgICAgIHVzZXJEYXRhOl9wcml2
YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YV07Ci0gICAgW19wcml2YXRlLT50cmFja2luZ1JlY3RP
d25lciBtb3VzZUV4aXRlZDpmYWtlRXZlbnRdOwotfQotCi0tICh2b2lkKV9zZW5kVG9vbFRpcE1v
dXNlRW50ZXJlZAotewotICAgIC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0cmFj
a2luZ051bWJlciwgYW5kIHVzZXJEYXRhLgotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2
ZW50IGVudGVyRXhpdEV2ZW50V2l0aFR5cGU6TlNNb3VzZUVudGVyZWQKLSAgICAgICAgbG9jYXRp
b246TlNNYWtlUG9pbnQoMCwgMCkKLSAgICAgICAgbW9kaWZpZXJGbGFnczowCi0gICAgICAgIHRp
bWVzdGFtcDowCi0gICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1i
ZXJdCi0gICAgICAgIGNvbnRleHQ6TlVMTAotICAgICAgICBldmVudE51bWJlcjowCi0gICAgICAg
IHRyYWNraW5nTnVtYmVyOlRSQUNLSU5HX1JFQ1RfVEFHCi0gICAgICAgIHVzZXJEYXRhOl9wcml2
YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YV07Ci0gICAgW19wcml2YXRlLT50cmFja2luZ1JlY3RP
d25lciBtb3VzZUVudGVyZWQ6ZmFrZUV2ZW50XTsKLX0KLQotLSAodm9pZClfc2V0VG9vbFRpcDoo
TlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICBOU1N0cmluZyAqdG9vbFRpcCA9IFtzdHJpbmcgbGVu
Z3RoXSA9PSAwID8gbmlsIDogc3RyaW5nOwotICAgIE5TU3RyaW5nICpvbGRUb29sVGlwID0gX3By
aXZhdGUtPnRvb2xUaXA7Ci0gICAgaWYgKCh0b29sVGlwID09IG5pbCB8fCBvbGRUb29sVGlwID09
IG5pbCkgPyB0b29sVGlwID09IG9sZFRvb2xUaXAgOiBbdG9vbFRpcCBpc0VxdWFsVG9TdHJpbmc6
b2xkVG9vbFRpcF0pIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAob2xkVG9vbFRp
cCkgewotICAgICAgICBbc2VsZiBfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZF07Ci0gICAgICAgIFtv
bGRUb29sVGlwIHJlbGVhc2VdOwotICAgIH0KLSAgICBfcHJpdmF0ZS0+dG9vbFRpcCA9IFt0b29s
VGlwIGNvcHldOwotICAgIGlmICh0b29sVGlwKSB7Ci0gICAgICAgIC8vIFNlZSByYWRhciAzNTAw
MjE3IGZvciB3aHkgd2UgcmVtb3ZlIGFsbCB0b29sdGlwcyByYXRoZXIgdGhhbiBqdXN0IHRoZSBz
aW5nbGUgb25lIHdlIGNyZWF0ZWQuCi0gICAgICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsK
LSAgICAgICAgTlNSZWN0IHdpZGVPcGVuUmVjdCA9IE5TTWFrZVJlY3QoLTEwMDAwMCwgLTEwMDAw
MCwgMjAwMDAwLCAyMDAwMDApOwotICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSBb
c2VsZiBhZGRUb29sVGlwUmVjdDp3aWRlT3BlblJlY3Qgb3duZXI6c2VsZiB1c2VyRGF0YTpOVUxM
XTsKLSAgICAgICAgW3NlbGYgX3NlbmRUb29sVGlwTW91c2VFbnRlcmVkXTsKLSAgICB9Ci19Ci0K
LS0gKE5TU3RyaW5nICopdmlldzooTlNWaWV3ICopdmlldyBzdHJpbmdGb3JUb29sVGlwOihOU1Rv
b2xUaXBUYWcpdGFnIHBvaW50OihOU1BvaW50KXBvaW50IHVzZXJEYXRhOih2b2lkICopZGF0YQot
ewotICAgIHJldHVybiBbW19wcml2YXRlLT50b29sVGlwIGNvcHldIGF1dG9yZWxlYXNlXTsKLX0K
LQotLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsK
LSAgICBpZiAoX3ByaXZhdGUtPmNsb3NlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNWaWV3
ICpjb250ZW50VmlldyA9IFtbZXZlbnQgd2luZG93XSBjb250ZW50Vmlld107Ci0gICAgTlNQb2lu
dCBsb2NhdGlvbkZvckhpdFRlc3QgPSBbW2NvbnRlbnRWaWV3IHN1cGVydmlld10gY29udmVydFBv
aW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwotICAgIAotICAgIGZv
cmNlV2ViSFRNTFZpZXdIaXRUZXN0ID0gWUVTOwotICAgIE5TVmlldyAqaGl0VmlldyA9IFtjb250
ZW50VmlldyBoaXRUZXN0OmxvY2F0aW9uRm9ySGl0VGVzdF07Ci0gICAgZm9yY2VXZWJIVE1MVmll
d0hpdFRlc3QgPSBOTzsKLSAgICAKLSAgICBXZWJIVE1MVmlldyAqdmlldyA9IG5pbDsKLSAgICBp
ZiAoW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSAmJiAhW1soV2Vi
SFRNTFZpZXcgKiloaXRWaWV3IF93ZWJWaWV3XSBpc0hvdmVyRmVlZGJhY2tTdXNwZW5kZWRdKQot
ICAgICAgICB2aWV3ID0gKFdlYkhUTUxWaWV3ICopaGl0VmlldzsgICAgCi0KLSAgICBpZiAodmll
dykKLSAgICAgICAgW3ZpZXcgcmV0YWluXTsKLQotICAgIGlmIChsYXN0SGl0VmlldyAhPSB2aWV3
ICYmIGxhc3RIaXRWaWV3ICYmIFtsYXN0SGl0VmlldyBfZnJhbWVdKSB7Ci0gICAgICAgIC8vIElm
IHdlIGFyZSBtb3Zpbmcgb3V0IG9mIGEgdmlldyAob3IgZnJhbWUpLCBsZXQncyBwcmV0ZW5kIHRo
ZSBtb3VzZSBtb3ZlZAotICAgICAgICAvLyBhbGwgdGhlIHdheSBvdXQgb2YgdGhhdCB2aWV3LiBC
dXQgd2UgaGF2ZSB0byBhY2NvdW50IGZvciBzY3JvbGxpbmcsIGJlY2F1c2UKLSAgICAgICAgLy8g
a2h0bWwgZG9lc24ndCB1bmRlcnN0YW5kIG91ciBjbGlwcGluZy4KLSAgICAgICAgTlNSZWN0IHZp
c2libGVSZWN0ID0gW1tbW2xhc3RIaXRWaWV3IF9mcmFtZV0gZnJhbWVWaWV3XSBfc2Nyb2xsVmll
d10gZG9jdW1lbnRWaXNpYmxlUmVjdF07Ci0gICAgICAgIGZsb2F0IHlTY3JvbGwgPSB2aXNpYmxl
UmVjdC5vcmlnaW4ueTsKLSAgICAgICAgZmxvYXQgeFNjcm9sbCA9IHZpc2libGVSZWN0Lm9yaWdp
bi54OwotCi0gICAgICAgIGV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91
c2VNb3ZlZAotICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0x
IC0geFNjcm9sbCwgLTEgLSB5U2Nyb2xsICkKLSAgICAgICAgICAgICAgICAgICAgICAgICBtb2Rp
ZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQotICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJl
bmNlRGF0ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1t2aWV3IHdp
bmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tO
U0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXZl
bnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07Ci0gICAgICAgIGlmIChGcmFtZSog
bGFzdEhpdENvcmVGcmFtZSA9IGNvcmUoW2xhc3RIaXRWaWV3IF9mcmFtZV0pKQotICAgICAgICAg
ICAgbGFzdEhpdENvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwot
ICAgIH0KLQotICAgIGxhc3RIaXRWaWV3ID0gdmlldzsKLQotICAgIGlmICh2aWV3KSB7Ci0gICAg
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbdmlldyBfZnJhbWVdKSkKLSAgICAgICAg
ICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwotCi0gICAg
ICAgIFt2aWV3IHJlbGVhc2VdOwotICAgIH0KLX0KLQotLy8ga2VlcCBpbiBzeW5jIHdpdGggV2Vi
UGFzdGVib2FyZEhlbHBlcjo6aW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcwotKyAoTlNBcnJheSAq
KV9pbnNlcnRhYmxlUGFzdGVib2FyZFR5cGVzCi17Ci0gICAgc3RhdGljIE5TQXJyYXkgKnR5cGVz
ID0gbmlsOwotICAgIGlmICghdHlwZXMpIHsKLSAgICAgICAgdHlwZXMgPSBbW05TQXJyYXkgYWxs
b2NdIGluaXRXaXRoT2JqZWN0czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNIVE1MUGJvYXJkVHlw
ZSwgTlNGaWxlbmFtZXNQYm9hcmRUeXBlLCBOU1RJRkZQYm9hcmRUeXBlLCBOU1BERlBib2FyZFR5
cGUsCi0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQotICAgICAgICAgICAgTlNQSUNUUGJvYXJkVHlwZSwKLSNlbmRpZgotICAgICAg
ICAgICAgTlNVUkxQYm9hcmRUeXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUs
IE5TU3RyaW5nUGJvYXJkVHlwZSwgTlNDb2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07
Ci0gICAgICAgIENGUmV0YWluKHR5cGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHR5cGVzOwotfQot
Ci0rIChOU0FycmF5ICopX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlcwotewotICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHV0IGRhdGEgZm9yIE5TSFRNTFBib2FyZFR5cGUgb24gdGhlIHBhc3RlYm9h
cmQgYnV0IE1pY3Jvc29mdCBFeGNlbCBkb2Vzbid0IGxpa2Ugb3VyIGZvcm1hdCBvZiBIVE1MICgz
NjQwNDIzKS4KLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpXZWJBcmNoaXZl
UGJvYXJkVHlwZSwgTlNSVEZEUGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bi
b2FyZFR5cGUsIG5pbF07Ci19Ci0KLS0gKE5TSW1hZ2UgKilfZHJhZ0ltYWdlRm9yVVJMOihOU1N0
cmluZyopdXJsU3RyaW5nIHdpdGhMYWJlbDooTlNTdHJpbmcqKWxhYmVsCi17Ci0gICAgQk9PTCBk
cmF3VVJMU3RyaW5nID0gWUVTOwotICAgIEJPT0wgY2xpcFVSTFN0cmluZyA9IE5PLCBjbGlwTGFi
ZWxTdHJpbmcgPSBOTzsKLSAgICAKLSAgICBpZiAoIWxhYmVsKSB7Ci0gICAgICAgIGRyYXdVUkxT
dHJpbmcgPSBOTzsKLSAgICAgICAgbGFiZWwgPSB1cmxTdHJpbmc7Ci0gICAgfQotICAgIAotICAg
IE5TRm9udCAqbGFiZWxGb250ID0gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBj
b252ZXJ0Rm9udDpbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6RFJBR19MSU5LX0xBQkVMX0ZPTlRf
U0laRV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9IYXZlVHJhaXQ6TlNCb2xkRm9udE1hc2tdOwotICAgIE5TRm9udCAqdXJsRm9u
dCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTogRFJBR19MSU5LX1VSTF9GT05UX1NJWkVdOwot
ICAgIE5TU2l6ZSBsYWJlbFNpemU7Ci0gICAgbGFiZWxTaXplLndpZHRoID0gW2xhYmVsIF93ZWJf
d2lkdGhXaXRoRm9udDogbGFiZWxGb250XTsKLSAgICBsYWJlbFNpemUuaGVpZ2h0ID0gW2xhYmVs
Rm9udCBhc2NlbmRlcl0gLSBbbGFiZWxGb250IGRlc2NlbmRlcl07Ci0gICAgaWYgKGxhYmVsU2l6
ZS53aWR0aCA+IE1BWF9EUkFHX0xBQkVMX1dJRFRIKXsKLSAgICAgICAgbGFiZWxTaXplLndpZHRo
ID0gTUFYX0RSQUdfTEFCRUxfV0lEVEg7Ci0gICAgICAgIGNsaXBMYWJlbFN0cmluZyA9IFlFUzsK
LSAgICB9Ci0gICAgCi0gICAgTlNTaXplIGltYWdlU2l6ZSwgdXJsU3RyaW5nU2l6ZTsKLSAgICBp
bWFnZVNpemUud2lkdGggPSBsYWJlbFNpemUud2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICog
Mi4wZjsKLSAgICBpbWFnZVNpemUuaGVpZ2h0ID0gbGFiZWxTaXplLmhlaWdodCArIERSQUdfTEFC
RUxfQk9SREVSX1kgKiAyLjBmOwotICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7Ci0gICAgICAgIHVy
bFN0cmluZ1NpemUud2lkdGggPSBbdXJsU3RyaW5nIF93ZWJfd2lkdGhXaXRoRm9udDogdXJsRm9u
dF07Ci0gICAgICAgIHVybFN0cmluZ1NpemUuaGVpZ2h0ID0gW3VybEZvbnQgYXNjZW5kZXJdIC0g
W3VybEZvbnQgZGVzY2VuZGVyXTsKLSAgICAgICAgaW1hZ2VTaXplLmhlaWdodCArPSB1cmxTdHJp
bmdTaXplLmhlaWdodDsKLSAgICAgICAgaWYgKHVybFN0cmluZ1NpemUud2lkdGggPiBNQVhfRFJB
R19MQUJFTF9XSURUSCkgewotICAgICAgICAgICAgaW1hZ2VTaXplLndpZHRoID0gTUFYKE1BWF9E
UkFHX0xBQkVMX1dJRFRIICsgRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYsIE1JTl9EUkFHX0xB
QkVMX1dJRFRIX0JFRk9SRV9DTElQKTsKLSAgICAgICAgICAgIGNsaXBVUkxTdHJpbmcgPSBZRVM7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBNQVgobGFi
ZWxTaXplLndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYsIHVybFN0cmluZ1NpemUu
d2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZik7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgTlNJbWFnZSAqZHJhZ0ltYWdlID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOiBp
bWFnZVNpemVdIGF1dG9yZWxlYXNlXTsKLSAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107Ci0gICAg
Ci0gICAgW1tOU0NvbG9yIGNvbG9yV2l0aERldmljZVJlZDogMC43ZiBncmVlbjogMC43ZiBibHVl
OiAwLjdmIGFscGhhOiAwLjhmXSBzZXRdOwotICAgIAotICAgIC8vIERyYWcgYSByZWN0YW5nbGUg
d2l0aCByb3VuZGVkIGNvcm5lcnMvCi0gICAgTlNCZXppZXJQYXRoICpwYXRoID0gW05TQmV6aWVy
UGF0aCBiZXppZXJQYXRoXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJl
Y3Q6IE5TTWFrZVJlY3QoMC4wZiwgMC4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFH
X0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92
YWxJblJlY3Q6IE5TTWFrZVJlY3QoMCwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfUkFE
SVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAq
IDIuMGYpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFr
ZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBpbWFnZVNp
emUuaGVpZ2h0IC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAq
IDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZildOwotICAgIFtwYXRoIGFwcGVuZEJlemll
clBhdGhXaXRoT3ZhbEluUmVjdDogTlNNYWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xB
QkVMX1JBRElVUyAqIDIuMGYsIDAuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmKV07Ci0gICAgCi0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdp
dGhSZWN0OiBOU01ha2VSZWN0KERSQUdfTEFCRUxfUkFESVVTLCAwLjBmLCBpbWFnZVNpemUud2lk
dGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIGltYWdlU2l6ZS5oZWlnaHQpXTsKLSAgICBb
cGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoMC4wZiwgRFJBR19MQUJF
TF9SQURJVVMsIERSQUdfTEFCRUxfUkFESVVTICsgMTAuMGYsIGltYWdlU2l6ZS5oZWlnaHQgLSAy
LjBmICogRFJBR19MQUJFTF9SQURJVVMpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0
aFJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgLSAy
MC4wZiwgRFJBR19MQUJFTF9SQURJVVMsIERSQUdfTEFCRUxfUkFESVVTICsgMjAuMGYsIGltYWdl
U2l6ZS5oZWlnaHQgLSAyLjBmICogRFJBR19MQUJFTF9SQURJVVMpXTsKLSAgICBbcGF0aCBmaWxs
XTsKLSAgICAKLSAgICBOU0NvbG9yICp0b3BDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmlj
ZVdoaXRlOjAuMGYgYWxwaGE6MC43NWZdOwotICAgIE5TQ29sb3IgKmJvdHRvbUNvbG9yID0gW05T
Q29sb3IgY29sb3JXaXRoRGV2aWNlV2hpdGU6MS4wZiBhbHBoYTowLjVmXTsKLSAgICBpZiAoZHJh
d1VSTFN0cmluZykgewotICAgICAgICBpZiAoY2xpcFVSTFN0cmluZykKLSAgICAgICAgICAgIHVy
bFN0cmluZyA9IFtXZWJTdHJpbmdUcnVuY2F0b3IgY2VudGVyVHJ1bmNhdGVTdHJpbmc6IHVybFN0
cmluZyB0b1dpZHRoOmltYWdlU2l6ZS53aWR0aCAtIChEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4w
Zikgd2l0aEZvbnQ6dXJsRm9udF07Ci0gICAgICAgIAotICAgICAgICBbdXJsU3RyaW5nIF93ZWJf
ZHJhd0RvdWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50KERSQUdfTEFCRUxfQk9SREVSX1gsIERSQUdf
TEFCRUxfQk9SREVSX1kgLSBbdXJsRm9udCBkZXNjZW5kZXJdKSAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpdGhUb3BDb2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21Db2xv
ciBmb250OnVybEZvbnRdOwotICAgIH0KLSAgICAKLSAgICBpZiAoY2xpcExhYmVsU3RyaW5nKQot
ICAgICAgICBsYWJlbCA9IFtXZWJTdHJpbmdUcnVuY2F0b3IgcmlnaHRUcnVuY2F0ZVN0cmluZzog
bGFiZWwgdG9XaWR0aDppbWFnZVNpemUud2lkdGggLSAoRFJBR19MQUJFTF9CT1JERVJfWCAqIDIu
MGYpIHdpdGhGb250OmxhYmVsRm9udF07Ci0gICAgW2xhYmVsIF93ZWJfZHJhd0RvdWJsZWRBdFBv
aW50Ok5TTWFrZVBvaW50IChEUkFHX0xBQkVMX0JPUkRFUl9YLCBpbWFnZVNpemUuaGVpZ2h0IC0g
RFJBR19MQUJFTF9CT1JERVJfWV9PRkZTRVQgLSBbbGFiZWxGb250IHBvaW50U2l6ZV0pCi0gICAg
ICAgICAgICAgICAgICAgICAgd2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRv
bUNvbG9yIGZvbnQ6bGFiZWxGb250XTsKLSAgICAKLSAgICBbZHJhZ0ltYWdlIHVubG9ja0ZvY3Vz
XTsKLSAgICAKLSAgICByZXR1cm4gZHJhZ0ltYWdlOwotfQotCi0tIChOU0ltYWdlICopX2RyYWdJ
bWFnZUZvckxpbmtFbGVtZW50OihOU0RpY3Rpb25hcnkgKillbGVtZW50Ci17Ci0gICAgTlNVUkwg
KmxpbmtVUkwgPSBbZWxlbWVudCBvYmplY3RGb3JLZXk6IFdlYkVsZW1lbnRMaW5rVVJMS2V5XTsK
LSAgICAKLSAgICBOU1N0cmluZyAqbGFiZWwgPSBbZWxlbWVudCBvYmplY3RGb3JLZXk6IFdlYkVs
ZW1lbnRMaW5rTGFiZWxLZXldOwotICAgIE5TU3RyaW5nICp1cmxTdHJpbmcgPSBbbGlua1VSTCBf
d2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKLSAgICByZXR1cm4gW3NlbGYgX2RyYWdJbWFnZUZvclVS
TDp1cmxTdHJpbmcgd2l0aExhYmVsOmxhYmVsXTsKLX0KLQotLSAodm9pZClwYXN0ZWJvYXJkQ2hh
bmdlZE93bmVyOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgW3NlbGYgc2V0UHJv
bWlzZWREcmFnVElGRkRhdGFTb3VyY2U6MF07Ci19Ci0KLS0gKHZvaWQpcGFzdGVib2FyZDooTlNQ
YXN0ZWJvYXJkICopcGFzdGVib2FyZCBwcm92aWRlRGF0YUZvclR5cGU6KE5TU3RyaW5nICopdHlw
ZQotewotICAgIGlmIChbdHlwZSBpc0VxdWFsOk5TUlRGRFBib2FyZFR5cGVdICYmIFtbcGFzdGVi
b2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7Ci0gICAg
ICAgIFdlYkFyY2hpdmUgKmFyY2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0
YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOwotICAgICAg
ICBbcGFzdGVib2FyZCBfd2ViX3dyaXRlUHJvbWlzZWRSVEZERnJvbUFyY2hpdmU6YXJjaGl2ZSBj
b250YWluc0ltYWdlOltbcGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNUSUZGUGJv
YXJkVHlwZV1dOwotICAgICAgICBbYXJjaGl2ZSByZWxlYXNlXTsKLSAgICB9IGVsc2UgaWYgKFt0
eXBlIGlzRXF1YWw6TlNUSUZGUGJvYXJkVHlwZV0gJiYgW3NlbGYgcHJvbWlzZWREcmFnVElGRkRh
dGFTb3VyY2VdKSB7Ci0gICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSBbc2VsZiBwcm9taXNlZERy
YWdUSUZGRGF0YVNvdXJjZV0tPmltYWdlKCkpCi0gICAgICAgICAgICBbcGFzdGVib2FyZCBzZXRE
YXRhOihOU0RhdGEgKilpbWFnZS0+Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgZm9yVHlwZTpOU1RJ
RkZQYm9hcmRUeXBlXTsKLSAgICAgICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2U6MF07Ci0gICAgfQotfQotCi0tICh2b2lkKV9oYW5kbGVBdXRvc2Nyb2xsRm9yTW91c2VEcmFn
Z2VkOihOU0V2ZW50ICopZXZlbnQgCi17IAotICAgIFtzZWxmIGF1dG9zY3JvbGw6ZXZlbnRdOyAK
LSAgICBbc2VsZiBfc3RhcnRBdXRvc2Nyb2xsVGltZXI6ZXZlbnRdOyAKLX0gCi0KLS0gKFdlYlBs
dWdpbkNvbnRyb2xsZXIgKilfcGx1Z2luQ29udHJvbGxlcgotewotICAgIHJldHVybiBfcHJpdmF0
ZS0+cGx1Z2luQ29udHJvbGxlcjsKLX0KLQotLSAodm9pZClfbGF5b3V0Rm9yUHJpbnRpbmcKLXsK
LSAgICAvLyBTZXQgcHJpbnRpbmcgbW9kZSB0ZW1wb3JhcmlseSBzbyB3ZSBjYW4gYWRqdXN0IHRo
ZSBzaXplIG9mIHRoZSB2aWV3LiBUaGlzIHdpbGwgYWxsb3cKLSAgICAvLyBBcHBLaXQncyBwYWdp
bmF0aW9uIGNvZGUgdG8gdXNlIHRoZSBjb3JyZWN0IGhlaWdodCBmb3IgdGhlIHBhZ2UgY29udGVu
dC4gTGVhdmluZyBwcmludGluZwotICAgIC8vIG1vZGUgb24gaW5kZWZpbml0ZWx5IHdvdWxkIGlu
dGVyZmVyZSB3aXRoIE1haWwncyBwcmludGluZyBtZWNoYW5pc20gKGF0IGxlYXN0KSwgc28gd2Ug
anVzdAotICAgIC8vIHR1cm4gaXQgb2ZmIGFnYWluIGFmdGVyIGFkanVzdGluZyB0aGUgc2l6ZS4K
LSAgICBbc2VsZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXpl
XTsKLSAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLX0KLQotLSAo
dm9pZClfc21hcnRJbnNlcnRGb3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFj
aW5nUmFuZ2U6KERPTVJhbmdlICopcmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOihOU1N0cmlu
ZyAqKiliZWZvcmVTdHJpbmcgYWZ0ZXJTdHJpbmc6KE5TU3RyaW5nICoqKWFmdGVyU3RyaW5nCi17
Ci0gICAgaWYgKCFwYXN0ZVN0cmluZyB8fCAhcmFuZ2VUb1JlcGxhY2UgfHwgIVtbc2VsZiBfd2Vi
Vmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSkgewotICAgICAgICBpZiAoYmVmb3JlU3Ry
aW5nKQotICAgICAgICAgICAgKmJlZm9yZVN0cmluZyA9IG5pbDsKLSAgICAgICAgaWYgKGFmdGVy
U3RyaW5nKQotICAgICAgICAgICAgKmFmdGVyU3RyaW5nID0gbmlsOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIFtbc2VsZiBfZnJhbWVdIF9zbWFydEluc2VydEZvclN0cmluZzpw
YXN0ZVN0cmluZyByZXBsYWNpbmdSYW5nZTpyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6YmVm
b3JlU3RyaW5nIGFmdGVyU3RyaW5nOmFmdGVyU3RyaW5nXTsKLX0KLQotLSAoQk9PTClfY2FuU21h
cnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAg
ICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdICYmIFtb
cGFzdGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVd
OwotfQotCi0tICh2b2lkKV9zdGFydEF1dG9zY3JvbGxUaW1lcjogKE5TRXZlbnQgKil0cmlnZ2Vy
RXZlbnQKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9PSBuaWwpIHsKLSAg
ICAgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1l
cldpdGhUaW1lSW50ZXJ2YWw6QVVUT1NDUk9MTF9JTlRFUlZBTAotICAgICAgICAgICAgdGFyZ2V0
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9hdXRvc2Nyb2xsKSB1c2VySW5mbzpuaWwgcmVwZWF0
czpZRVNdIHJldGFpbl07Ci0gICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50
ID0gW3RyaWdnZXJFdmVudCByZXRhaW5dOwotICAgIH0KLX0KLQotLy8gRklYTUU6IF9zZWxlY3Rp
b25SZWN0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygc2VsZWN0aW9uUmVjdCwgd2hpY2ggaXMg
aW4gcHJvdG9jb2wgV2ViRG9jdW1lbnRTZWxlY3Rpb24uCi0vLyBXZSBjYW4ndCByZW1vdmUgdGhp
cyB5ZXQgYmVjYXVzZSBpdCdzIHN0aWxsIGluIHVzZSBieSBNYWlsLgotLSAoTlNSZWN0KV9zZWxl
Y3Rpb25SZWN0Ci17Ci0gICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RdOwotfQotCi0tICh2
b2lkKV9zdG9wQXV0b3Njcm9sbFRpbWVyCi17Ci0gICAgTlNUaW1lciAqdGltZXIgPSBfcHJpdmF0
ZS0+YXV0b3Njcm9sbFRpbWVyOwotICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBuaWw7
Ci0gICAgW19wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50IHJlbGVhc2VdOwotICAgIF9w
cml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gbmlsOwotICAgIFt0aW1lciBpbnZhbGlk
YXRlXTsKLSAgICBbdGltZXIgcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX2F1dG9zY3JvbGwKLXsK
LSAgICAvLyBHdWFyYW50ZWUgdGhhdCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpcyBpbnZhbGlkYXRl
ZCwgZXZlbiBpZiB3ZSBkb24ndCByZWNlaXZlCi0gICAgLy8gYSBtb3VzZSB1cCBldmVudC4KLSAg
ICBCT09MIGlzU3RpbGxEb3duID0gQ0dFdmVudFNvdXJjZUJ1dHRvblN0YXRlKGtDR0V2ZW50U291
cmNlU3RhdGVDb21iaW5lZFNlc3Npb25TdGF0ZSwga0NHTW91c2VCdXR0b25MZWZ0KTsgICAKLSAg
ICBpZiAoIWlzU3RpbGxEb3duKXsKLSAgICAgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJd
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05T
RXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlRHJhZ2dlZAotICAgICAgICBsb2Nh
dGlvbjpbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9j
YXRpb25dXQotICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2Rp
ZmllckZsYWdzXQotICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJl
ZmVyZW5jZURhdGVdCi0gICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dO
dW1iZXJdCi0gICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCi0g
ICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOwotICAgIFtzZWxm
IG1vdXNlRHJhZ2dlZDpmYWtlRXZlbnRdOwotfQotCi0tIChCT09MKV9jYW5FZGl0Ci17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCk7Ci19Ci0KLS0gKEJPT0wpX2Nh
bkVkaXRSaWNobHkKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRS
aWNobHkoKTsKLX0KLQotLSAoQk9PTClfY2FuQWx0ZXJDdXJyZW50U2VsZWN0aW9uCi17Ci0gICAg
cmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25Pckluc2VydGlvblBvaW50XSAmJiBbc2VsZiBfaXNF
ZGl0YWJsZV07Ci19Ci0KLS0gKEJPT0wpX2hhc1NlbGVjdGlvbgotewotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOwotfQotCi0tIChCT09MKV9oYXNTZWxlY3Rp
b25Pckluc2VydGlvblBvaW50Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigp
LT5pc0NhcmV0T3JSYW5nZSgpOwotfQotCi0tIChCT09MKV9oYXNJbnNlcnRpb25Qb2ludAotewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBj
b3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldCgpOwotfQotCi0tIChC
T09MKV9pc0VkaXRhYmxlCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5p
c0NvbnRlbnRFZGl0YWJsZSgpOwotfQotCi0tIChCT09MKV90cmFuc3BhcmVudEJhY2tncm91bmQK
LXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZDsKLX0KLQotLSAo
dm9pZClfc2V0VHJhbnNwYXJlbnRCYWNrZ3JvdW5kOihCT09MKWYKLXsKLSAgICBfcHJpdmF0ZS0+
dHJhbnNwYXJlbnRCYWNrZ3JvdW5kID0gZjsKLX0KLQotLSAoTlNJbWFnZSAqKV9zZWxlY3Rpb25E
cmFnZ2luZ0ltYWdlCi17Ci0gICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKSB7Ci0gICAgICAg
IE5TSW1hZ2UgKmRyYWdJbWFnZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkltYWdl
KCk7Ci0gICAgICAgIFtkcmFnSW1hZ2UgX3dlYl9kaXNzb2x2ZVRvRnJhY3Rpb246V2ViRHJhZ0lt
YWdlQWxwaGFdOwotICAgICAgICByZXR1cm4gZHJhZ0ltYWdlOwotICAgIH0KLSAgICByZXR1cm4g
bmlsOwotfQotCi0tIChOU1JlY3QpX3NlbGVjdGlvbkRyYWdnaW5nUmVjdAotewotICAgIC8vIE1h
aWwgY3VycmVudGx5IGNhbGxzIHRoaXMgbWV0aG9kLiBXZSBjYW4gZWxpbWluYXRlIGl0IHdoZW4g
TWFpbCBubyBsb25nZXIgY2FsbHMgaXQuCi0gICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3Rd
OwotfQotCi0tIChET01Ob2RlICopX2luc2VydE9yZGVyZWRMaXN0Ci17Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtp
dChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRPcmRlcmVkTGlzdCgpLmdldCgpKSA6IG5pbDsK
LX0KLQotLSAoRE9NTm9kZSAqKV9pbnNlcnRVbm9yZGVyZWRMaXN0Ci17Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtp
dChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRVbm9yZGVyZWRMaXN0KCkuZ2V0KCkpIDogbmls
OwotfQotCi0tIChCT09MKV9jYW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAotewotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwo
KTsKLX0KLQotLSAoQk9PTClfY2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXsKLSAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVs
KCk7Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKLXsKLSAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExl
dmVsKCkuZ2V0KCkpIDogbmlsOwotfQotCi0tIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsT3JkZXJlZAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+
aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxPcmRlcmVkKCkuZ2V0KCkpIDogbmlsOwotfQotCi0t
IChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkCi17Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRvcigpLT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZl
bFVub3JkZXJlZCgpLmdldCgpKSA6IG5pbDsKLX0KLQotLSAodm9pZClfZGVjcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5kZWNy
ZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwotfQotCi0tICh2b2lkKV9zZXRIaWdobGlnaHRlcjoo
aWQ8V2ViSFRNTEhpZ2hsaWdodGVyPiloaWdobGlnaHRlciBvZlR5cGU6KE5TU3RyaW5nKil0eXBl
Ci17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzKQotICAgICAgICBfcHJpdmF0ZS0+
aGlnaGxpZ2h0ZXJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICBb
X3ByaXZhdGUtPmhpZ2hsaWdodGVycyBzZXRPYmplY3Q6aGlnaGxpZ2h0ZXIgZm9yS2V5OnR5cGVd
OwotfQotCi0tICh2b2lkKV9yZW1vdmVIaWdobGlnaHRlck9mVHlwZTooTlNTdHJpbmcqKXR5cGUK
LXsKLSAgICBbX3ByaXZhdGUtPmhpZ2hsaWdodGVycyByZW1vdmVPYmplY3RGb3JLZXk6dHlwZV07
Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQotewotICAgIFtzZWxm
IF9jYW5jZWxVcGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07Ci0KLSAgICBbW3NlbGYg
X3dlYlZpZXddIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVGb3JGcmFtZTpbc2VsZiBfZnJh
bWVdXTsKLX0KLQotLSAodm9pZClfd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVi
b2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBBU1NFUlQoW3NlbGYgX2hhc1NlbGVjdGlvbl0pOwot
ICAgIE5TQXJyYXkgKnR5cGVzID0gW3NlbGYgcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXTsK
LQotICAgIC8vIERvbid0IHdyaXRlIFJURkQgdG8gdGhlIHBhc3RlYm9hcmQgd2hlbiB0aGUgY29w
aWVkIGF0dHJpYnV0ZWQgc3RyaW5nIGhhcyBubyBhdHRhY2htZW50cy4KLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJp
bmddOwotICAgIE5TTXV0YWJsZUFycmF5ICptdXRhYmxlVHlwZXMgPSBuaWw7Ci0gICAgaWYgKCFb
YXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkgewotICAgICAgICBtdXRhYmxl
VHlwZXMgPSBbdHlwZXMgbXV0YWJsZUNvcHldOwotICAgICAgICBbbXV0YWJsZVR5cGVzIHJlbW92
ZU9iamVjdDpOU1JURkRQYm9hcmRUeXBlXTsKLSAgICAgICAgdHlwZXMgPSBtdXRhYmxlVHlwZXM7
Ci0gICAgfQotCi0gICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOltzZWxm
IF90b3BIVE1MVmlld11dOwotICAgIFtzZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJk
VHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmlu
ZzphdHRyaWJ1dGVkU3RyaW5nXTsKLSAgICBbbXV0YWJsZVR5cGVzIHJlbGVhc2VdOwotfQotCi0t
ICh2b2lkKWNsb3NlCi17Ci0gICAgLy8gQ2hlY2sgZm9yIGEgbmlsIF9wcml2YXRlIGhlcmUgaW4g
Y2FzZSB3ZSB3ZXJlIGNyZWF0ZWQgd2l0aCBpbml0V2l0aENvZGVyLiBJbiB0aGF0IGNhc2UsIHRo
ZSBXZWJWaWV3IGlzIGp1c3QgdGhyb3dpbmcKLSAgICAvLyBvdXQgdGhlIGFyY2hpdmVkIFdlYkhU
TUxWaWV3IGFuZCByZWNyZWF0aW5nIGEgbmV3IG9uZSBpZiBuZWVkZWQuIFNvIGNsb3NlIGRvZXNu
J3QgbmVlZCB0byBkbyBhbnl0aGluZyBpbiB0aGF0IGNhc2UuCi0gICAgaWYgKCFfcHJpdmF0ZSB8
fCBfcHJpdmF0ZS0+Y2xvc2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfcHJpdmF0ZS0+Y2xv
c2VkID0gWUVTOwotCi0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKLSAg
ICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOwotICAgIFtz
ZWxmIF9jbGVhckxhc3RIaXRWaWV3SWZTZWxmXTsKLSAgICBbc2VsZiBfcmVtb3ZlTW91c2VNb3Zl
ZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKLSAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2JzZXJ2
ZXJzXTsKLSAgICBbc2VsZiBfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKLSAgICBbX3ByaXZh
dGUtPnBsdWdpbkNvbnRyb2xsZXIgZGVzdHJveUFsbFBsdWdpbnNdOwotICAgIFtfcHJpdmF0ZS0+
cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291cmNlOm5pbF07Ci0gICAgLy8gcmVtb3ZlIHRvb2x0
aXBzIGJlZm9yZSBjbGVhcmluZyBfcHJpdmF0ZSBzbyByZW1vdmVUcmFja2luZ1JlY3Q6IHdpbGwg
d29yayBjb3JyZWN0bHkKLSAgICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107Ci0KLSNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdW
aWV3KQotICAgICAgICBbW3NlbGYgX3dlYlZpZXddIF9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0ZvckZyYW1lOltzZWxmIF9mcmFtZV1dOwotI2VuZGlmCi0KLSAgICBbX3ByaXZhdGUgY2xl
YXJdOwotCi0gICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKTsKLSAgICBpZiAo
cGFnZSkKLSAgICAgICAgcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+c2V0RHJhZ2dpbmdJbWFnZVVS
TChLVVJMKCkpOwotfQotCi0tIChCT09MKV9oYXNIVE1MRG9jdW1lbnQKLXsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAg
ICAgICAgcmV0dXJuIE5POwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9j
dW1lbnQoKTsKLSAgICByZXR1cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50
KCk7Ci19Ci0KLS0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21Q
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTooTlNTdHJpbmcgKilwYm9hcmRU
eXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29u
dGV4dDooRE9NUmFuZ2UgKiljb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXMKLXsKLSAg
ICBpZiAocGJvYXJkVHlwZSA9PSBXZWJBcmNoaXZlUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJB
cmNoaXZlICphcmNoaXZlID0gW1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3Rl
Ym9hcmQgZGF0YUZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5cGVdXTsKLSAgICAgICAgaWYgKHN1
YnJlc291cmNlcykKLSAgICAgICAgICAgICpzdWJyZXNvdXJjZXMgPSBbYXJjaGl2ZSBzdWJyZXNv
dXJjZXNdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBf
ZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoQXJjaGl2ZTphcmNoaXZlXTsKLSAgICAg
ICAgW2FyY2hpdmUgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0g
ICAgaWYgKHBib2FyZFR5cGUgPT0gTlNGaWxlbmFtZXNQYm9hcmRUeXBlKQotICAgICAgICByZXR1
cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6W3Bhc3RlYm9hcmQgcHJvcGVydHlM
aXN0Rm9yVHlwZTpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdXTsKLSAgICAgICAgCi0gICAgaWYgKHBi
b2FyZFR5cGUgPT0gTlNIVE1MUGJvYXJkVHlwZSkgewotICAgICAgICBOU1N0cmluZyAqSFRNTFN0
cmluZyA9IFtwYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6TlNIVE1MUGJvYXJkVHlwZV07Ci0gICAg
ICAgIC8vIFRoaXMgaXMgYSBoYWNrIHRvIG1ha2UgTWljcm9zb2Z0J3MgSFRNTCBwYXN0ZWJvYXJk
IGRhdGEgd29yay4gU2VlIDM3Nzg3ODUuCi0gICAgICAgIGlmIChbSFRNTFN0cmluZyBoYXNQcmVm
aXg6QCJWZXJzaW9uOiJdKSB7Ci0gICAgICAgICAgICBOU1JhbmdlIHJhbmdlID0gW0hUTUxTdHJp
bmcgcmFuZ2VPZlN0cmluZzpAIjxodG1sIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNo
XTsKLSAgICAgICAgICAgIGlmIChyYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQotICAgICAg
ICAgICAgICAgIEhUTUxTdHJpbmcgPSBbSFRNTFN0cmluZyBzdWJzdHJpbmdGcm9tSW5kZXg6cmFu
Z2UubG9jYXRpb25dOwotICAgICAgICB9Ci0gICAgICAgIGlmIChbSFRNTFN0cmluZyBsZW5ndGhd
ID09IDApCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IFtbc2VsZiBfZnJhbWVdIF9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpIVE1MU3Ry
aW5nIGJhc2VVUkxTdHJpbmc6bmlsXTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgX2hhc0hUTUxEb2N1
bWVudCBjbGF1c2UgaGVyZSBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIE5TQXR0cmlidXRl
ZFN0cmluZzogUmFkYXIgNTA1MjM2OS4KLSAgICAvLyBJZiB3ZSBjYWxsIF9kb2N1bWVudEZyb21S
YW5nZSBvbiBhbiBYTUwgZG9jdW1lbnQgd2UnbGwgZ2V0ICJzZXRJbm5lckhUTUw6IG1ldGhvZCBu
b3QgZm91bmQiLgotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGJ1ZyA1MDUyMzY5IGlz
IGZpeGVkLgotICAgIGlmIChbc2VsZiBfaGFzSFRNTERvY3VtZW50XSAmJiBwYm9hcmRUeXBlID09
IE5TUlRGUGJvYXJkVHlwZSB8fCBwYm9hcmRUeXBlID09IE5TUlRGRFBib2FyZFR5cGUpIHsKLSAg
ICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBuaWw7Ci0gICAgICAgIGlmIChwYm9h
cmRUeXBlID09IE5TUlRGRFBib2FyZFR5cGUpCi0gICAgICAgICAgICBzdHJpbmcgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBl
Ok5TUlRGRFBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKLSAgICAgICAgaWYg
KHN0cmluZyA9PSBuaWwpCi0gICAgICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRU
eXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07Ci0gICAgICAgIGlmIChzdHJpbmcgPT0gbmls
KQotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgICAgIAotICAgICAgICBOU0RpY3Rp
b25hcnkgKmRvY3VtZW50QXR0cmlidXRlcyA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHNBbmRLZXlzOgotICAgICAgICAgICAgW1tzZWxmIGNsYXNzXSBfZXhjbHVkZWRFbGVt
ZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uXSwgTlNFeGNsdWRlZEVsZW1lbnRzRG9j
dW1lbnRBdHRyaWJ1dGUsCi0gICAgICAgICAgICBzZWxmLCBAIldlYlJlc291cmNlSGFuZGxlciIs
IG5pbF07Ci0gICAgICAgIE5TQXJyYXkgKnM7Ci0gICAgICAgIAotICAgICAgICBCT09MIHdhc0Rl
ZmVycmluZ0NhbGxiYWNrcyA9IFtbc2VsZiBfd2ViVmlld10gZGVmZXJzQ2FsbGJhY2tzXTsKLSAg
ICAgICAgaWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCi0gICAgICAgICAgICBbW3NlbGYgX3dl
YlZpZXddIHNldERlZmVyc0NhbGxiYWNrczpZRVNdOwotICAgICAgICAgICAgCi0gICAgICAgIERP
TURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW3N0cmluZyBfZG9jdW1lbnRGcm9tUmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDpbW3NlbGYgX2ZyYW1l
XSBET01Eb2N1bWVudF0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb2N1bWVudEF0dHJpYnV0ZXM6ZG9jdW1lbnRBdHRyaWJ1dGVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6
JnNdOwotICAgICAgICBpZiAoc3VicmVzb3VyY2VzKQotICAgICAgICAgICAgKnN1YnJlc291cmNl
cyA9IHM7Ci0gICAgICAgIAotICAgICAgICBOU0VudW1lcmF0b3IgKmUgPSBbcyBvYmplY3RFbnVt
ZXJhdG9yXTsKLSAgICAgICAgV2ViUmVzb3VyY2UgKnI7Ci0gICAgICAgIHdoaWxlICgociA9IFtl
IG5leHRPYmplY3RdKSkKLSAgICAgICAgICAgIFtbc2VsZiBfZGF0YVNvdXJjZV0gYWRkU3VicmVz
b3VyY2U6cl07Ci0gICAgICAgIAotICAgICAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykK
LSAgICAgICAgICAgIFtbc2VsZiBfd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOk5PXTsKLSAg
ICAgICAgCi0gICAgICAgIFtkb2N1bWVudEF0dHJpYnV0ZXMgcmVsZWFzZV07Ci0gICAgICAgIFtz
dHJpbmcgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgaWYg
KHBib2FyZFR5cGUgPT0gTlNUSUZGUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJSZXNvdXJjZSAq
cmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQg
ZGF0YUZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxh
dGl2ZVBhcnQoQCJpbWFnZS50aWZmIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvdGlmZiIgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFt
ZTpuaWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhbWVOYW1lOm5pbF07Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdt
ZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291
cmNlOnJlc291cmNlXTsKLSAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TUERGUGJvYXJkVHlw
ZSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9j
XSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNQREZQYm9hcmRUeXBlXQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImFwcGxpY2F0aW9uLnBkZiIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN
SU1FVHlwZTpAImFwcGxpY2F0aW9uL3BkZiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07
Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291
cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKLSAgICAg
ICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQot
I2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1BJQ1RQYm9hcmRUeXBlKSB7Ci0gICAgICAg
IFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0
YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1BJQ1RQYm9hcmRUeXBlXQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5p
cXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBpY3QiKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS9w
aWN0IiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0RW5jb2RpbmdOYW1lOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRG
cmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50
V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07
Ci0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0jZW5kaWYKLSAgICAvLyBPbmx5IDEw
LjUgYW5kIGhpZ2hlciBzdXBwb3J0IHNldHRpbmcgYW5kIHJldHJpZXZpbmcgcGFzdGVib2FyZCB0
eXBlcyB3aXRoIFVUSXMsIGJ1dCB3ZSBkb24ndCBiZWxpZXZlCi0gICAgLy8gdGhhdCBhbnkgYXBw
bGljYXRpb25zIG9uIFRpZ2VyIHB1dCB0eXBlcyBmb3Igd2hpY2ggd2Ugb25seSBoYXZlIGEgVVRJ
LCBsaWtlIFBORywgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1
YWxUb1N0cmluZzooTlNTdHJpbmcqKWtVVFR5cGVQTkddKSB7Ci0gICAgICAgIFdlYlJlc291cmNl
ICpyZXNvdXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2Fy
ZCBkYXRhRm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQTkddCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxX
aXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UucG5nIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvcG5nIiAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2Rp
bmdOYW1lOm5pbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmcmFtZU5hbWU6bmlsXTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAq
ZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdl
UmVzb3VyY2U6cmVzb3VyY2VdOwotICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07Ci0gICAgICAg
IHJldHVybiBmcmFnbWVudDsKLSAgICB9Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gTlNVUkxQYm9h
cmRUeXBlKSB7Ci0gICAgICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6
cGFzdGVib2FyZF07Ci0gICAgICAgIERPTURvY3VtZW50KiBkb2N1bWVudCA9IFtbc2VsZiBfZnJh
bWVdIERPTURvY3VtZW50XTsKLSAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAgICAgaWYg
KCFkb2N1bWVudCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIERPTUhUTUxBbmNo
b3JFbGVtZW50ICphbmNob3IgPSAoRE9NSFRNTEFuY2hvckVsZW1lbnQgKilbZG9jdW1lbnQgY3Jl
YXRlRWxlbWVudDpAImEiXTsKLSAgICAgICAgTlNTdHJpbmcgKlVSTFN0cmluZyA9IFtVUkwgX3dl
Yl9vcmlnaW5hbERhdGFBc1N0cmluZ107IC8vIE9yaWdpbmFsIGRhdGEgaXMgQVNDSUktb25seSwg
c28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcmVjb21wb3NlLgotICAgICAgICBpZiAoW1VSTFN0cmlu
ZyBsZW5ndGhdID09IDApCi0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICBOU1N0cmlu
ZyAqVVJMVGl0bGVTdHJpbmcgPSBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpXZWJVUkxOYW1l
UGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107Ci0gICAg
ICAgIERPTVRleHQgKnRleHQgPSBbZG9jdW1lbnQgY3JlYXRlVGV4dE5vZGU6VVJMVGl0bGVTdHJp
bmddOwotICAgICAgICBbYW5jaG9yIHNldEhyZWY6VVJMU3RyaW5nXTsKLSAgICAgICAgW2FuY2hv
ciBhcHBlbmRDaGlsZDp0ZXh0XTsKLSAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21l
bnQgPSBbZG9jdW1lbnQgY3JlYXRlRG9jdW1lbnRGcmFnbWVudF07Ci0gICAgICAgIFtmcmFnbWVu
dCBhcHBlbmRDaGlsZDphbmNob3JdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQot
ICAgIGlmIChwYm9hcmRUeXBlID09IE5TU3RyaW5nUGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJu
IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBz
dHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ10pLmdldCgpKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0jaWYgRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpIAotLSAodm9pZClfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0
c2NhcGVQbHVnaW5zIAoteyAKLSAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdz
XTsgCi0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3cyBjb3VudF07IAot
ICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3SW5kZXg7IAotICAgIAotICAgIGZvciAoc3Vidmlld0lu
ZGV4ID0gMDsgc3Vidmlld0luZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3SW5kZXgrKykgeyAK
LSAgICAgICAgTlNWaWV3ICpzdWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6c3Vidmll
d0luZGV4XTsgCi0gICAgICAgIGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0
c2NhcGVQbHVnaW5WaWV3IGNsYXNzXV0pIAotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3ICopc3VidmlldyBzdG9wVGltZXJzXTsKLSAgICB9IAotfSAKLSNlbmRpZiAKLQot
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKLS0gKHZvaWQpX3Jlc3VtZU51bGxFdmVu
dHNGb3JBbGxOZXRzY2FwZVBsdWdpbnMgCi17IAotICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3Nl
bGYgc3Vidmlld3NdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdz
IGNvdW50XTsgCi0gICAgdW5zaWduZWQgaW50IHN1YnZpZXdJbmRleDsgCi0gICAgCi0gICAgZm9y
IChzdWJ2aWV3SW5kZXggPSAwOyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJ
bmRleCsrKSB7IAotICAgICAgICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJ
bmRleDpzdWJ2aWV3SW5kZXhdOyAKLSAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6
W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkgCi0gICAgICAgICAgICBbKFdlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgKilzdWJ2aWV3IHJlc3RhcnRUaW1lcnNdOyAKLSAgICB9IAot
fSAKLSNlbmRpZiAKLQotLSAoQk9PTClfaXNVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcKLXsK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgcmV0dXJuIF9wcml2YXRlLT5s
YXllckhvc3RpbmdWaWV3ICE9IG5pbDsKLSNlbHNlCi0gICAgcmV0dXJuIE5POwotI2VuZGlmCi19
Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE5TVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJu
YWwpCi0KLS0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTooTlNN
dXRhYmxlQXJyYXkgKilhcnJheQotewotICAgIHVuc2lnbmVkIGNvdW50ID0gW19zdWJ2aWV3cyBj
b3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgTlNWaWV3ICpjaGlsZCA9IFtfc3Vidmlld3Mgb2JqZWN0QXRJbmRleDppXTsKLSAgICAgICAg
aWYgKFtjaGlsZCBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAgICAg
ICAgW2FycmF5IGFkZE9iamVjdDpjaGlsZF07Ci0gICAgICAgIFtjaGlsZCBfd2ViX2FkZERlc2Nl
bmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmFycmF5XTsKLSAgICB9Ci19Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIE5TTXV0YWJsZURpY3Rpb25hcnkgKFdlYkhUTUxWaWV3RmlsZUludGVybmFs
KQotCi0tICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlk
KWtleQotewotICAgIGlmIChvYmplY3QgPT0gbmlsKSB7Ci0gICAgICAgIFtzZWxmIHJlbW92ZU9i
amVjdEZvcktleTprZXldOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFtzZWxmIHNldE9iamVjdDpv
YmplY3QgZm9yS2V5OmtleV07Ci0gICAgfQotfQotCi1AZW5kCi0KLUBpbnRlcmZhY2UgTlNTdHJp
bmcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAoQk9PTCltYXRjaGVzRXh0ZW5zaW9uRXF1
aXZhbGVudDooTlNTdHJpbmcgKilleHRlbnNpb247Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBO
U1N0cmluZyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0KLS0gKEJPT0wpbWF0Y2hlc0V4dGVu
c2lvbkVxdWl2YWxlbnQ6KE5TU3RyaW5nICopZXh0ZW5zaW9uCi17Ci0gICAgaWYgKFtzZWxmIGhh
c1N1ZmZpeDpleHRlbnNpb25dKQotICAgICAgICByZXR1cm4gWUVTOwotICAgIGVsc2UgaWYgKFtl
eHRlbnNpb24gaXNFcXVhbFRvU3RyaW5nOkAianBlZyJdICYmIFtzZWxmIGhhc1N1ZmZpeDpAImpw
ZyJdKQotICAgICAgICByZXR1cm4gWUVTOwotICAgIHJldHVybiBOTzsKLX0KLQotQGVuZAotCi0j
aWZkZWYgQlVJTERJTkdfT05fVElHRVIKLQotLy8gVGhlIGZvbGxvd2luZyBpcyBhIHdvcmthcm91
bmQgZm9yCi0vLyA8cmRhcjovL3Byb2JsZW0vMzQyOTYzMT4gd2luZG93IHN0b3BzIGdldHRpbmcg
bW91c2UgbW92ZWQgZXZlbnRzIGFmdGVyIGZpcnN0IHRvb2x0aXAgYXBwZWFycwotLy8gVGhlIHRy
aWNrIGlzIHRvIGRlZmluZSBhIGNhdGVnb3J5IG9uIE5TVG9vbFRpcFBhbmVsIHRoYXQgaW1wbGVt
ZW50cyBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czouCi0vLyBTaW5jZSB0aGUgY2F0ZWdvcnkg
d2lsbCBiZSBzZWFyY2hlZCBiZWZvcmUgdGhlIHJlYWwgY2xhc3MsIHdlJ2xsIHByZXZlbnQgdGhl
IGZsYWcgZnJvbSBiZWluZwotLy8gc2V0IG9uIHRoZSB0b29sIHRpcCBwYW5lbC4KLQotQGludGVy
ZmFjZSBOU1Rvb2xUaXBQYW5lbCA6IE5TUGFuZWwKLUBlbmQKLQotQGludGVyZmFjZSBOU1Rvb2xU
aXBQYW5lbCAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBOU1Rvb2xUaXBQYW5lbCAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCi0KLS0gKHZvaWQpc2V0
QWNjZXB0c01vdXNlTW92ZWRFdmVudHM6KEJPT0wpZmxhZwotewotICAgIC8vIERvIG5vdGhpbmcs
IHByZXZlbnRpbmcgdGhlIHRvb2wgdGlwIHBhbmVsIGZyb20gdHJ5aW5nIHRvIGFjY2VwdCBtb3Vz
ZS1tb3ZlZCBldmVudHMuCi19Ci0KLUBlbmQKLQotI2VuZGlmCi0KLUBpbnRlcmZhY2UgTlNBcnJh
eSAoV2ViSFRNTFZpZXcpCi0tICh2b2lkKV93ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVj
dG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVjdDooaWQpb2JqZWN0OwotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gV2ViSFRNTFZpZXcKLQotKyAodm9pZClpbml0aWFsaXplCi17Ci0gICAgW05TQXBw
IHJlZ2lzdGVyU2VydmljZXNNZW51U2VuZFR5cGVzOltbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBh
c3RlYm9hcmRUeXBlc10gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVz
Oltbc2VsZiBjbGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdXTsKLSAgICBKU0M6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBXZWJD
b3JlT2JqQ0ZpbmFsaXplT25NYWluVGhyZWFkKHNlbGYpOwotI2VuZGlmCi19Ci0KLS0gKGlkKWlu
aXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhG
cmFtZTpmcmFtZV07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAot
ICAgIFtzZWxmIHNldEZvY3VzUmluZ1R5cGU6TlNGb2N1c1JpbmdUeXBlTm9uZV07Ci0gICAgCi0g
ICAgLy8gTWFrZSBhbGwgZHJhd2luZyBnbyB0aHJvdWdoIHVzIGluc3RlYWQgb2Ygc3Vidmlld3Mu
Ci0gICAgW3NlbGYgX3NldERyYXdzT3duRGVzY2VuZGFudHM6WUVTXTsKLSAgICAKLSAgICBfcHJp
dmF0ZSA9IFtbV2ViSFRNTFZpZXdQcml2YXRlIGFsbG9jXSBpbml0XTsKLQotICAgIF9wcml2YXRl
LT5wbHVnaW5Db250cm9sbGVyID0gW1tXZWJQbHVnaW5Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0
aERvY3VtZW50VmlldzpzZWxmXTsKLSAgICAKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWlu
VGhyZWFkKFtXZWJIVE1MVmlldyBjbGFzc10sIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBXZSBjYW4ndCBhc3NlcnQgdGhhdCBjbG9zZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBi
ZWNhdXNlCi0gICAgLy8gdGhpcyB2aWV3IGNhbiBiZSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZp
ZXcsIGV2ZW4gdGhvdWdoCi0gICAgLy8gaXQgY291bGQgYmUgbmVlZGVkIGxhdGVyLCBzbyBjbG9z
ZSBpZiBuZWVkZWQuCi0gICAgW3NlbGYgY2xvc2VdOwotICAgIFtfcHJpdmF0ZSByZWxlYXNlXTsK
LSAgICBfcHJpdmF0ZSA9IG5pbDsKLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKHZvaWQp
ZmluYWxpemUKLXsKLSAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKLSAgICAvLyBXZSBjYW4ndCBh
c3NlcnQgdGhhdCBjbG9zZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBiZWNhdXNlCi0gICAgLy8g
dGhpcyB2aWV3IGNhbiBiZSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcsIGV2ZW4gdGhvdWdo
Ci0gICAgLy8gaXQgY291bGQgYmUgbmVlZGVkIGxhdGVyLCBzbyBjbG9zZSBpZiBuZWVkZWQuCi0g
ICAgW3NlbGYgY2xvc2VdOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS8vIFJldHVybnMg
WUVTIGlmIHRoZSBkZWxlZ2F0ZSByZXR1cm5zIFlFUyAoc28gd2Ugc2hvdWxkIGRvIG5vIG1vcmUg
d29yaykuCi0tIChCT09MKWNhbGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDoo
U0VMKXNlbGVjdG9yCi17Ci0gICAgQk9PTCBjYWxsZXJBbHJlYWR5Q2FsbGVkRGVsZWdhdGUgPSBf
cHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID09IHNlbGVjdG9yOwotICAg
IF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSAwOwotICAgIGlmIChj
YWxsZXJBbHJlYWR5Q2FsbGVkRGVsZWdhdGUpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBXZWJW
aWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIHJldHVybiBbW3dlYlZpZXcgX2Vk
aXRpbmdEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0
b3I6c2VsZWN0b3JdOwotfQotCi1zdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3Io
U0VMIHNlbGVjdG9yKQotewotICAgIC8vIENoYW5nZSBhIGZldyBjb21tYW5kIG5hbWVzIGludG8g
b25lcyBzdXBwb3J0ZWQgYnkgV2ViQ29yZTo6RWRpdG9yLgotICAgIC8vIElmIHRoaXMgbGlzdCBn
ZXRzIHRvbyBsb25nIHdlIG1pZ2h0IGRlY2lkZSB3ZSBuZWVkIHRvIHVzZSBhIGhhc2ggdGFibGUu
Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6
KSB8fCBzZWxlY3RvciA9PSBAc2VsZWN0b3IoaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0
b3I6KSkKLSAgICAgICAgcmV0dXJuICJJbnNlcnROZXdsaW5lIjsKLSAgICBpZiAoc2VsZWN0b3Ig
PT0gQHNlbGVjdG9yKGluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3I6KSkKLSAgICAgICAgcmV0
dXJuICJJbnNlcnRUYWIiOwotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZURvd246
KSkKLSAgICAgICAgcmV0dXJuICJNb3ZlUGFnZURvd24iOwotICAgIGlmIChzZWxlY3RvciA9PSBA
c2VsZWN0b3IocGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb246KSkKLSAgICAgICAgcmV0dXJuICJN
b3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iOwotICAgIGlmIChzZWxlY3RvciA9PSBAc2Vs
ZWN0b3IocGFnZVVwOikpCi0gICAgICAgIHJldHVybiAiTW92ZVBhZ2VVcCI7Ci0gICAgaWYgKHNl
bGVjdG9yID09IEBzZWxlY3RvcihwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246KSkKLSAgICAgICAg
cmV0dXJuICJNb3ZlUGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uIjsKLQotICAgIC8vIFJlbW92ZSB0
aGUgdHJhaWxpbmcgY29sb24uCi0gICAgY29uc3QgY2hhciogc2VsZWN0b3JOYW1lID0gc2VsX2dl
dE5hbWUoc2VsZWN0b3IpOwotICAgIHNpemVfdCBzZWxlY3Rvck5hbWVMZW5ndGggPSBzdHJsZW4o
c2VsZWN0b3JOYW1lKTsKLSAgICBpZiAoc2VsZWN0b3JOYW1lTGVuZ3RoIDwgMiB8fCBzZWxlY3Rv
ck5hbWVbc2VsZWN0b3JOYW1lTGVuZ3RoIC0gMV0gIT0gJzonKQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIFN0cmluZyhzZWxlY3Rvck5hbWUsIHNlbGVjdG9yTmFtZUxlbmd0
aCAtIDEpOwotfQotCi0tIChFZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1hbmRCeVNlbGVjdG9yOihT
RUwpc2VsZWN0b3IKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIEVkaXRvcjo6Q29tbWFuZCgp
OwotICAgIHJldHVybiBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lRm9y
U2VsZWN0b3Ioc2VsZWN0b3IpKTsKLX0KLQotLSAoRWRpdG9yOjpDb21tYW5kKWNvcmVDb21tYW5k
QnlOYW1lOihjb25zdCBjaGFyKiluYW1lCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBFZGl0
b3I6OkNvbW1hbmQoKTsKLSAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChu
YW1lKTsKLX0KLQotLSAodm9pZClleGVjdXRlQ29yZUNvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2Vs
ZWN0b3IKLXsKLSAgICBpZiAoW3NlbGYgY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3Rvcklm
TmVlZGVkOnNlbGVjdG9yXSkKLSAgICAgICAgcmV0dXJuOwotICAgIFtzZWxmIGNvcmVDb21tYW5k
QnlTZWxlY3RvcjpzZWxlY3Rvcl0uZXhlY3V0ZSgpOwotfQotCi0tICh2b2lkKWV4ZWN1dGVDb3Jl
Q29tbWFuZEJ5TmFtZTooY29uc3QgY2hhciopbmFtZQotewotICAgIFtzZWxmIGNvcmVDb21tYW5k
QnlOYW1lOm5hbWVdLmV4ZWN1dGUoKTsKLX0KLQotLy8gVGhlc2UgY29tbWFuZHMgYXJlIGZvcndh
cmRlZCB0byB0aGUgRWRpdG9yIG9iamVjdCBpbiBXZWJDb3JlLgotLy8gSWRlYWxseSB3ZSdkIGRv
IHRoaXMgZm9yIGFsbCBlZGl0aW5nIGNvbW1hbmRzOyBtb3JlIG9mIHRoZSBjb2RlCi0vLyBzaG91
bGQgYmUgbW92ZWQgZnJvbSBoZXJlIHRvIHRoZXJlLCBhbmQgbW9yZSBjb21tYW5kcyBzaG91bGQg
YmUKLS8vIGFkZGVkIHRvIHRoaXMgbGlzdC4KLQotLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBz
ZXQgdGhpbmdzIHVwIHNvIHRoYXQgYWxsIHRoZXNlIHNoYXJlIGEgc2luZ2xlIG1ldGhvZCBpbXBs
ZW1lbnRhdGlvbiBmdW5jdGlvbi4KLS8vIFRoZSBmdW5jdGlvbnMgYXJlIGlkZW50aWNhbC4KLQot
I2RlZmluZSBXRUJDT1JFX0NPTU1BTkQoY29tbWFuZCkgLSAodm9pZCljb21tYW5kOihpZClzZW5k
ZXIgeyBbc2VsZiBleGVjdXRlQ29yZUNvbW1hbmRCeVNlbGVjdG9yOl9jbWRdOyB9Ci0KLVdFQkNP
UkVfQ09NTUFORChhbGlnbkNlbnRlcikKLVdFQkNPUkVfQ09NTUFORChhbGlnbkp1c3RpZmllZCkK
LVdFQkNPUkVfQ09NTUFORChhbGlnbkxlZnQpCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25SaWdodCkK
LVdFQkNPUkVfQ09NTUFORChjb3B5KQotV0VCQ09SRV9DT01NQU5EKGN1dCkKLVdFQkNPUkVfQ09N
TUFORChkZWxldGUpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlQmFja3dhcmQpCi1XRUJDT1JFX0NP
TU1BTkQoZGVsZXRlQmFja3dhcmRCeURlY29tcG9zaW5nUHJldmlvdXNDaGFyYWN0ZXIpCi1XRUJD
T1JFX0NPTU1BTkQoZGVsZXRlRm9yd2FyZCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0JlZ2lu
bmluZ09mTGluZSkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBo
KQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvRW5kT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKGRl
bGV0ZVRvRW5kT2ZQYXJhZ3JhcGgpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9NYXJrKQotV0VC
Q09SRV9DT01NQU5EKGRlbGV0ZVdvcmRCYWNrd2FyZCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVX
b3JkRm9yd2FyZCkKLVdFQkNPUkVfQ09NTUFORChpZ25vcmVTcGVsbGluZykKLVdFQkNPUkVfQ09N
TUFORChpbmRlbnQpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0QmFja3RhYikKLVdFQkNPUkVfQ09N
TUFORChpbnNlcnRMaW5lQnJlYWspCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZSkKLVdF
QkNPUkVfQ09NTUFORChpbnNlcnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcikKLVdFQkNPUkVf
Q09NTUFORChpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0
VGFiKQotV0VCQ09SRV9DT01NQU5EKGluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3IpCi1XRUJD
T1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQpCi1XRUJDT1JF
X0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCkKLVdFQkNPUkVfQ09NTUFO
RChtYWtlVGV4dFdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCkKLVdFQkNPUkVfQ09NTUFORCht
b3ZlQmFja3dhcmQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0
aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVEb3duKQotV0VCQ09SRV9DT01NQU5EKG1vdmVEb3du
QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3YXJkKQotV0VCQ09S
RV9DT01NQU5EKG1vdmVGb3J3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5E
KG1vdmVMZWZ0KQotV0VCQ09SRV9DT01NQU5EKG1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQot
V0VCQ09SRV9DT01NQU5EKG1vdmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikK
LVdFQkNPUkVfQ09NTUFORChtb3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikK
LVdFQkNPUkVfQ09NTUFORChtb3ZlUmlnaHQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0QW5k
TW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mRG9jdW1l
bnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNl
bGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkxpbmUpCi1XRUJDT1JF
X0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09S
RV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoKQotV0VCQ09SRV9DT01NQU5EKG1v
dmVUb0JlZ2lubmluZ09mUGFyYWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01N
QU5EKG1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2UpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVn
aW5uaW5nT2ZTZW50ZW5jZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3Zl
VG9FbmRPZkRvY3VtZW50KQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mRG9jdW1lbnRBbmRN
b2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lKQotV0VCQ09S
RV9DT01NQU5EKG1vdmVUb0VuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09N
TUFORChtb3ZlVG9FbmRPZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBh
cmFncmFwaEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlNl
bnRlbmNlKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mU2VudGVuY2VBbmRNb2RpZnlTZWxl
Y3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZSkKLVdFQkNPUkVfQ09N
TUFORChtb3ZlVG9MZWZ0RW5kT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01N
QU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5k
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVVcCkKLVdFQkNP
UkVfQ09NTUFORChtb3ZlVXBBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92
ZVdvcmRCYWNrd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5
U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkRm9yd2FyZCkKLVdFQkNPUkVfQ09N
TUFORChtb3ZlV29yZEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQo
bW92ZVdvcmRMZWZ0KQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVj
dGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlV29yZFJpZ2h0KQotV0VCQ09SRV9DT01NQU5EKG1v
dmVXb3JkUmlnaHRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQob3V0ZGVudCkK
LVdFQkNPUkVfQ09NTUFORChwYWdlRG93bikKLVdFQkNPUkVfQ09NTUFORChwYWdlRG93bkFuZE1v
ZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChwYWdlVXApCi1XRUJDT1JFX0NPTU1BTkQo
cGFnZVVwQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdEFsbCkKLVdF
QkNPUkVfQ09NTUFORChzZWxlY3RMaW5lKQotV0VCQ09SRV9DT01NQU5EKHNlbGVjdFBhcmFncmFw
aCkKLVdFQkNPUkVfQ09NTUFORChzZWxlY3RTZW50ZW5jZSkKLVdFQkNPUkVfQ09NTUFORChzZWxl
Y3RUb01hcmspCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0V29yZCkKLVdFQkNPUkVfQ09NTUFORChz
ZXRNYXJrKQotV0VCQ09SRV9DT01NQU5EKHN1YnNjcmlwdCkKLVdFQkNPUkVfQ09NTUFORChzdXBl
cnNjcmlwdCkKLVdFQkNPUkVfQ09NTUFORChzd2FwV2l0aE1hcmspCi1XRUJDT1JFX0NPTU1BTkQo
dHJhbnNwb3NlKQotV0VCQ09SRV9DT01NQU5EKHVuZGVybGluZSkKLVdFQkNPUkVfQ09NTUFORCh1
bnNjcmlwdCkKLVdFQkNPUkVfQ09NTUFORCh5YW5rKQotV0VCQ09SRV9DT01NQU5EKHlhbmtBbmRT
ZWxlY3QpCi0KLSN1bmRlZiBXRUJDT1JFX0NPTU1BTkQKLQotI2RlZmluZSBDT01NQU5EX1BST0xP
R1VFIGlmIChbc2VsZiBjYWxsRGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6X2Nt
ZF0pIHJldHVybjsKLQotLSAoSUJBY3Rpb24pdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOihp
ZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtzZWxmIF9oYXNT
ZWxlY3Rpb25dKSB7Ci0gICAgICAgIE5TQmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgW05TUGFzdGVib2FyZCBfd2ViX3NldEZpbmRQYXN0ZWJvYXJkU3RyaW5nOltzZWxmIHNl
bGVjdGVkU3RyaW5nXSB3aXRoT3duZXI6c2VsZl07Ci19Ci0KLS0gKEJPT0wpd3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgdHlwZXM6KE5TQXJyYXkg
Kil0eXBlcwotewotICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2Vs
ZiBfdG9wSFRNTFZpZXddXTsKLSAgICBbc2VsZiB3cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJk
VHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotICAgIHJldHVybiBZRVM7Ci19
Ci0KLS0gKEJPT0wpcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilw
YXN0ZWJvYXJkCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBpZiAoY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKLSAgICAgICAgW3Nl
bGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDpZRVNdOwot
ICAgIGVsc2UKLSAgICAgICAgW3NlbGYgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDpw
YXN0ZWJvYXJkXTsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChpZCl2YWxpZFJlcXVlc3RvckZv
clNlbmRUeXBlOihOU1N0cmluZyAqKXNlbmRUeXBlIHJldHVyblR5cGU6KE5TU3RyaW5nICopcmV0
dXJuVHlwZQotewotICAgIEJPT0wgaXNTZW5kVHlwZU9LID0gIXNlbmRUeXBlIHx8IChbW3NlbGYg
cGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXSBjb250YWluc09iamVjdDpzZW5kVHlwZV0gJiYg
W3NlbGYgX2hhc1NlbGVjdGlvbl0pOwotICAgIEJPT0wgaXNSZXR1cm5UeXBlT0sgPSAhcmV0dXJu
VHlwZSB8fCAoW1tbc2VsZiBjbGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdIGNvbnRh
aW5zT2JqZWN0OnJldHVyblR5cGVdICYmIFtzZWxmIF9pc0VkaXRhYmxlXSk7Ci0gICAgaWYgKGlz
U2VuZFR5cGVPSyAmJiBpc1JldHVyblR5cGVPSykKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAg
cmV0dXJuIFtbc2VsZiBuZXh0UmVzcG9uZGVyXSB2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOnNl
bmRUeXBlIHJldHVyblR5cGU6cmV0dXJuVHlwZV07Ci19Ci0KLS8vIGp1bXBUb1NlbGVjdGlvbiBp
cyB0aGUgb2xkIG5hbWUgZm9yIHdoYXQgQXBwS2l0IG5vdyBjYWxscyBjZW50ZXJTZWxlY3Rpb25J
blZpc2libGVBcmVhLiBTYWZhcmkKLS8vIHdhcyB1c2luZyB0aGUgb2xkIGp1bXBUb1NlbGVjdGlv
biBzZWxlY3RvciBpbiBpdHMgbWVudS4gTmV3ZXIgdmVyc2lvbnMgb2YgU2FmYXJpIHdpbGwgdXNl
IHRoZQotLy8gc2VsZWN0b3IgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYS4gV2UnbGwgbGVh
dmUgdGhlIG9sZCBzZWxlY3RvciBpbiBwbGFjZSBmb3IgdHdvIHJlYXNvbnM6Ci0vLyAoMSkgQ29t
cGF0aWJpbGl0eSBiZXR3ZWVuIG9sZGVyIFNhZmFyaSBhbmQgbmV3ZXIgV2ViS2l0OyAoMikgb3Ro
ZXIgV2ViS2l0LWJhc2VkIGFwcGxpY2F0aW9ucwotLy8gbWlnaHQgYmUgdXNpbmcgdGhlIHNlbGVj
dG9yLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBicmVhayB0aGVtLgotLSAodm9pZClqdW1wVG9TZWxl
Y3Rpb246KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIGlmIChGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5y
ZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7Ci19Ci0K
LS0gKE5TQ2VsbFN0YXRlVmFsdWUpc2VsZWN0aW9uSGFzU3R5bGU6KENTU1N0eWxlRGVjbGFyYXRp
b24qKXN0eWxlCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7
Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBOU09mZlN0YXRlOwotICAgIHJl
dHVybiBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUpKTsK
LX0KLQotLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihp
ZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbQotewotICAgIFNFTCBhY3Rpb24g
PSBbaXRlbSBhY3Rpb25dOwotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOwotCi0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAg
IGlmIChEb2N1bWVudCogZG9jID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgaWYgKGRv
Yy0+aXNQbHVnaW5Eb2N1bWVudCgpKQotICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICBp
ZiAoZG9jLT5pc0ltYWdlRG9jdW1lbnQoKSkgeyAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IoY29weTopKQotICAgICAgICAgICAgICAgIHJldHVybiBmcmFt
ZS0+bG9hZGVyKCktPmlzQ29tcGxldGUoKTsKLSAgICAgICAgICAgIHJldHVybiBOTzsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZVNwZWxsaW5n
OikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoX2NoYW5nZVNwZWxsaW5nRnJv
bU1lbnU6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGVja1NwZWxsaW5n
OikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY29tcGxldGU6KQotICAgICAg
ICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZUZvbnQ6KSkKLSAgICAgICAgcmV0dXJu
IFtzZWxmIF9jYW5FZGl0XTsKLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNob3dHdWVz
c1BhbmVsOikpIHsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICAgICAgLy8gTWF0Y2gg
T1MgWCBBcHBLaXQgYmVoYXZpb3IgZm9yIHBvc3QtVGlnZXIuIERvbid0IGNoYW5nZSBUaWdlciBi
ZWhhdmlvci4KLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0
ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFz
c11dKSB7Ci0gICAgICAgICAgICBCT09MIHBhbmVsU2hvd2luZyA9IFtbW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxpbmdQYW5lbF0gaXNWaXNpYmxlXTsKLSAgICAgICAg
ICAgIFttZW51SXRlbSBzZXRUaXRsZTpwYW5lbFNob3dpbmcKLSAgICAgICAgICAgICAgICA/IFVJ
X1NUUklORygiSGlkZSBTcGVsbGluZyBhbmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKQot
ICAgICAgICAgICAgICAgIDogVUlfU1RSSU5HKCJTaG93IFNwZWxsaW5nIGFuZCBHcmFtbWFyIiwg
Im1lbnUgaXRlbSB0aXRsZSIpXTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIHJldHVybiBb
c2VsZiBfY2FuRWRpdF07Ci0gICAgfQotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9y
KGNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uOikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBA
c2VsZWN0b3IobWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6KQotICAgICAgICAg
ICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRv
TGVmdDopKSB7Ci0gICAgICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uOwot
Ci0gICAgICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUJhc2VXcml0aW5nRGlyZWN0
aW9uOikpIHsKLSAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxOU1dy
aXRpbmdEaXJlY3Rpb24+KFtpdGVtIHRhZ10pOwotICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJl
Y3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gTk87Ci0gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdy
aXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDopKQotICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlv
biA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB3cml0aW5nRGlyZWN0aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7Ci0K
LSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAg
ICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVj
OwotICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCB3cml0aW5nRGly
ZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gIkxUUiIgOiAiUlRMIiwg
ZWMpOwotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOmZyYW1lLT5lZGl0b3IoKS0+c2Vs
ZWN0aW9uSGFzU3R5bGUoc3R5bGUuZ2V0KCkpXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
W3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG1h
a2VCYXNlV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWw6KSkgewotICAgICAgICBOU01lbnVJdGVtICpt
ZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tp
bmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0
U3RhdGU6TlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBOTzsKLSAgICB9Ci0KLSAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVCYXNlV3JpdGluZ0RpcmVjdGlvbjopKSB7Ci0gICAg
ICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBp
ZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAg
ICAgICAgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAg
ICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eSgiZGlyZWN0aW9uIiwgIlJUTCIsIGVjKTsKLSAg
ICAgICAgICAgIC8vIFRha2UgY29udHJvbCBvZiB0aGUgdGl0bGUgb2YgdGhlIG1lbnUgaXRlbSBp
bnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcvdW5jaGVja2luZyBpdCBiZWNhdXNlCi0gICAgICAgICAg
ICAvLyBhIGNoZWNrIHdvdWxkIGJlIGFtYmlndW91cy4KLSAgICAgICAgICAgIFttZW51SXRlbSBz
ZXRUaXRsZTpmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKQot
ICAgICAgICAgICAgICAgID8gVUlfU1RSSU5HKCJMZWZ0IHRvIFJpZ2h0IiwgIkxlZnQgdG8gUmln
aHQgY29udGV4dCBtZW51IGl0ZW0iKQotICAgICAgICAgICAgICAgIDogVUlfU1RSSU5HKCJSaWdo
dCB0byBMZWZ0IiwgIlJpZ2h0IHRvIExlZnQgY29udGV4dCBtZW51IGl0ZW0iKV07Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9IAotICAgIAotICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUF0dHJpYnV0ZXM6KQotICAgICAgICAgICAgfHwg
YWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VDb2xvcjopICAgICAgICAKLSAgICAgICAgICAgIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlRm9udDopKQotICAgICAgICByZXR1cm4gW3NlbGYg
X2NhbkVkaXRSaWNobHldOwotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNhcGl0
YWxpemVXb3JkOikKLSAgICAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobG93ZXJj
YXNlV29yZDopCi0gICAgICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHVwcGVyY2Fz
ZVdvcmQ6KSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25dICYmIFtzZWxmIF9p
c0VkaXRhYmxlXTsKLQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNlbnRlclNlbGVjdGlv
bkluVmlzaWJsZUFyZWE6KQotICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihq
dW1wVG9TZWxlY3Rpb246KQotICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihj
b3B5Rm9udDopKQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl0gfHwgKFtzZWxm
IF9pc0VkaXRhYmxlXSAmJiBbc2VsZiBfaGFzSW5zZXJ0aW9uUG9pbnRdKTsKLSAgICAKLSAgICBp
ZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjopKQot
ICAgICAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0VkaXRhYmxlXSAmJiBbc2VsZiBfY2Fu
RWRpdFJpY2hseV07Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2lnbm9yZVNw
ZWxsaW5nRnJvbU1lbnU6KQotICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfbGVh
cm5TcGVsbGluZ0Zyb21NZW51OikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
dGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOikpCi0gICAgICAgIHJldHVybiBbc2VsZiBfaGFz
U2VsZWN0aW9uXTsKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZTopIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1BsYWluVGV4dDopKQotICAgICAgICByZXR1cm4g
ZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1lLT5lZGl0
b3IoKS0+Y2FuUGFzdGUoKSk7Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGFz
dGVBc1JpY2hUZXh0OikpCi0gICAgICAgIHJldHVybiBmcmFtZSAmJiAoZnJhbWUtPmVkaXRvcigp
LT5jYW5ESFRNTFBhc3RlKCkKLSAgICAgICAgICAgIHx8IChmcmFtZS0+ZWRpdG9yKCktPmNhblBh
c3RlKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSk7
Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGVyZm9ybUZpbmRQYW5lbEFjdGlv
bjopKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IoX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBf
aGFzU2VsZWN0aW9uXTsKLSAgICAKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6KSkgewotICAgICAgICAv
LyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1t
YXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IHZhbGlkYXRlIAotICAgICAgICAvLyB0aGUg
c2VsZWN0b3IgaGVyZSBiZWNhdXNlIHdlIGltcGxlbWVudCBpdCBoZXJlLCBhbmQgd2UgbXVzdCBp
bXBsZW1lbnQgaXQgaGVyZSBiZWNhdXNlIHRoZSBBcHBLaXQgCi0gICAgICAgIC8vIGNvZGUgY2hl
Y2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCi0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2Vs
ZiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0g
ICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICBpZiAoYWN0
aW9uID09IEBzZWxlY3RvcihvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOikpIHsKLSAgICAg
ICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlm
IChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7Ci0gICAgICAg
ICAgICBCT09MIHBhbmVsU2hvd2luZyA9IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hl
Y2tlcl0gc3Vic3RpdHV0aW9uc1BhbmVsXSBpc1Zpc2libGVdOwotICAgICAgICAgICAgW21lbnVJ
dGVtIHNldFRpdGxlOnBhbmVsU2hvd2luZwotICAgICAgICAgICAgICAgID8gVUlfU1RSSU5HKCJI
aWRlIFN1YnN0aXR1dGlvbnMiLCAibWVudSBpdGVtIHRpdGxlIikKLSAgICAgICAgICAgICAgICA6
IFVJX1NUUklORygiU2hvdyBTdWJzdGl0dXRpb25zIiwgIm1lbnUgaXRlbSB0aXRsZSIpXTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICAvLyBG
SVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBi
dXQgd2UgbXVzdCB2YWxpZGF0ZSAKLSAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNhdXNlIHdl
IGltcGxlbWVudCBpdCBoZXJlLCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBiZWNhdXNl
IHRoZSBBcHBLaXQgCi0gICAgLy8gY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0b2dnbGVTbWFydEluc2VydERlbGV0ZTopKSB7Ci0g
ICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAg
ICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAg
ICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRd
ID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRp
dF07Ci0gICAgfQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1F1
b3RlU3Vic3RpdHV0aW9uOikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNN
ZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNN
ZW51SXRlbSBjbGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlz
QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3Rh
dGVdOwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0
aW9uID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOikpIHsKLSAgICAg
ICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlm
IChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAg
ICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJs
ZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2Fu
RWRpdF07Ci0gICAgfQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRp
Y0Rhc2hTdWJzdGl0dXRpb246KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChO
U01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltO
U01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYg
aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0
YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OikpIHsKLSAg
ICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAg
IGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAg
ICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50
RW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxm
IF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0
ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZD
bGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRl
OltzZWxmIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUg
OiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0j
ZW5kaWYKLSAgICAKLSAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxmIGNvcmVDb21t
YW5kQnlTZWxlY3RvcjphY3Rpb25dOwotICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpIHsK
LSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAg
ICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAg
ICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOmtpdChjb21tYW5kLnN0YXRlKCkpXTsKLSAgICAg
ICAgcmV0dXJuIGNvbW1hbmQuaXNFbmFibGVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFlFUzsK
LX0KLQotLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRV
c2VySW50ZXJmYWNlSXRlbT4paXRlbQotewotICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBkdXJp
bmcgdGVhcmRvd24gd2hlbiBfd2ViVmlldyBpcyBuaWwuIFJldHVybiBOTyB3aGVuIHRoaXMgaGFw
cGVucywgYmVjYXVzZSBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4KLSAgICAvLyBhc3N1
bWVzIHRoZSBXZWJWSWV3IGlzIG5vbi1uaWwuCi0gICAgaWYgKCFbc2VsZiBfd2ViVmlld10pCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICBCT09MIHJlc3VsdCA9IFtzZWxmIHZhbGlkYXRlVXNlcklu
dGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdhdGU6aXRlbV07Ci0gICAgcmV0dXJuIENhbGxVSURlbGVn
YXRlUmV0dXJuaW5nQm9vbGVhbihyZXN1bHQsIFtzZWxmIF93ZWJWaWV3XSwgQHNlbGVjdG9yKHdl
YlZpZXc6dmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTpkZWZhdWx0VmFsaWRhdGlvbjopLCBpdGVt
LCByZXN1bHQpOwotfQotCi0tIChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgotewotICAgIC8v
IERvbid0IGFjY2VwdCBmaXJzdCByZXNwb25kZXIgd2hlbiB3ZSBmaXJzdCBjbGljayBvbiB0aGlz
IHZpZXcuCi0gICAgLy8gV2UgaGF2ZSB0byBwYXNzIHRoZSBldmVudCBkb3duIHRocm91Z2ggV2Vi
Q29yZSBmaXJzdCB0byBiZSBzdXJlIHdlIGRvbid0IGhpdCBhIHN1YnZpZXcuCi0gICAgLy8gRG8g
YWNjZXB0IGZpcnN0IHJlc3BvbmRlciBhdCBhbnkgb3RoZXIgdGltZSwgZm9yIGV4YW1wbGUgZnJv
bSBrZXlib2FyZCBldmVudHMsCi0gICAgLy8gb3IgZnJvbSBjYWxscyBiYWNrIGZyb20gV2ViQ29y
ZSBvbmNlIHdlIGJlZ2luIG1vdXNlLWRvd24gZXZlbnQgaGFuZGxpbmcuCi0gICAgTlNFdmVudCAq
ZXZlbnQgPSBbTlNBcHAgY3VycmVudEV2ZW50XTsKLSAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5T
TGVmdE1vdXNlRG93bgotICAgICAgICAgICAgJiYgIV9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93
bkV2ZW50Ci0gICAgICAgICAgICAmJiBOU1BvaW50SW5SZWN0KFtldmVudCBsb2NhdGlvbkluV2lu
ZG93XSwgW3NlbGYgY29udmVydFJlY3Q6W3NlbGYgdmlzaWJsZVJlY3RdIHRvVmlldzpuaWxdKSkg
ewotICAgICAgICByZXR1cm4gTk87Ci0gICAgfQotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKEJP
T0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24KLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBoZWxw
cyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgV2ViSFRNTFZpZXcgc2hvdWxkIG1haW50YWluCi0g
ICAgLy8gYW4gaW5hY3RpdmUgc2VsZWN0aW9uIHdoZW4gaXQncyBub3QgZmlyc3QgcmVzcG9uZGVy
LgotICAgIC8vIFRyYWRpdGlvbmFsbHksIHRoZXNlIHZpZXdzIGhhdmUgbm90IG1haW50YWluZWQg
c3VjaCBzZWxlY3Rpb25zLAotICAgIC8vIGNsZWFyaW5nIHRoZW0gd2hlbiB0aGUgdmlldyB3YXMg
bm90IGZpcnN0IHJlc3BvbmRlci4gSG93ZXZlciwKLSAgICAvLyB0byBmaXggYnVncyBsaWtlIHRo
aXMgb25lOgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8zNjcyMDg4PjogIkVkaXRhYmxlIFdlYlZp
ZXdzIHNob3VsZCBtYWludGFpbiBhIHNlbGVjdGlvbiBldmVuIAotICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdoZW4gdGhleSdyZSBub3QgZmlyc3RSZXNwb25kZXIiCi0gICAgLy8g
aXQgd2FzIGRlY2lkZWQgdG8gYWRkIGEgc3dpdGNoIHRvIGFjdCBtb3JlIGxpa2UgYW4gTlNUZXh0
Vmlldy4KLQotICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIG1haW50YWluc0luYWN0aXZlU2VsZWN0
aW9uXSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIC8vIFByZWRpY3QgdGhlIGNhc2Ugd2hl
cmUgd2UgYXJlIGxvc2luZyBmaXJzdCByZXNwb25kZXIgc3RhdHVzIG9ubHkgdG8KLSAgICAvLyBn
YWluIGl0IGJhY2sgYWdhaW4uIFdhbnQgdG8ga2VlcCB0aGUgc2VsZWN0aW9uIGluIHRoYXQgY2Fz
ZS4KLSAgICBpZCBuZXh0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX25ld0ZpcnN0UmVzcG9u
ZGVyQWZ0ZXJSZXNpZ25pbmddOwotICAgIGlmIChbbmV4dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNz
OltOU1Njcm9sbFZpZXcgY2xhc3NdXSkgewotICAgICAgICBpZCBjb250ZW50VmlldyA9IFtuZXh0
UmVzcG9uZGVyIGNvbnRlbnRWaWV3XTsKLSAgICAgICAgaWYgKGNvbnRlbnRWaWV3KQotICAgICAg
ICAgICAgbmV4dFJlc3BvbmRlciA9IGNvbnRlbnRWaWV3OwotICAgIH0KLSAgICBpZiAoW25leHRS
ZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNDbGlwVmlldyBjbGFzc11dKSB7Ci0gICAgICAgIGlk
IGRvY3VtZW50VmlldyA9IFtuZXh0UmVzcG9uZGVyIGRvY3VtZW50Vmlld107Ci0gICAgICAgIGlm
IChkb2N1bWVudFZpZXcpCi0gICAgICAgICAgICBuZXh0UmVzcG9uZGVyID0gZG9jdW1lbnRWaWV3
OwotICAgIH0KLSAgICBpZiAobmV4dFJlc3BvbmRlciA9PSBzZWxmKQotICAgICAgICByZXR1cm4g
WUVTOwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
Ym9vbCBzZWxlY3Rpb25Jc0VkaXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCktPmlzQ29udGVudEVkaXRhYmxlKCk7Ci0gICAgYm9vbCBuZXh0UmVzcG9uZGVySXNJbldl
YlZpZXcgPSBbbmV4dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXQotICAg
ICAgICAmJiBbbmV4dFJlc3BvbmRlciBpc0Rlc2NlbmRhbnRPZjpbW1tzZWxmIF93ZWJWaWV3XSBt
YWluRnJhbWVdIGZyYW1lVmlld11dOwotCi0gICAgcmV0dXJuIHNlbGVjdGlvbklzRWRpdGFibGUg
JiYgbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3OwotfQotCi0tICh2b2lkKWFkZE1vdXNlTW92ZWRP
YnNlcnZlcgotewotICAgIGlmICghX3ByaXZhdGUtPmRhdGFTb3VyY2UgfHwgIVtzZWxmIF9pc1Rv
cEhUTUxWaWV3XSB8fCBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFVubGVzcyB0aGUgRGFzaGJvYXJkIGFza3MgdXMg
dG8gZG8gdGhpcyBmb3IgYWxsIHdpbmRvd3MsIGtlZXAgYW4gb2JzZXJ2ZXIgZ29pbmcgb25seSBm
b3IgdGhlIGtleSB3aW5kb3cuCi0gICAgaWYgKCEoW1tzZWxmIHdpbmRvd10gaXNLZXlXaW5kb3dd
IAotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICAgICAgICAgIHx8IFtbc2VsZiBf
d2ViVmlld10gX2Rhc2hib2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzU2Vu
ZE1vdXNlRXZlbnRzVG9BbGxXaW5kb3dzXQotI2VuZGlmCi0gICAgICAgICkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2Jz
ZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IobW91c2VNb3ZlZE5vdGlmaWNhdGlvbjopCi0g
ICAgICAgIG5hbWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om5pbF07Ci0gICAg
W3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91
c2VNb3ZlZE5vdGlmaWNhdGlvbnMgPSB0cnVlOwotfQotCi0tICh2b2lkKXJlbW92ZU1vdXNlTW92
ZWRPYnNlcnZlcgotewotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICAvLyBEb24n
dCByZW1vdmUgdGhlIG9ic2VydmVyIGlmIHdlJ3JlIHJ1bm5pbmcgdGhlIERhc2hib2FyZC4KLSAg
ICBpZiAoW1tzZWxmIF93ZWJWaWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVo
YXZpb3JBbHdheXNTZW5kTW91c2VFdmVudHNUb0FsbFdpbmRvd3NdKQotICAgICAgICByZXR1cm47
Ci0jZW5kaWYKLQotICAgIFtbc2VsZiBfd2ViVmlld10gX21vdXNlRGlkTW92ZU92ZXJFbGVtZW50
Om5pbCBtb2RpZmllckZsYWdzOjBdOwotICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2
ZXJVbmNvbmRpdGlvbmFsbHldOwotfQotCi0tICh2b2lkKWFkZFN1cGVydmlld09ic2VydmVycwot
ewotICAgIGlmIChfcHJpdmF0ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBlcnZpZXdd
OwotICAgIGlmICghc3VwZXJ2aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgTlNOb3RpZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtO
U05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXTsKLSAgICBbbm90aWZpY2F0aW9uQ2Vu
dGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9mcmFtZU9yQm91bmRzQ2hh
bmdlZCkgbmFtZTpOU1ZpZXdGcmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2
aWV3XTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6
QHNlbGVjdG9yKF9mcmFtZU9yQm91bmRzQ2hhbmdlZCkgbmFtZTpOU1ZpZXdCb3VuZHNEaWRDaGFu
Z2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107Ci0gICAgCi0gICAgLy8gSW4gYWRkaXRp
b24gdG8gcmVnaXN0ZXJpbmcgZm9yIGZyYW1lL2JvdW5kcyBjaGFuZ2Ugbm90aWZpY2F0aW9ucywg
Y2FsbCAtX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkLgotICAgIC8vIEl0IHdpbGwgY2hlY2sgdGhlIGN1
cnJlbnQgc2Nyb2xsIGFnYWluc3QgdGhlIHByZXZpb3VzIGxheW91dCdzIHNjcm9sbC4gIFdlIG5l
ZWQgdG8KLSAgICAvLyBkbyB0aGlzIGhlcmUgdG8gY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgdGhlIFdl
YlZpZXcgaXMgbGFpZCBvdXQgYXQgb25lIHNpemUsIHJlbW92ZWQgZnJvbSBpdHMKLSAgICAvLyB3
aW5kb3csIHJlc2l6ZWQsIGFuZCBpbnNlcnRlZCBpbnRvIGFub3RoZXIgd2luZG93LiAgT3VyIGZy
YW1lL2JvdW5kcyBjaGFuZ2VkIG5vdGlmaWNhdGlvbnMKLSAgICAvLyB3aWxsIG5vdCBiZSBzZW50
IGluIHRoYXQgc2l0dWF0aW9uLCBzaW5jZSB3ZSBvbmx5IHdhdGNoIGZvciBjaGFuZ2VzIHdoaWxl
IGluIHRoZSB2aWV3IGhpZXJhcmNoeS4KLSAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRd
OwotICAgIAotICAgIF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0g
dHJ1ZTsKLX0KLQotLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBpZiAoX3ByaXZh
dGUtPm9ic2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBpZiAoIXdpbmRvdykK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmlj
YXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07Ci0gICAg
W25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3
aW5kb3dEaWRCZWNvbWVLZXk6KSBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9u
IG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBz
ZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93RGlkUmVzaWduS2V5OikgbmFtZTpOU1dpbmRvd0RpZFJl
c2lnbktleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0aW9uQ2VudGVy
IGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd1dpbGxDbG9zZTopIG5h
bWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107Ci0gICAgW25v
dGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5k
b3dXaWxsT3JkZXJPblNjcmVlbjopIG5hbWU6V0tXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlm
aWNhdGlvbigpIG9iamVjdDp3aW5kb3ddOwotICAgIAotICAgIF9wcml2YXRlLT5vYnNlcnZpbmdX
aW5kb3dOb3RpZmljYXRpb25zID0gdHJ1ZTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1N1
cGVydmlldzooTlNWaWV3ICopbmV3U3VwZXJ2aWV3Ci17Ci0gICAgW3NlbGYgX3JlbW92ZVN1cGVy
dmlld09ic2VydmVyc107Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldwotewot
ICAgIGlmIChbc2VsZiBzdXBlcnZpZXddICE9IG5pbCkKLSAgICAgICAgW3NlbGYgYWRkU3VwZXJ2
aWV3T2JzZXJ2ZXJzXTsKLX0KLQotc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVT
dGF0ZVRpbWVyQ2FsbGJhY2soQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQgKmluZm8pCi17
Ci0gICAgV2ViSFRNTFZpZXcgKnZpZXcgPSAoV2ViSFRNTFZpZXcgKilpbmZvOwotICAgIFt2aWV3
IF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOwotfQotCi0tICh2b2lkKXZpZXdXaWxsTW92
ZVRvV2luZG93OihOU1dpbmRvdyAqKXdpbmRvdwotewotICAgIC8vIERvbid0IGRvIGFueXRoaW5n
IGlmIHdlIGFyZW4ndCBpbml0aWFsaXplZC4gIFRoaXMgaGFwcGVucwotICAgIC8vIHdoZW4gZGVj
b2RpbmcgYSBXZWJWaWV3LiAgV2hlbiBXZWJWaWV3cyBhcmUgZGVjb2RlZCB0aGVpciBzdWJ2aWV3
cwotICAgIC8vIGFyZSBjcmVhdGVkIGJ5IGluaXRXaXRoQ29kZXI6IGFuZCBzbyB3b24ndCBiZSBu
b3JtYWxseQotICAgIC8vIGluaXRpYWxpemVkLiAgVGhlIHN0dWIgdmlld3MgYXJlIGRpc2NhcmRl
ZCBieSBXZWJWaWV3LgotICAgIGlmICghX3ByaXZhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIEZJWE1FOiBTb21lIG9mIHRoZXNlIGNhbGxzIG1heSBub3Qgd29yayBiZWNhdXNlIHRoaXMg
dmlldyBtYXkgYmUgYWxyZWFkeSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcuCi0gICAgW3Nl
bGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07Ci0gICAgW3NlbGYg
X3JlbW92ZVdpbmRvd09ic2VydmVyc107Ci0gICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2Vy
dmVyc107Ci0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKLSAgICBbc2Vs
ZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOwotICAgIAotICAgIFtb
c2VsZiBfcGx1Z2luQ29udHJvbGxlcl0gc3RvcEFsbFBsdWdpbnNdOwotfQotCi0tICh2b2lkKXZp
ZXdEaWRNb3ZlVG9XaW5kb3cKLXsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBhcmVu
J3QgaW5pdGlhbGl6ZWQuICBUaGlzIGhhcHBlbnMKLSAgICAvLyB3aGVuIGRlY29kaW5nIGEgV2Vi
Vmlldy4gIFdoZW4gV2ViVmlld3MgYXJlIGRlY29kZWQgdGhlaXIgc3Vidmlld3MKLSAgICAvLyBh
cmUgY3JlYXRlZCBieSBpbml0V2l0aENvZGVyOiBhbmQgc28gd29uJ3QgYmUgbm9ybWFsbHkKLSAg
ICAvLyBpbml0aWFsaXplZC4gIFRoZSBzdHViIHZpZXdzIGFyZSBkaXNjYXJkZWQgYnkgV2ViVmll
dy4KLSAgICBpZiAoIV9wcml2YXRlIHx8IF9wcml2YXRlLT5jbG9zZWQpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwotICAgIGlmIChb
c2VsZiB3aW5kb3ddKSB7Ci0gICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBb
W3NlbGYgc3VwZXJ2aWV3XSBib3VuZHNdLm9yaWdpbjsKLSAgICAgICAgW3NlbGYgYWRkV2luZG93
T2JzZXJ2ZXJzXTsKLSAgICAgICAgW3NlbGYgYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKLSAgICAg
ICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKLQotICAgICAgICAvLyBTY2hlZHVsZSB0
aGlzIHVwZGF0ZSwgcmF0aGVyIHRoYW4gbWFraW5nIHRoZSBjYWxsIHJpZ2h0IG5vdy4KLSAgICAg
ICAgLy8gVGhlIHJlYXNvbiBpcyB0aGF0IHBsYWNpbmcgdGhlIGNhcmV0IGluIHRoZSBqdXN0LWlu
c3RhbGxlZCB2aWV3IHJlcXVpcmVzCi0gICAgICAgIC8vIHRoZSBIVE1ML1hNTCBkb2N1bWVudCB0
byBiZSBhdmFpbGFibGUgb24gdGhlIFdlYkNvcmUgc2lkZSwgYnV0IGl0IGlzIG5vdAotICAgICAg
ICAvLyBhdCB0aGUgdGltZSB0aGlzIGNvZGUgaXMgcnVubmluZy4gSG93ZXZlciwgaXQgd2lsbCBi
ZSB0aGVyZSBvbiB0aGUgbmV4dAotICAgICAgICAvLyBjcmFuayBvZiB0aGUgcnVuIGxvb3AuIERv
aW5nIHRoaXMgaGVscHMgdG8gbWFrZSBhIGJsaW5raW5nIGNhcmV0IGFwcGVhciAKLSAgICAgICAg
Ly8gaW4gYSBuZXcsIGVtcHR5IHdpbmRvdyAiYXV0b21hdGljIi4KLSAgICAgICAgaWYgKCFfcHJp
dmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpIHsKLSAgICAgICAgICAgIENG
UnVuTG9vcFRpbWVyQ29udGV4dCBjb250ZXh0ID0geyAwLCBzZWxmLCBOVUxMLCBOVUxMLCBOVUxM
IH07Ci0gICAgICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGlt
ZXIgPSBDRlJ1bkxvb3BUaW1lckNyZWF0ZShOVUxMLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQo
KSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVy
Q2FsbGJhY2ssICZjb250ZXh0KTsKLSAgICAgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVu
TG9vcEdldEN1cnJlbnQoKSwgX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRp
bWVyLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIHN0YXJ0QWxsUGx1Z2luc107Ci0KLSAgICAgICAg
X3ByaXZhdGUtPmxhc3RTY3JvbGxQb3NpdGlvbiA9IE5TWmVyb1BvaW50OwotICAgIH0KLX0KLQot
LSAodm9pZCl2aWV3V2lsbE1vdmVUb0hvc3RXaW5kb3c6KE5TV2luZG93ICopaG9zdFdpbmRvdwot
ewotICAgIFtbc2VsZiBzdWJ2aWV3c10gX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0
b3I6QHNlbGVjdG9yKHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzopIHdpdGhPYmplY3Q6aG9zdFdp
bmRvd107Ci19Ci0KLS0gKHZvaWQpdmlld0RpZE1vdmVUb0hvc3RXaW5kb3cKLXsKLSAgICBbW3Nl
bGYgc3Vidmlld3NdIF93ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rv
cih2aWV3RGlkTW92ZVRvSG9zdFdpbmRvdykgd2l0aE9iamVjdDpuaWxdOwotfQotCi0KLS0gKHZv
aWQpYWRkU3VidmlldzooTlNWaWV3ICopdmlldwotewotICAgIFtzdXBlciBhZGRTdWJ2aWV3OnZp
ZXddOwotCi0gICAgaWYgKFtXZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzp2aWV3XSkK
LSAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBhZGRQbHVnaW46dmlld107Ci19Ci0K
LS0gKHZvaWQpd2lsbFJlbW92ZVN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICBpZiAo
W1dlYlBsdWdpbkNvbnRyb2xsZXIgaXNQbHVnSW5WaWV3OnN1YnZpZXddKQotICAgICAgICBbW3Nl
bGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lQbHVnaW46c3Vidmlld107Ci0KLSAgICBbc3Vw
ZXIgd2lsbFJlbW92ZVN1YnZpZXc6c3Vidmlld107Ci19Ci0KLS0gKHZvaWQpcmVhcHBseVN0eWxl
cwotewotICAgIGlmICghX3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotI2lmZGVmIExPR19USU1FUwotICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlmCi0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcg
PSBjb3JlRnJhbWUtPnZpZXcoKSkKLSAgICAgICAgICAgIGNvcmVWaWV3LT5zZXRNZWRpYVR5cGUo
X3ByaXZhdGUtPnByaW50aW5nID8gInByaW50IiA6ICJzY3JlZW4iKTsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGRv
Y3VtZW50LT5zZXRQcmludGluZyhfcHJpdmF0ZS0+cHJpbnRpbmcpOwotICAgICAgICBjb3JlRnJh
bWUtPnJlYXBwbHlTdHlsZXMoKTsKLSAgICB9Ci0gICAgCi0jaWZkZWYgTE9HX1RJTUVTICAgICAg
ICAKLSAgICBkb3VibGUgdGhpc1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0
YXJ0OwotICAgIExPRyhUaW1pbmcsICIlcyBhcHBseSBzdHlsZSBzZWNvbmRzID0gJWYiLCBbc2Vs
ZiBVUkxdLCB0aGlzVGltZSk7Ci0jZW5kaWYKLQotICAgIF9wcml2YXRlLT5uZWVkc1RvQXBwbHlT
dHlsZXMgPSBOTzsKLX0KLQotLy8gRG8gYSBsYXlvdXQsIGJ1dCBzZXQgdXAgYSBuZXcgZml4ZWQg
d2lkdGggZm9yIHRoZSBwdXJwb3NlcyBvZiBkb2luZyBwcmludGluZyBsYXlvdXQuCi0vLyBtaW5Q
YWdlV2lkdGg9PTAgaW1wbGllcyBhIG5vbi1wcmludGluZyBsYXlvdXQKLS0gKHZvaWQpbGF5b3V0
VG9NaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDoo
ZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdGluZ1ZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXpl
Ci17Ci0gICAgW3NlbGYgcmVhcHBseVN0eWxlc107Ci0gICAgCi0gICAgaWYgKCFbc2VsZiBfbmVl
ZHNMYXlvdXRdKQotICAgICAgICByZXR1cm47Ci0KLSNpZmRlZiBMT0dfVElNRVMgICAgICAgIAot
ICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlmCi0K
LSAgICBMT0coVmlldywgIiVAIGRvaW5nIGxheW91dCIsIHNlbGYpOwotCi0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52
aWV3KCkpIHsKLSAgICAgICAgaWYgKG1pblBhZ2VXaWR0aCA+IDAuMCkKLSAgICAgICAgICAgIGNv
cmVWaWV3LT5mb3JjZUxheW91dFdpdGhQYWdlV2lkdGhSYW5nZShtaW5QYWdlV2lkdGgsIG1heFBh
Z2VXaWR0aCwgYWRqdXN0Vmlld1NpemUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNv
cmVWaWV3LT5mb3JjZUxheW91dCghYWRqdXN0Vmlld1NpemUpOwotICAgICAgICAgICAgaWYgKGFk
anVzdFZpZXdTaXplKQotICAgICAgICAgICAgICAgIGNvcmVWaWV3LT5hZGp1c3RWaWV3U2l6ZSgp
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotI2lmZGVmIExPR19USU1FUyAgICAgICAgCi0gICAg
ZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAg
ICBMT0coVGltaW5nLCAiJXMgbGF5b3V0IHNlY29uZHMgPSAlZiIsIFtzZWxmIFVSTF0sIHRoaXNU
aW1lKTsKLSNlbmRpZgotfQotCi0tICh2b2lkKWxheW91dAotewotICAgIFtzZWxmIGxheW91dFRv
TWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RpbmdWaWV3
U2l6ZTpOT107Ci19Ci0KLS8vIERlbGl2ZXIgbW91c2V1cCBldmVudHMgdG8gdGhlIERPTSBmb3Ig
YnV0dG9uIDIuCi0tICh2b2lkKXJpZ2h0TW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAg
Ly8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHdlIHJ1biBhIG5lc3RlZCBldmVudCBsb29wIHRo
ZSBldmVudCB3aWxsIGJlIHJlbGVhc2VkLgotICAgIC8vIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nIHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBsYXRlciBoZXJl
IG9yCi0gICAgLy8gaW5zaWRlIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRv
cmVsZWFzZV07Ci0KLSAgICBbc3VwZXIgcmlnaHRNb3VzZVVwOmV2ZW50XTsKLQotICAgIGlmIChG
cmFtZSogY29yZWZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZWZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+bW91c2VVcChldmVudCk7Ci19Ci0KLS0gKE5TTWVudSAqKW1lbnVG
b3JFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0
IGlmIHdlIHJ1biBhIG5lc3RlZCBldmVudCBsb29wIHRoZSBldmVudCB3aWxsIGJlIHJlbGVhc2Vk
LgotICAgIC8vIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nIHByZXZlbnRzIHRoYXQg
ZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBsYXRlciBoZXJlIG9yCi0gICAgLy8gaW5zaWRlIEFwcEtp
dCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBbX3ByaXZh
dGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0K
LSAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
aWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBQYWdlKiBwYWdlID0g
Y29yZUZyYW1lLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgLy8gTWF0Y2ggYmVoYXZpb3Igb2Ygb3RoZXIgYnJvd3NlcnMgYnkgc2VuZGluZyBhIG1v
dXNlZG93biBldmVudCBmb3IgcmlnaHQgY2xpY2tzLgotICAgIF9wcml2YXRlLT5oYW5kbGluZ01v
dXNlRG93bkV2ZW50ID0gWUVTOwotICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5j
bGVhckNvbnRleHRNZW51KCk7Ci0gICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VE
b3duKGV2ZW50KTsKLSAgICBCT09MIGhhbmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwot
ICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gTk87Ci0KLSAgICBpZiAoIWhh
bmRsZWRFdmVudCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIFJlLWdldCBwYWdlLCBz
aW5jZSBpdCBtaWdodCBoYXZlIGdvbmUgYXdheSBkdXJpbmcgZXZlbnQgaGFuZGxpbmcuCi0gICAg
cGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKLQotICAgIENvbnRleHRNZW51KiBjb3JlTWVudSA9IHBhZ2UtPmNvbnRleHRNZW51Q29u
dHJvbGxlcigpLT5jb250ZXh0TWVudSgpOwotICAgIGlmICghY29yZU1lbnUpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBOU0FycmF5KiBtZW51SXRlbXMgPSBjb3JlTWVudS0+cGxhdGZvcm1E
ZXNjcmlwdGlvbigpOwotICAgIGlmICghbWVudUl0ZW1zKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgTlNVSW50ZWdlciBjb3VudCA9IFttZW51SXRlbXMgY291bnRdOwotICAgIGlmICghY291
bnQpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBOU01lbnUqIG1lbnUgPSBbW1tOU01lbnUg
YWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICBbbWVudSBhZGRJdGVtOlttZW51SXRlbXMgb2JqZWN0QXRJ
bmRleDppXV07Ci0gICAgcmV0dXJuIG1lbnU7Ci19Ci0KLS0gKEJPT0wpc2VhcmNoRm9yOihOU1N0
cmluZyAqKXN0cmluZyBkaXJlY3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09M
KWNhc2VGbGFnIHdyYXA6KEJPT0wpd3JhcEZsYWcKLXsKLSAgICByZXR1cm4gW3NlbGYgc2VhcmNo
Rm9yOnN0cmluZyBkaXJlY3Rpb246Zm9yd2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6
d3JhcEZsYWcgc3RhcnRJblNlbGVjdGlvbjpOT107Ci19Ci0KLS0gKHZvaWQpY2xlYXJGb2N1cwot
ewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICgh
Y29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29y
ZUZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUoMCk7Ci19Ci0KLS0gKEJPT0wpaXNP
cGFxdWUKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdOwot
fQotCi0tICh2b2lkKXNldE5lZWRzRGlzcGxheTooQk9PTClmbGFnCi17Ci0gICAgTE9HKFZpZXcs
ICIlQCBzZXROZWVkc0Rpc3BsYXk6JUAiLCBzZWxmLCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOwot
ICAgIFtzdXBlciBzZXROZWVkc0Rpc3BsYXk6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpc2V0TmVlZHNM
YXlvdXQ6IChCT09MKWZsYWcKLXsKLSAgICBMT0coVmlldywgIiVAIHNldE5lZWRzTGF5b3V0OiVA
Iiwgc2VsZiwgZmxhZyA/IEAiWUVTIiA6IEAiTk8iKTsKLSAgICBpZiAoIWZsYWcpCi0gICAgICAg
IHJldHVybjsgLy8gVGhlcmUncyBubyB3YXkgdG8gc2F5IHlvdSBkb24ndCBuZWVkIGEgbGF5b3V0
LgotICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZy
YW1lLT52aWV3KCkpCi0gICAgICAgICAgICB2aWV3LT5zZXROZWVkc0xheW91dCgpOwotICAgIH0K
LX0KLQotLSAodm9pZClzZXROZWVkc1RvQXBwbHlTdHlsZXM6IChCT09MKWZsYWcKLXsKLSAgICBM
T0coVmlldywgIiVAIHNldE5lZWRzVG9BcHBseVN0eWxlczolQCIsIHNlbGYsIGZsYWcgPyBAIllF
UyIgOiBAIk5PIik7Ci0gICAgX3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyA9IGZsYWc7Ci19
Ci0KLS0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0Ci17Ci0gICAgW05TR3JhcGhp
Y3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKLSAgICBOU1JlY3RDbGlwKHJlY3QpOwotICAg
ICAgICAKLSAgICBBU1NFUlQoW1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViQ2xp
cFZpZXcgY2xhc3NdXSk7Ci0KLSAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBz
ZXRBZGRpdGlvbmFsQ2xpcDpyZWN0XTsKLQotICAgIEB0cnkgewotICAgICAgICBpZiAoW3NlbGYg
X3RyYW5zcGFyZW50QmFja2dyb3VuZF0pIHsKLSAgICAgICAgICAgIFtbTlNDb2xvciBjbGVhckNv
bG9yXSBzZXRdOwotICAgICAgICAgICAgTlNSZWN0RmlsbCAocmVjdCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfZHJhd1JlY3Q6cmVjdCBjb250ZW50c09ubHk6WUVTXTsK
LQotICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotCi0gICAgICAg
IC8vIFRoaXMgaGFjayBpcyBuZWVkZWQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MDIzNTQ1Pi4gV2Ug
Y2FuIGhpdCBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIGRyYXdSZWN0IHdpbGwgYmUKLSAgICAgICAg
Ly8gY2FsbGVkIGFmdGVyIHRoZSBXZWJWaWV3IGhhcyBjbG9zZWQuIElmIHRoZSBjbGllbnQgZGlk
IG5vdCBwcm9wZXJseSBjbG9zZSB0aGUgV2ViVmlldyBhbmQgc2V0IHRoZSAKLSAgICAgICAgLy8g
VUlEZWxlZ2F0ZSB0byBuaWwsIHRoZW4gdGhlIFVJRGVsZWdhdGUgd2lsbCBiZSBzdGFsZSBhbmQg
dGhpcyBjb2RlIHdpbGwgY3Jhc2guIAotICAgICAgICBzdGF0aWMgQk9PTCB2ZXJzaW9uM09yTGF0
ZXJDbGllbnQgPSBXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lU
SE9VVF9RVUlDS0JPT0tTX1FVSVJLKTsKLSAgICAgICAgaWYgKHZlcnNpb24zT3JMYXRlckNsaWVu
dCkKLSAgICAgICAgICAgIFtbd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3
ZWJWaWV3IGRpZERyYXdSZWN0Olt3ZWJWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6c2Vs
Zl1dOwotCi0gICAgICAgIGlmIChXZWJOb2RlSGlnaGxpZ2h0ICpjdXJyZW50SGlnaGxpZ2h0ID0g
W3dlYlZpZXcgY3VycmVudE5vZGVIaWdobGlnaHRdKQotICAgICAgICAgICAgW2N1cnJlbnRIaWdo
bGlnaHQgc2V0TmVlZHNVcGRhdGVJblRhcmdldFZpZXdSZWN0OltzZWxmIGNvbnZlcnRSZWN0OnJl
Y3QgdG9WaWV3OltjdXJyZW50SGlnaGxpZ2h0IHRhcmdldFZpZXddXV07Ci0KLSAgICAgICAgWyhX
ZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07Ci0KLSAg
ICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLSAgICB9IEBj
YXRjaCAoTlNFeGNlcHRpb24gKmxvY2FsRXhjZXB0aW9uKSB7Ci0gICAgICAgIFsoV2ViQ2xpcFZp
ZXcgKilbc2VsZiBzdXBlcnZpZXddIHJlc2V0QWRkaXRpb25hbENsaXBdOwotICAgICAgICBbTlNH
cmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwotICAgICAgICBMT0dfRVJST1Io
IkV4Y2VwdGlvbiBjYXVnaHQgd2hpbGUgZHJhd2luZzogJUAiLCBsb2NhbEV4Y2VwdGlvbik7Ci0g
ICAgICAgIFtsb2NhbEV4Y2VwdGlvbiByYWlzZV07Ci0gICAgfQotfQotCi0tICh2b2lkKWRyYXdS
ZWN0OihOU1JlY3QpcmVjdAotewotICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwotICAgIExPRyhW
aWV3LCAiJUAgZHJhd2luZyIsIHNlbGYpOwotCi0gICAgY29uc3QgTlNSZWN0ICpyZWN0czsKLSAg
ICBOU0ludGVnZXIgY291bnQ7Ci0gICAgW3NlbGYgZ2V0UmVjdHNCZWluZ0RyYXduOiZyZWN0cyBj
b3VudDomY291bnRdOwotCi0gICAgQk9PTCBzdWJ2aWV3c1dlcmVTZXRBc2lkZSA9IF9wcml2YXRl
LT5zdWJ2aWV3c1NldEFzaWRlOwotICAgIGlmIChzdWJ2aWV3c1dlcmVTZXRBc2lkZSkKLSAgICAg
ICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107Ci0KLSNpZmRlZiBMT0dfVElNRVMKLSAgICBkb3Vi
bGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSNlbmRpZgotCi0gICAgaWYg
KFtbc2VsZiBfd2ViVmlld10gX211c3REcmF3VW5pb25lZFJlY3Q6cmVjdCBzaW5nbGVSZWN0czpy
ZWN0cyBjb3VudDpjb3VudF0pCi0gICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJlY3RdOwot
ICAgIGVsc2UKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAg
ICAgICAgW3NlbGYgZHJhd1NpbmdsZVJlY3Q6cmVjdHNbaV1dOwotCi0jaWZkZWYgTE9HX1RJTUVT
Ci0gICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFy
dDsKLSAgICBMT0coVGltaW5nLCAiJXMgZHJhdyBzZWNvbmRzID0gJWYiLCB3aWRnZXQtPnBhcnQo
KS0+YmFzZVVSTCgpLlVSTCgpLmxhdGluMSgpLCB0aGlzVGltZSk7Ci0jZW5kaWYKLQotICAgIGlm
IChzdWJ2aWV3c1dlcmVTZXRBc2lkZSkKLSAgICAgICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3Nd
OwotICAgICAgICAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKFtb
c2VsZiBfd2ViVmlld10gX25lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb25dKSB7Ci0g
ICAgICAgIC8vIERpc2FibGUgc2NyZWVuIHVwZGF0ZXMgc28gdGhhdCBkcmF3aW5nIGludG8gdGhl
IE5TVmlldyBhbmQKLSAgICAgICAgLy8gQ0FMYXllciB1cGRhdGVzIGFwcGVhciBvbiB0aGUgc2Ny
ZWVuIGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICAgIFtbc2VsZiB3aW5kb3ddIGRpc2FibGVTY3Jl
ZW5VcGRhdGVzVW50aWxGbHVzaF07Ci0gICAgICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKLSAg
ICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXph
dGlvbjpOT107Ci0gICAgfQotI2VuZGlmCi19Ci0KLS8vIFR1cm4gb2ZmIHRoZSBhZGRpdGlvbmFs
IGNsaXAgd2hpbGUgY29tcHV0aW5nIG91ciB2aXNpYmxlUmVjdC4KLS0gKE5TUmVjdCl2aXNpYmxl
UmVjdAotewotICAgIGlmICghKFtbc2VsZiBzdXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNs
aXBWaWV3IGNsYXNzXV0pKQotICAgICAgICByZXR1cm4gW3N1cGVyIHZpc2libGVSZWN0XTsKLSAg
ICAgICAgCi0gICAgV2ViQ2xpcFZpZXcgKmNsaXBWaWV3ID0gKFdlYkNsaXBWaWV3ICopW3NlbGYg
c3VwZXJ2aWV3XTsKLQotICAgIEJPT0wgaGFzQWRkaXRpb25hbENsaXAgPSBbY2xpcFZpZXcgaGFz
QWRkaXRpb25hbENsaXBdOwotICAgIGlmICghaGFzQWRkaXRpb25hbENsaXApIHsKLSAgICAgICAg
cmV0dXJuIFtzdXBlciB2aXNpYmxlUmVjdF07Ci0gICAgfQotICAgIAotICAgIE5TUmVjdCBhZGRp
dGlvbmFsQ2xpcCA9IFtjbGlwVmlldyBhZGRpdGlvbmFsQ2xpcF07Ci0gICAgW2NsaXBWaWV3IHJl
c2V0QWRkaXRpb25hbENsaXBdOwotICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtzdXBlciB2aXNp
YmxlUmVjdF07Ci0gICAgW2NsaXBWaWV3IHNldEFkZGl0aW9uYWxDbGlwOmFkZGl0aW9uYWxDbGlw
XTsKLSAgICByZXR1cm4gdmlzaWJsZVJlY3Q7Ci19Ci0KLS0gKEJPT0wpaXNGbGlwcGVkIAotewot
ICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlkQmVjb21lS2V5OihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsK
LSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVj
dDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBOU1dpbmRvdyAqa2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOwotCi0g
ICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddKQotICAgICAgICBbc2VsZiBhZGRNb3Vz
ZU1vdmVkT2JzZXJ2ZXJdOwotCi0gICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8
IGtleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkKLSAgICAgICAgW3Nl
bGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci19Ci0KLS0gKHZvaWQpd2luZG93RGlk
UmVzaWduS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmICghcHRo
cmVhZF9tYWluX25wKCkpIHsKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhy
ZWFkOl9jbWQgd2l0aE9iamVjdDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOU1dpbmRvdyAqZm9ybWVyS2V5V2luZG93ID0gW25v
dGlmaWNhdGlvbiBvYmplY3RdOwotCi0gICAgaWYgKGZvcm1lcktleVdpbmRvdyA9PSBbc2VsZiB3
aW5kb3ddKQotICAgICAgICBbc2VsZiByZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJdOwotCi0gICAg
aWYgKGZvcm1lcktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGZvcm1lcktleVdpbmRvdyA9
PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkgewotICAgICAgICBbc2VsZiBfdXBkYXRl
Rm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKLSAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxl
ciBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotICAgIH0KLX0KLQotLSAodm9p
ZCl3aW5kb3dXaWxsQ2xvc2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAg
aWYgKCFwdGhyZWFkX21haW5fbnAoKSkgewotICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JP
bk1haW5UaHJlYWQ6X2NtZCB3aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5P
XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xs
ZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLSAgICBbW3NlbGYgX3BsdWdp
bkNvbnRyb2xsZXJdIGRlc3Ryb3lBbGxQbHVnaW5zXTsKLX0KLQotLSAodm9pZCl3aW5kb3dXaWxs
T3JkZXJPblNjcmVlbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBpZiAo
IVtbc2VsZiBfd2ViVmlld10gc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW5dKQotICAgICAgICBb
c2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKLX0KLQotLSAodm9pZClzY3JvbGxXaGVlbDooTlNF
dmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcg
dG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBm
ZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcg
YW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRz
IHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2Rl
LgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+d2hlZWxFdmVudChldmVudCkpCi0gICAgICAgIFtzdXBlciBzY3JvbGxXaGVlbDpl
dmVudF07Ci19Ci0KLS0gKEJPT0wpX2lzU2VsZWN0aW9uRXZlbnQ6KE5TRXZlbnQgKilldmVudAot
ewotICAgIE5TUG9pbnQgcG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9u
SW5XaW5kb3ddIGZyb21WaWV3Om5pbF07Ci0gICAgcmV0dXJuIFtbW3NlbGYgZWxlbWVudEF0UG9p
bnQ6cG9pbnQgYWxsb3dTaGFkb3dDb250ZW50OllFU10gb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRJ
c1NlbGVjdGVkS2V5XSBib29sVmFsdWVdOwotfQotCi0tIChCT09MKWFjY2VwdHNGaXJzdE1vdXNl
OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9u
ZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAg
IC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFp
bmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJl
dmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0
IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIE5TVmlldyAq
aGl0VmlldyA9IFtzZWxmIF9oaXRWaWV3Rm9yRXZlbnQ6ZXZlbnRdOwotICAgIFdlYkhUTUxWaWV3
ICpoaXRIVE1MVmlldyA9IFtoaXRWaWV3IGlzS2luZE9mQ2xhc3M6W3NlbGYgY2xhc3NdXSA/IChX
ZWJIVE1MVmlldyAqKWhpdFZpZXcgOiBuaWw7Ci0gICAgCi0jaWYgRU5BQkxFKERBU0hCT0FSRF9T
VVBQT1JUKQotICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJE
YXNoYm9hcmRCZWhhdmlvckFsd2F5c0FjY2VwdHNGaXJzdE1vdXNlXSkKLSAgICAgICAgcmV0dXJu
IFlFUzsKLSNlbmRpZgotICAgIAotICAgIGlmIChoaXRIVE1MVmlldykgewotICAgICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2hp
dEhUTUxWaWV3IF9mcmFtZV0pKSB7Ci0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5zZXRBY3RpdmF0aW9uRXZlbnROdW1iZXIoW2V2ZW50IGV2ZW50TnVtYmVyXSk7Ci0gICAg
ICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKLSAgICAgICAg
ICAgIGlmIChbaGl0SFRNTFZpZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRdKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmV2ZW50TWF5U3RhcnRE
cmFnKGV2ZW50KTsKLSAgICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6
bmlsXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXR1
cm4gW2hpdFZpZXcgYWNjZXB0c0ZpcnN0TW91c2U6ZXZlbnRdOwotfQotCi0tIChCT09MKXNob3Vs
ZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdo
dCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwot
ICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBh
dXRvcmVsZWFzZV07Ci0KLSAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbc2VsZiBfaGl0Vmlld0ZvckV2
ZW50OmV2ZW50XTsKLSAgICBXZWJIVE1MVmlldyAqaGl0SFRNTFZpZXcgPSBbaGl0VmlldyBpc0tp
bmRPZkNsYXNzOltzZWxmIGNsYXNzXV0gPyAoV2ViSFRNTFZpZXcgKiloaXRWaWV3IDogbmlsOwot
ICAgIGlmIChoaXRIVE1MVmlldykgewotICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAg
ICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50XSkKLSAgICAgICAg
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbaGl0SFRNTFZpZXcgX2ZyYW1lXSkpIHsK
LSAgICAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5ldmVu
dE1heVN0YXJ0RHJhZyhldmVudCk7Ci0gICAgICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRN
b3VzZURvd25FdmVudDpuaWxdOwotICAgICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSAgICByZXR1cm4gW2hpdFZpZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0Zv
ckV2ZW50OmV2ZW50XTsKLX0KLQotLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAot
ewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQg
d2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcg
ZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9y
ZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1
c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50
IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBwcm90
ZWN0b3IgPSBzZWxmOwotICAgIGlmIChbW3NlbGYgaW5wdXRDb250ZXh0XSB3YW50c1RvSGFuZGxl
TW91c2VFdmVudHNdICYmIFtbc2VsZiBpbnB1dENvbnRleHRdIGhhbmRsZU1vdXNlRXZlbnQ6ZXZl
bnRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25F
dmVudCA9IFlFUzsKLQotICAgIC8vIFJlY29yZCB0aGUgbW91c2UgZG93biBwb3NpdGlvbiBzbyB3
ZSBjYW4gZGV0ZXJtaW5lIGRyYWcgaHlzdGVyZXNpcy4KLSAgICBbc2VsZiBfc2V0TW91c2VEb3du
RXZlbnQ6ZXZlbnRdOwotCi0gICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIg
PSBbTlNJbnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07Ci0gICAgaWYgKFtjdXJyZW50
SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1h
bmFnZXIgaGFuZGxlTW91c2VFdmVudDpldmVudF0pCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAg
IFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0
Ok5PXTsKLQotICAgIC8vIElmIHRoZSB3ZWIgcGFnZSBoYW5kbGVzIHRoZSBjb250ZXh0IG1lbnUg
ZXZlbnQgYW5kIG1lbnVGb3JFdmVudDogcmV0dXJucyBuaWwsIHdlJ2xsIGdldCBjb250cm9sIGNs
aWNrIGV2ZW50cyBoZXJlLgotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFzcyB0aGVtIGFsb25n
IHRvIEtIVE1MIGEgc2Vjb25kIHRpbWUuCi0gICAgaWYgKCEoW2V2ZW50IG1vZGlmaWVyRmxhZ3Nd
ICYgTlNDb250cm9sS2V5TWFzaykpIHsKLSAgICAgICAgX3ByaXZhdGUtPmlnbm9yaW5nTW91c2VE
cmFnZ2VkRXZlbnRzID0gTk87Ci0KLSAgICAgICAgLy8gRG9uJ3QgZG8gYW55IG1vdXNlb3ZlciB3
aGlsZSB0aGUgbW91c2UgaXMgZG93bi4KLSAgICAgICAgW3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNl
b3ZlclRpbWVyXTsKLQotICAgICAgICAvLyBMZXQgV2ViQ29yZSBnZXQgYSBjaGFuY2UgdG8gZGVh
bCB3aXRoIHRoZSBldmVudC4gVGhpcyB3aWxsIGNhbGwgYmFjayB0byB1cwotICAgICAgICAvLyB0
byBzdGFydCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpZiBhcHByb3ByaWF0ZS4KLSAgICAgICAgaWYg
KEZyYW1lKiBjb3JlZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICAgICAgY29y
ZWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VEb3duKGV2ZW50KTsKLSAgICB9Ci0KLWRvbmU6
Ci0gICAgX3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBOTzsKLX0KLQotLSAodm9p
ZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilkcmFnSW1hZ2UKLSAgICAgICAgICAgICAgIGF0OihOU1Bv
aW50KWF0Ci0gICAgICAgICAgIG9mZnNldDooTlNTaXplKW9mZnNldAotICAgICAgICAgICAgZXZl
bnQ6KE5TRXZlbnQgKilldmVudAotICAgICAgIHBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBh
c3RlYm9hcmQKLSAgICAgICAgICAgc291cmNlOihpZClzb3VyY2UKLSAgICAgICAgc2xpZGVCYWNr
OihCT09MKXNsaWRlQmFjawotewotICAgIEFTU0VSVChzZWxmID09IFtzZWxmIF90b3BIVE1MVmll
d10pOwotICAgIFtzdXBlciBkcmFnSW1hZ2U6ZHJhZ0ltYWdlIGF0OmF0IG9mZnNldDpvZmZzZXQg
ZXZlbnQ6ZXZlbnQgcGFzdGVib2FyZDpwYXN0ZWJvYXJkIHNvdXJjZTpzb3VyY2Ugc2xpZGVCYWNr
OnNsaWRlQmFja107Ci19Ci0KLS0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQK
LXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5w
dXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOwotICAgIGlm
IChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJy
ZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBbc2VsZiByZXRhaW5dOwotCi0gICAgaWYgKCFfcHJpdmF0ZS0+aWdub3JpbmdNb3Vz
ZURyYWdnZWRFdmVudHMpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSkpIHsKLSAgICAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkK
LSAgICAgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNl
RHJhZ2dlZChldmVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBbc2VsZiByZWxlYXNlXTsK
LX0KLQotLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza0Zvckxv
Y2FsOihCT09MKWlzTG9jYWwKLXsKLSAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2Vs
ZiBfaXNUb3BIVE1MVmlld10pOwotICAgIAotICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93
ZWJWaWV3XSk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9u
Tm9uZTsKLQotICAgIC8vIEZJWE1FOiBXaHkgZG8gd2Ugb3ZlcnJpZGUgdGhlIHNvdXJjZSBwcm92
aWRlZCBvcGVyYXRpb24gaGVyZT8gIFdoeSBub3QgaW4gRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJh
ZwotICAgIGlmIChwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zb3VyY2VEcmFnT3BlcmF0aW9uKCkg
PT0gRHJhZ09wZXJhdGlvbk5vbmUpCi0gICAgICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25HZW5l
cmljIHwgTlNEcmFnT3BlcmF0aW9uQ29weTsKLQotICAgIHJldHVybiAoTlNEcmFnT3BlcmF0aW9u
KXBhZ2UtPmRyYWdDb250cm9sbGVyKCktPnNvdXJjZURyYWdPcGVyYXRpb24oKTsKLX0KLQotLSAo
dm9pZClkcmFnZ2VkSW1hZ2U6KE5TSW1hZ2UgKilpbWFnZSBtb3ZlZFRvOihOU1BvaW50KXNjcmVl
bkxvYwotewotICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxW
aWV3XSk7Ci0gICAgCi0gICAgTlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5kb3dd
IGNvbnZlcnRTY3JlZW5Ub0Jhc2U6c2NyZWVuTG9jXTsKLSAgICBOU1BvaW50IHdpbmRvd01vdXNl
TG9jID0gd2luZG93SW1hZ2VMb2M7Ci0gICAgCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKFtz
ZWxmIF93ZWJWaWV3XSkpIHsKLSAgICAgICAgRHJhZ0NvbnRyb2xsZXIqIGRyYWdDb250cm9sbGVy
ID0gcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKTsKLSAgICAgICAgTlNQb2ludCB3aW5kb3dNb3VzZUxv
YyA9IE5TTWFrZVBvaW50KHdpbmRvd0ltYWdlTG9jLnggKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09m
ZnNldCgpLngoKSwgd2luZG93SW1hZ2VMb2MueSArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0
KCkueSgpKTsKLSAgICB9Ci0gICAgCi0gICAgW1tzZWxmIF9mcmFtZV0gX2RyYWdTb3VyY2VNb3Zl
ZFRvOndpbmRvd01vdXNlTG9jXTsKLX0KLQotLSAodm9pZClkcmFnZ2VkSW1hZ2U6KE5TSW1hZ2Ug
KilhbkltYWdlIGVuZGVkQXQ6KE5TUG9pbnQpYVBvaW50IG9wZXJhdGlvbjooTlNEcmFnT3BlcmF0
aW9uKW9wZXJhdGlvbgotewotICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9p
c1RvcEhUTUxWaWV3XSk7Ci0gICAgCi0gICAgTlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2Vs
ZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6YVBvaW50XTsKLSAgICBOU1BvaW50IHdpbmRv
d01vdXNlTG9jID0gd2luZG93SW1hZ2VMb2M7Ci0gICAgCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBj
b3JlKFtzZWxmIF93ZWJWaWV3XSkpIHsKLSAgICAgICAgRHJhZ0NvbnRyb2xsZXIqIGRyYWdDb250
cm9sbGVyID0gcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKTsKLSAgICAgICAgd2luZG93TW91c2VMb2Mg
PSBOU01ha2VQb2ludCh3aW5kb3dJbWFnZUxvYy54ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZz
ZXQoKS54KCksIHdpbmRvd0ltYWdlTG9jLnkgKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgp
LnkoKSk7Ci0gICAgICAgIGRyYWdDb250cm9sbGVyLT5kcmFnRW5kZWQoKTsKLSAgICB9Ci0gICAg
Ci0gICAgW1tzZWxmIF9mcmFtZV0gX2RyYWdTb3VyY2VFbmRlZEF0OndpbmRvd01vdXNlTG9jIG9w
ZXJhdGlvbjpvcGVyYXRpb25dOwotICAgIAotICAgIC8vIFByZXZlbnQgcXVldWVkIG1vdXNlRHJh
Z2dlZCBldmVudHMgZnJvbSBjb21pbmcgYWZ0ZXIgdGhlIGRyYWcgYW5kIGZha2UgbW91c2VVcCBl
dmVudC4KLSAgICBfcHJpdmF0ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBZRVM7Ci0g
ICAgCi0gICAgLy8gT25jZSB0aGUgZHJhZ2dpbmcgbWFjaGluZXJ5IGtpY2tzIGluLCB3ZSBubyBs
b25nZXIgZ2V0IG1vdXNlIGRyYWdzIG9yIHRoZSB1cCBldmVudC4KLSAgICAvLyBXZWJDb3JlIGV4
cGVjdHMgdG8gZ2V0IGJhbGFuY2VkIGRvd24vdXAncywgc28gd2UgbXVzdCBmYWtlIHVwIGEgbW91
c2V1cC4KLSAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5
cGU6TlNMZWZ0TW91c2VVcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbjp3aW5kb3dNb3VzZUxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJG
bGFnc10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3Rh
bXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdp
bmRvd051bWJlcl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNz
dXJlOjBdOwotICAgIFtzZWxmIG1vdXNlVXA6ZmFrZUV2ZW50XTsgLy8gVGhpcyB3aWxsIGFsc28g
dXBkYXRlIHRoZSBtb3VzZW92ZXIgc3RhdGUuCi19Ci0KLS0gKE5TQXJyYXkgKiluYW1lc09mUHJv
bWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9uOihOU1VSTCAqKWRyb3BEZXN0aW5hdGlvbgot
ewotICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBuaWw7Ci0gICAgTlNVUkwgKmRyYWdnaW5n
SW1hZ2VVUkwgPSBuaWw7Ci0gICAgCi0gICAgaWYgKFdlYkNvcmU6OkNhY2hlZEltYWdlKiB0aWZm
UmVzb3VyY2UgPSBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0pIHsKLSAgICAgICAg
Ci0gICAgICAgIFNoYXJlZEJ1ZmZlciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmVzb3Vy
Y2UqPih0aWZmUmVzb3VyY2UpLT5kYXRhKCk7Ci0gICAgICAgIGlmICghYnVmZmVyKQotICAgICAg
ICAgICAgZ290byBub1Byb21pc2VkRGF0YTsKLSAgICAgICAgCi0gICAgICAgIE5TRGF0YSAqZGF0
YSA9IGJ1ZmZlci0+Y3JlYXRlTlNEYXRhKCk7Ci0gICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3Bv
bnNlID0gdGlmZlJlc291cmNlLT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKTsKLSAgICAgICAg
ZHJhZ2dpbmdJbWFnZVVSTCA9IFtyZXNwb25zZSBVUkxdOwotICAgICAgICB3cmFwcGVyID0gW1tb
TlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdIGF1
dG9yZWxlYXNlXTsKLSAgICAgICAgTlNTdHJpbmcqIGZpbGVuYW1lID0gW3Jlc3BvbnNlIHN1Z2dl
c3RlZEZpbGVuYW1lXTsKLSAgICAgICAgTlNTdHJpbmcqIHRydWVFeHRlbnNpb24odGlmZlJlc291
cmNlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpKTsKLSAgICAgICAgaWYgKCFbZmlsZW5h
bWUgbWF0Y2hlc0V4dGVuc2lvbkVxdWl2YWxlbnQ6dHJ1ZUV4dGVuc2lvbl0pCi0gICAgICAgICAg
ICBmaWxlbmFtZSA9IFtbZmlsZW5hbWUgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIuIl0gc3Ry
aW5nQnlBcHBlbmRpbmdTdHJpbmc6dHJ1ZUV4dGVuc2lvbl07Ci0gICAgICAgIFt3cmFwcGVyIHNl
dFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKLSAgICB9Ci0gICAgCi1ub1Byb21pc2VkRGF0
YToKLSAgICAKLSAgICBpZiAoIXdyYXBwZXIpIHsKLSAgICAgICAgQVNTRVJUKCFbc2VsZiBfd2Vi
Vmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKLSAgICAgICAgUGFnZSogcGFnZSA9IGNv
cmUoW3NlbGYgX3dlYlZpZXddKTsKLSAgICAgICAgCi0gICAgICAgIC8vSWYgYSBsb2FkIG9jY3Vy
cyBtaWR3YXkgdGhyb3VnaCBhIGRyYWcsIHRoZSB2aWV3IG1heSBiZSBkZXRhY2hlZCwgd2hpY2gg
Z2l2ZXMKLSAgICAgICAgLy91cyBubyBhYmlsaXR5IHRvIGdldCB0byB0aGUgb3JpZ2luYWwgUGFn
ZSwgc28gd2UgY2Fubm90IGFjY2VzcyBhbnkgZHJhZyBzdGF0ZQotICAgICAgICAvL0ZJWE1FOiBp
cyB0aGVyZSBhIHdheSB0byByZWNvdmVyPwotICAgICAgICBpZiAoIXBhZ2UpIAotICAgICAgICAg
ICAgcmV0dXJuIG5pbDsgCi0gICAgICAgIAotICAgICAgICBjb25zdCBLVVJMJiBpbWFnZVVSTCA9
IHBhZ2UtPmRyYWdDb250cm9sbGVyKCktPmRyYWdnaW5nSW1hZ2VVUkwoKTsKLSAgICAgICAgQVNT
RVJUKCFpbWFnZVVSTC5pc0VtcHR5KCkpOwotICAgICAgICBkcmFnZ2luZ0ltYWdlVVJMID0gaW1h
Z2VVUkw7Ci0KLSAgICAgICAgd3JhcHBlciA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2ZpbGVXcmFw
cGVyRm9yVVJMOmRyYWdnaW5nSW1hZ2VVUkxdOwotICAgIH0KLSAgICAKLSAgICBpZiAod3JhcHBl
ciA9PSBuaWwpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGltYWdlIGZp
bGUuIik7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IFJlcG9y
dCBhbiBlcnJvciBpZiB3ZSBmYWlsIHRvIGNyZWF0ZSBhIGZpbGUuCi0gICAgTlNTdHJpbmcgKnBh
dGggPSBbW2Ryb3BEZXN0aW5hdGlvbiBwYXRoXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6W3dyYXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdXTsKLSAgICBwYXRoID0gW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2Via2l0X3BhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRo
OnBhdGhdOwotICAgIGlmICghW3dyYXBwZXIgd3JpdGVUb0ZpbGU6cGF0aCBhdG9taWNhbGx5Ok5P
IHVwZGF0ZUZpbGVuYW1lczpZRVNdKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgaW1hZ2UgZmlsZSB2aWEgLVtOU0ZpbGVXcmFwcGVyIHdyaXRlVG9GaWxlOmF0b21pY2FsbHk6
dXBkYXRlRmlsZW5hbWVzOl0iKTsKLSAgICAKLSAgICBpZiAoZHJhZ2dpbmdJbWFnZVVSTCkKLSAg
ICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2Via2l0X3NldE1ldGFkYXRh
VVJMOltkcmFnZ2luZ0ltYWdlVVJMIGFic29sdXRlU3RyaW5nXSByZWZlcnJlcjpuaWwgYXRQYXRo
OnBhdGhdOwotICAgIAotICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3BhdGgg
bGFzdFBhdGhDb21wb25lbnRdXTsKLX0KLQotLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2
ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEg
bmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBh
dXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9t
IGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tl
dmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVu
dDpuaWxdOwotCi0gICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJ
bnB1dE1hbmFnZXIgY3VycmVudElucHV0TWFuYWdlcl07Ci0gICAgaWYgKFtjdXJyZW50SW5wdXRN
YW5hZ2VyIHdhbnRzVG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIg
aGFuZGxlTW91c2VFdmVudDpldmVudF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFtzZWxmIHJl
dGFpbl07Ci0KLSAgICBbc2VsZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07Ci0gICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKFBhZ2UqIHBhZ2Ug
PSBmcmFtZS0+cGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLT5tb3VzZVVwKGV2ZW50KTsKLSAgICB9Ci0gICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3Zl
cldpdGhGYWtlRXZlbnRdOwotCi0gICAgW3NlbGYgcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpbW91
c2VNb3ZlZE5vdGlmaWNhdGlvbjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAg
ICBbc2VsZiBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50Oltbbm90aWZpY2F0aW9uIHVzZXJJbmZv
XSBvYmplY3RGb3JLZXk6QCJOU0V2ZW50Il1dOwotfQotCi0vLyByZXR1cm5pbmcgWUVTIGZyb20g
dGhpcyBtZXRob2QgaXMgdGhlIHdheSB3ZSB0ZWxsIEFwcEtpdCB0aGF0IGl0IGlzIG9rIGZvciB0
aGlzIHZpZXcKLS8vIHRvIGJlIGluIHRoZSBrZXkgbG9vcCBldmVuIHdoZW4gInRhYiB0byBhbGwg
Y29udHJvbHMiIGlzIG5vdCBvbi4KLS0gKEJPT0wpbmVlZHNQYW5lbFRvQmVjb21lS2V5Ci17Ci0g
ICAgcmV0dXJuIFlFUzsKLX0KLQotLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBtYWtlIHN1cmUgd2Ug
ZG9uJ3QgcmV0dXJuIGFueXRoaW5nIHRocm91Z2ggdGhlIE5TVGV4dElucHV0Ci0vLyBBUEkgd2hl
biBhbiBlZGl0YWJsZSByZWdpb24gaXMgbm90IGN1cnJlbnRseSBmb2N1c2VkLgotc3RhdGljIEJP
T0wgaXNUZXh0SW5wdXQoRnJhbWUqIGNvcmVGcmFtZSkKLXsKLSAgICByZXR1cm4gY29yZUZyYW1l
ICYmICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUoKSAmJiBjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwotfQotCi1zdGF0aWMgQk9PTCBpc0luUGFzc3dv
cmRGaWVsZChGcmFtZSogY29yZUZyYW1lKQotewotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNJblBhc3N3b3JkRmllbGQoKTsKLX0KLQotLSAoQk9PTCli
ZWNvbWVGaXJzdFJlc3BvbmRlcgotewotICAgIE5TU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biA9IE5TRGlyZWN0U2VsZWN0aW9uOwotICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBfaXNQZXJm
b3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdKQotICAgICAgICBkaXJlY3Rpb24gPSBbW3NlbGYgd2lu
ZG93XSBrZXlWaWV3U2VsZWN0aW9uRGlyZWN0aW9uXTsKLQotICAgIFtzZWxmIF91cGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGVdOwotICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwotICAgIAot
ICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0ID0gaXNU
ZXh0SW5wdXQoZnJhbWUpICYmICFpc0luUGFzc3dvcmRGaWVsZChmcmFtZSk7Ci0gICAgaWYgKGV4
cG9zZUlucHV0Q29udGV4dCAhPSBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7Ci0gICAg
ICAgIF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQgPSBleHBvc2VJbnB1dENvbnRleHQ7Ci0g
ICAgICAgIFtOU0FwcCB1cGRhdGVXaW5kb3dzXTsKLSAgICB9Ci0KLSAgICBmcmFtZS0+ZWRpdG9y
KCktPnNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSh0cnVlKTsKLQotICAgIGlmIChkaXJlY3Rp
b24gPT0gTlNEaXJlY3RTZWxlY3Rpb24pCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBQYWdl
KiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBZ
RVM7Ci0KLSAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKGZyYW1l
KTsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAg
ICAgIGRvY3VtZW50LT5zZXRGb2N1c2VkTm9kZSgwKTsKLSAgICBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+c2V0SW5pdGlhbEZvY3VzKGRpcmVjdGlvbiA9PSBOU1NlbGVjdGluZ05leHQgPyBGb2N1
c0RpcmVjdGlvbkZvcndhcmQgOiBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5j
dXJyZW50S2V5Ym9hcmRFdmVudCgpLmdldCgpKTsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChC
T09MKXJlc2lnbkZpcnN0UmVzcG9uZGVyCi17Ci0gICAgQk9PTCByZXNpZ24gPSBbc3VwZXIgcmVz
aWduRmlyc3RSZXNwb25kZXJdOwotICAgIGlmIChyZXNpZ24pIHsKLSAgICAgICAgX3ByaXZhdGUt
PnJlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyID0gWUVTOwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBD
b250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIGlm
ICghW3NlbGYgbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb25dKSB7IAotICAgICAgICAgICAgW3Nl
bGYgZGVzZWxlY3RBbGxdOwotICAgICAgICAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1Bl
cmZvcm1pbmdQcm9ncmFtbWF0aWNGb2N1c10pCi0gICAgICAgICAgICAgICAgW3NlbGYgY2xlYXJG
b2N1c107Ci0gICAgICAgIH0KLSAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVT
dGF0ZV07Ci0gICAgICAgIF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9IE5POwot
ICAgIH0KLSAgICByZXR1cm4gcmVzaWduOwotfQotCi0tICh2b2lkKXNldERhdGFTb3VyY2U6KFdl
YkRhdGFTb3VyY2UgKilkYXRhU291cmNlIAotewotICAgIEFTU0VSVChkYXRhU291cmNlKTsKLSAg
ICBpZiAoX3ByaXZhdGUtPmRhdGFTb3VyY2UgIT0gZGF0YVNvdXJjZSkgewotICAgICAgICBBU1NF
UlQoIV9wcml2YXRlLT5jbG9zZWQpOwotICAgICAgICBCT09MIGhhZERhdGFTb3VyY2UgPSBfcHJp
dmF0ZS0+ZGF0YVNvdXJjZSAhPSBuaWw7Ci0KLSAgICAgICAgW2RhdGFTb3VyY2UgcmV0YWluXTsK
LSAgICAgICAgW19wcml2YXRlLT5kYXRhU291cmNlIHJlbGVhc2VdOwotICAgICAgICBfcHJpdmF0
ZS0+ZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7Ci0gICAgICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29u
dHJvbGxlciBzZXREYXRhU291cmNlOmRhdGFTb3VyY2VdOwotCi0gICAgICAgIGlmICghaGFkRGF0
YVNvdXJjZSkKLSAgICAgICAgICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNlcnZlcl07Ci0gICAg
fQotfQotCi0tICh2b2lkKWRhdGFTb3VyY2VVcGRhdGVkOihXZWJEYXRhU291cmNlICopZGF0YVNv
dXJjZQotewotfQotCi0vLyBUaGlzIGlzIGFuIG92ZXJyaWRlIG9mIGFuIE5TQ29udHJvbCBtZXRo
b2QgdGhhdCB3YW50cyB0byByZXBhaW50IHRoZSBlbnRpcmUgdmlldyB3aGVuIHRoZSB3aW5kb3cg
cmVzaWducy9iZWNvbWVzCi0vLyBrZXkuICBXZWJIVE1MVmlldyBpcyBhbiBOU0NvbnRyb2wgb25s
eSBiZWNhdXNlIGl0IGhvc3RzIE5TQ2VsbHMgdGhhdCBhcmUgcGFpbnRlZCBieSBXZWJDb3JlJ3Mg
QXF1YSB0aGVtZQotLy8gcmVuZGVyZXIgKGFuZCB0aG9zZSBjZWxscyBtdXN0IGJlIGhvc3RlZCBi
eSBhbiBlbmNsb3NpbmcgTlNDb250cm9sIGluIG9yZGVyIHRvIHBhaW50IHByb3Blcmx5KS4KLS0g
KHZvaWQpdXBkYXRlQ2VsbDooTlNDZWxsKiljZWxsCi17Ci19Ci0KLS8vIERvZXMgc2V0TmVlZHNE
aXNwbGF5Ok5PIGFzIGEgc2lkZSBlZmZlY3Qgd2hlbiBwcmludGluZyBpcyBlbmRpbmcuCi0vLyBw
YWdlV2lkdGggIT0gMCBpbXBsaWVzIHdlIHdpbGwgcmVsYXlvdXQgdG8gYSBuZXcgd2lkdGgKLS0g
KHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6KGZsb2F0
KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0
Vmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemUKLXsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBb
c2VsZiBfZnJhbWVdOwotICAgIE5TQXJyYXkgKnN1YmZyYW1lcyA9IFtmcmFtZSBjaGlsZEZyYW1l
c107Ci0gICAgdW5zaWduZWQgbiA9IFtzdWJmcmFtZXMgY291bnRdOwotICAgIHVuc2lnbmVkIGk7
Ci0gICAgZm9yIChpID0gMDsgaSAhPSBuOyArK2kpIHsKLSAgICAgICAgV2ViRnJhbWUgKnN1YmZy
YW1lID0gW3N1YmZyYW1lcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICBXZWJGcmFtZVZpZXcg
KmZyYW1lVmlldyA9IFtzdWJmcmFtZSBmcmFtZVZpZXddOwotICAgICAgICBpZiAoW1tzdWJmcmFt
ZSBfZGF0YVNvdXJjZV0gX2lzRG9jdW1lbnRIVE1MXSkgewotICAgICAgICAgICAgWyhXZWJIVE1M
VmlldyAqKVtmcmFtZVZpZXcgZG9jdW1lbnRWaWV3XSBfc2V0UHJpbnRpbmc6cHJpbnRpbmcgbWlu
aW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTph
ZGp1c3RWaWV3U2l6ZV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJpbnRpbmcgIT0g
X3ByaXZhdGUtPnByaW50aW5nKSB7Ci0gICAgICAgIFtfcHJpdmF0ZS0+cGFnZVJlY3RzIHJlbGVh
c2VdOwotICAgICAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gbmlsOwotICAgICAgICBfcHJpdmF0
ZS0+cHJpbnRpbmcgPSBwcmludGluZzsKLSAgICAgICAgaWYgKCFwcmludGluZykKLSAgICAgICAg
ICAgIF9wcml2YXRlLT5hdm9pZGluZ1ByaW50T3JwaGFuID0gTk87Ci0gICAgICAgIFtzZWxmIHNl
dE5lZWRzVG9BcHBseVN0eWxlczpZRVNdOwotICAgICAgICBbc2VsZiBzZXROZWVkc0xheW91dDpZ
RVNdOwotICAgICAgICBbc2VsZiBsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6bWluUGFnZVdpZHRo
IG1heGltdW1QYWdlV2lkdGg6bWF4UGFnZVdpZHRoIGFkanVzdGluZ1ZpZXdTaXplOmFkanVzdFZp
ZXdTaXplXTsKLSAgICAgICAgaWYgKCFwcmludGluZykgewotICAgICAgICAgICAgLy8gQ2FuJ3Qg
ZG8gdGhpcyB3aGVuIHN0YXJ0aW5nIHByaW50aW5nIG9yIG5lc3RlZCBwcmludGluZyB3b24ndCB3
b3JrLCBzZWUgMzQ5MTQyNy4KLSAgICAgICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpOT107
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS0gKEJPT0wpY2FuUHJpbnRIZWFkZXJzQW5kRm9vdGVy
cwotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY2Fz
ZSB3aGVyZSB0aGUgd2VidmlldyBpcyBlbWJlZGRlZCBpbiB0aGUgdmlldyB0aGF0J3MgYmVpbmcg
cHJpbnRlZC4KLS8vIEl0IHNob3VsZG4ndCBiZSBjYWxsZWQgd2hlbiB0aGUgd2VidmlldyBpcyBi
ZWluZyBwcmludGVkIGRpcmVjdGx5LgotLSAodm9pZClhZGp1c3RQYWdlSGVpZ2h0TmV3OihDR0Zs
b2F0ICopbmV3Qm90dG9tIHRvcDooQ0dGbG9hdClvbGRUb3AgYm90dG9tOihDR0Zsb2F0KW9sZEJv
dHRvbSBsaW1pdDooQ0dGbG9hdClib3R0b21MaW1pdAotewotICAgIC8vIFRoaXMgaGVscHMgd2hl
biB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nlc3MuCi0gICAgLy8gSWYg
dGhlIFdlYkhUTUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdp
bGwgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLgotICAgIEJPT0wgd2FzSW5QcmludGluZ01vZGUgPSBf
cHJpdmF0ZS0+cHJpbnRpbmc7Ci0gICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKLSAgICAgICAg
W3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VX
aWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLQotICAgIGZsb2F0IG5ld0JvdHRvbUZsb2F0
ID0gKm5ld0JvdHRvbTsKLSAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gY29yZShbc2VsZiBfZnJh
bWVdKS0+dmlldygpKQotICAgICAgICB2aWV3LT5hZGp1c3RQYWdlSGVpZ2h0KCZuZXdCb3R0b21G
bG9hdCwgb2xkVG9wLCBvbGRCb3R0b20sIGJvdHRvbUxpbWl0KTsKLQotI2lmZGVmIF9fTFA2NF9f
Ci0gICAgLy8gSWYgdGhlIG5ldyBib3R0b20gaXMgZXF1YWwgdG8gdGhlIG9sZCBib3R0b20gKHdo
ZW4gYm90aCBhcmUgdHJlYXRlZCBhcyBmbG9hdHMpLCB3ZSBqdXN0IGNvcHkKLSAgICAvLyBvbGRC
b3R0b20gb3ZlciB0byBuZXdCb3R0b20uIFRoaXMgcHJldmVudHMgcm91bmRpbmcgZXJyb3JzIHRo
YXQgY2FuIG9jY3VyIHdoZW4gY29udmVydGluZyBuZXdCb3R0b21GbG9hdCB0byBhIGRvdWJsZS4K
LSAgICBpZiAoZmFicygoZmxvYXQpb2xkQm90dG9tIC0gbmV3Qm90dG9tRmxvYXQpIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCkpIAotICAgICAgICAqbmV3Qm90dG9tID0g
b2xkQm90dG9tOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAqbmV3Qm90dG9tID0gbmV3Qm90
dG9tRmxvYXQ7Ci0gICAgCi0gICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkgewotICAgICAgICBO
U1ByaW50T3BlcmF0aW9uICpjdXJyZW5QcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9u
IGN1cnJlbnRPcGVyYXRpb25dOwotICAgICAgICBpZiAoY3VycmVuUHJpbnRPcGVyYXRpb24pCi0g
ICAgICAgICAgICAvLyBkZWxheSBfc2V0UHJpbnRpbmc6Tk8gdW50aWwgYmFjayB0byBtYWluIGxv
b3AgYXMgdGhpcyBtZXRob2QgbWF5IGdldCBjYWxsZWQgcmVwZWF0ZWRseQotICAgICAgICAgICAg
W3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9kZTopIHdp
dGhPYmplY3Q6Y3VycmVuUHJpbnRPcGVyYXRpb24gYWZ0ZXJEZWxheTowXTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgLy8gbm90IHN1cmUgaWYgdGhpcyBpcyBhY3R1YWxseSBldmVyIGludm9r
ZWQsIGl0IHByb2JhYmx5IHNob3VsZG4ndCBiZQotICAgICAgICAgICAgW3NlbGYgX3NldFByaW50
aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0
Vmlld1NpemU6Tk9dOwotICAgIH0KLX0KLQotLSAoZmxvYXQpX2F2YWlsYWJsZVBhcGVyV2lkdGhG
b3JQcmludE9wZXJhdGlvbjooTlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uCi17Ci0g
ICAgTlNQcmludEluZm8gKnByaW50SW5mbyA9IFtwcmludE9wZXJhdGlvbiBwcmludEluZm9dOwot
ICAgIHJldHVybiBbcHJpbnRJbmZvIHBhcGVyU2l6ZV0ud2lkdGggLSBbcHJpbnRJbmZvIGxlZnRN
YXJnaW5dIC0gW3ByaW50SW5mbyByaWdodE1hcmdpbl07Ci19Ci0KLS0gKGZsb2F0KV9zY2FsZUZh
Y3RvckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24K
LXsKLSAgICBmbG9hdCB2aWV3V2lkdGggPSBOU1dpZHRoKFtzZWxmIGJvdW5kc10pOwotICAgIGlm
ICh2aWV3V2lkdGggPCAxKSB7Ci0gICAgICAgIExPR19FUlJPUigiJUAgaGFzIG5vIHdpZHRoIHdo
ZW4gcHJpbnRpbmciLCBzZWxmKTsKLSAgICAgICAgcmV0dXJuIDEuMGY7Ci0gICAgfQotCi0gICAg
ZmxvYXQgdXNlclNjYWxlRmFjdG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJfcGFnZVNldHVwU2Nh
bGVGYWN0b3JdOwotICAgIGZsb2F0IG1heFNocmlua1RvRml0U2NhbGVGYWN0b3IgPSAxLjBmIC8g
UHJpbnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yOwotICAgIGZsb2F0IHNocmlua1RvRml0U2NhbGVG
YWN0b3IgPSBbc2VsZiBfYXZhaWxhYmxlUGFwZXJXaWR0aEZvclByaW50T3BlcmF0aW9uOnByaW50
T3BlcmF0aW9uXS92aWV3V2lkdGg7Ci0gICAgZmxvYXQgc2hyaW5rVG9Bdm9pZE9ycGhhbiA9IF9w
cml2YXRlLT5hdm9pZGluZ1ByaW50T3JwaGFuID8gKDEuMGYgLyBQcmludGluZ09ycGhhblNocmlu
a0FkanVzdG1lbnQpIDogMS4wZjsKLSAgICByZXR1cm4gdXNlclNjYWxlRmFjdG9yICogTUFYKG1h
eFNocmlua1RvRml0U2NhbGVGYWN0b3IsIHNocmlua1RvRml0U2NhbGVGYWN0b3IpICogc2hyaW5r
VG9Bdm9pZE9ycGhhbjsKLX0KLQotLy8gRklYTUUgMzQ5MTM0NDogVGhpcyBpcyBhIHNlY3JldCBB
cHBLaXQtaW50ZXJuYWwgbWV0aG9kIHRoYXQgd2UgbmVlZCB0byBvdmVycmlkZSBpbiBvcmRlcgot
Ly8gdG8gZ2V0IG91ciBzaHJpbmstdG8tZml0IHRvIHdvcmsgd2l0aCBhIGN1c3RvbSBwYWdpbmF0
aW9uIHNjaGVtZS4gV2UgY2FuIGRvIHRoaXMgYmV0dGVyCi0vLyBpZiBBcHBLaXQgbWFrZXMgaXQg
U1BJL0FQSS4KLS0gKENHRmxvYXQpX3Byb3ZpZGVUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRPcGVy
YXRpb246KE5TUHJpbnRPcGVyYXRpb24gKilwcmludE9wZXJhdGlvbiAKLXsKLSAgICByZXR1cm4g
W3NlbGYgX3NjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRpb25dOwotfQot
Ci0vLyBUaGlzIGlzIHVzZWQgZm9yIENhcmJvbiBwcmludGluZy4gQXQgc29tZSBwb2ludCB3ZSBt
aWdodCB3YW50IHRvIG1ha2UgdGhpcyBwdWJsaWMgQVBJLgotLSAodm9pZClzZXRQYWdlV2lkdGhG
b3JQcmludGluZzooZmxvYXQpcGFnZVdpZHRoCi17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOk5P
IG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1Np
emU6Tk9dOwotICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDpwYWdl
V2lkdGggbWF4aW11bVBhZ2VXaWR0aDpwYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6WUVTXTsKLX0K
LQotLSAodm9pZClfZW5kUHJpbnRNb2RlCi17Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1p
bmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6
WUVTXTsKLSAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpZRVNdOwotfQotCi0tICh2
b2lkKV9kZWxheWVkRW5kUHJpbnRNb2RlOihOU1ByaW50T3BlcmF0aW9uICopaW5pdGlhdGluZ09w
ZXJhdGlvbgotewotICAgIEFTU0VSVF9BUkcoaW5pdGlhdGluZ09wZXJhdGlvbiwgaW5pdGlhdGlu
Z09wZXJhdGlvbiAhPSBuaWwpOwotICAgIE5TUHJpbnRPcGVyYXRpb24gKmN1cnJlbnRPcGVyYXRp
b24gPSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKLSAgICBpZiAoaW5pdGlh
dGluZ09wZXJhdGlvbiA9PSBjdXJyZW50T3BlcmF0aW9uKSB7Ci0gICAgICAgIC8vIFRoZSBwcmlu
dCBvcGVyYXRpb24gaXMgc3RpbGwgdW5kZXJ3YXkuIFdlIGRvbid0IGV4cGVjdCB0aGlzIHRvIGV2
ZXIgaGFwcGVuLCBoZW5jZSB0aGUgYXNzZXJ0LCBidXQgd2UncmUKLSAgICAgICAgLy8gYmVpbmcg
ZXh0cmEgcGFyYW5vaWQgaGVyZSBzaW5jZSB0aGUgcHJpbnRpbmcgY29kZSBpcyBzbyBmcmFnaWxl
LiBEZWxheSB0aGUgY2xlYW51cAotICAgICAgICAvLyBmdXJ0aGVyLgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcihf
ZGVsYXllZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6aW5pdGlhdGluZ09wZXJhdGlvbiBhZnRl
ckRlbGF5OjBdOwotICAgIH0gZWxzZSBpZiAoW2N1cnJlbnRPcGVyYXRpb24gdmlld10gPT0gc2Vs
ZikgewotICAgICAgICAvLyBBIG5ldyBwcmludCBqb2IgaGFzIHN0YXJ0ZWQsIGJ1dCBpdCBpcyBw
cmludGluZyB0aGUgc2FtZSBXZWJIVE1MVmlldyBhZ2Fpbi4gV2UgZG9uJ3QgZXhwZWN0Ci0gICAg
ICAgIC8vIHRoaXMgdG8gZXZlciBoYXBwZW4sIGhlbmNlIHRoZSBhc3NlcnQsIGJ1dCB3ZSdyZSBi
ZWluZyBleHRyYSBwYXJhbm9pZCBoZXJlIHNpbmNlIHRoZSBwcmludGluZyBjb2RlIGlzIHNvCi0g
ICAgICAgIC8vIGZyYWdpbGUuIERvIG5vdGhpbmcsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBi
cmVhayB0aGUgcHJpbnQgam9iIGN1cnJlbnRseSBpbiBwcm9ncmVzcywgYW5kCi0gICAgICAgIC8v
IHRoZSBwcmludCBqb2IgY3VycmVudGx5IGluIHByb2dyZXNzIGlzIHJlc3BvbnNpYmxlIGZvciBp
dHMgb3duIGNsZWFudXAuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIFRoZSBwcmludCBqb2IgdGhhdCBraWNrZWQgb2ZmIHRoaXMgZGVsYXll
ZCBjYWxsIGhhcyBmaW5pc2hlZCwgYW5kIHRoaXMgdmlldyBpcyBub3QgYmVpbmcKLSAgICAgICAg
Ly8gcHJpbnRlZCBhZ2Fpbi4gV2UgZXhwZWN0IHRoYXQgbm8gb3RoZXIgcHJpbnQgam9iIGhhcyBz
dGFydGVkLiBTaW5jZSB0aGlzIGRlbGF5ZWQgY2FsbCB3YXNuJ3QKLSAgICAgICAgLy8gY2FuY2Vs
bGVkLCBiZWdpbkRvY3VtZW50IGFuZCBlbmREb2N1bWVudCBtdXN0IG5vdCBoYXZlIGJlZW4gY2Fs
bGVkLCBhbmQgd2UgbmVlZCB0byBjbGVhbiB1cAotICAgICAgICAvLyB0aGUgcHJpbnQgbW9kZSBo
ZXJlLgotICAgICAgICBBU1NFUlQoY3VycmVudE9wZXJhdGlvbiA9PSBuaWwpOwotICAgICAgICBb
c2VsZiBfZW5kUHJpbnRNb2RlXTsKLSAgICB9Ci19Ci0KLS8vIFJldHVybiB0aGUgbnVtYmVyIG9m
IHBhZ2VzIGF2YWlsYWJsZSBmb3IgcHJpbnRpbmcKLS0gKEJPT0wpa25vd3NQYWdlUmFuZ2U6KE5T
UmFuZ2VQb2ludGVyKXJhbmdlCi17Ci0gICAgLy8gTXVzdCBkbyB0aGlzIGV4cGxpY2l0IGRpc3Bs
YXkgaGVyZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHZpZXcgbWlnaHQgcmVkaXNwbGF5IHdoaWxl
IHRoZSBwcmludAotICAgIC8vIHNoZWV0IHdhcyB1cCwgdXNpbmcgcHJpbnRlciBmb250cyAoYW5k
IGxvb2tpbmcgZGlmZmVyZW50KS4KLSAgICBbc2VsZiBkaXNwbGF5SWZOZWVkZWRdOwotICAgIFtb
c2VsZiB3aW5kb3ddIHNldEF1dG9kaXNwbGF5Ok5PXTsKLSAgICAKLSAgICAvLyBJZiB3ZSBhcmUg
YSBmcmFtZXNldCBqdXN0IHByaW50IHdpdGggdGhlIGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBv
dGhlcndpc2UgcmVsYXlvdXQKLSAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHBhcGVyIHNpemUKLSAg
ICBmbG9hdCBtaW5MYXlvdXRXaWR0aCA9IDAuMGY7Ci0gICAgZmxvYXQgbWF4TGF5b3V0V2lkdGgg
PSAwLjBmOwotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkg
fHwgIWZyYW1lLT5kb2N1bWVudCgpLT5pc0ZyYW1lU2V0KCkpIHsKLSAgICAgICAgZmxvYXQgcGFw
ZXJXaWR0aCA9IFtzZWxmIF9hdmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246W05T
UHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl1dOwotICAgICAgICBtaW5MYXlvdXRXaWR0
aCA9IHBhcGVyV2lkdGggKiBQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7Ci0gICAgICAgIG1h
eExheW91dFdpZHRoID0gcGFwZXJXaWR0aCAqIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsK
LSAgICB9Ci0gICAgW3NlbGYgX3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOm1pbkxh
eW91dFdpZHRoIG1heGltdW1QYWdlV2lkdGg6bWF4TGF5b3V0V2lkdGggYWRqdXN0Vmlld1NpemU6
WUVTXTsgLy8gd2lsbCByZWxheW91dAotICAgIE5TUHJpbnRPcGVyYXRpb24gKnByaW50T3BlcmF0
aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl07Ci0gICAgLy8gQ2VydGFp
biB0eXBlcyBvZiBlcnJvcnMsIGluY2x1ZGluZyBpbnZhbGlkIHBhZ2UgcmFuZ2VzLCBjYW4gY2F1
c2UgYmVnaW5Eb2N1bWVudCBhbmQKLSAgICAvLyBlbmREb2N1bWVudCB0byBiZSBza2lwcGVkIGFm
dGVyIHdlJ3ZlIHB1dCBvdXJzZWx2ZXMgaW4gcHJpbnQgbW9kZSAoc2VlIDQxNDU5MDUpLiBJbiB0
aG9zZSBjYXNlcwotICAgIC8vIHdlIG5lZWQgdG8gZ2V0IG91dCBvZiBwcmludCBtb2RlIHdpdGhv
dXQgcmVseWluZyBvbiBhbnkgbW9yZSBjYWxsYmFja3MgZnJvbSB0aGUgcHJpbnRpbmcgbWVjaGFu
aXNtLgotICAgIC8vIElmIHdlIGdldCBhcyBmYXIgYXMgYmVnaW5Eb2N1bWVudCB3aXRob3V0IHRy
b3VibGUsIHRoZW4gdGhpcyBkZWxheWVkIHJlcXVlc3Qgd2lsbCBiZSBjYW5jZWxsZWQuCi0gICAg
Ly8gSWYgbm90IGNhbmNlbGxlZCwgdGhpcyBkZWxheWVkIGNhbGwgd2lsbCBiZSBpbnZva2VkIGlu
IHRoZSBuZXh0IHBhc3MgdGhyb3VnaCB0aGUgbWFpbiBldmVudCBsb29wLAotICAgIC8vIHdoaWNo
IGlzIGFmdGVyIGJlZ2luRG9jdW1lbnQgYW5kIGVuZERvY3VtZW50IHdvdWxkIGJlIGNhbGxlZC4K
LSAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2Rl
Oikgd2l0aE9iamVjdDpwcmludE9wZXJhdGlvbiBhZnRlckRlbGF5OjBdOwotICAgIFtbc2VsZiBf
d2ViVmlld10gX2FkanVzdFByaW50aW5nTWFyZ2luc0ZvckhlYWRlckFuZEZvb3Rlcl07Ci0gICAg
Ci0gICAgLy8gVGhlcmUgaXMgYSB0aGVvcmV0aWNhbCBjaGFuY2UgdGhhdCBzb21lb25lIGNvdWxk
IGRvIHNvbWUgZHJhd2luZyBiZXR3ZWVuIGhlcmUgYW5kIGVuZERvY3VtZW50LAotICAgIC8vIGlm
IHNvbWV0aGluZyBjYXVzZWQgc2V0TmVlZHNEaXNwbGF5IGFmdGVyIHRoaXMgcG9pbnQuIElmIHNv
LCBpdCdzIG5vdCBhIGJpZyB0cmFnZWR5LCBiZWNhdXNlCi0gICAgLy8geW91J2Qgc2ltcGx5IHNl
ZSB0aGUgcHJpbnRlciBmb250cyBvbiBzY3JlZW4uIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBk
b2VzIG5vdCBoYXBwZW4gd2l0aCBTYWZhcmkuCi0KLSAgICByYW5nZS0+bG9jYXRpb24gPSAxOwot
ICAgIGZsb2F0IHRvdGFsU2NhbGVGYWN0b3IgPSBbc2VsZiBfc2NhbGVGYWN0b3JGb3JQcmludE9w
ZXJhdGlvbjpwcmludE9wZXJhdGlvbl07Ci0gICAgZmxvYXQgdXNlclNjYWxlRmFjdG9yID0gW3By
aW50T3BlcmF0aW9uIF93ZWJfcGFnZVNldHVwU2NhbGVGYWN0b3JdOwotICAgIFtfcHJpdmF0ZS0+
cGFnZVJlY3RzIHJlbGVhc2VdOwotICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0ID0gZmxvb3JmKFtz
ZWxmIF9jYWxjdWxhdGVQcmludEhlaWdodF0vdG90YWxTY2FsZUZhY3Rvcik7Ci0gICAgTlNBcnJh
eSAqbmV3UGFnZVJlY3RzID0gW1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJp
bnRXaWR0aFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvcgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlu
dEhlaWdodDpmdWxsUGFnZUhlaWdodF07Ci0gICAgCi0gICAgLy8gQXBwS2l0IGdldHMgYWxsIG1l
c3NlZCB1cCBpZiB5b3UgZ2l2ZSBpdCBhIHplcm8tbGVuZ3RoIHBhZ2UgY291bnQgKHNlZSAzNTc2
MzM0KSwgc28gaWYgd2UKLSAgICAvLyBoaXQgdGhhdCBjYXNlIHdlJ2xsIHBhc3MgYWxvbmcgYSBk
ZWdlbmVyYXRlIDEgcGl4ZWwgc3F1YXJlIHRvIHByaW50LiBUaGlzIHdpbGwgcHJpbnQKLSAgICAv
LyBhIGJsYW5rIHBhZ2UgKHdpdGggY29ycmVjdC1sb29raW5nIGhlYWRlciBhbmQgZm9vdGVyIGlm
IHRoYXQgb3B0aW9uIGlzIG9uKSwgd2hpY2ggbWF0Y2hlcwotICAgIC8vIHRoZSBiZWhhdmlvciBv
ZiBJRSBhbmQgQ2FtaW5vIGF0IGxlYXN0LgotICAgIGlmIChbbmV3UGFnZVJlY3RzIGNvdW50XSA9
PSAwKQotICAgICAgICBuZXdQYWdlUmVjdHMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W05T
VmFsdWUgdmFsdWVXaXRoUmVjdDpOU01ha2VSZWN0KDAsIDAsIDEsIDEpXV07Ci0gICAgZWxzZSBp
ZiAoW25ld1BhZ2VSZWN0cyBjb3VudF0gPiAxKSB7Ci0gICAgICAgIC8vIElmIHRoZSBsYXN0IHBh
Z2UgaXMgYSBzaG9ydCBvcnBoYW4sIHRyeSBhZGp1c3RpbmcgdGhlIHByaW50IGhlaWdodCBzbGln
aHRseSB0byBzZWUgaWYgdGhpcyB3aWxsIHNxdWVlemUgdGhlCi0gICAgICAgIC8vIGNvbnRlbnQg
b250byBvbmUgZmV3ZXIgcGFnZS4gSWYgaXQgZG9lcywgdXNlIHRoZSBhZGp1c3RlZCBzY2FsZS4g
SWYgbm90LCB1c2UgdGhlIG9yaWdpbmFsIHNjYWxlLgotICAgICAgICBmbG9hdCBsYXN0UGFnZUhl
aWdodCA9IE5TSGVpZ2h0KFtbbmV3UGFnZVJlY3RzIGxhc3RPYmplY3RdIHJlY3RWYWx1ZV0pOwot
ICAgICAgICBpZiAobGFzdFBhZ2VIZWlnaHQvZnVsbFBhZ2VIZWlnaHQgPCBMYXN0UHJpbnRlZFBh
Z2VPcnBoYW5SYXRpbykgewotICAgICAgICAgICAgTlNBcnJheSAqYWRqdXN0ZWRQYWdlUmVjdHMg
PSBbW3NlbGYgX2ZyYW1lXSBfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0
b3I6dXNlclNjYWxlRmFjdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhl
aWdodDpmdWxsUGFnZUhlaWdodCpQcmludGluZ09ycGhhblNocmlua0FkanVzdG1lbnRdOwotICAg
ICAgICAgICAgLy8gVXNlIHRoZSBhZGp1c3RlZCByZWN0cyBvbmx5IGlmIHRoZSBwYWdlIGNvdW50
IHdlbnQgZG93bgotICAgICAgICAgICAgaWYgKFthZGp1c3RlZFBhZ2VSZWN0cyBjb3VudF0gPCBb
bmV3UGFnZVJlY3RzIGNvdW50XSkgewotICAgICAgICAgICAgICAgIG5ld1BhZ2VSZWN0cyA9IGFk
anVzdGVkUGFnZVJlY3RzOwotICAgICAgICAgICAgICAgIF9wcml2YXRlLT5hdm9pZGluZ1ByaW50
T3JwaGFuID0gWUVTOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IF9wcml2YXRlLT5wYWdlUmVjdHMgPSBbbmV3UGFnZVJlY3RzIHJldGFpbl07Ci0gICAgCi0gICAg
cmFuZ2UtPmxlbmd0aCA9IFtfcHJpdmF0ZS0+cGFnZVJlY3RzIGNvdW50XTsKLSAgICAKLSAgICBy
ZXR1cm4gWUVTOwotfQotCi0vLyBSZXR1cm4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlIGZvciBhIHBh
cnRpY3VsYXIgcGFnZSBudW1iZXIKLS0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBh
Z2UKLXsKLSAgICByZXR1cm4gW1tfcHJpdmF0ZS0+cGFnZVJlY3RzIG9iamVjdEF0SW5kZXg6cGFn
ZSAtIDFdIHJlY3RWYWx1ZV07Ci19Ci0KLS0gKHZvaWQpZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZToo
TlNTaXplKWJvcmRlclNpemUKLXsKLSAgICBBU1NFUlQoTlNFcXVhbFNpemVzKGJvcmRlclNpemUs
IFtbW05TUHJpbnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl0gcHJpbnRJbmZvXSBwYXBlclNp
emVdKSk7ICAgIAotICAgIFtbc2VsZiBfd2ViVmlld10gX2RyYXdIZWFkZXJBbmRGb290ZXJdOwot
fQotCi0tICh2b2lkKWJlZ2luRG9jdW1lbnQKLXsKLSAgICBAdHJ5IHsKLSAgICAgICAgLy8gRnJv
bSBub3cgb24gd2UnbGwgZ2V0IGEgY2hhbmNlIHRvIGNhbGwgX2VuZFByaW50TW9kZSBpbiBlaXRo
ZXIgYmVnaW5Eb2N1bWVudCBvcgotICAgICAgICAvLyBlbmREb2N1bWVudCwgc28gd2UgY2FuIGNh
bmNlbCB0aGUgImp1c3QgaW4gY2FzZSIgcGVuZGluZyBjYWxsLgotICAgICAgICBbTlNPYmplY3Qg
Y2FuY2VsUHJldmlvdXNQZXJmb3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3Io
X2RlbGF5ZWRFbmRQcmludE1vZGU6KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0OltOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRp
b25dXTsKLSAgICAgICAgW3N1cGVyIGJlZ2luRG9jdW1lbnRdOwotICAgIH0gQGNhdGNoIChOU0V4
Y2VwdGlvbiAqbG9jYWxFeGNlcHRpb24pIHsKLSAgICAgICAgLy8gRXhjZXB0aW9uIGR1cmluZyBb
c3VwZXIgYmVnaW5Eb2N1bWVudF0gbWVhbnMgdGhhdCBlbmREb2N1bWVudCB3aWxsIG5vdCBnZXQg
Y2FsbGVkLAotICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGNsZWFuIHVwIG91ciAicHJpbnQgbW9k
ZSIgaGVyZS4KLSAgICAgICAgW3NlbGYgX2VuZFByaW50TW9kZV07Ci0gICAgfQotfQotCi0tICh2
b2lkKWVuZERvY3VtZW50Ci17Ci0gICAgW3N1cGVyIGVuZERvY3VtZW50XTsKLSAgICAvLyBOb3Rl
IHNhZGx5IGF0IHRoaXMgcG9pbnQgW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJh
d2luZ1RvU2NyZWVuXSBpcyBzdGlsbCBOTyAKLSAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKLX0K
LQotLSAodm9pZClrZXlEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEg
Y2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2
ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2Ug
dGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhl
IGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lk
ZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNl
XTsKLQotICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7Ci0g
ICAgQk9PTCBldmVudFdhc1NlbnRUb1dlYkNvcmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9
PSBldmVudCk7Ci0KLSAgICBCT09MIGNhbGxTdXBlciA9IE5POwotCi0gICAgW19wcml2YXRlLT5r
ZXlEb3duRXZlbnQgcmVsZWFzZV07Ci0gICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVu
dCByZXRhaW5dOwotCi0gICAgQk9PTCBjb21wbGV0aW9uUG9wdXBXYXNPcGVuID0gX3ByaXZhdGUt
PmNvbXBDb250cm9sbGVyICYmIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgcG9wdXBXaW5kb3dJ
c09wZW5dOwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAg
IGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCkpIHsKLSAgICAgICAgLy8gV2ViQ29yZSBwcm9j
ZXNzZWQgYSBrZXkgZXZlbnQsIGJhaWwgb24gYW55IHByZWV4aXN0aW5nIGNvbXBsZXRlOiBVSQot
ICAgICAgICBpZiAoY29tcGxldGlvblBvcHVwV2FzT3BlbikKLSAgICAgICAgICAgIFtfcHJpdmF0
ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0g
ICAgfSBlbHNlIGlmICghX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIHx8ICFbX3ByaXZhdGUtPmNv
bXBDb250cm9sbGVyIGZpbHRlcktleURvd246ZXZlbnRdKSB7Ci0gICAgICAgIC8vIE5vdCBjb25z
dW1lZCBieSBjb21wbGV0ZTogcG9wdXAgd2luZG93Ci0gICAgICAgIFtfcHJpdmF0ZS0+Y29tcENv
bnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107Ci0gICAgICAgIGNh
bGxTdXBlciA9IFlFUzsKLSAgICB9Ci0gICAgaWYgKGNhbGxTdXBlcikKLSAgICAgICAgW3N1cGVy
IGtleURvd246ZXZlbnRdOwotICAgIGVsc2UKLSAgICAgICAgW05TQ3Vyc29yIHNldEhpZGRlblVu
dGlsTW91c2VNb3ZlczpZRVNdOwotfQotCi0tICh2b2lkKWtleVVwOihOU0V2ZW50ICopZXZlbnQK
LXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3Jl
ID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQpOwotCi0gICAgUmV0YWluUHRyPFdl
YkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2VsZjsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoY29yZUZyYW1lICYmICFldmVudFdhc1NlbnRU
b1dlYkNvcmUpCi0gICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2
ZW50KTsKLSAgICBlbHNlCi0gICAgICAgIFtzdXBlciBrZXlVcDpldmVudF07Ci19Ci0KLS0gKHZv
aWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hh
bmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50
IGxvb3AsIGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhl
IG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1
cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBX
ZWJLaXQgb3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsK
LQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmIChj
b3JlRnJhbWUpCi0gICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHNMb2NrU3Rh
dGVNYXlIYXZlQ2hhbmdlZCgpOwotICAgIAotICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2Vs
ZlByb3RlY3RvciA9IHNlbGY7Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBrZXlDb2RlID0gW2V2ZW50
IGtleUNvZGVdOwotCi0gICAgLy9Eb24ndCBtYWtlIGFuIGV2ZW50IGZyb20gdGhlIG51bSBsb2Nr
IGFuZCBmdW5jdGlvbiBrZXlzCi0gICAgaWYgKGNvcmVGcmFtZSAmJiBrZXlDb2RlICE9IDAgJiYg
a2V5Q29kZSAhPSAxMCAmJiBrZXlDb2RlICE9IDYzKSB7Ci0gICAgICAgIGNvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBbc3VwZXIgZmxhZ3NDaGFuZ2VkOmV2
ZW50XTsKLX0KLQotLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyop
YXR0cmlidXRlTmFtZQotewotICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
IE5TQWNjZXNzaWJpbGl0eUNoaWxkcmVuQXR0cmlidXRlXSkgewotICAgICAgICBpZCBhY2NUcmVl
ID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKLSAgICAgICAgaWYgKGFjY1Ry
ZWUpCi0gICAgICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmFjY1RyZWVd
OwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTphdHRyaWJ1dGVOYW1lXTsKLX0KLQotLSAoaWQpYWNjZXNzaWJp
bGl0eUZvY3VzZWRVSUVsZW1lbnQKLXsKLSAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0g
X2FjY2Vzc2liaWxpdHlUcmVlXTsKLSAgICBpZiAoYWNjVHJlZSkKLSAgICAgICAgcmV0dXJuIFth
Y2NUcmVlIGFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50XTsKLSAgICByZXR1cm4gc2VsZjsK
LX0KLQotLSAoaWQpYWNjZXNzaWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICBp
ZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKLSAgICBpZiAo
YWNjVHJlZSkgewotICAgICAgICBOU1BvaW50IHdpbmRvd0Nvb3JkID0gW1tzZWxmIHdpbmRvd10g
Y29udmVydFNjcmVlblRvQmFzZTpwb2ludF07Ci0gICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nl
c3NpYmlsaXR5SGl0VGVzdDpbc2VsZiBjb252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZpZXc6
bmlsXV07Ci0gICAgfQotICAgIHJldHVybiBzZWxmOwotfQotCi0tIChpZClfYWNjZXNzaWJpbGl0
eVBhcmVudEZvclN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICBpZCBhY2NUcmVlID0g
W1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKLSAgICBpZiAoIWFjY1RyZWUpCi0g
ICAgICAgIHJldHVybiBzZWxmOwotICAgIGlkIHBhcmVudCA9IFthY2NUcmVlIF9hY2Nlc3NpYmls
aXR5UGFyZW50Rm9yU3VidmlldzpzdWJ2aWV3XTsKLSAgICBpZiAoIXBhcmVudCkKLSAgICAgICAg
cmV0dXJuIHNlbGY7Ci0gICAgcmV0dXJuIHBhcmVudDsKLX0KLQotLSAodm9pZCljZW50ZXJTZWxl
Y3Rpb25JblZpc2libGVBcmVhOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0K
LSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAg
IGNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJB
bHdheXMpOwotfQotCi0tIChOU0RhdGEgKilfc2VsZWN0aW9uU3RhcnRGb250QXR0cmlidXRlc0Fz
UlRGCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6QCJ4IgotICAgICAgICBhdHRyaWJ1dGVzOmNvcmVGcmFtZSA/IGNvcmVG
cmFtZS0+Zm9udEF0dHJpYnV0ZXNGb3JTZWxlY3Rpb25TdGFydCgpIDogbmlsXTsKLSAgICBOU0Rh
dGEgKmRhdGEgPSBbc3RyaW5nIFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxl
bmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOwotICAgIFtzdHJpbmcgcmVsZWFzZV07Ci0g
ICAgcmV0dXJuIGRhdGE7Ci19Ci0KLS0gKE5TRGljdGlvbmFyeSAqKV9mb250QXR0cmlidXRlc0Zy
b21Gb250UGFzdGVib2FyZAotewotICAgIE5TUGFzdGVib2FyZCAqZm9udFBhc3RlYm9hcmQgPSBb
TlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpOU0ZvbnRQYm9hcmRdOwotICAgIGlmIChm
b250UGFzdGVib2FyZCA9PSBuaWwpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgTlNEYXRhICpk
YXRhID0gW2ZvbnRQYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TRm9udFBib2FyZFR5cGVdOwotICAg
IGlmIChkYXRhID09IG5pbCB8fCBbZGF0YSBsZW5ndGhdID09IDApCi0gICAgICAgIHJldHVybiBu
aWw7Ci0gICAgLy8gTlNUZXh0VmlldyBkb2VzIHNvbWV0aGluZyBtb3JlIGVmZmljaWVudCBieSBw
YXJzaW5nIHRoZSBhdHRyaWJ1dGVzIG9ubHksIGJ1dCB0aGF0J3Mgbm90IGF2YWlsYWJsZSBpbiBB
UEkuCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoUlRGOmRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdIGF1dG9y
ZWxlYXNlXTsKLSAgICBpZiAoc3RyaW5nID09IG5pbCB8fCBbc3RyaW5nIGxlbmd0aF0gPT0gMCkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4gW3N0cmluZyBmb250QXR0cmlidXRlc0lu
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMSldOwotfQotCi0tIChET01DU1NTdHlsZURlY2xhcmF0aW9u
ICopX2VtcHR5U3R5bGUKLXsKLSAgICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50
XSBjcmVhdGVDU1NTdHlsZURlY2xhcmF0aW9uXTsKLX0KLQotLSAoTlNTdHJpbmcgKilfY29sb3JB
c1N0cmluZzooTlNDb2xvciAqKWNvbG9yCi17Ci0gICAgTlNDb2xvciAqcmdiQ29sb3IgPSBbY29s
b3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07Ci0gICAg
Ly8gRklYTUU6IElmIGNvbG9yIGlzIG5vbi1uaWwgYW5kIHJnYkNvbG9yIGlzIG5pbCwgdGhhdCBt
ZWFucyB3ZSBnb3Qgc29tZSBraW5kCi0gICAgLy8gb2YgZmFuY3kgY29sb3IgdGhhdCBjYW4ndCBi
ZSBjb252ZXJ0ZWQgdG8gUkdCLiBDaGFuZ2luZyB0aGF0IHRvICJ0cmFuc3BhcmVudCIKLSAgICAv
LyBtaWdodCBub3QgYmUgZ3JlYXQsIGJ1dCBpdCdzIHByb2JhYmx5IE9LLgotICAgIGlmIChyZ2JD
b2xvciA9PSBuaWwpCi0gICAgICAgIHJldHVybiBAInRyYW5zcGFyZW50IjsKLSAgICBmbG9hdCBy
ID0gW3JnYkNvbG9yIHJlZENvbXBvbmVudF07Ci0gICAgZmxvYXQgZyA9IFtyZ2JDb2xvciBncmVl
bkNvbXBvbmVudF07Ci0gICAgZmxvYXQgYiA9IFtyZ2JDb2xvciBibHVlQ29tcG9uZW50XTsKLSAg
ICBmbG9hdCBhID0gW3JnYkNvbG9yIGFscGhhQ29tcG9uZW50XTsKLSAgICBpZiAoYSA9PSAwKQot
ICAgICAgICByZXR1cm4gQCJ0cmFuc3BhcmVudCI7Ci0gICAgaWYgKHIgPT0gMCAmJiBnID09IDAg
JiYgYiA9PSAwICYmIGEgPT0gMSkKLSAgICAgICAgcmV0dXJuIEAiYmxhY2siOwotICAgIGlmIChy
ID09IDEgJiYgZyA9PSAxICYmIGIgPT0gMSAmJiBhID09IDEpCi0gICAgICAgIHJldHVybiBAIndo
aXRlIjsKLSAgICAvLyBGSVhNRTogTG90cyBtb3JlIG5hbWVkIGNvbG9ycy4gTWF5YmUgd2UgY291
bGQgdXNlIHRoZSB0YWJsZSBpbiBXZWJDb3JlPwotICAgIGlmIChhID09IDEpCi0gICAgICAgIHJl
dHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAInJnYiglLjBmLCUuMGYsJS4wZikiLCBy
ICogMjU1LCBnICogMjU1LCBiICogMjU1XTsKLSAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJyZ2JhKCUuMGYsJS4wZiwlLjBmLCVmKSIsIHIgKiAyNTUsIGcgKiAyNTUsIGIg
KiAyNTUsIGFdOwotfQotCi0tIChOU1N0cmluZyAqKV9zaGFkb3dBc1N0cmluZzooTlNTaGFkb3cg
KilzaGFkb3cKLXsKLSAgICBpZiAoc2hhZG93ID09IG5pbCkKLSAgICAgICAgcmV0dXJuIEAibm9u
ZSI7Ci0gICAgTlNTaXplIG9mZnNldCA9IFtzaGFkb3cgc2hhZG93T2Zmc2V0XTsKLSAgICBmbG9h
dCBibHVyUmFkaXVzID0gW3NoYWRvdyBzaGFkb3dCbHVyUmFkaXVzXTsKLSAgICBpZiAob2Zmc2V0
LndpZHRoID09IDAgJiYgb2Zmc2V0LmhlaWdodCA9PSAwICYmIGJsdXJSYWRpdXMgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIEAibm9uZSI7Ci0gICAgTlNDb2xvciAqY29sb3IgPSBbc2hhZG93IHNoYWRv
d0NvbG9yXTsKLSAgICBpZiAoY29sb3IgPT0gbmlsKQotICAgICAgICByZXR1cm4gQCJub25lIjsK
LSAgICAvLyBGSVhNRTogSGFuZGxlIG5vbi1pbnRlZ3JhbCB2YWx1ZXMgaGVyZT8KLSAgICBpZiAo
Ymx1clJhZGl1cyA9PSAwKQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIlQCAlLjBmcHggJS4wZnB4IiwgW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdLCBvZmZz
ZXQud2lkdGgsIG9mZnNldC5oZWlnaHRdOwotICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIiVAICUuMGZweCAlLjBmcHggJS4wZnB4IiwgW3NlbGYgX2NvbG9yQXNTdHJpbmc6
Y29sb3JdLCBvZmZzZXQud2lkdGgsIG9mZnNldC5oZWlnaHQsIGJsdXJSYWRpdXNdOwotfQotCi0t
IChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVzOihOU0Rp
Y3Rpb25hcnkgKilkaWN0aW9uYXJ5Ci17Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5
bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07Ci0KLSAgICBOU0NvbG9yICpjb2xvciA9IFtkaWN0aW9u
YXJ5IG9iamVjdEZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIFtz
dHlsZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdXTsKLQot
ICAgIE5TRm9udCAqZm9udCA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1
dGVOYW1lXTsKLSAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6
QCJIZWx2ZXRpY2EiXTsKLSAgICAgICAgW3N0eWxlIHNldEZvbnRTaXplOkAiMTJweCJdOwotICAg
ICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpAIm5vcm1hbCJdOwotICAgICAgICBbc3R5bGUgc2V0
Rm9udFN0eWxlOkAibm9ybWFsIl07Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNGb250TWFuYWdl
ciAqZm0gPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0gICAgICAgIC8vIEZJ
WE1FOiBOZWVkIG1vcmUgc29waGlzdGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8g
aGFuZGxlIGZhbWlseSBuYW1lcwotICAgICAgICAvLyB3aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5n
bGUgcXVvdGUgb3IgYmFja3NsYXNoIGluIHRoZWlyIG5hbWVzLgotICAgICAgICBbc3R5bGUgc2V0
Rm9udEZhbWlseTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiclQCciLCBbZm9udCBmYW1p
bHlOYW1lXV1dOwotICAgICAgICBbc3R5bGUgc2V0Rm9udFNpemU6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlMC5mcHgiLCBbZm9udCBwb2ludFNpemVdXV07Ci0gICAgICAgIC8vIEZJWE1F
OiBNYXAgdG8gdGhlIGVudGlyZSByYW5nZSBvZiBDU1Mgd2VpZ2h0IHZhbHVlcy4KLSAgICAgICAg
aWYgKFtmbSB3ZWlnaHRPZkZvbnQ6Zm9udF0gPj0gTUlOX0JPTERfV0VJR0hUKQotICAgICAgICAg
ICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6QCJib2xkIl07Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAibm9ybWFsIl07Ci0gICAgICAgIGlmIChbZm0gdHJh
aXRzT2ZGb250OmZvbnRdICYgTlNJdGFsaWNGb250TWFzaykKLSAgICAgICAgICAgIFtzdHlsZSBz
ZXRGb250U3R5bGU6QCJpdGFsaWMiXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3N0eWxl
IHNldEZvbnRTdHlsZTpAIm5vcm1hbCJdOwotICAgIH0KLQotICAgIGNvbG9yID0gW2RpY3Rpb25h
cnkgb2JqZWN0Rm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgW3N0
eWxlIHNldENvbG9yOmNvbG9yID8gW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdIDogKE5TU3Ry
aW5nICopQCJibGFjayJdOwotCi0gICAgTlNTaGFkb3cgKnNoYWRvdyA9IFtkaWN0aW9uYXJ5IG9i
amVjdEZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdOwotICAgIFtzdHlsZSBzZXRUZXh0U2hh
ZG93OltzZWxmIF9zaGFkb3dBc1N0cmluZzpzaGFkb3ddXTsKLQotICAgIGludCBzdHJpa2V0aHJv
dWdoSW50ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0
dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLQotICAgIGludCBzdXBlcnNjcmlwdEludCA9IFtbZGlj
dGlvbmFyeSBvYmplY3RGb3JLZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludFZhbHVl
XTsKLSAgICBpZiAoc3VwZXJzY3JpcHRJbnQgPiAwKQotICAgICAgICBbc3R5bGUgc2V0VmVydGlj
YWxBbGlnbjpAInN1cGVyIl07Ci0gICAgZWxzZSBpZiAoc3VwZXJzY3JpcHRJbnQgPCAwKQotICAg
ICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1YiJdOwotICAgIGVsc2UKLSAgICAgICAg
W3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJiYXNlbGluZSJdOwotICAgIGludCB1bmRlcmxpbmVJ
bnQgPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVO
YW1lXSBpbnRWYWx1ZV07Ci0gICAgLy8gRklYTUU6IFVuZGVybGluZSB3aW5zIGhlcmUgaWYgd2Ug
aGF2ZSBib3RoIChzZWUgYnVnIDM3OTA0NDMpLgotICAgIGlmIChzdHJpa2V0aHJvdWdoSW50ID09
IE5TVW5kZXJsaW5lU3R5bGVOb25lICYmIHVuZGVybGluZUludCA9PSBOU1VuZGVybGluZVN0eWxl
Tm9uZSkKLSAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlv
bnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5vbmUiIHByaW9yaXR5OkAiIl07Ci0gICAgZWxzZSBpZiAo
dW5kZXJsaW5lSW50ID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQotICAgICAgICBbc3R5bGUgc2V0
UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibGlu
ZS10aHJvdWdoIiBwcmlvcml0eTpAIiJdOwotICAgIGVsc2UKLSAgICAgICAgW3N0eWxlIHNldFBy
b3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVy
bGluZSIgcHJpb3JpdHk6QCIiXTsKLQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotLSAodm9pZClf
YXBwbHlTdHlsZVRvU2VsZWN0aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0
aFVuZG9BY3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgotewotICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+YXBwbHlTdHlsZVRvU2VsZWN0aW9uKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9uKTsKLX0KLQot
LSAodm9pZClfYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uOihET01DU1NTdHlsZURlY2xh
cmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgotewot
ICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAg
Y29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKGNvcmUo
c3R5bGUpLCB1bmRvQWN0aW9uKTsKLX0KLQotLSAoQk9PTClfaGFuZGxlU3R5bGVLZXlFcXVpdmFs
ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBBU1NFUlQoW3NlbGYgX3dlYlZpZXddKTsKLSAg
ICBpZiAoIVtbW3NlbGYgX3dlYlZpZXddIHByZWZlcmVuY2VzXSByZXNwZWN0U3RhbmRhcmRTdHls
ZUtleUVxdWl2YWxlbnRzXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIAotICAgIGlmICghW3Nl
bGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgCi0gICAgaWYgKChbZXZlbnQg
bW9kaWZpZXJGbGFnc10gJiBOU0RldmljZUluZGVwZW5kZW50TW9kaWZpZXJGbGFnc01hc2spICE9
IE5TQ29tbWFuZEtleU1hc2spCi0gICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBOU1N0cmlu
ZyAqc3RyaW5nID0gW2V2ZW50IGNoYXJhY3RlcnNdOwotICAgIGlmIChbc3RyaW5nIGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmU6QCJiIl0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAgICBbc2VsZiBl
eGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6IlRvZ2dsZUJvbGQiXTsKLSAgICAgICAgcmV0dXJuIFlF
UzsKLSAgICB9Ci0gICAgaWYgKFtzdHJpbmcgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImkiXSA9
PSBOU09yZGVyZWRTYW1lKSB7Ci0gICAgICAgIFtzZWxmIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFt
ZToiVG9nZ2xlSXRhbGljIl07Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBOTzsKLX0KLQotLSAoQk9PTClwZXJmb3JtS2V5RXF1aXZhbGVudDooTlNFdmVudCAq
KWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhp
cyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGlu
ZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRo
ZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQg
ZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAg
IFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBpZiAoW3NlbGYgX2hhbmRsZVN0
eWxlS2V5RXF1aXZhbGVudDpldmVudF0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgCi0gICAg
Qk9PTCBldmVudFdhc1NlbnRUb1dlYkNvcmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9PSBl
dmVudCk7Ci0gICAgQk9PTCByZXQgPSBOTzsKLQotICAgIFtfcHJpdmF0ZS0+a2V5RG93bkV2ZW50
IHJlbGVhc2VdOwotICAgIF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsK
LSAgICAKLSAgICBbc2VsZiByZXRhaW5dOwotCi0gICAgLy8gUGFzcyBjb21tYW5kLWtleSBjb21i
b3MgdGhyb3VnaCBXZWJDb3JlIGlmIHRoZXJlIGlzIGEga2V5IGJpbmRpbmcgYXZhaWxhYmxlIGZv
cgotICAgIC8vIHRoaXMgZXZlbnQuIFRoaXMgbGV0cyB3ZWIgcGFnZXMgaGF2ZSBhIGNyYWNrIGF0
IGludGVyY2VwdGluZyBjb21tYW5kLW1vZGlmaWVkIGtleXByZXNzZXMuCi0gICAgLy8gQnV0IGRv
bid0IGRvIGl0IGlmIHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBldmVudC4KLSAgICAvLyBQ
cmVzc2luZyBFc2MgcmVzdWx0cyBpbiBhIGZha2UgZXZlbnQgYmVpbmcgc2VudCAtIGRvbid0IHBh
c3MgaXQgdG8gV2ViQ29yZS4KLSAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBldmVu
dCA9PSBbTlNBcHAgY3VycmVudEV2ZW50XSAmJiBzZWxmID09IFtbc2VsZiB3aW5kb3ddIGZpcnN0
UmVzcG9uZGVyXSkKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpCi0gICAgICAgICAgICByZXQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2
ZW50KTsKLQotICAgIGlmICghcmV0KQotICAgICAgICByZXQgPSBbc3VwZXIgcGVyZm9ybUtleUVx
dWl2YWxlbnQ6ZXZlbnRdOwotCi0gICAgW3NlbGYgcmVsZWFzZV07Ci0gICAgCi0gICAgcmV0dXJu
IHJldDsKLX0KLQotLSAodm9pZCljb3B5Rm9udDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9Q
Uk9MT0dVRQotCi0gICAgLy8gUHV0IFJURiB3aXRoIGZvbnQgYXR0cmlidXRlcyBvbiB0aGUgcGFz
dGVib2FyZC4KLSAgICAvLyBNYXliZSBsYXRlciB3ZSBzaG91bGQgYWRkIGEgcGFzdGVib2FyZCB0
eXBlIHRoYXQgY29udGFpbnMgQ1NTIHRleHQgZm9yICJuYXRpdmUiIGNvcHkgYW5kIHBhc3RlIGZv
bnQuCi0gICAgTlNQYXN0ZWJvYXJkICpmb250UGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFz
dGVib2FyZFdpdGhOYW1lOk5TRm9udFBib2FyZF07Ci0gICAgW2ZvbnRQYXN0ZWJvYXJkIGRlY2xh
cmVUeXBlczpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6TlNGb250UGJvYXJkVHlwZV0gb3duZXI6
bmlsXTsKLSAgICBbZm9udFBhc3RlYm9hcmQgc2V0RGF0YTpbc2VsZiBfc2VsZWN0aW9uU3RhcnRG
b250QXR0cmlidXRlc0FzUlRGXSBmb3JUeXBlOk5TRm9udFBib2FyZFR5cGVdOwotfQotCi0tICh2
b2lkKXBhc3RlRm9udDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAg
Ly8gUmVhZCBSVEYgd2l0aCBmb250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgcGFzdGVib2FyZC4KLSAg
ICAvLyBNYXliZSBsYXRlciB3ZSBzaG91bGQgYWRkIGEgcGFzdGVib2FyZCB0eXBlIHRoYXQgY29u
dGFpbnMgQ1NTIHRleHQgZm9yICJuYXRpdmUiIGNvcHkgYW5kIHBhc3RlIGZvbnQuCi0gICAgW3Nl
bGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udEF0dHJpYnV0ZXM6
W3NlbGYgX2ZvbnRBdHRyaWJ1dGVzRnJvbUZvbnRQYXN0ZWJvYXJkXV0gd2l0aFVuZG9BY3Rpb246
RWRpdEFjdGlvblBhc3RlRm9udF07Ci19Ci0KLS0gKHZvaWQpcGFzdGVBc1JpY2hUZXh0OihpZClz
ZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICAvLyBTaW5jZSByaWNoIHRleHQg
YWx3YXlzIGJlYXRzIHBsYWluIHRleHQgd2hlbiBib3RoIGFyZSBvbiB0aGUgcGFzdGVib2FyZCwg
aXQncyBub3QKLSAgICAvLyBjbGVhciBob3cgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBwbGFpbiBv
bGQgcGFzdGUuCi0gICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBn
ZW5lcmFsUGFzdGVib2FyZF0gYWxsb3dQbGFpblRleHQ6Tk9dOwotfQotCi0tIChOU0ZvbnQgKilf
b3JpZ2luYWxGb250QQotewotICAgIHJldHVybiBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1h
bmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAiSGVsdmV0aWNhIiB0cmFpdHM6MCB3ZWlnaHQ6U1RBTkRB
UkRfV0VJR0hUIHNpemU6MTAuMGZdOwotfQotCi0tIChOU0ZvbnQgKilfb3JpZ2luYWxGb250Qgot
ewotICAgIHJldHVybiBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRo
RmFtaWx5OkAiVGltZXMiIHRyYWl0czpOU0ZvbnRJdGFsaWNUcmFpdCB3ZWlnaHQ6U1RBTkRBUkRf
Qk9MRF9XRUlHSFQgc2l6ZToxMi4wZl07Ci19Ci0KLS0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNT
U1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250
ICopYgotewotICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpcmVjdGx5IGFzayBOU0Zv
bnRNYW5hZ2VyIHdoYXQgc3R5bGUgY2hhbmdlIGl0J3MgZ29pbmcgdG8gZG8KLSAgICAvLyB3ZSBp
bnN0ZWFkIHBhc3MgdHdvICJzcGVjaW1lbiIgZm9udHMgdG8gaXQgYW5kIGxldCBpdCBjaGFuZ2Ug
dGhlbS4gV2UgdGhlbiBkZWR1Y2Ugd2hhdAotICAgIC8vIHN0eWxlIGNoYW5nZSBpdCB3YXMgZG9p
bmcgYnkgbG9va2luZyBhdCB3aGF0IGhhcHBlbmVkIHRvIGVhY2ggb2YgdGhlIHR3byBmb250cy4K
LSAgICAvLyBTbyBpZiBpdCB3YXMgbWFraW5nIHRoZSB0ZXh0IGJvbGQsIGJvdGggZm9udHMgd2ls
bCBiZSBib2xkIGFmdGVyIHRoZSBmYWN0LgotCi0gICAgaWYgKGEgPT0gbmlsIHx8IGIgPT0gbmls
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBOU0ZvbnRNYW5hZ2VyICpmbSA9IFtOU0ZvbnRNYW5h
Z2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLQotICAgIE5TRm9udCAqb2EgPSBbc2VsZiBfb3JpZ2lu
YWxGb250QV07Ci0KLSAgICBOU1N0cmluZyAqYUZhbWlseU5hbWUgPSBbYSBmYW1pbHlOYW1lXTsK
LSAgICBOU1N0cmluZyAqYkZhbWlseU5hbWUgPSBbYiBmYW1pbHlOYW1lXTsKLQotICAgIGludCBh
UG9pbnRTaXplID0gKGludClbYSBwb2ludFNpemVdOwotICAgIGludCBiUG9pbnRTaXplID0gKGlu
dClbYiBwb2ludFNpemVdOwotCi0gICAgaW50IGFXZWlnaHQgPSBbZm0gd2VpZ2h0T2ZGb250OmFd
OwotICAgIGludCBiV2VpZ2h0ID0gW2ZtIHdlaWdodE9mRm9udDpiXTsKLQotICAgIEJPT0wgYUlz
SXRhbGljID0gKFtmbSB0cmFpdHNPZkZvbnQ6YV0gJiBOU0l0YWxpY0ZvbnRNYXNrKSAhPSAwOwot
ICAgIEJPT0wgYklzSXRhbGljID0gKFtmbSB0cmFpdHNPZkZvbnQ6Yl0gJiBOU0l0YWxpY0ZvbnRN
YXNrKSAhPSAwOwotCi0gICAgaWYgKFthRmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6YkZhbWls
eU5hbWVdKSB7Ci0gICAgICAgIE5TU3RyaW5nICpmYW1pbHlOYW1lRm9yQ1NTID0gYUZhbWlseU5h
bWU7Ci0KLSAgICAgICAgLy8gVGhlIGZhbWlseSBuYW1lIG1heSBub3QgYmUgc3BlY2lmaWMgZW5v
dWdoIHRvIGdldCB1cyB0aGUgZm9udCBzcGVjaWZpZWQuCi0gICAgICAgIC8vIEluIHNvbWUgY2Fz
ZXMsIHRoZSBvbmx5IHdheSB0byBnZXQgZXhhY3RseSB3aGF0IHdlIGFyZSBsb29raW5nIGZvciBp
cyB0byB1c2UKLSAgICAgICAgLy8gdGhlIFBvc3RzY3JpcHQgbmFtZS4KLSAgICAgICAgCi0gICAg
ICAgIC8vIEZpbmQgdGhlIGZvbnQgdGhlIHNhbWUgd2F5IHRoZSByZW5kZXJpbmcgY29kZSB3b3Vs
ZCBsYXRlciBpZiBpdCBlbmNvdW50ZXJlZCB0aGlzIENTUy4KLSAgICAgICAgTlNGb250VHJhaXRN
YXNrIHRyYWl0cyA9IGFJc0l0YWxpYyA/IE5TRm9udEl0YWxpY1RyYWl0IDogMDsKLSAgICAgICAg
TlNGb250ICpmb3VuZEZvbnQgPSBXZWJDb3JlRmluZEZvbnQoYUZhbWlseU5hbWUsIHRyYWl0cywg
YVdlaWdodCwgYVBvaW50U2l6ZSk7Ci0KLSAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZmluZCBhIGZv
bnQgd2l0aCB0aGUgc2FtZSBQb3N0c2NyaXB0IG5hbWUsIHRoZW4gd2UnbGwgaGF2ZSB0byB1c2Ug
dGhlCi0gICAgICAgIC8vIFBvc3RzY3JpcHQgbmFtZSB0byBtYWtlIHRoZSBDU1Mgc3BlY2lmaWMg
ZW5vdWdoLgotICAgICAgICBpZiAoIVtbZm91bmRGb250IGZvbnROYW1lXSBpc0VxdWFsVG9TdHJp
bmc6W2EgZm9udE5hbWVdXSkKLSAgICAgICAgICAgIGZhbWlseU5hbWVGb3JDU1MgPSBbYSBmb250
TmFtZV07Ci0KLSAgICAgICAgLy8gRklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2Fw
aW5nIGNvZGUgaWYgd2Ugd2FudCB0byBoYW5kbGUgZmFtaWx5IG5hbWVzCi0gICAgICAgIC8vIHdp
dGggY2hhcmFjdGVycyBsaWtlIHNpbmdsZSBxdW90ZSBvciBiYWNrc2xhc2ggaW4gdGhlaXIgbmFt
ZXMuCi0gICAgICAgIFtzdHlsZSBzZXRGb250RmFtaWx5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiJyVAJyIsIGZhbWlseU5hbWVGb3JDU1NdXTsKLSAgICB9Ci0KLSAgICBpbnQgc29hID0g
KGludClbb2EgcG9pbnRTaXplXTsKLSAgICBpZiAoYVBvaW50U2l6ZSA9PSBiUG9pbnRTaXplKQot
ICAgICAgICBbc3R5bGUgc2V0Rm9udFNpemU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIl
ZHB4IiwgYVBvaW50U2l6ZV1dOwotICAgIGVsc2UgaWYgKGFQb2ludFNpemUgPCBzb2EpCi0gICAg
ICAgIFtzdHlsZSBfc2V0Rm9udFNpemVEZWx0YTpAIi0xcHgiXTsKLSAgICBlbHNlIGlmIChhUG9p
bnRTaXplID4gc29hKQotICAgICAgICBbc3R5bGUgX3NldEZvbnRTaXplRGVsdGE6QCIxcHgiXTsK
LQotICAgIGlmIChhV2VpZ2h0ID09IGJXZWlnaHQpCi0gICAgICAgIFtzdHlsZSBzZXRGb250V2Vp
Z2h0OmFXZWlnaHQgPiBNSU5fQk9MRF9XRUlHSFQgPyBAImJvbGQiIDogQCJub3JtYWwiXTsKLQot
ICAgIGlmIChhSXNJdGFsaWMgPT0gYklzSXRhbGljKQotICAgICAgICBbc3R5bGUgc2V0Rm9udFN0
eWxlOmFJc0l0YWxpYyA/IEAiaXRhbGljIiA6ICBAIm5vcm1hbCJdOwotfQotCi0tIChET01DU1NT
dHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUZvbnRNYW5hZ2VyT3BlcmF0aW9uCi17Ci0gICAg
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07Ci0KLSAg
ICBOU0ZvbnRNYW5hZ2VyICpmbSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsK
LQotICAgIE5TRm9udCAqb2EgPSBbc2VsZiBfb3JpZ2luYWxGb250QV07Ci0gICAgTlNGb250ICpv
YiA9IFtzZWxmIF9vcmlnaW5hbEZvbnRCXTsgICAgCi0gICAgW3NlbGYgX2FkZFRvU3R5bGU6c3R5
bGUgZm9udEE6W2ZtIGNvbnZlcnRGb250Om9hXSBmb250QjpbZm0gY29udmVydEZvbnQ6b2JdXTsK
LQotICAgIHJldHVybiBzdHlsZTsKLX0KLQotLSAodm9pZCljaGFuZ2VGb250OihpZClzZW5kZXIK
LXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0
aW9uOltzZWxmIF9zdHlsZUZyb21Gb250TWFuYWdlck9wZXJhdGlvbl0gd2l0aFVuZG9BY3Rpb246
RWRpdEFjdGlvblNldEZvbnRdOwotfQotCi0tIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0
eWxlRm9yQXR0cmlidXRlQ2hhbmdlOihpZClzZW5kZXIKLXsKLSAgICBET01DU1NTdHlsZURlY2xh
cmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsKLQotICAgIE5TU2hhZG93ICpzaGFk
b3cgPSBbW05TU2hhZG93IGFsbG9jXSBpbml0XTsKLSAgICBbc2hhZG93IHNldFNoYWRvd09mZnNl
dDpOU01ha2VTaXplKDEsIDEpXTsKLQotICAgIE5TRGljdGlvbmFyeSAqb2EgPSBbTlNEaWN0aW9u
YXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgIFtzZWxmIF9vcmlnaW5h
bEZvbnRBXSwgTlNGb250QXR0cmlidXRlTmFtZSwKLSAgICAgICAgbmlsXTsKLSAgICBOU0RpY3Rp
b25hcnkgKm9iID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgot
ICAgICAgICBbTlNDb2xvciBibGFja0NvbG9yXSwgTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lLAotICAgICAgICBbc2VsZiBfb3JpZ2luYWxGb250Ql0sIE5TRm9udEF0dHJpYnV0ZU5hbWUs
Ci0gICAgICAgIFtOU0NvbG9yIHdoaXRlQ29sb3JdLCBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWUsCi0gICAgICAgIHNoYWRvdywgTlNTaGFkb3dBdHRyaWJ1dGVOYW1lLAotICAgICAgICBb
TlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSwgTlNTdHJpa2V0
aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lLAotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDoxXSwgTlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoSW50Ok5TVW5kZXJsaW5lU3R5bGVTaW5nbGVdLCBOU1VuZGVybGluZVN0eWxlQXR0cmli
dXRlTmFtZSwKLSAgICAgICAgbmlsXTsKLQotICAgIFtzaGFkb3cgcmVsZWFzZV07Ci0KLSNpZiAw
Ci0KLU5TT2JsaXF1ZW5lc3NBdHRyaWJ1dGVOYW1lICAgICAgICAvKiBmbG9hdDsgc2tldyB0byBi
ZSBhcHBsaWVkIHRvIGdseXBocywgZGVmYXVsdCAwOiBubyBza2V3ICovCi0gICAgLy8gZm9udC1z
dHlsZSwgYnV0IHRoYXQgaXMganVzdCBhbiBvbi1vZmYgc3dpdGNoCi0KLU5TRXhwYW5zaW9uQXR0
cmlidXRlTmFtZSAgICAgICAgICAvKiBmbG9hdDsgbG9nIG9mIGV4cGFuc2lvbiBmYWN0b3IgdG8g
YmUgYXBwbGllZCB0byBnbHlwaHMsIGRlZmF1bHQgMDogbm8gZXhwYW5zaW9uICovCi0gICAgLy8g
Zm9udC1zdHJldGNoPwotCi1OU0tlcm5BdHRyaWJ1dGVOYW1lICAgICAgICAgICAgICAgLyogZmxv
YXQsIGFtb3VudCB0byBtb2RpZnkgZGVmYXVsdCBrZXJuaW5nLCBpZiAwLCBrZXJuaW5nIG9mZiAq
LwotICAgIC8vIGxldHRlci1zcGFjaW5nPyBwcm9iYWJseSBub3QgZ29vZCBlbm91Z2gKLQotTlNV
bmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWUgICAgIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBz
YW1lIGFzIGZvcmVncm91bmQgY29sb3IgKi8KLU5TU3RyaWtldGhyb3VnaENvbG9yQXR0cmlidXRl
TmFtZSAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICov
Ci0gICAgLy8gdGV4dC1kZWNvcmF0aW9uLWNvbG9yPwotCi1OU0xpZ2F0dXJlQXR0cmlidXRlTmFt
ZSAgICAgICAgICAgLyogaW50LCBkZWZhdWx0IDE6IGRlZmF1bHQgbGlnYXR1cmVzLCAwOiBubyBs
aWdhdHVyZXMsIDI6IGFsbCBsaWdhdHVyZXMgKi8KLU5TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVO
YW1lICAgICAvKiBmbG9hdCwgaW4gcG9pbnRzOyBvZmZzZXQgZnJvbSBiYXNlbGluZSwgZGVmYXVs
dCAwICovCi1OU1N0cm9rZVdpZHRoQXR0cmlidXRlTmFtZSAgICAgICAgLyogZmxvYXQsIGluIHBl
cmNlbnQgb2YgZm9udCBwb2ludCBzaXplLCBkZWZhdWx0IDA6IG5vIHN0cm9rZTsgcG9zaXRpdmUg
Zm9yIHN0cm9rZSBhbG9uZSwgbmVnYXRpdmUgZm9yIHN0cm9rZSBhbmQgZmlsbCAoYSB0eXBpY2Fs
IHZhbHVlIGZvciBvdXRsaW5lZCB0ZXh0IHdvdWxkIGJlIDMuMCkgKi8KLU5TU3Ryb2tlQ29sb3JB
dHRyaWJ1dGVOYW1lICAgICAgICAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDogc2FtZSBhcyBmb3Jl
Z3JvdW5kIGNvbG9yICovCi0gICAgLy8gbmVlZCBleHRlbnNpb25zPwotCi0jZW5kaWYKLSAgICAK
LSAgICBOU0RpY3Rpb25hcnkgKmEgPSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9hXTsKLSAg
ICBOU0RpY3Rpb25hcnkgKmIgPSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9iXTsKLQotICAg
IE5TQ29sb3IgKmNhID0gW2Egb2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRl
TmFtZV07Ci0gICAgTlNDb2xvciAqY2IgPSBbYiBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoY2EgPT0gY2IpIHsKLSAgICAgICAgW3N0eWxlIHNl
dEJhY2tncm91bmRDb2xvcjpbc2VsZiBfY29sb3JBc1N0cmluZzpjYV1dOwotICAgIH0KLQotICAg
IFtzZWxmIF9hZGRUb1N0eWxlOnN0eWxlIGZvbnRBOlthIG9iamVjdEZvcktleTpOU0ZvbnRBdHRy
aWJ1dGVOYW1lXSBmb250QjpbYiBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV1dOwot
Ci0gICAgY2EgPSBbYSBvYmplY3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1l
XTsKLSAgICBjYiA9IFtiIG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWVdOwotICAgIGlmIChjYSA9PSBjYikgewotICAgICAgICBbc3R5bGUgc2V0Q29sb3I6W3NlbGYg
X2NvbG9yQXNTdHJpbmc6Y2FdXTsKLSAgICB9Ci0KLSAgICBOU1NoYWRvdyAqc2hhID0gW2Egb2Jq
ZWN0Rm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKHNoYSkKLSAgICAgICAg
W3N0eWxlIHNldFRleHRTaGFkb3c6W3NlbGYgX3NoYWRvd0FzU3RyaW5nOnNoYV1dOwotICAgIGVs
c2UgaWYgKFtiIG9iamVjdEZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdID09IG5pbCkKLSAg
ICAgICAgW3N0eWxlIHNldFRleHRTaGFkb3c6QCJub25lIl07Ci0KLSAgICBpbnQgc2EgPSBbW2Eg
b2JqZWN0Rm9yS2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVd
OwotICAgIGludCBzYiA9IFtbYiBvYmplY3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRy
aWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0gICAgaWYgKHNhID09IHNiKSB7Ci0gICAgICAgIGlmIChz
YSA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0
eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlv
cml0eTpAIiJdOyAKLSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJubyBsaW5lLXRocm91
Z2giIHJhdGhlciB0aGFuICJub25lIgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc3R5bGUg
c2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAi
bGluZS10aHJvdWdoIiBwcmlvcml0eTpAIiJdOwotICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1l
YW4gImFkZCBsaW5lLXRocm91Z2giIHJhdGhlciB0aGFuICJsaW5lLXRocm91Z2giCi0gICAgfQot
Ci0gICAgc2EgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBp
bnRWYWx1ZV07Ci0gICAgc2IgPSBbW2Igb2JqZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1
dGVOYW1lXSBpbnRWYWx1ZV07Ci0gICAgaWYgKHNhID09IHNiKSB7Ci0gICAgICAgIGlmIChzYSA+
IDApCi0gICAgICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1cGVyIl07Ci0gICAg
ICAgIGVsc2UgaWYgKHNhIDwgMCkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWdu
OkAic3ViIl07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFs
aWduOkAiYmFzZWxpbmUiXTsKLSAgICB9Ci0KLSAgICBpbnQgdWEgPSBbW2Egb2JqZWN0Rm9yS2V5
Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0gICAgaW50IHViID0g
W1tiIG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVd
OwotICAgIGlmICh1YSA9PSB1YikgewotICAgICAgICBpZiAodWEgPT0gTlNVbmRlcmxpbmVTdHls
ZU5vbmUpCi0gICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNv
cmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKLSAgICAgICAg
ICAgIC8vIHdlIHJlYWxseSBtZWFuICJubyB1bmRlcmxpbmUiIHJhdGhlciB0aGFuICJub25lIgot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAidW5kZXJsaW5lIiBwcmlvcml0eTpAIiJd
OwotICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gImFkZCB1bmRlcmxpbmUiIHJhdGhlciB0
aGFuICJ1bmRlcmxpbmUiCi0gICAgfQotCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0tICh2b2lk
KWNoYW5nZUF0dHJpYnV0ZXM6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQot
ICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRm9yQXR0cmlidXRl
Q2hhbmdlOnNlbmRlcl0gd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXNd
OwotfQotCi0tIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUNvbG9yUGFuZWxX
aXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOwotCi0gICAgQVNTRVJUKFtzdHlsZSByZXNwb25k
c1RvU2VsZWN0b3I6c2VsZWN0b3JdKTsKLSAgICBbc3R5bGUgcGVyZm9ybVNlbGVjdG9yOnNlbGVj
dG9yIHdpdGhPYmplY3Q6W3NlbGYgX2NvbG9yQXNTdHJpbmc6W1tOU0NvbG9yUGFuZWwgc2hhcmVk
Q29sb3JQYW5lbF0gY29sb3JdXV07Ci0gICAgCi0gICAgcmV0dXJuIHN0eWxlOwotfQotCi0tIChF
ZGl0QWN0aW9uKV91bmRvQWN0aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6KFNFTClzZWxl
Y3RvcgotewotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3Ioc2V0QmFja2dyb3VuZENvbG9y
OikpCi0gICAgICAgIHJldHVybiBFZGl0QWN0aW9uU2V0QmFja2dyb3VuZENvbG9yOyAgICAKLSAg
ICByZXR1cm4gRWRpdEFjdGlvblNldENvbG9yOwotfQotCi0tICh2b2lkKV9jaGFuZ2VDU1NDb2xv
clVzaW5nU2VsZWN0b3I6KFNFTClzZWxlY3RvciBpblJhbmdlOihET01SYW5nZSAqKXJhbmdlCi17
Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfc3R5bGVGcm9tQ29s
b3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxlY3Rvcl07Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtz
ZWxmIF93ZWJWaWV3XTsKLSAgICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJk
ZXJdIHdlYlZpZXc6d2ViVmlldyBzaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJbkRP
TVJhbmdlOnJhbmdlXSkKLSAgICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pKQotICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShj
b3JlKHN0eWxlKSwgW3NlbGYgX3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3Rvcjpz
ZWxlY3Rvcl0pOwotfQotCi0tICh2b2lkKWNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOihp
ZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICAvLyBNaW1pY2tpbmcgTlNU
ZXh0VmlldywgdGhpcyBtZXRob2Qgc2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlCi0g
ICAgLy8gZW50aXJlIGRvY3VtZW50LiBUaGVyZSBpcyBubyBOU1RleHRWaWV3IEFQSSBmb3Igc2V0
dGluZyB0aGUgYmFja2dyb3VuZAotICAgIC8vIGNvbG9yIG9uIHRoZSBzZWxlY3RlZCByYW5nZSBv
bmx5LiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgY3VycmVudGx5Ci0gICAgLy8gbmV2ZXIgY2Fs
bGVkIGZyb20gdGhlIFVJIChzZWUgY29tbWVudCBpbiBjaGFuZ2VDb2xvcjopLgotICAgIC8vIEZJ
WE1FOiB0aGlzIGFjdHVhbGx5IGhhcyBubyBlZmZlY3Qgd2hlbiBjYWxsZWQsIHByb2JhYmx5IGR1
ZSB0byAzNjU0ODUwLiBfZG9jdW1lbnRSYW5nZSBzZWVtcwotICAgIC8vIHRvIGRvIHRoZSByaWdo
dCB0aGluZyBiZWNhdXNlIGl0IHdvcmtzIGluIHN0YXJ0U3BlYWtpbmc6LCBhbmQgSSBrbm93IHNl
dEJhY2tncm91bmRDb2xvcjogZG9lcyB0aGUKLSAgICAvLyByaWdodCB0aGluZyBiZWNhdXNlIEkg
dGVzdGVkIGl0IHdpdGggW3NlbGYgX3NlbGVjdGVkUmFuZ2VdLgotICAgIC8vIEZJWE1FOiBUaGlz
IHdvbid0IGFjdHVhbGx5IGFwcGx5IHRoZSBzdHlsZSB0byB0aGUgZW50aXJlIHJhbmdlIGhlcmUs
IGJlY2F1c2UgaXQgZW5kcyB1cCBjYWxsaW5nCi0gICAgLy8gW2ZyYW1lIF9hcHBseVN0eWxlOl0s
IHdoaWNoIG9wZXJhdGVzIG9uIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gVG8gbWFrZSB0aGlzIHdv
cmsgcmlnaHQsIHdlJ2xsCi0gICAgLy8gbmVlZCB0byBzYXZlIG9mZiB0aGUgc2VsZWN0aW9uLCB0
ZW1wb3JhcmlseSBzZXQgaXQgdG8gdGhlIGVudGlyZSByYW5nZSwgbWFrZSB0aGUgY2hhbmdlLCB0
aGVuCi0gICAgLy8gcmVzdG9yZSB0aGUgb2xkIHNlbGVjdGlvbi4KLSAgICBbc2VsZiBfY2hhbmdl
Q1NTQ29sb3JVc2luZ1NlbGVjdG9yOkBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KSBpblJh
bmdlOltzZWxmIF9kb2N1bWVudFJhbmdlXV07Ci19Ci0KLS0gKHZvaWQpY2hhbmdlQ29sb3I6KGlk
KXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIEZJWE1FOiBpbiBOU1Rl
eHRWaWV3LCB0aGlzIG1ldGhvZCBjYWxscyBjaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjog
d2hlbiBhCi0gICAgLy8gcHJpdmF0ZSBjYWxsIGhhcyBlYXJsaWVyIGJlZW4gbWFkZSBieSBbTlNG
b250Rm9udEVmZmVjdHNCb3ggY2hhbmdlQ29sb3I6XSwgc2VlIDM2NzQ0OTMuIAotICAgIC8vIEFw
cEtpdCB3aWxsIGhhdmUgdG8gYmUgcmV2aXNlZCB0byBhbGxvdyB0aGlzIHRvIHdvcmsgd2l0aCBh
bnl0aGluZyB0aGF0IGlzbid0IGFuIAotICAgIC8vIE5TVGV4dFZpZXcuIEhvd2V2ZXIsIHRoaXMg
bWlnaHQgbm90IGJlIHJlcXVpcmVkIGZvciBUaWdlciwgc2luY2UgdGhlIGJhY2tncm91bmQtY29s
b3IgCi0gICAgLy8gY2hhbmdpbmcgYm94IGluIHRoZSBmb250IHBhbmVsIGRvZXNuJ3Qgd29yayBp
biBNYWlsICgzNjc0NDgxKSwgdGhvdWdoIGl0IGRvZXMgaW4gVGV4dEVkaXQuCi0gICAgW3NlbGYg
X2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0Q29sb3I6KV0gCi0gICAgICAgICAgICAgICAgICB3aXRoVW5kb0Fj
dGlvbjpFZGl0QWN0aW9uU2V0Q29sb3JdOwotfQotCi0tICh2b2lkKV9jaGFuZ2VXb3JkQ2FzZVdp
dGhTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0g
ICAgW3NlbGYgc2VsZWN0V29yZDpuaWxdOwotICAgIE5TU3RyaW5nICp3b3JkID0gW1tmcmFtZSBf
c2VsZWN0ZWRTdHJpbmddIHBlcmZvcm1TZWxlY3RvcjpzZWxlY3Rvcl07Ci0gICAgLy8gRklYTUU6
IERvZXMgdGhpcyBuZWVkIGEgZGlmZmVyZW50IGFjdGlvbiBjb250ZXh0IG90aGVyIHRoYW4gInR5
cGVkIj8KLSAgICBpZiAoW3NlbGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3b3Jk
IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rpb25UeXBlZF0pCi0gICAgICAgIFtmcmFtZSBf
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OndvcmQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRS
ZXBsYWNlOk5PXTsKLX0KLQotLSAodm9pZCl1cHBlcmNhc2VXb3JkOihpZClzZW5kZXIKLXsKLSAg
ICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0
b3I6QHNlbGVjdG9yKHVwcGVyY2FzZVN0cmluZyldOwotfQotCi0tICh2b2lkKWxvd2VyY2FzZVdv
cmQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFu
Z2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IobG93ZXJjYXNlU3RyaW5nKV07Ci19Ci0K
LS0gKHZvaWQpY2FwaXRhbGl6ZVdvcmQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9H
VUUKLQotICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IoY2Fw
aXRhbGl6ZWRTdHJpbmcpXTsKLX0KLQotLSAodm9pZCljb21wbGV0ZTooaWQpc2VuZGVyCi17Ci0g
ICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIV9wcml2YXRlLT5jb21wQ29udHJvbGxlcikKLSAgICAgICAgX3By
aXZhdGUtPmNvbXBDb250cm9sbGVyID0gW1tXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIGFsbG9j
XSBpbml0V2l0aEhUTUxWaWV3OnNlbGZdOwotICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIg
ZG9Db21wbGV0aW9uXTsKLX0KLQotLSAodm9pZCljaGVja1NwZWxsaW5nOihpZClzZW5kZXIKLXsK
LSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZygpOwotfQotCi0tICh2b2lkKXNob3dHdWVzc1BhbmVsOihpZClzZW5kZXIK
LXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9
IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOwotICAgIGlmICghY2hlY2tlcikg
ewotICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgTlNQYW5lbCAqc3BlbGxpbmdQYW5lbCA9IFtjaGVja2VyIHNw
ZWxsaW5nUGFuZWxdOwotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIC8vIFBvc3QtVGln
ZXIsIHRoaXMgbWVudSBpdGVtIGlzIGEgc2hvdy9oaWRlIHRvZ2dsZSwgdG8gbWF0Y2ggQXBwS2l0
LiBMZWF2ZSBUaWdlciBiZWhhdmlvciBhbG9uZQotICAgIC8vIHRvIG1hdGNoIHJlc3Qgb2YgT1Mg
WC4KLSAgICBpZiAoW3NwZWxsaW5nUGFuZWwgaXNWaXNpYmxlXSkgewotICAgICAgICBbc3BlbGxp
bmdQYW5lbCBvcmRlck91dDpzZW5kZXJdOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlm
Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQot
ICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcodHJ1
ZSk7Ci0gICAgW3NwZWxsaW5nUGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOwotfQotCi0tICh2b2lk
KV9jaGFuZ2VTcGVsbGluZ1RvV29yZDooTlNTdHJpbmcgKiluZXdXb3JkCi17Ci0gICAgaWYgKCFb
c2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERvbid0IGNvcnJlY3Qg
dG8gZW1wdHkgc3RyaW5nLiAgKEFwcEtpdCBjaGVja2VkIHRoaXMsIHdlIG1pZ2h0IGFzIHdlbGwg
dG9vLikKLSAgICBpZiAoIVtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiTm8gTlNTcGVsbENoZWNrZXIiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBpZiAoW25ld1dvcmQgaXNFcXVhbFRvU3RyaW5nOkAiIl0pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0Om5ld1dvcmQgZ2l2ZW5BY3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCi0gICAg
ICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3V29yZCBzZWxl
Y3RSZXBsYWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKLX0KLQotLSAodm9pZCljaGFuZ2VT
cGVsbGluZzooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgW3NlbGYg
X2NoYW5nZVNwZWxsaW5nVG9Xb3JkOltbc2VuZGVyIHNlbGVjdGVkQ2VsbF0gc3RyaW5nVmFsdWVd
XTsKLX0KLQotLSAodm9pZClwZXJmb3JtRmluZFBhbmVsQWN0aW9uOihpZClzZW5kZXIKLXsKLSAg
ICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICAvLyBJbXBsZW1lbnRpbmcgdGhpcyB3aWxsIHByb2Jh
Ymx5IHJlcXVpcmUgY29weWluZyBhbGwgb2YgTlNGaW5kUGFuZWwuaCBhbmQgLm0uCi0gICAgLy8g
V2UgbmVlZCAqYWxtb3N0KiB0aGUgc2FtZSB0aGluZyBhcyBBcHBLaXQsIGJ1dCBub3QgcXVpdGUu
Ci0gICAgTE9HX0VSUk9SKCJ1bmltcGxlbWVudGVkIik7Ci19Ci0KLS0gKHZvaWQpc3RhcnRTcGVh
a2luZzooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgV2ViRnJhbWUg
KmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICBET01SYW5nZSAqcmFuZ2UgPSBbc2VsZiBfc2Vs
ZWN0ZWRSYW5nZV07Ci0gICAgaWYgKCFyYW5nZSB8fCBbcmFuZ2UgY29sbGFwc2VkXSkKLSAgICAg
ICAgcmFuZ2UgPSBbc2VsZiBfZG9jdW1lbnRSYW5nZV07Ci0gICAgW05TQXBwIHNwZWFrU3RyaW5n
OltmcmFtZSBfc3RyaW5nRm9yUmFuZ2U6cmFuZ2VdXTsKLX0KLQotLSAodm9pZClzdG9wU3BlYWtp
bmc6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtOU0FwcCBzdG9w
U3BlYWtpbmc6c2VuZGVyXTsKLX0KLQotLSAodm9pZCl0b2dnbGVCYXNlV3JpdGluZ0RpcmVjdGlv
bjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBf
Y2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgV3JpdGluZ0RpcmVjdGlvbiBkaXJlY3Rpb24gPSBSaWdodFRvTGVmdFdyaXRpbmdE
aXJlY3Rpb247Ci0gICAgc3dpdGNoIChjb3JlRnJhbWUtPmJhc2VXcml0aW5nRGlyZWN0aW9uRm9y
U2VsZWN0aW9uU3RhcnQoKSkgewotICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRU
b1JpZ2h0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQ6Ci0gICAgICAgICAgICBkaXJlY3Rpb24gPSBMZWZ0VG9SaWdodFdyaXRp
bmdEaXJlY3Rpb247Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhlIHdyaXRpbmdE
aXJlY3Rpb25Gb3JTZWxlY3Rpb25TdGFydCBtZXRob2Qgd2lsbCBuZXZlciByZXR1cm4gIm5hdHVy
YWwiLiBJdAotICAgICAgICAvLyB3aWxsIGFsd2F5cyByZXR1cm4gYSBjb25jcmV0ZSBkaXJlY3Rp
b24uIFNvLCBrZWVwIHRoZSBjb21waWxlciBoYXBweSwgYW5kIGFzc2VydCBub3QgcmVhY2hlZC4K
LSAgICAgICAgY2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsOgotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAo
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbik7Ci19Ci0KLS0g
KHZvaWQpY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb246KGlkKXNlbmRlcgotewotICAgIENPTU1B
TkRfUFJPTE9HVUUKLQotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgTlNXcml0aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBzdGF0aWNf
Y2FzdDxOU1dyaXRpbmdEaXJlY3Rpb24+KFtzZW5kZXIgdGFnXSk7Ci0gICAgCi0gICAgLy8gV2Ug
ZGlzYWJsZSB0aGUgbWVudSBpdGVtIHRoYXQgcGVyZm9ybXMgdGhpcyBhY3Rpb24gYmVjYXVzZSB3
ZSBjYW4ndCBpbXBsZW1lbnQKLSAgICAvLyBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsJ3MgYmVo
YXZpb3IgdXNpbmcgQ1NTLgotICAgIEFTU0VSVCh3cml0aW5nRGlyZWN0aW9uICE9IE5TV3JpdGlu
Z0RpcmVjdGlvbk5hdHVyYWwpOwotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGlu
Z0RpcmVjdGlvbih3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0ID8gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uIDogUmlnaHRUb0xlZnRXcml0aW5nRGly
ZWN0aW9uKTsKLX0KLQotc3RhdGljIEJPT0wgd3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzRW5h
YmxlZCgpCi17Ci0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCi0gICAgcmV0dXJuIFlFUzsKLSNlbHNlCi0gICAgTlNVc2VyRGVm
YXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsK
LSAgICByZXR1cm4gW2RlZmF1bHRzIGJvb2xGb3JLZXk6QCJOU0FsbG93c0Jhc2VXcml0aW5nRGly
ZWN0aW9uS2V5QmluZGluZ3MiXSB8fCBbZGVmYXVsdHMgYm9vbEZvcktleTpAIkFwcGxlVGV4dERp
cmVjdGlvbiJdOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0
aW9uVG86KE5TV3JpdGluZ0RpcmVjdGlvbilkaXJlY3Rpb24KLXsKLSAgICBpZiAoIVtzZWxmIF9j
YW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RhdGljIEJPT0wgYmluZGluZ3NFbmFi
bGVkID0gd3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzRW5hYmxlZCgpOwotCi0gICAgaWYgKCFi
aW5kaW5nc0VuYWJsZWQpIHsKLSAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCi0g
ICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKGRpcmVj
dGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/IExlZnRUb1JpZ2h0V3JpdGlu
Z0RpcmVjdGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbik7Ci19Ci0KLS0gKHZvaWQp
bWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6KGlkKXNlbmRlcgotewotICAgIENP
TU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRv
Ok5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0XTsKLX0KLQotLSAodm9pZCltYWtlQmFzZVdy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9M
T0dVRQotCi0gICAgW3NlbGYgX2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86TlNXcml0aW5n
RGlyZWN0aW9uUmlnaHRUb0xlZnRdOwotfQotCi0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotLSAodm9pZCljaGFuZ2VCYXNlV3Jp
dGluZ0RpcmVjdGlvblRvTFRSOihpZClzZW5kZXIKLXsKLSAgICBbc2VsZiBtYWtlQmFzZVdyaXRp
bmdEaXJlY3Rpb25MZWZ0VG9SaWdodDpzZW5kZXJdOwotfQotCi0tICh2b2lkKWNoYW5nZUJhc2VX
cml0aW5nRGlyZWN0aW9uVG9SVEw6KGlkKXNlbmRlcgotewotICAgIFtzZWxmIG1ha2VCYXNlV3Jp
dGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OnNlbmRlcl07Ci19Ci0jZW5kaWYKLQotLSAodm9pZClt
YWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25OYXR1cmFsOihpZClzZW5kZXIKLXsKLSAgICBMT0dfRVJS
T1IoIlNlbnQgZnJvbSAlQC4iLCBzZW5kZXIpOwotfQotCi0jaWYgMAotCi0vLyBDU1MgZG9lcyBu
b3QgaGF2ZSBhIHdheSB0byBzcGVjaWZ5IGFuIG91dGxpbmUgZm9udCwgd2hpY2ggbWF5IG1ha2Ug
dGhpcyBkaWZmaWN1bHQgdG8gaW1wbGVtZW50LgotLy8gTWF5YmUgYSBzcGVjaWFsIGNhc2Ugb2Yg
dGV4dC1zaGFkb3c/Ci0tICh2b2lkKW91dGxpbmU6KGlkKXNlbmRlcjsKLQotLy8gVGhpcyBpcyBw
YXJ0IG9mIHRhYmxlIHN1cHBvcnQsIHdoaWNoIG1heSBiZSBpbiBOU1RleHRWaWV3IGZvciBUaWdl
ci4KLS8vIEl0J3MgcHJvYmFibHkgc2ltcGxlIHRvIGRvIHRoZSBlcXVpdmFsZW50IHRoaW5nIGZv
ciBXZWJLaXQuCi0tICh2b2lkKWluc2VydFRhYmxlOihpZClzZW5kZXI7Ci0KLS8vIFRoaXMgY291
bGQgYmUgaW1wb3J0YW50LgotLSAodm9pZCl0b2dnbGVUcmFkaXRpb25hbENoYXJhY3RlclNoYXBl
OihpZClzZW5kZXI7Ci0KLS8vIEknbSBub3Qgc3VyZSB3aGF0IHRoZSBlcXVpdmFsZW50cyBvZiB0
aGVzZSBpbiB0aGUgd2ViIHdvcmxkIGFyZS4KLS0gKHZvaWQpaW5zZXJ0TGluZVNlcGFyYXRvcjoo
aWQpc2VuZGVyOwotLSAodm9pZClpbnNlcnRQYWdlQnJlYWs6KGlkKXNlbmRlcjsKLQotLy8gVGhl
c2UgbWV0aG9kcyBhcmUgbm90IGltcGxlbWVudGVkIGluIE5TVGV4dFZpZXcgeWV0IGF0IHRoZSB0
aW1lIG9mIHRoaXMgd3JpdGluZy4KLS0gKHZvaWQpY2hhbmdlQ2FzZU9mTGV0dGVyOihpZClzZW5k
ZXI7Ci0tICh2b2lkKXRyYW5zcG9zZVdvcmRzOihpZClzZW5kZXI7Ci0KLSNlbmRpZgotCi0jaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLS8vIE92ZXJyaWRlIHRoaXMgc28gdGhhdCBBcHBLaXQg
d2lsbCBzZW5kIHVzIGFycm93IGtleXMgYXMga2V5IGRvd24gZXZlbnRzIHNvIHdlIGNhbgotLy8g
c3VwcG9ydCB0aGVtIHZpYSB0aGUga2V5IGJpbmRpbmdzIG1lY2hhbmlzbS4KLS0gKEJPT0wpX3dh
bnRzS2V5RG93bkZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBib29sIGhhdmVXZWJD
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZy
YW1lLCBvdXIga2V5RG93biBtZXRob2Qgd2lsbCBoYW5kbGUga2V5IGJpbmRpbmdzIGFmdGVyIHNl
bmRpbmcKLSAgICAvLyB0aGUgZXZlbnQgdGhyb3VnaCB0aGUgRE9NLCBzbyBhc2sgQXBwS2l0IG5v
dCB0byBkbyBpdHMgZWFybHkgc3BlY2lhbCBrZXkgYmluZGluZwotICAgIC8vIG1hcHBpbmcuIElm
IHdlIGRvbid0IGhhdmUgYSBmcmFtZSwganVzdCBsZXQgdGhpbmdzIHdvcmsgdGhlIG5vcm1hbCB3
YXkgd2l0aG91dAotICAgIC8vIGEga2V5RG93bi4KLSAgICByZXR1cm4gaGF2ZVdlYkNvcmVGcmFt
ZTsKLX0KLQotI2Vsc2UKLQotLy8gU3VwZXItaGFjayBhbGVydC4KLS8vIEFsbCB0aGlzIGNvZGUg
YWNjb21wbGlzaGVzIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBfd2FudHNLZXlEb3duRm9yRXZlbnQg
bWV0aG9kIGFib3ZlLgotCi0vLyBSZXR1cm5zIGEgc2VsZWN0b3Igb25seSBpZiBjYWxsZWQgd2hp
bGU6Ci0vLyAgIDEpIGZpcnN0IHJlc3BvbmRlciBpcyBzZWxmCi0vLyAgIDIpIGhhbmRsaW5nIGEg
a2V5IGRvd24gZXZlbnQKLS8vICAgMykgbm90IHlldCBpbnNpZGUga2V5RG93bjogbWV0aG9kCi0v
LyAgIDQpIGtleSBpcyBhbiBhcnJvdyBrZXkKLS8vIFRoZSBzZWxlY3RvciBpcyB0aGUgb25lIHRo
YXQgZ2V0cyBzZW50IGJ5IC1bTlNXaW5kb3cgX3Byb2Nlc3NLZXlib2FyZFVJS2V5XSBmb3IgdGhp
cyBrZXkuCi0tIChTRUwpX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcK
LXsKLSAgICBOU1dpbmRvdyAqdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgaWYgKFt3IGZpcnN0UmVz
cG9uZGVyXSAhPSBzZWxmKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBOU0V2ZW50ICplID0g
W3cgY3VycmVudEV2ZW50XTsKLSAgICBpZiAoW2UgdHlwZV0gIT0gTlNLZXlEb3duKQotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZSA9PSBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50KQotICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICBOU1N0cmluZyAqcyA9IFtlIGNoYXJhY3RlcnNJZ25vcmlu
Z01vZGlmaWVyc107Ci0gICAgaWYgKFtzIGxlbmd0aF0gPT0gMCkKLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgc3dpdGNoIChbcyBjaGFyYWN0ZXJBdEluZGV4OjBdKSB7Ci0gICAgICAgIGNhc2Ug
TlNEb3duQXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92
ZURvd246KTsKLSAgICAgICAgY2FzZSBOU0xlZnRBcnJvd0Z1bmN0aW9uS2V5OgotICAgICAgICAg
ICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlTGVmdDopOwotICAgICAgICBjYXNlIE5TUmlnaHRBcnJv
d0Z1bmN0aW9uS2V5OgotICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlUmlnaHQ6KTsK
LSAgICAgICAgY2FzZSBOU1VwQXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAgIHJldHVybiBA
c2VsZWN0b3IobW92ZVVwOik7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICB9Ci19Ci0KLS8vIFJldHVybnMgTk8gaW5zdGVhZCBvZiBZRVMgaWYgY2FsbGVk
IG9uIHRoZSBzZWxlY3RvciB0aGF0IHRoZQotLy8gX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJ
ZlByZXByb2Nlc3NpbmcgbWV0aG9kIHJldHVybnMuCi0vLyBUaGlzIHNob3VsZCBvbmx5IGhhcHBl
biBpbnNpZGUgLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJkVUlLZXldLAotLy8gYW5kIHRvZ2V0
aGVyIHdpdGggdGhlIGNoYW5nZSBiZWxvdyBzaG91bGQgY2F1c2UgdGhhdCBtZXRob2QKLS8vIHRv
IHJldHVybiBOTyByYXRoZXIgdGhhbiBoYW5kbGluZyB0aGUga2V5LgotLy8gQWxzbyBzZXQgYSAx
LXNob3QgZmxhZyBmb3IgdGhlIG5leHRSZXNwb25kZXIgY2hlY2sgYmVsb3cuCi0tIChCT09MKXJl
c3BvbmRzVG9TZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgaWYgKCFbc3VwZXIgcmVzcG9u
ZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAgIFNFTCBhcnJv
d0tleVNlbGVjdG9yID0gW3NlbGYgX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nl
c3NpbmddOwotICAgIGlmIChzZWxlY3RvciAhPSBhcnJvd0tleVNlbGVjdG9yKQotICAgICAgICBy
ZXR1cm4gWUVTOwotICAgIF9wcml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlID0gWUVT
OwotICAgIHJldHVybiBOTzsKLX0KLQotLy8gUmV0dXJucyBuaWwgaW5zdGVhZCBvZiB0aGUgbmV4
dCByZXNwb25kZXIgaWYgY2FsbGVkIHdoZW4gdGhlCi0vLyBvbmUtc2hvdCBmbGFnIGlzIHNldCwg
YW5kIF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nCi0vLyByZXR1cm5z
IHNvbWV0aGluZyBvdGhlciB0aGFuIE5VTEwuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGluc2lk
ZQotLy8gLVtOU1dpbmRvdyBfcHJvY2Vzc0tleWJvYXJkVUlLZXldIGFuZCB0b2dldGhlciB3aXRo
IHRoZSBjaGFuZ2UgYWJvdmUKLS8vIHNob3VsZCBjYXVzZSB0aGF0IG1ldGhvZCB0byByZXR1cm4g
Tk8gcmF0aGVyIHRoYW4gaGFuZGxpbmcgdGhlIGtleS4KLS0gKE5TUmVzcG9uZGVyICopbmV4dFJl
c3BvbmRlcgotewotICAgIEJPT0wgZGlzYWJsZWQgPSBfcHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRp
c2FibGVkT25jZTsKLSAgICBfcHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZSA9IE5P
OwotICAgIGlmIChkaXNhYmxlZCAmJiBbc2VsZiBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3Rvcklm
UHJlcHJvY2Vzc2luZ10gIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
W3N1cGVyIG5leHRSZXNwb25kZXJdOwotfQotCi0jZW5kaWYKLQotLSAodm9pZClfdXBkYXRlQ29u
dHJvbFRpbnRzCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJh
bWUtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICB2aWV3LT51
cGRhdGVDb250cm9sVGludHMoKTsKLX0KLQotLy8gRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBpcyBj
YWxsZWQgYXQgZGlmZmVyZW50IHRpbWVzIHRoYW4gd2luZG93RGlkQmVjb21lS2V5IGlzLgotLy8g
SXQgdGFrZXMgaW50byBhY2NvdW50IGFsbCB0aGUgb3RoZXIgZmFjdG9ycyB0aGF0IGRldGVybWlu
ZSB3aGVuIE5TQ2VsbCBkcmF3cwotLy8gd2l0aCBkaWZmZXJlbnQgdGludHMsIHNvIGl0J3MgdGhl
IHJpZ2h0IGNhbGwgdG8gdXNlIGZvciBjb250cm9sIHRpbnRzLiBXZSdkIHByZWZlcgotLy8gdG8g
ZG8gdGhpcyB3aXRoIEFQSS4gPHJkYXI6Ly9wcm9ibGVtLzUxMzY3NjA+Ci0tICh2b2lkKV93aW5k
b3dDaGFuZ2VkS2V5U3RhdGUKLXsKLSAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCi0gICAgICAg
IFtzZWxmIF91cGRhdGVDb250cm9sVGludHNdOwotICAgIGVsc2UKLSAgICAgICAgW3NlbGYgcGVy
Zm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOkBzZWxlY3RvcihfdXBkYXRlQ29udHJvbFRpbnRzKSB3
aXRoT2JqZWN0Om5pbCB3YWl0VW50aWxEb25lOk5PXTsKLQotICAgIFtzdXBlciBfd2luZG93Q2hh
bmdlZEtleVN0YXRlXTsKLX0KLQotLSAodm9pZClvdGhlck1vdXNlRG93bjooTlNFdmVudCAqKWV2
ZW50Ci17Ci0gICAgaWYgKFtldmVudCBidXR0b25OdW1iZXJdID09IDIpCi0gICAgICAgIFtzZWxm
IG1vdXNlRG93bjpldmVudF07Ci0gICAgZWxzZQotICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZURv
d246ZXZlbnRdOwotfQotCi0tICh2b2lkKW90aGVyTW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKLSAgICAgICAgW3NlbGYg
bW91c2VEcmFnZ2VkOmV2ZW50XTsKLSAgICBlbHNlCi0gICAgICAgIFtzdXBlciBvdGhlck1vdXNl
RHJhZ2dlZDpldmVudF07Ci19Ci0KLS0gKHZvaWQpb3RoZXJNb3VzZVVwOihOU0V2ZW50ICopZXZl
bnQKLXsKLSAgICBpZiAoW2V2ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKLSAgICAgICAgW3NlbGYg
bW91c2VVcDpldmVudF07Ci0gICAgZWxzZQotICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZVVwOmV2
ZW50XTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNBcnJheSAoV2ViSFRNTFZpZXcp
Ci0KLS0gKHZvaWQpX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxl
Y3RvciB3aXRoT2JqZWN0OihpZClvYmplY3QKLXsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKLSAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3IgPSBbc2VsZiBvYmplY3RFbnVtZXJh
dG9yXTsKLSAgICBXZWJOZXRzY2FwZVBsdWdpblZpZXcgKnZpZXc7Ci0gICAgd2hpbGUgKCh2aWV3
ID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkKLSAgICAgICAgaWYgKFt2aWV3IGlz
S2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkKLSAgICAgICAg
ICAgIFt2aWV3IHBlcmZvcm1TZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0Om9iamVjdF07Ci0j
ZW5kaWYKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkludGVy
bmFsKQotCi0tICh2b2lkKV9zZWxlY3Rpb25DaGFuZ2VkCi17Ci0gICAgW3NlbGYgX3VwZGF0ZVNl
bGVjdGlvbkZvcklucHV0TWFuYWdlcl07Ci0gICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07Ci0g
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBj
b3JlRnJhbWUtPmVkaXRvcigpLT5zZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UodHJ1ZSk7Ci19
Ci0KLS0gKHZvaWQpX3VwZGF0ZUZvbnRQYW5lbAotewotICAgIC8vIEZJWE1FOiBOU1RleHRWaWV3
IGJhaWxzIG91dCBpZiBiZWNvbWluZyBvciByZXNpZ25pbmcgZmlyc3QgcmVzcG9uZGVyLCBmb3Ig
d2hpY2ggaXQgaGFzIGl2YXIgZmxhZ3MuIE5vdAotICAgIC8vIHN1cmUgaWYgd2UgbmVlZCB0byBk
byBzb21ldGhpbmcgc2ltaWxhci4KLSAgICAKLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3dd
OwotICAgIC8vIEZJWE1FOiBpcyB0aGlzIGZpcnN0LXJlc3BvbmRlciBjaGVjayBjb3JyZWN0PyBX
aGF0IGhhcHBlbnMgaWYgYSBzdWJmcmFtZSBpcyBlZGl0YWJsZSBhbmQgaXMgZmlyc3QgcmVzcG9u
ZGVyPwotICAgIGlmIChbTlNBcHAga2V5V2luZG93XSAhPSB3aW5kb3cgfHwgW3dpbmRvdyBmaXJz
dFJlc3BvbmRlcl0gIT0gc2VsZikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGJvb2wgbXVs
dGlwbGVGb250cyA9IGZhbHNlOwotICAgIE5TRm9udCAqZm9udCA9IG5pbDsKLSAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKLSAgICAgICAgaWYgKGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZvbnRGb3JTZWxlY3Rp
b24obXVsdGlwbGVGb250cykpCi0gICAgICAgICAgICBmb250ID0gZmQtPmdldE5TRm9udCgpOwot
ICAgIH0KLSAgICAKLQotICAgIC8vIEZJWE1FOiBmb3Igbm93LCByZXR1cm4gYSBib2d1cyBmb250
IHRoYXQgZGlzdGluZ3Vpc2hlcyB0aGUgZW1wdHkgc2VsZWN0aW9uIGZyb20gdGhlIG5vbi1lbXB0
eQotICAgIC8vIHNlbGVjdGlvbi4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgb25j
ZSB0aGUgcmVzdCBvZiB0aGlzIGNvZGUgd29ya3MgcHJvcGVybHkuCi0gICAgaWYgKGZvbnQgPT0g
bmlsKQotICAgICAgICBmb250ID0gW3NlbGYgX2hhc1NlbGVjdGlvbl0gPyBbTlNGb250IG1lbnVG
b250T2ZTaXplOjIzXSA6IFtOU0ZvbnQgdG9vbFRpcHNGb250T2ZTaXplOjE3XTsKLSAgICBBU1NF
UlQoZm9udCAhPSBuaWwpOwotCi0gICAgW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2Vy
XSBzZXRTZWxlY3RlZEZvbnQ6Zm9udCBpc011bHRpcGxlOm11bHRpcGxlRm9udHNdOwotCi0gICAg
Ly8gRklYTUU6IHdlIGRvbid0IGtlZXAgdHJhY2sgb2Ygc2VsZWN0ZWQgYXR0cmlidXRlcywgb3Ig
c2V0IHRoZW0gb24gdGhlIGZvbnQgcGFuZWwuIFRoaXMKLSAgICAvLyBhcHBlYXJzIHRvIGhhdmUg
bm8gZWZmZWN0IG9uIHRoZSBVSS4gRS5nLiwgdW5kZXJsaW5lZCB0ZXh0IGluIE1haWwgb3IgVGV4
dEVkaXQgaXMKLSAgICAvLyBub3QgcmVmbGVjdGVkIGluIHRoZSBmb250IHBhbmVsLiBNYXliZSBz
b21lZGF5IHRoaXMgd2lsbCBjaGFuZ2UuCi19Ci0KLS0gKEJPT0wpX2NhblNtYXJ0Q29weU9yRGVs
ZXRlCi17Ci0gICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZF0pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9u
R3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHk7Ci19Ci0KLS0gKE5TRXZlbnQgKilfbW91
c2VEb3duRXZlbnQKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50OwotfQot
Ci0tIChpZDxXZWJIVE1MSGlnaGxpZ2h0ZXI+KV9oaWdobGlnaHRlckZvclR5cGU6KE5TU3RyaW5n
Kil0eXBlCi17Ci0gICAgcmV0dXJuIFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIG9iamVjdEZvcktl
eTp0eXBlXTsKLX0KLQotLSAoV2ViRnJhbWUgKilfZnJhbWUKLXsKLSAgICByZXR1cm4gW19wcml2
YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXTsKLX0KLQotLSAodm9pZClwYXN0ZTooaWQpc2VuZGVy
Ci17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBz
ZWxmUHJvdGVjdG9yID0gc2VsZjsKLSAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+dHJ5REhUTUxQYXN0ZSgpKQotICAgICAgICByZXR1
cm47IC8vIERIVE1MIGRpZCB0aGUgd2hvbGUgb3BlcmF0aW9uCi0gICAgaWYgKCFjb3JlRnJhbWUt
PmVkaXRvcigpLT5jYW5QYXN0ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCi0gICAgICAgIFtzZWxm
IF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGFs
bG93UGxhaW5UZXh0OllFU107Ci0gICAgZWxzZQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigp
LT5wYXN0ZUFzUGxhaW5UZXh0KCk7Ci19Ci0KLS0gKHZvaWQpcGFzdGVBc1BsYWluVGV4dDooaWQp
c2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKCFbc2VsZiBfY2FuRWRp
dF0pCi0gICAgICAgIHJldHVybjsKLSAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdXTsKLX0KLQotLSAodm9pZClj
bG9zZUlmTm90Q3VycmVudFZpZXcKLXsKLSAgICBpZiAoW1tbc2VsZiBfZnJhbWVdIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XSAhPSBzZWxmKQotICAgICAgICBbc2VsZiBjbG9zZV07Ci19Ci0KLS0g
KERPTURvY3VtZW50RnJhZ21lbnQqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50RnJh
Z21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpuaWwgYWxsb3dQbGFpblRl
eHQ6Tk9dOwotfQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLS0gKEJPT0wpaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkCi17Ci0gICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0
aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVz
dCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBoZXJlIGJlY2F1c2UKLSAgICAvLyB0aGUgQXBwS2l0IGNv
ZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCi0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmll
d10gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3
IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3
ZSBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoZSBBcHBL
aXQgY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICBbW3NlbGYgX3dlYlZpZXdd
IHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlR3Jh
bW1hckNoZWNraW5nOihpZClzZW5kZXIKLXsKLSAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3
IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3
ZSBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQotICAgIC8vIHRoZSBBcHBL
aXQgY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KLSAgICBbW3NlbGYgX3dlYlZpZXdd
IHRvZ2dsZUdyYW1tYXJDaGVja2luZzpzZW5kZXJdOwotfQotCi0KLXN0YXRpYyBDR1BvaW50IGNv
cmVHcmFwaGljc1NjcmVlblBvaW50Rm9yQXBwS2l0U2NyZWVuUG9pbnQoTlNQb2ludCBwb2ludCkK
LXsKLSAgICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2NyZWVuIHNjcmVlbnNdOwotICAgIAotICAg
IGlmIChbc2NyZWVucyBjb3VudF0gPT0gMCkgewotICAgICAgICAvLyBZb3UgY291bGQgdGhlb3Jl
dGljYWxseSBnZXQgaGVyZSBpZiBydW5uaW5nIHdpdGggbm8gbW9uaXRvciwgaW4gd2hpY2ggY2Fz
ZSBpdCBkb2Vzbid0IG1hdHRlcgotICAgICAgICAvLyBtdWNoIHdoZXJlIHRoZSAib24tc2NyZWVu
IiBwb2ludCBpcy4KLSAgICAgICAgcmV0dXJuIENHUG9pbnRNYWtlKHBvaW50LngsIHBvaW50Lnkp
OwotICAgIH0KLSAgICAKLSAgICAvLyBGbGlwIHRoZSB5IGNvb3JkaW5hdGUgZnJvbSB0aGUgdG9w
IG9mIHRoZSBtZW51IGJhciBzY3JlZW4gLS0gc2VlIDQ2MzYzOTAKLSAgICByZXR1cm4gQ0dQb2lu
dE1ha2UocG9pbnQueCwgTlNNYXhZKFtbc2NyZWVucyBvYmplY3RBdEluZGV4OjBdIGZyYW1lXSkg
LSBwb2ludC55KTsKLX0KLQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLQotLSAodm9pZClvcmRlckZyb250
U3Vic3RpdHV0aW9uc1BhbmVsOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0K
LSAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVs
bENoZWNrZXJdOwotICAgIGlmICghY2hlY2tlcikgewotICAgICAgICBMT0dfRVJST1IoIk5vIE5T
U3BlbGxDaGVja2VyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTlNQYW5l
bCAqc3Vic3RpdHV0aW9uc1BhbmVsID0gW2NoZWNrZXIgc3Vic3RpdHV0aW9uc1BhbmVsXTsKLSAg
ICBpZiAoW3N1YnN0aXR1dGlvbnNQYW5lbCBpc1Zpc2libGVdKSB7Ci0gICAgICAgIFtzdWJzdGl0
dXRpb25zUGFuZWwgb3JkZXJPdXQ6c2VuZGVyXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBbc3Vic3RpdHV0aW9uc1BhbmVsIG9yZGVyRnJvbnQ6c2VuZGVyXTsKLX0KLQotLy8gRklYTUUg
NDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBsb2dpYywgYnV0IHdl
IG11c3QgaW1wbGVtZW50IHRoZXNlIG1ldGhvZHMgaGVyZSBiZWNhdXNlCi0vLyB0aGUgQXBwS2l0
IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCi0KLS0gKEJPT0wpc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6
KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0U21hcnRJbnNlcnREZWxldGVF
bmFibGVkOmZsYWddOwotfQotCi0tICh2b2lkKXRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOihpZClz
ZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOnNl
bmRlcl07Ci19Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQK
LXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZF07Ci19Ci0KLS0gKHZvaWQpc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25F
bmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1F1
b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0b2dnbGVBdXRvbWF0
aWNRdW90ZVN1YnN0aXR1dGlvbjooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0
b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjpzZW5kZXJdOwotfQotCi0tIChCT09MKWlz
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJW
aWV3XSBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRB
dXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW1tzZWxmIF93
ZWJWaWV3XSBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAo
dm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBbW3Nl
bGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246c2VuZGVyXTsKLX0KLQot
LSAoQk9PTClpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJu
IFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZF07Ci19
Ci0KLS0gKHZvaWQpc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxh
ZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bjooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNEYXNo
U3Vic3RpdHV0aW9uOnNlbmRlcl07Ci19Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNUZXh0UmVwbGFj
ZW1lbnRFbmFibGVkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRFbmFibGVkXTsKLX0KLQotLSAodm9pZClzZXRBdXRvbWF0aWNUZXh0UmVw
bGFjZW1lbnRFbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1
dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xl
QXV0b21hdGljVGV4dFJlcGxhY2VtZW50OihpZClzZW5kZXIKLXsKLSAgICBbW3NlbGYgX3dlYlZp
ZXddIHRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDpzZW5kZXJdOwotfQotCi0tIChCT09M
KWlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbW3Nl
bGYgX3dlYlZpZXddIGlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZF07Ci19Ci0K
LS0gKHZvaWQpc2V0QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDooQk9PTClmbGFn
Ci17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkOmZsYWddOwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbjooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb246c2VuZGVyXTsKLX0KLQotI2VuZGlmCi0KLS0gKHZvaWQpX2xvb2tV
cEluRGljdGlvbmFyeUZyb21NZW51OihpZClzZW5kZXIKLXsKLSAgICAvLyBEaWN0aW9uYXJ5IEFQ
SSB3aWxsIGFjY2VwdCBhIHdoaXRlc3BhY2Utb25seSBzdHJpbmcgYW5kIGRpc3BsYXkgVUkgYXMg
aWYgaXQgd2VyZSByZWFsIHRleHQsCi0gICAgLy8gc28gYmFpbCBvdXQgZWFybHkgdG8gYXZvaWQg
dGhhdC4KLSAgICBpZiAoW1tbc2VsZiBzZWxlY3RlZFN0cmluZ10gX3dlYmtpdF9zdHJpbmdCeVRy
aW1taW5nV2hpdGVzcGFjZV0gbGVuZ3RoXSA9PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRT
dHJpbmddOwotCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0g
ICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TUmVjdCByZWN0ID0g
Y29yZUZyYW1lLT5zZWxlY3Rpb25Cb3VuZHMoKTsKLQotI2lmbmRlZiBCVUlMRElOR19PTl9USUdF
UgotICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFthdHRyU3RyaW5nIGZvbnRBdHRyaWJ1
dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLDEpXTsKLSAgICBOU0ZvbnQgKmZvbnQgPSBbYXR0cmli
dXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKGZvbnQpCi0g
ICAgICAgIHJlY3Qub3JpZ2luLnkgKz0gW2ZvbnQgYXNjZW5kZXJdOwotI2VuZGlmCi0KLSNpZiAh
ZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFS
RCkKLSAgICBbc2VsZiBzaG93RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6YXR0clN0cmlu
ZyBhdFBvaW50OnJlY3Qub3JpZ2luXTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIC8vIFdl
IHNvZnQgbGluayB0byBnZXQgdGhlIGZ1bmN0aW9uIHRoYXQgZGlzcGxheXMgdGhlIGRpY3Rpb25h
cnkgKGVpdGhlciBwb3AtdXAgd2luZG93IG9yIGFwcCkgdG8gYXZvaWQgdGhlIHBlcmZvcm1hbmNl
Ci0gICAgLy8gcGVuYWx0eSBvZiBsaW5raW5nIHRvIGFub3RoZXIgZnJhbWV3b3JrLiBUaGlzIGZ1
bmN0aW9uIGNoYW5nZWQgc2lnbmF0dXJlIGFzIHdlbGwgYXMgZnJhbWV3b3JrIGJldHdlZW4gVGln
ZXIgYW5kIExlb3BhcmQsCi0gICAgLy8gc28gdGhlIHR3byBjYXNlcyBhcmUgaGFuZGxlZCBzZXBh
cmF0ZWx5LgotCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICB0eXBlZGVmIE9TU3RhdHVz
ICgqU2VydmljZVdpbmRvd1Nob3dGdW5jdGlvbikoaWQgaW5Xb3JkU3RyaW5nLCBOU1JlY3QgaW5X
b3JkQm91bmRhcnksIFVJbnQxNiBpbkxpbmVEaXJlY3Rpb24pOwotICAgIGNvbnN0IGNoYXIgKmZy
YW1ld29ya1BhdGggPSAiL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2
aWNlcy5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9MYW5nQW5hbHlzaXMuZnJhbWV3b3JrL0xhbmdBbmFs
eXNpcyI7Ci0gICAgY29uc3QgY2hhciAqZnVuY3Rpb25OYW1lID0gIkRDTURpY3Rpb25hcnlTZXJ2
aWNlV2luZG93U2hvdyI7Ci0jZWxzZQotICAgIHR5cGVkZWYgdm9pZCAoKlNlcnZpY2VXaW5kb3dT
aG93RnVuY3Rpb24pKGlkIHVudXNlZERpY3Rpb25hcnlSZWYsIGlkIGluV29yZFN0cmluZywgQ0ZS
YW5nZSBzZWxlY3Rpb25SYW5nZSwgaWQgdW51c2VkRm9udCwgQ0dQb2ludCB0ZXh0T3JpZ2luLCBC
b29sZWFuIHZlcnRpY2FsVGV4dCwgaWQgdW51c2VkVHJhbnNmb3JtKTsKLSAgICBjb25zdCBjaGFy
ICpmcmFtZXdvcmtQYXRoID0gIi9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFt
ZXdvcmsvRnJhbWV3b3Jrcy9ISVRvb2xib3guZnJhbWV3b3JrL0hJVG9vbGJveCI7Ci0gICAgY29u
c3QgY2hhciAqZnVuY3Rpb25OYW1lID0gIkhJRGljdGlvbmFyeVdpbmRvd1Nob3ciOwotI2VuZGlm
Ci0KLSAgICBzdGF0aWMgYm9vbCBsb29rZWRGb3JGdW5jdGlvbiA9IGZhbHNlOwotICAgIHN0YXRp
YyBTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyA9
IE5VTEw7Ci0KLSAgICBpZiAoIWxvb2tlZEZvckZ1bmN0aW9uKSB7Ci0gICAgICAgIHZvaWQqIGxh
bmdBbmFseXNpc0ZyYW1ld29yayA9IGRsb3BlbihmcmFtZXdvcmtQYXRoLCBSVExEX0xBWlkpOwot
ICAgICAgICBBU1NFUlQobGFuZ0FuYWx5c2lzRnJhbWV3b3JrKTsKLSAgICAgICAgaWYgKGxhbmdB
bmFseXNpc0ZyYW1ld29yaykKLSAgICAgICAgICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hv
dyA9IChTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uKWRsc3ltKGxhbmdBbmFseXNpc0ZyYW1ld29y
aywgZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgbG9va2VkRm9yRnVuY3Rpb24gPSB0cnVlOwotICAg
IH0KLQotICAgIEFTU0VSVChkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cpOwotICAgIGlmICgh
ZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KSB7Ci0gICAgICAgIE5TTG9nKEAiQ291bGRuJ3Qg
ZmluZCB0aGUgJXMgZnVuY3Rpb24gaW4gJXMiLCBmdW5jdGlvbk5hbWUsIGZyYW1ld29ya1BhdGgp
OyAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0g
ICAgLy8gRklYTUU6IG11c3QgY2hlY2sgZm9yIHJpZ2h0LXRvLWxlZnQgaGVyZQotICAgIE5TV3Jp
dGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRv
UmlnaHQ7Ci0KLSAgICAvLyBGSVhNRTogdGhlIGRpY3Rpb25hcnkgQVBJIGV4cGVjdHMgdGhlIHJl
Y3QgZm9yIHRoZSBmaXJzdCBsaW5lIG9mIHNlbGVjdGlvbi4gUGFzc2luZwotICAgIC8vIHRoZSBy
ZWN0IGZvciB0aGUgZW50aXJlIHNlbGVjdGlvbiwgYXMgd2UgZG8gaGVyZSwgcG9zaXRpb25zIHRo
ZSBwb3AtdXAgd2luZG93IG5lYXIKLSAgICAvLyB0aGUgYm90dG9tIG9mIHRoZSBzZWxlY3Rpb24g
cmF0aGVyIHRoYW4gYXQgdGhlIHNlbGVjdGVkIHdvcmQuCi0gICAgcmVjdCA9IFtzZWxmIGNvbnZl
cnRSZWN0OnJlY3QgdG9WaWV3Om5pbF07Ci0gICAgcmVjdC5vcmlnaW4gPSBbW3NlbGYgd2luZG93
XSBjb252ZXJ0QmFzZVRvU2NyZWVuOnJlY3Qub3JpZ2luXTsKLSAgICBOU0RhdGEgKmRhdGEgPSBb
YXR0clN0cmluZyBSVEZGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJTdHJpbmcgbGVuZ3Ro
XSkgZG9jdW1lbnRBdHRyaWJ1dGVzOm5pbF07Ci0gICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dT
aG93KGRhdGEsIHJlY3QsICh3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvblJp
Z2h0VG9MZWZ0KSA/IDEgOiAwKTsKLSNlbHNlCi0gICAgLy8gVGhlIEhJRGljdGlvbmFyeVdpbmRv
d1Nob3cgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIG9yaWdpbiwgaW4gQ0cgc2NyZWVuIGNvb3JkaW5h
dGVzLCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRleHQgaW4gdGhlIHNlbGVjdGlvbi4KLSAg
ICAvLyBGSVhNRSA0OTQ1ODA4OiBXZSBhcHByb3hpbWF0ZSB0aGlzIGluIGEgd2F5IHRoYXQgd29y
a3Mgd2VsbCB3aGVuIGEgc2luZ2xlIHdvcmQgaXMgc2VsZWN0ZWQsIGFuZCBsZXNzIHdlbGwgaW4g
c29tZSBvdGhlciBjYXNlcwotICAgIC8vIChidXQgbm8gd29yc2UgdGhhbiB3ZSBkaWQgaW4gVGln
ZXIpCi0gICAgTlNQb2ludCB3aW5kb3dQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpyZWN0Lm9y
aWdpbiB0b1ZpZXc6bmlsXTsKLSAgICBOU1BvaW50IHNjcmVlblBvaW50ID0gW1tzZWxmIHdpbmRv
d10gY29udmVydEJhc2VUb1NjcmVlbjp3aW5kb3dQb2ludF07Ci0KLSAgICBkaWN0aW9uYXJ5U2Vy
dmljZVdpbmRvd1Nob3cobmlsLCBhdHRyU3RyaW5nLCBDRlJhbmdlTWFrZSgwLCBbYXR0clN0cmlu
ZyBsZW5ndGhdKSwgbmlsLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZUdy
YXBoaWNzU2NyZWVuUG9pbnRGb3JBcHBLaXRTY3JlZW5Qb2ludChzY3JlZW5Qb2ludCksIGZhbHNl
LCBuaWwpOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpX2hvdmVyRmVlZGJhY2tTdXNwZW5kZWRDaGFu
Z2VkCi17Ci0gICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwotfQotCi0t
IChCT09MKV9pbnRlcmNlcHRFZGl0aW5nS2V5RXZlbnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50IHNo
b3VsZFNhdmVDb21tYW5kOihCT09MKXNob3VsZFNhdmUKLXsKLSAgICAvLyBBc2sgQXBwS2l0IHRv
IHByb2Nlc3MgdGhlIGtleSBldmVudCAtLSBpdCB3aWxsIGNhbGwgYmFjayB3aXRoIGVpdGhlciBp
bnNlcnRUZXh0IG9yIGRvQ29tbWFuZEJ5U2VsZWN0b3IuCi0gICAgV2ViSFRNTFZpZXdJbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5ldmVudFdh
c0hhbmRsZWQgPSBmYWxzZTsKLSAgICBwYXJhbWV0ZXJzLnNob3VsZFNhdmVDb21tYW5kID0gc2hv
dWxkU2F2ZTsKLSAgICAvLyBJZiB3ZSdyZSBpbnRlcmNlcHRpbmcgdGhlIGluaXRpYWwgSU0gY2Fs
bCB3ZSBhc3N1bWUgdGhhdCB0aGUgSU0gaGFzIGNvbnN1bWVkIHRoZSBldmVudCwgCi0gICAgLy8g
YW5kIG9ubHkgY2hhbmdlIHRoaXMgYXNzdW1wdGlvbiBpZiBvbmUgb2YgdGhlIE5TVGV4dElucHV0
L1Jlc3BvbmRlciBjYWxsYmFja3MgaXMgdXNlZC4KLSAgICAvLyBXZSBhc3N1bWUgdGhlIElNIHdp
bGwgKm5vdCogY29uc3VtZSBob3RrZXkgc2VxdWVuY2VzCi0gICAgcGFyYW1ldGVycy5jb25zdW1l
ZEJ5SU0gPSAhZXZlbnQtPm1ldGFLZXkoKSAmJiBzaG91bGRTYXZlOwotCi0gICAgaWYgKGNvbnN0
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgp
KSB7Ci0gICAgICAgIE5TRXZlbnQgKm1hY0V2ZW50ID0gcGxhdGZvcm1FdmVudC0+bWFjRXZlbnQo
KTsKLSAgICAgICAgaWYgKFttYWNFdmVudCB0eXBlXSA9PSBOU0tleURvd24gJiYgW19wcml2YXRl
LT5jb21wQ29udHJvbGxlciBmaWx0ZXJLZXlEb3duOm1hY0V2ZW50XSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKFttYWNFdmVudCB0eXBlXSA9PSBOU0Zs
YWdzQ2hhbmdlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAg
IHBhcmFtZXRlcnMuZXZlbnQgPSBldmVudDsKLSAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnMgPSAmcGFyYW1ldGVyczsKLSAgICAgICAgX3ByaXZhdGUtPnJlY2Vp
dmVkTk9PUCA9IE5POwotICAgICAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29t
bWFuZHMgPSBldmVudC0+a2V5cHJlc3NDb21tYW5kcygpOwotICAgICAgICBib29sIGhhc0tleXBy
ZXNzQ29tbWFuZCA9ICFjb21tYW5kcy5pc0VtcHR5KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IGlu
dGVycHJldEtleUV2ZW50cyBkb2Vzbid0IG1hdGNoIGFwcGxpY2F0aW9uIGtleSBlcXVpdmFsZW50
cyAoc3VjaCBhcyBDbWQrQSksCi0gICAgICAgIC8vIGFuZCBzZW5kcyBub29wOiBmb3IgdGhvc2Uu
IEFzIGEgcmVzdWx0LCB3ZSBkb24ndCBoYW5kbGUgdGhvc2UgZnJvbSB3aXRoaW4gV2ViQ29yZSwK
LSAgICAgICAgLy8gYnV0IHNlbmQgYSBmdWxsIHNlcXVlbmNlIG9mIERPTSBldmVudHMsIGluY2x1
ZGluZyBhbiB1bm5lZWRlZCBrZXlwcmVzcy4KLSAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxk
U2F2ZUNvbW1hbmQgfHwgIWhhc0tleXByZXNzQ29tbWFuZCkKLSAgICAgICAgICAgIFtzZWxmIGlu
dGVycHJldEtleUV2ZW50czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6bWFjRXZlbnRdXTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGNvbW1hbmRzLnNpemUoKTsK
LSAgICAgICAgICAgIC8vIEFyZSB0aGVyZSBjb21tYW5kcyB0aGF0IHdvdWxkIGp1c3QgY2F1c2Ug
dGV4dCBpbnNlcnRpb24gaWYgZXhlY3V0ZWQgdmlhIEVkaXRvcj8KLSAgICAgICAgICAgIC8vIFdl
YktpdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IG1vZGUgdG8gZGVjaWRl
IGhvdyB0aGV5IHNob3VsZCBiZSB0cmVhdGVkLCBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUK
LSAgICAgICAgICAgIC8vIHRvIGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBU
YWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0
ZWQKLSAgICAgICAgICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVy
LCBvciBFbnRlcikuCi0gICAgICAgICAgICBib29sIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMg
PSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpOU1NlbGVj
dG9yRnJvbVN0cmluZyhjb21tYW5kc1tpXS5jb21tYW5kTmFtZSldLmlzVGV4dEluc2VydGlvbigp
KQotICAgICAgICAgICAgICAgICAgICBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaGF2ZVRleHRJbnNlcnRpb25Db21tYW5k
cyB8fCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFy
KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lID09ICJpbnNl
cnRUZXh0OiIpCi0gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZiBpbnNlcnRUZXh0OmNvbW1h
bmRzW2ldLnRleHRdOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBbc2VsZiBkb0NvbW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKGNv
bW1hbmRzW2ldLmNvbW1hbmROYW1lKV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuICghX3ByaXZhdGUtPnJlY2VpdmVkTk9PUCAmJiBw
YXJhbWV0ZXJzLmV2ZW50V2FzSGFuZGxlZCkgfHwgcGFyYW1ldGVycy5jb25zdW1lZEJ5SU07Ci19
Ci0KLS0gKFdlYkNvcmU6OkNhY2hlZEltYWdlKilwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZQot
ewotICAgIHJldHVybiBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U7Ci19Ci0K
LS0gKHZvaWQpc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6KFdlYkNvcmU6OkNhY2hlZElt
YWdlKilzb3VyY2UKLXsKLSAgICBpZiAoc291cmNlKQotICAgICAgICBzb3VyY2UtPmFkZENsaWVu
dChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0gICAgCi0gICAgaWYgKF9wcml2YXRlLT5wcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZSkKLSAgICAgICAgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwotICAgIF9wcml2
YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSA9IHNvdXJjZTsKLX0KLQotI3VuZGVmIENP
TU1BTkRfUFJPTE9HVUUKLQotLSAodm9pZClfbGF5b3V0SWZOZWVkZWQKLXsKLSAgICBBU1NFUlQo
IV9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRlKTsKLQotICAgIGlmIChfcHJpdmF0ZS0+bmVlZHNU
b0FwcGx5U3R5bGVzIHx8IFtzZWxmIF9uZWVkc0xheW91dF0pCi0gICAgICAgIFtzZWxmIGxheW91
dF07Ci19Ci0KLS0gKHZvaWQpX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZQotewotICAgIFtz
ZWxmIF9sYXlvdXRJZk5lZWRlZF07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVu
dW1lcmF0aW5nU3Vidmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFycmF5ICpk
ZXNjZW5kYW50V2ViSFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0K
LSAgICBbc2VsZiBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRh
bnRXZWJIVE1MVmlld3NdOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhU
TUxWaWV3cyBjb3VudF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIFtbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9sYXlv
dXRJZk5lZWRlZF07Ci0KLSAgICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQot
I2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwot
I2VuZGlmCi19Ci0KLS0gKHZvaWQpIF9kZXN0cm95QWxsV2ViUGx1Z2lucwotewotICAgIFtbc2Vs
ZiBfcGx1Z2luQ29udHJvbGxlcl0gZGVzdHJveUFsbFBsdWdpbnNdOwotfQotCi0tIChCT09MKV9p
c1Jlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5yZXNpZ25p
bmdGaXJzdFJlc3BvbmRlcjsKLX0KLQotLSAoQk9PTClfbmVlZHNMYXlvdXQKLXsKLSAgICByZXR1
cm4gW1tzZWxmIF9mcmFtZV0gX25lZWRzTGF5b3V0XTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLS0gKHZvaWQpYXR0YWNoUm9vdExheWVyOihDQUxheWVyKilsYXllcgot
ewotICAgIGlmICghX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKLSAgICAgICAgV2ViTGF5
ZXJIb3N0aW5nVmlldyogaG9zdGluZ1ZpZXcgPSBbW1dlYkxheWVySG9zdGluZ1ZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6W3NlbGYgYm91bmRzXV07Ci0gICAgICAgIFtob3N0aW5nVmlldyBzZXRB
dXRvcmVzaXppbmdNYXNrOihOU1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxl
KV07Ci0gICAgICAgIFtzZWxmIGFkZFN1YnZpZXc6aG9zdGluZ1ZpZXddOwotICAgICAgICBbaG9z
dGluZ1ZpZXcgcmVsZWFzZV07Ci0gICAgICAgIC8vIGhvc3RpbmdWaWV3IGlzIG93bmVkIGJ5IGJl
aW5nIGEgc3VidmlldyBvZiBzZWxmCi0gICAgICAgIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3
ID0gaG9zdGluZ1ZpZXc7Ci0gICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0YXJ0ZWRBY2NlbGVy
YXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci0gICAgfQotCi0gICAgLy8g
TWFrZSBhIGNvbnRhaW5lciBsYXllciwgd2hpY2ggd2lsbCBnZXQgc2l6ZWQvcG9zaXRpb25lZCBi
eSBBcHBLaXQgYW5kIENBCi0gICAgQ0FMYXllciogdmlld0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJd
OwotICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRMYXllcjp2aWV3TGF5ZXJdOwot
ICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRXYW50c0xheWVyOllFU107Ci0gICAg
Ci0gICAgLy8gUGFyZW50IG91ciByb290IGxheWVyIGluIHRoZSBjb250YWluZXIgbGF5ZXIKLSAg
ICBbdmlld0xheWVyIGFkZFN1YmxheWVyOmxheWVyXTsKLX0KLQotLSAodm9pZClkZXRhY2hSb290
TGF5ZXIKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKLSAgICAgICAg
W19wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3IHNldExheWVyOm5pbF07Ci0gICAgICAgIFtfcHJp
dmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBzZXRXYW50c0xheWVyOk5PXTsKLSAgICAgICAgW19wcml2
YXRlLT5sYXllckhvc3RpbmdWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICBfcHJp
dmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyA9IG5pbDsKLSAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBf
c3RvcHBlZEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKLSAg
ICB9Ci19Ci0jZW5kaWYKLQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdl
Yk5TVGV4dElucHV0U3VwcG9ydCkKLQotLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1h
cmtlZFRleHQKLXsKLSAgICBzdGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzOwotICAgIGlm
ICghdmFsaWRBdHRyaWJ1dGVzKSB7Ci0gICAgICAgIHZhbGlkQXR0cmlidXRlcyA9IFtbTlNBcnJh
eSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0
dHJpYnV0ZU5hbWUsIE5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICAgICAg
TlNNYXJrZWRDbGF1c2VTZWdtZW50QXR0cmlidXRlTmFtZSwgTlNUZXh0SW5wdXRSZXBsYWNlbWVu
dFJhbmdlQXR0cmlidXRlTmFtZSwgbmlsXTsKLSAgICAgICAgLy8gTlNUZXh0IGFsc28gc3VwcG9y
dHMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBidXQgaXQncwotICAgICAgICAvLyBoYXJkIHRv
IHRlbGwgd2hpY2ggYXJlIHJlYWxseSByZXF1aXJlZCBmb3IgdGV4dCBpbnB1dCB0bwotICAgICAg
ICAvLyB3b3JrIHdlbGw7IEkgaGF2ZSBub3Qgc2VlbiBhbnkgaW5wdXQgbWV0aG9kIG1ha2UgdXNl
IG9mIHRoZW0geWV0LgotICAgICAgICAvLyAgICAgTlNGb250QXR0cmlidXRlTmFtZSwgTlNGb3Jl
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICAvLyAgICAgTlNCYWNrZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lLCBOU0xhbmd1YWdlQXR0cmlidXRlTmFtZS4KLSAgICAgICAgQ0ZSZXRh
aW4odmFsaWRBdHRyaWJ1dGVzKTsKLSAgICB9Ci0gICAgTE9HKFRleHRJbnB1dCwgInZhbGlkQXR0
cmlidXRlc0Zvck1hcmtlZFRleHQgLT4gKC4uLikiKTsKLSAgICByZXR1cm4gdmFsaWRBdHRyaWJ1
dGVzOwotfQotCi0tIChOU1RleHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQKLXsKLSAgICBy
ZXR1cm4gX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA/IFtzdXBlciBpbnB1dENvbnRleHRd
IDogbmlsOwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKil0ZXh0U3RvcmFnZQotewotICAg
IGlmICghX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCkgewotICAgICAgICBMT0coVGV4dElu
cHV0LCAidGV4dFN0b3JhZ2UgLT4gbmlsIik7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQot
ICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gW3NlbGYgYXR0cmlidXRlZFN1YnN0cmlu
Z0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBVSU5UX01BWCldOwotICAgIAotICAgIExPRyhUZXh0
SW5wdXQsICJ0ZXh0U3RvcmFnZSAtPiBcIiVAXCIiLCByZXN1bHQgPyBbcmVzdWx0IHN0cmluZ10g
OiBAIiIpOwotICAgIAotICAgIC8vIFdlIGhhdmUgdG8gcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBy
YXRoZXIgdGhhbiBudWxsIHRvIHByZXZlbnQgVFNNIGZyb20gY2FsbGluZyAtc3RyaW5nCi0gICAg
cmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKE5TVUludGVnZXIpY2hhcmFj
dGVySW5kZXhGb3JQb2ludDooTlNQb2ludCl0aGVQb2ludAotewotICAgIE5TV2luZG93ICp3aW5k
b3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07
Ci0KLSAgICBpZiAod2luZG93KQotICAgICAgICB0aGVQb2ludCA9IFt3aW5kb3cgY29udmVydFNj
cmVlblRvQmFzZTp0aGVQb2ludF07Ci0gICAgdGhlUG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6
dGhlUG9pbnQgZnJvbVZpZXc6bmlsXTsKLQotICAgIERPTVJhbmdlICpyYW5nZSA9IFtmcmFtZSBf
Y2hhcmFjdGVyUmFuZ2VBdFBvaW50OnRoZVBvaW50XTsKLSAgICBpZiAoIXJhbmdlKSB7Ci0gICAg
ICAgIExPRyhUZXh0SW5wdXQsICJjaGFyYWN0ZXJJbmRleEZvclBvaW50OiglZiwgJWYpIC0+IE5T
Tm90Rm91bmQiLCB0aGVQb2ludC54LCB0aGVQb2ludC55KTsKLSAgICAgICAgcmV0dXJuIE5TTm90
Rm91bmQ7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIHJlc3VsdCA9IFtmcmFtZSBfY29udmVy
dERPTVJhbmdlVG9OU1JhbmdlOnJhbmdlXS5sb2NhdGlvbjsKLSAgICBMT0coVGV4dElucHV0LCAi
Y2hhcmFjdGVySW5kZXhGb3JQb2ludDooJWYsICVmKSAtPiAldSIsIHRoZVBvaW50LngsIHRoZVBv
aW50LnksIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLSAoTlNSZWN0KWZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlOihOU1JhbmdlKXRoZVJhbmdlCi17ICAgIAotICAgIFdlYkZy
YW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgCi0gICAgLy8gSnVzdCB0byBtYXRjaCBO
U1RleHRWaWV3J3MgYmVoYXZpb3IuIFJlZ3Jlc3Npb24gdGVzdHMgY2Fubm90IGRldGVjdCB0aGlz
OwotICAgIC8vIHRvIHJlcHJvZHVjZSwgdXNlIGEgdGVzdCBhcHBsaWNhdGlvbiBmcm9tIGh0dHA6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ2ODIKLSAgICAvLyAodHlwZSBzb21l
dGhpbmc7IHRyeSByYW5nZXMgKDEsIC0xKSBhbmQgKDIsIC0xKS4KLSAgICBpZiAoKHRoZVJhbmdl
LmxvY2F0aW9uICsgdGhlUmFuZ2UubGVuZ3RoIDwgdGhlUmFuZ2UubG9jYXRpb24pICYmICh0aGVS
YW5nZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCAhPSAwKSkKLSAgICAgICAgdGhlUmFuZ2Uu
bGVuZ3RoID0gMDsKLSAgICAKLSAgICBET01SYW5nZSAqcmFuZ2UgPSBbZnJhbWUgX2NvbnZlcnRO
U1JhbmdlVG9ET01SYW5nZTp0aGVSYW5nZV07Ci0gICAgaWYgKCFyYW5nZSkgewotICAgICAgICBM
T0coVGV4dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkgLT4gKDAs
IDAsIDAsIDApIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxlbmd0aCk7Ci0gICAgICAg
IHJldHVybiBOU01ha2VSZWN0KDAsIDAsIDAsIDApOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQo
W3JhbmdlIHN0YXJ0Q29udGFpbmVyXSk7Ci0gICAgQVNTRVJUKFtyYW5nZSBlbmRDb250YWluZXJd
KTsKLSAgICAKLSAgICBOU1JlY3QgcmVzdWx0UmVjdCA9IFtmcmFtZSBfZmlyc3RSZWN0Rm9yRE9N
UmFuZ2U6cmFuZ2VdOwotICAgIHJlc3VsdFJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpyZXN1bHRS
ZWN0IHRvVmlldzpuaWxdOwotCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107
Ci0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgcmVzdWx0UmVjdC5vcmlnaW4gPSBbd2luZG93IGNv
bnZlcnRCYXNlVG9TY3JlZW46cmVzdWx0UmVjdC5vcmlnaW5dOwotICAgIAotICAgIExPRyhUZXh0
SW5wdXQsICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAtPiAoJWYsICVmLCAl
ZiwgJWYpIiwgdGhlUmFuZ2UubG9jYXRpb24sIHRoZVJhbmdlLmxlbmd0aCwgcmVzdWx0UmVjdC5v
cmlnaW4ueCwgcmVzdWx0UmVjdC5vcmlnaW4ueSwgcmVzdWx0UmVjdC5zaXplLndpZHRoLCByZXN1
bHRSZWN0LnNpemUuaGVpZ2h0KTsKLSAgICByZXR1cm4gcmVzdWx0UmVjdDsKLX0KLQotLSAoTlNS
YW5nZSlzZWxlY3RlZFJhbmdlCi17Ci0gICAgaWYgKCFpc1RleHRJbnB1dChjb3JlKFtzZWxmIF9m
cmFtZV0pKSkgewotICAgICAgICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoTlNO
b3RGb3VuZCwgMCkiKTsKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwotICAgIH0KLSAgICBOU1JhbmdlIHJlc3VsdCA9IFtbc2VsZiBfZnJhbWVdIF9zZWxlY3RlZE5T
UmFuZ2VdOwotCi0gICAgTE9HKFRleHRJbnB1dCwgInNlbGVjdGVkUmFuZ2UgLT4gKCV1LCAldSki
LCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLS0gKE5TUmFuZ2UpbWFya2VkUmFuZ2UKLXsKLSAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBb
c2VsZiBfZnJhbWVdOwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKLSAg
ICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOwotICAg
IE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmVGcmFtZS0+
ZWRpdG9yKCktPmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKV07Ci0KLSAgICBMT0coVGV4dElucHV0
LCAibWFya2VkUmFuZ2UgLT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5n
dGgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KE5TUmFuZ2UpbnNSYW5nZQotewotICAgIFdlYkZy
YW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUo
ZnJhbWUpOwotICAgIGlmICghaXNUZXh0SW5wdXQoY29yZUZyYW1lKSB8fCBpc0luUGFzc3dvcmRG
aWVsZChjb3JlRnJhbWUpKSB7Ci0gICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vi
c3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFu
Z2UubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0gICAgRE9NUmFuZ2UgKmRv
bVJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6bnNSYW5nZV07Ci0gICAg
aWYgKCFkb21SYW5nZSkgewotICAgICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0
cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1Jhbmdl
Lmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpyZXN1bHQgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmlu
Z0Zyb21SYW5nZTpjb3JlKGRvbVJhbmdlKV07Ci0gICAgCi0gICAgLy8gW05TQXR0cmlidXRlZFN0
cmluZyhXZWJLaXRFeHRyYXMpIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpdICBpbnNp
c3RzIG9uIGluc2VydGluZyBhIHRyYWlsaW5nIAotICAgIC8vIHdoaXRlc3BhY2UgYXQgdGhlIGVu
ZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRob2QuICA8cmRh
cjovL3Byb2JsZW0vNTQwMDU1MT4KLSAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHRydW5j
YXRlIHRoZSByZXN1bHRhbnQgc3RyaW5nIHRvIHRoZSBjb3JyZWN0IGxlbmd0aC4KLSAgICBpZiAo
W3Jlc3VsdCBsZW5ndGhdID4gbnNSYW5nZS5sZW5ndGgpIHsKLSAgICAgICAgQVNTRVJUKFtyZXN1
bHQgbGVuZ3RoXSA9PSBuc1JhbmdlLmxlbmd0aCArIDEpOwotICAgICAgICBBU1NFUlQoW1tyZXN1
bHQgc3RyaW5nXSBjaGFyYWN0ZXJBdEluZGV4Om5zUmFuZ2UubGVuZ3RoXSA9PSAnXG4nIHx8IFtb
cmVzdWx0IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpuc1JhbmdlLmxlbmd0aF0gPT0gJyAnKTsK
LSAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5T
TWFrZVJhbmdlKDAsIG5zUmFuZ2UubGVuZ3RoKV07Ci0gICAgfQotICAgIExPRyhUZXh0SW5wdXQs
ICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IFwiJUBcIiIsIG5zUmFu
Z2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10pOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLS8vIHRlc3QgZm9yIDEwLjQgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2Js
ZW0vNDI0MzQ2Mz4KLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotLSAobG9uZyljb252ZXJzYXRp
b25JZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIChsb25nKXNlbGY7Ci19Ci0jZWxzZQotLSAoTlNJ
bnRlZ2VyKWNvbnZlcnNhdGlvbklkZW50aWZpZXIKLXsKLSAgICByZXR1cm4gKE5TSW50ZWdlcilz
ZWxmOwotfQotI2VuZGlmCi0KLS0gKEJPT0wpaGFzTWFya2VkVGV4dAotewotICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIEJPT0wgcmVzdWx0ID0gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7Ci0gICAgTE9HKFRl
eHRJbnB1dCwgImhhc01hcmtlZFRleHQgLT4gJXUiLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLS0gKHZvaWQpdW5tYXJrVGV4dAotewotICAgIExPRyhUZXh0SW5wdXQsICJ1bm1h
cmtUZXh0Iik7Ci0KLSAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQg
dG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCi0gICAgV2ViSFRNTFZp
ZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmlu
dGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2
ZW50c1BhcmFtZXRlcnMgPSAwOwotCi0gICAgaWYgKHBhcmFtZXRlcnMpIHsKLSAgICAgICAgcGFy
YW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gWUVTOwotICAgICAgICBwYXJhbWV0ZXJzLT5jb25z
dW1lZEJ5SU0gPSBOTzsKLSAgICB9Ci0gICAgCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJt
Q29tcG9zaXRpb24oKTsKLX0KLQotc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHJlc3Vs
dCkKLXsKLSAgICBpbnQgbGVuZ3RoID0gW1tzdHJpbmcgc3RyaW5nXSBsZW5ndGhdOwotCi0gICAg
aW50IGkgPSAwOwotICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7Ci0gICAgICAgIE5TUmFuZ2UgcmFu
Z2U7Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cnMgPSBbc3RyaW5nIGF0dHJpYnV0ZXNBdElu
ZGV4OmkgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOiZyYW5nZSBpblJhbmdlOk5TTWFrZVJhbmdlKGks
IGxlbmd0aCAtIGkpXTsKLQotICAgICAgICBpZiAoTlNOdW1iZXIgKnN0eWxlID0gW2F0dHJzIG9i
amVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0pIHsKLSAgICAgICAgICAg
IENvbG9yIGNvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgICAgICAgICAgaWYgKE5TQ29sb3IgKmNv
bG9yQXR0ciA9IFthdHRycyBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5h
bWVdKQotICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tTlNDb2xvcihbY29sb3JBdHRy
IGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdKTsKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoQ29tcG9zaXRpb25VbmRlcmxpbmUocmFuZ2UubG9jYXRpb24s
IE5TTWF4UmFuZ2UocmFuZ2UpLCBjb2xvciwgW3N0eWxlIGludFZhbHVlXSA+IDEpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGkgPSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKLSAgICB9
Ci19Ci0KLS0gKHZvaWQpc2V0TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5T
UmFuZ2UpbmV3U2VsUmFuZ2UKLXsKLSAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJp
bmcgaXNLaW5kT2ZDbGFzczpbTlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lz
ZSwgTlNTdHJpbmcKLQotICAgIExPRyhUZXh0SW5wdXQsICJzZXRNYXJrZWRUZXh0OlwiJUBcIiBz
ZWxlY3RlZFJhbmdlOigldSwgJXUpIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJp
bmddIDogc3RyaW5nLCBuZXdTZWxSYW5nZS5sb2NhdGlvbiwgbmV3U2VsUmFuZ2UubGVuZ3RoKTsK
LQotICAgIC8vIFVzZSBwb2ludGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0
aGUgY2FsbGVyIG9mIGludGVycHJldEtleUV2ZW50cy4KLSAgICBXZWJIVE1MVmlld0ludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVyczsKLSAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyA9IDA7Ci0KLSAgICBpZiAocGFyYW1ldGVycykgewotICAgICAgICBwYXJhbWV0ZXJzLT5l
dmVudFdhc0hhbmRsZWQgPSBZRVM7Ci0gICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9
IE5POwotICAgIH0KLSAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFb
c2VsZiBfaXNFZGl0YWJsZV0pCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxDb21wb3Np
dGlvblVuZGVybGluZT4gdW5kZXJsaW5lczsKLSAgICBOU1N0cmluZyAqdGV4dCA9IHN0cmluZzsK
LQotICAgIGlmIChpc0F0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgdW5zaWduZWQgbWFya2Vk
VGV4dExlbmd0aCA9IFsoTlNTdHJpbmcgKilzdHJpbmcgbGVuZ3RoXTsKLSAgICAgICAgTlNTdHJp
bmcgKnJhbmdlU3RyaW5nID0gW3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVu
dFJhbmdlQXR0cmlidXRlTmFtZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOk5VTEwg
aW5SYW5nZTpOU01ha2VSYW5nZSgwLCBtYXJrZWRUZXh0TGVuZ3RoKV07Ci0gICAgICAgIExPRyhU
ZXh0SW5wdXQsICIgICAgUmVwbGFjZW1lbnRSYW5nZTogJUAiLCByYW5nZVN0cmluZyk7Ci0gICAg
ICAgIC8vIFRoZSBBcHBLaXQgYWRkcyBhICdzZWNyZXQnIHByb3BlcnR5IHRvIHRoZSBzdHJpbmcg
dGhhdCBjb250YWlucyB0aGUgcmVwbGFjZW1lbnQgcmFuZ2UuCi0gICAgICAgIC8vIFRoZSByZXBs
YWNlbWVudCByYW5nZSBpcyB0aGUgcmFuZ2Ugb2YgdGhlIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGJl
IHJlcGxhY2VkIHdpdGggdGhlIG5ldyBzdHJpbmcuCi0gICAgICAgIGlmIChyYW5nZVN0cmluZykK
LSAgICAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3ROU1JhbmdlOk5TUmFuZ2VGcm9tU3Ry
aW5nKHJhbmdlU3RyaW5nKV07Ci0KLSAgICAgICAgdGV4dCA9IFtzdHJpbmcgc3RyaW5nXTsKLSAg
ICAgICAgZXh0cmFjdFVuZGVybGluZXMoc3RyaW5nLCB1bmRlcmxpbmVzKTsKLSAgICB9Ci0KLSAg
ICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBu
ZXdTZWxSYW5nZS5sb2NhdGlvbiwgTlNNYXhSYW5nZShuZXdTZWxSYW5nZSkpOwotfQotCi0tICh2
b2lkKWRvQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3RvcgotewotICAgIExPRyhUZXh0SW5w
dXQsICJkb0NvbW1hbmRCeVNlbGVjdG9yOlwiJXNcIiIsIHNlbF9nZXROYW1lKHNlbGVjdG9yKSk7
Ci0KLSAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkg
dGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCi0gICAgLy8gVGhlIHNhbWUgY2FsbCB0
byBpbnRlcnByZXRLZXlFdmVudHMgY2FuIGRvIG1vcmUgdGhhbiBvbmUgY29tbWFuZC4KLSAgICBX
ZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJp
dmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsKLSAgICBpZiAocGFyYW1ldGVycykK
LSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gTk87Ci0KLSAgICBpZiAoc2VsZWN0
b3IgPT0gQHNlbGVjdG9yKG5vb3A6KSkgewotICAgICAgICBfcHJpdmF0ZS0+cmVjZWl2ZWROT09Q
ID0gWUVTOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgS2V5Ym9hcmRFdmVudCogZXZl
bnQgPSBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy0+ZXZlbnQgOiAwOwotICAgIGJvb2wgc2hvdWxk
U2F2ZUNvbW1hbmQgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRlcnMtPnNob3VsZFNhdmVDb21tYW5k
OwotCi0gICAgaWYgKGV2ZW50ICYmIHNob3VsZFNhdmVDb21tYW5kKQotICAgICAgICBldmVudC0+
a2V5cHJlc3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoTlNTdHJpbmdGcm9tU2Vs
ZWN0b3Ioc2VsZWN0b3IpKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IG9ubHkgZGlyZWN0IGNhbGxzIHRvIGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHNlZSB0aGUgcGFyYW1l
dGVycyBieSBzZXR0aW5nIHRvIDAuCi0gICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzID0gMDsKLQotICAgICAgICBib29sIGV2ZW50V2FzSGFuZGxlZDsKLQotICAg
ICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgICAgICBpZiAoW1t3
ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkb0NvbW1h
bmRCeVNlbGVjdG9yOnNlbGVjdG9yXSkKLSAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IHRy
dWU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQg
PSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwotICAgICAgICAgICAgaWYg
KGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSkKLSAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQg
PSBjb21tYW5kLmV4ZWN1dGUoZXZlbnQpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gSWYgV2ViS2l0IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kLCB3ZSBuZWVk
IHRvIHBhc3MgdGhlIHNlbGVjdG9yIHRvIHN1cGVyLgotICAgICAgICAgICAgICAgIF9wcml2YXRl
LT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSBzZWxlY3RvcjsKLQotICAgICAgICAg
ICAgICAgIC8vIFRoZSBzaW5rIGRvZXMgdHdvIHRoaW5nczogMSkgVGVsbHMgdXMgaWYgdGhlIHJl
c3BvbmRlciB3ZW50IHVuaGFuZGxlZCwgYW5kCi0gICAgICAgICAgICAgICAgLy8gMikgcHJldmVu
dHMgYW55IE5TQmVlcDsgd2UgZG9uJ3QgZXZlciB3YW50IHRvIGJlZXAgaGVyZS4KLSAgICAgICAg
ICAgICAgICBXZWJSZXNwb25kZXJDaGFpblNpbmsgKnNpbmsgPSBbW1dlYlJlc3BvbmRlckNoYWlu
U2luayBhbGxvY10gaW5pdFdpdGhSZXNwb25kZXJDaGFpbjpzZWxmXTsKLSAgICAgICAgICAgICAg
ICBbc3VwZXIgZG9Db21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl07Ci0gICAgICAgICAgICAgICAg
ZXZlbnRXYXNIYW5kbGVkID0gIVtzaW5rIHJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZF07Ci0gICAg
ICAgICAgICAgICAgW3NpbmsgZGV0YWNoXTsKLSAgICAgICAgICAgICAgICBbc2luayByZWxlYXNl
XTsKLQotICAgICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2Vs
ZWN0b3IgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcmFt
ZXRlcnMpCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBldmVudFdh
c0hhbmRsZWQ7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgcGFyYW1ldGVycyBzbyB0aGF0IG90
aGVyIGNhbGxzIHRvIGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHNlZSB0aGVtLAotICAgICAgICAvLyBh
bmQgb3RoZXIgY29tbWFuZHMgY2FuIHBhcnRpY2lwYXRlIGluIHNldHRpbmcgdGhlICJldmVudFdh
c0hhbmRsZWQiIGZsYWcuCi0gICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzID0gcGFyYW1ldGVyczsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpaW5zZXJ0VGV4dDooaWQp
c3RyaW5nCi17Ci0gICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9m
Q2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOyAvLyBPdGhlcndpc2UsIE5TU3RyaW5n
Ci0KLSAgICBMT0coVGV4dElucHV0LCAiaW5zZXJ0VGV4dDpcIiVAXCIiLCBpc0F0dHJpYnV0ZWRT
dHJpbmcgPyBbc3RyaW5nIHN0cmluZ10gOiBzdHJpbmcpOwotCi0gICAgV2ViSFRNTFZpZXdJbnRl
cnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnMgPSAwOwotICAgIGlmIChwYXJhbWV0ZXJzKQotICAgICAgICBwYXJhbWV0ZXJzLT5j
b25zdW1lZEJ5SU0gPSBOTzsKLQotICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW5zZXJ0aW5nIGFu
IGF0dHJpYnV0ZWQgc3RyaW5nIGJ1dCBpbnB1dCBtZXRob2RzIGRvbid0IGFwcGVhciB0byByZXF1
aXJlIHRoaXMuCi0gICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIE5TU3RyaW5nICp0ZXh0OwotICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBj
b3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKLSAgICBp
ZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7Ci0gICAgICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107
Ci0gICAgICAgIC8vIFdlIGRlYWwgd2l0aCB0aGUgTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdl
QXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUgZnJvbSBOU0F0dHJpYnV0ZWRTdHJpbmcgaGVyZQotICAg
ICAgICAvLyBzaW1wbHkgYmVjYXVzZSBpdCBpcyB1c2VkIGJ5IGF0IGxlYXN0IG9uZSBJbnB1dCBN
ZXRob2QgLS0gaXQgY29ycmVzb25kcyB0byB0aGUga0V2ZW50UGFyYW1UZXh0SW5wdXRTZW5kUmVw
bGFjZVJhbmdlCi0gICAgICAgIC8vIGV2ZW50IGluIFRTTS4gIFRoaXMgYmVoYXZpb3VyIG1hdGNo
ZXMgdGhhdCBvZiAtW1dlYkhUTUxWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpdIHdo
ZW4gaXQgcmVjZWl2ZXMgYW4KLSAgICAgICAgLy8gTlNBdHRyaWJ1dGVkU3RyaW5nCi0gICAgICAg
IE5TU3RyaW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcgYXR0cmlidXRlOk5TVGV4dElucHV0UmVw
bGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDowIGxvbmdlc3RFZmZlY3RpdmVSYW5n
ZTpOVUxMIGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3RleHQgbGVuZ3RoXSldOwotICAgICAgICBM
T0coVGV4dElucHV0LCAiICAgIFJlcGxhY2VtZW50UmFuZ2U6ICVAIiwgcmFuZ2VTdHJpbmcpOwot
ICAgICAgICBpZiAocmFuZ2VTdHJpbmcpIHsKLSAgICAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9z
ZWxlY3ROU1JhbmdlOk5TUmFuZ2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07Ci0gICAgICAgICAg
ICBpc0Zyb21JbnB1dE1ldGhvZCA9IFlFUzsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICB0ZXh0ID0gc3RyaW5nOwotCi0gICAgYm9vbCBldmVudEhhbmRsZWQgPSBmYWxzZTsKLSAgICBp
ZiAoW3RleHQgbGVuZ3RoXSkgewotICAgICAgICBLZXlib2FyZEV2ZW50KiBldmVudCA9IHBhcmFt
ZXRlcnMgPyBwYXJhbWV0ZXJzLT5ldmVudCA6IDA7Ci0KLSAgICAgICAgLy8gaW5zZXJ0VGV4dCBj
YW4gYmUgY2FsbGVkIGZyb20gYW4gaW5wdXQgbWV0aG9kIG9yIGZyb20gbm9ybWFsIGtleSBldmVu
dCBwcm9jZXNzaW5nCi0gICAgICAgIC8vIElmIGl0cyBmcm9tIG5vcm1hbCBrZXkgZXZlbnQgcHJv
Y2Vzc2luZywgd2UgbWF5IG5lZWQgdG8gc2F2ZSB0aGUgYWN0aW9uIHRvIHBlcmZvcm0gaXQgbGF0
ZXIuCi0gICAgICAgIC8vIElmIGl0cyBmcm9tIGFuIGlucHV0IG1ldGhvZCwgdGhlbiB3ZSBzaG91
bGQgZ28gYWhlYWQgYW5kIGluc2VydCB0aGUgdGV4dCBub3cuICAKLSAgICAgICAgLy8gV2UgYXNz
dW1lIGl0J3MgZnJvbSB0aGUgaW5wdXQgbWV0aG9kIGlmIHdlIGhhdmUgbWFya2VkIHRleHQuCi0g
ICAgICAgIC8vIEZJWE1FOiBJbiB0aGVvcnksIHRoaXMgY291bGQgYmUgd3JvbmcgZm9yIHNvbWUg
aW5wdXQgbWV0aG9kcywgc28gd2Ugc2hvdWxkIHRyeSB0byBmaW5kCi0gICAgICAgIC8vIGFub3Ro
ZXIgd2F5IHRvIGRldGVybWluZSBpZiB0aGUgY2FsbCBpcyBmcm9tIHRoZSBpbnB1dCBtZXRob2QK
LSAgICAgICAgYm9vbCBzaG91bGRTYXZlQ29tbWFuZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVy
cy0+c2hvdWxkU2F2ZUNvbW1hbmQ7Ci0gICAgICAgIGlmIChldmVudCAmJiBzaG91bGRTYXZlQ29t
bWFuZCAmJiAhaXNGcm9tSW5wdXRNZXRob2QpIHsKLSAgICAgICAgICAgIGV2ZW50LT5rZXlwcmVz
c0NvbW1hbmRzKCkuYXBwZW5kKEtleXByZXNzQ29tbWFuZCgiaW5zZXJ0VGV4dDoiLCB0ZXh0KSk7
Ci0gICAgICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IHBh
cmFtZXRlcnM7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFN0cmluZyBldmVudFRleHQgPSB0ZXh0OwotICAgICAgICBldmVudFRleHQucmVwbGFjZShO
U0JhY2tUYWJDaGFyYWN0ZXIsIE5TVGFiQ2hhcmFjdGVyKTsgLy8gc2FtZSB0aGluZyBpcyBkb25l
IGluIEtleUV2ZW50TWFjLm1tIGluIFdlYkNvcmUKLSAgICAgICAgaWYgKGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0KCkpIHsKLSAgICAgICAgICAgIGlmICghY29yZUZy
YW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKSkKLSAgICAgICAgICAgICAgICBldmVudEhh
bmRsZWQgPSBjb3JlRnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgZXZlbnQp
OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRp
b24oZXZlbnRUZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBpZiAoIXBhcmFtZXRlcnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAoaXNGcm9t
SW5wdXRNZXRob2QpIHsKLSAgICAgICAgLy8gQWxsb3cgZG9Db21tYW5kQnlTZWxlY3RvcjogdG8g
YmUgY2FsbGVkIGFmdGVyIGluc2VydFRleHQ6IGJ5IHJlc2V0dGluZyBpbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzCi0gICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzID0gcGFyYW1ldGVyczsKLSAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gWUVT
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHBhcmFtZXRlcnMtPmV2ZW50V2Fz
SGFuZGxlZCA9IGV2ZW50SGFuZGxlZDsKLX0KLQotLSAodm9pZClfdXBkYXRlU2VsZWN0aW9uRm9y
SW5wdXRNYW5hZ2VyCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEJPT0wgZXhw
b3NlSW5wdXRDb250ZXh0ID0gaXNUZXh0SW5wdXQoY29yZUZyYW1lKSAmJiAhaXNJblBhc3N3b3Jk
RmllbGQoY29yZUZyYW1lKTsKLSAgICBpZiAoZXhwb3NlSW5wdXRDb250ZXh0ICE9IF9wcml2YXRl
LT5leHBvc2VJbnB1dENvbnRleHQpIHsKLSAgICAgICAgX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29u
dGV4dCA9IGV4cG9zZUlucHV0Q29udGV4dDsKLSAgICAgICAgLy8gTGV0IEFwcEtpdCBjYWNoZSBh
IHBvdGVudGlhbGx5IGNoYW5nZWQgaW5wdXQgY29udGV4dC4KLSAgICAgICAgLy8gV2ViQ29yZSBy
b3V0aW5lbHkgc2V0cyB0aGUgc2VsZWN0aW9uIHRvIE5vbmUgd2hlbiBlZGl0aW5nLCBhbmQgSU1z
IGJlY29tZSB1bmhhcHB5IHdoZW4gYW4gaW5wdXQgY29udGV4dCBzdWRkZW5seSB0dXJucyBuaWws
IHNlZSBidWcgMjYwMDkuCi0gICAgICAgIGlmICghY29yZUZyYW1lIHx8ICFjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5pc05vbmUoKSkKLSAgICAgICAgICAgIFtOU0FwcCB1cGRhdGVXaW5kb3dzXTsK
LSAgICB9Ci0KLSAgICBpZiAoIWNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChjb3JlRnJhbWUtPmVkaXRvcigpLT5pZ25vcmVD
b21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNp
Z25lZCBzdGFydDsKLSAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9y
KCktPmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHN0YXJ0LCBlbmQpKQotICAgICAgICBbW05TSW5w
dXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdIG1hcmtlZFRleHRTZWxlY3Rpb25DaGFuZ2Vk
Ok5TTWFrZVJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCkgY2xpZW50OnNlbGZdOwotICAgIGVsc2Ug
ewotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb25XaXRob3V0
RGlzdHVyYmluZ1NlbGVjdGlvbigpOwotICAgICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJ
bnB1dE1hbmFnZXJdIG1hcmtlZFRleHRBYmFuZG9uZWQ6c2VsZl07Ci0gICAgfQotfQotCi1AZW5k
Ci0KLS8qCi0gICAgVGhpcyBjbGFzcyBydW5zIHRoZSBzaG93IGZvciBoYW5kaW5nIHRoZSBjb21w
bGV0ZTogTlNUZXh0VmlldyBvcGVyYXRpb24uICBJdCBjb3VudHMgb24gaXRzIEhUTUwgdmlldwot
ICAgIHRvIGNhbGwgZW5kUmV2ZXJ0aW5nQ2hhbmdlOiB3aGVuZXZlciB0aGUgY3VycmVudCBjb21w
bGV0aW9uIG5lZWRzIHRvIGJlIGFib3J0ZWQuCi0gCi0gICAgVGhlIGNsYXNzIGlzIGluIG9uZSBv
ZiB0d28gbW9kZXM6ICBQb3B1cFdpbmRvdyBzaG93aW5nLCBvciBub3QuICBJdCBpcyBzaG93biB3
aGVuIGEgY29tcGxldGlvbiB5aWVsZHMKLSAgICBtb3JlIHRoYW4gb25lIG1hdGNoLiAgSWYgYSBj
b21wbGV0aW9uIHlpZWxkcyBvbmUgb3IgemVybyBtYXRjaGVzLCBpdCBpcyBub3Qgc2hvd24sIGFu
ZCAqKnRoZXJlIGlzIG5vCi0gICAgc3RhdGUgY2FycmllZCBhY3Jvc3MgdG8gdGhlIG5leHQgY29t
cGxldGlvbioqLgotICovCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJUZXh0Q29tcGxldGVDb250cm9s
bGVyCi0KLS0gKGlkKWluaXRXaXRoSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopdmlldwotewotICAg
IHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmls
OwotICAgIF92aWV3ID0gdmlldzsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgW19wb3B1cFdpbmRvdyByZWxlYXNlXTsKLSAgICBbX2NvbXBsZXRpb25zIHJl
bGVhc2VdOwotICAgIFtfb3JpZ2luYWxTdHJpbmcgcmVsZWFzZV07Ci0gICAgCi0gICAgW3N1cGVy
IGRlYWxsb2NdOwotfQotCi0tICh2b2lkKV9pbnNlcnRNYXRjaDooTlNTdHJpbmcgKiltYXRjaAot
ewotICAgIC8vIEZJWE1FOiAzNzY5NjU0IC0gV2Ugc2hvdWxkIHByZXNlcnZlIGNhc2Ugb2Ygc3Ry
aW5nIGJlaW5nIGluc2VydGVkLCBldmVuIGluIHByZWZpeCAoYnV0IHRoZW4gYWxzbyBiZQotICAg
IC8vIGFibGUgdG8gcmV2ZXJ0IHRoYXQpLiAgTWltaWMgTlNUZXh0LgotICAgIFdlYkZyYW1lICpm
cmFtZSA9IFtfdmlldyBfZnJhbWVdOwotICAgIE5TU3RyaW5nICpuZXdUZXh0ID0gW21hdGNoIHN1
YnN0cmluZ0Zyb21JbmRleDpwcmVmaXhMZW5ndGhdOwotICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0Om5ld1RleHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpO
T107Ci19Ci0KLS8vIG1vc3RseSBsaWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJpbmRpbmcubQot
LSAodm9pZClfYnVpbGRVSQotewotICAgIE5TUmVjdCBzY3JvbGxGcmFtZSA9IE5TTWFrZVJlY3Qo
MCwgMCwgMTAwLCAxMDApOwotICAgIE5TUmVjdCB0YWJsZUZyYW1lID0gTlNaZXJvUmVjdDsgICAg
Ci0gICAgdGFibGVGcmFtZS5zaXplID0gW05TU2Nyb2xsVmlldyBjb250ZW50U2l6ZUZvckZyYW1l
U2l6ZTpzY3JvbGxGcmFtZS5zaXplIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNh
bFNjcm9sbGVyOllFUyBib3JkZXJUeXBlOk5TTm9Cb3JkZXJdOwotICAgIC8vIEFkZGVkIGNhc3Qg
dG8gd29yayBhcm91bmQgcHJvYmxlbSB3aXRoIG11bHRpcGxlIEZvdW5kYXRpb24gaW5pdFdpdGhJ
ZGVudGlmaWVyOiBtZXRob2RzIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciB0eXBlcy4KLSAgICBO
U1RhYmxlQ29sdW1uICpjb2x1bW4gPSBbKE5TVGFibGVDb2x1bW4gKilbTlNUYWJsZUNvbHVtbiBh
bGxvY10gaW5pdFdpdGhJZGVudGlmaWVyOltOU051bWJlciBudW1iZXJXaXRoSW50OjBdXTsKLSAg
ICBbY29sdW1uIHNldFdpZHRoOnRhYmxlRnJhbWUuc2l6ZS53aWR0aF07Ci0gICAgW2NvbHVtbiBz
ZXRFZGl0YWJsZTpOT107Ci0gICAgCi0gICAgX3RhYmxlVmlldyA9IFtbTlNUYWJsZVZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6dGFibGVGcmFtZV07Ci0gICAgW190YWJsZVZpZXcgc2V0QXV0b3Jl
c2l6aW5nTWFzazpOU1ZpZXdXaWR0aFNpemFibGVdOwotICAgIFtfdGFibGVWaWV3IGFkZFRhYmxl
Q29sdW1uOmNvbHVtbl07Ci0gICAgW2NvbHVtbiByZWxlYXNlXTsKLSAgICBbX3RhYmxlVmlldyBz
ZXRHcmlkU3R5bGVNYXNrOk5TVGFibGVWaWV3R3JpZE5vbmVdOwotICAgIFtfdGFibGVWaWV3IHNl
dENvcm5lclZpZXc6bmlsXTsKLSAgICBbX3RhYmxlVmlldyBzZXRIZWFkZXJWaWV3Om5pbF07Ci0g
ICAgW190YWJsZVZpZXcgc2V0Q29sdW1uQXV0b3Jlc2l6aW5nU3R5bGU6TlNUYWJsZVZpZXdVbmlm
b3JtQ29sdW1uQXV0b3Jlc2l6aW5nU3R5bGVdOwotICAgIFtfdGFibGVWaWV3IHNldERlbGVnYXRl
OnNlbGZdOwotICAgIFtfdGFibGVWaWV3IHNldERhdGFTb3VyY2U6c2VsZl07Ci0gICAgW190YWJs
ZVZpZXcgc2V0VGFyZ2V0OnNlbGZdOwotICAgIFtfdGFibGVWaWV3IHNldERvdWJsZUFjdGlvbjpA
c2VsZWN0b3IodGFibGVBY3Rpb246KV07Ci0gICAgCi0gICAgTlNTY3JvbGxWaWV3ICpzY3JvbGxW
aWV3ID0gW1tOU1Njcm9sbFZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2Nyb2xsRnJhbWVdOwot
ICAgIFtzY3JvbGxWaWV3IHNldEJvcmRlclR5cGU6TlNOb0JvcmRlcl07Ci0gICAgW3Njcm9sbFZp
ZXcgc2V0SGFzVmVydGljYWxTY3JvbGxlcjpZRVNdOwotICAgIFtzY3JvbGxWaWV3IHNldEF1dG9y
ZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07Ci0g
ICAgW3Njcm9sbFZpZXcgc2V0RG9jdW1lbnRWaWV3Ol90YWJsZVZpZXddOwotICAgIFtfdGFibGVW
aWV3IHJlbGVhc2VdOwotICAgIAotICAgIF9wb3B1cFdpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2Nd
IGluaXRXaXRoQ29udGVudFJlY3Q6c2Nyb2xsRnJhbWUgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dp
bmRvd01hc2sgYmFja2luZzpOU0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKLSAgICBb
X3BvcHVwV2luZG93IHNldEFscGhhVmFsdWU6MC44OGZdOwotICAgIFtfcG9wdXBXaW5kb3cgc2V0
Q29udGVudFZpZXc6c2Nyb2xsVmlld107Ci0gICAgW3Njcm9sbFZpZXcgcmVsZWFzZV07Ci0gICAg
W19wb3B1cFdpbmRvdyBzZXRIYXNTaGFkb3c6WUVTXTsKLSAgICBbX3BvcHVwV2luZG93IHNldE9u
ZVNob3Q6WUVTXTsKLSAgICBbX3BvcHVwV2luZG93IF9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOllF
U107Ci0gICAgW19wb3B1cFdpbmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOwotfQotCi0v
LyBtb3N0bHkgbGlmdGVkIGZyb20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0KLS0gKHZvaWQpX3Bs
YWNlUG9wdXBXaW5kb3c6KE5TUG9pbnQpdG9wTGVmdAotewotICAgIGludCBudW1iZXJUb1Nob3cg
PSBbX2NvbXBsZXRpb25zIGNvdW50XTsKLSAgICBpZiAobnVtYmVyVG9TaG93ID4gMjApIHsKLSAg
ICAgICAgbnVtYmVyVG9TaG93ID0gMjA7Ci0gICAgfQotCi0gICAgTlNSZWN0IHdpbmRvd0ZyYW1l
OwotICAgIE5TUG9pbnQgd29yZFN0YXJ0ID0gdG9wTGVmdDsKLSAgICB3aW5kb3dGcmFtZS5vcmln
aW4gPSBbW192aWV3IHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpbX3ZpZXcgY29udmVydFBv
aW50OndvcmRTdGFydCB0b1ZpZXc6bmlsXV07Ci0gICAgd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQg
PSBudW1iZXJUb1Nob3cgKiBbX3RhYmxlVmlldyByb3dIZWlnaHRdICsgKG51bWJlclRvU2hvdyAr
IDEpICogW190YWJsZVZpZXcgaW50ZXJjZWxsU3BhY2luZ10uaGVpZ2h0OwotICAgIHdpbmRvd0Zy
YW1lLm9yaWdpbi55IC09IHdpbmRvd0ZyYW1lLnNpemUuaGVpZ2h0OwotICAgIE5TRGljdGlvbmFy
eSAqYXR0cmlidXRlcyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5
czpbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6MTIuMGZdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCBu
aWxdOwotICAgIGZsb2F0IG1heFdpZHRoID0gMC4wZjsKLSAgICBpbnQgbWF4SW5kZXggPSAtMTsK
LSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyVG9TaG93OyBpKyspIHsKLSAg
ICAgICAgZmxvYXQgd2lkdGggPSBjZWlsZihbW19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4Omld
IHNpemVXaXRoQXR0cmlidXRlczphdHRyaWJ1dGVzXS53aWR0aCk7Ci0gICAgICAgIGlmICh3aWR0
aCA+IG1heFdpZHRoKSB7Ci0gICAgICAgICAgICBtYXhXaWR0aCA9IHdpZHRoOwotICAgICAgICAg
ICAgbWF4SW5kZXggPSBpOwotICAgICAgICB9Ci0gICAgfQotICAgIHdpbmRvd0ZyYW1lLnNpemUu
d2lkdGggPSAxMDA7Ci0gICAgaWYgKG1heEluZGV4ID49IDApIHsKLSAgICAgICAgbWF4V2lkdGgg
PSBjZWlsZihbTlNTY3JvbGxWaWV3IGZyYW1lU2l6ZUZvckNvbnRlbnRTaXplOk5TTWFrZVNpemUo
bWF4V2lkdGgsIDEwMC4wZikgaGFzSG9yaXpvbnRhbFNjcm9sbGVyOk5PIGhhc1ZlcnRpY2FsU2Ny
b2xsZXI6WUVTIGJvcmRlclR5cGU6TlNOb0JvcmRlcl0ud2lkdGgpOwotICAgICAgICBtYXhXaWR0
aCA9IGNlaWxmKFtOU1dpbmRvdyBmcmFtZVJlY3RGb3JDb250ZW50UmVjdDpOU01ha2VSZWN0KDAu
MGYsIDAuMGYsIG1heFdpZHRoLCAxMDAuMGYpIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dN
YXNrXS5zaXplLndpZHRoKTsKLSAgICAgICAgbWF4V2lkdGggKz0gNS4wZjsKLSAgICAgICAgd2lu
ZG93RnJhbWUuc2l6ZS53aWR0aCA9IE1BWChtYXhXaWR0aCwgd2luZG93RnJhbWUuc2l6ZS53aWR0
aCk7Ci0gICAgICAgIG1heFdpZHRoID0gTUlOKDQwMC4wZiwgd2luZG93RnJhbWUuc2l6ZS53aWR0
aCk7Ci0gICAgfQotICAgIFtfcG9wdXBXaW5kb3cgc2V0RnJhbWU6d2luZG93RnJhbWUgZGlzcGxh
eTpOT107Ci0gICAgCi0gICAgW190YWJsZVZpZXcgcmVsb2FkRGF0YV07Ci0gICAgW190YWJsZVZp
ZXcgc2VsZWN0Um93SW5kZXhlczpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDowXSBieUV4
dGVuZGluZ1NlbGVjdGlvbjpOT107Ci0gICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxl
OjBdOwotICAgIFtzZWxmIF9yZWZsZWN0U2VsZWN0aW9uXTsKLSAgICBbX3BvcHVwV2luZG93IHNl
dExldmVsOk5TUG9wVXBNZW51V2luZG93TGV2ZWxdOwotICAgIFtfcG9wdXBXaW5kb3cgb3JkZXJG
cm9udDpuaWxdOyAgICAKLSAgICBbW192aWV3IHdpbmRvd10gYWRkQ2hpbGRXaW5kb3c6X3BvcHVw
V2luZG93IG9yZGVyZWQ6TlNXaW5kb3dBYm92ZV07Ci19Ci0KLS0gKHZvaWQpZG9Db21wbGV0aW9u
Ci17Ci0gICAgaWYgKCFfcG9wdXBXaW5kb3cpIHsKLSAgICAgICAgTlNTcGVsbENoZWNrZXIgKmNo
ZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKLSAgICAgICAgaWYg
KCFjaGVja2VyKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgcHJlY2Vl
ZGluZyB3b3JkIHN0ZW0KLSAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07
Ci0gICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAgICAgICAgRE9NUmFuZ2UgKndob2xl
V29yZCA9IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpTZWxlY3Rpb25D
b250cm9sbGVyOjpFWFRFTkQKLSAgICAgICAgICAgIGRpcmVjdGlvbjpTZWxlY3Rpb25Db250cm9s
bGVyOjpCQUNLV0FSRCBncmFudWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwotICAgICAgICBET01S
YW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdlXTsKLSAgICAgICAgW3ByZWZpeCBz
ZXRFbmQ6W3NlbGVjdGlvbiBzdGFydENvbnRhaW5lcl0gb2Zmc2V0OltzZWxlY3Rpb24gc3RhcnRP
ZmZzZXRdXTsKLQotICAgICAgICAvLyBSZWplY3Qgc29tZSBOT1AgY2FzZXMKLSAgICAgICAgaWYg
KFtwcmVmaXggY29sbGFwc2VkXSkgewotICAgICAgICAgICAgTlNCZWVwKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTlNTdHJpbmcgKnByZWZpeFN0ciA9IFtmcmFt
ZSBfc3RyaW5nRm9yUmFuZ2U6cHJlZml4XTsKLSAgICAgICAgTlNTdHJpbmcgKnRyaW1tZWRQcmVm
aXggPSBbcHJlZml4U3RyIHN0cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFj
dGVyU2V0IHdoaXRlc3BhY2VBbmROZXdsaW5lQ2hhcmFjdGVyU2V0XV07Ci0gICAgICAgIGlmIChb
dHJpbW1lZFByZWZpeCBsZW5ndGhdID09IDApIHsKLSAgICAgICAgICAgIE5TQmVlcCgpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHByZWZpeExlbmd0aCA9IFtwcmVm
aXhTdHIgbGVuZ3RoXTsKLQotICAgICAgICAvLyBMb29rdXAgbWF0Y2hlcwotICAgICAgICBbX2Nv
bXBsZXRpb25zIHJlbGVhc2VdOwotICAgICAgICBfY29tcGxldGlvbnMgPSBbY2hlY2tlciBjb21w
bGV0aW9uc0ZvclBhcnRpYWxXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3ByZWZpeFN0ciBsZW5n
dGhdKSBpblN0cmluZzpwcmVmaXhTdHIgbGFuZ3VhZ2U6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhU
YWc6W1tfdmlldyBfd2ViVmlld10gc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKLSAgICAgICAg
W19jb21wbGV0aW9ucyByZXRhaW5dOwotICAgIAotICAgICAgICBpZiAoIV9jb21wbGV0aW9ucyB8
fCBbX2NvbXBsZXRpb25zIGNvdW50XSA9PSAwKSB7Ci0gICAgICAgICAgICBOU0JlZXAoKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChbX2NvbXBsZXRpb25zIGNvdW50XSA9PSAxKSB7Ci0gICAgICAgICAg
ICBbc2VsZiBfaW5zZXJ0TWF0Y2g6W19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OjBdXTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCghX29yaWdpbmFsU3RyaW5nKTsgICAg
ICAgLy8gdGhpcyBzaG91bGQgb25seSBiZSBzZXQgSUZGIHdlIGhhdmUgYSBwb3B1cCB3aW5kb3cK
LSAgICAgICAgICAgIF9vcmlnaW5hbFN0cmluZyA9IFtbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnNl
bGVjdGlvbl0gcmV0YWluXTsKLSAgICAgICAgICAgIFtzZWxmIF9idWlsZFVJXTsKLSAgICAgICAg
ICAgIE5TUmVjdCB3b3JkUmVjdCA9IFtmcmFtZSBfY2FyZXRSZWN0QXROb2RlOlt3aG9sZVdvcmQg
c3RhcnRDb250YWluZXJdIG9mZnNldDpbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSBhZmZpbml0eTpO
U1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbV07Ci0gICAgICAgICAgICAvLyArMSB0byBiZSB1
bmRlciB0aGUgd29yZCwgbm90IHRoZSBjYXJldAotICAgICAgICAgICAgLy8gRklYTUUgLSAzNzY5
NjUyIC0gV3JvbmcgcG9zaXRpb25pbmcgZm9yIHJpZ2h0IHRvIGxlZnQgbGFuZ3VhZ2VzLiAgV2Ug
c2hvdWxkIGxpbmUgdXAgdGhlIHVwcGVyCi0gICAgICAgICAgICAvLyByaWdodCBjb3JuZXIgd2l0
aCB0aGUgY2FyZXQgaW5zdGVhZCBvZiB1cHBlciBsZWZ0LCBhbmQgdGhlICsxIHdvdWxkIGJlIGEg
LTEuCi0gICAgICAgICAgICBOU1BvaW50IHdvcmRMb3dlckxlZnQgPSB7IE5TTWluWCh3b3JkUmVj
dCkrMSwgTlNNYXhZKHdvcmRSZWN0KSB9OwotICAgICAgICAgICAgW3NlbGYgX3BsYWNlUG9wdXBX
aW5kb3c6d29yZExvd2VyTGVmdF07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBb
c2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKLSAgICB9Ci19Ci0KLS0g
KHZvaWQpZW5kUmV2ZXJ0aW5nQ2hhbmdlOihCT09MKXJldmVydENoYW5nZSBtb3ZlTGVmdDooQk9P
TClnb0xlZnQKLXsKLSAgICBpZiAoX3BvcHVwV2luZG93KSB7Ci0gICAgICAgIC8vIHRlYXIgZG93
biBVSQotICAgICAgICBbW192aWV3IHdpbmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6X3BvcHVwV2lu
ZG93XTsKLSAgICAgICAgW19wb3B1cFdpbmRvdyBvcmRlck91dDpzZWxmXTsKLSAgICAgICAgLy8g
TXVzdCBhdXRvcmVsZWFzZSBiZWNhdXNlIGV2ZW50IHRyYWNraW5nIGNvZGUgbWF5IGJlIG9uIHRo
ZSBzdGFjayB0b3VjaGluZyBVSQotICAgICAgICBbX3BvcHVwV2luZG93IGF1dG9yZWxlYXNlXTsK
LSAgICAgICAgX3BvcHVwV2luZG93ID0gbmlsOwotCi0gICAgICAgIGlmIChyZXZlcnRDaGFuZ2Up
IHsKLSAgICAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVdOwotICAgICAg
ICAgICAgW2ZyYW1lIF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6X29yaWdpbmFsU3RyaW5nIHNl
bGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwotICAgICAgICB9IGVsc2UgaWYg
KFtfdmlldyBfaGFzU2VsZWN0aW9uXSkgewotICAgICAgICAgICAgaWYgKGdvTGVmdCkKLSAgICAg
ICAgICAgICAgICBbX3ZpZXcgbW92ZUJhY2t3YXJkOm5pbF07Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgW192aWV3IG1vdmVGb3J3YXJkOm5pbF07Ci0gICAgICAgIH0KLSAgICAg
ICAgW19vcmlnaW5hbFN0cmluZyByZWxlYXNlXTsKLSAgICAgICAgX29yaWdpbmFsU3RyaW5nID0g
bmlsOwotICAgIH0KLSAgICAvLyBlbHNlIHRoZXJlIGlzIG5vIHN0YXRlIHRvIGFib3J0IGlmIHRo
ZSB3aW5kb3cgd2FzIG5vdCB1cAotfQotCi0tIChCT09MKXBvcHVwV2luZG93SXNPcGVuCi17Ci0g
ICAgcmV0dXJuIF9wb3B1cFdpbmRvdyAhPSBuaWw7Ci19Ci0KLS8vIFdlYkhUTUxWaWV3IGdpdmVz
IHVzIGEgY3JhY2sgYXQga2V5IGV2ZW50cyBpdCBzZWVzLiBSZXR1cm4gd2hldGhlciB3ZSBjb25z
dW1lZCB0aGUgZXZlbnQuCi0vLyBUaGUgZmVhdHVyZXMgZm9yIHRoZSB2YXJpb3VzIGtleXMgbWlt
aWMgTlNUZXh0Vmlldy4KLS0gKEJPT0wpZmlsdGVyS2V5RG93bjooTlNFdmVudCAqKWV2ZW50Ci17
Ci0gICAgaWYgKCFfcG9wdXBXaW5kb3cpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBOU1N0cmlu
ZyAqc3RyaW5nID0gW2V2ZW50IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107Ci0gICAgaWYg
KCFbc3RyaW5nIGxlbmd0aF0pCi0gICAgICAgIHJldHVybiBOTzsKLSAgICB1bmljaGFyIGMgPSBb
c3RyaW5nIGNoYXJhY3RlckF0SW5kZXg6MF07Ci0gICAgaWYgKGMgPT0gTlNVcEFycm93RnVuY3Rp
b25LZXkpIHsKLSAgICAgICAgaW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRS
b3ddOwotICAgICAgICBpZiAoMCA8IHNlbGVjdGVkUm93KSB7Ci0gICAgICAgICAgICBbX3RhYmxl
VmlldyBzZWxlY3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OnNlbGVj
dGVkUm93IC0gMV0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9dOwotICAgICAgICAgICAgW190YWJs
ZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxlOnNlbGVjdGVkUm93IC0gMV07Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMgPT0gTlNEb3duQXJyb3dGdW5jdGlv
bktleSkgewotICAgICAgICBpbnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBzZWxlY3RlZFJv
d107Ci0gICAgICAgIGlmIChzZWxlY3RlZFJvdyA8IChpbnQpW19jb21wbGV0aW9ucyBjb3VudF0g
LSAxKSB7Ci0gICAgICAgICAgICBbX3RhYmxlVmlldyBzZWxlY3RSb3dJbmRleGVzOltOU0luZGV4
U2V0IGluZGV4U2V0V2l0aEluZGV4OnNlbGVjdGVkUm93ICsgMV0gYnlFeHRlbmRpbmdTZWxlY3Rp
b246Tk9dOwotICAgICAgICAgICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxlOnNlbGVj
dGVkUm93ICsgMV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAg
aWYgKGMgPT0gTlNSaWdodEFycm93RnVuY3Rpb25LZXkgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xy
JyB8fCBjID09ICdcdCcpIHsKLSAgICAgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgYmFja3RhYj8K
LSAgICAgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLSAgICAg
ICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMgPT0gTlNMZWZ0QXJyb3dGdW5jdGlvbktl
eSkgewotICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6WUVTXTsK
LSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICB9Ci0gICAgaWYgKGMgPT0gMHgxQiB8fCBjID09IE5T
RjVGdW5jdGlvbktleSkgewotICAgICAgICAvLyBGSVhNRTogRjU/Ci0gICAgICAgIFtzZWxmIGVu
ZFJldmVydGluZ0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwotICAgICAgICByZXR1cm4gWUVTOwot
ICAgIH0KLSAgICBpZiAoYyA9PSAnICcgfHwgYyA+PSAweDIxICYmIGMgPD0gMHgyRiB8fCBjID49
IDB4M0EgJiYgYyA8PSAweDQwIHx8IGMgPj0gMHg1QiAmJiBjIDw9IDB4NjAgfHwgYyA+PSAweDdC
ICYmIGMgPD0gMHg3RCkgewotICAgICAgICAvLyBGSVhNRTogSXMgdGhlIGFib3ZlIGxpc3Qgb2Yg
a2V5cyByZWFsbHkgZGVmaW5pdGl2ZT8KLSAgICAgICAgLy8gT3JpZ2luYWxseSB0aGlzIGNvZGUg
Y2FsbGVkIGlzcHVuY3Q7IGFyZW4ndCB0aGVyZSBvdGhlciBwdW5jdHVhdGlvbiBrZXlzIG9uIGlu
dGVybmF0aW9uYWwga2V5Ym9hcmRzPwotICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6
Tk8gbW92ZUxlZnQ6Tk9dOwotICAgICAgICByZXR1cm4gTk87IC8vIGxldCB0aGUgY2hhciBnZXQg
aW5zZXJ0ZWQKLSAgICB9Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKV9yZWZsZWN0U2Vs
ZWN0aW9uCi17Ci0gICAgaW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRSb3dd
OwotICAgIEFTU0VSVChzZWxlY3RlZFJvdyA+PSAwICYmIHNlbGVjdGVkUm93IDwgKGludClbX2Nv
bXBsZXRpb25zIGNvdW50XSk7Ci0gICAgW3NlbGYgX2luc2VydE1hdGNoOltfY29tcGxldGlvbnMg
b2JqZWN0QXRJbmRleDpzZWxlY3RlZFJvd11dOwotfQotCi0tICh2b2lkKXRhYmxlQWN0aW9uOihp
ZClzZW5kZXIKLXsKLSAgICBbc2VsZiBfcmVmbGVjdFNlbGVjdGlvbl07Ci0gICAgW3NlbGYgZW5k
UmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKLX0KLQotLSAoTlNJbnRlZ2VyKW51bWJl
ck9mUm93c0luVGFibGVWaWV3OihOU1RhYmxlVmlldyAqKXRhYmxlVmlldwotewotICAgIHJldHVy
biBbX2NvbXBsZXRpb25zIGNvdW50XTsKLX0KLQotLSAoaWQpdGFibGVWaWV3OihOU1RhYmxlVmll
dyAqKXRhYmxlVmlldyBvYmplY3RWYWx1ZUZvclRhYmxlQ29sdW1uOihOU1RhYmxlQ29sdW1uICop
dGFibGVDb2x1bW4gcm93OihOU0ludGVnZXIpcm93Ci17Ci0gICAgcmV0dXJuIFtfY29tcGxldGlv
bnMgb2JqZWN0QXRJbmRleDpyb3ddOwotfQotCi0tICh2b2lkKXRhYmxlVmlld1NlbGVjdGlvbkRp
ZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAgICBbc2VsZiBfcmVm
bGVjdFNlbGVjdGlvbl07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3
IChXZWJEb2N1bWVudFByaXZhdGVQcm90b2NvbHMpCi0KLS0gKE5TUmVjdClzZWxlY3Rpb25SZWN0
Ci17Ci0gICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1cm4gY29yZShb
c2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uQm91bmRzKCk7Ci0gICAgcmV0dXJuIE5TWmVyb1JlY3Q7
Ci19Ci0KLS0gKE5TQXJyYXkgKilzZWxlY3Rpb25UZXh0UmVjdHMKLXsKLSAgICBpZiAoIVtzZWxm
IF9oYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFZlY3RvcjxG
bG9hdFJlY3Q+IGxpc3Q7Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPnNlbGVjdGlvblRleHRSZWN0cyhsaXN0KTsKLQot
ICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqcmVz
dWx0ID0gW1tbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2l6ZV0gYXV0
b3JlbGVhc2VdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAg
ICAgIFtyZXN1bHQgYWRkT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6bGlzdFtpXV1dOwot
ICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TVmlldyAqKXNlbGVjdGlvblZpZXcK
LXsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAoTlNJbWFnZSAqKXNlbGVjdGlvbkltYWdlRm9y
Y2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAotewotICAgIGlmIChbc2VsZiBfaGFz
U2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlv
bkltYWdlKGZvcmNlQmxhY2tUZXh0KTsKLSAgICByZXR1cm4gbmlsOwotfQotCi0tIChOU1JlY3Qp
c2VsZWN0aW9uSW1hZ2VSZWN0Ci17Ci0gICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKQotICAg
ICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uQm91bmRzKCk7Ci0gICAg
cmV0dXJuIE5TWmVyb1JlY3Q7Ci19Ci0KLS0gKE5TQXJyYXkgKilwYXN0ZWJvYXJkVHlwZXNGb3JT
ZWxlY3Rpb24KLXsKLSAgICBpZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSkgewotICAg
ICAgICBOU011dGFibGVBcnJheSAqdHlwZXMgPSBbW1tbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBh
c3RlYm9hcmRUeXBlc10gbXV0YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKLSAgICAgICAgW3R5cGVz
IGFkZE9iamVjdDpXZWJTbWFydFBhc3RlUGJvYXJkVHlwZV07Ci0gICAgICAgIHJldHVybiB0eXBl
czsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9u
UGFzdGVib2FyZFR5cGVzXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpd3JpdGVTZWxlY3Rpb25XaXRo
UGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9h
cmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9h
cmRUeXBlczp0eXBlcyB0b1Bhc3RlYm9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3Ry
aW5nOm5pbF07Ci19Ci0KLS0gKHZvaWQpc2VsZWN0QWxsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKGNvcmVGcmFtZSkKLSAgICAgICAgY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0QWxsKCk7Ci19Ci0KLS0gKHZvaWQpZGVzZWxlY3RB
bGwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBp
ZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCktPmNsZWFyKCk7Ci19Ci0KLS0gKE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtb
c2VsZiBfZnJhbWVdIF9zdHJpbmdGb3JSYW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1dOwotfQot
Ci0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOihE
T01SYW5nZSAqKXJhbmdlCi17Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nOwotI2lmICFMT0dfRElTQUJMRUQgICAgICAgIAotICAgIGRvdWJsZSBzdGFydCA9IENGQWJz
b2x1dGVUaW1lR2V0Q3VycmVudCgpOwotI2VuZGlmICAgIAotICAgIGF0dHJpYnV0ZWRTdHJpbmcg
PSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIF9pbml0V2l0aERPTVJhbmdlOnJhbmdlXSBh
dXRvcmVsZWFzZV07Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIGRvdWJsZSBkdXJhdGlvbiA9IENG
QWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Ci0gICAgTE9HKFRpbWluZywgImNyZWF0
aW5nIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2VsZWN0aW9uIHRvb2sgJWYgc2Vjb25kcy4iLCBk
dXJhdGlvbik7Ci0jZW5kaWYKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKLX0KLQotLSAo
TlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwotewotICAgIERPTURvY3VtZW50
ICpkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURP
TVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dOwotICAgIGlmICghYXR0cmlidXRlZFN0
cmluZykgewotICAgICAgICBEb2N1bWVudCogY29yZURvY3VtZW50ID0gY29yZShkb2N1bWVudCk7
Ci0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpSYW5nZTo6Y3JlYXRlKGNvcmVEb2N1bWVudCwgY29yZURv
Y3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudC0+Y2hpbGROb2RlQ291bnQoKSku
Z2V0KCldOwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKLX0KLQotLSAoTlNT
dHJpbmcgKilzZWxlY3RlZFN0cmluZwotewotICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfc2Vs
ZWN0ZWRTdHJpbmddOwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxlY3RlZEF0dHJp
YnV0ZWRTdHJpbmcKLXsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcg
PSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdl
XV07Ci0gICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7Ci0gICAgICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgICAgICBpZiAoY29yZUZyYW1lKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJp
bmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpy
YW5nZS5nZXQoKV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJp
bmc7Ci19Ci0KLS0gKEJPT0wpc3VwcG9ydHNUZXh0RW5jb2RpbmcKLXsKLSAgICByZXR1cm4gWUVT
OwotfQotCi0tIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihC
T09MKWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBG
bGFnIHN0YXJ0SW5TZWxlY3Rpb246KEJPT0wpc3RhcnRJblNlbGVjdGlvbgotewotICAgIGlmICgh
W3N0cmluZyBsZW5ndGhdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJh
bWUtPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcsIHN0YXJ0
SW5TZWxlY3Rpb24pOwotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAo
V2ViRG9jdW1lbnRJbnRlcm5hbFByb3RvY29scykKLQotLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVu
dEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICByZXR1cm4gW3NlbGYgZWxlbWVudEF0UG9p
bnQ6cG9pbnQgYWxsb3dTaGFkb3dDb250ZW50Ok5PXTsKLX0KLQotLSAoTlNEaWN0aW9uYXJ5ICop
ZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgYWxsb3dTaGFkb3dDb250ZW50OihCT09MKWFs
bG93Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAg
aWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtbW1dlYkVs
ZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6Y29yZUZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQocG9pbnQpLCBhbGxv
dyldIGF1dG9yZWxlYXNlXTsKLX0KLQotLSAoTlNVSW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRl
eHQ6KE5TU3RyaW5nICopc3RyaW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6
KE5TVUludGVnZXIpbGltaXQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGNvcmVGcmFtZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY2FzZUZsYWcsIGxp
bWl0KTsKLX0KLQotLSAodm9pZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihC
T09MKW5ld1ZhbHVlCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3JlRnJhbWUt
PnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQobmV3VmFsdWUpOwotfQotCi0tIChC
T09MKW1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQKLXsKLSAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVG
cmFtZS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOwotfQotCi0tICh2b2lkKXVu
bWFya0FsbFRleHRNYXRjaGVzCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvY3VtZW50LT5yZW1vdmVNYXJrZXJzKERvY3VtZW50
TWFya2VyOjpUZXh0TWF0Y2gpOwotfQotCi0tIChOU0FycmF5ICopcmVjdHNGb3JUZXh0TWF0Y2hl
cwotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlm
ICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50
KQotICAgICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOwotCi0gICAgVmVjdG9yPEludFJlY3Q+
IHJlY3RzID0gZG9jdW1lbnQtPnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2Vy
OjpUZXh0TWF0Y2gpOwotICAgIHVuc2lnbmVkIGNvdW50ID0gcmVjdHMuc2l6ZSgpOwotICAgIE5T
TXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6
Y291bnRdOwotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2lu
ZGV4KQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJl
Y3RzW2luZGV4XV1dOyAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1AZW5kCi0KLS8vIFRo
aXMgaXMgdXNlZCBieSBBcHBLaXQgYW5kIGlzIGluY2x1ZGVkIGhlcmUgc28gdGhhdCBXZWJEYXRh
UHJvdG9jb2xTY2hlbWUgaXMgb25seSBkZWZpbmVkIG9uY2UuCi1AaW1wbGVtZW50YXRpb24gTlNV
UkwgKFdlYkRhdGFVUkwpCi0KLSsgKE5TVVJMICopX3dlYl91bmlxdWVXZWJEYXRhVVJMCi17Ci0g
ICAgQ0ZVVUlEUmVmIFVVSURSZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7
Ci0gICAgTlNTdHJpbmcgKlVVSURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgVVVJRFJlZik7Ci0gICAgQ0ZSZWxlYXNlKFVVSURSZWYp
OwotICAgIE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIiVAOi8vJUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmdd
XTsKLSAgICBDRlJlbGVhc2UoVVVJRFN0cmluZyk7Ci0gICAgcmV0dXJuIFVSTDsKLX0KLQotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gV2ViUmVzcG9uZGVyQ2hhaW5TaW5rCi0KLS0gKGlkKWluaXRX
aXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVyICopY2hhaW4KLXsKLSAgICBzZWxmID0gW3N1
cGVyIGluaXRdOwotICAgIF9sYXN0UmVzcG9uZGVySW5DaGFpbiA9IGNoYWluOwotICAgIHdoaWxl
IChOU1Jlc3BvbmRlciAqbmV4dCA9IFtfbGFzdFJlc3BvbmRlckluQ2hhaW4gbmV4dFJlc3BvbmRl
cl0pCi0gICAgICAgIF9sYXN0UmVzcG9uZGVySW5DaGFpbiA9IG5leHQ7Ci0gICAgW19sYXN0UmVz
cG9uZGVySW5DaGFpbiBzZXROZXh0UmVzcG9uZGVyOnNlbGZdOwotICAgIHJldHVybiBzZWxmOwot
fQotCi0tICh2b2lkKWRldGFjaAotewotICAgIFtfbGFzdFJlc3BvbmRlckluQ2hhaW4gc2V0TmV4
dFJlc3BvbmRlcjpuaWxdOwotICAgIF9sYXN0UmVzcG9uZGVySW5DaGFpbiA9IG5pbDsKLX0KLQot
LSAoQk9PTClyZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQKLXsKLSAgICByZXR1cm4gX3JlY2VpdmVk
VW5oYW5kbGVkQ29tbWFuZDsKLX0KLQotLSAodm9pZClub1Jlc3BvbmRlckZvcjooU0VMKXNlbGVj
dG9yCi17Ci0gICAgX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZCA9IFlFUzsKLX0KLQotLSAodm9p
ZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBfcmVjZWl2ZWRVbmhh
bmRsZWRDb21tYW5kID0gWUVTOwotfQotCi0tIChCT09MKXRyeVRvUGVyZm9ybTooU0VMKWFjdGlv
biB3aXRoOihpZClvYmplY3QKLXsKLSAgICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVT
OwotICAgIHJldHVybiBZRVM7Ci19Ci0KLUBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gNDQyOTIpCShm
cm9tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbTo0NDI5MikKKysrIFdlYktpdC9t
YWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAoQykgMjAwNiwgMjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW1wb3J0ICJXZWJIVE1MVmlldy5oIgorCisjaW1wb3J0ICJET01DU1NTdHlsZURlY2xhcmF0
aW9uSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oIgor
I2ltcG9ydCAiRE9NRG9jdW1lbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NTm9kZUludGVybmFs
LmgiCisjaW1wb3J0ICJET01SYW5nZUludGVybmFsLmgiCisjaW1wb3J0ICJXZWJBcmNoaXZlLmgi
CisjaW1wb3J0ICJXZWJDbGlwVmlldy5oIgorI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9uc0ludGVy
bmFsLmgiCisjaW1wb3J0ICJXZWJEYXRhU291cmNlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkRl
ZmF1bHRVSURlbGVnYXRlLmgiCisjaW1wb3J0ICJXZWJEb2N1bWVudEludGVybmFsLmgiCisjaW1w
b3J0ICJXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuaCIKKyNpbXBvcnQgIldlYkVkaXRpbmdEZWxl
Z2F0ZS5oIgorI2ltcG9ydCAiV2ViRWxlbWVudERpY3Rpb25hcnkuaCIKKyNpbXBvcnQgIldlYkZy
YW1lSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkZyYW1lUHJpdmF0ZS5oIgorI2ltcG9ydCAiV2Vi
RnJhbWVWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYkhUTUxSZXByZXNlbnRhdGlvblByaXZh
dGUuaCIKKyNpbXBvcnQgIldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYktpdExv
Z2dpbmcuaCIKKyNpbXBvcnQgIldlYktpdE5TU3RyaW5nRXh0cmFzLmgiCisjaW1wb3J0ICJXZWJL
aXRWZXJzaW9uQ2hlY2tzLmgiCisjaW1wb3J0ICJXZWJMb2NhbGl6YWJsZVN0cmluZ3MuaCIKKyNp
bXBvcnQgIldlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNFdmVu
dEV4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNGaWxlTWFuYWdlckV4dHJhcy5oIgorI2ltcG9ydCAi
V2ViTlNJbWFnZUV4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNPYmplY3RFeHRyYXMuaCIKKyNpbXBv
cnQgIldlYk5TUGFzdGVib2FyZEV4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNQcmludE9wZXJhdGlv
bkV4dHJhcy5oIgorI2ltcG9ydCAiV2ViTlNVUkxFeHRyYXMuaCIKKyNpbXBvcnQgIldlYk5TVmll
d0V4dHJhcy5oIgorI2ltcG9ydCAiV2ViTmV0c2NhcGVQbHVnaW5WaWV3LmgiCisjaW1wb3J0ICJX
ZWJOb2RlSGlnaGxpZ2h0LmgiCisjaW1wb3J0ICJXZWJQbHVnaW5Db250cm9sbGVyLmgiCisjaW1w
b3J0ICJXZWJQcmVmZXJlbmNlcy5oIgorI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgi
CisjaW1wb3J0ICJXZWJSZXNvdXJjZVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlN0cmluZ1RydW5j
YXRvci5oIgorI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgorI2ltcG9ydCAiV2ViVUlEZWxl
Z2F0ZVByaXZhdGUuaCIKKyNpbXBvcnQgIldlYlZpZXdJbnRlcm5hbC5oIgorI2ltcG9ydCA8QXBw
S2l0L05TQWNjZXNzaWJpbGl0eS5oPgorI2ltcG9ydCA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBs
aWNhdGlvblNlcnZpY2VzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmg+CisjaW1wb3J0IDxXZWJDb3JlL0NhY2hlZEltYWdlLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0NhY2hlZFJlc291cmNlQ2xpZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+
CisjaW1wb3J0IDxXZWJDb3JlL0NvbnRleHRNZW51Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0NvbnRl
eHRNZW51Q29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9Eb2N1bWVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0RyYWdDb250
cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0VkaXRvci5oPgorI2ltcG9ydCA8V2ViQ29yZS9F
ZGl0b3JEZWxldGVBY3Rpb24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvRWxlbWVudC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9FdmVudEhhbmRsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRXhjZXB0aW9uSGFu
ZGxlcnMuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0ZvY3VzQ29udHJvbGxlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CisjaW1wb3J0IDxXZWJDb3JlL0hpdFRlc3RSZXN1
bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9h
cmRFdmVudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9MZWdhY3lXZWJBcmNoaXZlLmg+CisjaW1wb3J0
IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUGFnZS5oPgor
I2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUGxhdGZvcm1Nb3VzZUV2ZW50Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1w
b3J0IDxXZWJDb3JlL1NlbGVjdGlvbkNvbnRyb2xsZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hh
cmVkQnVmZmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZUZvbnREYXRhLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1RleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZVRleHRSZW5kZXJlci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9tYXJrdXAuaD4KKyNpbXBvcnQgPFdlYktpdC9ET00uaD4KKyNpbXBvcnQgPFdlYktpdC9ET01F
eHRlbnNpb25zLmg+CisjaW1wb3J0IDxXZWJLaXQvRE9NUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0IDxkbGZjbi5oPgorI2ltcG9ydCA8bGltaXRz
PgorI2ltcG9ydCA8cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4K
KyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCitAaW50ZXJmYWNlIE5TV2luZG93IChCb3Jk
ZXJWaWV3QWNjZXNzKQorLSAoTlNWaWV3Kilfd2ViX2JvcmRlclZpZXc7CitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2VzcykKKy0gKE5TVmlldyopX3dlYl9i
b3JkZXJWaWV3Cit7CisgICAgcmV0dXJuIF9ib3JkZXJWaWV3OworfQorQGVuZAorCitAaW50ZXJm
YWNlIFdlYlJlc3BvbmRlckNoYWluU2luayA6IE5TUmVzcG9uZGVyIHsKKyAgICBOU1Jlc3BvbmRl
ciogX2xhc3RSZXNwb25kZXJJbkNoYWluOworICAgIEJPT0wgX3JlY2VpdmVkVW5oYW5kbGVkQ29t
bWFuZDsKK30KKy0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46KE5TUmVzcG9uZGVyICopY2hh
aW47CistICh2b2lkKWRldGFjaDsKKy0gKEJPT0wpcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kOwor
QGVuZAorCitzdGF0aWMgSU1QIG9sZFNldEN1cnNvcklNUCA9IE5VTEw7CisKKyNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgorCitzdGF0aWMgSU1QIG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAgPSBOVUxM
Oworc3RhdGljIEJPT0wgY2FuU2V0Q3Vyc29yID0gWUVTOworCitzdGF0aWMgdm9pZCByZXNldEN1
cnNvclJlY3RzKE5TV2luZG93KiBzZWxmLCBTRUwgY21kKQoreworICAgIE5TUG9pbnQgcG9pbnQg
PSBbc2VsZiBtb3VzZUxvY2F0aW9uT3V0c2lkZU9mRXZlbnRTdHJlYW1dOworICAgIE5TVmlldyog
dmlldyA9IFtbc2VsZiBfd2ViX2JvcmRlclZpZXddIGhpdFRlc3Q6cG9pbnRdOworICAgIGlmIChb
dmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7CisgICAgICAgIFdlYkhU
TUxWaWV3ICpodG1sVmlldyA9IChXZWJIVE1MVmlldyopdmlldzsKKyAgICAgICAgTlNQb2ludCBs
b2NhbFBvaW50ID0gW2h0bWxWaWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdOwor
ICAgICAgICBOU0RpY3Rpb25hcnkgKmRpY3QgPSBbaHRtbFZpZXcgZWxlbWVudEF0UG9pbnQ6bG9j
YWxQb2ludCBhbGxvd1NoYWRvd0NvbnRlbnQ6Tk9dOworICAgICAgICBET01FbGVtZW50ICplbGVt
ZW50ID0gW2RpY3Qgb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRET01Ob2RlS2V5XTsKKyAgICAgICAg
aWYgKCFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MQXBwbGV0RWxlbWVudCBjbGFzc11d
ICYmICFbZWxlbWVudCBpc0tpbmRPZkNsYXNzOltET01IVE1MT2JqZWN0RWxlbWVudCBjbGFzc11d
ICYmCisgICAgICAgICAgICAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEVtYmVkRWxl
bWVudCBjbGFzc11dKQorICAgICAgICAgICAgY2FuU2V0Q3Vyc29yID0gTk87CisgICAgfQorICAg
IG9sZFJlc2V0Q3Vyc29yUmVjdHNJTVAoc2VsZiwgY21kKTsKKyAgICBjYW5TZXRDdXJzb3IgPSBZ
RVM7Cit9CisKK3N0YXRpYyB2b2lkIHNldEN1cnNvcihOU0N1cnNvciogc2VsZiwgU0VMIGNtZCkK
K3sKKyAgICBpZiAoY2FuU2V0Q3Vyc29yKQorICAgICAgICBvbGRTZXRDdXJzb3JJTVAoc2VsZiwg
Y21kKTsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgc2V0Q3Vyc29yKE5TV2luZG93KiBzZWxm
LCBTRUwgY21kLCBOU1BvaW50IHBvaW50KQoreworICAgIE5TVmlldyogdmlldyA9IFtbc2VsZiBf
d2ViX2JvcmRlclZpZXddIGhpdFRlc3Q6cG9pbnRdOworICAgIGlmIChbdmlldyBpc0tpbmRPZkNs
YXNzOltXZWJIVE1MVmlldyBjbGFzc11dKSB7CisgICAgICAgIFdlYkhUTUxWaWV3ICpodG1sVmll
dyA9IChXZWJIVE1MVmlldyopdmlldzsKKyAgICAgICAgTlNQb2ludCBsb2NhbFBvaW50ID0gW2h0
bWxWaWV3IGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdOworICAgICAgICBOU0RpY3Rp
b25hcnkgKmRpY3QgPSBbaHRtbFZpZXcgZWxlbWVudEF0UG9pbnQ6bG9jYWxQb2ludCBhbGxvd1No
YWRvd0NvbnRlbnQ6Tk9dOworICAgICAgICBET01FbGVtZW50ICplbGVtZW50ID0gW2RpY3Qgb2Jq
ZWN0Rm9yS2V5OldlYkVsZW1lbnRET01Ob2RlS2V5XTsKKyAgICAgICAgaWYgKCFbZWxlbWVudCBp
c0tpbmRPZkNsYXNzOltET01IVE1MQXBwbGV0RWxlbWVudCBjbGFzc11dICYmICFbZWxlbWVudCBp
c0tpbmRPZkNsYXNzOltET01IVE1MT2JqZWN0RWxlbWVudCBjbGFzc11dICYmCisgICAgICAgICAg
ICAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEVtYmVkRWxlbWVudCBjbGFzc11dKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBvbGRTZXRDdXJzb3JJTVAoc2VsZiwgY21k
LCBwb2ludCk7Cit9CisKKyNlbmRpZgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQorCitAaW50ZXJmYWNlIFdlYkxheWVySG9zdGluZ1ZpZXcgOiBOU1ZpZXcKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFdlYkxheWVySG9zdGluZ1ZpZXcKKworLy8gRW1wdHkgTlNWaWV3cyBpbnRl
cmNlcHQgcmlnaHRNb3VzZURvd246IHRvIGRvIGNvbnRleHQgbWVudSBoYW5kbGluZywgYnV0IHdl
IG5lZWQgdGhlIFdlYkxheWVySG9zdGluZ1ZpZXcgdG8KKy8vIGxldCByaWdodCBtb3VzZSBjbGlj
a3MgdGhyb3VnaC4KKy0gKHZvaWQpcmlnaHRNb3VzZURvd246KE5TRXZlbnQgKilldmVudAorewor
ICAgIFtbc2VsZiBuZXh0UmVzcG9uZGVyXSBwZXJmb3JtU2VsZWN0b3I6X2NtZCB3aXRoT2JqZWN0
OmV2ZW50XTsKK30KKworQGVuZAorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCitleHRlcm4gIkMiIHsKKworLy8gTmVlZCB0byBkZWNsYXJlIHRoZXNlIGF0dHJpYnV0
ZSBuYW1lcyBiZWNhdXNlIEFwcEtpdCBleHBvcnRzIHRoZW0gYnV0IGRvZXMgbm90IG1ha2UgdGhl
bSBhdmFpbGFibGUgaW4gQVBJIG9yIFNQSSBoZWFkZXJzLgorCitleHRlcm4gTlNTdHJpbmcgKk5T
TWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWU7CitleHRlcm4gTlNTdHJpbmcgKk5TVGV4
dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJpYnV0ZU5hbWU7CisKK30KKworQGludGVyZmFjZSBO
U1ZpZXcgKFdlYk5TVmlld0RldGFpbHMpCistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5UmVjdElm
TmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVSZWN0OihCT09MKWlz
VmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcgKil2aXNpYmxlVmll
dyB0b3BWaWV3OihCT09MKXRvcFZpZXc7CistICh2b2lkKV9yZWN1cnNpdmVEaXNwbGF5QWxsRGly
dHlXaXRoTG9ja0ZvY3VzOihCT09MKW5lZWRzTG9ja0ZvY3VzIHZpc1JlY3Q6KE5TUmVjdCl2aXNS
ZWN0OworLSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmlu
Z09wYWNpdHk6KE5TUmVjdClkaXNwbGF5UmVjdCBpbkNvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0
ICopY29udGV4dCB0b3BWaWV3OihCT09MKXRvcFZpZXc7CistIChOU1JlY3QpX2RpcnR5UmVjdDsK
Ky0gKHZvaWQpX3NldERyYXdzT3duRGVzY2VuZGFudHM6KEJPT0wpZHJhd3NPd25EZXNjZW5kYW50
czsKKy0gKHZvaWQpX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1ZUFuY2VzdG9yczsKKy0gKHZv
aWQpX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZTsKK0BlbmQKKworQGludGVyZmFjZSBOU0FwcGxpY2F0
aW9uIChXZWJOU0FwcGxpY2F0aW9uRGV0YWlscykKKy0gKHZvaWQpc3BlYWtTdHJpbmc6KE5TU3Ry
aW5nICopc3RyaW5nOworQGVuZAorCitAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0Rl
dGFpbHMpCistIChpZClfbmV3Rmlyc3RSZXNwb25kZXJBZnRlclJlc2lnbmluZzsKKy0gKHZvaWQp
X3NldEZvcmNlQWN0aXZlQ29udHJvbHM6KEJPT0wpZmxhZzsKK0BlbmQKKworQGludGVyZmFjZSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCistIChpZClf
aW5pdFdpdGhET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKKy0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgZG9jdW1lbnQ6KERPTURvY3Vt
ZW50ICopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1
YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CitAZW5kCisKK0BpbnRlcmZhY2Ug
TlNTcGVsbENoZWNrZXIgKFdlYk5TU3BlbGxDaGVja2VyRGV0YWlscykKKy0gKHZvaWQpbGVhcm5X
b3JkOihOU1N0cmluZyAqKXdvcmQ7CitAZW5kCisKKy8vIEJ5IGltYWdpbmcgdG8gYSB3aWR0aCBh
IGxpdHRsZSB3aWRlciB0aGFuIHRoZSBhdmFpbGFibGUgcGl4ZWxzLAorLy8gdGhpbiBwYWdlcyB3
aWxsIGJlIHNjYWxlZCBkb3duIGEgbGl0dGxlLCBtYXRjaGluZyB0aGUgd2F5IHRoZXkKKy8vIHBy
aW50IGluIElFIGFuZCBDYW1pbm8uIFRoaXMgbGV0cyB0aGVtIHVzZSBmZXdlciBzaGVldHMgdGhh
biB0aGV5CisvLyB3b3VsZCBvdGhlcndpc2UsIHdoaWNoIGlzIHByZXN1bWFibHkgd2h5IG90aGVy
IGJyb3dzZXJzIGRvIHRoaXMuCisvLyBXaWRlIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIGRvd24gbW9y
ZSB0aGFuIHRoaXMuCisjZGVmaW5lIFByaW50aW5nTWluaW11bVNocmlua0ZhY3RvciAgICAgMS4y
NWYKKworLy8gVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyBob3cgc21hbGwgd2UgYXJlIHdpbGxpbmcg
dG8gcmVkdWNlIHRoZSBwYWdlIGNvbnRlbnQKKy8vIGluIG9yZGVyIHRvIGFjY29tbW9kYXRlIHRo
ZSB3aWRlc3QgbGluZS4gSWYgdGhlIHBhZ2Ugd291bGQgaGF2ZSB0byBiZQorLy8gcmVkdWNlZCBz
bWFsbGVyIHRvIG1ha2UgdGhlIHdpZGVzdCBsaW5lIGZpdCwgd2UganVzdCBjbGlwIGluc3RlYWQg
KHRoaXMKKy8vIGJlaGF2aW9yIG1hdGNoZXMgTWFjSUUgYW5kIE1vemlsbGEsIGF0IGxlYXN0KQor
I2RlZmluZSBQcmludGluZ01heGltdW1TaHJpbmtGYWN0b3IgICAgIDIuMGYKKworLy8gVGhpcyBu
dW1iZXIgZGV0ZXJtaW5lcyBob3cgc2hvcnQgdGhlIGxhc3QgcHJpbnRlZCBwYWdlIG9mIGEgbXVs
dGktcGFnZSBwcmludCBzZXNzaW9uCisvLyBjYW4gYmUgYmVmb3JlIHdlIHRyeSB0byBzaHJpbmsg
dGhlIHNjYWxlIGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHBhZ2VzLCBhbmQKKy8v
IHRodXMgZWxpbWluYXRlIHRoZSBvcnBoYW4uCisjZGVmaW5lIExhc3RQcmludGVkUGFnZU9ycGhh
blJhdGlvICAgICAgMC4xZgorCisvLyBUaGlzIG51bWJlciBkZXRlcm1pbmVzIHRoZSBhbW91bnQg
dGhlIHNjYWxlIGZhY3RvciBpcyBhZGp1c3RlZCB0byB0cnkgdG8gZWxpbWluYXRlIG9ycGhhbnMu
CisvLyBJdCBoYXMgbm8gZGlyZWN0IG1hdGhlbWF0aWNhbCByZWxhdGlvbnNoaXAgdG8gTGFzdFBy
aW50ZWRQYWdlT3JwaGFuUmF0aW8sIGR1ZSB0byB2YXJpYWJsZQorLy8gbnVtYmVycyBvZiBwYWdl
cywgbG9naWMgdG8gYXZvaWQgYnJlYWtpbmcgZWxlbWVudHMsIGFuZCBDU1Mtc3VwcGxpZWQgaGFy
ZCBwYWdlIGJyZWFrcy4KKyNkZWZpbmUgUHJpbnRpbmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50ICAx
LjFmCisKKyNkZWZpbmUgQVVUT1NDUk9MTF9JTlRFUlZBTCAgICAgICAgICAgICAwLjFmCisKKyNk
ZWZpbmUgRFJBR19MQUJFTF9CT1JERVJfWCAgICAgICAgICAgICA0LjBmCisvL0tlZXAgYm9yZGVy
X3kgaW4gc3luY2ggd2l0aCBEcmFnQ29udHJvbGxlcjo6TGlua0RyYWdCb3JkZXJJbnNldAorI2Rl
ZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9ZICAgICAgICAgICAgIDIuMGYKKyNkZWZpbmUgRFJBR19M
QUJFTF9SQURJVVMgICAgICAgICAgICAgICA1LjBmCisjZGVmaW5lIERSQUdfTEFCRUxfQk9SREVS
X1lfT0ZGU0VUICAgICAgICAgICAgICAyLjBmCisKKyNkZWZpbmUgTUlOX0RSQUdfTEFCRUxfV0lE
VEhfQkVGT1JFX0NMSVAgICAgICAgIDEyMC4wZgorI2RlZmluZSBNQVhfRFJBR19MQUJFTF9XSURU
SCAgICAgICAgICAgICAgICAgICAgMzIwLjBmCisKKyNkZWZpbmUgRFJBR19MSU5LX0xBQkVMX0ZP
TlRfU0laRSAgIDExLjBmCisjZGVmaW5lIERSQUdfTElOS19VUkxfRk9OVF9TSVpFICAgMTAuMGYK
KworLy8gQW55IG5vbi16ZXJvIHZhbHVlIHdpbGwgZG8sIGJ1dCB1c2luZyBzb21ldGhpbmcgcmVj
b2duaXphYmxlIG1pZ2h0IGhlbHAgdXMgZGVidWcgc29tZSBkYXkuCisjZGVmaW5lIFRSQUNLSU5H
X1JFQ1RfVEFHIDB4QkFERkFDRQorCisvLyBGSVhNRTogVGhpcyBjb25zdGFudCBpcyBjb3BpZWQg
ZnJvbSBBcHBLaXQncyBfTlhTbWFydFBhc3RlIGNvbnN0YW50LgorI2RlZmluZSBXZWJTbWFydFBh
c3RlUGJvYXJkVHlwZSBAIk5lWFQgc21hcnQgcGFzdGUgcGFzdGVib2FyZCB0eXBlIgorCisjZGVm
aW5lIFNUQU5EQVJEX1dFSUdIVCA1CisjZGVmaW5lIE1JTl9CT0xEX1dFSUdIVCA3CisjZGVmaW5l
IFNUQU5EQVJEX0JPTERfV0VJR0hUIDkKKworLy8gRmFrZSBVUkwgc2NoZW1lLgorI2RlZmluZSBX
ZWJEYXRhUHJvdG9jb2xTY2hlbWUgQCJ3ZWJraXQtZmFrZS11cmwiCisKKy8vIDxyZGFyOi8vcHJv
YmxlbS80OTg1NTI0PiBSZWZlcmVuY2VzIHRvIFdlYkNvcmVTY3JvbGxWaWV3IGFzIGEgc3Vidmll
dyBvZiBhIFdlYkhUTUxWaWV3IG1heSBiZSBwcmVzZW50CisvLyBpbiBzb21lIE5JQiBmaWxlcywg
c28gTlNVbmFyY2hpdmVyIG11c3QgYmUgc3RpbGwgYWJsZSB0byBsb29rIHVwIHRoaXMgbm93LXVu
dXNlZCBjbGFzcy4KK0BpbnRlcmZhY2UgV2ViQ29yZVNjcm9sbFZpZXcgOiBOU1Njcm9sbFZpZXcK
K0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkNvcmVTY3JvbGxWaWV3CitAZW5kCisKKy8vIGlm
IFlFUywgZG8gdGhlIHN0YW5kYXJkIE5TVmlldyBoaXQgdGVzdCAod2hpY2ggY2FuJ3QgZ2l2ZSB0
aGUgcmlnaHQgcmVzdWx0IHdoZW4gSFRNTCBvdmVybGFwcyBhIHZpZXcpCitzdGF0aWMgQk9PTCBm
b3JjZU5TVmlld0hpdFRlc3Q7CisKKy8vIGlmIFlFUywgZG8gdGhlICJ0b3AgV2ViSFRNTFZpZXci
IGhpdCB0ZXN0ICh3aGljaCB3ZSdkIGxpa2UgdG8gZG8gYWxsIHRoZSB0aW1lIGJ1dCBjYW4ndCBi
ZWNhdXNlIG9mIEphdmEgcmVxdWlyZW1lbnRzIFtzZWUgYnVnIDQzNDk3MjFdKQorc3RhdGljIEJP
T0wgZm9yY2VXZWJIVE1MVmlld0hpdFRlc3Q7CisKK3N0YXRpYyBXZWJIVE1MVmlldyAqbGFzdEhp
dFZpZXc7CisKKy8vIFdlIG5lZWQgdGhpcyB0byBiZSBhYmxlIHRvIHNhZmVseSByZWZlcmVuY2Ug
dGhlIENhY2hlZEltYWdlIGZvciB0aGUgcHJvbWlzZWQgZHJhZyBkYXRhCitzdGF0aWMgQ2FjaGVk
UmVzb3VyY2VDbGllbnQqIHByb21pc2VkRGF0YUNsaWVudCgpCit7CisgICAgc3RhdGljIENhY2hl
ZFJlc291cmNlQ2xpZW50KiBzdGF0aWNDYWNoZWRSZXNvdXJjZUNsaWVudCA9IG5ldyBDYWNoZWRS
ZXNvdXJjZUNsaWVudDsKKyAgICByZXR1cm4gc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQ7Cit9
CisKK0BpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorLSAo
Qk9PTClfaW1hZ2VFeGlzdHNBdFBhdGhzOihOU0FycmF5ICopcGF0aHM7CistIChET01Eb2N1bWVu
dEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJk
ICopcGFzdGVib2FyZCBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dCBhbGxvd1BsYWluVGV4
dDooQk9PTClhbGxvd1BsYWluVGV4dDsKKy0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21QYXN0
ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkOworLSAodm9pZClfcGFzdGVXaXRoUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClh
bGxvd1BsYWluVGV4dDsKKy0gKHZvaWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKKy0gKHZvaWQpX3JlbW92ZU1vdXNlTW92ZWRPYnNl
cnZlclVuY29uZGl0aW9uYWxseTsKKy0gKHZvaWQpX3JlbW92ZVN1cGVydmlld09ic2VydmVyczsK
Ky0gKHZvaWQpX3JlbW92ZVdpbmRvd09ic2VydmVyczsKKy0gKEJPT0wpX3Nob3VsZEluc2VydEZy
YWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVwbGFjaW5nRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNlcnRBY3Rpb24pYWN0aW9u
OworLSAoQk9PTClfc2hvdWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RP
TVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9u
KWFjdGlvbjsKKy0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJp
bmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKKy0gKGZs
b2F0KV9jYWxjdWxhdGVQcmludEhlaWdodDsKKy0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2U7
CistIChCT09MKV9zaG91bGREZWxldGVSYW5nZTooRE9NUmFuZ2UgKilyYW5nZTsKKy0gKE5TVmll
dyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpX3dyaXRlU2Vs
ZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2FyZDoo
TlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJp
YnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nOworLSAoRE9NUmFuZ2UgKilfZG9jdW1lbnRS
YW5nZTsKKy0gKHZvaWQpX3NldE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQ7CistIChX
ZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldzsKKy0gKEJPT0wpX2lzVG9wSFRNTFZpZXc7CistICh2
b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlOworLSAodm9pZClfd2ViX3NldFByaW50
aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplOworLSAodm9pZClfd2ViX2NsZWFyUHJp
bnRpbmdNb2RlUmVjdXJzaXZlOworQGVuZAorCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElH
RVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisKK0BpbnRlcmZhY2UgV2ViSFRN
TFZpZXcgKFdlYkhUTUxWaWV3VGV4dENoZWNraW5nSW50ZXJuYWwpCistICh2b2lkKW9yZGVyRnJv
bnRTdWJzdGl0dXRpb25zUGFuZWw6KGlkKXNlbmRlcjsKKy0gKEJPT0wpc21hcnRJbnNlcnREZWxl
dGVFbmFibGVkOworLSAodm9pZClzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxh
ZzsKKy0gKHZvaWQpdG9nZ2xlU21hcnRJbnNlcnREZWxldGU6KGlkKXNlbmRlcjsKKy0gKEJPT0wp
aXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ7CistICh2b2lkKXNldEF1dG9tYXRp
Y1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbjooaWQpc2VuZGVyOworLSAoQk9PTClpc0F1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkOworLSAodm9pZClzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZDooQk9PTClmbGFnOworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOihp
ZClzZW5kZXI7CistIChCT09MKWlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ7Cist
ICh2b2lkKXNldEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWc7Cist
ICh2b2lkKXRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246KGlkKXNlbmRlcjsKKy0gKEJP
T0wpaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOworLSAodm9pZClzZXRBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOihCT09MKWZsYWc7CistICh2b2lkKXRvZ2dsZUF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudDooaWQpc2VuZGVyOworLSAoQk9PTClpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQ7CistICh2b2lkKXNldEF1dG9tYXRpY1NwZWxsaW5nQ29ycmVj
dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uOihpZClzZW5kZXI7CitAZW5kCisKKyNlbmRpZgorCitAaW50ZXJmYWNlIFdlYkhU
TUxWaWV3IChXZWJGb3J3YXJkRGVjbGFyYXRpb24pIC8vIEZJWE1FOiBQdXQgdGhpcyBpbiBhIG5v
cm1hbCBjYXRlZ29yeSBhbmQgc3RvcCBkb2luZyB0aGUgZm9yd2FyZCBkZWNsYXJhdGlvbiB0cmlj
ay4KKy0gKHZvaWQpX3NldFByaW50aW5nOihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6
KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGgg
YWRqdXN0Vmlld1NpemU6KEJPT0wpYWRqdXN0Vmlld1NpemU7CitAZW5kCisKK0BjbGFzcyBOU1Rl
eHRJbnB1dENvbnRleHQ7CitAaW50ZXJmYWNlIE5TUmVzcG9uZGVyIChBcHBLaXREZXRhaWxzKQor
LSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0OworQGVuZAorCitAaW50ZXJmYWNl
IE5TT2JqZWN0IChOU1RleHRJbnB1dENvbnRleHREZXRhaWxzKQorLSAoQk9PTCl3YW50c1RvSGFu
ZGxlTW91c2VFdmVudHM7CistIChCT09MKWhhbmRsZU1vdXNlRXZlbnQ6KE5TRXZlbnQgKilldmVu
dDsKK0BlbmQKKworQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2ViTlNUZXh0SW5wdXRTdXBwb3J0
KSA8TlNUZXh0SW5wdXQ+CistICh2b2lkKV91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXI7
CitAZW5kCisKK0BpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYkVkaXRpbmdTdHlsZVN1cHBvcnQp
CistIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGU7CistIChOU1N0cmluZyAq
KV9jb2xvckFzU3RyaW5nOihOU0NvbG9yICopY29sb3I7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNW
aWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKKy0gKHZvaWQpX3dlYl9hZGREZXNjZW5kYW50
V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRhYmxlQXJyYXkgKikgYXJyYXk7CitAZW5kCisKK0Bp
bnRlcmZhY2UgTlNNdXRhYmxlRGljdGlvbmFyeSAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCist
ICh2b2lkKV93ZWJfc2V0T2JqZWN0SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleTsK
K0BlbmQKKworLy8gSGFuZGxlcyB0aGUgY29tcGxldGU6IHRleHQgY29tbWFuZAorQGludGVyZmFj
ZSBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIDogTlNPYmplY3QgPE5TVGFibGVWaWV3RGVsZWdh
dGUsIE5TVGFibGVWaWV3RGF0YVNvdXJjZT4geworQHByaXZhdGUKKyAgICBXZWJIVE1MVmlldyAq
X3ZpZXc7CisgICAgTlNXaW5kb3cgKl9wb3B1cFdpbmRvdzsKKyAgICBOU1RhYmxlVmlldyAqX3Rh
YmxlVmlldzsKKyAgICBOU0FycmF5ICpfY29tcGxldGlvbnM7CisgICAgTlNTdHJpbmcgKl9vcmln
aW5hbFN0cmluZzsKKyAgICBpbnQgcHJlZml4TGVuZ3RoOworfQorLSAoaWQpaW5pdFdpdGhIVE1M
VmlldzooV2ViSFRNTFZpZXcgKil2aWV3OworLSAodm9pZClkb0NvbXBsZXRpb247CistICh2b2lk
KWVuZFJldmVydGluZ0NoYW5nZTooQk9PTClyZXZlcnRDaGFuZ2UgbW92ZUxlZnQ6KEJPT0wpZ29M
ZWZ0OworLSAoQk9PTClwb3B1cFdpbmRvd0lzT3BlbjsKKy0gKEJPT0wpZmlsdGVyS2V5RG93bjoo
TlNFdmVudCAqKWV2ZW50OworLSAodm9pZClfcmVmbGVjdFNlbGVjdGlvbjsKK0BlbmQKKworc3Ry
dWN0IFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyB7CisgICAgS2V5Ym9h
cmRFdmVudCogZXZlbnQ7CisgICAgQk9PTCBldmVudFdhc0hhbmRsZWQ7CisgICAgQk9PTCBzaG91
bGRTYXZlQ29tbWFuZDsKKyAgICAvLyBUaGUgSW5wdXQgTWV0aG9kIG1heSBjb25zdW1lIGFuIGV2
ZW50IGFuZCBub3QgdGVsbCB1cywgaW4KKyAgICAvLyB3aGljaCBjYXNlIHdlIHNob3VsZCBub3Qg
YnViYmxlIHRoZSBldmVudCB1cCB0aGUgRE9NCisgICAgQk9PTCBjb25zdW1lZEJ5SU07Cit9Owor
CitAaW50ZXJmYWNlIFdlYkhUTUxWaWV3UHJpdmF0ZSA6IE5TT2JqZWN0IHsKK0BwdWJsaWMKKyAg
ICBCT09MIGNsb3NlZDsKKyAgICBCT09MIG5lZWRzVG9BcHBseVN0eWxlczsKKyAgICBCT09MIGln
bm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzOworICAgIEJPT0wgcHJpbnRpbmc7CisgICAgQk9PTCBh
dm9pZGluZ1ByaW50T3JwaGFuOworICAgIEJPT0wgb2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNh
dGlvbnM7CisgICAgQk9PTCBvYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zOworICAgIEJP
T0wgb2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9uczsKKyAgICBCT09MIHJlc2lnbmluZ0ZpcnN0
UmVzcG9uZGVyOworICAgIAorICAgIGlkIHNhdmVkU3Vidmlld3M7CisgICAgQk9PTCBzdWJ2aWV3
c1NldEFzaWRlOworICAgIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBO
U1ZpZXcgKmxheWVySG9zdGluZ1ZpZXc7CisjZW5kaWYKKworICAgIE5TRXZlbnQgKm1vdXNlRG93
bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKyAgICBCT09MIGhhbmRs
aW5nTW91c2VEb3duRXZlbnQ7CisgICAgTlNFdmVudCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFm
dGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKworICAgIC8vIEEgV2ViSFRNTFZpZXcgaGFzIGEgc2lu
Z2xlIGlucHV0IGNvbnRleHQsIGJ1dCB3ZSByZXR1cm4gbmlsIHdoZW4gaW4gbm9uLWVkaXRhYmxl
IGNvbnRlbnQgdG8gYXZvaWQgbWFraW5nIGlucHV0IG1ldGhvZHMgZG8gdGhlaXIgd29yay4KKyAg
ICAvLyBUaGlzIHN0YXRlIGlzIHNhdmVkIGVhY2ggdGltZSBzZWxlY3Rpb24gY2hhbmdlcywgYmVj
YXVzZSBjb21wdXRpbmcgaXQgY2F1c2VzIHN0eWxlIHJlY2FsYywgd2hpY2ggaXMgbm90IGFsd2F5
cyBzYWZlIHRvIGRvLgorICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0OworCisgICAgTlNQb2lu
dCBsYXN0U2Nyb2xsUG9zaXRpb247CisKKyAgICBXZWJQbHVnaW5Db250cm9sbGVyICpwbHVnaW5D
b250cm9sbGVyOworICAgIAorICAgIE5TU3RyaW5nICp0b29sVGlwOworICAgIE5TVG9vbFRpcFRh
ZyBsYXN0VG9vbFRpcFRhZzsKKyAgICBpZCB0cmFja2luZ1JlY3RPd25lcjsKKyAgICB2b2lkICp0
cmFja2luZ1JlY3RVc2VyRGF0YTsKKyAgICAKKyAgICBOU1RpbWVyICphdXRvc2Nyb2xsVGltZXI7
CisgICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdnZXJFdmVudDsKKyAgICAKKyAgICBOU0FycmF5
ICpwYWdlUmVjdHM7CisKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpoaWdobGlnaHRlcnM7CisK
KyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIEJPT0wgbmV4dFJlc3BvbmRlckRpc2FibGVk
T25jZTsKKyNlbmRpZgorICAgIAorICAgIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIgKmNvbXBD
b250cm9sbGVyOworICAgIAorICAgIEJPT0wgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kOworCisgICAg
V2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBpbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzOworICAgIEJPT0wgcmVjZWl2ZWROT09QOworICAgIAorICAgIFdlYkRhdGFT
b3VyY2UgKmRhdGFTb3VyY2U7CisgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UqIHByb21pc2VkRHJh
Z1RJRkZEYXRhU291cmNlOworICAgIAorICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0ZUZvY3Vz
ZWRBbmRBY3RpdmVTdGF0ZVRpbWVyOworICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0ZU1vdXNl
b3ZlclRpbWVyOworCisgICAgU0VMIHNlbGVjdG9yRm9yRG9Db21tYW5kQnlTZWxlY3RvcjsKKwor
I2lmbmRlZiBOREVCVUcKKyAgICBCT09MIGVudW1lcmF0aW5nU3Vidmlld3M7CisjZW5kaWYKK30K
Ky0gKHZvaWQpY2xlYXI7CitAZW5kCisKK3N0YXRpYyBOU0NlbGxTdGF0ZVZhbHVlIGtpdChUcmlT
dGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgRmFsc2VU
cmlTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBOU09mZlN0YXRlOworICAgICAgICBjYXNlIFRy
dWVUcmlTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBOU09uU3RhdGU7CisgICAgICAgIGNhc2Ug
TWl4ZWRUcmlTdGF0ZToKKyAgICAgICAgICAgIHJldHVybiBOU01peGVkU3RhdGU7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBOU09mZlN0YXRlOworfQorCitA
aW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXdQcml2YXRlCisKKysgKHZvaWQpaW5pdGlhbGl6ZQor
eworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworI2lmbmRlZiBCVUlMRElOR19PTl9U
SUdFUgorICAgIFdlYkNvcmVPYmpDRmluYWxpemVPbk1haW5UaHJlYWQoc2VsZik7CisjZW5kaWYK
KworICAgIGlmICghb2xkU2V0Q3Vyc29ySU1QKSB7CisjaWZkZWYgQlVJTERJTkdfT05fVElHRVIK
KyAgICAgICAgTWV0aG9kIHNldEN1cnNvck1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9k
KFtOU0N1cnNvciBjbGFzc10sIEBzZWxlY3RvcihzZXQpKTsKKyNlbHNlCisgICAgICAgIE1ldGhv
ZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNXaW5kb3cgY2xh
c3NdLCBAc2VsZWN0b3IoX3NldEN1cnNvckZvck1vdXNlTG9jYXRpb246KSk7CisjZW5kaWYKKyAg
ICAgICAgQVNTRVJUKHNldEN1cnNvck1ldGhvZCk7CisKKyAgICAgICAgb2xkU2V0Q3Vyc29ySU1Q
ID0gbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKHNldEN1cnNvck1ldGhvZCwgKElNUClzZXRDdXJz
b3IpOworICAgICAgICBBU1NFUlQob2xkU2V0Q3Vyc29ySU1QKTsKKyAgICB9CisgICAgCisjaWZk
ZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBpZiAoIW9sZFJlc2V0Q3Vyc29yUmVjdHNJTVApIHsK
KyAgICAgICAgTWV0aG9kIHJlc2V0Q3Vyc29yUmVjdHNNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5j
ZU1ldGhvZChbTlNXaW5kb3cgY2xhc3NdLCBAc2VsZWN0b3IocmVzZXRDdXJzb3JSZWN0cykpOwor
ICAgICAgICBBU1NFUlQocmVzZXRDdXJzb3JSZWN0c01ldGhvZCk7CisgICAgICAgIG9sZFJlc2V0
Q3Vyc29yUmVjdHNJTVAgPSBtZXRob2Rfc2V0SW1wbGVtZW50YXRpb24ocmVzZXRDdXJzb3JSZWN0
c01ldGhvZCwgKElNUClyZXNldEN1cnNvclJlY3RzKTsKKyAgICAgICAgQVNTRVJUKG9sZFJlc2V0
Q3Vyc29yUmVjdHNJTVApOworICAgIH0KKyNlbmRpZgorCit9CisKKy0gKHZvaWQpZGVhbGxvYwor
eworICAgIGlmIChXZWJDb3JlT2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbV2Vi
SFRNTFZpZXdQcml2YXRlIGNsYXNzXSwgc2VsZikpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVCghYXV0b3Njcm9sbFRpbWVyKTsKKyAgICBBU1NFUlQoIWF1dG9zY3JvbGxUcmlnZ2VyRXZl
bnQpOworICAgIEFTU0VSVCghdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIpOworICAg
IEFTU0VSVCghdXBkYXRlTW91c2VvdmVyVGltZXIpOworICAgIAorICAgIFttb3VzZURvd25FdmVu
dCByZWxlYXNlXTsKKyAgICBba2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAgIFtwbHVnaW5Db250
cm9sbGVyIHJlbGVhc2VdOworICAgIFt0b29sVGlwIHJlbGVhc2VdOworICAgIFtjb21wQ29udHJv
bGxlciByZWxlYXNlXTsKKyAgICBbZGF0YVNvdXJjZSByZWxlYXNlXTsKKyAgICBbaGlnaGxpZ2h0
ZXJzIHJlbGVhc2VdOworICAgIGlmIChwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZSkKKyAgICAg
ICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFD
bGllbnQoKSk7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUK
K3sKKyAgICBBU1NFUlRfTUFJTl9USFJFQUQoKTsKKworICAgIGlmIChwcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZSkKKyAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UtPnJlbW92ZUNs
aWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7CisKKyAgICBbc3VwZXIgZmluYWxpemVdOworfQor
CistICh2b2lkKWNsZWFyCit7CisgICAgW21vdXNlRG93bkV2ZW50IHJlbGVhc2VdOworICAgIFtr
ZXlEb3duRXZlbnQgcmVsZWFzZV07CisgICAgW3BsdWdpbkNvbnRyb2xsZXIgcmVsZWFzZV07Cisg
ICAgW3Rvb2xUaXAgcmVsZWFzZV07CisgICAgW2NvbXBDb250cm9sbGVyIHJlbGVhc2VdOworICAg
IFtkYXRhU291cmNlIHJlbGVhc2VdOworICAgIFtoaWdobGlnaHRlcnMgcmVsZWFzZV07CisgICAg
aWYgKHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlKQorICAgICAgICBwcm9taXNlZERyYWdUSUZG
RGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKKworICAgIG1v
dXNlRG93bkV2ZW50ID0gbmlsOworICAgIGtleURvd25FdmVudCA9IG5pbDsKKyAgICBwbHVnaW5D
b250cm9sbGVyID0gbmlsOworICAgIHRvb2xUaXAgPSBuaWw7CisgICAgY29tcENvbnRyb2xsZXIg
PSBuaWw7CisgICAgZGF0YVNvdXJjZSA9IG5pbDsKKyAgICBoaWdobGlnaHRlcnMgPSBuaWw7Cisg
ICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UgPSAwOworCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIGxheWVySG9zdGluZ1ZpZXcgPSBuaWw7CisjZW5kaWYKK30KKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVy
bmFsKQorCistIChET01SYW5nZSAqKV9kb2N1bWVudFJhbmdlCit7CisgICAgcmV0dXJuIFtbW3Nl
bGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gX2RvY3VtZW50UmFuZ2VdOworfQorCistIChCT09MKV9p
bWFnZUV4aXN0c0F0UGF0aHM6KE5TQXJyYXkgKilwYXRocworeworICAgIE5TRW51bWVyYXRvciAq
ZW51bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBOU1N0cmluZyAqcGF0
aDsKKyAgICAKKyAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRvciBuZXh0T2JqZWN0XSkgIT0g
bmlsKSB7CisgICAgICAgIE5TU3RyaW5nICpNSU1FVHlwZSA9IFdLR2V0TUlNRVR5cGVGb3JFeHRl
bnNpb24oW3BhdGggcGF0aEV4dGVuc2lvbl0pOworICAgICAgICBpZiAoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUoTUlNRVR5cGUpKQorICAgICAgICAg
ICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIE5POworfQorCistIChXZWJE
YXRhU291cmNlICopX2RhdGFTb3VyY2UKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmRhdGFTb3Vy
Y2U7Cit9CisKKy0gKFdlYlZpZXcgKilfd2ViVmlldworeworICAgIHJldHVybiBbX3ByaXZhdGUt
PmRhdGFTb3VyY2UgX3dlYlZpZXddOworfQorCistIChXZWJGcmFtZVZpZXcgKilfZnJhbWVWaWV3
Cit7CisgICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIGZyYW1lVmll
d107Cit9CisKKy0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhQ
YXRoczooTlNBcnJheSAqKXBhdGhzCit7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21l
bnQ7CisgICAgTlNFbnVtZXJhdG9yICplbnVtZXJhdG9yID0gW3BhdGhzIG9iamVjdEVudW1lcmF0
b3JdOworICAgIE5TTXV0YWJsZUFycmF5ICpkb21Ob2RlcyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdOworICAgIE5TU3RyaW5nICpwYXRoOworICAgIAorICAgIHdoaWxlICgocGF0aCA9
IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAhPSBuaWwpIHsKKyAgICAgICAgLy8gTm9uLWltYWdl
IGZpbGUgdHlwZXM7IF93ZWJfdXNlclZpc2libGVTdHJpbmcgaXMgYXBwcm9wcmlhdGUgaGVyZSBi
ZWNhdXNlIHRoaXMgd2lsbAorICAgICAgICAvLyBiZSBwYXN0ZWQgYXMgdmlzaWJsZSB0ZXh0Lgor
ICAgICAgICBOU1N0cmluZyAqdXJsID0gW1tbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOnBhdGhdIF93
ZWJraXRfY2Fub25pY2FsaXplXSBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKKyAgICAgICAgW2Rv
bU5vZGVzIGFkZE9iamVjdDpbW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIGNyZWF0ZVRleHRO
b2RlOiB1cmxdXTsKKyAgICB9CisgICAgCisgICAgZnJhZ21lbnQgPSBbW3NlbGYgX2ZyYW1lXSBf
ZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczpkb21Ob2Rlc107IAorICAgIAor
ICAgIFtkb21Ob2RlcyByZWxlYXNlXTsKKyAgICAKKyAgICByZXR1cm4gW2ZyYWdtZW50IGZpcnN0
Q2hpbGRdICE9IG5pbCA/IGZyYWdtZW50IDogbmlsOworfQorCisrIChOU0FycmF5ICopX2V4Y2x1
ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbgoreworICAgIHN0YXRpYyBO
U0FycmF5ICplbGVtZW50cyA9IG5pbDsKKyAgICBpZiAoZWxlbWVudHMgPT0gbmlsKSB7CisgICAg
ICAgIGVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6CisgICAgICAg
ICAgICAvLyBPbWl0IHN0eWxlIHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRo
ZSBmcmFnbWVudCBjYW4gYmUgZWFzaWx5IGluc2VydGVkLgorICAgICAgICAgICAgQCJzdHlsZSIs
CisgICAgICAgICAgICAvLyBPbWl0IHhtbCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAg
ICAgICAgICAgIEAieG1sIiwgCisgICAgICAgICAgICAvLyBPbWl0IHRhZ3MgdGhhdCB3aWxsIGdl
dCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZyYWdtZW50IGFueXdheS4KKyAgICAgICAg
ICAgIEAiZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCisgICAgICAgICAgICAv
LyBPbWl0IGRlcHJlY2F0ZWQgdGFncy4KKyAgICAgICAgICAgIEAiYXBwbGV0IiwgQCJiYXNlZm9u
dCIsIEAiY2VudGVyIiwgQCJkaXIiLCBAImZvbnQiLCBAImlzaW5kZXgiLCBAIm1lbnUiLCBAInMi
LCBAInN0cmlrZSIsIEAidSIsCisgICAgICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxl
IGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBmcmFnbWVudC4KKyAgICAgICAgICAgIEAib2Jq
ZWN0IiwgbmlsXTsKKyAgICAgICAgQ0ZSZXRhaW4oZWxlbWVudHMpOworICAgIH0KKyAgICByZXR1
cm4gZWxlbWVudHM7Cit9CisKK3N0YXRpYyBOU1VSTCogdW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFy
dChOU1N0cmluZyAqcmVsYXRpdmVQYXJ0KQoreworICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZV
VUlEQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQpOworICAgIE5TU3RyaW5nICpVVUlEU3RyaW5n
ID0gKE5TU3RyaW5nICopQ0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVV
SURSZWYpOworICAgIENGUmVsZWFzZShVVUlEUmVmKTsKKyAgICBOU1VSTCAqVVJMID0gW05TVVJM
IFVSTFdpdGhTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVALyVAIiwg
V2ViRGF0YVByb3RvY29sU2NoZW1lLCBVVUlEU3RyaW5nLCByZWxhdGl2ZVBhcnRdXTsKKyAgICBD
RlJlbGVhc2UoVVVJRFN0cmluZyk7CisKKyAgICByZXR1cm4gVVJMOworfQorCistIChET01Eb2N1
bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRl
eHQKK3sKKyAgICBOU0FycmF5ICp0eXBlcyA9IFtwYXN0ZWJvYXJkIHR5cGVzXTsKKyAgICBET01E
b2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IG5pbDsKKworICAgIGlmIChbdHlwZXMgY29udGFp
bnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IFtz
ZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpXZWJBcmNo
aXZlUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBpZiAoW3R5
cGVzIGNvbnRhaW5zT2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZy
YWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJk
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JU
eXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVy
biBmcmFnbWVudDsKKyAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TSFRNTFBi
b2FyZFR5cGVdICYmCisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50
RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU0hUTUxQYm9hcmRUeXBlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2Vz
OjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgIAorICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNSVEZQYm9h
cmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworCisgICAg
aWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURkRQYm9hcmRUeXBlXSAmJgorICAgICAgICAo
ZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9h
cmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
clR5cGU6TlNSVEZEUGJvYXJkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCisgICAgICAgIHJldHVybiBm
cmFnbWVudDsKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJkVHlw
ZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFz
dGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQor
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TUERGUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUERGUGJvYXJkVHlwZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNv
bnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczowXSkpCisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKworI2lmIGRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBpZiAo
W3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUElDVFBib2FyZFR5cGVdICYmCisgICAgICAgIChmcmFn
bWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlw
ZTpOU1BJQ1RQYm9hcmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdt
ZW50OworI2VuZGlmCisKKyAgICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBwb3J0IHNldHRp
bmcgYW5kIHJldHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1dCB3ZSBkb24n
dCBiZWxpZXZlCisgICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2VyIHB1dCB0eXBl
cyBmb3Igd2hpY2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhlIHBhc3RlYm9h
cmQuCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDooTlNTdHJpbmcqKWtVVFR5cGVQTkdd
ICYmCisgICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yVHlwZTooTlNTdHJpbmcqKWtVVFR5cGVQTkcKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0p
KQorICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgICAgIAorICAgIGlmIChbdHlwZXMgY29u
dGFpbnNPYmplY3Q6TlNVUkxQYm9hcmRUeXBlXSAmJgorICAgICAgICAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNVUkxQYm9h
cmRUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bkNvbnRleHQ6Y29udGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VicmVzb3VyY2VzOjBdKSkKKyAgICAgICAgcmV0dXJuIGZyYWdtZW50OworICAgICAg
ICAKKyAgICBpZiAoYWxsb3dQbGFpblRleHQgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3Ry
aW5nUGJvYXJkVHlwZV0gJiYKKyAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJh
Z21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29u
dGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVz
b3VyY2VzOjBdKSkgeworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIAorICAg
IHJldHVybiBuaWw7Cit9CisKKy0gKE5TU3RyaW5nICopX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJk
OihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgTlNBcnJheSAqdHlwZXMgPSBbcGFz
dGVib2FyZCB0eXBlc107CisgICAgCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0
cmluZ1Bib2FyZFR5cGVdKQorICAgICAgICByZXR1cm4gW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5
cGU6TlNTdHJpbmdQYm9hcmRUeXBlXSBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBw
aW5nXTsKKyAgICAKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBu
aWw7CisgICAgTlNTdHJpbmcgKnN0cmluZzsKKworICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmpl
Y3Q6TlNSVEZEUGJvYXJkVHlwZV0pCisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBl
Ok5TUlRGRFBib2FyZFR5cGVdIGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICBpZiAoYXR0
cmlidXRlZFN0cmluZyA9PSBuaWwgJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGUGJvYXJk
VHlwZV0pCisgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhSVEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBl
XSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07CisgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgIT0g
bmlsKSB7CisgICAgICAgIHN0cmluZyA9IFtbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddIGNvcHld
OworICAgICAgICBbYXR0cmlidXRlZFN0cmluZyByZWxlYXNlXTsKKyAgICAgICAgcmV0dXJuIFtz
dHJpbmcgYXV0b3JlbGVhc2VdOworICAgIH0KKyAgICAKKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5z
T2JqZWN0Ok5TRmlsZW5hbWVzUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgc3RyaW5nID0gW1twYXN0
ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRUeXBlXSBjb21wb25l
bnRzSm9pbmVkQnlTdHJpbmc6QCJcbiJdOworICAgICAgICBpZiAoc3RyaW5nICE9IG5pbCkKKyAg
ICAgICAgICAgIHJldHVybiBzdHJpbmc7CisgICAgfQorICAgIAorICAgIE5TVVJMICpVUkw7Cisg
ICAgCisgICAgaWYgKChVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF0p
KSB7CisgICAgICAgIHN0cmluZyA9IFtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAg
ICAgIGlmIChbc3RyaW5nIGxlbmd0aF0gPiAwKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIG5pbDsKK30KKworLSAodm9pZClfcGFzdGVXaXRoUGFz
dGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDooQk9PTClh
bGxvd1BsYWluVGV4dAoreworICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW3NlbGYgX3dlYlZpZXdd
IHJldGFpbl07CisgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6cGFzdGVib2Fy
ZF07CisKKyAgICBET01SYW5nZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CisgICAg
RE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZy
b21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgaW5Db250ZXh0OnJhbmdlIGFsbG93UGxhaW5UZXh0OmFs
bG93UGxhaW5UZXh0XTsKKyAgICBpZiAoZnJhZ21lbnQgJiYgW3NlbGYgX3Nob3VsZEluc2VydEZy
YWdtZW50OmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOldlYlZp
ZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQorICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNl
bGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJl
cGxhY2U6W3NlbGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdIG1h
dGNoU3R5bGU6Tk9dOworCisgICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBhc3RlYm9hcmQ6bmls
XTsKKyAgICBbd2ViVmlldyByZWxlYXNlXTsKK30KKworLSAodm9pZClfcGFzdGVBc1BsYWluVGV4
dFdpdGhQYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgV2ViVmll
dyAqd2ViVmlldyA9IFtbc2VsZiBfd2ViVmlld10gcmV0YWluXTsKKyAgICBbd2ViVmlldyBfc2V0
SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKworICAgIE5TU3RyaW5nICp0ZXh0ID0g
W3NlbGYgX3BsYWluVGV4dEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOworICAgIGlmIChbc2Vs
ZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnRleHQgZ2l2ZW5BY3Rpb246V2ViVmll
d0luc2VydEFjdGlvblBhc3RlZF0pCisgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6dGV4dCBzZWxlY3RSZXBsYWNlbWVudDpOTyBzbWFydFJlcGxhY2U6W3Nl
bGYgX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdXTsKKworICAgIFt3
ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOm5pbF07CisgICAgW3dlYlZpZXcgcmVsZWFz
ZV07Cit9CisKKy0gKHZvaWQpX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxs
eQoreworICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2YXRlLT5vYnNlcnZpbmdNb3VzZU1vdmVk
Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldLTW91c2VN
b3ZlZE5vdGlmaWNhdGlvbigpIG9iamVjdDpuaWxdOworICAgIF9wcml2YXRlLT5vYnNlcnZpbmdN
b3VzZU1vdmVkTm90aWZpY2F0aW9ucyA9IGZhbHNlOworfQorCistICh2b2lkKV9yZW1vdmVTdXBl
cnZpZXdPYnNlcnZlcnMKK3sKKyAgICBpZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+b2JzZXJ2
aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5T
VmlldyAqc3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3XTsKKyAgICBpZiAoIXN1cGVydmlldyB8
fCAhW3NlbGYgd2luZG93XSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5TTm90aWZpY2F0
aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxm
IG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107
CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNWaWV3
Qm91bmRzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOworICAgIAorICAg
IF9wcml2YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0gZmFsc2U7Cit9CisK
Ky0gKHZvaWQpX3JlbW92ZVdpbmRvd09ic2VydmVycworeworICAgIGlmICghX3ByaXZhdGUtPm9i
c2VydmluZ1dpbmRvd05vdGlmaWNhdGlvbnMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBO
U1dpbmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25D
ZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgW25vdGlm
aWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVL
ZXlOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1v
dmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2Jq
ZWN0Om5pbF07CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5h
bWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107CisgICAgW25v
dGlmaWNhdGlvbkNlbnRlciByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6V0tXaW5kb3dXaWxsT3Jk
ZXJPblNjcmVlbk5vdGlmaWNhdGlvbigpIG9iamVjdDp3aW5kb3ddOworICAgIAorICAgIF9wcml2
YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25zID0gZmFsc2U7Cit9CisKKy0gKEJPT0wp
X3Nob3VsZEluc2VydEZyYWdtZW50OihET01Eb2N1bWVudEZyYWdtZW50ICopZnJhZ21lbnQgcmVw
bGFjaW5nRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnNl
cnRBY3Rpb24pYWN0aW9uCit7CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3
XTsKKyAgICBET01Ob2RlICpjaGlsZCA9IFtmcmFnbWVudCBmaXJzdENoaWxkXTsKKyAgICBpZiAo
W2ZyYWdtZW50IGxhc3RDaGlsZF0gPT0gY2hpbGQgJiYgW2NoaWxkIGlzS2luZE9mQ2xhc3M6W0RP
TUNoYXJhY3RlckRhdGEgY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIFtbd2ViVmlldyBfZWRpdGlu
Z0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0VGV4dDpbKERP
TUNoYXJhY3RlckRhdGEgKiljaGlsZCBkYXRhXSByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZl
bkFjdGlvbjphY3Rpb25dOworICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydE5vZGU6ZnJhZ21lbnQgcmVwbGFj
aW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0aW9uXTsKK30KKworLSAoQk9PTClfc2hv
dWxkSW5zZXJ0VGV4dDooTlNTdHJpbmcgKil0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAg
IFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107CisgICAgcmV0dXJuIFtbd2ViVmll
dyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkSW5zZXJ0
VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Cit9
CisKKy0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0
ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbgoreworICAgIHJldHVy
biBbc2VsZiBfc2hvdWxkSW5zZXJ0VGV4dDp0ZXh0IHJlcGxhY2luZ0RPTVJhbmdlOltzZWxmIF9z
ZWxlY3RlZFJhbmdlXSBnaXZlbkFjdGlvbjphY3Rpb25dOworfQorCisvLyBDYWxjdWxhdGUgdGhl
IHZlcnRpY2FsIHNpemUgb2YgdGhlIHZpZXcgdGhhdCBmaXRzIG9uIGEgc2luZ2xlIHBhZ2UKKy0g
KGZsb2F0KV9jYWxjdWxhdGVQcmludEhlaWdodAoreworICAgIC8vIE9idGFpbiB0aGUgcHJpbnQg
aW5mbyBvYmplY3QgZm9yIHRoZSBjdXJyZW50IG9wZXJhdGlvbgorICAgIE5TUHJpbnRJbmZvICpw
aSA9IFtbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXSBwcmludEluZm9dOworICAg
IAorICAgIC8vIENhbGN1bGF0ZSB0aGUgcGFnZSBoZWlnaHQgaW4gcG9pbnRzCisgICAgTlNTaXpl
IHBhcGVyU2l6ZSA9IFtwaSBwYXBlclNpemVdOworICAgIHJldHVybiBwYXBlclNpemUuaGVpZ2h0
IC0gW3BpIHRvcE1hcmdpbl0gLSBbcGkgYm90dG9tTWFyZ2luXTsKK30KKworLSAoRE9NUmFuZ2Ug
Kilfc2VsZWN0ZWRSYW5nZQoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7Cit9CisKKy0gKEJPT0wpX3Nob3Vs
ZERlbGV0ZVJhbmdlOihET01SYW5nZSAqKXJhbmdlCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUt
PmVkaXRvcigpLT5zaG91bGREZWxldGVSYW5nZShjb3JlKHJhbmdlKSk7Cit9CisKKy0gKE5TVmll
dyAqKV9oaXRWaWV3Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFVzdWFsbHks
IHdlIGhhY2sgQUsncyBoaXRUZXN0IG1ldGhvZCB0byBjYXRjaCBhbGwgZXZlbnRzIGF0IHRoZSB0
b3Btb3N0IFdlYkhUTUxWaWV3LiAgCisgICAgLy8gQ2FsbGVycyBvZiB0aGlzIG1ldGhvZCwgaG93
ZXZlciwgd2FudCB0byBxdWVyeSB0aGUgZGVlcGVzdCB2aWV3IGluc3RlYWQuCisgICAgZm9yY2VO
U1ZpZXdIaXRUZXN0ID0gWUVTOworICAgIE5TVmlldyAqaGl0VmlldyA9IFtbW3NlbGYgd2luZG93
XSBjb250ZW50Vmlld10gaGl0VGVzdDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd11dOworICAgIGZv
cmNlTlNWaWV3SGl0VGVzdCA9IE5POyAgICAKKyAgICByZXR1cm4gaGl0VmlldzsKK30KKworLSAo
dm9pZClfd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihOU0FycmF5ICopdHlwZXMg
dG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRT
dHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAgICAvLyBQ
dXQgSFRNTCBvbiB0aGUgcGFzdGVib2FyZC4KKyAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
OldlYkFyY2hpdmVQYm9hcmRUeXBlXSkgeworICAgICAgICBpZiAoUmVmUHRyPExlZ2FjeVdlYkFy
Y2hpdmU+IGNvcmVBcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlv
bihjb3JlKFtzZWxmIF9mcmFtZV0pKSkgeworICAgICAgICAgICAgaWYgKFJldGFpblB0cjxDRkRh
dGFSZWY+IGRhdGEgPSBjb3JlQXJjaGl2ZSA/IGNvcmVBcmNoaXZlLT5yYXdEYXRhUmVwcmVzZW50
YXRpb24oKSA6IDApCisgICAgICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRh
ICopZGF0YS5nZXQoKSBmb3JUeXBlOldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyBQdXQgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIG9uIHRoZSBwYXN0
ZWJvYXJkIChSVEYvUlRGRCBmb3JtYXQpLgorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6
TlNSVEZEUGJvYXJkVHlwZV0pIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZWRTdHJpbmcgPT0gbmls
KSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1
dGVkU3RyaW5nXTsKKyAgICAgICAgfSAgICAgICAgCisgICAgICAgIE5TRGF0YSAqUlRGRERhdGEg
PSBbYXR0cmlidXRlZFN0cmluZyBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1
dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOworICAgICAgICBbcGFz
dGVib2FyZCBzZXREYXRhOlJURkREYXRhIGZvclR5cGU6TlNSVEZEUGJvYXJkVHlwZV07CisgICAg
fSAgICAgICAgCisgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVd
KSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCkgeworICAgICAgICAgICAg
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNd
KSB7CisgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgX3dl
Yl9hdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVyc107CisgICAg
ICAgIH0KKyAgICAgICAgTlNEYXRhICpSVEZEYXRhID0gW2F0dHJpYnV0ZWRTdHJpbmcgUlRGRnJv
bVJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50
QXR0cmlidXRlczpuaWxdOworICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlJURkRhdGEgZm9y
VHlwZTpOU1JURlBib2FyZFR5cGVdOworICAgIH0KKyAgICAKKyAgICAvLyBQdXQgcGxhaW4gc3Ry
aW5nIG9uIHRoZSBwYXN0ZWJvYXJkLgorICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNT
dHJpbmdQYm9hcmRUeXBlXSkgeworICAgICAgICAvLyBNYXAgJm5ic3A7IHRvIGEgcGxhaW4gb2xk
IHNwYWNlIGJlY2F1c2UgdGhpcyBpcyBiZXR0ZXIgZm9yIHNvdXJjZSBjb2RlLCBvdGhlciBicm93
c2VycyBkbyBpdCwKKyAgICAgICAgLy8gYW5kIGJlY2F1c2UgSFRNTCBmb3JjZXMgeW91IHRvIGRv
IHRoaXMgYW55IHRpbWUgeW91IHdhbnQgdHdvIHNwYWNlcyBpbiBhIHJvdy4KKyAgICAgICAgTlNN
dXRhYmxlU3RyaW5nICpzID0gW1tzZWxmIHNlbGVjdGVkU3RyaW5nXSBtdXRhYmxlQ29weV07Cisg
ICAgICAgIGNvbnN0IHVuaWNoYXIgTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciA9IDB4QTA7Cisg
ICAgICAgIE5TU3RyaW5nICpOb25CcmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmlu
Z1dpdGhDaGFyYWN0ZXJzOiZOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVyIGxlbmd0aDoxXTsKKyAg
ICAgICAgW3MgcmVwbGFjZU9jY3VycmVuY2VzT2ZTdHJpbmc6Tm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZyB3aXRoU3RyaW5nOkAiICIgb3B0aW9uczowIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzIGxlbmd0
aF0pXTsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnMgZm9yVHlwZTpOU1N0cmluZ1Bi
b2FyZFR5cGVdOworICAgICAgICBbcyByZWxlYXNlXTsKKyAgICB9CisgICAgCisgICAgaWYgKFtz
ZWxmIF9jYW5TbWFydENvcHlPckRlbGV0ZV0gJiYgW3R5cGVzIGNvbnRhaW5zT2JqZWN0OldlYlNt
YXJ0UGFzdGVQYm9hcmRUeXBlXSkgeworICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOm5pbCBm
b3JUeXBlOldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3Nl
dE1vdXNlRG93bkV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBBU1NFUlQoIWV2ZW50IHx8
IFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TUmln
aHRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJNb3VzZURvd24pOworCisgICAg
aWYgKGV2ZW50ID09IF9wcml2YXRlLT5tb3VzZURvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgW2V2ZW50IHJldGFpbl07CisgICAgW19wcml2YXRlLT5tb3VzZURvd25FdmVudCByZWxl
YXNlXTsKKyAgICBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgPSBldmVudDsKK30KKworLSAodm9p
ZClfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIKK3sKKyAgICBpZiAoX3By
aXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKSB7CisgICAgICAgIENGUnVu
TG9vcFRpbWVySW52YWxpZGF0ZShfcHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRl
VGltZXIpOworICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3Rp
dmVTdGF0ZVRpbWVyKTsKKyAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVT
dGF0ZVRpbWVyID0gTlVMTDsKKyAgICB9Cit9CisKKy0gKHZvaWQpX2NhbmNlbFVwZGF0ZU1vdXNl
b3ZlclRpbWVyCit7CisgICAgaWYgKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcikgewor
ICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUoX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3Zl
clRpbWVyKTsKKyAgICAgICAgQ0ZSZWxlYXNlKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1l
cik7CisgICAgICAgIF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lciA9IE5VTEw7CisgICAg
fQorfQorCistIChXZWJIVE1MVmlldyAqKV90b3BIVE1MVmlldworeworICAgIC8vIEZJWE1FOiB0
aGlzIGNhbiBmYWlsIGlmIHRoZSBkYXRhU291cmNlIGlzIG5pbCwgd2hpY2ggaGFwcGVucyB3aGVu
IHRoZSBXZWJWaWV3IGlzIHRlYXJpbmcgZG93biBmcm9tIHRoZSB3aW5kb3cgY2xvc2luZy4KKyAg
ICBXZWJIVE1MVmlldyAqdmlldyA9IChXZWJIVE1MVmlldyAqKVtbW1tfcHJpdmF0ZS0+ZGF0YVNv
dXJjZSBfd2ViVmlld10gbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAg
QVNTRVJUKHZpZXcpOworICAgIEFTU0VSVChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmll
dyBjbGFzc11dKTsKKyAgICByZXR1cm4gdmlldzsKK30KKworLSAoQk9PTClfaXNUb3BIVE1MVmll
dworeworICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBhIGNhY2hlZCBib29sZWFuIHRoYXQg
ZG9lc24ndCByZWx5IG9uIF90b3BIVE1MVmlldyBzaW5jZSB0aGF0IGNhbiBmYWlsIChzZWUgX3Rv
cEhUTUxWaWV3KS4KKyAgICByZXR1cm4gc2VsZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddOworfQor
CistICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlCit7CisgICAgW3NlbGYgX3Nl
dFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBm
IGFkanVzdFZpZXdTaXplOk5PXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51
bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKKyNlbmRpZgorCisgICAgTlNNdXRhYmxlQXJyYXkgKmRl
c2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKKwor
ICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFu
dFdlYkhUTUxWaWV3c107CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRN
TFZpZXdzIGNvdW50XTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkK
KyAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFBy
aW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFk
anVzdFZpZXdTaXplOk5PXTsKKworICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2Vd
OworCisjaWZuZGVmIE5ERUJVRworICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0g
Tk87CisjZW5kaWYKK30KKworLSAodm9pZClfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZl
Cit7CisgICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhp
bXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworCisjaWZuZGVmIE5ERUJVRwor
ICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOworI2VuZGlmCisKKyAgICBO
U011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkg
YWxsb2NdIGluaXRdOworCisgICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdz
VG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0g
W2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjb3VudDsgKytpKQorICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0
QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6Tk8gbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1Q
YWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107CisKKyAgICBbZGVzY2VuZGFudFdlYkhU
TUxWaWV3cyByZWxlYXNlXTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBfcHJpdmF0ZS0+ZW51bWVy
YXRpbmdTdWJ2aWV3cyA9IE5POworI2VuZGlmCit9CisKKy0gKHZvaWQpX3dlYl9zZXRQcmludGlu
Z01vZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZQoreworICAgIFtzZWxmIF9zZXRQcmludGlu
ZzpZRVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RW
aWV3U2l6ZTpZRVNdOworCisjaWZuZGVmIE5ERUJVRworICAgIF9wcml2YXRlLT5lbnVtZXJhdGlu
Z1N1YnZpZXdzID0gWUVTOworI2VuZGlmCisKKyAgICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFu
dFdlYkhUTUxWaWV3cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOworCisgICAgW3Nl
bGYgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRN
TFZpZXdzXTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mg
Y291bnRdOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAg
ICBbW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3Mgb2JqZWN0QXRJbmRleDppXSBfc2V0UHJpbnRpbmc6
WUVTIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmll
d1NpemU6WUVTXTsKKworICAgIFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIHJlbGVhc2VdOworCisj
aWZuZGVmIE5ERUJVRworICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gTk87Cisj
ZW5kaWYKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYlByaXZh
dGUpCisKKysgKE5TQXJyYXkgKilzdXBwb3J0ZWRNSU1FVHlwZXMKK3sKKyAgICByZXR1cm4gW1dl
YkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0ZWRNSU1FVHlwZXNdOworfQorCisrIChOU0FycmF5
ICopc3VwcG9ydGVkSW1hZ2VNSU1FVHlwZXMKK3sKKyAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNl
bnRhdGlvbiBzdXBwb3J0ZWRJbWFnZU1JTUVUeXBlc107Cit9CisKKysgKE5TQXJyYXkgKilzdXBw
b3J0ZWROb25JbWFnZU1JTUVUeXBlcworeworICAgIHJldHVybiBbV2ViSFRNTFJlcHJlc2VudGF0
aW9uIHN1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGVzXTsKK30KKworKyAoTlNBcnJheSAqKXVuc3Vw
cG9ydGVkVGV4dE1JTUVUeXBlcworeworICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmpl
Y3RzOgorICAgICAgICBAInRleHQvY2FsZW5kYXIiLCAgICAgICAvLyBpQ2FsCisgICAgICAgIEAi
dGV4dC94LWNhbGVuZGFyIiwKKyAgICAgICAgQCJ0ZXh0L3gtdmNhbGVuZGFyIiwKKyAgICAgICAg
QCJ0ZXh0L3ZjYWxlbmRhciIsCisgICAgICAgIEAidGV4dC92Y2FyZCIsICAgICAgICAgIC8vIHZD
YXJkCisgICAgICAgIEAidGV4dC94LXZjYXJkIiwKKyAgICAgICAgQCJ0ZXh0L2RpcmVjdG9yeSIs
CisgICAgICAgIEAidGV4dC9sZGlmIiwgICAgICAgICAgIC8vIE5ldHNjYXBlIEFkZHJlc3MgQm9v
aworICAgICAgICBAInRleHQvcWlmIiwgICAgICAgICAgICAvLyBRdWlja2VuCisgICAgICAgIEAi
dGV4dC94LXFpZiIsCisgICAgICAgIEAidGV4dC94LWNzdiIsICAgICAgICAgIC8vIENTViAoZm9y
IEFkZHJlc3MgQm9vayBhbmQgTWljcm9zb2Z0IE91dGxvb2spCisgICAgICAgIEAidGV4dC94LXZj
ZiIsICAgICAgICAgIC8vIHZDYXJkIHR5cGUgdXNlZCBpbiBTdW4gYWZmaW5pdHkgYXBwCisgICAg
ICAgIEAidGV4dC9ydGYiLCAgICAgICAgICAgIC8vIFJpY2ggVGV4dCBGb3JtYXQKKyAgICAgICAg
bmlsXTsKK30KKworKyAodm9pZClfcG9zdEZsYWdzQ2hhbmdlZEV2ZW50OihOU0V2ZW50ICopZmxh
Z3NDaGFuZ2VkRXZlbnQKK3sKKyAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3I6IDxyZGFy
Oi8vcHJvYmxlbS8yOTgxNjE5PiBOU1Jlc3BvbmRlcl9Qcml2YXRlIHNob3VsZCBpbmNsdWRlIG5v
dGlmaWNhdGlvbiBmb3IgRmxhZ3NDaGFuZ2VkCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05T
RXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAgICBsb2NhdGlvbjpb
W2ZsYWdzQ2hhbmdlZEV2ZW50IHdpbmRvd10gY29udmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBt
b3VzZUxvY2F0aW9uXV0KKyAgICAgICAgbW9kaWZpZXJGbGFnczpbZmxhZ3NDaGFuZ2VkRXZlbnQg
bW9kaWZpZXJGbGFnc10KKyAgICAgICAgdGltZXN0YW1wOltmbGFnc0NoYW5nZWRFdmVudCB0aW1l
c3RhbXBdCisgICAgICAgIHdpbmRvd051bWJlcjpbZmxhZ3NDaGFuZ2VkRXZlbnQgd2luZG93TnVt
YmVyXQorICAgICAgICBjb250ZXh0OltmbGFnc0NoYW5nZWRFdmVudCBjb250ZXh0XQorICAgICAg
ICBldmVudE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKKworICAgIC8vIFByZXRl
bmQgaXQncyBhIG1vdXNlIG1vdmUuCisgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXQorICAgICAgICBwb3N0Tm90aWZpY2F0aW9uTmFtZTpXS01vdXNlTW92ZWROb3RpZmlj
YXRpb24oKSBvYmplY3Q6c2VsZgorICAgICAgICB1c2VySW5mbzpbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0OmZha2VFdmVudCBmb3JLZXk6QCJOU0V2ZW50Il1dOworfQorCistIChp
ZClfYnJpZGdlCit7CisgICAgLy8gVGhpcyBtZXRob2QgZXhpc3RzIHRvIG1haW50YWluIGNvbXBh
dGliaWxpdHkgd2l0aCBMZW9wYXJkJ3MgRGljdGlvbmFyeS5hcHAsIHNpbmNlIGl0CisgICAgLy8g
Y2FsbHMgX2JyaWRnZSB0byBnZXQgYWNjZXNzIHRvIGNvbnZlcnROU1JhbmdlVG9ET01SYW5nZTog
YW5kIGNvbnZlcnRET01SYW5nZVRvTlNSYW5nZTouCisgICAgLy8gUmV0dXJuIHRoZSBXZWJGcmFt
ZSwgd2hpY2ggaW1wbGVtZW50cyB0aGUgY29tcGF0aWJpbGl0eSBtZXRob2RzLiA8cmRhcjovL3By
b2JsZW0vNjAwMjE2MD4KKyAgICByZXR1cm4gW3NlbGYgX2ZyYW1lXTsKK30KKworLSAodm9pZClf
dXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudAoreworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVN
b3VzZW92ZXJUaW1lcl07CisgICAgCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQg
bW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAgICBsb2NhdGlvbjpbW3NlbGYg
d2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQorICAg
ICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQor
ICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVd
CisgICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAg
ICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgIGV2ZW50
TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgIAorICAgIFtzZWxmIF91cGRh
dGVNb3VzZW92ZXJXaXRoRXZlbnQ6ZmFrZUV2ZW50XTsKK30KKworc3RhdGljIHZvaWQgX3VwZGF0
ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhY2soQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQgKmlu
Zm8pCit7CisgICAgV2ViSFRNTFZpZXcgKnZpZXcgPSAoV2ViSFRNTFZpZXcgKilpbmZvOworICAg
IAorICAgIFt2aWV3IF91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKK30KKworLSAodm9p
ZClfZnJhbWVPckJvdW5kc0NoYW5nZWQKK3sKKyAgICBOU1BvaW50IG9yaWdpbiA9IFtbc2VsZiBz
dXBlcnZpZXddIGJvdW5kc10ub3JpZ2luOworICAgIGlmICghTlNFcXVhbFBvaW50cyhfcHJpdmF0
ZS0+bGFzdFNjcm9sbFBvc2l0aW9uLCBvcmlnaW4pKSB7CisgICAgICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNlbmRTY3JvbGxFdmVudCgpOworICAgICAgICBbX3ByaXZhdGUtPmNvbXBD
b250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgICAgIAor
ICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOworICAgICAgICBbW3dl
YlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWRTY3JvbGxEb2N1
bWVudEluRnJhbWVWaWV3OltzZWxmIF9mcmFtZVZpZXddXTsKKyAgICB9CisgICAgX3ByaXZhdGUt
Pmxhc3RTY3JvbGxQb3NpdGlvbiA9IG9yaWdpbjsKKworICAgIGlmIChbc2VsZiB3aW5kb3ddICYm
ICFfcHJpdmF0ZS0+Y2xvc2VkICYmICFfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpIHsK
KyAgICAgICAgQ0ZSdW5Mb29wVGltZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIE5VTEws
IE5VTEwsIE5VTEwgfTsKKyAgICAgICAgCisgICAgICAgIC8vIFVzZSBhIDEwMG1zIGRlbGF5IHNv
IHRoYXQgdGhlIHN5bnRoZXRpYyBtb3VzZSBvdmVyIHVwZGF0ZSBkb2Vzbid0IGNhdXNlIGN1cnNv
ciB0aHJhc2hpbmcgd2hlbiBwYWdlcyBhcmUgbG9hZGluZworICAgICAgICAvLyBhbmQgc2Nyb2xs
aW5nIHJhcGlkbHkgYmFjayB0byBiYWNrLgorICAgICAgICBfcHJpdmF0ZS0+dXBkYXRlTW91c2Vv
dmVyVGltZXIgPSBDRlJ1bkxvb3BUaW1lckNyZWF0ZShOVUxMLCBDRkFic29sdXRlVGltZUdldEN1
cnJlbnQoKSArIDAuMSwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2FsbGJh
Y2ssICZjb250ZXh0KTsKKyAgICAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpLCBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIsIGtDRlJ1bkxvb3BEZWZhdWx0
TW9kZSk7CisgICAgfQorfQorCistICh2b2lkKV9zZXRBc2lkZVN1YnZpZXdzCit7CisgICAgQVNT
RVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CisgICAgQVNTRVJUKF9wcml2YXRlLT5z
YXZlZFN1YnZpZXdzID09IG5pbCk7CisgICAgX3ByaXZhdGUtPnNhdmVkU3Vidmlld3MgPSBfc3Vi
dmlld3M7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIFdlIG5lZWQg
dG8ga2VlcCB0aGUgbGF5ZXItaG9zdGluZyB2aWV3IGluIHRoZSBzdWJ2aWV3cywgb3RoZXJ3aXNl
IHRoZSBsYXllcnMgZmxhc2guCisgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KSB7
CisgICAgICAgIE5TQXJyYXkqIG5ld1N1YnZpZXdzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6X3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcsIG5pbF07CisgICAgICAgIF9zdWJ2
aWV3cyA9IG5ld1N1YnZpZXdzOworICAgIH0gZWxzZQorICAgICAgICBfc3Vidmlld3MgPSBuaWw7
CisjZWxzZQorICAgIF9zdWJ2aWV3cyA9IG5pbDsKKyNlbmRpZiAgICAKKyAgICBfcHJpdmF0ZS0+
c3Vidmlld3NTZXRBc2lkZSA9IFlFUzsKKyB9CisgCisgLSAodm9pZClfcmVzdG9yZVN1YnZpZXdz
CisgeworICAgIEFTU0VSVChfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7CisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmll
dykgeworICAgICAgICBbX3N1YnZpZXdzIHJlbGVhc2VdOworICAgICAgICBfc3Vidmlld3MgPSBf
cHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoX3N1
YnZpZXdzID09IG5pbCk7CisgICAgICAgIF9zdWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZp
ZXdzOworICAgIH0KKyNlbHNlCisgICAgQVNTRVJUKF9zdWJ2aWV3cyA9PSBuaWwpOworICAgIF9z
dWJ2aWV3cyA9IF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzOworI2VuZGlmICAgIAorICAgIF9wcml2
YXRlLT5zYXZlZFN1YnZpZXdzID0gbmlsOworICAgIF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRl
ID0gTk87Cit9CisKKyNpZm5kZWYgTkRFQlVHCisKKy0gKHZvaWQpZGlkQWRkU3VidmlldzooTlNW
aWV3ICopc3VidmlldworeworICAgIGlmIChfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cykK
KyAgICAgICAgTE9HKFZpZXcsICJBIHZpZXcgb2YgY2xhc3MgJXMgd2FzIGFkZGVkIGR1cmluZyBz
dWJ2aWV3IGVudW1lcmF0aW9uIGZvciBsYXlvdXQgb3IgcHJpbnRpbmcgbW9kZSBjaGFuZ2UuIFRo
aXMgdmlldyBtaWdodCBwYWludCB3aXRob3V0IGZpcnN0IHJlY2VpdmluZyBsYXlvdXQuIiwgb2Jq
ZWN0X2dldENsYXNzTmFtZShbc3VidmlldyBjbGFzc10pKTsKK30KKworLSAodm9pZCl3aWxsUmVt
b3ZlU3VidmlldzooTlNWaWV3ICopc3VidmlldworeworICAgIC8vIEhhdmUgdG8gbnVsbC1jaGVj
ayBfcHJpdmF0ZSwgc2luY2UgdGhpcyBjYW4gYmUgY2FsbGVkIHZpYSAtZGVhbGxvYyB3aGVuCisg
ICAgLy8gY2xlYW5pbmcgdXAgdGhlIHRoZSBsYXllckhvc3RpbmdWaWV3LgorICAgIGlmIChfcHJp
dmF0ZSAmJiBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cykKKyAgICAgICAgTE9HKFZpZXcs
ICJBIHZpZXcgb2YgY2xhc3MgJXMgd2FzIHJlbW92ZWQgZHVyaW5nIHN1YnZpZXcgZW51bWVyYXRp
b24gZm9yIGxheW91dCBvciBwcmludGluZyBtb2RlIGNoYW5nZS4gV2Ugd2lsbCBzdGlsbCBkbyBs
YXlvdXQgb3IgdGhlIHByaW50aW5nIG1vZGUgY2hhbmdlIGV2ZW4gdGhvdWdoIHRoaXMgdmlldyBp
cyBubyBsb25nZXIgaW4gdGhlIHZpZXcgaGllcmFyY2h5LiIsIG9iamVjdF9nZXRDbGFzc05hbWUo
W3N1YnZpZXcgY2xhc3NdKSk7Cit9CisKKyNlbmRpZgorCisjaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKKworLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBhcmUgYWJvdXQgdG8gZHJhdywgYnV0IGJl
Zm9yZSBvdXIgZGlydHkgcmVjdCBpcyBwcm9wYWdhdGVkIHRvIG91ciBhbmNlc3RvcnMuCisvLyBU
aGF0J3MgdGhlIHBlcmZlY3QgdGltZSB0byBkbyBhIGxheW91dCwgZXhjZXB0IHRoYXQgaWRlYWxs
eSB3ZSdkIHdhbnQgdG8gYmUgc3VyZSB0aGF0IHdlJ3JlIGRpcnR5CisvLyBiZWZvcmUgZG9pbmcg
aXQuIEFzIGEgY29tcHJvbWlzZSwgd2hlbiB3ZSdyZSBvcGFxdWUgd2UgZG8gdGhlIGxheW91dCBv
bmx5IHdoZW4gYWN0dWFsbHkgYXNrZWQgdG8KKy8vIGRyYXcsIGJ1dCB3aGVuIHdlJ3JlIHRyYW5z
cGFyZW50IHdlIGRvIHRoZSBsYXlvdXQgYXQgdGhpcyBzdGFnZSBzbyB2aWV3cyBiZWhpbmQgdXMg
a25vdyB0aGF0IHRoZXkKKy8vIG5lZWQgdG8gYmUgcmVkcmF3biAoaW4gY2FzZSB0aGUgbGF5b3V0
IGNhdXNlcyBzb21lIHRoaW5ncyB0byBnZXQgZGlydGllZCkuCistICh2b2lkKV9wcm9wYWdhdGVE
aXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnMKK3sKKyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10g
ZHJhd3NCYWNrZ3JvdW5kXSkKKyAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vy
c2l2ZV07CisgICAgW3N1cGVyIF9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnNd
OworfQorCisjZWxzZQorCistICh2b2lkKXZpZXdXaWxsRHJhdworeworICAgIC8vIE9uIHdpbmRv
dyBjbG9zZSB3ZSB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkYXRhc291cmNlIGlzIG5pbCwgdGhl
biBoaXQgYW4gYXNzZXJ0IGluIF90b3BIVE1MVmlldworICAgIC8vIFNvIGNoZWNrIGlmIHRoZSBk
YXRhU291cmNlIGlzIG5pbCBiZWZvcmUgY2FsbGluZyBbc2VsZiBfaXNUb3BIVE1MVmlld10sIHRo
aXMgY2FuIGJlIHJlbW92ZWQKKyAgICAvLyBvbmNlIHRoZSBGSVhNRSBpbiBfaXNUb3BIVE1MVmll
dyBpcyBmaXhlZC4KKyAgICBpZiAoX3ByaXZhdGUtPmRhdGFTb3VyY2UgJiYgW3NlbGYgX2lzVG9w
SFRNTFZpZXddKQorICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVlZGVkUmVjdXJzaXZlXTsK
KyAgICBbc3VwZXIgdmlld1dpbGxEcmF3XTsKK30KKworI2VuZGlmCisKKy8vIERvbid0IGxldCBB
cHBLaXQgZXZlbiBkcmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KKy0gKHZvaWQp
X3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6KE5TUmVjdClyZWN0
IGlzVmlzaWJsZVJlY3Q6KEJPT0wpaXNWaXNpYmxlUmVjdCByZWN0SXNWaXNpYmxlUmVjdEZvclZp
ZXc6KE5TVmlldyAqKXZpc2libGVWaWV3IHRvcFZpZXc6KEJPT0wpdG9wVmlldworeworICAgIC8v
IFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nl
c3MuCisgICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50
aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBkbyB0aGlzLgorICAgIEJPT0wgd2FzSW5Q
cmludGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7CisgICAgQk9PTCBpc1ByaW50aW5nID0g
IVtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07CisgICAg
aWYgKGlzUHJpbnRpbmcpIHsKKyAgICAgICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKKyAgICAg
ICAgICAgIFtzZWxmIF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKyNpZm5kZWYgQlVJ
TERJTkdfT05fVElHRVIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3NlbGYgX3dlYl9sYXlv
dXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKHdhc0luUHJpbnRp
bmdNb2RlKQorICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsK
KworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKyAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMg
bm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhlcmUuCisgICAgW3Nl
bGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07CisgICAgW19zdWJ2aWV3cyBtYWtlT2Jq
ZWN0c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX3Byb3BhZ2F0ZURpcnR5UmVjdHNUb09wYXF1
ZUFuY2VzdG9ycyldOworCisjZW5kaWYKKworICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsK
KyAgICBbc3VwZXIgX3JlY3Vyc2l2ZURpc3BsYXlSZWN0SWZOZWVkZWRJZ25vcmluZ09wYWNpdHk6
cmVjdCBpc1Zpc2libGVSZWN0OmlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3
OnZpc2libGVWaWV3IHRvcFZpZXc6dG9wVmlld107CisgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3
c107CisKKyAgICBpZiAod2FzSW5QcmludGluZ01vZGUgIT0gaXNQcmludGluZykgeworICAgICAg
ICBpZiAod2FzSW5QcmludGluZ01vZGUpCisgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFByaW50
aW5nTW9kZVJlY3Vyc2l2ZV07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtzZWxmIF93ZWJf
Y2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOworICAgIH0KK30KKworLy8gRG9uJ3QgbGV0IEFw
cEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0LgorLSAodm9pZClf
cmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tGb2N1czooQk9PTCluZWVkc0xvY2tGb2N1
cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVjdAoreworICAgIEJPT0wgbmVlZFRvU2V0QXNpZGVTdWJ2
aWV3cyA9ICFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZTsKKworICAgIEJPT0wgd2FzSW5Qcmlu
dGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7CisgICAgQk9PTCBpc1ByaW50aW5nID0gIVtO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl07CisKKyAgICBp
ZiAobmVlZFRvU2V0QXNpZGVTdWJ2aWV3cykgeworICAgICAgICAvLyBUaGlzIGhlbHBzIHdoZW4g
d2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9jZXNzLgorICAgICAgICAvLyBJ
ZiB0aGUgV2ViSFRNTFZpZXcgaXRzZWxmIGlzIHdoYXQgd2UncmUgcHJpbnRpbmcsIHRoZW4gd2Ug
d2lsbCBuZXZlciBoYXZlIHRvIGRvIHRoaXMuCisgICAgICAgIGlmIChpc1ByaW50aW5nKSB7Cisg
ICAgICAgICAgICBpZiAoIXdhc0luUHJpbnRpbmdNb2RlKQorICAgICAgICAgICAgICAgIFtzZWxm
IF93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX2xheW91dElm
TmVlZGVkUmVjdXJzaXZlXTsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgaWYgKHdhc0luUHJpbnRp
bmdNb2RlKQorICAgICAgICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2
ZV07CisKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorCisgICAgICAgIC8vIEJlY2F1c2UgVGln
ZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERyYXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVyZS4K
KyAgICAgICAgTlNSZWN0IGJvdW5kc0JlZm9yZUxheW91dCA9IFtzZWxmIGJvdW5kc107CisgICAg
ICAgIGlmICghTlNJc0VtcHR5UmVjdCh2aXNSZWN0KSkKKyAgICAgICAgICAgIFtzZWxmIF93ZWJf
bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOworCisgICAgICAgIC8vIElmIGxheW91dCBjaGFuZ2Vz
IHRoZSB2aWV3J3MgYm91bmRzLCB0aGVuIHdlIG5lZWQgdG8gcmVjb21wdXRlIHRoZSB2aXNSZWN0
LgorICAgICAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGUgdmlzUmVjdCBwYXNzZWQgdG8gdXMgd2Fz
IGJhc2VkIG9uIHRoZSBib3VuZHMgYXQgdGhlIHRpbWUKKyAgICAgICAgLy8gd2Ugd2VyZSBjYWxs
ZWQuIFRoaXMgbWV0aG9kIGlzIG9ubHkgZGlzcGxheWVkIHRvIGRyYXcgImFsbCIsIHNvIGl0J3Mg
c2FmZQorICAgICAgICAvLyB0byBqdXN0IGNhbGwgdmlzaWJsZVJlY3QgdG8gY29tcHV0ZSB0aGUg
ZW50aXJlIHJlY3RhbmdsZS4KKyAgICAgICAgaWYgKCFOU0VxdWFsUmVjdHMoYm91bmRzQmVmb3Jl
TGF5b3V0LCBbc2VsZiBib3VuZHNdKSkKKyAgICAgICAgICAgIHZpc1JlY3QgPSBbc2VsZiB2aXNp
YmxlUmVjdF07CisKKyNlbmRpZgorCisgICAgICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsK
KyAgICB9CisKKyAgICBbc3VwZXIgX3JlY3Vyc2l2ZURpc3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9j
dXM6bmVlZHNMb2NrRm9jdXMgdmlzUmVjdDp2aXNSZWN0XTsKKworICAgIGlmIChuZWVkVG9TZXRB
c2lkZVN1YnZpZXdzKSB7CisgICAgICAgIGlmICh3YXNJblByaW50aW5nTW9kZSAhPSBpc1ByaW50
aW5nKSB7CisgICAgICAgICAgICBpZiAod2FzSW5QcmludGluZ01vZGUpCisgICAgICAgICAgICAg
ICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1cnNpdmVdOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVd
OworICAgICAgICB9CisKKyAgICAgICAgW3NlbGYgX3Jlc3RvcmVTdWJ2aWV3c107CisgICAgfQor
fQorCisvLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4gZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJl
IG9mIHRoYXQuCistICh2b2lkKV9yZWN1cnNpdmU6KEJPT0wpcmVjdXJzZSBkaXNwbGF5UmVjdEln
bm9yaW5nT3BhY2l0eTooTlNSZWN0KWRpc3BsYXlSZWN0IGluQ29udGV4dDooTlNHcmFwaGljc0Nv
bnRleHQgKiljb250ZXh0IHRvcFZpZXc6KEJPT0wpdG9wVmlldworeworI2lmZGVmIEJVSUxESU5H
X09OX1RJR0VSIAorICAgIC8vIEJlY2F1c2UgVGlnZXIgZG9lcyBub3QgaGF2ZSB2aWV3V2lsbERy
YXcgd2UgbmVlZCB0byBkbyBsYXlvdXQgaGVyZS4KKyAgICBbc2VsZiBfd2ViX2xheW91dElmTmVl
ZGVkUmVjdXJzaXZlXTsKKyNlbmRpZgorCisgICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3NdOwor
ICAgIFtzdXBlciBfcmVjdXJzaXZlOnJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNpdHk6
ZGlzcGxheVJlY3QgaW5Db250ZXh0OmNvbnRleHQgdG9wVmlldzp0b3BWaWV3XTsKKyAgICBbc2Vs
ZiBfcmVzdG9yZVN1YnZpZXdzXTsKK30KKworLSAoQk9PTClfaW5zaWRlQW5vdGhlckhUTUxWaWV3
Cit7CisgICAgcmV0dXJuIHNlbGYgIT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKK30KKworLSAoTlNW
aWV3ICopaGl0VGVzdDooTlNQb2ludClwb2ludAoreworICAgIC8vIFdlYkhUTUxWaWV3IG9iamVj
dHMgaGFuZGxlIGFsbCBldmVudHMgZm9yIG9iamVjdHMgaW5zaWRlIHRoZW0uCisgICAgLy8gVG8g
Z2V0IHRob3NlIGV2ZW50cywgd2UgcHJldmVudCBoaXQgdGVzdGluZyBmcm9tIEFwcEtpdC4KKwor
ICAgIC8vIEJ1dCB0aGVyZSBhcmUgdGhyZWUgZXhjZXB0aW9ucyB0byB0aGlzOgorICAgIC8vICAg
MSkgRm9yIHJpZ2h0IG1vdXNlIGNsaWNrcyBhbmQgY29udHJvbCBjbGlja3Mgd2UgZG9uJ3QgeWV0
IGhhdmUgYW4gaW1wbGVtZW50YXRpb24KKyAgICAvLyAgICAgIHRoYXQgd29ya3MgZm9yIG5lc3Rl
ZCB2aWV3cywgc28gd2UgbGV0IHRoZSBoaXQgdGVzdGluZyBnbyB0aHJvdWdoIHRoZQorICAgIC8v
ICAgICAgc3RhbmRhcmQgTlNWaWV3IGNvZGUgcGF0aCAobmVlZHMgdG8gYmUgZml4ZWQsIHNlZSBi
dWcgNDM2MTYxOCkuCisgICAgLy8gICAyKSBKYXZhIGRlcGVuZHMgb24gZG9pbmcgYSBoaXQgdGVz
dCBpbnNpZGUgaXQncyBtb3VzZSBtb3ZlZCBoYW5kbGluZywKKyAgICAvLyAgICAgIHNvIHdlIGxl
dCB0aGUgaGl0IHRlc3RpbmcgZ28gdGhyb3VnaCB0aGUgc3RhbmRhcmQgTlNWaWV3IGNvZGUgcGF0
aAorICAgIC8vICAgICAgd2hlbiB0aGUgY3VycmVudCBldmVudCBpcyBhIG1vdXNlIG1vdmUgKGV4
Y2VwdCB3aGVuIHdlIGFyZSBjYWxsaW5nCisgICAgLy8gICAgICBmcm9tIF91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQsIHNvIHdlIGhhdmUgdG8gdXNlIGEgZ2xvYmFsLAorICAgIC8vICAgICAgZm9y
Y2VXZWJIVE1MVmlld0hpdFRlc3QsIGZvciB0aGF0KQorICAgIC8vICAgMykgVGhlIGFjY2VwdHNG
aXJzdE1vdXNlOiBhbmQgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OiBtZXRob2Rz
CisgICAgLy8gICAgICBib3RoIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCB2aWV3IHRvIGNoZWNr
IHdpdGggaW5zaWRlIHRoZSBXZWJIVE1MVmlldy4KKyAgICAvLyAgICAgIFRoZXkgdXNlIGEgZ2xv
YmFsIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgaGl0VGVzdDogc28gdGhleSBjYW4gZ2V0IHRo
ZQorICAgIC8vICAgICAgcmlnaHQgdmlldy4gVGhlIGdsb2JhbCBpcyBmb3JjZU5TVmlld0hpdFRl
c3QgYW5kIHRoZSBtZXRob2QgdGhleSB1c2UgdG8KKyAgICAvLyAgICAgIGRvIHRoZSBoaXQgdGVz
dGluZyBpcyBfaGl0Vmlld0ZvckV2ZW50Oi4gKEJ1dCB0aGlzIGRvZXMgbm90IHdvcmsgY29ycmVj
dGx5CisgICAgLy8gICAgICB3aGVuIHRoZXJlIGlzIEhUTUwgb3ZlcmxhcHBpbmcgdGhlIHZpZXcs
IHNlZSBidWcgNDM2MTYyNikKKyAgICAvLyAgIDQpIE5TQWNjZXNzaWJpbGl0eUhpdFRlc3QgcmVs
aWVzIG9uIHRoaXMgZm9yIGNoZWNraW5nIHRoZSBjdXJzb3IgcG9zaXRpb24uCisgICAgLy8gICAg
ICBPdXIgY2hlY2sgZm9yIHRoYXQgaXMgd2hldGhlciB0aGUgZXZlbnQgaXMgTlNGbGFnc0NoYW5n
ZWQuICBUaGlzIHdvcmtzCisgICAgLy8gICAgICBmb3IgVm9pY2VPdmVyJ3MgY250bC1vcHQtZjUg
Y29tbWFuZCAobW92ZSBmb2N1cyB0byBpdGVtIHVuZGVyIGN1cnNvcikKKyAgICAvLyAgICAgIGFu
ZCBEaWN0aW9uYXJ5J3MgY21kLWNudGwtRCAob3BlbiBkaWN0aW9uYXJ5IHBvcHVwIGZvciBpdGVt
IHVuZGVyIGN1cnNvcikuCisgICAgLy8gICAgICBUaGlzIGlzIG9mIGNvdXJzZSBhIGhhY2suCisK
KyAgICBCT09MIGNhcHR1cmVIaXRzT25TdWJ2aWV3czsKKyAgICBpZiAoZm9yY2VOU1ZpZXdIaXRU
ZXN0KQorICAgICAgICBjYXB0dXJlSGl0c09uU3Vidmlld3MgPSBOTzsKKyAgICBlbHNlIGlmIChm
b3JjZVdlYkhUTUxWaWV3SGl0VGVzdCkKKyAgICAgICAgY2FwdHVyZUhpdHNPblN1YnZpZXdzID0g
WUVTOworICAgIGVsc2UgeworICAgICAgICBOU0V2ZW50ICpldmVudCA9IFtbc2VsZiB3aW5kb3dd
IGN1cnJlbnRFdmVudF07CisgICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9ICEoW2V2ZW50
IHR5cGVdID09IE5TTW91c2VNb3ZlZAorICAgICAgICAgICAgfHwgW2V2ZW50IHR5cGVdID09IE5T
UmlnaHRNb3VzZURvd24KKyAgICAgICAgICAgIHx8IChbZXZlbnQgdHlwZV0gPT0gTlNMZWZ0TW91
c2VEb3duICYmIChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0NvbnRyb2xLZXlNYXNrKSAhPSAw
KQorICAgICAgICAgICAgfHwgW2V2ZW50IHR5cGVdID09IE5TRmxhZ3NDaGFuZ2VkKTsKKyAgICB9
CisKKyAgICBpZiAoIWNhcHR1cmVIaXRzT25TdWJ2aWV3cykKKyAgICAgICAgcmV0dXJuIFtzdXBl
ciBoaXRUZXN0OnBvaW50XTsKKyAgICBpZiAoW1tzZWxmIHN1cGVydmlld10gbW91c2U6cG9pbnQg
aW5SZWN0OltzZWxmIGZyYW1lXV0pCisgICAgICAgIHJldHVybiBzZWxmOworICAgIHJldHVybiBu
aWw7Cit9CisKKy0gKHZvaWQpX2NsZWFyTGFzdEhpdFZpZXdJZlNlbGYKK3sKKyAgICBpZiAobGFz
dEhpdFZpZXcgPT0gc2VsZikKKyAgICAgICAgbGFzdEhpdFZpZXcgPSBuaWw7Cit9CisKKy0gKE5T
VHJhY2tpbmdSZWN0VGFnKWFkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93
bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRl
Cit7CisgICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOworICAg
IF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVyOworICAgIF9wcml2YXRlLT50cmFj
a2luZ1JlY3RVc2VyRGF0YSA9IGRhdGE7CisgICAgcmV0dXJuIFRSQUNLSU5HX1JFQ1RfVEFHOwor
fQorCistIChOU1RyYWNraW5nUmVjdFRhZylfYWRkVHJhY2tpbmdSZWN0OihOU1JlY3QpcmVjdCBv
d25lcjooaWQpb3duZXIgdXNlckRhdGE6KHZvaWQgKilkYXRhIGFzc3VtZUluc2lkZTooQk9PTClh
c3N1bWVJbnNpZGUgdXNlVHJhY2tpbmdOdW06KGludCl0YWcKK3sKKyAgICBBU1NFUlQodGFnID09
IDAgfHwgdGFnID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKKyAgICBBU1NFUlQoX3ByaXZhdGUtPnRy
YWNraW5nUmVjdE93bmVyID09IG5pbCk7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVy
ID0gb3duZXI7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVzZXJEYXRhID0gZGF0YTsKKyAg
ICByZXR1cm4gVFJBQ0tJTkdfUkVDVF9UQUc7Cit9CisKKy0gKHZvaWQpX2FkZFRyYWNraW5nUmVj
dHM6KE5TUmVjdCAqKXJlY3RzIG93bmVyOihpZClvd25lciB1c2VyRGF0YUxpc3Q6KHZvaWQgKiop
dXNlckRhdGFMaXN0IGFzc3VtZUluc2lkZUxpc3Q6KEJPT0wgKilhc3N1bWVJbnNpZGVMaXN0IHRy
YWNraW5nTnVtczooTlNUcmFja2luZ1JlY3RUYWcgKil0cmFja2luZ051bXMgY291bnQ6KGludClj
b3VudAoreworICAgIEFTU0VSVChjb3VudCA9PSAxKTsKKyAgICBBU1NFUlQodHJhY2tpbmdOdW1z
WzBdID09IDAgfHwgdHJhY2tpbmdOdW1zWzBdID09IFRSQUNLSU5HX1JFQ1RfVEFHKTsKKyAgICBB
U1NFUlQoX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID09IG5pbCk7CisgICAgX3ByaXZhdGUt
PnRyYWNraW5nUmVjdE93bmVyID0gb3duZXI7CisgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdFVz
ZXJEYXRhID0gdXNlckRhdGFMaXN0WzBdOworICAgIHRyYWNraW5nTnVtc1swXSA9IFRSQUNLSU5H
X1JFQ1RfVEFHOworfQorCistICh2b2lkKXJlbW92ZVRyYWNraW5nUmVjdDooTlNUcmFja2luZ1Jl
Y3RUYWcpdGFnCit7CisgICAgaWYgKHRhZyA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKF9wcml2YXRlICYmICh0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpKSB7CisgICAgICAg
IF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG5pbDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoX3ByaXZhdGUgJiYgKHRhZyA9PSBfcHJpdmF0ZS0+bGFzdFRvb2xU
aXBUYWcpKSB7CisgICAgICAgIFtzdXBlciByZW1vdmVUcmFja2luZ1JlY3Q6dGFnXTsKKyAgICAg
ICAgX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICAvLyBJZiBhbnkgb3RoZXIgdHJhY2tpbmcgcmVjdCBpcyBiZWluZyByZW1vdmVk
LCB3ZSBkb24ndCBrbm93IGhvdyBpdCB3YXMgY3JlYXRlZAorICAgIC8vIGFuZCBpdCdzIHBvc3Np
YmxlIHRoZXJlJ3MgYSBsZWFrIGludm9sdmVkIChzZWUgMzUwMDIxNykKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworLSAodm9pZClfcmVtb3ZlVHJhY2tpbmdSZWN0czooTlNUcmFja2lu
Z1JlY3RUYWcgKil0YWdzIGNvdW50OihpbnQpY291bnQKK3sKKyAgICBpbnQgaTsKKyAgICBmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpbnQgdGFnID0gdGFnc1tpXTsKKyAg
ICAgICAgaWYgKHRhZyA9PSAwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VS
VCh0YWcgPT0gVFJBQ0tJTkdfUkVDVF9UQUcpOworICAgICAgICBpZiAoX3ByaXZhdGUgIT0gbmls
KSB7CisgICAgICAgICAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPSBuaWw7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKKy0gKHZvaWQpX3NlbmRUb29sVGlwTW91c2VFeGl0ZWQKK3sKKyAg
ICAvLyBOb3RoaW5nIG1hdHRlcnMgZXhjZXB0IHdpbmRvdywgdHJhY2tpbmdOdW1iZXIsIGFuZCB1
c2VyRGF0YS4KKyAgICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBlbnRlckV4aXRFdmVu
dFdpdGhUeXBlOk5TTW91c2VFeGl0ZWQKKyAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoMCwg
MCkKKyAgICAgICAgbW9kaWZpZXJGbGFnczowCisgICAgICAgIHRpbWVzdGFtcDowCisgICAgICAg
IHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRl
eHQ6TlVMTAorICAgICAgICBldmVudE51bWJlcjowCisgICAgICAgIHRyYWNraW5nTnVtYmVyOlRS
QUNLSU5HX1JFQ1RfVEFHCisgICAgICAgIHVzZXJEYXRhOl9wcml2YXRlLT50cmFja2luZ1JlY3RV
c2VyRGF0YV07CisgICAgW19wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciBtb3VzZUV4aXRlZDpm
YWtlRXZlbnRdOworfQorCistICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRW50ZXJlZAoreworICAg
IC8vIE5vdGhpbmcgbWF0dGVycyBleGNlcHQgd2luZG93LCB0cmFja2luZ051bWJlciwgYW5kIHVz
ZXJEYXRhLgorICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IGVudGVyRXhpdEV2ZW50
V2l0aFR5cGU6TlNNb3VzZUVudGVyZWQKKyAgICAgICAgbG9jYXRpb246TlNNYWtlUG9pbnQoMCwg
MCkKKyAgICAgICAgbW9kaWZpZXJGbGFnczowCisgICAgICAgIHRpbWVzdGFtcDowCisgICAgICAg
IHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRl
eHQ6TlVMTAorICAgICAgICBldmVudE51bWJlcjowCisgICAgICAgIHRyYWNraW5nTnVtYmVyOlRS
QUNLSU5HX1JFQ1RfVEFHCisgICAgICAgIHVzZXJEYXRhOl9wcml2YXRlLT50cmFja2luZ1JlY3RV
c2VyRGF0YV07CisgICAgW19wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciBtb3VzZUVudGVyZWQ6
ZmFrZUV2ZW50XTsKK30KKworLSAodm9pZClfc2V0VG9vbFRpcDooTlNTdHJpbmcgKilzdHJpbmcK
K3sKKyAgICBOU1N0cmluZyAqdG9vbFRpcCA9IFtzdHJpbmcgbGVuZ3RoXSA9PSAwID8gbmlsIDog
c3RyaW5nOworICAgIE5TU3RyaW5nICpvbGRUb29sVGlwID0gX3ByaXZhdGUtPnRvb2xUaXA7Cisg
ICAgaWYgKCh0b29sVGlwID09IG5pbCB8fCBvbGRUb29sVGlwID09IG5pbCkgPyB0b29sVGlwID09
IG9sZFRvb2xUaXAgOiBbdG9vbFRpcCBpc0VxdWFsVG9TdHJpbmc6b2xkVG9vbFRpcF0pIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAob2xkVG9vbFRpcCkgeworICAgICAgICBbc2Vs
ZiBfc2VuZFRvb2xUaXBNb3VzZUV4aXRlZF07CisgICAgICAgIFtvbGRUb29sVGlwIHJlbGVhc2Vd
OworICAgIH0KKyAgICBfcHJpdmF0ZS0+dG9vbFRpcCA9IFt0b29sVGlwIGNvcHldOworICAgIGlm
ICh0b29sVGlwKSB7CisgICAgICAgIC8vIFNlZSByYWRhciAzNTAwMjE3IGZvciB3aHkgd2UgcmVt
b3ZlIGFsbCB0b29sdGlwcyByYXRoZXIgdGhhbiBqdXN0IHRoZSBzaW5nbGUgb25lIHdlIGNyZWF0
ZWQuCisgICAgICAgIFtzZWxmIHJlbW92ZUFsbFRvb2xUaXBzXTsKKyAgICAgICAgTlNSZWN0IHdp
ZGVPcGVuUmVjdCA9IE5TTWFrZVJlY3QoLTEwMDAwMCwgLTEwMDAwMCwgMjAwMDAwLCAyMDAwMDAp
OworICAgICAgICBfcHJpdmF0ZS0+bGFzdFRvb2xUaXBUYWcgPSBbc2VsZiBhZGRUb29sVGlwUmVj
dDp3aWRlT3BlblJlY3Qgb3duZXI6c2VsZiB1c2VyRGF0YTpOVUxMXTsKKyAgICAgICAgW3NlbGYg
X3NlbmRUb29sVGlwTW91c2VFbnRlcmVkXTsKKyAgICB9Cit9CisKKy0gKE5TU3RyaW5nICopdmll
dzooTlNWaWV3ICopdmlldyBzdHJpbmdGb3JUb29sVGlwOihOU1Rvb2xUaXBUYWcpdGFnIHBvaW50
OihOU1BvaW50KXBvaW50IHVzZXJEYXRhOih2b2lkICopZGF0YQoreworICAgIHJldHVybiBbW19w
cml2YXRlLT50b29sVGlwIGNvcHldIGF1dG9yZWxlYXNlXTsKK30KKworLSAodm9pZClfdXBkYXRl
TW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoX3ByaXZhdGUt
PmNsb3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgTlNWaWV3ICpjb250ZW50VmlldyA9IFtb
ZXZlbnQgd2luZG93XSBjb250ZW50Vmlld107CisgICAgTlNQb2ludCBsb2NhdGlvbkZvckhpdFRl
c3QgPSBbW2NvbnRlbnRWaWV3IHN1cGVydmlld10gY29udmVydFBvaW50OltldmVudCBsb2NhdGlv
bkluV2luZG93XSBmcm9tVmlldzpuaWxdOworICAgIAorICAgIGZvcmNlV2ViSFRNTFZpZXdIaXRU
ZXN0ID0gWUVTOworICAgIE5TVmlldyAqaGl0VmlldyA9IFtjb250ZW50VmlldyBoaXRUZXN0Omxv
Y2F0aW9uRm9ySGl0VGVzdF07CisgICAgZm9yY2VXZWJIVE1MVmlld0hpdFRlc3QgPSBOTzsKKyAg
ICAKKyAgICBXZWJIVE1MVmlldyAqdmlldyA9IG5pbDsKKyAgICBpZiAoW2hpdFZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSAmJiAhW1soV2ViSFRNTFZpZXcgKiloaXRWaWV3
IF93ZWJWaWV3XSBpc0hvdmVyRmVlZGJhY2tTdXNwZW5kZWRdKQorICAgICAgICB2aWV3ID0gKFdl
YkhUTUxWaWV3ICopaGl0VmlldzsgICAgCisKKyAgICBpZiAodmlldykKKyAgICAgICAgW3ZpZXcg
cmV0YWluXTsKKworICAgIGlmIChsYXN0SGl0VmlldyAhPSB2aWV3ICYmIGxhc3RIaXRWaWV3ICYm
IFtsYXN0SGl0VmlldyBfZnJhbWVdKSB7CisgICAgICAgIC8vIElmIHdlIGFyZSBtb3Zpbmcgb3V0
IG9mIGEgdmlldyAob3IgZnJhbWUpLCBsZXQncyBwcmV0ZW5kIHRoZSBtb3VzZSBtb3ZlZAorICAg
ICAgICAvLyBhbGwgdGhlIHdheSBvdXQgb2YgdGhhdCB2aWV3LiBCdXQgd2UgaGF2ZSB0byBhY2Nv
dW50IGZvciBzY3JvbGxpbmcsIGJlY2F1c2UKKyAgICAgICAgLy8ga2h0bWwgZG9lc24ndCB1bmRl
cnN0YW5kIG91ciBjbGlwcGluZy4KKyAgICAgICAgTlNSZWN0IHZpc2libGVSZWN0ID0gW1tbW2xh
c3RIaXRWaWV3IF9mcmFtZV0gZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gZG9jdW1lbnRWaXNpYmxl
UmVjdF07CisgICAgICAgIGZsb2F0IHlTY3JvbGwgPSB2aXNpYmxlUmVjdC5vcmlnaW4ueTsKKyAg
ICAgICAgZmxvYXQgeFNjcm9sbCA9IHZpc2libGVSZWN0Lm9yaWdpbi54OworCisgICAgICAgIGV2
ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0xIC0geFNjcm9sbCwgLTEgLSB5
U2Nyb2xsICkKKyAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAg
Y3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQorICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6W1t2aWV3IHdpbmRvd10gd2luZG93TnVtYmVy
XQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRd
IGNvbnRleHRdCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0Nv
dW50OjAgcHJlc3N1cmU6MF07CisgICAgICAgIGlmIChGcmFtZSogbGFzdEhpdENvcmVGcmFtZSA9
IGNvcmUoW2xhc3RIaXRWaWV3IF9mcmFtZV0pKQorICAgICAgICAgICAgbGFzdEhpdENvcmVGcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOworICAgIH0KKworICAgIGxhc3RI
aXRWaWV3ID0gdmlldzsKKworICAgIGlmICh2aWV3KSB7CisgICAgICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbdmlldyBfZnJhbWVdKSkKKyAgICAgICAgICAgIGNvcmVGcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOworCisgICAgICAgIFt2aWV3IHJlbGVhc2Vd
OworICAgIH0KK30KKworLy8ga2VlcCBpbiBzeW5jIHdpdGggV2ViUGFzdGVib2FyZEhlbHBlcjo6
aW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcworKyAoTlNBcnJheSAqKV9pbnNlcnRhYmxlUGFzdGVi
b2FyZFR5cGVzCit7CisgICAgc3RhdGljIE5TQXJyYXkgKnR5cGVzID0gbmlsOworICAgIGlmICgh
dHlwZXMpIHsKKyAgICAgICAgdHlwZXMgPSBbW05TQXJyYXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0
czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNIVE1MUGJvYXJkVHlwZSwgTlNGaWxlbmFtZXNQYm9h
cmRUeXBlLCBOU1RJRkZQYm9hcmRUeXBlLCBOU1BERlBib2FyZFR5cGUsCisjaWYgZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgICAg
ICAgICAgTlNQSUNUUGJvYXJkVHlwZSwKKyNlbmRpZgorICAgICAgICAgICAgTlNVUkxQYm9hcmRU
eXBlLCBOU1JURkRQYm9hcmRUeXBlLCBOU1JURlBib2FyZFR5cGUsIE5TU3RyaW5nUGJvYXJkVHlw
ZSwgTlNDb2xvclBib2FyZFR5cGUsIGtVVFR5cGVQTkcsIG5pbF07CisgICAgICAgIENGUmV0YWlu
KHR5cGVzKTsKKyAgICB9CisgICAgcmV0dXJuIHR5cGVzOworfQorCisrIChOU0FycmF5ICopX3Nl
bGVjdGlvblBhc3RlYm9hcmRUeXBlcworeworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHV0IGRh
dGEgZm9yIE5TSFRNTFBib2FyZFR5cGUgb24gdGhlIHBhc3RlYm9hcmQgYnV0IE1pY3Jvc29mdCBF
eGNlbCBkb2Vzbid0IGxpa2Ugb3VyIGZvcm1hdCBvZiBIVE1MICgzNjQwNDIzKS4KKyAgICByZXR1
cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpXZWJBcmNoaXZlUGJvYXJkVHlwZSwgTlNSVEZE
UGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIG5pbF07Cit9
CisKKy0gKE5TSW1hZ2UgKilfZHJhZ0ltYWdlRm9yVVJMOihOU1N0cmluZyopdXJsU3RyaW5nIHdp
dGhMYWJlbDooTlNTdHJpbmcqKWxhYmVsCit7CisgICAgQk9PTCBkcmF3VVJMU3RyaW5nID0gWUVT
OworICAgIEJPT0wgY2xpcFVSTFN0cmluZyA9IE5PLCBjbGlwTGFiZWxTdHJpbmcgPSBOTzsKKyAg
ICAKKyAgICBpZiAoIWxhYmVsKSB7CisgICAgICAgIGRyYXdVUkxTdHJpbmcgPSBOTzsKKyAgICAg
ICAgbGFiZWwgPSB1cmxTdHJpbmc7CisgICAgfQorICAgIAorICAgIE5TRm9udCAqbGFiZWxGb250
ID0gW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBjb252ZXJ0Rm9udDpbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6RFJBR19MSU5LX0xBQkVMX0ZPTlRfU0laRV0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9IYXZlVHJh
aXQ6TlNCb2xkRm9udE1hc2tdOworICAgIE5TRm9udCAqdXJsRm9udCA9IFtOU0ZvbnQgc3lzdGVt
Rm9udE9mU2l6ZTogRFJBR19MSU5LX1VSTF9GT05UX1NJWkVdOworICAgIE5TU2l6ZSBsYWJlbFNp
emU7CisgICAgbGFiZWxTaXplLndpZHRoID0gW2xhYmVsIF93ZWJfd2lkdGhXaXRoRm9udDogbGFi
ZWxGb250XTsKKyAgICBsYWJlbFNpemUuaGVpZ2h0ID0gW2xhYmVsRm9udCBhc2NlbmRlcl0gLSBb
bGFiZWxGb250IGRlc2NlbmRlcl07CisgICAgaWYgKGxhYmVsU2l6ZS53aWR0aCA+IE1BWF9EUkFH
X0xBQkVMX1dJRFRIKXsKKyAgICAgICAgbGFiZWxTaXplLndpZHRoID0gTUFYX0RSQUdfTEFCRUxf
V0lEVEg7CisgICAgICAgIGNsaXBMYWJlbFN0cmluZyA9IFlFUzsKKyAgICB9CisgICAgCisgICAg
TlNTaXplIGltYWdlU2l6ZSwgdXJsU3RyaW5nU2l6ZTsKKyAgICBpbWFnZVNpemUud2lkdGggPSBs
YWJlbFNpemUud2lkdGggKyBEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZjsKKyAgICBpbWFnZVNp
emUuaGVpZ2h0ID0gbGFiZWxTaXplLmhlaWdodCArIERSQUdfTEFCRUxfQk9SREVSX1kgKiAyLjBm
OworICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7CisgICAgICAgIHVybFN0cmluZ1NpemUud2lkdGgg
PSBbdXJsU3RyaW5nIF93ZWJfd2lkdGhXaXRoRm9udDogdXJsRm9udF07CisgICAgICAgIHVybFN0
cmluZ1NpemUuaGVpZ2h0ID0gW3VybEZvbnQgYXNjZW5kZXJdIC0gW3VybEZvbnQgZGVzY2VuZGVy
XTsKKyAgICAgICAgaW1hZ2VTaXplLmhlaWdodCArPSB1cmxTdHJpbmdTaXplLmhlaWdodDsKKyAg
ICAgICAgaWYgKHVybFN0cmluZ1NpemUud2lkdGggPiBNQVhfRFJBR19MQUJFTF9XSURUSCkgewor
ICAgICAgICAgICAgaW1hZ2VTaXplLndpZHRoID0gTUFYKE1BWF9EUkFHX0xBQkVMX1dJRFRIICsg
RFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYsIE1JTl9EUkFHX0xBQkVMX1dJRFRIX0JFRk9SRV9D
TElQKTsKKyAgICAgICAgICAgIGNsaXBVUkxTdHJpbmcgPSBZRVM7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpbWFnZVNpemUud2lkdGggPSBNQVgobGFiZWxTaXplLndpZHRoICsgRFJB
R19MQUJFTF9CT1JERVJfWCAqIDIuMGYsIHVybFN0cmluZ1NpemUud2lkdGggKyBEUkFHX0xBQkVM
X0JPUkRFUl9YICogMi4wZik7CisgICAgICAgIH0KKyAgICB9CisgICAgTlNJbWFnZSAqZHJhZ0lt
YWdlID0gW1tbTlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOiBpbWFnZVNpemVdIGF1dG9yZWxl
YXNlXTsKKyAgICBbZHJhZ0ltYWdlIGxvY2tGb2N1c107CisgICAgCisgICAgW1tOU0NvbG9yIGNv
bG9yV2l0aERldmljZVJlZDogMC43ZiBncmVlbjogMC43ZiBibHVlOiAwLjdmIGFscGhhOiAwLjhm
XSBzZXRdOworICAgIAorICAgIC8vIERyYWcgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5l
cnMvCisgICAgTlNCZXppZXJQYXRoICpwYXRoID0gW05TQmV6aWVyUGF0aCBiZXppZXJQYXRoXTsK
KyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoMC4w
ZiwgMC4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIu
MGYpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJl
Y3QoMCwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYpXTsKKyAgICBbcGF0
aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJlY3QoaW1hZ2VTaXplLndp
ZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19M
QUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxf
UkFESVVTICogMi4wZildOworICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoT3ZhbEluUmVj
dDogTlNNYWtlUmVjdChpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYs
IDAuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBm
KV07CisgICAgCisgICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0
KERSQUdfTEFCRUxfUkFESVVTLCAwLjBmLCBpbWFnZVNpemUud2lkdGggLSBEUkFHX0xBQkVMX1JB
RElVUyAqIDIuMGYsIGltYWdlU2l6ZS5oZWlnaHQpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQ
YXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3QoMC4wZiwgRFJBR19MQUJFTF9SQURJVVMsIERSQUdfTEFC
RUxfUkFESVVTICsgMTAuMGYsIGltYWdlU2l6ZS5oZWlnaHQgLSAyLjBmICogRFJBR19MQUJFTF9S
QURJVVMpXTsKKyAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aFJlY3Q6IE5TTWFrZVJlY3Qo
aW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgLSAyMC4wZiwgRFJBR19MQUJFTF9S
QURJVVMsIERSQUdfTEFCRUxfUkFESVVTICsgMjAuMGYsIGltYWdlU2l6ZS5oZWlnaHQgLSAyLjBm
ICogRFJBR19MQUJFTF9SQURJVVMpXTsKKyAgICBbcGF0aCBmaWxsXTsKKyAgICAKKyAgICBOU0Nv
bG9yICp0b3BDb2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjAuMGYgYWxwaGE6
MC43NWZdOworICAgIE5TQ29sb3IgKmJvdHRvbUNvbG9yID0gW05TQ29sb3IgY29sb3JXaXRoRGV2
aWNlV2hpdGU6MS4wZiBhbHBoYTowLjVmXTsKKyAgICBpZiAoZHJhd1VSTFN0cmluZykgeworICAg
ICAgICBpZiAoY2xpcFVSTFN0cmluZykKKyAgICAgICAgICAgIHVybFN0cmluZyA9IFtXZWJTdHJp
bmdUcnVuY2F0b3IgY2VudGVyVHJ1bmNhdGVTdHJpbmc6IHVybFN0cmluZyB0b1dpZHRoOmltYWdl
U2l6ZS53aWR0aCAtIChEUkFHX0xBQkVMX0JPUkRFUl9YICogMi4wZikgd2l0aEZvbnQ6dXJsRm9u
dF07CisgICAgICAgIAorICAgICAgICBbdXJsU3RyaW5nIF93ZWJfZHJhd0RvdWJsZWRBdFBvaW50
Ok5TTWFrZVBvaW50KERSQUdfTEFCRUxfQk9SREVSX1gsIERSQUdfTEFCRUxfQk9SREVSX1kgLSBb
dXJsRm9udCBkZXNjZW5kZXJdKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhU
b3BDb2xvcjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21Db2xvciBmb250OnVybEZvbnRdOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoY2xpcExhYmVsU3RyaW5nKQorICAgICAgICBsYWJlbCA9IFtX
ZWJTdHJpbmdUcnVuY2F0b3IgcmlnaHRUcnVuY2F0ZVN0cmluZzogbGFiZWwgdG9XaWR0aDppbWFn
ZVNpemUud2lkdGggLSAoRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYpIHdpdGhGb250OmxhYmVs
Rm9udF07CisgICAgW2xhYmVsIF93ZWJfZHJhd0RvdWJsZWRBdFBvaW50Ok5TTWFrZVBvaW50IChE
UkFHX0xBQkVMX0JPUkRFUl9YLCBpbWFnZVNpemUuaGVpZ2h0IC0gRFJBR19MQUJFTF9CT1JERVJf
WV9PRkZTRVQgLSBbbGFiZWxGb250IHBvaW50U2l6ZV0pCisgICAgICAgICAgICAgICAgICAgICAg
d2l0aFRvcENvbG9yOnRvcENvbG9yIGJvdHRvbUNvbG9yOmJvdHRvbUNvbG9yIGZvbnQ6bGFiZWxG
b250XTsKKyAgICAKKyAgICBbZHJhZ0ltYWdlIHVubG9ja0ZvY3VzXTsKKyAgICAKKyAgICByZXR1
cm4gZHJhZ0ltYWdlOworfQorCistIChOU0ltYWdlICopX2RyYWdJbWFnZUZvckxpbmtFbGVtZW50
OihOU0RpY3Rpb25hcnkgKillbGVtZW50Cit7CisgICAgTlNVUkwgKmxpbmtVUkwgPSBbZWxlbWVu
dCBvYmplY3RGb3JLZXk6IFdlYkVsZW1lbnRMaW5rVVJMS2V5XTsKKyAgICAKKyAgICBOU1N0cmlu
ZyAqbGFiZWwgPSBbZWxlbWVudCBvYmplY3RGb3JLZXk6IFdlYkVsZW1lbnRMaW5rTGFiZWxLZXld
OworICAgIE5TU3RyaW5nICp1cmxTdHJpbmcgPSBbbGlua1VSTCBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nXTsKKyAgICByZXR1cm4gW3NlbGYgX2RyYWdJbWFnZUZvclVSTDp1cmxTdHJpbmcgd2l0aExh
YmVsOmxhYmVsXTsKK30KKworLSAodm9pZClwYXN0ZWJvYXJkQ2hhbmdlZE93bmVyOihOU1Bhc3Rl
Ym9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFT
b3VyY2U6MF07Cit9CisKKy0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZCBwcm92aWRlRGF0YUZvclR5cGU6KE5TU3RyaW5nICopdHlwZQoreworICAgIGlmIChbdHlw
ZSBpc0VxdWFsOk5TUlRGRFBib2FyZFR5cGVdICYmIFtbcGFzdGVib2FyZCB0eXBlc10gY29udGFp
bnNPYmplY3Q6V2ViQXJjaGl2ZVBib2FyZFR5cGVdKSB7CisgICAgICAgIFdlYkFyY2hpdmUgKmFy
Y2hpdmUgPSBbW1dlYkFyY2hpdmUgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRh
Rm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV1dOworICAgICAgICBbcGFzdGVib2FyZCBfd2Vi
X3dyaXRlUHJvbWlzZWRSVEZERnJvbUFyY2hpdmU6YXJjaGl2ZSBjb250YWluc0ltYWdlOltbcGFz
dGVib2FyZCB0eXBlc10gY29udGFpbnNPYmplY3Q6TlNUSUZGUGJvYXJkVHlwZV1dOworICAgICAg
ICBbYXJjaGl2ZSByZWxlYXNlXTsKKyAgICB9IGVsc2UgaWYgKFt0eXBlIGlzRXF1YWw6TlNUSUZG
UGJvYXJkVHlwZV0gJiYgW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdKSB7CisgICAg
ICAgIGlmIChJbWFnZSogaW1hZ2UgPSBbc2VsZiBwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0t
PmltYWdlKCkpCisgICAgICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilpbWFn
ZS0+Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlXTsKKyAg
ICAgICAgW3NlbGYgc2V0UHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U6MF07CisgICAgfQorfQor
CistICh2b2lkKV9oYW5kbGVBdXRvc2Nyb2xsRm9yTW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZl
bnQgCit7IAorICAgIFtzZWxmIGF1dG9zY3JvbGw6ZXZlbnRdOyAKKyAgICBbc2VsZiBfc3RhcnRB
dXRvc2Nyb2xsVGltZXI6ZXZlbnRdOyAKK30gCisKKy0gKFdlYlBsdWdpbkNvbnRyb2xsZXIgKilf
cGx1Z2luQ29udHJvbGxlcgoreworICAgIHJldHVybiBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxl
cjsKK30KKworLSAodm9pZClfbGF5b3V0Rm9yUHJpbnRpbmcKK3sKKyAgICAvLyBTZXQgcHJpbnRp
bmcgbW9kZSB0ZW1wb3JhcmlseSBzbyB3ZSBjYW4gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB2aWV3
LiBUaGlzIHdpbGwgYWxsb3cKKyAgICAvLyBBcHBLaXQncyBwYWdpbmF0aW9uIGNvZGUgdG8gdXNl
IHRoZSBjb3JyZWN0IGhlaWdodCBmb3IgdGhlIHBhZ2UgY29udGVudC4gTGVhdmluZyBwcmludGlu
ZworICAgIC8vIG1vZGUgb24gaW5kZWZpbml0ZWx5IHdvdWxkIGludGVyZmVyZSB3aXRoIE1haWwn
cyBwcmludGluZyBtZWNoYW5pc20gKGF0IGxlYXN0KSwgc28gd2UganVzdAorICAgIC8vIHR1cm4g
aXQgb2ZmIGFnYWluIGFmdGVyIGFkanVzdGluZyB0aGUgc2l6ZS4KKyAgICBbc2VsZiBfd2ViX3Nl
dFByaW50aW5nTW9kZVJlY3Vyc2l2ZUFuZEFkanVzdFZpZXdTaXplXTsKKyAgICBbc2VsZiBfd2Vi
X2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKK30KKworLSAodm9pZClfc21hcnRJbnNlcnRG
b3JTdHJpbmc6KE5TU3RyaW5nICopcGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOihOU1N0cmluZyAqKiliZWZvcmVTdHJpbmcg
YWZ0ZXJTdHJpbmc6KE5TU3RyaW5nICoqKWFmdGVyU3RyaW5nCit7CisgICAgaWYgKCFwYXN0ZVN0
cmluZyB8fCAhcmFuZ2VUb1JlcGxhY2UgfHwgIVtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnRE
ZWxldGVFbmFibGVkXSkgeworICAgICAgICBpZiAoYmVmb3JlU3RyaW5nKQorICAgICAgICAgICAg
KmJlZm9yZVN0cmluZyA9IG5pbDsKKyAgICAgICAgaWYgKGFmdGVyU3RyaW5nKQorICAgICAgICAg
ICAgKmFmdGVyU3RyaW5nID0gbmlsOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IFtbc2VsZiBfZnJhbWVdIF9zbWFydEluc2VydEZvclN0cmluZzpwYXN0ZVN0cmluZyByZXBsYWNp
bmdSYW5nZTpyYW5nZVRvUmVwbGFjZSBiZWZvcmVTdHJpbmc6YmVmb3JlU3RyaW5nIGFmdGVyU3Ry
aW5nOmFmdGVyU3RyaW5nXTsKK30KKworLSAoQk9PTClfY2FuU21hcnRSZXBsYWNlV2l0aFBhc3Rl
Ym9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93
ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdICYmIFtbcGFzdGVib2FyZCB0eXBlc10g
Y29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOworfQorCistICh2b2lkKV9z
dGFydEF1dG9zY3JvbGxUaW1lcjogKE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKK3sKKyAgICBpZiAo
X3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lciA9PSBuaWwpIHsKKyAgICAgICAgX3ByaXZhdGUtPmF1
dG9zY3JvbGxUaW1lciA9IFtbTlNUaW1lciBzY2hlZHVsZWRUaW1lcldpdGhUaW1lSW50ZXJ2YWw6
QVVUT1NDUk9MTF9JTlRFUlZBTAorICAgICAgICAgICAgdGFyZ2V0OnNlbGYgc2VsZWN0b3I6QHNl
bGVjdG9yKF9hdXRvc2Nyb2xsKSB1c2VySW5mbzpuaWwgcmVwZWF0czpZRVNdIHJldGFpbl07Cisg
ICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVHJpZ2dlckV2ZW50ID0gW3RyaWdnZXJFdmVudCBy
ZXRhaW5dOworICAgIH0KK30KKworLy8gRklYTUU6IF9zZWxlY3Rpb25SZWN0IGlzIGRlcHJlY2F0
ZWQgaW4gZmF2b3Igb2Ygc2VsZWN0aW9uUmVjdCwgd2hpY2ggaXMgaW4gcHJvdG9jb2wgV2ViRG9j
dW1lbnRTZWxlY3Rpb24uCisvLyBXZSBjYW4ndCByZW1vdmUgdGhpcyB5ZXQgYmVjYXVzZSBpdCdz
IHN0aWxsIGluIHVzZSBieSBNYWlsLgorLSAoTlNSZWN0KV9zZWxlY3Rpb25SZWN0Cit7CisgICAg
cmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RdOworfQorCistICh2b2lkKV9zdG9wQXV0b3Njcm9s
bFRpbWVyCit7CisgICAgTlNUaW1lciAqdGltZXIgPSBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRpbWVy
OworICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPSBuaWw7CisgICAgW19wcml2YXRlLT5h
dXRvc2Nyb2xsVHJpZ2dlckV2ZW50IHJlbGVhc2VdOworICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xs
VHJpZ2dlckV2ZW50ID0gbmlsOworICAgIFt0aW1lciBpbnZhbGlkYXRlXTsKKyAgICBbdGltZXIg
cmVsZWFzZV07Cit9CisKKy0gKHZvaWQpX2F1dG9zY3JvbGwKK3sKKyAgICAvLyBHdWFyYW50ZWUg
dGhhdCB0aGUgYXV0b3Njcm9sbCB0aW1lciBpcyBpbnZhbGlkYXRlZCwgZXZlbiBpZiB3ZSBkb24n
dCByZWNlaXZlCisgICAgLy8gYSBtb3VzZSB1cCBldmVudC4KKyAgICBCT09MIGlzU3RpbGxEb3du
ID0gQ0dFdmVudFNvdXJjZUJ1dHRvblN0YXRlKGtDR0V2ZW50U291cmNlU3RhdGVDb21iaW5lZFNl
c3Npb25TdGF0ZSwga0NHTW91c2VCdXR0b25MZWZ0KTsgICAKKyAgICBpZiAoIWlzU3RpbGxEb3du
KXsKKyAgICAgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdp
dGhUeXBlOk5TTGVmdE1vdXNlRHJhZ2dlZAorICAgICAgICBsb2NhdGlvbjpbW3NlbGYgd2luZG93
XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1vdXNlTG9jYXRpb25dXQorICAgICAgICBt
b2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50XSBtb2RpZmllckZsYWdzXQorICAgICAg
ICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCisgICAg
ICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCisgICAgICAgIGNv
bnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgIGV2ZW50TnVtYmVy
OjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgIFtzZWxmIG1vdXNlRHJhZ2dlZDpmYWtl
RXZlbnRdOworfQorCistIChCT09MKV9jYW5FZGl0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUt
PmVkaXRvcigpLT5jYW5FZGl0KCk7Cit9CisKKy0gKEJPT0wpX2NhbkVkaXRSaWNobHkKK3sKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKTsKK30KKworLSAo
Qk9PTClfY2FuQWx0ZXJDdXJyZW50U2VsZWN0aW9uCit7CisgICAgcmV0dXJuIFtzZWxmIF9oYXNT
ZWxlY3Rpb25Pckluc2VydGlvblBvaW50XSAmJiBbc2VsZiBfaXNFZGl0YWJsZV07Cit9CisKKy0g
KEJPT0wpX2hhc1NlbGVjdGlvbgoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNSYW5nZSgpOworfQorCistIChCT09MKV9oYXNTZWxlY3Rpb25Pckluc2VydGlvblBvaW50
Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NhcmV0T3JSYW5nZSgp
OworfQorCistIChCT09MKV9oYXNJbnNlcnRpb25Qb2ludAoreworICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZy
YW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldCgpOworfQorCistIChCT09MKV9pc0VkaXRhYmxlCit7
CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJu
IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
OworfQorCistIChCT09MKV90cmFuc3BhcmVudEJhY2tncm91bmQKK3sKKyAgICByZXR1cm4gX3By
aXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZDsKK30KKworLSAodm9pZClfc2V0VHJhbnNwYXJl
bnRCYWNrZ3JvdW5kOihCT09MKWYKK3sKKyAgICBfcHJpdmF0ZS0+dHJhbnNwYXJlbnRCYWNrZ3Jv
dW5kID0gZjsKK30KKworLSAoTlNJbWFnZSAqKV9zZWxlY3Rpb25EcmFnZ2luZ0ltYWdlCit7Cisg
ICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKSB7CisgICAgICAgIE5TSW1hZ2UgKmRyYWdJbWFn
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkltYWdlKCk7CisgICAgICAgIFtkcmFn
SW1hZ2UgX3dlYl9kaXNzb2x2ZVRvRnJhY3Rpb246V2ViRHJhZ0ltYWdlQWxwaGFdOworICAgICAg
ICByZXR1cm4gZHJhZ0ltYWdlOworICAgIH0KKyAgICByZXR1cm4gbmlsOworfQorCistIChOU1Jl
Y3QpX3NlbGVjdGlvbkRyYWdnaW5nUmVjdAoreworICAgIC8vIE1haWwgY3VycmVudGx5IGNhbGxz
IHRoaXMgbWV0aG9kLiBXZSBjYW4gZWxpbWluYXRlIGl0IHdoZW4gTWFpbCBubyBsb25nZXIgY2Fs
bHMgaXQuCisgICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RdOworfQorCistIChET01Ob2Rl
ICopX2luc2VydE9yZGVyZWRMaXN0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRv
cigpLT5pbnNlcnRPcmRlcmVkTGlzdCgpLmdldCgpKSA6IG5pbDsKK30KKworLSAoRE9NTm9kZSAq
KV9pbnNlcnRVbm9yZGVyZWRMaXN0Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRv
cigpLT5pbnNlcnRVbm9yZGVyZWRMaXN0KCkuZ2V0KCkpIDogbmlsOworfQorCistIChCT09MKV9j
YW5JbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5l
ZGl0b3IoKS0+Y2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKK30KKworLSAoQk9PTClf
Y2FuRGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPmNhbkRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7Cit9CisKKy0gKERPTU5v
ZGUgKilfaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKK3sKKyAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCkuZ2V0KCkpIDogbmls
OworfQorCistIChET01Ob2RlICopX2luY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3JkZXJlZAor
eworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIHJldHVy
biBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5jcmVhc2VTZWxlY3Rpb25M
aXN0TGV2ZWxPcmRlcmVkKCkuZ2V0KCkpIDogbmlsOworfQorCistIChET01Ob2RlICopX2luY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsVW5vcmRlcmVkCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJh
bWUtPmVkaXRvcigpLT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZCgpLmdldCgp
KSA6IG5pbDsKK30KKworLSAodm9pZClfZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwKK3sKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoY29yZUZy
YW1lKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5kZWNyZWFzZVNlbGVjdGlvbkxpc3RM
ZXZlbCgpOworfQorCistICh2b2lkKV9zZXRIaWdobGlnaHRlcjooaWQ8V2ViSFRNTEhpZ2hsaWdo
dGVyPiloaWdobGlnaHRlciBvZlR5cGU6KE5TU3RyaW5nKil0eXBlCit7CisgICAgaWYgKCFfcHJp
dmF0ZS0+aGlnaGxpZ2h0ZXJzKQorICAgICAgICBfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICBbX3ByaXZhdGUtPmhpZ2hsaWdo
dGVycyBzZXRPYmplY3Q6aGlnaGxpZ2h0ZXIgZm9yS2V5OnR5cGVdOworfQorCistICh2b2lkKV9y
ZW1vdmVIaWdobGlnaHRlck9mVHlwZTooTlNTdHJpbmcqKXR5cGUKK3sKKyAgICBbX3ByaXZhdGUt
PmhpZ2hsaWdodGVycyByZW1vdmVPYmplY3RGb3JLZXk6dHlwZV07Cit9CisKKy0gKHZvaWQpX3Vw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQoreworICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVGb2N1
c2VkQW5kQWN0aXZlU3RhdGVUaW1lcl07CisKKyAgICBbW3NlbGYgX3dlYlZpZXddIF91cGRhdGVG
b2N1c2VkQW5kQWN0aXZlU3RhdGVGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKK30KKworLSAodm9p
ZClfd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQK
K3sKKyAgICBBU1NFUlQoW3NlbGYgX2hhc1NlbGVjdGlvbl0pOworICAgIE5TQXJyYXkgKnR5cGVz
ID0gW3NlbGYgcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uXTsKKworICAgIC8vIERvbid0IHdy
aXRlIFJURkQgdG8gdGhlIHBhc3RlYm9hcmQgd2hlbiB0aGUgY29waWVkIGF0dHJpYnV0ZWQgc3Ry
aW5nIGhhcyBubyBhdHRhY2htZW50cy4KKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOworICAgIE5TTXV0YWJs
ZUFycmF5ICptdXRhYmxlVHlwZXMgPSBuaWw7CisgICAgaWYgKCFbYXR0cmlidXRlZFN0cmluZyBj
b250YWluc0F0dGFjaG1lbnRzXSkgeworICAgICAgICBtdXRhYmxlVHlwZXMgPSBbdHlwZXMgbXV0
YWJsZUNvcHldOworICAgICAgICBbbXV0YWJsZVR5cGVzIHJlbW92ZU9iamVjdDpOU1JURkRQYm9h
cmRUeXBlXTsKKyAgICAgICAgdHlwZXMgPSBtdXRhYmxlVHlwZXM7CisgICAgfQorCisgICAgW3Bh
c3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzIG93bmVyOltzZWxmIF90b3BIVE1MVmlld11dOwor
ICAgIFtzZWxmIF93cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0
ZWJvYXJkOnBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzphdHRyaWJ1dGVkU3RyaW5n
XTsKKyAgICBbbXV0YWJsZVR5cGVzIHJlbGVhc2VdOworfQorCistICh2b2lkKWNsb3NlCit7Cisg
ICAgLy8gQ2hlY2sgZm9yIGEgbmlsIF9wcml2YXRlIGhlcmUgaW4gY2FzZSB3ZSB3ZXJlIGNyZWF0
ZWQgd2l0aCBpbml0V2l0aENvZGVyLiBJbiB0aGF0IGNhc2UsIHRoZSBXZWJWaWV3IGlzIGp1c3Qg
dGhyb3dpbmcKKyAgICAvLyBvdXQgdGhlIGFyY2hpdmVkIFdlYkhUTUxWaWV3IGFuZCByZWNyZWF0
aW5nIGEgbmV3IG9uZSBpZiBuZWVkZWQuIFNvIGNsb3NlIGRvZXNuJ3QgbmVlZCB0byBkbyBhbnl0
aGluZyBpbiB0aGF0IGNhc2UuCisgICAgaWYgKCFfcHJpdmF0ZSB8fCBfcHJpdmF0ZS0+Y2xvc2Vk
KQorICAgICAgICByZXR1cm47CisKKyAgICBfcHJpdmF0ZS0+Y2xvc2VkID0gWUVTOworCisgICAg
W3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKKyAgICBbc2VsZiBfY2FuY2VsVXBk
YXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOworICAgIFtzZWxmIF9jbGVhckxhc3RIaXRW
aWV3SWZTZWxmXTsKKyAgICBbc2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRp
b25hbGx5XTsKKyAgICBbc2VsZiBfcmVtb3ZlV2luZG93T2JzZXJ2ZXJzXTsKKyAgICBbc2VsZiBf
cmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKKyAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xs
ZXIgZGVzdHJveUFsbFBsdWdpbnNdOworICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBz
ZXREYXRhU291cmNlOm5pbF07CisgICAgLy8gcmVtb3ZlIHRvb2x0aXBzIGJlZm9yZSBjbGVhcmlu
ZyBfcHJpdmF0ZSBzbyByZW1vdmVUcmFja2luZ1JlY3Q6IHdpbGwgd29yayBjb3JyZWN0bHkKKyAg
ICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCisgICAgaWYgKF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3KQorICAgICAgICBbW3Nl
bGYgX3dlYlZpZXddIF9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxm
IF9mcmFtZV1dOworI2VuZGlmCisKKyAgICBbX3ByaXZhdGUgY2xlYXJdOworCisgICAgUGFnZSog
cGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXddKTsKKyAgICBpZiAocGFnZSkKKyAgICAgICAgcGFn
ZS0+ZHJhZ0NvbnRyb2xsZXIoKS0+c2V0RHJhZ2dpbmdJbWFnZVVSTChLVVJMKCkpOworfQorCist
IChCT09MKV9oYXNIVE1MRG9jdW1lbnQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POwor
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCk7Cit9CisKKy0gKERPTURv
Y3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3Rl
Ym9hcmQgKilwYXN0ZWJvYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yVHlwZTooTlNTdHJpbmcgKilwYm9hcmRUeXBlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDooRE9NUmFuZ2UgKilj
b250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXMKK3sKKyAgICBpZiAocGJvYXJkVHlwZSA9
PSBXZWJBcmNoaXZlUGJvYXJkVHlwZSkgeworICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0g
W1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6
V2ViQXJjaGl2ZVBib2FyZFR5cGVdXTsKKyAgICAgICAgaWYgKHN1YnJlc291cmNlcykKKyAgICAg
ICAgICAgICpzdWJyZXNvdXJjZXMgPSBbYXJjaGl2ZSBzdWJyZXNvdXJjZXNdOworICAgICAgICBE
T01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3Vt
ZW50RnJhZ21lbnRXaXRoQXJjaGl2ZTphcmNoaXZlXTsKKyAgICAgICAgW2FyY2hpdmUgcmVsZWFz
ZV07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisgICAgaWYgKHBib2FyZFR5cGUg
PT0gTlNGaWxlbmFtZXNQYm9hcmRUeXBlKQorICAgICAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRXaXRoUGF0aHM6W3Bhc3RlYm9hcmQgcHJvcGVydHlMaXN0Rm9yVHlwZTpOU0ZpbGVu
YW1lc1Bib2FyZFR5cGVdXTsKKyAgICAgICAgCisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNIVE1M
UGJvYXJkVHlwZSkgeworICAgICAgICBOU1N0cmluZyAqSFRNTFN0cmluZyA9IFtwYXN0ZWJvYXJk
IHN0cmluZ0ZvclR5cGU6TlNIVE1MUGJvYXJkVHlwZV07CisgICAgICAgIC8vIFRoaXMgaXMgYSBo
YWNrIHRvIG1ha2UgTWljcm9zb2Z0J3MgSFRNTCBwYXN0ZWJvYXJkIGRhdGEgd29yay4gU2VlIDM3
Nzg3ODUuCisgICAgICAgIGlmIChbSFRNTFN0cmluZyBoYXNQcmVmaXg6QCJWZXJzaW9uOiJdKSB7
CisgICAgICAgICAgICBOU1JhbmdlIHJhbmdlID0gW0hUTUxTdHJpbmcgcmFuZ2VPZlN0cmluZzpA
IjxodG1sIiBvcHRpb25zOk5TQ2FzZUluc2Vuc2l0aXZlU2VhcmNoXTsKKyAgICAgICAgICAgIGlm
IChyYW5nZS5sb2NhdGlvbiAhPSBOU05vdEZvdW5kKQorICAgICAgICAgICAgICAgIEhUTUxTdHJp
bmcgPSBbSFRNTFN0cmluZyBzdWJzdHJpbmdGcm9tSW5kZXg6cmFuZ2UubG9jYXRpb25dOworICAg
ICAgICB9CisgICAgICAgIGlmIChbSFRNTFN0cmluZyBsZW5ndGhdID09IDApCisgICAgICAgICAg
ICByZXR1cm4gbmlsOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9k
b2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzpIVE1MU3RyaW5nIGJhc2VVUkxTdHJpbmc6
bmlsXTsKKyAgICB9CisKKyAgICAvLyBUaGUgX2hhc0hUTUxEb2N1bWVudCBjbGF1c2UgaGVyZSBp
cyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIE5TQXR0cmlidXRlZFN0cmluZzogUmFkYXIgNTA1
MjM2OS4KKyAgICAvLyBJZiB3ZSBjYWxsIF9kb2N1bWVudEZyb21SYW5nZSBvbiBhbiBYTUwgZG9j
dW1lbnQgd2UnbGwgZ2V0ICJzZXRJbm5lckhUTUw6IG1ldGhvZCBub3QgZm91bmQiLgorICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGJ1ZyA1MDUyMzY5IGlzIGZpeGVkLgorICAgIGlmIChb
c2VsZiBfaGFzSFRNTERvY3VtZW50XSAmJiBwYm9hcmRUeXBlID09IE5TUlRGUGJvYXJkVHlwZSB8
fCBwYm9hcmRUeXBlID09IE5TUlRGRFBib2FyZFR5cGUpIHsKKyAgICAgICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpzdHJpbmcgPSBuaWw7CisgICAgICAgIGlmIChwYm9hcmRUeXBlID09IE5TUlRGRFBi
b2FyZFR5cGUpCisgICAgICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhSVEZEOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVd
IGRvY3VtZW50QXR0cmlidXRlczpOVUxMXTsKKyAgICAgICAgaWYgKHN0cmluZyA9PSBuaWwpCisg
ICAgICAgICAgICBzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhS
VEY6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNSVEZQYm9hcmRUeXBlXSBkb2N1bWVudEF0dHJp
YnV0ZXM6TlVMTF07CisgICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQorICAgICAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICAgICAgICAgIAorICAgICAgICBOU0RpY3Rpb25hcnkgKmRvY3VtZW50QXR0
cmlidXRlcyA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlzOgor
ICAgICAgICAgICAgW1tzZWxmIGNsYXNzXSBfZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRT
dHJpbmdDb252ZXJzaW9uXSwgTlNFeGNsdWRlZEVsZW1lbnRzRG9jdW1lbnRBdHRyaWJ1dGUsCisg
ICAgICAgICAgICBzZWxmLCBAIldlYlJlc291cmNlSGFuZGxlciIsIG5pbF07CisgICAgICAgIE5T
QXJyYXkgKnM7CisgICAgICAgIAorICAgICAgICBCT09MIHdhc0RlZmVycmluZ0NhbGxiYWNrcyA9
IFtbc2VsZiBfd2ViVmlld10gZGVmZXJzQ2FsbGJhY2tzXTsKKyAgICAgICAgaWYgKCF3YXNEZWZl
cnJpbmdDYWxsYmFja3MpCisgICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXddIHNldERlZmVyc0Nh
bGxiYWNrczpZRVNdOworICAgICAgICAgICAgCisgICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQg
KmZyYWdtZW50ID0gW3N0cmluZyBfZG9jdW1lbnRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3N0
cmluZyBsZW5ndGhdKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb2N1bWVudDpbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEF0
dHJpYnV0ZXM6ZG9jdW1lbnRBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6JnNdOworICAgICAgICBpZiAo
c3VicmVzb3VyY2VzKQorICAgICAgICAgICAgKnN1YnJlc291cmNlcyA9IHM7CisgICAgICAgIAor
ICAgICAgICBOU0VudW1lcmF0b3IgKmUgPSBbcyBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICAgICAg
V2ViUmVzb3VyY2UgKnI7CisgICAgICAgIHdoaWxlICgociA9IFtlIG5leHRPYmplY3RdKSkKKyAg
ICAgICAgICAgIFtbc2VsZiBfZGF0YVNvdXJjZV0gYWRkU3VicmVzb3VyY2U6cl07CisgICAgICAg
IAorICAgICAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKKyAgICAgICAgICAgIFtbc2Vs
ZiBfd2ViVmlld10gc2V0RGVmZXJzQ2FsbGJhY2tzOk5PXTsKKyAgICAgICAgCisgICAgICAgIFtk
b2N1bWVudEF0dHJpYnV0ZXMgcmVsZWFzZV07CisgICAgICAgIFtzdHJpbmcgcmVsZWFzZV07Cisg
ICAgICAgIHJldHVybiBmcmFnbWVudDsKKyAgICB9CisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNU
SUZGUGJvYXJkVHlwZSkgeworICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJl
c291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNUSUZG
UGJvYXJkVHlwZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFnZS50
aWZmIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvdGlmZiIgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5p
bF07CisgICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRh
U291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKKyAg
ICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAg
fQorICAgIGlmIChwYm9hcmRUeXBlID09IE5TUERGUGJvYXJkVHlwZSkgeworICAgICAgICBXZWJS
ZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bh
c3RlYm9hcmQgZGF0YUZvclR5cGU6TlNQREZQYm9hcmRUeXBlXQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJM
V2l0aFJlbGF0aXZlUGFydChAImFwcGxpY2F0aW9uLnBkZiIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1FVHlwZTpAImFwcGxpY2F0
aW9uL3BkZiIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07CisgICAgICAgIERPTURvY3Vt
ZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNlXSBfZG9jdW1lbnRGcmFn
bWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKKyAgICAgICAgW3Jlc291cmNlIHJlbGVh
c2VdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorI2lmIGRlZmluZWQoQlVJTERJ
TkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBpZiAocGJv
YXJkVHlwZSA9PSBOU1BJQ1RQYm9hcmRUeXBlKSB7CisgICAgICAgIFdlYlJlc291cmNlICpyZXNv
dXJjZSA9IFtbV2ViUmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRh
Rm9yVHlwZTpOU1BJQ1RQYm9hcmRUeXBlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZl
UGFydChAImltYWdlLnBpY3QiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJpbWFnZS9waWN0IiAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5p
bAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZU5hbWU6bmlsXTsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQg
PSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6
cmVzb3VyY2VdOworICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBm
cmFnbWVudDsKKyAgICB9CisjZW5kaWYKKyAgICAvLyBPbmx5IDEwLjUgYW5kIGhpZ2hlciBzdXBw
b3J0IHNldHRpbmcgYW5kIHJldHJpZXZpbmcgcGFzdGVib2FyZCB0eXBlcyB3aXRoIFVUSXMsIGJ1
dCB3ZSBkb24ndCBiZWxpZXZlCisgICAgLy8gdGhhdCBhbnkgYXBwbGljYXRpb25zIG9uIFRpZ2Vy
IHB1dCB0eXBlcyBmb3Igd2hpY2ggd2Ugb25seSBoYXZlIGEgVVRJLCBsaWtlIFBORywgb24gdGhl
IHBhc3RlYm9hcmQuCisgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJp
bmcqKWtVVFR5cGVQTkddKSB7CisgICAgICAgIFdlYlJlc291cmNlICpyZXNvdXJjZSA9IFtbV2Vi
UmVzb3VyY2UgYWxsb2NdIGluaXRXaXRoRGF0YTpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTooTlNT
dHJpbmcqKWtVVFR5cGVQTkddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAi
aW1hZ2UucG5nIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvcG5nIiAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lOm5pbAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZU5h
bWU6bmlsXTsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYg
X2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2U6cmVzb3VyY2Vd
OworICAgICAgICBbcmVzb3VyY2UgcmVsZWFzZV07CisgICAgICAgIHJldHVybiBmcmFnbWVudDsK
KyAgICB9CisgICAgaWYgKHBib2FyZFR5cGUgPT0gTlNVUkxQYm9hcmRUeXBlKSB7CisgICAgICAg
IE5TVVJMICpVUkwgPSBbTlNVUkwgVVJMRnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZF07CisgICAg
ICAgIERPTURvY3VtZW50KiBkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsK
KyAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKKyAgICAgICAgaWYgKCFkb2N1bWVudCkKKyAgICAg
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIERPTUhUTUxBbmNob3JFbGVtZW50ICphbmNob3Ig
PSAoRE9NSFRNTEFuY2hvckVsZW1lbnQgKilbZG9jdW1lbnQgY3JlYXRlRWxlbWVudDpAImEiXTsK
KyAgICAgICAgTlNTdHJpbmcgKlVSTFN0cmluZyA9IFtVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0
cmluZ107IC8vIE9yaWdpbmFsIGRhdGEgaXMgQVNDSUktb25seSwgc28gdGhlcmUgaXMgbm8gbmVl
ZCB0byBwcmVjb21wb3NlLgorICAgICAgICBpZiAoW1VSTFN0cmluZyBsZW5ndGhdID09IDApCisg
ICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBOU1N0cmluZyAqVVJMVGl0bGVTdHJpbmcg
PSBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpXZWJVUkxOYW1lUGJvYXJkVHlwZV0gcHJlY29t
cG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgICAgIERPTVRleHQgKnRleHQg
PSBbZG9jdW1lbnQgY3JlYXRlVGV4dE5vZGU6VVJMVGl0bGVTdHJpbmddOworICAgICAgICBbYW5j
aG9yIHNldEhyZWY6VVJMU3RyaW5nXTsKKyAgICAgICAgW2FuY2hvciBhcHBlbmRDaGlsZDp0ZXh0
XTsKKyAgICAgICAgRE9NRG9jdW1lbnRGcmFnbWVudCAqZnJhZ21lbnQgPSBbZG9jdW1lbnQgY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudF07CisgICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNo
b3JdOworICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgfQorICAgIGlmIChwYm9hcmRUeXBl
ID09IE5TU3RyaW5nUGJvYXJkVHlwZSkKKyAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3Ry
aW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLmdl
dCgpKTsKKyAgICByZXR1cm4gbmlsOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpIAorLSAodm9pZClfcGF1c2VOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAoreyAK
KyAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsgCisgICAgdW5zaWduZWQg
aW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3cyBjb3VudF07IAorICAgIHVuc2lnbmVkIGludCBz
dWJ2aWV3SW5kZXg7IAorICAgIAorICAgIGZvciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmlld0lu
ZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3SW5kZXgrKykgeyAKKyAgICAgICAgTlNWaWV3ICpz
dWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6c3Vidmlld0luZGV4XTsgCisgICAgICAg
IGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNs
YXNzXV0pIAorICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3Vidmll
dyBzdG9wVGltZXJzXTsKKyAgICB9IAorfSAKKyNlbmRpZiAKKworI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKSAKKy0gKHZvaWQpX3Jlc3VtZU51bGxFdmVudHNGb3JBbGxOZXRzY2FwZVBs
dWdpbnMgCit7IAorICAgIE5TQXJyYXkgKnN1YnZpZXdzID0gW3NlbGYgc3Vidmlld3NdOyAKKyAg
ICB1bnNpZ25lZCBpbnQgc3Vidmlld0NvdW50ID0gW3N1YnZpZXdzIGNvdW50XTsgCisgICAgdW5z
aWduZWQgaW50IHN1YnZpZXdJbmRleDsgCisgICAgCisgICAgZm9yIChzdWJ2aWV3SW5kZXggPSAw
OyBzdWJ2aWV3SW5kZXggPCBzdWJ2aWV3Q291bnQ7IHN1YnZpZXdJbmRleCsrKSB7IAorICAgICAg
ICBOU1ZpZXcgKnN1YnZpZXcgPSBbc3Vidmlld3Mgb2JqZWN0QXRJbmRleDpzdWJ2aWV3SW5kZXhd
OyAKKyAgICAgICAgaWYgKFtzdWJ2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJhc2VOZXRzY2FwZVBs
dWdpblZpZXcgY2xhc3NdXSkgCisgICAgICAgICAgICBbKFdlYkJhc2VOZXRzY2FwZVBsdWdpblZp
ZXcgKilzdWJ2aWV3IHJlc3RhcnRUaW1lcnNdOyAKKyAgICB9IAorfSAKKyNlbmRpZiAKKworLSAo
Qk9PTClfaXNVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcKK3sKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgcmV0dXJuIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ICE9
IG5pbDsKKyNlbHNlCisgICAgcmV0dXJuIE5POworI2VuZGlmCit9CisKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIE5TVmlldyAoV2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCisKKy0gKHZvaWQpX3dl
Yl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTooTlNNdXRhYmxlQXJyYXkgKilhcnJh
eQoreworICAgIHVuc2lnbmVkIGNvdW50ID0gW19zdWJ2aWV3cyBjb3VudF07CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgTlNWaWV3ICpjaGlsZCA9
IFtfc3Vidmlld3Mgb2JqZWN0QXRJbmRleDppXTsKKyAgICAgICAgaWYgKFtjaGlsZCBpc0tpbmRP
ZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQorICAgICAgICAgICAgW2FycmF5IGFkZE9iamVj
dDpjaGlsZF07CisgICAgICAgIFtjaGlsZCBfd2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NU
b0FycmF5OmFycmF5XTsKKyAgICB9Cit9CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIE5TTXV0
YWJsZURpY3Rpb25hcnkgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQorCistICh2b2lkKV93ZWJf
c2V0T2JqZWN0SWZOb3ROaWw6KGlkKW9iamVjdCBmb3JLZXk6KGlkKWtleQoreworICAgIGlmIChv
YmplY3QgPT0gbmlsKSB7CisgICAgICAgIFtzZWxmIHJlbW92ZU9iamVjdEZvcktleTprZXldOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFtzZWxmIHNldE9iamVjdDpvYmplY3QgZm9yS2V5OmtleV07
CisgICAgfQorfQorCitAZW5kCisKK0BpbnRlcmZhY2UgTlNTdHJpbmcgKFdlYkhUTUxWaWV3Rmls
ZUludGVybmFsKQorLSAoQk9PTCltYXRjaGVzRXh0ZW5zaW9uRXF1aXZhbGVudDooTlNTdHJpbmcg
KilleHRlbnNpb247CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1N0cmluZyAoV2ViSFRNTFZp
ZXdGaWxlSW50ZXJuYWwpCisKKy0gKEJPT0wpbWF0Y2hlc0V4dGVuc2lvbkVxdWl2YWxlbnQ6KE5T
U3RyaW5nICopZXh0ZW5zaW9uCit7CisgICAgaWYgKFtzZWxmIGhhc1N1ZmZpeDpleHRlbnNpb25d
KQorICAgICAgICByZXR1cm4gWUVTOworICAgIGVsc2UgaWYgKFtleHRlbnNpb24gaXNFcXVhbFRv
U3RyaW5nOkAianBlZyJdICYmIFtzZWxmIGhhc1N1ZmZpeDpAImpwZyJdKQorICAgICAgICByZXR1
cm4gWUVTOworICAgIHJldHVybiBOTzsKK30KKworQGVuZAorCisjaWZkZWYgQlVJTERJTkdfT05f
VElHRVIKKworLy8gVGhlIGZvbGxvd2luZyBpcyBhIHdvcmthcm91bmQgZm9yCisvLyA8cmRhcjov
L3Byb2JsZW0vMzQyOTYzMT4gd2luZG93IHN0b3BzIGdldHRpbmcgbW91c2UgbW92ZWQgZXZlbnRz
IGFmdGVyIGZpcnN0IHRvb2x0aXAgYXBwZWFycworLy8gVGhlIHRyaWNrIGlzIHRvIGRlZmluZSBh
IGNhdGVnb3J5IG9uIE5TVG9vbFRpcFBhbmVsIHRoYXQgaW1wbGVtZW50cyBzZXRBY2NlcHRzTW91
c2VNb3ZlZEV2ZW50czouCisvLyBTaW5jZSB0aGUgY2F0ZWdvcnkgd2lsbCBiZSBzZWFyY2hlZCBi
ZWZvcmUgdGhlIHJlYWwgY2xhc3MsIHdlJ2xsIHByZXZlbnQgdGhlIGZsYWcgZnJvbSBiZWluZwor
Ly8gc2V0IG9uIHRoZSB0b29sIHRpcCBwYW5lbC4KKworQGludGVyZmFjZSBOU1Rvb2xUaXBQYW5l
bCA6IE5TUGFuZWwKK0BlbmQKKworQGludGVyZmFjZSBOU1Rvb2xUaXBQYW5lbCAoV2ViSFRNTFZp
ZXdGaWxlSW50ZXJuYWwpCitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBOU1Rvb2xUaXBQYW5lbCAo
V2ViSFRNTFZpZXdGaWxlSW50ZXJuYWwpCisKKy0gKHZvaWQpc2V0QWNjZXB0c01vdXNlTW92ZWRF
dmVudHM6KEJPT0wpZmxhZworeworICAgIC8vIERvIG5vdGhpbmcsIHByZXZlbnRpbmcgdGhlIHRv
b2wgdGlwIHBhbmVsIGZyb20gdHJ5aW5nIHRvIGFjY2VwdCBtb3VzZS1tb3ZlZCBldmVudHMuCit9
CisKK0BlbmQKKworI2VuZGlmCisKK0BpbnRlcmZhY2UgTlNBcnJheSAoV2ViSFRNTFZpZXcpCist
ICh2b2lkKV93ZWJfbWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Ig
d2l0aE9iamVjdDooaWQpb2JqZWN0OworQGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZp
ZXcKKworKyAodm9pZClpbml0aWFsaXplCit7CisgICAgW05TQXBwIHJlZ2lzdGVyU2VydmljZXNN
ZW51U2VuZFR5cGVzOltbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGVzOltbc2VsZiBjbGFzc10gX2lu
c2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdXTsKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBXZWJDb3JlT2JqQ0ZpbmFsaXplT25N
YWluVGhyZWFkKHNlbGYpOworI2VuZGlmCit9CisKKy0gKGlkKWluaXRXaXRoRnJhbWU6KE5TUmVj
dClmcmFtZQoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZV07CisgICAg
aWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFtzZWxmIHNldEZvY3Vz
UmluZ1R5cGU6TlNGb2N1c1JpbmdUeXBlTm9uZV07CisgICAgCisgICAgLy8gTWFrZSBhbGwgZHJh
d2luZyBnbyB0aHJvdWdoIHVzIGluc3RlYWQgb2Ygc3Vidmlld3MuCisgICAgW3NlbGYgX3NldERy
YXdzT3duRGVzY2VuZGFudHM6WUVTXTsKKyAgICAKKyAgICBfcHJpdmF0ZSA9IFtbV2ViSFRNTFZp
ZXdQcml2YXRlIGFsbG9jXSBpbml0XTsKKworICAgIF9wcml2YXRlLT5wbHVnaW5Db250cm9sbGVy
ID0gW1tXZWJQbHVnaW5Db250cm9sbGVyIGFsbG9jXSBpbml0V2l0aERvY3VtZW50VmlldzpzZWxm
XTsKKyAgICAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAg
aWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFkKFtXZWJIVE1MVmll
dyBjbGFzc10sIHNlbGYpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBjYW4ndCBhc3Nl
cnQgdGhhdCBjbG9zZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBiZWNhdXNlCisgICAgLy8gdGhp
cyB2aWV3IGNhbiBiZSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcsIGV2ZW4gdGhvdWdoCisg
ICAgLy8gaXQgY291bGQgYmUgbmVlZGVkIGxhdGVyLCBzbyBjbG9zZSBpZiBuZWVkZWQuCisgICAg
W3NlbGYgY2xvc2VdOworICAgIFtfcHJpdmF0ZSByZWxlYXNlXTsKKyAgICBfcHJpdmF0ZSA9IG5p
bDsKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKy0gKHZvaWQpZmluYWxpemUKK3sKKyAgICBB
U1NFUlRfTUFJTl9USFJFQUQoKTsKKyAgICAvLyBXZSBjYW4ndCBhc3NlcnQgdGhhdCBjbG9zZSBo
YXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBiZWNhdXNlCisgICAgLy8gdGhpcyB2aWV3IGNhbiBiZSBy
ZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcsIGV2ZW4gdGhvdWdoCisgICAgLy8gaXQgY291bGQg
YmUgbmVlZGVkIGxhdGVyLCBzbyBjbG9zZSBpZiBuZWVkZWQuCisgICAgW3NlbGYgY2xvc2VdOwor
ICAgIFtzdXBlciBmaW5hbGl6ZV07Cit9CisKKy8vIFJldHVybnMgWUVTIGlmIHRoZSBkZWxlZ2F0
ZSByZXR1cm5zIFlFUyAoc28gd2Ugc2hvdWxkIGRvIG5vIG1vcmUgd29yaykuCistIChCT09MKWNh
bGxEZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDooU0VMKXNlbGVjdG9yCit7Cisg
ICAgQk9PTCBjYWxsZXJBbHJlYWR5Q2FsbGVkRGVsZWdhdGUgPSBfcHJpdmF0ZS0+c2VsZWN0b3JG
b3JEb0NvbW1hbmRCeVNlbGVjdG9yID09IHNlbGVjdG9yOworICAgIF9wcml2YXRlLT5zZWxlY3Rv
ckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSAwOworICAgIGlmIChjYWxsZXJBbHJlYWR5Q2FsbGVk
RGVsZWdhdGUpCisgICAgICAgIHJldHVybiBOTzsKKyAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW3Nl
bGYgX3dlYlZpZXddOworICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZvcndh
cmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOworfQor
CitzdGF0aWMgU3RyaW5nIGNvbW1hbmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQorewor
ICAgIC8vIENoYW5nZSBhIGZldyBjb21tYW5kIG5hbWVzIGludG8gb25lcyBzdXBwb3J0ZWQgYnkg
V2ViQ29yZTo6RWRpdG9yLgorICAgIC8vIElmIHRoaXMgbGlzdCBnZXRzIHRvbyBsb25nIHdlIG1p
Z2h0IGRlY2lkZSB3ZSBuZWVkIHRvIHVzZSBhIGhhc2ggdGFibGUuCisgICAgaWYgKHNlbGVjdG9y
ID09IEBzZWxlY3RvcihpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3I6KSB8fCBzZWxlY3RvciA9PSBA
c2VsZWN0b3IoaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6KSkKKyAgICAgICAgcmV0
dXJuICJJbnNlcnROZXdsaW5lIjsKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGluc2Vy
dFRhYklnbm9yaW5nRmllbGRFZGl0b3I6KSkKKyAgICAgICAgcmV0dXJuICJJbnNlcnRUYWIiOwor
ICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZURvd246KSkKKyAgICAgICAgcmV0dXJu
ICJNb3ZlUGFnZURvd24iOworICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZURvd25B
bmRNb2RpZnlTZWxlY3Rpb246KSkKKyAgICAgICAgcmV0dXJuICJNb3ZlUGFnZURvd25BbmRNb2Rp
ZnlTZWxlY3Rpb24iOworICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZVVwOikpCisg
ICAgICAgIHJldHVybiAiTW92ZVBhZ2VVcCI7CisgICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3Rv
cihwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246KSkKKyAgICAgICAgcmV0dXJuICJNb3ZlUGFnZVVw
QW5kTW9kaWZ5U2VsZWN0aW9uIjsKKworICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24u
CisgICAgY29uc3QgY2hhciogc2VsZWN0b3JOYW1lID0gc2VsX2dldE5hbWUoc2VsZWN0b3IpOwor
ICAgIHNpemVfdCBzZWxlY3Rvck5hbWVMZW5ndGggPSBzdHJsZW4oc2VsZWN0b3JOYW1lKTsKKyAg
ICBpZiAoc2VsZWN0b3JOYW1lTGVuZ3RoIDwgMiB8fCBzZWxlY3Rvck5hbWVbc2VsZWN0b3JOYW1l
TGVuZ3RoIC0gMV0gIT0gJzonKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJu
IFN0cmluZyhzZWxlY3Rvck5hbWUsIHNlbGVjdG9yTmFtZUxlbmd0aCAtIDEpOworfQorCistIChF
ZGl0b3I6OkNvbW1hbmQpY29yZUNvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVG
cmFtZSkKKyAgICAgICAgcmV0dXJuIEVkaXRvcjo6Q29tbWFuZCgpOworICAgIHJldHVybiBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKGNvbW1hbmROYW1lRm9yU2VsZWN0b3Ioc2VsZWN0b3Ip
KTsKK30KKworLSAoRWRpdG9yOjpDb21tYW5kKWNvcmVDb21tYW5kQnlOYW1lOihjb25zdCBjaGFy
KiluYW1lCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybiBFZGl0b3I6OkNvbW1hbmQoKTsKKyAg
ICByZXR1cm4gY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChuYW1lKTsKK30KKworLSAodm9p
ZClleGVjdXRlQ29yZUNvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBpZiAo
W3NlbGYgY2FsbERlbGVnYXRlRG9Db21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOnNlbGVjdG9yXSkK
KyAgICAgICAgcmV0dXJuOworICAgIFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpzZWxlY3Rv
cl0uZXhlY3V0ZSgpOworfQorCistICh2b2lkKWV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTooY29u
c3QgY2hhciopbmFtZQoreworICAgIFtzZWxmIGNvcmVDb21tYW5kQnlOYW1lOm5hbWVdLmV4ZWN1
dGUoKTsKK30KKworLy8gVGhlc2UgY29tbWFuZHMgYXJlIGZvcndhcmRlZCB0byB0aGUgRWRpdG9y
IG9iamVjdCBpbiBXZWJDb3JlLgorLy8gSWRlYWxseSB3ZSdkIGRvIHRoaXMgZm9yIGFsbCBlZGl0
aW5nIGNvbW1hbmRzOyBtb3JlIG9mIHRoZSBjb2RlCisvLyBzaG91bGQgYmUgbW92ZWQgZnJvbSBo
ZXJlIHRvIHRoZXJlLCBhbmQgbW9yZSBjb21tYW5kcyBzaG91bGQgYmUKKy8vIGFkZGVkIHRvIHRo
aXMgbGlzdC4KKworLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBzZXQgdGhpbmdzIHVwIHNvIHRo
YXQgYWxsIHRoZXNlIHNoYXJlIGEgc2luZ2xlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlv
bi4KKy8vIFRoZSBmdW5jdGlvbnMgYXJlIGlkZW50aWNhbC4KKworI2RlZmluZSBXRUJDT1JFX0NP
TU1BTkQoY29tbWFuZCkgLSAodm9pZCljb21tYW5kOihpZClzZW5kZXIgeyBbc2VsZiBleGVjdXRl
Q29yZUNvbW1hbmRCeVNlbGVjdG9yOl9jbWRdOyB9CisKK1dFQkNPUkVfQ09NTUFORChhbGlnbkNl
bnRlcikKK1dFQkNPUkVfQ09NTUFORChhbGlnbkp1c3RpZmllZCkKK1dFQkNPUkVfQ09NTUFORChh
bGlnbkxlZnQpCitXRUJDT1JFX0NPTU1BTkQoYWxpZ25SaWdodCkKK1dFQkNPUkVfQ09NTUFORChj
b3B5KQorV0VCQ09SRV9DT01NQU5EKGN1dCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGUpCitXRUJD
T1JFX0NPTU1BTkQoZGVsZXRlQmFja3dhcmQpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlQmFja3dh
cmRCeURlY29tcG9zaW5nUHJldmlvdXNDaGFyYWN0ZXIpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRl
Rm9yd2FyZCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mTGluZSkKK1dFQkNP
UkVfQ09NTUFORChkZWxldGVUb0JlZ2lubmluZ09mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5E
KGRlbGV0ZVRvRW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0ZVRvRW5kT2ZQYXJhZ3Jh
cGgpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9NYXJrKQorV0VCQ09SRV9DT01NQU5EKGRlbGV0
ZVdvcmRCYWNrd2FyZCkKK1dFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkRm9yd2FyZCkKK1dFQkNP
UkVfQ09NTUFORChpZ25vcmVTcGVsbGluZykKK1dFQkNPUkVfQ09NTUFORChpbmRlbnQpCitXRUJD
T1JFX0NPTU1BTkQoaW5zZXJ0QmFja3RhYikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRMaW5lQnJl
YWspCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZSkKK1dFQkNPUkVfQ09NTUFORChpbnNl
cnROZXdsaW5lSWdub3JpbmdGaWVsZEVkaXRvcikKK1dFQkNPUkVfQ09NTUFORChpbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IpCitXRUJDT1JFX0NPTU1BTkQoaW5zZXJ0VGFiKQorV0VCQ09SRV9DT01N
QU5EKGluc2VydFRhYklnbm9yaW5nRmllbGRFZGl0b3IpCitXRUJDT1JFX0NPTU1BTkQobWFrZVRl
eHRXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQobWFrZVRleHRX
cml0aW5nRGlyZWN0aW9uTmF0dXJhbCkKK1dFQkNPUkVfQ09NTUFORChtYWtlVGV4dFdyaXRpbmdE
aXJlY3Rpb25SaWdodFRvTGVmdCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlQmFja3dhcmQpCitXRUJD
T1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01N
QU5EKG1vdmVEb3duKQorV0VCQ09SRV9DT01NQU5EKG1vdmVEb3duQW5kTW9kaWZ5U2VsZWN0aW9u
KQorV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3YXJkKQorV0VCQ09SRV9DT01NQU5EKG1vdmVGb3J3
YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVMZWZ0KQorV0VCQ09S
RV9DT01NQU5EKG1vdmVMZWZ0QW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1v
dmVQYXJhZ3JhcGhCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORCht
b3ZlUGFyYWdyYXBoRm9yd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORCht
b3ZlUmlnaHQpCitXRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9uKQor
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mRG9jdW1lbnQpCitXRUJDT1JFX0NPTU1B
TkQobW92ZVRvQmVnaW5uaW5nT2ZEb2N1bWVudEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVf
Q09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZkxpbmUpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVn
aW5uaW5nT2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0Jl
Z2lubmluZ09mUGFyYWdyYXBoKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mUGFy
YWdyYXBoQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmlu
Z09mU2VudGVuY2UpCitXRUJDT1JFX0NPTU1BTkQobW92ZVRvQmVnaW5uaW5nT2ZTZW50ZW5jZUFu
ZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkRvY3VtZW50KQor
V0VCQ09SRV9DT01NQU5EKG1vdmVUb0VuZE9mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24pCitX
RUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb0Vu
ZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBh
cmFncmFwaCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlBhcmFncmFwaEFuZE1vZGlmeVNl
bGVjdGlvbikKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZlNlbnRlbmNlKQorV0VCQ09SRV9D
T01NQU5EKG1vdmVUb0VuZE9mU2VudGVuY2VBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NP
TU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZSkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVG9MZWZ0RW5k
T2ZMaW5lQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5k
T2ZMaW5lKQorV0VCQ09SRV9DT01NQU5EKG1vdmVUb1JpZ2h0RW5kT2ZMaW5lQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKG1vdmVVcCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlVXBB
bmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRCYWNrd2FyZCkKK1dF
QkNPUkVfQ09NTUFORChtb3ZlV29yZEJhY2t3YXJkQW5kTW9kaWZ5U2VsZWN0aW9uKQorV0VCQ09S
RV9DT01NQU5EKG1vdmVXb3JkRm9yd2FyZCkKK1dFQkNPUkVfQ09NTUFORChtb3ZlV29yZEZvcndh
cmRBbmRNb2RpZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRMZWZ0KQorV0VC
Q09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikKK1dFQkNPUkVfQ09N
TUFORChtb3ZlV29yZFJpZ2h0KQorV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkUmlnaHRBbmRNb2Rp
ZnlTZWxlY3Rpb24pCitXRUJDT1JFX0NPTU1BTkQob3V0ZGVudCkKK1dFQkNPUkVfQ09NTUFORChw
YWdlRG93bikKK1dFQkNPUkVfQ09NTUFORChwYWdlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKK1dF
QkNPUkVfQ09NTUFORChwYWdlVXApCitXRUJDT1JFX0NPTU1BTkQocGFnZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdEFsbCkKK1dFQkNPUkVfQ09NTUFORChzZWxl
Y3RMaW5lKQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdFBhcmFncmFwaCkKK1dFQkNPUkVfQ09NTUFO
RChzZWxlY3RTZW50ZW5jZSkKK1dFQkNPUkVfQ09NTUFORChzZWxlY3RUb01hcmspCitXRUJDT1JF
X0NPTU1BTkQoc2VsZWN0V29yZCkKK1dFQkNPUkVfQ09NTUFORChzZXRNYXJrKQorV0VCQ09SRV9D
T01NQU5EKHN1YnNjcmlwdCkKK1dFQkNPUkVfQ09NTUFORChzdXBlcnNjcmlwdCkKK1dFQkNPUkVf
Q09NTUFORChzd2FwV2l0aE1hcmspCitXRUJDT1JFX0NPTU1BTkQodHJhbnNwb3NlKQorV0VCQ09S
RV9DT01NQU5EKHVuZGVybGluZSkKK1dFQkNPUkVfQ09NTUFORCh1bnNjcmlwdCkKK1dFQkNPUkVf
Q09NTUFORCh5YW5rKQorV0VCQ09SRV9DT01NQU5EKHlhbmtBbmRTZWxlY3QpCisKKyN1bmRlZiBX
RUJDT1JFX0NPTU1BTkQKKworI2RlZmluZSBDT01NQU5EX1BST0xPR1VFIGlmIChbc2VsZiBjYWxs
RGVsZWdhdGVEb0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6X2NtZF0pIHJldHVybjsKKworLSAo
SUJBY3Rpb24pdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBD
T01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoIVtzZWxmIF9oYXNTZWxlY3Rpb25dKSB7CisgICAg
ICAgIE5TQmVlcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgW05TUGFzdGVib2Fy
ZCBfd2ViX3NldEZpbmRQYXN0ZWJvYXJkU3RyaW5nOltzZWxmIHNlbGVjdGVkU3RyaW5nXSB3aXRo
T3duZXI6c2VsZl07Cit9CisKKy0gKEJPT0wpd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgdHlwZXM6KE5TQXJyYXkgKil0eXBlcworeworICAgIFtw
YXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsK
KyAgICBbc2VsZiB3cml0ZVNlbGVjdGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0
ZWJvYXJkOnBhc3RlYm9hcmRdOworICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpcmVhZFNl
bGVjdGlvbkZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7CisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJh
bWUpCisgICAgICAgIHJldHVybiBOTzsKKyAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKKyAgICAgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3Rl
Ym9hcmQ6cGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDpZRVNdOworICAgIGVsc2UKKyAgICAgICAg
W3NlbGYgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKKyAgICBy
ZXR1cm4gWUVTOworfQorCistIChpZCl2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOihOU1N0cmlu
ZyAqKXNlbmRUeXBlIHJldHVyblR5cGU6KE5TU3RyaW5nICopcmV0dXJuVHlwZQoreworICAgIEJP
T0wgaXNTZW5kVHlwZU9LID0gIXNlbmRUeXBlIHx8IChbW3NlbGYgcGFzdGVib2FyZFR5cGVzRm9y
U2VsZWN0aW9uXSBjb250YWluc09iamVjdDpzZW5kVHlwZV0gJiYgW3NlbGYgX2hhc1NlbGVjdGlv
bl0pOworICAgIEJPT0wgaXNSZXR1cm5UeXBlT0sgPSAhcmV0dXJuVHlwZSB8fCAoW1tbc2VsZiBj
bGFzc10gX2luc2VydGFibGVQYXN0ZWJvYXJkVHlwZXNdIGNvbnRhaW5zT2JqZWN0OnJldHVyblR5
cGVdICYmIFtzZWxmIF9pc0VkaXRhYmxlXSk7CisgICAgaWYgKGlzU2VuZFR5cGVPSyAmJiBpc1Jl
dHVyblR5cGVPSykKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAgcmV0dXJuIFtbc2VsZiBuZXh0
UmVzcG9uZGVyXSB2YWxpZFJlcXVlc3RvckZvclNlbmRUeXBlOnNlbmRUeXBlIHJldHVyblR5cGU6
cmV0dXJuVHlwZV07Cit9CisKKy8vIGp1bXBUb1NlbGVjdGlvbiBpcyB0aGUgb2xkIG5hbWUgZm9y
IHdoYXQgQXBwS2l0IG5vdyBjYWxscyBjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhLiBTYWZh
cmkKKy8vIHdhcyB1c2luZyB0aGUgb2xkIGp1bXBUb1NlbGVjdGlvbiBzZWxlY3RvciBpbiBpdHMg
bWVudS4gTmV3ZXIgdmVyc2lvbnMgb2YgU2FmYXJpIHdpbGwgdXNlIHRoZQorLy8gc2VsZWN0b3Ig
Y2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYS4gV2UnbGwgbGVhdmUgdGhlIG9sZCBzZWxlY3Rv
ciBpbiBwbGFjZSBmb3IgdHdvIHJlYXNvbnM6CisvLyAoMSkgQ29tcGF0aWJpbGl0eSBiZXR3ZWVu
IG9sZGVyIFNhZmFyaSBhbmQgbmV3ZXIgV2ViS2l0OyAoMikgb3RoZXIgV2ViS2l0LWJhc2VkIGFw
cGxpY2F0aW9ucworLy8gbWlnaHQgYmUgdXNpbmcgdGhlIHNlbGVjdG9yLCBhbmQgd2UgZG9uJ3Qg
d2FudCB0byBicmVhayB0aGVtLgorLSAodm9pZClqdW1wVG9TZWxlY3Rpb246KGlkKXNlbmRlcgor
eworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5yZXZlYWxTZWxlY3Rpb24oU2Ny
b2xsQWxpZ25tZW50OjphbGlnbkNlbnRlckFsd2F5cyk7Cit9CisKKy0gKE5TQ2VsbFN0YXRlVmFs
dWUpc2VsZWN0aW9uSGFzU3R5bGU6KENTU1N0eWxlRGVjbGFyYXRpb24qKXN0eWxlCit7CisgICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJh
bWUpCisgICAgICAgIHJldHVybiBOU09mZlN0YXRlOworICAgIHJldHVybiBraXQoY29yZUZyYW1l
LT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5bGUpKTsKK30KKworLSAoQk9PTCl2YWxp
ZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2Vy
SW50ZXJmYWNlSXRlbT4paXRlbQoreworICAgIFNFTCBhY3Rpb24gPSBbaXRlbSBhY3Rpb25dOwor
ICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworCisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIGlmIChEb2N1bWVudCogZG9j
ID0gZnJhbWUtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgaWYgKGRvYy0+aXNQbHVnaW5Eb2N1bWVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIE5POworICAgICAgICBpZiAoZG9jLT5pc0ltYWdlRG9j
dW1lbnQoKSkgeyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IoY29weTopKQorICAgICAgICAgICAgICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmlzQ29t
cGxldGUoKTsKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZVNwZWxsaW5nOikKKyAgICAgICAgICAgIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IoX2NoYW5nZVNwZWxsaW5nRnJvbU1lbnU6KQorICAgICAgICAg
ICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihjaGVja1NwZWxsaW5nOikKKyAgICAgICAgICAgIHx8
IGFjdGlvbiA9PSBAc2VsZWN0b3IoY29tcGxldGU6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09
IEBzZWxlY3RvcihwYXN0ZUZvbnQ6KSkKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsK
KworICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHNob3dHdWVzc1BhbmVsOikpIHsKKyNpZm5k
ZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAgICAgLy8gTWF0Y2ggT1MgWCBBcHBLaXQgYmVoYXZp
b3IgZm9yIHBvc3QtVGlnZXIuIERvbid0IGNoYW5nZSBUaWdlciBiZWhhdmlvci4KKyAgICAgICAg
TlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChb
bWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7CisgICAgICAgICAg
ICBCT09MIHBhbmVsU2hvd2luZyA9IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tl
cl0gc3BlbGxpbmdQYW5lbF0gaXNWaXNpYmxlXTsKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRU
aXRsZTpwYW5lbFNob3dpbmcKKyAgICAgICAgICAgICAgICA/IFVJX1NUUklORygiSGlkZSBTcGVs
bGluZyBhbmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKQorICAgICAgICAgICAgICAgIDog
VUlfU1RSSU5HKCJTaG93IFNwZWxsaW5nIGFuZCBHcmFtbWFyIiwgIm1lbnUgaXRlbSB0aXRsZSIp
XTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Cisg
ICAgfQorICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUJhc2VXcml0aW5n
RGlyZWN0aW9uOikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VX
cml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBz
ZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDopKSB7CisgICAgICAg
IE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uOworCisgICAgICAgIGlmIChhY3Rp
b24gPT0gQHNlbGVjdG9yKGNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uOikpIHsKKyAgICAgICAg
ICAgIHdyaXRpbmdEaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxOU1dyaXRpbmdEaXJlY3Rpb24+KFtp
dGVtIHRhZ10pOworICAgICAgICAgICAgaWYgKHdyaXRpbmdEaXJlY3Rpb24gPT0gTlNXcml0aW5n
RGlyZWN0aW9uTmF0dXJhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0g
ZWxzZSBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0
VG9SaWdodDopKQorICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OworICAgICAgICBlbHNlCisgICAgICAgICAgICB3cml0aW5nRGlyZWN0
aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CisKKyAgICAgICAgTlNNZW51SXRl
bSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0g
aXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7CisgICAgICAgICAgICBSZWZQdHI8
Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOworICAgICAgICAgICAgc3R5
bGUtPnNldFByb3BlcnR5KCJkaXJlY3Rpb24iLCB3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGlu
Z0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gIkxUUiIgOiAiUlRMIiwgZWMpOworICAgICAgICAgICAg
W21lbnVJdGVtIHNldFN0YXRlOmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0aW9uSGFzU3R5bGUoc3R5
bGUuZ2V0KCkpXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwor
ICAgIH0KKworICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVj
dGlvbk5hdHVyYWw6KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJ
dGVtICopaXRlbTsKKyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJ
dGVtIGNsYXNzXV0pCisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6TlNPZmZTdGF0ZV07
CisgICAgICAgIHJldHVybiBOTzsKKyAgICB9CisKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cih0b2dnbGVCYXNlV3JpdGluZ0RpcmVjdGlvbjopKSB7CisgICAgICAgIE5TTWVudUl0ZW0gKm1l
bnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2lu
ZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgeworICAgICAgICAgICAgUmVmUHRyPENTU1N0
eWxlRGVjbGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0
ZSgpOworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eSgiZGlyZWN0aW9uIiwgIlJUTCIsIGVjKTsKKyAgICAgICAgICAgIC8vIFRha2Ug
Y29udHJvbCBvZiB0aGUgdGl0bGUgb2YgdGhlIG1lbnUgaXRlbSBpbnN0ZWFkIG9mIGp1c3QgY2hl
Y2tpbmcvdW5jaGVja2luZyBpdCBiZWNhdXNlCisgICAgICAgICAgICAvLyBhIGNoZWNrIHdvdWxk
IGJlIGFtYmlndW91cy4KKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRUaXRsZTpmcmFtZS0+ZWRp
dG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKQorICAgICAgICAgICAgICAgID8g
VUlfU1RSSU5HKCJMZWZ0IHRvIFJpZ2h0IiwgIkxlZnQgdG8gUmlnaHQgY29udGV4dCBtZW51IGl0
ZW0iKQorICAgICAgICAgICAgICAgIDogVUlfU1RSSU5HKCJSaWdodCB0byBMZWZ0IiwgIlJpZ2h0
IHRvIExlZnQgY29udGV4dCBtZW51IGl0ZW0iKV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9IAorICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVj
dG9yKGNoYW5nZUF0dHJpYnV0ZXM6KQorICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rv
cihjaGFuZ2VDb2xvcjopICAgICAgICAKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IoY2hhbmdlRm9udDopKQorICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRSaWNobHldOwor
ICAgIAorICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNhcGl0YWxpemVXb3JkOikKKyAgICAg
ICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobG93ZXJjYXNlV29yZDopCisgICAgICAg
ICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHVwcGVyY2FzZVdvcmQ6KSkKKyAgICAgICAg
cmV0dXJuIFtzZWxmIF9oYXNTZWxlY3Rpb25dICYmIFtzZWxmIF9pc0VkaXRhYmxlXTsKKworICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNlbnRlclNlbGVjdGlvbkluVmlzaWJsZUFyZWE6KQor
ICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihqdW1wVG9TZWxlY3Rpb246KQor
ICAgICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3Rvcihjb3B5Rm9udDopKQorICAgICAg
ICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl0gfHwgKFtzZWxmIF9pc0VkaXRhYmxlXSAmJiBb
c2VsZiBfaGFzSW5zZXJ0aW9uUG9pbnRdKTsKKyAgICAKKyAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihjaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjopKQorICAgICAgICByZXR1cm4gW1tz
ZWxmIF93ZWJWaWV3XSBpc0VkaXRhYmxlXSAmJiBbc2VsZiBfY2FuRWRpdFJpY2hseV07CisgICAg
CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2lnbm9yZVNwZWxsaW5nRnJvbU1lbnU6KQor
ICAgICAgICAgICAgfHwgYWN0aW9uID09IEBzZWxlY3RvcihfbGVhcm5TcGVsbGluZ0Zyb21NZW51
OikKKyAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IodGFrZUZpbmRTdHJpbmdGcm9t
U2VsZWN0aW9uOikpCisgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXTsKKyAgICAK
KyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwYXN0ZTopIHx8IGFjdGlvbiA9PSBAc2VsZWN0
b3IocGFzdGVBc1BsYWluVGV4dDopKQorICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5l
ZGl0b3IoKS0+Y2FuREhUTUxQYXN0ZSgpIHx8IGZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSk7
CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCisg
ICAgICAgIHJldHVybiBmcmFtZSAmJiAoZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkK
KyAgICAgICAgICAgIHx8IChmcmFtZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkgJiYgZnJhbWUtPnNl
bGVjdGlvbigpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSk7CisgICAgCisgICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IocGVyZm9ybUZpbmRQYW5lbEFjdGlvbjopKQorICAgICAgICByZXR1
cm4gTk87CisgICAgCisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoX2xvb2tVcEluRGljdGlv
bmFyeUZyb21NZW51OikpCisgICAgICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uXTsKKyAg
ICAKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rv
cih0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6KSkgeworICAgICAgICAvLyBGSVhNRSA0Nzk5MTM0OiBX
ZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMs
IGJ1dCB3ZSBtdXN0IHZhbGlkYXRlIAorICAgICAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNh
dXNlIHdlIGltcGxlbWVudCBpdCBoZXJlLCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBi
ZWNhdXNlIHRoZSBBcHBLaXQgCisgICAgICAgIC8vIGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNw
b25kZXIuCisgICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVt
OworICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3Nd
XSkKKyAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBZRVM7
CisgICAgfQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcihv
cmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVsOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVu
dUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5k
T2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKSB7CisgICAgICAgICAgICBCT09MIHBhbmVsU2hv
d2luZyA9IFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3Vic3RpdHV0aW9u
c1BhbmVsXSBpc1Zpc2libGVdOworICAgICAgICAgICAgW21lbnVJdGVtIHNldFRpdGxlOnBhbmVs
U2hvd2luZworICAgICAgICAgICAgICAgID8gVUlfU1RSSU5HKCJIaWRlIFN1YnN0aXR1dGlvbnMi
LCAibWVudSBpdGVtIHRpdGxlIikKKyAgICAgICAgICAgICAgICA6IFVJX1NUUklORygiU2hvdyBT
dWJzdGl0dXRpb25zIiwgIm1lbnUgaXRlbSB0aXRsZSIpXTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJW
aWV3IGlzIHRoZSBib3R0bGVuZWNrIGZvciB0aGlzIGxvZ2ljLCBidXQgd2UgbXVzdCB2YWxpZGF0
ZSAKKyAgICAvLyB0aGUgc2VsZWN0b3IgaGVyZSBiZWNhdXNlIHdlIGltcGxlbWVudCBpdCBoZXJl
LCBhbmQgd2UgbXVzdCBpbXBsZW1lbnQgaXQgaGVyZSBiZWNhdXNlIHRoZSBBcHBLaXQgCisgICAg
Ly8gY29kZSBjaGVja3MgdGhlIGZpcnN0IHJlc3BvbmRlci4KKyAgICBpZiAoYWN0aW9uID09IEBz
ZWxlY3Rvcih0b2dnbGVTbWFydEluc2VydERlbGV0ZTopKSB7CisgICAgICAgIE5TTWVudUl0ZW0g
Km1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOworICAgICAgICBpZiAoW21lbnVJdGVtIGlz
S2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKKyAgICAgICAgICAgIFttZW51SXRlbSBz
ZXRTdGF0ZTpbc2VsZiBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNP
ZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAgIGlm
IChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uOikp
IHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Cisg
ICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQor
ICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljUXVvdGVTdWJz
dGl0dXRpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOworICAgICAgICByZXR1
cm4gW3NlbGYgX2NhbkVkaXRdOworICAgIH0KKyAgICBpZiAoYWN0aW9uID09IEBzZWxlY3Rvcih0
b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVu
dUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5k
T2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0
YXRlOltzZWxmIGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDog
TlNPZmZTdGF0ZV07CisgICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07CisgICAgfQorICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246
KSkgeworICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsK
KyAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0p
CisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0
dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Io
dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50OikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAq
bWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNL
aW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNl
dFN0YXRlOltzZWxmIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF0gPyBOU09uU3Rh
dGUgOiBOU09mZlN0YXRlXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9
CisgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3Jy
ZWN0aW9uOikpIHsKKyAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAq
KWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBj
bGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGlj
U3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKKyAg
ICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBF
ZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjphY3Rp
b25dOworICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgTlNNZW51SXRl
bSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07CisgICAgICAgIGlmIChbbWVudUl0ZW0g
aXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQorICAgICAgICAgICAgW21lbnVJdGVt
IHNldFN0YXRlOmtpdChjb21tYW5kLnN0YXRlKCkpXTsKKyAgICAgICAgcmV0dXJuIGNvbW1hbmQu
aXNFbmFibGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIFlFUzsKK30KKworLSAoQk9PTCl2YWxp
ZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4p
aXRlbQoreworICAgIC8vIFRoaXMgY2FuIGJlIGNhbGxlZCBkdXJpbmcgdGVhcmRvd24gd2hlbiBf
d2ViVmlldyBpcyBuaWwuIFJldHVybiBOTyB3aGVuIHRoaXMgaGFwcGVucywgYmVjYXVzZSBDYWxs
VUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4KKyAgICAvLyBhc3N1bWVzIHRoZSBXZWJWSWV3IGlz
IG5vbi1uaWwuCisgICAgaWYgKCFbc2VsZiBfd2ViVmlld10pCisgICAgICAgIHJldHVybiBOTzsK
KyAgICBCT09MIHJlc3VsdCA9IFtzZWxmIHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0
RGVsZWdhdGU6aXRlbV07CisgICAgcmV0dXJuIENhbGxVSURlbGVnYXRlUmV0dXJuaW5nQm9vbGVh
bihyZXN1bHQsIFtzZWxmIF93ZWJWaWV3XSwgQHNlbGVjdG9yKHdlYlZpZXc6dmFsaWRhdGVVc2Vy
SW50ZXJmYWNlSXRlbTpkZWZhdWx0VmFsaWRhdGlvbjopLCBpdGVtLCByZXN1bHQpOworfQorCist
IChCT09MKWFjY2VwdHNGaXJzdFJlc3BvbmRlcgoreworICAgIC8vIERvbid0IGFjY2VwdCBmaXJz
dCByZXNwb25kZXIgd2hlbiB3ZSBmaXJzdCBjbGljayBvbiB0aGlzIHZpZXcuCisgICAgLy8gV2Ug
aGF2ZSB0byBwYXNzIHRoZSBldmVudCBkb3duIHRocm91Z2ggV2ViQ29yZSBmaXJzdCB0byBiZSBz
dXJlIHdlIGRvbid0IGhpdCBhIHN1YnZpZXcuCisgICAgLy8gRG8gYWNjZXB0IGZpcnN0IHJlc3Bv
bmRlciBhdCBhbnkgb3RoZXIgdGltZSwgZm9yIGV4YW1wbGUgZnJvbSBrZXlib2FyZCBldmVudHMs
CisgICAgLy8gb3IgZnJvbSBjYWxscyBiYWNrIGZyb20gV2ViQ29yZSBvbmNlIHdlIGJlZ2luIG1v
dXNlLWRvd24gZXZlbnQgaGFuZGxpbmcuCisgICAgTlNFdmVudCAqZXZlbnQgPSBbTlNBcHAgY3Vy
cmVudEV2ZW50XTsKKyAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93bgorICAg
ICAgICAgICAgJiYgIV9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50CisgICAgICAgICAg
ICAmJiBOU1BvaW50SW5SZWN0KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW3NlbGYgY29udmVy
dFJlY3Q6W3NlbGYgdmlzaWJsZVJlY3RdIHRvVmlldzpuaWxdKSkgeworICAgICAgICByZXR1cm4g
Tk87CisgICAgfQorICAgIHJldHVybiBZRVM7Cit9CisKKy0gKEJPT0wpbWFpbnRhaW5zSW5hY3Rp
dmVTZWxlY3Rpb24KK3sKKyAgICAvLyBUaGlzIG1ldGhvZCBoZWxwcyB0byBkZXRlcm1pbmUgd2hl
dGhlciB0aGUgV2ViSFRNTFZpZXcgc2hvdWxkIG1haW50YWluCisgICAgLy8gYW4gaW5hY3RpdmUg
c2VsZWN0aW9uIHdoZW4gaXQncyBub3QgZmlyc3QgcmVzcG9uZGVyLgorICAgIC8vIFRyYWRpdGlv
bmFsbHksIHRoZXNlIHZpZXdzIGhhdmUgbm90IG1haW50YWluZWQgc3VjaCBzZWxlY3Rpb25zLAor
ICAgIC8vIGNsZWFyaW5nIHRoZW0gd2hlbiB0aGUgdmlldyB3YXMgbm90IGZpcnN0IHJlc3BvbmRl
ci4gSG93ZXZlciwKKyAgICAvLyB0byBmaXggYnVncyBsaWtlIHRoaXMgb25lOgorICAgIC8vIDxy
ZGFyOi8vcHJvYmxlbS8zNjcyMDg4PjogIkVkaXRhYmxlIFdlYlZpZXdzIHNob3VsZCBtYWludGFp
biBhIHNlbGVjdGlvbiBldmVuIAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdo
ZW4gdGhleSdyZSBub3QgZmlyc3RSZXNwb25kZXIiCisgICAgLy8gaXQgd2FzIGRlY2lkZWQgdG8g
YWRkIGEgc3dpdGNoIHRvIGFjdCBtb3JlIGxpa2UgYW4gTlNUZXh0Vmlldy4KKworICAgIGlmIChb
W3NlbGYgX3dlYlZpZXddIG1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uXSkKKyAgICAgICAgcmV0
dXJuIFlFUzsKKworICAgIC8vIFByZWRpY3QgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGxvc2luZyBm
aXJzdCByZXNwb25kZXIgc3RhdHVzIG9ubHkgdG8KKyAgICAvLyBnYWluIGl0IGJhY2sgYWdhaW4u
IFdhbnQgdG8ga2VlcCB0aGUgc2VsZWN0aW9uIGluIHRoYXQgY2FzZS4KKyAgICBpZCBuZXh0UmVz
cG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmdd
OworICAgIGlmIChbbmV4dFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1Njcm9sbFZpZXcgY2xh
c3NdXSkgeworICAgICAgICBpZCBjb250ZW50VmlldyA9IFtuZXh0UmVzcG9uZGVyIGNvbnRlbnRW
aWV3XTsKKyAgICAgICAgaWYgKGNvbnRlbnRWaWV3KQorICAgICAgICAgICAgbmV4dFJlc3BvbmRl
ciA9IGNvbnRlbnRWaWV3OworICAgIH0KKyAgICBpZiAoW25leHRSZXNwb25kZXIgaXNLaW5kT2ZD
bGFzczpbTlNDbGlwVmlldyBjbGFzc11dKSB7CisgICAgICAgIGlkIGRvY3VtZW50VmlldyA9IFtu
ZXh0UmVzcG9uZGVyIGRvY3VtZW50Vmlld107CisgICAgICAgIGlmIChkb2N1bWVudFZpZXcpCisg
ICAgICAgICAgICBuZXh0UmVzcG9uZGVyID0gZG9jdW1lbnRWaWV3OworICAgIH0KKyAgICBpZiAo
bmV4dFJlc3BvbmRlciA9PSBzZWxmKQorICAgICAgICByZXR1cm4gWUVTOworCisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgYm9vbCBzZWxlY3Rpb25Jc0Vk
aXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudEVk
aXRhYmxlKCk7CisgICAgYm9vbCBuZXh0UmVzcG9uZGVySXNJbldlYlZpZXcgPSBbbmV4dFJlc3Bv
bmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXQorICAgICAgICAmJiBbbmV4dFJlc3Bv
bmRlciBpc0Rlc2NlbmRhbnRPZjpbW1tzZWxmIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmll
d11dOworCisgICAgcmV0dXJuIHNlbGVjdGlvbklzRWRpdGFibGUgJiYgbmV4dFJlc3BvbmRlcklz
SW5XZWJWaWV3OworfQorCistICh2b2lkKWFkZE1vdXNlTW92ZWRPYnNlcnZlcgoreworICAgIGlm
ICghX3ByaXZhdGUtPmRhdGFTb3VyY2UgfHwgIVtzZWxmIF9pc1RvcEhUTUxWaWV3XSB8fCBfcHJp
dmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlvbnMpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIFVubGVzcyB0aGUgRGFzaGJvYXJkIGFza3MgdXMgdG8gZG8gdGhpcyBmb3IgYWxs
IHdpbmRvd3MsIGtlZXAgYW4gb2JzZXJ2ZXIgZ29pbmcgb25seSBmb3IgdGhlIGtleSB3aW5kb3cu
CisgICAgaWYgKCEoW1tzZWxmIHdpbmRvd10gaXNLZXlXaW5kb3ddIAorI2lmIEVOQUJMRShEQVNI
Qk9BUkRfU1VQUE9SVCkKKyAgICAgICAgICAgIHx8IFtbc2VsZiBfd2ViVmlld10gX2Rhc2hib2Fy
ZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRzVG9BbGxX
aW5kb3dzXQorI2VuZGlmCisgICAgICAgICkpCisgICAgICAgIHJldHVybjsKKworICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3Rv
cjpAc2VsZWN0b3IobW91c2VNb3ZlZE5vdGlmaWNhdGlvbjopCisgICAgICAgIG5hbWU6V0tNb3Vz
ZU1vdmVkTm90aWZpY2F0aW9uKCkgb2JqZWN0Om5pbF07CisgICAgW3NlbGYgX2ZyYW1lT3JCb3Vu
ZHNDaGFuZ2VkXTsKKyAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlv
bnMgPSB0cnVlOworfQorCistICh2b2lkKXJlbW92ZU1vdXNlTW92ZWRPYnNlcnZlcgoreworI2lm
IEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKKyAgICAvLyBEb24ndCByZW1vdmUgdGhlIG9ic2Vy
dmVyIGlmIHdlJ3JlIHJ1bm5pbmcgdGhlIERhc2hib2FyZC4KKyAgICBpZiAoW1tzZWxmIF93ZWJW
aWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNTZW5kTW91
c2VFdmVudHNUb0FsbFdpbmRvd3NdKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworICAgIFtb
c2VsZiBfd2ViVmlld10gX21vdXNlRGlkTW92ZU92ZXJFbGVtZW50Om5pbCBtb2RpZmllckZsYWdz
OjBdOworICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHld
OworfQorCistICh2b2lkKWFkZFN1cGVydmlld09ic2VydmVycworeworICAgIGlmIChfcHJpdmF0
ZS0+b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTlNWaWV3ICpzdXBlcnZpZXcgPSBbc2VsZiBzdXBlcnZpZXddOworICAgIGlmICghc3VwZXJ2
aWV3IHx8ICFbc2VsZiB3aW5kb3ddKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNOb3Rp
ZmljYXRpb25DZW50ZXIgKm5vdGlmaWNhdGlvbkNlbnRlciA9IFtOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9mcmFtZU9yQm91bmRzQ2hhbmdlZCkgbmFtZTpOU1ZpZXdG
cmFtZURpZENoYW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKKyAgICBbbm90aWZp
Y2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9mcmFtZU9y
Qm91bmRzQ2hhbmdlZCkgbmFtZTpOU1ZpZXdCb3VuZHNEaWRDaGFuZ2VOb3RpZmljYXRpb24gb2Jq
ZWN0OnN1cGVydmlld107CisgICAgCisgICAgLy8gSW4gYWRkaXRpb24gdG8gcmVnaXN0ZXJpbmcg
Zm9yIGZyYW1lL2JvdW5kcyBjaGFuZ2Ugbm90aWZpY2F0aW9ucywgY2FsbCAtX2ZyYW1lT3JCb3Vu
ZHNDaGFuZ2VkLgorICAgIC8vIEl0IHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgc2Nyb2xsIGFnYWlu
c3QgdGhlIHByZXZpb3VzIGxheW91dCdzIHNjcm9sbC4gIFdlIG5lZWQgdG8KKyAgICAvLyBkbyB0
aGlzIGhlcmUgdG8gY2F0Y2ggdGhlIGNhc2Ugd2hlcmUgdGhlIFdlYlZpZXcgaXMgbGFpZCBvdXQg
YXQgb25lIHNpemUsIHJlbW92ZWQgZnJvbSBpdHMKKyAgICAvLyB3aW5kb3csIHJlc2l6ZWQsIGFu
ZCBpbnNlcnRlZCBpbnRvIGFub3RoZXIgd2luZG93LiAgT3VyIGZyYW1lL2JvdW5kcyBjaGFuZ2Vk
IG5vdGlmaWNhdGlvbnMKKyAgICAvLyB3aWxsIG5vdCBiZSBzZW50IGluIHRoYXQgc2l0dWF0aW9u
LCBzaW5jZSB3ZSBvbmx5IHdhdGNoIGZvciBjaGFuZ2VzIHdoaWxlIGluIHRoZSB2aWV3IGhpZXJh
cmNoeS4KKyAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOworICAgIAorICAgIF9wcml2
YXRlLT5vYnNlcnZpbmdTdXBlcnZpZXdOb3RpZmljYXRpb25zID0gdHJ1ZTsKK30KKworLSAodm9p
ZClhZGRXaW5kb3dPYnNlcnZlcnMKK3sKKyAgICBpZiAoX3ByaXZhdGUtPm9ic2VydmluZ1dpbmRv
d05vdGlmaWNhdGlvbnMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gW3NlbGYgd2luZG93XTsKKyAgICBpZiAoIXdpbmRvdykKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgW25vdGlmaWNhdGlvbkNlbnRl
ciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dEaWRCZWNvbWVLZXk6
KSBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAg
IFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
d2luZG93RGlkUmVzaWduS2V5OikgbmFtZTpOU1dpbmRvd0RpZFJlc2lnbktleU5vdGlmaWNhdGlv
biBvYmplY3Q6bmlsXTsKKyAgICBbbm90aWZpY2F0aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYg
c2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd1dpbGxDbG9zZTopIG5hbWU6TlNXaW5kb3dXaWxsQ2xv
c2VOb3RpZmljYXRpb24gb2JqZWN0OndpbmRvd107CisgICAgW25vdGlmaWNhdGlvbkNlbnRlciBh
ZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcih3aW5kb3dXaWxsT3JkZXJPblNjcmVl
bjopIG5hbWU6V0tXaW5kb3dXaWxsT3JkZXJPblNjcmVlbk5vdGlmaWNhdGlvbigpIG9iamVjdDp3
aW5kb3ddOworICAgIAorICAgIF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRpb25z
ID0gdHJ1ZTsKK30KKworLSAodm9pZCl2aWV3V2lsbE1vdmVUb1N1cGVydmlldzooTlNWaWV3ICop
bmV3U3VwZXJ2aWV3Cit7CisgICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVyc107Cit9
CisKKy0gKHZvaWQpdmlld0RpZE1vdmVUb1N1cGVydmlldworeworICAgIGlmIChbc2VsZiBzdXBl
cnZpZXddICE9IG5pbCkKKyAgICAgICAgW3NlbGYgYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKK30K
Kworc3RhdGljIHZvaWQgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyQ2FsbGJhY2so
Q0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZvaWQgKmluZm8pCit7CisgICAgV2ViSFRNTFZpZXcg
KnZpZXcgPSAoV2ViSFRNTFZpZXcgKilpbmZvOworICAgIFt2aWV3IF91cGRhdGVGb2N1c2VkQW5k
QWN0aXZlU3RhdGVdOworfQorCistICh2b2lkKXZpZXdXaWxsTW92ZVRvV2luZG93OihOU1dpbmRv
dyAqKXdpbmRvdworeworICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlIGFyZW4ndCBpbml0
aWFsaXplZC4gIFRoaXMgaGFwcGVucworICAgIC8vIHdoZW4gZGVjb2RpbmcgYSBXZWJWaWV3LiAg
V2hlbiBXZWJWaWV3cyBhcmUgZGVjb2RlZCB0aGVpciBzdWJ2aWV3cworICAgIC8vIGFyZSBjcmVh
dGVkIGJ5IGluaXRXaXRoQ29kZXI6IGFuZCBzbyB3b24ndCBiZSBub3JtYWxseQorICAgIC8vIGlu
aXRpYWxpemVkLiAgVGhlIHN0dWIgdmlld3MgYXJlIGRpc2NhcmRlZCBieSBXZWJWaWV3LgorICAg
IGlmICghX3ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBTb21lIG9m
IHRoZXNlIGNhbGxzIG1heSBub3Qgd29yayBiZWNhdXNlIHRoaXMgdmlldyBtYXkgYmUgYWxyZWFk
eSByZW1vdmVkIGZyb20gaXQncyBzdXBlcnZpZXcuCisgICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92
ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07CisgICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2Vy
dmVyc107CisgICAgW3NlbGYgX3JlbW92ZVN1cGVydmlld09ic2VydmVyc107CisgICAgW3NlbGYg
X2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKKyAgICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9j
dXNlZEFuZEFjdGl2ZVN0YXRlVGltZXJdOworICAgIAorICAgIFtbc2VsZiBfcGx1Z2luQ29udHJv
bGxlcl0gc3RvcEFsbFBsdWdpbnNdOworfQorCistICh2b2lkKXZpZXdEaWRNb3ZlVG9XaW5kb3cK
K3sKKyAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBhcmVuJ3QgaW5pdGlhbGl6ZWQuICBU
aGlzIGhhcHBlbnMKKyAgICAvLyB3aGVuIGRlY29kaW5nIGEgV2ViVmlldy4gIFdoZW4gV2ViVmll
d3MgYXJlIGRlY29kZWQgdGhlaXIgc3Vidmlld3MKKyAgICAvLyBhcmUgY3JlYXRlZCBieSBpbml0
V2l0aENvZGVyOiBhbmQgc28gd29uJ3QgYmUgbm9ybWFsbHkKKyAgICAvLyBpbml0aWFsaXplZC4g
IFRoZSBzdHViIHZpZXdzIGFyZSBkaXNjYXJkZWQgYnkgV2ViVmlldy4KKyAgICBpZiAoIV9wcml2
YXRlIHx8IF9wcml2YXRlLT5jbG9zZWQpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
W3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOworICAgIGlmIChbc2VsZiB3aW5kb3ddKSB7Cisg
ICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24gPSBbW3NlbGYgc3VwZXJ2aWV3XSBi
b3VuZHNdLm9yaWdpbjsKKyAgICAgICAgW3NlbGYgYWRkV2luZG93T2JzZXJ2ZXJzXTsKKyAgICAg
ICAgW3NlbGYgYWRkU3VwZXJ2aWV3T2JzZXJ2ZXJzXTsKKyAgICAgICAgW3NlbGYgYWRkTW91c2VN
b3ZlZE9ic2VydmVyXTsKKworICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHVwZGF0ZSwgcmF0aGVy
IHRoYW4gbWFraW5nIHRoZSBjYWxsIHJpZ2h0IG5vdy4KKyAgICAgICAgLy8gVGhlIHJlYXNvbiBp
cyB0aGF0IHBsYWNpbmcgdGhlIGNhcmV0IGluIHRoZSBqdXN0LWluc3RhbGxlZCB2aWV3IHJlcXVp
cmVzCisgICAgICAgIC8vIHRoZSBIVE1ML1hNTCBkb2N1bWVudCB0byBiZSBhdmFpbGFibGUgb24g
dGhlIFdlYkNvcmUgc2lkZSwgYnV0IGl0IGlzIG5vdAorICAgICAgICAvLyBhdCB0aGUgdGltZSB0
aGlzIGNvZGUgaXMgcnVubmluZy4gSG93ZXZlciwgaXQgd2lsbCBiZSB0aGVyZSBvbiB0aGUgbmV4
dAorICAgICAgICAvLyBjcmFuayBvZiB0aGUgcnVuIGxvb3AuIERvaW5nIHRoaXMgaGVscHMgdG8g
bWFrZSBhIGJsaW5raW5nIGNhcmV0IGFwcGVhciAKKyAgICAgICAgLy8gaW4gYSBuZXcsIGVtcHR5
IHdpbmRvdyAiYXV0b21hdGljIi4KKyAgICAgICAgaWYgKCFfcHJpdmF0ZS0+dXBkYXRlRm9jdXNl
ZEFuZEFjdGl2ZVN0YXRlVGltZXIpIHsKKyAgICAgICAgICAgIENGUnVuTG9vcFRpbWVyQ29udGV4
dCBjb250ZXh0ID0geyAwLCBzZWxmLCBOVUxMLCBOVUxMLCBOVUxMIH07CisgICAgICAgICAgICBf
cHJpdmF0ZS0+dXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlVGltZXIgPSBDRlJ1bkxvb3BUaW1l
ckNyZWF0ZShOVUxMLCBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSwgMCwgMCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyQ2FsbGJhY2ssICZjb250ZXh0
KTsKKyAgICAgICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwg
X3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyLCBrQ0ZSdW5Mb29wRGVm
YXVsdE1vZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBbW3NlbGYgX3BsdWdpbkNv
bnRyb2xsZXJdIHN0YXJ0QWxsUGx1Z2luc107CisKKyAgICAgICAgX3ByaXZhdGUtPmxhc3RTY3Jv
bGxQb3NpdGlvbiA9IE5TWmVyb1BvaW50OworICAgIH0KK30KKworLSAodm9pZCl2aWV3V2lsbE1v
dmVUb0hvc3RXaW5kb3c6KE5TV2luZG93ICopaG9zdFdpbmRvdworeworICAgIFtbc2VsZiBzdWJ2
aWV3c10gX3dlYl9tYWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHZpZXdX
aWxsTW92ZVRvSG9zdFdpbmRvdzopIHdpdGhPYmplY3Q6aG9zdFdpbmRvd107Cit9CisKKy0gKHZv
aWQpdmlld0RpZE1vdmVUb0hvc3RXaW5kb3cKK3sKKyAgICBbW3NlbGYgc3Vidmlld3NdIF93ZWJf
bWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3RGlkTW92ZVRvSG9z
dFdpbmRvdykgd2l0aE9iamVjdDpuaWxdOworfQorCisKKy0gKHZvaWQpYWRkU3VidmlldzooTlNW
aWV3ICopdmlldworeworICAgIFtzdXBlciBhZGRTdWJ2aWV3OnZpZXddOworCisgICAgaWYgKFtX
ZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0luVmlldzp2aWV3XSkKKyAgICAgICAgW1tzZWxmIF9w
bHVnaW5Db250cm9sbGVyXSBhZGRQbHVnaW46dmlld107Cit9CisKKy0gKHZvaWQpd2lsbFJlbW92
ZVN1YnZpZXc6KE5TVmlldyAqKXN1YnZpZXcKK3sKKyAgICBpZiAoW1dlYlBsdWdpbkNvbnRyb2xs
ZXIgaXNQbHVnSW5WaWV3OnN1YnZpZXddKQorICAgICAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xs
ZXJdIGRlc3Ryb3lQbHVnaW46c3Vidmlld107CisKKyAgICBbc3VwZXIgd2lsbFJlbW92ZVN1YnZp
ZXc6c3Vidmlld107Cit9CisKKy0gKHZvaWQpcmVhcHBseVN0eWxlcworeworICAgIGlmICghX3By
aXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorI2lmZGVm
IExPR19USU1FUworICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgp
OworI2VuZGlmCisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSkpIHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogY29yZVZpZXcgPSBjb3JlRnJhbWUtPnZpZXco
KSkKKyAgICAgICAgICAgIGNvcmVWaWV3LT5zZXRNZWRpYVR5cGUoX3ByaXZhdGUtPnByaW50aW5n
ID8gInByaW50IiA6ICJzY3JlZW4iKTsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9
IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5zZXRQcmludGlu
ZyhfcHJpdmF0ZS0+cHJpbnRpbmcpOworICAgICAgICBjb3JlRnJhbWUtPnJlYXBwbHlTdHlsZXMo
KTsKKyAgICB9CisgICAgCisjaWZkZWYgTE9HX1RJTUVTICAgICAgICAKKyAgICBkb3VibGUgdGhp
c1RpbWUgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OworICAgIExPRyhUaW1p
bmcsICIlcyBhcHBseSBzdHlsZSBzZWNvbmRzID0gJWYiLCBbc2VsZiBVUkxdLCB0aGlzVGltZSk7
CisjZW5kaWYKKworICAgIF9wcml2YXRlLT5uZWVkc1RvQXBwbHlTdHlsZXMgPSBOTzsKK30KKwor
Ly8gRG8gYSBsYXlvdXQsIGJ1dCBzZXQgdXAgYSBuZXcgZml4ZWQgd2lkdGggZm9yIHRoZSBwdXJw
b3NlcyBvZiBkb2luZyBwcmludGluZyBsYXlvdXQuCisvLyBtaW5QYWdlV2lkdGg9PTAgaW1wbGll
cyBhIG5vbi1wcmludGluZyBsYXlvdXQKKy0gKHZvaWQpbGF5b3V0VG9NaW5pbXVtUGFnZVdpZHRo
OihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRo
IGFkanVzdGluZ1ZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXplCit7CisgICAgW3NlbGYgcmVh
cHBseVN0eWxlc107CisgICAgCisgICAgaWYgKCFbc2VsZiBfbmVlZHNMYXlvdXRdKQorICAgICAg
ICByZXR1cm47CisKKyNpZmRlZiBMT0dfVElNRVMgICAgICAgIAorICAgIGRvdWJsZSBzdGFydCA9
IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOworI2VuZGlmCisKKyAgICBMT0coVmlldywgIiVA
IGRvaW5nIGxheW91dCIsIHNlbGYpOworCisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpIHsKKyAgICAgICAg
aWYgKG1pblBhZ2VXaWR0aCA+IDAuMCkKKyAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91
dFdpdGhQYWdlV2lkdGhSYW5nZShtaW5QYWdlV2lkdGgsIG1heFBhZ2VXaWR0aCwgYWRqdXN0Vmll
d1NpemUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNvcmVWaWV3LT5mb3JjZUxheW91
dCghYWRqdXN0Vmlld1NpemUpOworICAgICAgICAgICAgaWYgKGFkanVzdFZpZXdTaXplKQorICAg
ICAgICAgICAgICAgIGNvcmVWaWV3LT5hZGp1c3RWaWV3U2l6ZSgpOworICAgICAgICB9CisgICAg
fQorICAgIAorI2lmZGVmIExPR19USU1FUyAgICAgICAgCisgICAgZG91YmxlIHRoaXNUaW1lID0g
Q0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5nLCAiJXMg
bGF5b3V0IHNlY29uZHMgPSAlZiIsIFtzZWxmIFVSTF0sIHRoaXNUaW1lKTsKKyNlbmRpZgorfQor
CistICh2b2lkKWxheW91dAoreworICAgIFtzZWxmIGxheW91dFRvTWluaW11bVBhZ2VXaWR0aDow
LjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RpbmdWaWV3U2l6ZTpOT107Cit9CisKKy8v
IERlbGl2ZXIgbW91c2V1cCBldmVudHMgdG8gdGhlIERPTSBmb3IgYnV0dG9uIDIuCistICh2b2lk
KXJpZ2h0TW91c2VVcDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5j
ZSB0aGF0IGlmIHdlIHJ1biBhIG5lc3RlZCBldmVudCBsb29wIHRoZSBldmVudCB3aWxsIGJlIHJl
bGVhc2VkLgorICAgIC8vIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nIHByZXZlbnRz
IHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBsYXRlciBoZXJlIG9yCisgICAgLy8gaW5zaWRl
IEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBb
c3VwZXIgcmlnaHRNb3VzZVVwOmV2ZW50XTsKKworICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
bW91c2VVcChldmVudCk7Cit9CisKKy0gKE5TTWVudSAqKW1lbnVGb3JFdmVudDooTlNFdmVudCAq
KWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IGlmIHdlIHJ1biBhIG5lc3Rl
ZCBldmVudCBsb29wIHRoZSBldmVudCB3aWxsIGJlIHJlbGVhc2VkLgorICAgIC8vIFJldGFpbmlu
ZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nIHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBsYXRlciBoZXJlIG9yCisgICAgLy8gaW5zaWRlIEFwcEtpdCBjb2RlLgorICAgIFtbZXZl
bnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVy
IGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisKKyAgICBSZWZQdHI8RnJhbWU+
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisg
ICAgICAgIHJldHVybiBuaWw7CisKKyAgICBQYWdlKiBwYWdlID0gY29yZUZyYW1lLT5wYWdlKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgLy8gTWF0Y2ggYmVo
YXZpb3Igb2Ygb3RoZXIgYnJvd3NlcnMgYnkgc2VuZGluZyBhIG1vdXNlZG93biBldmVudCBmb3Ig
cmlnaHQgY2xpY2tzLgorICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0gWUVT
OworICAgIHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jbGVhckNvbnRleHRNZW51KCk7
CisgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VEb3duKGV2ZW50KTsKKyAgICBC
T09MIGhhbmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0
TWVudUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgIF9wcml2YXRlLT5oYW5k
bGluZ01vdXNlRG93bkV2ZW50ID0gTk87CisKKyAgICBpZiAoIWhhbmRsZWRFdmVudCkKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKworICAgIC8vIFJlLWdldCBwYWdlLCBzaW5jZSBpdCBtaWdodCBoYXZl
IGdvbmUgYXdheSBkdXJpbmcgZXZlbnQgaGFuZGxpbmcuCisgICAgcGFnZSA9IGNvcmVGcmFtZS0+
cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKworICAgIENvbnRl
eHRNZW51KiBjb3JlTWVudSA9IHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jb250ZXh0
TWVudSgpOworICAgIGlmICghY29yZU1lbnUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBO
U0FycmF5KiBtZW51SXRlbXMgPSBjb3JlTWVudS0+cGxhdGZvcm1EZXNjcmlwdGlvbigpOworICAg
IGlmICghbWVudUl0ZW1zKQorICAgICAgICByZXR1cm4gbmlsOworCisgICAgTlNVSW50ZWdlciBj
b3VudCA9IFttZW51SXRlbXMgY291bnRdOworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVy
biBuaWw7CisKKyAgICBOU01lbnUqIG1lbnUgPSBbW1tOU01lbnUgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICBmb3IgKE5TVUludGVnZXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
ICAgICBbbWVudSBhZGRJdGVtOlttZW51SXRlbXMgb2JqZWN0QXRJbmRleDppXV07CisgICAgcmV0
dXJuIG1lbnU7Cit9CisKKy0gKEJPT0wpc2VhcmNoRm9yOihOU1N0cmluZyAqKXN0cmluZyBkaXJl
Y3Rpb246KEJPT0wpZm9yd2FyZCBjYXNlU2Vuc2l0aXZlOihCT09MKWNhc2VGbGFnIHdyYXA6KEJP
T0wpd3JhcEZsYWcKK3sKKyAgICByZXR1cm4gW3NlbGYgc2VhcmNoRm9yOnN0cmluZyBkaXJlY3Rp
b246Zm9yd2FyZCBjYXNlU2Vuc2l0aXZlOmNhc2VGbGFnIHdyYXA6d3JhcEZsYWcgc3RhcnRJblNl
bGVjdGlvbjpOT107Cit9CisKKy0gKHZvaWQpY2xlYXJGb2N1cworeworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgp
OworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBkb2N1bWVu
dC0+c2V0Rm9jdXNlZE5vZGUoMCk7Cit9CisKKy0gKEJPT0wpaXNPcGFxdWUKK3sKKyAgICByZXR1
cm4gW1tzZWxmIF93ZWJWaWV3XSBkcmF3c0JhY2tncm91bmRdOworfQorCistICh2b2lkKXNldE5l
ZWRzRGlzcGxheTooQk9PTClmbGFnCit7CisgICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc0Rpc3Bs
YXk6JUAiLCBzZWxmLCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOworICAgIFtzdXBlciBzZXROZWVk
c0Rpc3BsYXk6ZmxhZ107Cit9CisKKy0gKHZvaWQpc2V0TmVlZHNMYXlvdXQ6IChCT09MKWZsYWcK
K3sKKyAgICBMT0coVmlldywgIiVAIHNldE5lZWRzTGF5b3V0OiVAIiwgc2VsZiwgZmxhZyA/IEAi
WUVTIiA6IEAiTk8iKTsKKyAgICBpZiAoIWZsYWcpCisgICAgICAgIHJldHVybjsgLy8gVGhlcmUn
cyBubyB3YXkgdG8gc2F5IHlvdSBkb24ndCBuZWVkIGEgbGF5b3V0LgorICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZG9jdW1l
bnQoKSAmJiBmcmFtZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCkpCisgICAg
ICAgICAgICB2aWV3LT5zZXROZWVkc0xheW91dCgpOworICAgIH0KK30KKworLSAodm9pZClzZXRO
ZWVkc1RvQXBwbHlTdHlsZXM6IChCT09MKWZsYWcKK3sKKyAgICBMT0coVmlldywgIiVAIHNldE5l
ZWRzVG9BcHBseVN0eWxlczolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5PIik7CisgICAg
X3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyA9IGZsYWc7Cit9CisKKy0gKHZvaWQpZHJhd1Np
bmdsZVJlY3Q6KE5TUmVjdClyZWN0Cit7CisgICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFw
aGljc1N0YXRlXTsKKyAgICBOU1JlY3RDbGlwKHJlY3QpOworICAgICAgICAKKyAgICBBU1NFUlQo
W1tzZWxmIHN1cGVydmlld10gaXNLaW5kT2ZDbGFzczpbV2ViQ2xpcFZpZXcgY2xhc3NdXSk7CisK
KyAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSBzZXRBZGRpdGlvbmFsQ2xpcDpy
ZWN0XTsKKworICAgIEB0cnkgeworICAgICAgICBpZiAoW3NlbGYgX3RyYW5zcGFyZW50QmFja2dy
b3VuZF0pIHsKKyAgICAgICAgICAgIFtbTlNDb2xvciBjbGVhckNvbG9yXSBzZXRdOworICAgICAg
ICAgICAgTlNSZWN0RmlsbCAocmVjdCk7CisgICAgICAgIH0KKworICAgICAgICBbW3NlbGYgX2Zy
YW1lXSBfZHJhd1JlY3Q6cmVjdCBjb250ZW50c09ubHk6WUVTXTsKKworICAgICAgICBXZWJWaWV3
ICp3ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOworCisgICAgICAgIC8vIFRoaXMgaGFjayBpcyBu
ZWVkZWQgZm9yIDxyZGFyOi8vcHJvYmxlbS81MDIzNTQ1Pi4gV2UgY2FuIGhpdCBhIHJhY2UgY29u
ZGl0aW9uIHdoZXJlIGRyYXdSZWN0IHdpbGwgYmUKKyAgICAgICAgLy8gY2FsbGVkIGFmdGVyIHRo
ZSBXZWJWaWV3IGhhcyBjbG9zZWQuIElmIHRoZSBjbGllbnQgZGlkIG5vdCBwcm9wZXJseSBjbG9z
ZSB0aGUgV2ViVmlldyBhbmQgc2V0IHRoZSAKKyAgICAgICAgLy8gVUlEZWxlZ2F0ZSB0byBuaWws
IHRoZW4gdGhlIFVJRGVsZWdhdGUgd2lsbCBiZSBzdGFsZSBhbmQgdGhpcyBjb2RlIHdpbGwgY3Jh
c2guIAorICAgICAgICBzdGF0aWMgQk9PTCB2ZXJzaW9uM09yTGF0ZXJDbGllbnQgPSBXZWJLaXRM
aW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9RVUlDS0JPT0tTX1FV
SVJLKTsKKyAgICAgICAgaWYgKHZlcnNpb24zT3JMYXRlckNsaWVudCkKKyAgICAgICAgICAgIFtb
d2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IGRpZERyYXdSZWN0
Olt3ZWJWaWV3IGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6c2VsZl1dOworCisgICAgICAgIGlm
IChXZWJOb2RlSGlnaGxpZ2h0ICpjdXJyZW50SGlnaGxpZ2h0ID0gW3dlYlZpZXcgY3VycmVudE5v
ZGVIaWdobGlnaHRdKQorICAgICAgICAgICAgW2N1cnJlbnRIaWdobGlnaHQgc2V0TmVlZHNVcGRh
dGVJblRhcmdldFZpZXdSZWN0OltzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3OltjdXJyZW50
SGlnaGxpZ2h0IHRhcmdldFZpZXddXV07CisKKyAgICAgICAgWyhXZWJDbGlwVmlldyAqKVtzZWxm
IHN1cGVydmlld10gcmVzZXRBZGRpdGlvbmFsQ2xpcF07CisKKyAgICAgICAgW05TR3JhcGhpY3ND
b250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24g
KmxvY2FsRXhjZXB0aW9uKSB7CisgICAgICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZp
ZXddIHJlc2V0QWRkaXRpb25hbENsaXBdOworICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVz
dG9yZUdyYXBoaWNzU3RhdGVdOworICAgICAgICBMT0dfRVJST1IoIkV4Y2VwdGlvbiBjYXVnaHQg
d2hpbGUgZHJhd2luZzogJUAiLCBsb2NhbEV4Y2VwdGlvbik7CisgICAgICAgIFtsb2NhbEV4Y2Vw
dGlvbiByYWlzZV07CisgICAgfQorfQorCistICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAor
eworICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOworICAgIExPRyhWaWV3LCAiJUAgZHJhd2luZyIs
IHNlbGYpOworCisgICAgY29uc3QgTlNSZWN0ICpyZWN0czsKKyAgICBOU0ludGVnZXIgY291bnQ7
CisgICAgW3NlbGYgZ2V0UmVjdHNCZWluZ0RyYXduOiZyZWN0cyBjb3VudDomY291bnRdOworCisg
ICAgQk9PTCBzdWJ2aWV3c1dlcmVTZXRBc2lkZSA9IF9wcml2YXRlLT5zdWJ2aWV3c1NldEFzaWRl
OworICAgIGlmIChzdWJ2aWV3c1dlcmVTZXRBc2lkZSkKKyAgICAgICAgW3NlbGYgX3Jlc3RvcmVT
dWJ2aWV3c107CisKKyNpZmRlZiBMT0dfVElNRVMKKyAgICBkb3VibGUgc3RhcnQgPSBDRkFic29s
dXRlVGltZUdldEN1cnJlbnQoKTsKKyNlbmRpZgorCisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10g
X211c3REcmF3VW5pb25lZFJlY3Q6cmVjdCBzaW5nbGVSZWN0czpyZWN0cyBjb3VudDpjb3VudF0p
CisgICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJlY3RdOworICAgIGVsc2UKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQorICAgICAgICAgICAgW3NlbGYgZHJhd1Np
bmdsZVJlY3Q6cmVjdHNbaV1dOworCisjaWZkZWYgTE9HX1RJTUVTCisgICAgZG91YmxlIHRoaXNU
aW1lID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKKyAgICBMT0coVGltaW5n
LCAiJXMgZHJhdyBzZWNvbmRzID0gJWYiLCB3aWRnZXQtPnBhcnQoKS0+YmFzZVVSTCgpLlVSTCgp
LmxhdGluMSgpLCB0aGlzVGltZSk7CisjZW5kaWYKKworICAgIGlmIChzdWJ2aWV3c1dlcmVTZXRB
c2lkZSkKKyAgICAgICAgW3NlbGYgX3NldEFzaWRlU3Vidmlld3NdOworICAgICAgICAKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX25l
ZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb25dKSB7CisgICAgICAgIC8vIERpc2FibGUg
c2NyZWVuIHVwZGF0ZXMgc28gdGhhdCBkcmF3aW5nIGludG8gdGhlIE5TVmlldyBhbmQKKyAgICAg
ICAgLy8gQ0FMYXllciB1cGRhdGVzIGFwcGVhciBvbiB0aGUgc2NyZWVuIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgICAgIFtbc2VsZiB3aW5kb3ddIGRpc2FibGVTY3JlZW5VcGRhdGVzVW50aWxGbHVz
aF07CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGZsdXNoXTsKKyAgICAgICAgW1tzZWxmIF93ZWJW
aWV3XSBfc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjpOT107CisgICAgfQor
I2VuZGlmCit9CisKKy8vIFR1cm4gb2ZmIHRoZSBhZGRpdGlvbmFsIGNsaXAgd2hpbGUgY29tcHV0
aW5nIG91ciB2aXNpYmxlUmVjdC4KKy0gKE5TUmVjdCl2aXNpYmxlUmVjdAoreworICAgIGlmICgh
KFtbc2VsZiBzdXBlcnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNsaXBWaWV3IGNsYXNzXV0pKQor
ICAgICAgICByZXR1cm4gW3N1cGVyIHZpc2libGVSZWN0XTsKKyAgICAgICAgCisgICAgV2ViQ2xp
cFZpZXcgKmNsaXBWaWV3ID0gKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XTsKKworICAg
IEJPT0wgaGFzQWRkaXRpb25hbENsaXAgPSBbY2xpcFZpZXcgaGFzQWRkaXRpb25hbENsaXBdOwor
ICAgIGlmICghaGFzQWRkaXRpb25hbENsaXApIHsKKyAgICAgICAgcmV0dXJuIFtzdXBlciB2aXNp
YmxlUmVjdF07CisgICAgfQorICAgIAorICAgIE5TUmVjdCBhZGRpdGlvbmFsQ2xpcCA9IFtjbGlw
VmlldyBhZGRpdGlvbmFsQ2xpcF07CisgICAgW2NsaXBWaWV3IHJlc2V0QWRkaXRpb25hbENsaXBd
OworICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtzdXBlciB2aXNpYmxlUmVjdF07CisgICAgW2Ns
aXBWaWV3IHNldEFkZGl0aW9uYWxDbGlwOmFkZGl0aW9uYWxDbGlwXTsKKyAgICByZXR1cm4gdmlz
aWJsZVJlY3Q7Cit9CisKKy0gKEJPT0wpaXNGbGlwcGVkIAoreworICAgIHJldHVybiBZRVM7Cit9
CisKKy0gKHZvaWQpd2luZG93RGlkQmVjb21lS2V5OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNh
dGlvbgoreworICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKKyAgICAgICAgW3NlbGYgcGVy
Zm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVjdDpub3RpZmljYXRpb24gd2Fp
dFVudGlsRG9uZTpOT107CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBOU1dpbmRvdyAq
a2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3RdOworCisgICAgaWYgKGtleVdpbmRvdyA9
PSBbc2VsZiB3aW5kb3ddKQorICAgICAgICBbc2VsZiBhZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOwor
CisgICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGtleVdpbmRvdyA9PSBbW3Nl
bGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkKKyAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRB
bmRBY3RpdmVTdGF0ZV07Cit9CisKKy0gKHZvaWQpd2luZG93RGlkUmVzaWduS2V5OihOU05vdGlm
aWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsK
KyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVj
dDpub3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBOU1dpbmRvdyAqZm9ybWVyS2V5V2luZG93ID0gW25vdGlmaWNhdGlvbiBvYmplY3Rd
OworCisgICAgaWYgKGZvcm1lcktleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddKQorICAgICAgICBb
c2VsZiByZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJdOworCisgICAgaWYgKGZvcm1lcktleVdpbmRv
dyA9PSBbc2VsZiB3aW5kb3ddIHx8IGZvcm1lcktleVdpbmRvdyA9PSBbW3NlbGYgd2luZG93XSBh
dHRhY2hlZFNoZWV0XSkgeworICAgICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0
YXRlXTsKKyAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFu
Z2U6Tk8gbW92ZUxlZnQ6Tk9dOworICAgIH0KK30KKworLSAodm9pZCl3aW5kb3dXaWxsQ2xvc2U6
KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKCFwdGhyZWFkX21haW5f
bnAoKSkgeworICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6X2NtZCB3
aXRoT2JqZWN0Om5vdGlmaWNhdGlvbiB3YWl0VW50aWxEb25lOk5PXTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hh
bmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ry
b3lBbGxQbHVnaW5zXTsKK30KKworLSAodm9pZCl3aW5kb3dXaWxsT3JkZXJPblNjcmVlbjooTlNO
b3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBpZiAoIVtbc2VsZiBfd2ViVmlld10g
c2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW5dKQorICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3Bs
YXk6WUVTXTsKK30KKworLSAodm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50Cit7Cisg
ICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxs
IHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVu
dCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVh
c2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5n
IGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0
YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5ldmVudEhhbmRsZXIoKS0+d2hlZWxFdmVu
dChldmVudCkpCisgICAgICAgIFtzdXBlciBzY3JvbGxXaGVlbDpldmVudF07Cit9CisKKy0gKEJP
T0wpX2lzU2VsZWN0aW9uRXZlbnQ6KE5TRXZlbnQgKilldmVudAoreworICAgIE5TUG9pbnQgcG9p
bnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3
Om5pbF07CisgICAgcmV0dXJuIFtbW3NlbGYgZWxlbWVudEF0UG9pbnQ6cG9pbnQgYWxsb3dTaGFk
b3dDb250ZW50OllFU10gb2JqZWN0Rm9yS2V5OldlYkVsZW1lbnRJc1NlbGVjdGVkS2V5XSBib29s
VmFsdWVdOworfQorCistIChCT09MKWFjY2VwdHNGaXJzdE1vdXNlOihOU0V2ZW50ICopZXZlbnQK
K3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50
IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3
IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRv
cmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNh
dXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVu
dCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIE5TVmlldyAqaGl0VmlldyA9IFtzZWxmIF9o
aXRWaWV3Rm9yRXZlbnQ6ZXZlbnRdOworICAgIFdlYkhUTUxWaWV3ICpoaXRIVE1MVmlldyA9IFto
aXRWaWV3IGlzS2luZE9mQ2xhc3M6W3NlbGYgY2xhc3NdXSA/IChXZWJIVE1MVmlldyAqKWhpdFZp
ZXcgOiBuaWw7CisgICAgCisjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIGlmIChb
W3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpXZWJEYXNoYm9hcmRCZWhhdmlvckFs
d2F5c0FjY2VwdHNGaXJzdE1vdXNlXSkKKyAgICAgICAgcmV0dXJuIFlFUzsKKyNlbmRpZgorICAg
IAorICAgIGlmIChoaXRIVE1MVmlldykgeworICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwor
ICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2hpdEhUTUxWaWV3IF9mcmFtZV0p
KSB7CisgICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRBY3RpdmF0aW9u
RXZlbnROdW1iZXIoW2V2ZW50IGV2ZW50TnVtYmVyXSk7CisgICAgICAgICAgICBbaGl0SFRNTFZp
ZXcgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKKyAgICAgICAgICAgIGlmIChbaGl0SFRNTFZp
ZXcgX2lzU2VsZWN0aW9uRXZlbnQ6ZXZlbnRdKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNv
cmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmV2ZW50TWF5U3RhcnREcmFnKGV2ZW50KTsKKyAgICAg
ICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gW2hpdFZpZXcgYWNjZXB0
c0ZpcnN0TW91c2U6ZXZlbnRdOworfQorCistIChCT09MKXNob3VsZERlbGF5V2luZG93T3JkZXJp
bmdGb3JFdmVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0
aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29w
LCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQg
b25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50
IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0
IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAg
ICBOU1ZpZXcgKmhpdFZpZXcgPSBbc2VsZiBfaGl0Vmlld0ZvckV2ZW50OmV2ZW50XTsKKyAgICBX
ZWJIVE1MVmlldyAqaGl0SFRNTFZpZXcgPSBbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltzZWxmIGNs
YXNzXV0gPyAoV2ViSFRNTFZpZXcgKiloaXRWaWV3IDogbmlsOworICAgIGlmIChoaXRIVE1MVmll
dykgeworICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBpZiAoW2hpdEhUTUxW
aWV3IF9pc1NlbGVjdGlvbkV2ZW50OmV2ZW50XSkKKyAgICAgICAgICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbaGl0SFRNTFZpZXcgX2ZyYW1lXSkpIHsKKyAgICAgICAgICAgICAgICBb
aGl0SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5ldmVudE1heVN0YXJ0RHJhZyhldmVu
dCk7CisgICAgICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpuaWxd
OworICAgICAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXR1
cm4gW2hpdFZpZXcgc2hvdWxkRGVsYXlXaW5kb3dPcmRlcmluZ0ZvckV2ZW50OmV2ZW50XTsKK30K
KworLSAodm9pZCltb3VzZURvd246KE5TRXZlbnQgKilldmVudAoreworICAgIC8vIFRoZXJlJ3Mg
YSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQg
ZXZlbnQgbG9vcCwgYW5kCisgICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFz
ZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKKyAgICAvLyB0
aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5z
aWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KKyAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVh
c2VdOworCisgICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBwcm90ZWN0b3IgPSBzZWxmOworICAg
IGlmIChbW3NlbGYgaW5wdXRDb250ZXh0XSB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtb
c2VsZiBpbnB1dENvbnRleHRdIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1
cm47CisKKyAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlFUzsKKworICAg
IC8vIFJlY29yZCB0aGUgbW91c2UgZG93biBwb3NpdGlvbiBzbyB3ZSBjYW4gZGV0ZXJtaW5lIGRy
YWcgaHlzdGVyZXNpcy4KKyAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6ZXZlbnRdOworCisg
ICAgTlNJbnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIg
Y3VycmVudElucHV0TWFuYWdlcl07CisgICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRz
VG9IYW5kbGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VF
dmVudDpldmVudF0pCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIFtfcHJpdmF0ZS0+Y29tcENv
bnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKworICAgIC8vIElm
IHRoZSB3ZWIgcGFnZSBoYW5kbGVzIHRoZSBjb250ZXh0IG1lbnUgZXZlbnQgYW5kIG1lbnVGb3JF
dmVudDogcmV0dXJucyBuaWwsIHdlJ2xsIGdldCBjb250cm9sIGNsaWNrIGV2ZW50cyBoZXJlLgor
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFzcyB0aGVtIGFsb25nIHRvIEtIVE1MIGEgc2Vjb25k
IHRpbWUuCisgICAgaWYgKCEoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFz
aykpIHsKKyAgICAgICAgX3ByaXZhdGUtPmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzID0gTk87
CisKKyAgICAgICAgLy8gRG9uJ3QgZG8gYW55IG1vdXNlb3ZlciB3aGlsZSB0aGUgbW91c2UgaXMg
ZG93bi4KKyAgICAgICAgW3NlbGYgX2NhbmNlbFVwZGF0ZU1vdXNlb3ZlclRpbWVyXTsKKworICAg
ICAgICAvLyBMZXQgV2ViQ29yZSBnZXQgYSBjaGFuY2UgdG8gZGVhbCB3aXRoIHRoZSBldmVudC4g
VGhpcyB3aWxsIGNhbGwgYmFjayB0byB1cworICAgICAgICAvLyB0byBzdGFydCB0aGUgYXV0b3Nj
cm9sbCB0aW1lciBpZiBhcHByb3ByaWF0ZS4KKyAgICAgICAgaWYgKEZyYW1lKiBjb3JlZnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICAgICAgY29yZWZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+bW91c2VEb3duKGV2ZW50KTsKKyAgICB9CisKK2RvbmU6CisgICAgX3ByaXZhdGUtPmhh
bmRsaW5nTW91c2VEb3duRXZlbnQgPSBOTzsKK30KKworLSAodm9pZClkcmFnSW1hZ2U6KE5TSW1h
Z2UgKilkcmFnSW1hZ2UKKyAgICAgICAgICAgICAgIGF0OihOU1BvaW50KWF0CisgICAgICAgICAg
IG9mZnNldDooTlNTaXplKW9mZnNldAorICAgICAgICAgICAgZXZlbnQ6KE5TRXZlbnQgKilldmVu
dAorICAgICAgIHBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKKyAgICAgICAg
ICAgc291cmNlOihpZClzb3VyY2UKKyAgICAgICAgc2xpZGVCYWNrOihCT09MKXNsaWRlQmFjawor
eworICAgIEFTU0VSVChzZWxmID09IFtzZWxmIF90b3BIVE1MVmlld10pOworICAgIFtzdXBlciBk
cmFnSW1hZ2U6ZHJhZ0ltYWdlIGF0OmF0IG9mZnNldDpvZmZzZXQgZXZlbnQ6ZXZlbnQgcGFzdGVi
b2FyZDpwYXN0ZWJvYXJkIHNvdXJjZTpzb3VyY2Ugc2xpZGVCYWNrOnNsaWRlQmFja107Cit9CisK
Ky0gKHZvaWQpbW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVk
IGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVh
c2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8g
dGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGlu
c2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5w
dXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAgIGlmIChbY3VycmVudElucHV0TWFu
YWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhh
bmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm47CisKKyAgICBbc2VsZiByZXRh
aW5dOworCisgICAgaWYgKCFfcHJpdmF0ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMpIHsK
KyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAg
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgICAgICAgICBw
YWdlLT5tYWluRnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRHJhZ2dlZChldmVudCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBbc2VsZiByZWxlYXNlXTsKK30KKworLSAoTlNEcmFnT3Bl
cmF0aW9uKWRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza0ZvckxvY2FsOihCT09MKWlzTG9jYWwK
K3sKKyAgICBBU1NFUlQoIVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10p
OworICAgIAorICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7CisgICAgaWYg
KCFwYWdlKQorICAgICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uTm9uZTsKKworICAgIC8vIEZJ
WE1FOiBXaHkgZG8gd2Ugb3ZlcnJpZGUgdGhlIHNvdXJjZSBwcm92aWRlZCBvcGVyYXRpb24gaGVy
ZT8gIFdoeSBub3QgaW4gRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZworICAgIGlmIChwYWdlLT5k
cmFnQ29udHJvbGxlcigpLT5zb3VyY2VEcmFnT3BlcmF0aW9uKCkgPT0gRHJhZ09wZXJhdGlvbk5v
bmUpCisgICAgICAgIHJldHVybiBOU0RyYWdPcGVyYXRpb25HZW5lcmljIHwgTlNEcmFnT3BlcmF0
aW9uQ29weTsKKworICAgIHJldHVybiAoTlNEcmFnT3BlcmF0aW9uKXBhZ2UtPmRyYWdDb250cm9s
bGVyKCktPnNvdXJjZURyYWdPcGVyYXRpb24oKTsKK30KKworLSAodm9pZClkcmFnZ2VkSW1hZ2U6
KE5TSW1hZ2UgKilpbWFnZSBtb3ZlZFRvOihOU1BvaW50KXNjcmVlbkxvYworeworICAgIEFTU0VS
VCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7CisgICAgCisgICAg
TlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jh
c2U6c2NyZWVuTG9jXTsKKyAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93SW1hZ2VM
b2M7CisgICAgCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSkpIHsK
KyAgICAgICAgRHJhZ0NvbnRyb2xsZXIqIGRyYWdDb250cm9sbGVyID0gcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKTsKKyAgICAgICAgTlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IE5TTWFrZVBvaW50KHdp
bmRvd0ltYWdlTG9jLnggKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLngoKSwgd2luZG93
SW1hZ2VMb2MueSArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueSgpKTsKKyAgICB9Cisg
ICAgCisgICAgW1tzZWxmIF9mcmFtZV0gX2RyYWdTb3VyY2VNb3ZlZFRvOndpbmRvd01vdXNlTG9j
XTsKK30KKworLSAodm9pZClkcmFnZ2VkSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGVuZGVkQXQ6
KE5TUG9pbnQpYVBvaW50IG9wZXJhdGlvbjooTlNEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbgorewor
ICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3XSk7Cisg
ICAgCisgICAgTlNQb2ludCB3aW5kb3dJbWFnZUxvYyA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRT
Y3JlZW5Ub0Jhc2U6YVBvaW50XTsKKyAgICBOU1BvaW50IHdpbmRvd01vdXNlTG9jID0gd2luZG93
SW1hZ2VMb2M7CisgICAgCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3
XSkpIHsKKyAgICAgICAgRHJhZ0NvbnRyb2xsZXIqIGRyYWdDb250cm9sbGVyID0gcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKTsKKyAgICAgICAgd2luZG93TW91c2VMb2MgPSBOU01ha2VQb2ludCh3aW5k
b3dJbWFnZUxvYy54ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS54KCksIHdpbmRvd0lt
YWdlTG9jLnkgKyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLnkoKSk7CisgICAgICAgIGRy
YWdDb250cm9sbGVyLT5kcmFnRW5kZWQoKTsKKyAgICB9CisgICAgCisgICAgW1tzZWxmIF9mcmFt
ZV0gX2RyYWdTb3VyY2VFbmRlZEF0OndpbmRvd01vdXNlTG9jIG9wZXJhdGlvbjpvcGVyYXRpb25d
OworICAgIAorICAgIC8vIFByZXZlbnQgcXVldWVkIG1vdXNlRHJhZ2dlZCBldmVudHMgZnJvbSBj
b21pbmcgYWZ0ZXIgdGhlIGRyYWcgYW5kIGZha2UgbW91c2VVcCBldmVudC4KKyAgICBfcHJpdmF0
ZS0+aWdub3JpbmdNb3VzZURyYWdnZWRFdmVudHMgPSBZRVM7CisgICAgCisgICAgLy8gT25jZSB0
aGUgZHJhZ2dpbmcgbWFjaGluZXJ5IGtpY2tzIGluLCB3ZSBubyBsb25nZXIgZ2V0IG1vdXNlIGRy
YWdzIG9yIHRoZSB1cCBldmVudC4KKyAgICAvLyBXZWJDb3JlIGV4cGVjdHMgdG8gZ2V0IGJhbGFu
Y2VkIGRvd24vdXAncywgc28gd2UgbXVzdCBmYWtlIHVwIGEgbW91c2V1cC4KKyAgICBOU0V2ZW50
ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6TlNMZWZ0TW91c2VVcAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjp3aW5k
b3dNb3VzZUxvYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZp
ZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50
ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2luZG93TnVtYmVyOltbc2VsZiB3aW5kb3ddIHdpbmRvd051bWJlcl0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBj
dXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgIFtzZWxm
IG1vdXNlVXA6ZmFrZUV2ZW50XTsgLy8gVGhpcyB3aWxsIGFsc28gdXBkYXRlIHRoZSBtb3VzZW92
ZXIgc3RhdGUuCit9CisKKy0gKE5TQXJyYXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRB
dERlc3RpbmF0aW9uOihOU1VSTCAqKWRyb3BEZXN0aW5hdGlvbgoreworICAgIE5TRmlsZVdyYXBw
ZXIgKndyYXBwZXIgPSBuaWw7CisgICAgTlNVUkwgKmRyYWdnaW5nSW1hZ2VVUkwgPSBuaWw7Cisg
ICAgCisgICAgaWYgKFdlYkNvcmU6OkNhY2hlZEltYWdlKiB0aWZmUmVzb3VyY2UgPSBbc2VsZiBw
cm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZV0pIHsKKyAgICAgICAgCisgICAgICAgIFNoYXJlZEJ1
ZmZlciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8Q2FjaGVkUmVzb3VyY2UqPih0aWZmUmVzb3VyY2Up
LT5kYXRhKCk7CisgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgZ290byBub1Byb21p
c2VkRGF0YTsKKyAgICAgICAgCisgICAgICAgIE5TRGF0YSAqZGF0YSA9IGJ1ZmZlci0+Y3JlYXRl
TlNEYXRhKCk7CisgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gdGlmZlJlc291cmNl
LT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKTsKKyAgICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9
IFtyZXNwb25zZSBVUkxdOworICAgICAgICB3cmFwcGVyID0gW1tbTlNGaWxlV3JhcHBlciBhbGxv
Y10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdIGF1dG9yZWxlYXNlXTsKKyAgICAg
ICAgTlNTdHJpbmcqIGZpbGVuYW1lID0gW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXTsKKyAg
ICAgICAgTlNTdHJpbmcqIHRydWVFeHRlbnNpb24odGlmZlJlc291cmNlLT5pbWFnZSgpLT5maWxl
bmFtZUV4dGVuc2lvbigpKTsKKyAgICAgICAgaWYgKCFbZmlsZW5hbWUgbWF0Y2hlc0V4dGVuc2lv
bkVxdWl2YWxlbnQ6dHJ1ZUV4dGVuc2lvbl0pCisgICAgICAgICAgICBmaWxlbmFtZSA9IFtbZmls
ZW5hbWUgc3RyaW5nQnlBcHBlbmRpbmdTdHJpbmc6QCIuIl0gc3RyaW5nQnlBcHBlbmRpbmdTdHJp
bmc6dHJ1ZUV4dGVuc2lvbl07CisgICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1l
OmZpbGVuYW1lXTsKKyAgICB9CisgICAgCitub1Byb21pc2VkRGF0YToKKyAgICAKKyAgICBpZiAo
IXdyYXBwZXIpIHsKKyAgICAgICAgQVNTRVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lz
VG9wSFRNTFZpZXddKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGNvcmUoW3NlbGYgX3dlYlZpZXdd
KTsKKyAgICAgICAgCisgICAgICAgIC8vSWYgYSBsb2FkIG9jY3VycyBtaWR3YXkgdGhyb3VnaCBh
IGRyYWcsIHRoZSB2aWV3IG1heSBiZSBkZXRhY2hlZCwgd2hpY2ggZ2l2ZXMKKyAgICAgICAgLy91
cyBubyBhYmlsaXR5IHRvIGdldCB0byB0aGUgb3JpZ2luYWwgUGFnZSwgc28gd2UgY2Fubm90IGFj
Y2VzcyBhbnkgZHJhZyBzdGF0ZQorICAgICAgICAvL0ZJWE1FOiBpcyB0aGVyZSBhIHdheSB0byBy
ZWNvdmVyPworICAgICAgICBpZiAoIXBhZ2UpIAorICAgICAgICAgICAgcmV0dXJuIG5pbDsgCisg
ICAgICAgIAorICAgICAgICBjb25zdCBLVVJMJiBpbWFnZVVSTCA9IHBhZ2UtPmRyYWdDb250cm9s
bGVyKCktPmRyYWdnaW5nSW1hZ2VVUkwoKTsKKyAgICAgICAgQVNTRVJUKCFpbWFnZVVSTC5pc0Vt
cHR5KCkpOworICAgICAgICBkcmFnZ2luZ0ltYWdlVVJMID0gaW1hZ2VVUkw7CisKKyAgICAgICAg
d3JhcHBlciA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2ZpbGVXcmFwcGVyRm9yVVJMOmRyYWdnaW5n
SW1hZ2VVUkxdOworICAgIH0KKyAgICAKKyAgICBpZiAod3JhcHBlciA9PSBuaWwpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGltYWdlIGZpbGUuIik7CisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgfQorCisgICAgLy8gRklYTUU6IFJlcG9ydCBhbiBlcnJvciBpZiB3ZSBm
YWlsIHRvIGNyZWF0ZSBhIGZpbGUuCisgICAgTlNTdHJpbmcgKnBhdGggPSBbW2Ryb3BEZXN0aW5h
dGlvbiBwYXRoXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W3dyYXBwZXIgcHJlZmVy
cmVkRmlsZW5hbWVdXTsKKyAgICBwYXRoID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBfd2Via2l0X3BhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRoOnBhdGhdOworICAgIGlmICgh
W3dyYXBwZXIgd3JpdGVUb0ZpbGU6cGF0aCBhdG9taWNhbGx5Ok5PIHVwZGF0ZUZpbGVuYW1lczpZ
RVNdKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZSB2aWEg
LVtOU0ZpbGVXcmFwcGVyIHdyaXRlVG9GaWxlOmF0b21pY2FsbHk6dXBkYXRlRmlsZW5hbWVzOl0i
KTsKKyAgICAKKyAgICBpZiAoZHJhZ2dpbmdJbWFnZVVSTCkKKyAgICAgICAgW1tOU0ZpbGVNYW5h
Z2VyIGRlZmF1bHRNYW5hZ2VyXSBfd2Via2l0X3NldE1ldGFkYXRhVVJMOltkcmFnZ2luZ0ltYWdl
VVJMIGFic29sdXRlU3RyaW5nXSByZWZlcnJlcjpuaWwgYXRQYXRoOnBhdGhdOworICAgIAorICAg
IHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3BhdGggbGFzdFBhdGhDb21wb25lbnRd
XTsKK30KKworLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVy
ZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVz
dGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJl
bGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAg
Ly8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVt
IGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9y
ZWxlYXNlXTsKKworICAgIFtzZWxmIF9zZXRNb3VzZURvd25FdmVudDpuaWxdOworCisgICAgTlNJ
bnB1dE1hbmFnZXIgKmN1cnJlbnRJbnB1dE1hbmFnZXIgPSBbTlNJbnB1dE1hbmFnZXIgY3VycmVu
dElucHV0TWFuYWdlcl07CisgICAgaWYgKFtjdXJyZW50SW5wdXRNYW5hZ2VyIHdhbnRzVG9IYW5k
bGVNb3VzZUV2ZW50c10gJiYgW2N1cnJlbnRJbnB1dE1hbmFnZXIgaGFuZGxlTW91c2VFdmVudDpl
dmVudF0pCisgICAgICAgIHJldHVybjsKKworICAgIFtzZWxmIHJldGFpbl07CisKKyAgICBbc2Vs
ZiBfc3RvcEF1dG9zY3JvbGxUaW1lcl07CisgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpKQor
ICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5tb3VzZVVwKGV2
ZW50KTsKKyAgICB9CisgICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwor
CisgICAgW3NlbGYgcmVsZWFzZV07Cit9CisKKy0gKHZvaWQpbW91c2VNb3ZlZE5vdGlmaWNhdGlv
bjooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiBfdXBkYXRlTW91
c2VvdmVyV2l0aEV2ZW50Oltbbm90aWZpY2F0aW9uIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJO
U0V2ZW50Il1dOworfQorCisvLyByZXR1cm5pbmcgWUVTIGZyb20gdGhpcyBtZXRob2QgaXMgdGhl
IHdheSB3ZSB0ZWxsIEFwcEtpdCB0aGF0IGl0IGlzIG9rIGZvciB0aGlzIHZpZXcKKy8vIHRvIGJl
IGluIHRoZSBrZXkgbG9vcCBldmVuIHdoZW4gInRhYiB0byBhbGwgY29udHJvbHMiIGlzIG5vdCBv
bi4KKy0gKEJPT0wpbmVlZHNQYW5lbFRvQmVjb21lS2V5Cit7CisgICAgcmV0dXJuIFlFUzsKK30K
KworLy8gVXRpbGl0eSBmdW5jdGlvbiB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgcmV0dXJuIGFueXRo
aW5nIHRocm91Z2ggdGhlIE5TVGV4dElucHV0CisvLyBBUEkgd2hlbiBhbiBlZGl0YWJsZSByZWdp
b24gaXMgbm90IGN1cnJlbnRseSBmb2N1c2VkLgorc3RhdGljIEJPT0wgaXNUZXh0SW5wdXQoRnJh
bWUqIGNvcmVGcmFtZSkKK3sKKyAgICByZXR1cm4gY29yZUZyYW1lICYmICFjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLT5pc05vbmUoKSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRF
ZGl0YWJsZSgpOworfQorCitzdGF0aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29y
ZUZyYW1lKQoreworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+aXNJblBhc3N3b3JkRmllbGQoKTsKK30KKworLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRl
cgoreworICAgIE5TU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IE5TRGlyZWN0U2VsZWN0
aW9uOworICAgIGlmICghW1tzZWxmIF93ZWJWaWV3XSBfaXNQZXJmb3JtaW5nUHJvZ3JhbW1hdGlj
Rm9jdXNdKQorICAgICAgICBkaXJlY3Rpb24gPSBbW3NlbGYgd2luZG93XSBrZXlWaWV3U2VsZWN0
aW9uRGlyZWN0aW9uXTsKKworICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVd
OworICAgIFtzZWxmIF91cGRhdGVGb250UGFuZWxdOworICAgIAorICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFlF
UzsKKworICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0ID0gaXNUZXh0SW5wdXQoZnJhbWUpICYm
ICFpc0luUGFzc3dvcmRGaWVsZChmcmFtZSk7CisgICAgaWYgKGV4cG9zZUlucHV0Q29udGV4dCAh
PSBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7CisgICAgICAgIF9wcml2YXRlLT5leHBv
c2VJbnB1dENvbnRleHQgPSBleHBvc2VJbnB1dENvbnRleHQ7CisgICAgICAgIFtOU0FwcCB1cGRh
dGVXaW5kb3dzXTsKKyAgICB9CisKKyAgICBmcmFtZS0+ZWRpdG9yKCktPnNldFN0YXJ0TmV3S2ls
bFJpbmdTZXF1ZW5jZSh0cnVlKTsKKworICAgIGlmIChkaXJlY3Rpb24gPT0gTlNEaXJlY3RTZWxl
Y3Rpb24pCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBh
Z2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKGZyYW1lKTsKKyAgICBpZiAoRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50LT5zZXRG
b2N1c2VkTm9kZSgwKTsKKyAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0SW5pdGlhbEZv
Y3VzKGRpcmVjdGlvbiA9PSBOU1NlbGVjdGluZ05leHQgPyBGb2N1c0RpcmVjdGlvbkZvcndhcmQg
OiBGb2N1c0RpcmVjdGlvbkJhY2t3YXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5jdXJyZW50S2V5Ym9hcmRFdmVu
dCgpLmdldCgpKTsKKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKXJlc2lnbkZpcnN0UmVz
cG9uZGVyCit7CisgICAgQk9PTCByZXNpZ24gPSBbc3VwZXIgcmVzaWduRmlyc3RSZXNwb25kZXJd
OworICAgIGlmIChyZXNpZ24pIHsKKyAgICAgICAgX3ByaXZhdGUtPnJlc2lnbmluZ0ZpcnN0UmVz
cG9uZGVyID0gWUVTOworICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVy
dGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisgICAgICAgIGlmICghW3NlbGYgbWFpbnRhaW5z
SW5hY3RpdmVTZWxlY3Rpb25dKSB7IAorICAgICAgICAgICAgW3NlbGYgZGVzZWxlY3RBbGxdOwor
ICAgICAgICAgICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIF9pc1BlcmZvcm1pbmdQcm9ncmFtbWF0
aWNGb2N1c10pCisgICAgICAgICAgICAgICAgW3NlbGYgY2xlYXJGb2N1c107CisgICAgICAgIH0K
KyAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07CisgICAgICAgIF9w
cml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9IE5POworICAgIH0KKyAgICByZXR1cm4g
cmVzaWduOworfQorCistICh2b2lkKXNldERhdGFTb3VyY2U6KFdlYkRhdGFTb3VyY2UgKilkYXRh
U291cmNlIAoreworICAgIEFTU0VSVChkYXRhU291cmNlKTsKKyAgICBpZiAoX3ByaXZhdGUtPmRh
dGFTb3VyY2UgIT0gZGF0YVNvdXJjZSkgeworICAgICAgICBBU1NFUlQoIV9wcml2YXRlLT5jbG9z
ZWQpOworICAgICAgICBCT09MIGhhZERhdGFTb3VyY2UgPSBfcHJpdmF0ZS0+ZGF0YVNvdXJjZSAh
PSBuaWw7CisKKyAgICAgICAgW2RhdGFTb3VyY2UgcmV0YWluXTsKKyAgICAgICAgW19wcml2YXRl
LT5kYXRhU291cmNlIHJlbGVhc2VdOworICAgICAgICBfcHJpdmF0ZS0+ZGF0YVNvdXJjZSA9IGRh
dGFTb3VyY2U7CisgICAgICAgIFtfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciBzZXREYXRhU291
cmNlOmRhdGFTb3VyY2VdOworCisgICAgICAgIGlmICghaGFkRGF0YVNvdXJjZSkKKyAgICAgICAg
ICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNlcnZlcl07CisgICAgfQorfQorCistICh2b2lkKWRh
dGFTb3VyY2VVcGRhdGVkOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZQoreworfQorCisvLyBU
aGlzIGlzIGFuIG92ZXJyaWRlIG9mIGFuIE5TQ29udHJvbCBtZXRob2QgdGhhdCB3YW50cyB0byBy
ZXBhaW50IHRoZSBlbnRpcmUgdmlldyB3aGVuIHRoZSB3aW5kb3cgcmVzaWducy9iZWNvbWVzCisv
LyBrZXkuICBXZWJIVE1MVmlldyBpcyBhbiBOU0NvbnRyb2wgb25seSBiZWNhdXNlIGl0IGhvc3Rz
IE5TQ2VsbHMgdGhhdCBhcmUgcGFpbnRlZCBieSBXZWJDb3JlJ3MgQXF1YSB0aGVtZQorLy8gcmVu
ZGVyZXIgKGFuZCB0aG9zZSBjZWxscyBtdXN0IGJlIGhvc3RlZCBieSBhbiBlbmNsb3NpbmcgTlND
b250cm9sIGluIG9yZGVyIHRvIHBhaW50IHByb3Blcmx5KS4KKy0gKHZvaWQpdXBkYXRlQ2VsbDoo
TlNDZWxsKiljZWxsCit7Cit9CisKKy8vIERvZXMgc2V0TmVlZHNEaXNwbGF5Ok5PIGFzIGEgc2lk
ZSBlZmZlY3Qgd2hlbiBwcmludGluZyBpcyBlbmRpbmcuCisvLyBwYWdlV2lkdGggIT0gMCBpbXBs
aWVzIHdlIHdpbGwgcmVsYXlvdXQgdG8gYSBuZXcgd2lkdGgKKy0gKHZvaWQpX3NldFByaW50aW5n
OihCT09MKXByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6KGZsb2F0KW1pblBhZ2VXaWR0aCBtYXhp
bXVtUGFnZVdpZHRoOihmbG9hdCltYXhQYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6KEJPT0wpYWRq
dXN0Vmlld1NpemUKK3sKKyAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAg
IE5TQXJyYXkgKnN1YmZyYW1lcyA9IFtmcmFtZSBjaGlsZEZyYW1lc107CisgICAgdW5zaWduZWQg
biA9IFtzdWJmcmFtZXMgY291bnRdOworICAgIHVuc2lnbmVkIGk7CisgICAgZm9yIChpID0gMDsg
aSAhPSBuOyArK2kpIHsKKyAgICAgICAgV2ViRnJhbWUgKnN1YmZyYW1lID0gW3N1YmZyYW1lcyBv
YmplY3RBdEluZGV4OmldOworICAgICAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtzdWJm
cmFtZSBmcmFtZVZpZXddOworICAgICAgICBpZiAoW1tzdWJmcmFtZSBfZGF0YVNvdXJjZV0gX2lz
RG9jdW1lbnRIVE1MXSkgeworICAgICAgICAgICAgWyhXZWJIVE1MVmlldyAqKVtmcmFtZVZpZXcg
ZG9jdW1lbnRWaWV3XSBfc2V0UHJpbnRpbmc6cHJpbnRpbmcgbWluaW11bVBhZ2VXaWR0aDowLjBm
IG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZV07Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocHJpbnRpbmcgIT0gX3ByaXZhdGUtPnByaW50aW5n
KSB7CisgICAgICAgIFtfcHJpdmF0ZS0+cGFnZVJlY3RzIHJlbGVhc2VdOworICAgICAgICBfcHJp
dmF0ZS0+cGFnZVJlY3RzID0gbmlsOworICAgICAgICBfcHJpdmF0ZS0+cHJpbnRpbmcgPSBwcmlu
dGluZzsKKyAgICAgICAgaWYgKCFwcmludGluZykKKyAgICAgICAgICAgIF9wcml2YXRlLT5hdm9p
ZGluZ1ByaW50T3JwaGFuID0gTk87CisgICAgICAgIFtzZWxmIHNldE5lZWRzVG9BcHBseVN0eWxl
czpZRVNdOworICAgICAgICBbc2VsZiBzZXROZWVkc0xheW91dDpZRVNdOworICAgICAgICBbc2Vs
ZiBsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6bWluUGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6
bWF4UGFnZVdpZHRoIGFkanVzdGluZ1ZpZXdTaXplOmFkanVzdFZpZXdTaXplXTsKKyAgICAgICAg
aWYgKCFwcmludGluZykgeworICAgICAgICAgICAgLy8gQ2FuJ3QgZG8gdGhpcyB3aGVuIHN0YXJ0
aW5nIHByaW50aW5nIG9yIG5lc3RlZCBwcmludGluZyB3b24ndCB3b3JrLCBzZWUgMzQ5MTQyNy4K
KyAgICAgICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpOT107CisgICAgICAgIH0KKyAgICB9
Cit9CisKKy0gKEJPT0wpY2FuUHJpbnRIZWFkZXJzQW5kRm9vdGVycworeworICAgIHJldHVybiBZ
RVM7Cit9CisKKy8vIFRoaXMgaXMgbmVlZGVkIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgd2Vidmll
dyBpcyBlbWJlZGRlZCBpbiB0aGUgdmlldyB0aGF0J3MgYmVpbmcgcHJpbnRlZC4KKy8vIEl0IHNo
b3VsZG4ndCBiZSBjYWxsZWQgd2hlbiB0aGUgd2VidmlldyBpcyBiZWluZyBwcmludGVkIGRpcmVj
dGx5LgorLSAodm9pZClhZGp1c3RQYWdlSGVpZ2h0TmV3OihDR0Zsb2F0ICopbmV3Qm90dG9tIHRv
cDooQ0dGbG9hdClvbGRUb3AgYm90dG9tOihDR0Zsb2F0KW9sZEJvdHRvbSBsaW1pdDooQ0dGbG9h
dClib3R0b21MaW1pdAoreworICAgIC8vIFRoaXMgaGVscHMgd2hlbiB3ZSBwcmludCBhcyBwYXJ0
IG9mIGEgbGFyZ2VyIHByaW50IHByb2Nlc3MuCisgICAgLy8gSWYgdGhlIFdlYkhUTUxWaWV3IGl0
c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIgaGF2ZSB0byBk
byB0aGlzLgorICAgIEJPT0wgd2FzSW5QcmludGluZ01vZGUgPSBfcHJpdmF0ZS0+cHJpbnRpbmc7
CisgICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkKKyAgICAgICAgW3NlbGYgX3NldFByaW50aW5n
OllFUyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZp
ZXdTaXplOk5PXTsKKworICAgIGZsb2F0IG5ld0JvdHRvbUZsb2F0ID0gKm5ld0JvdHRvbTsKKyAg
ICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gY29yZShbc2VsZiBfZnJhbWVdKS0+dmlldygpKQorICAg
ICAgICB2aWV3LT5hZGp1c3RQYWdlSGVpZ2h0KCZuZXdCb3R0b21GbG9hdCwgb2xkVG9wLCBvbGRC
b3R0b20sIGJvdHRvbUxpbWl0KTsKKworI2lmZGVmIF9fTFA2NF9fCisgICAgLy8gSWYgdGhlIG5l
dyBib3R0b20gaXMgZXF1YWwgdG8gdGhlIG9sZCBib3R0b20gKHdoZW4gYm90aCBhcmUgdHJlYXRl
ZCBhcyBmbG9hdHMpLCB3ZSBqdXN0IGNvcHkKKyAgICAvLyBvbGRCb3R0b20gb3ZlciB0byBuZXdC
b3R0b20uIFRoaXMgcHJldmVudHMgcm91bmRpbmcgZXJyb3JzIHRoYXQgY2FuIG9jY3VyIHdoZW4g
Y29udmVydGluZyBuZXdCb3R0b21GbG9hdCB0byBhIGRvdWJsZS4KKyAgICBpZiAoZmFicygoZmxv
YXQpb2xkQm90dG9tIC0gbmV3Qm90dG9tRmxvYXQpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjplcHNpbG9uKCkpIAorICAgICAgICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOworICAgIGVs
c2UKKyNlbmRpZgorICAgICAgICAqbmV3Qm90dG9tID0gbmV3Qm90dG9tRmxvYXQ7CisgICAgCisg
ICAgaWYgKCF3YXNJblByaW50aW5nTW9kZSkgeworICAgICAgICBOU1ByaW50T3BlcmF0aW9uICpj
dXJyZW5QcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25d
OworICAgICAgICBpZiAoY3VycmVuUHJpbnRPcGVyYXRpb24pCisgICAgICAgICAgICAvLyBkZWxh
eSBfc2V0UHJpbnRpbmc6Tk8gdW50aWwgYmFjayB0byBtYWluIGxvb3AgYXMgdGhpcyBtZXRob2Qg
bWF5IGdldCBjYWxsZWQgcmVwZWF0ZWRseQorICAgICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVj
dG9yOkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6Y3VycmVuUHJp
bnRPcGVyYXRpb24gYWZ0ZXJEZWxheTowXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8g
bm90IHN1cmUgaWYgdGhpcyBpcyBhY3R1YWxseSBldmVyIGludm9rZWQsIGl0IHByb2JhYmx5IHNo
b3VsZG4ndCBiZQorICAgICAgICAgICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdl
V2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworICAg
IH0KK30KKworLSAoZmxvYXQpX2F2YWlsYWJsZVBhcGVyV2lkdGhGb3JQcmludE9wZXJhdGlvbjoo
TlNQcmludE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uCit7CisgICAgTlNQcmludEluZm8gKnBy
aW50SW5mbyA9IFtwcmludE9wZXJhdGlvbiBwcmludEluZm9dOworICAgIHJldHVybiBbcHJpbnRJ
bmZvIHBhcGVyU2l6ZV0ud2lkdGggLSBbcHJpbnRJbmZvIGxlZnRNYXJnaW5dIC0gW3ByaW50SW5m
byByaWdodE1hcmdpbl07Cit9CisKKy0gKGZsb2F0KV9zY2FsZUZhY3RvckZvclByaW50T3BlcmF0
aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJpbnRPcGVyYXRpb24KK3sKKyAgICBmbG9hdCB2aWV3
V2lkdGggPSBOU1dpZHRoKFtzZWxmIGJvdW5kc10pOworICAgIGlmICh2aWV3V2lkdGggPCAxKSB7
CisgICAgICAgIExPR19FUlJPUigiJUAgaGFzIG5vIHdpZHRoIHdoZW4gcHJpbnRpbmciLCBzZWxm
KTsKKyAgICAgICAgcmV0dXJuIDEuMGY7CisgICAgfQorCisgICAgZmxvYXQgdXNlclNjYWxlRmFj
dG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJfcGFnZVNldHVwU2NhbGVGYWN0b3JdOworICAgIGZs
b2F0IG1heFNocmlua1RvRml0U2NhbGVGYWN0b3IgPSAxLjBmIC8gUHJpbnRpbmdNYXhpbXVtU2hy
aW5rRmFjdG9yOworICAgIGZsb2F0IHNocmlua1RvRml0U2NhbGVGYWN0b3IgPSBbc2VsZiBfYXZh
aWxhYmxlUGFwZXJXaWR0aEZvclByaW50T3BlcmF0aW9uOnByaW50T3BlcmF0aW9uXS92aWV3V2lk
dGg7CisgICAgZmxvYXQgc2hyaW5rVG9Bdm9pZE9ycGhhbiA9IF9wcml2YXRlLT5hdm9pZGluZ1By
aW50T3JwaGFuID8gKDEuMGYgLyBQcmludGluZ09ycGhhblNocmlua0FkanVzdG1lbnQpIDogMS4w
ZjsKKyAgICByZXR1cm4gdXNlclNjYWxlRmFjdG9yICogTUFYKG1heFNocmlua1RvRml0U2NhbGVG
YWN0b3IsIHNocmlua1RvRml0U2NhbGVGYWN0b3IpICogc2hyaW5rVG9Bdm9pZE9ycGhhbjsKK30K
KworLy8gRklYTUUgMzQ5MTM0NDogVGhpcyBpcyBhIHNlY3JldCBBcHBLaXQtaW50ZXJuYWwgbWV0
aG9kIHRoYXQgd2UgbmVlZCB0byBvdmVycmlkZSBpbiBvcmRlcgorLy8gdG8gZ2V0IG91ciBzaHJp
bmstdG8tZml0IHRvIHdvcmsgd2l0aCBhIGN1c3RvbSBwYWdpbmF0aW9uIHNjaGVtZS4gV2UgY2Fu
IGRvIHRoaXMgYmV0dGVyCisvLyBpZiBBcHBLaXQgbWFrZXMgaXQgU1BJL0FQSS4KKy0gKENHRmxv
YXQpX3Byb3ZpZGVUb3RhbFNjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVy
YXRpb24gKilwcmludE9wZXJhdGlvbiAKK3sKKyAgICByZXR1cm4gW3NlbGYgX3NjYWxlRmFjdG9y
Rm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRpb25dOworfQorCisvLyBUaGlzIGlzIHVzZWQg
Zm9yIENhcmJvbiBwcmludGluZy4gQXQgc29tZSBwb2ludCB3ZSBtaWdodCB3YW50IHRvIG1ha2Ug
dGhpcyBwdWJsaWMgQVBJLgorLSAodm9pZClzZXRQYWdlV2lkdGhGb3JQcmludGluZzooZmxvYXQp
cGFnZVdpZHRoCit7CisgICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6
MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6Tk9dOworICAgIFtzZWxm
IF9zZXRQcmludGluZzpZRVMgbWluaW11bVBhZ2VXaWR0aDpwYWdlV2lkdGggbWF4aW11bVBhZ2VX
aWR0aDpwYWdlV2lkdGggYWRqdXN0Vmlld1NpemU6WUVTXTsKK30KKworLSAodm9pZClfZW5kUHJp
bnRNb2RlCit7CisgICAgW3NlbGYgX3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4w
ZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6WUVTXTsKKyAgICBbW3NlbGYg
d2luZG93XSBzZXRBdXRvZGlzcGxheTpZRVNdOworfQorCistICh2b2lkKV9kZWxheWVkRW5kUHJp
bnRNb2RlOihOU1ByaW50T3BlcmF0aW9uICopaW5pdGlhdGluZ09wZXJhdGlvbgoreworICAgIEFT
U0VSVF9BUkcoaW5pdGlhdGluZ09wZXJhdGlvbiwgaW5pdGlhdGluZ09wZXJhdGlvbiAhPSBuaWwp
OworICAgIE5TUHJpbnRPcGVyYXRpb24gKmN1cnJlbnRPcGVyYXRpb24gPSBbTlNQcmludE9wZXJh
dGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKKyAgICBpZiAoaW5pdGlhdGluZ09wZXJhdGlvbiA9PSBj
dXJyZW50T3BlcmF0aW9uKSB7CisgICAgICAgIC8vIFRoZSBwcmludCBvcGVyYXRpb24gaXMgc3Rp
bGwgdW5kZXJ3YXkuIFdlIGRvbid0IGV4cGVjdCB0aGlzIHRvIGV2ZXIgaGFwcGVuLCBoZW5jZSB0
aGUgYXNzZXJ0LCBidXQgd2UncmUKKyAgICAgICAgLy8gYmVpbmcgZXh0cmEgcGFyYW5vaWQgaGVy
ZSBzaW5jZSB0aGUgcHJpbnRpbmcgY29kZSBpcyBzbyBmcmFnaWxlLiBEZWxheSB0aGUgY2xlYW51
cAorICAgICAgICAvLyBmdXJ0aGVyLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBzZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9k
ZTopIHdpdGhPYmplY3Q6aW5pdGlhdGluZ09wZXJhdGlvbiBhZnRlckRlbGF5OjBdOworICAgIH0g
ZWxzZSBpZiAoW2N1cnJlbnRPcGVyYXRpb24gdmlld10gPT0gc2VsZikgeworICAgICAgICAvLyBB
IG5ldyBwcmludCBqb2IgaGFzIHN0YXJ0ZWQsIGJ1dCBpdCBpcyBwcmludGluZyB0aGUgc2FtZSBX
ZWJIVE1MVmlldyBhZ2Fpbi4gV2UgZG9uJ3QgZXhwZWN0CisgICAgICAgIC8vIHRoaXMgdG8gZXZl
ciBoYXBwZW4sIGhlbmNlIHRoZSBhc3NlcnQsIGJ1dCB3ZSdyZSBiZWluZyBleHRyYSBwYXJhbm9p
ZCBoZXJlIHNpbmNlIHRoZSBwcmludGluZyBjb2RlIGlzIHNvCisgICAgICAgIC8vIGZyYWdpbGUu
IERvIG5vdGhpbmcsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBicmVhayB0aGUgcHJpbnQgam9i
IGN1cnJlbnRseSBpbiBwcm9ncmVzcywgYW5kCisgICAgICAgIC8vIHRoZSBwcmludCBqb2IgY3Vy
cmVudGx5IGluIHByb2dyZXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgb3duIGNsZWFudXAuCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRo
ZSBwcmludCBqb2IgdGhhdCBraWNrZWQgb2ZmIHRoaXMgZGVsYXllZCBjYWxsIGhhcyBmaW5pc2hl
ZCwgYW5kIHRoaXMgdmlldyBpcyBub3QgYmVpbmcKKyAgICAgICAgLy8gcHJpbnRlZCBhZ2Fpbi4g
V2UgZXhwZWN0IHRoYXQgbm8gb3RoZXIgcHJpbnQgam9iIGhhcyBzdGFydGVkLiBTaW5jZSB0aGlz
IGRlbGF5ZWQgY2FsbCB3YXNuJ3QKKyAgICAgICAgLy8gY2FuY2VsbGVkLCBiZWdpbkRvY3VtZW50
IGFuZCBlbmREb2N1bWVudCBtdXN0IG5vdCBoYXZlIGJlZW4gY2FsbGVkLCBhbmQgd2UgbmVlZCB0
byBjbGVhbiB1cAorICAgICAgICAvLyB0aGUgcHJpbnQgbW9kZSBoZXJlLgorICAgICAgICBBU1NF
UlQoY3VycmVudE9wZXJhdGlvbiA9PSBuaWwpOworICAgICAgICBbc2VsZiBfZW5kUHJpbnRNb2Rl
XTsKKyAgICB9Cit9CisKKy8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGF2YWlsYWJsZSBm
b3IgcHJpbnRpbmcKKy0gKEJPT0wpa25vd3NQYWdlUmFuZ2U6KE5TUmFuZ2VQb2ludGVyKXJhbmdl
Cit7CisgICAgLy8gTXVzdCBkbyB0aGlzIGV4cGxpY2l0IGRpc3BsYXkgaGVyZSwgYmVjYXVzZSBv
dGhlcndpc2UgdGhlIHZpZXcgbWlnaHQgcmVkaXNwbGF5IHdoaWxlIHRoZSBwcmludAorICAgIC8v
IHNoZWV0IHdhcyB1cCwgdXNpbmcgcHJpbnRlciBmb250cyAoYW5kIGxvb2tpbmcgZGlmZmVyZW50
KS4KKyAgICBbc2VsZiBkaXNwbGF5SWZOZWVkZWRdOworICAgIFtbc2VsZiB3aW5kb3ddIHNldEF1
dG9kaXNwbGF5Ok5PXTsKKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgYSBmcmFtZXNldCBqdXN0IHBy
aW50IHdpdGggdGhlIGxheW91dCB3ZSBoYXZlIG9uc2NyZWVuLCBvdGhlcndpc2UgcmVsYXlvdXQK
KyAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIHBhcGVyIHNpemUKKyAgICBmbG9hdCBtaW5MYXlvdXRX
aWR0aCA9IDAuMGY7CisgICAgZmxvYXQgbWF4TGF5b3V0V2lkdGggPSAwLjBmOworICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuIE5POworICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkgfHwgIWZyYW1lLT5kb2N1bWVu
dCgpLT5pc0ZyYW1lU2V0KCkpIHsKKyAgICAgICAgZmxvYXQgcGFwZXJXaWR0aCA9IFtzZWxmIF9h
dmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246W05TUHJpbnRPcGVyYXRpb24gY3Vy
cmVudE9wZXJhdGlvbl1dOworICAgICAgICBtaW5MYXlvdXRXaWR0aCA9IHBhcGVyV2lkdGggKiBQ
cmludGluZ01pbmltdW1TaHJpbmtGYWN0b3I7CisgICAgICAgIG1heExheW91dFdpZHRoID0gcGFw
ZXJXaWR0aCAqIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsKKyAgICB9CisgICAgW3NlbGYg
X3NldFByaW50aW5nOllFUyBtaW5pbXVtUGFnZVdpZHRoOm1pbkxheW91dFdpZHRoIG1heGltdW1Q
YWdlV2lkdGg6bWF4TGF5b3V0V2lkdGggYWRqdXN0Vmlld1NpemU6WUVTXTsgLy8gd2lsbCByZWxh
eW91dAorICAgIE5TUHJpbnRPcGVyYXRpb24gKnByaW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVy
YXRpb24gY3VycmVudE9wZXJhdGlvbl07CisgICAgLy8gQ2VydGFpbiB0eXBlcyBvZiBlcnJvcnMs
IGluY2x1ZGluZyBpbnZhbGlkIHBhZ2UgcmFuZ2VzLCBjYW4gY2F1c2UgYmVnaW5Eb2N1bWVudCBh
bmQKKyAgICAvLyBlbmREb2N1bWVudCB0byBiZSBza2lwcGVkIGFmdGVyIHdlJ3ZlIHB1dCBvdXJz
ZWx2ZXMgaW4gcHJpbnQgbW9kZSAoc2VlIDQxNDU5MDUpLiBJbiB0aG9zZSBjYXNlcworICAgIC8v
IHdlIG5lZWQgdG8gZ2V0IG91dCBvZiBwcmludCBtb2RlIHdpdGhvdXQgcmVseWluZyBvbiBhbnkg
bW9yZSBjYWxsYmFja3MgZnJvbSB0aGUgcHJpbnRpbmcgbWVjaGFuaXNtLgorICAgIC8vIElmIHdl
IGdldCBhcyBmYXIgYXMgYmVnaW5Eb2N1bWVudCB3aXRob3V0IHRyb3VibGUsIHRoZW4gdGhpcyBk
ZWxheWVkIHJlcXVlc3Qgd2lsbCBiZSBjYW5jZWxsZWQuCisgICAgLy8gSWYgbm90IGNhbmNlbGxl
ZCwgdGhpcyBkZWxheWVkIGNhbGwgd2lsbCBiZSBpbnZva2VkIGluIHRoZSBuZXh0IHBhc3MgdGhy
b3VnaCB0aGUgbWFpbiBldmVudCBsb29wLAorICAgIC8vIHdoaWNoIGlzIGFmdGVyIGJlZ2luRG9j
dW1lbnQgYW5kIGVuZERvY3VtZW50IHdvdWxkIGJlIGNhbGxlZC4KKyAgICBbc2VsZiBwZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikgd2l0aE9iamVjdDpwcmlu
dE9wZXJhdGlvbiBhZnRlckRlbGF5OjBdOworICAgIFtbc2VsZiBfd2ViVmlld10gX2FkanVzdFBy
aW50aW5nTWFyZ2luc0ZvckhlYWRlckFuZEZvb3Rlcl07CisgICAgCisgICAgLy8gVGhlcmUgaXMg
YSB0aGVvcmV0aWNhbCBjaGFuY2UgdGhhdCBzb21lb25lIGNvdWxkIGRvIHNvbWUgZHJhd2luZyBi
ZXR3ZWVuIGhlcmUgYW5kIGVuZERvY3VtZW50LAorICAgIC8vIGlmIHNvbWV0aGluZyBjYXVzZWQg
c2V0TmVlZHNEaXNwbGF5IGFmdGVyIHRoaXMgcG9pbnQuIElmIHNvLCBpdCdzIG5vdCBhIGJpZyB0
cmFnZWR5LCBiZWNhdXNlCisgICAgLy8geW91J2Qgc2ltcGx5IHNlZSB0aGUgcHJpbnRlciBmb250
cyBvbiBzY3JlZW4uIEFzIG9mIHRoaXMgd3JpdGluZywgdGhpcyBkb2VzIG5vdCBoYXBwZW4gd2l0
aCBTYWZhcmkuCisKKyAgICByYW5nZS0+bG9jYXRpb24gPSAxOworICAgIGZsb2F0IHRvdGFsU2Nh
bGVGYWN0b3IgPSBbc2VsZiBfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJh
dGlvbl07CisgICAgZmxvYXQgdXNlclNjYWxlRmFjdG9yID0gW3ByaW50T3BlcmF0aW9uIF93ZWJf
cGFnZVNldHVwU2NhbGVGYWN0b3JdOworICAgIFtfcHJpdmF0ZS0+cGFnZVJlY3RzIHJlbGVhc2Vd
OworICAgIGZsb2F0IGZ1bGxQYWdlSGVpZ2h0ID0gZmxvb3JmKFtzZWxmIF9jYWxjdWxhdGVQcmlu
dEhlaWdodF0vdG90YWxTY2FsZUZhY3Rvcik7CisgICAgTlNBcnJheSAqbmV3UGFnZVJlY3RzID0g
W1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9y
OnVzZXJTY2FsZUZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhl
aWdodF07CisgICAgCisgICAgLy8gQXBwS2l0IGdldHMgYWxsIG1lc3NlZCB1cCBpZiB5b3UgZ2l2
ZSBpdCBhIHplcm8tbGVuZ3RoIHBhZ2UgY291bnQgKHNlZSAzNTc2MzM0KSwgc28gaWYgd2UKKyAg
ICAvLyBoaXQgdGhhdCBjYXNlIHdlJ2xsIHBhc3MgYWxvbmcgYSBkZWdlbmVyYXRlIDEgcGl4ZWwg
c3F1YXJlIHRvIHByaW50LiBUaGlzIHdpbGwgcHJpbnQKKyAgICAvLyBhIGJsYW5rIHBhZ2UgKHdp
dGggY29ycmVjdC1sb29raW5nIGhlYWRlciBhbmQgZm9vdGVyIGlmIHRoYXQgb3B0aW9uIGlzIG9u
KSwgd2hpY2ggbWF0Y2hlcworICAgIC8vIHRoZSBiZWhhdmlvciBvZiBJRSBhbmQgQ2FtaW5vIGF0
IGxlYXN0LgorICAgIGlmIChbbmV3UGFnZVJlY3RzIGNvdW50XSA9PSAwKQorICAgICAgICBuZXdQ
YWdlUmVjdHMgPSBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W05TVmFsdWUgdmFsdWVXaXRoUmVj
dDpOU01ha2VSZWN0KDAsIDAsIDEsIDEpXV07CisgICAgZWxzZSBpZiAoW25ld1BhZ2VSZWN0cyBj
b3VudF0gPiAxKSB7CisgICAgICAgIC8vIElmIHRoZSBsYXN0IHBhZ2UgaXMgYSBzaG9ydCBvcnBo
YW4sIHRyeSBhZGp1c3RpbmcgdGhlIHByaW50IGhlaWdodCBzbGlnaHRseSB0byBzZWUgaWYgdGhp
cyB3aWxsIHNxdWVlemUgdGhlCisgICAgICAgIC8vIGNvbnRlbnQgb250byBvbmUgZmV3ZXIgcGFn
ZS4gSWYgaXQgZG9lcywgdXNlIHRoZSBhZGp1c3RlZCBzY2FsZS4gSWYgbm90LCB1c2UgdGhlIG9y
aWdpbmFsIHNjYWxlLgorICAgICAgICBmbG9hdCBsYXN0UGFnZUhlaWdodCA9IE5TSGVpZ2h0KFtb
bmV3UGFnZVJlY3RzIGxhc3RPYmplY3RdIHJlY3RWYWx1ZV0pOworICAgICAgICBpZiAobGFzdFBh
Z2VIZWlnaHQvZnVsbFBhZ2VIZWlnaHQgPCBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbykgewor
ICAgICAgICAgICAgTlNBcnJheSAqYWRqdXN0ZWRQYWdlUmVjdHMgPSBbW3NlbGYgX2ZyYW1lXSBf
Y29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFdpZHRoU2NhbGVGYWN0b3I6dXNlclNjYWxlRmFjdG9y
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludEhlaWdodDpmdWxsUGFnZUhlaWdo
dCpQcmludGluZ09ycGhhblNocmlua0FkanVzdG1lbnRdOworICAgICAgICAgICAgLy8gVXNlIHRo
ZSBhZGp1c3RlZCByZWN0cyBvbmx5IGlmIHRoZSBwYWdlIGNvdW50IHdlbnQgZG93bgorICAgICAg
ICAgICAgaWYgKFthZGp1c3RlZFBhZ2VSZWN0cyBjb3VudF0gPCBbbmV3UGFnZVJlY3RzIGNvdW50
XSkgeworICAgICAgICAgICAgICAgIG5ld1BhZ2VSZWN0cyA9IGFkanVzdGVkUGFnZVJlY3RzOwor
ICAgICAgICAgICAgICAgIF9wcml2YXRlLT5hdm9pZGluZ1ByaW50T3JwaGFuID0gWUVTOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIF9wcml2YXRlLT5wYWdlUmVj
dHMgPSBbbmV3UGFnZVJlY3RzIHJldGFpbl07CisgICAgCisgICAgcmFuZ2UtPmxlbmd0aCA9IFtf
cHJpdmF0ZS0+cGFnZVJlY3RzIGNvdW50XTsKKyAgICAKKyAgICByZXR1cm4gWUVTOworfQorCisv
LyBSZXR1cm4gdGhlIGRyYXdpbmcgcmVjdGFuZ2xlIGZvciBhIHBhcnRpY3VsYXIgcGFnZSBudW1i
ZXIKKy0gKE5TUmVjdClyZWN0Rm9yUGFnZTooTlNJbnRlZ2VyKXBhZ2UKK3sKKyAgICByZXR1cm4g
W1tfcHJpdmF0ZS0+cGFnZVJlY3RzIG9iamVjdEF0SW5kZXg6cGFnZSAtIDFdIHJlY3RWYWx1ZV07
Cit9CisKKy0gKHZvaWQpZHJhd1BhZ2VCb3JkZXJXaXRoU2l6ZTooTlNTaXplKWJvcmRlclNpemUK
K3sKKyAgICBBU1NFUlQoTlNFcXVhbFNpemVzKGJvcmRlclNpemUsIFtbW05TUHJpbnRPcGVyYXRp
b24gY3VycmVudE9wZXJhdGlvbl0gcHJpbnRJbmZvXSBwYXBlclNpemVdKSk7ICAgIAorICAgIFtb
c2VsZiBfd2ViVmlld10gX2RyYXdIZWFkZXJBbmRGb290ZXJdOworfQorCistICh2b2lkKWJlZ2lu
RG9jdW1lbnQKK3sKKyAgICBAdHJ5IHsKKyAgICAgICAgLy8gRnJvbSBub3cgb24gd2UnbGwgZ2V0
IGEgY2hhbmNlIHRvIGNhbGwgX2VuZFByaW50TW9kZSBpbiBlaXRoZXIgYmVnaW5Eb2N1bWVudCBv
cgorICAgICAgICAvLyBlbmREb2N1bWVudCwgc28gd2UgY2FuIGNhbmNlbCB0aGUgImp1c3QgaW4g
Y2FzZSIgcGVuZGluZyBjYWxsLgorICAgICAgICBbTlNPYmplY3QgY2FuY2VsUHJldmlvdXNQZXJm
b3JtUmVxdWVzdHNXaXRoVGFyZ2V0OnNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1v
ZGU6KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0OltOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRpb25dXTsKKyAgICAgICAgW3N1
cGVyIGJlZ2luRG9jdW1lbnRdOworICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiAqbG9jYWxFeGNl
cHRpb24pIHsKKyAgICAgICAgLy8gRXhjZXB0aW9uIGR1cmluZyBbc3VwZXIgYmVnaW5Eb2N1bWVu
dF0gbWVhbnMgdGhhdCBlbmREb2N1bWVudCB3aWxsIG5vdCBnZXQgY2FsbGVkLAorICAgICAgICAv
LyBzbyB3ZSBuZWVkIHRvIGNsZWFuIHVwIG91ciAicHJpbnQgbW9kZSIgaGVyZS4KKyAgICAgICAg
W3NlbGYgX2VuZFByaW50TW9kZV07CisgICAgfQorfQorCistICh2b2lkKWVuZERvY3VtZW50Cit7
CisgICAgW3N1cGVyIGVuZERvY3VtZW50XTsKKyAgICAvLyBOb3RlIHNhZGx5IGF0IHRoaXMgcG9p
bnQgW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0RHJhd2luZ1RvU2NyZWVuXSBpcyBz
dGlsbCBOTyAKKyAgICBbc2VsZiBfZW5kUHJpbnRNb2RlXTsKK30KKworLSAodm9pZClrZXlEb3du
OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9u
ZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAg
IC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFp
bmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJl
dmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0
IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIFJldGFpblB0
cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7CisgICAgQk9PTCBldmVudFdhc1Nl
bnRUb1dlYkNvcmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7CisKKyAgICBC
T09MIGNhbGxTdXBlciA9IE5POworCisgICAgW19wcml2YXRlLT5rZXlEb3duRXZlbnQgcmVsZWFz
ZV07CisgICAgX3ByaXZhdGUtPmtleURvd25FdmVudCA9IFtldmVudCByZXRhaW5dOworCisgICAg
Qk9PTCBjb21wbGV0aW9uUG9wdXBXYXNPcGVuID0gX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyICYm
IFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgcG9wdXBXaW5kb3dJc09wZW5dOworICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghZXZlbnRXYXNTZW50
VG9XZWJDb3JlICYmIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlF
dmVudChldmVudCkpIHsKKyAgICAgICAgLy8gV2ViQ29yZSBwcm9jZXNzZWQgYSBrZXkgZXZlbnQs
IGJhaWwgb24gYW55IHByZWV4aXN0aW5nIGNvbXBsZXRlOiBVSQorICAgICAgICBpZiAoY29tcGxl
dGlvblBvcHVwV2FzT3BlbikKKyAgICAgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIg
ZW5kUmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CisgICAgfSBlbHNlIGlmICghX3By
aXZhdGUtPmNvbXBDb250cm9sbGVyIHx8ICFbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGZpbHRl
cktleURvd246ZXZlbnRdKSB7CisgICAgICAgIC8vIE5vdCBjb25zdW1lZCBieSBjb21wbGV0ZTog
cG9wdXAgd2luZG93CisgICAgICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0
aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CisgICAgICAgIGNhbGxTdXBlciA9IFlFUzsKKyAg
ICB9CisgICAgaWYgKGNhbGxTdXBlcikKKyAgICAgICAgW3N1cGVyIGtleURvd246ZXZlbnRdOwor
ICAgIGVsc2UKKyAgICAgICAgW05TQ3Vyc29yIHNldEhpZGRlblVudGlsTW91c2VNb3ZlczpZRVNd
OworfQorCistICh2b2lkKWtleVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdz
IGEgY2hhbmNlIHRoYXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVk
IGV2ZW50IGxvb3AsIGFuZAorICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVh
c2UgdGhlIG9sZCBvbmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8g
dGhlIGN1cnJlbnQgZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGlu
c2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNvZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxl
YXNlXTsKKworICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0gKF9wcml2YXRlLT5rZXlE
b3duRXZlbnQgPT0gZXZlbnQpOworCisgICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJv
dGVjdG9yID0gc2VsZjsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICBpZiAoY29yZUZyYW1lICYmICFldmVudFdhc1NlbnRUb1dlYkNvcmUpCisgICAgICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKyAgICBlbHNlCisg
ICAgICAgIFtzdXBlciBrZXlVcDpldmVudF07Cit9CisKKy0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihO
U0V2ZW50ICopZXZlbnQKK3sKKyAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcmVzcG9uZGlu
ZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3AsIGFuZAorICAgIC8v
IGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBvbmUuIFJldGFpbmlu
ZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCisgICAgLy8gdGhlIGN1cnJlbnQgZXZlbnQgcHJldmVu
dHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQgb3IgQXBwS2l0IGNv
ZGUuCisgICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKworICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmIChjb3JlRnJhbWUpCisgICAgICAg
IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgp
OworICAgIAorICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7
CisKKyAgICB1bnNpZ25lZCBzaG9ydCBrZXlDb2RlID0gW2V2ZW50IGtleUNvZGVdOworCisgICAg
Ly9Eb24ndCBtYWtlIGFuIGV2ZW50IGZyb20gdGhlIG51bSBsb2NrIGFuZCBmdW5jdGlvbiBrZXlz
CisgICAgaWYgKGNvcmVGcmFtZSAmJiBrZXlDb2RlICE9IDAgJiYga2V5Q29kZSAhPSAxMCAmJiBr
ZXlDb2RlICE9IDYzKSB7CisgICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2
ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgICAgICAKKyAgICBbc3VwZXIgZmxhZ3NDaGFuZ2VkOmV2ZW50XTsKK30KKworLSAoaWQp
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cmluZyopYXR0cmlidXRlTmFtZQorewor
ICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6IE5TQWNjZXNzaWJpbGl0eUNo
aWxkcmVuQXR0cmlidXRlXSkgeworICAgICAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0g
X2FjY2Vzc2liaWxpdHlUcmVlXTsKKyAgICAgICAgaWYgKGFjY1RyZWUpCisgICAgICAgICAgICBy
ZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmFjY1RyZWVdOworICAgICAgICByZXR1cm4g
bmlsOworICAgIH0KKyAgICByZXR1cm4gW3N1cGVyIGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1
ZTphdHRyaWJ1dGVOYW1lXTsKK30KKworLSAoaWQpYWNjZXNzaWJpbGl0eUZvY3VzZWRVSUVsZW1l
bnQKK3sKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVl
XTsKKyAgICBpZiAoYWNjVHJlZSkKKyAgICAgICAgcmV0dXJuIFthY2NUcmVlIGFjY2Vzc2liaWxp
dHlGb2N1c2VkVUlFbGVtZW50XTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAoaWQpYWNjZXNz
aWJpbGl0eUhpdFRlc3Q6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxm
IF9mcmFtZV0gX2FjY2Vzc2liaWxpdHlUcmVlXTsKKyAgICBpZiAoYWNjVHJlZSkgeworICAgICAg
ICBOU1BvaW50IHdpbmRvd0Nvb3JkID0gW1tzZWxmIHdpbmRvd10gY29udmVydFNjcmVlblRvQmFz
ZTpwb2ludF07CisgICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5SGl0VGVzdDpb
c2VsZiBjb252ZXJ0UG9pbnQ6d2luZG93Q29vcmQgZnJvbVZpZXc6bmlsXV07CisgICAgfQorICAg
IHJldHVybiBzZWxmOworfQorCistIChpZClfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6
KE5TVmlldyAqKXN1YnZpZXcKK3sKKyAgICBpZCBhY2NUcmVlID0gW1tzZWxmIF9mcmFtZV0gX2Fj
Y2Vzc2liaWxpdHlUcmVlXTsKKyAgICBpZiAoIWFjY1RyZWUpCisgICAgICAgIHJldHVybiBzZWxm
OworICAgIGlkIHBhcmVudCA9IFthY2NUcmVlIF9hY2Nlc3NpYmlsaXR5UGFyZW50Rm9yU3Vidmll
dzpzdWJ2aWV3XTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIHNlbGY7CisgICAg
cmV0dXJuIHBhcmVudDsKK30KKworLSAodm9pZCljZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVh
OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBpZiAoRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+cmV2ZWFs
U2VsZWN0aW9uKFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJBbHdheXMpOworfQorCistIChO
U0RhdGEgKilfc2VsZWN0aW9uU3RhcnRGb250QXR0cmlidXRlc0FzUlRGCit7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICpzdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCJ4
IgorICAgICAgICBhdHRyaWJ1dGVzOmNvcmVGcmFtZSA/IGNvcmVGcmFtZS0+Zm9udEF0dHJpYnV0
ZXNGb3JTZWxlY3Rpb25TdGFydCgpIDogbmlsXTsKKyAgICBOU0RhdGEgKmRhdGEgPSBbc3RyaW5n
IFJURkZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0
cmlidXRlczpuaWxdOworICAgIFtzdHJpbmcgcmVsZWFzZV07CisgICAgcmV0dXJuIGRhdGE7Cit9
CisKKy0gKE5TRGljdGlvbmFyeSAqKV9mb250QXR0cmlidXRlc0Zyb21Gb250UGFzdGVib2FyZAor
eworICAgIE5TUGFzdGVib2FyZCAqZm9udFBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3Rl
Ym9hcmRXaXRoTmFtZTpOU0ZvbnRQYm9hcmRdOworICAgIGlmIChmb250UGFzdGVib2FyZCA9PSBu
aWwpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgTlNEYXRhICpkYXRhID0gW2ZvbnRQYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOk5TRm9udFBib2FyZFR5cGVdOworICAgIGlmIChkYXRhID09IG5pbCB8
fCBbZGF0YSBsZW5ndGhdID09IDApCisgICAgICAgIHJldHVybiBuaWw7CisgICAgLy8gTlNUZXh0
VmlldyBkb2VzIHNvbWV0aGluZyBtb3JlIGVmZmljaWVudCBieSBwYXJzaW5nIHRoZSBhdHRyaWJ1
dGVzIG9ubHksIGJ1dCB0aGF0J3Mgbm90IGF2YWlsYWJsZSBpbiBBUEkuCisgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpzdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
UlRGOmRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExdIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAo
c3RyaW5nID09IG5pbCB8fCBbc3RyaW5nIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gW3N0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgMSldOworfQorCistIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX2VtcHR5U3R5bGUKK3sK
KyAgICByZXR1cm4gW1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVDU1NTdHlsZURl
Y2xhcmF0aW9uXTsKK30KKworLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0cmluZzooTlNDb2xvciAq
KWNvbG9yCit7CisgICAgTlNDb2xvciAqcmdiQ29sb3IgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9y
U3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07CisgICAgLy8gRklYTUU6IElmIGNvbG9y
IGlzIG5vbi1uaWwgYW5kIHJnYkNvbG9yIGlzIG5pbCwgdGhhdCBtZWFucyB3ZSBnb3Qgc29tZSBr
aW5kCisgICAgLy8gb2YgZmFuY3kgY29sb3IgdGhhdCBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gUkdC
LiBDaGFuZ2luZyB0aGF0IHRvICJ0cmFuc3BhcmVudCIKKyAgICAvLyBtaWdodCBub3QgYmUgZ3Jl
YXQsIGJ1dCBpdCdzIHByb2JhYmx5IE9LLgorICAgIGlmIChyZ2JDb2xvciA9PSBuaWwpCisgICAg
ICAgIHJldHVybiBAInRyYW5zcGFyZW50IjsKKyAgICBmbG9hdCByID0gW3JnYkNvbG9yIHJlZENv
bXBvbmVudF07CisgICAgZmxvYXQgZyA9IFtyZ2JDb2xvciBncmVlbkNvbXBvbmVudF07CisgICAg
ZmxvYXQgYiA9IFtyZ2JDb2xvciBibHVlQ29tcG9uZW50XTsKKyAgICBmbG9hdCBhID0gW3JnYkNv
bG9yIGFscGhhQ29tcG9uZW50XTsKKyAgICBpZiAoYSA9PSAwKQorICAgICAgICByZXR1cm4gQCJ0
cmFuc3BhcmVudCI7CisgICAgaWYgKHIgPT0gMCAmJiBnID09IDAgJiYgYiA9PSAwICYmIGEgPT0g
MSkKKyAgICAgICAgcmV0dXJuIEAiYmxhY2siOworICAgIGlmIChyID09IDEgJiYgZyA9PSAxICYm
IGIgPT0gMSAmJiBhID09IDEpCisgICAgICAgIHJldHVybiBAIndoaXRlIjsKKyAgICAvLyBGSVhN
RTogTG90cyBtb3JlIG5hbWVkIGNvbG9ycy4gTWF5YmUgd2UgY291bGQgdXNlIHRoZSB0YWJsZSBp
biBXZWJDb3JlPworICAgIGlmIChhID09IDEpCisgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAInJnYiglLjBmLCUuMGYsJS4wZikiLCByICogMjU1LCBnICogMjU1LCBi
ICogMjU1XTsKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJyZ2JhKCUu
MGYsJS4wZiwlLjBmLCVmKSIsIHIgKiAyNTUsIGcgKiAyNTUsIGIgKiAyNTUsIGFdOworfQorCist
IChOU1N0cmluZyAqKV9zaGFkb3dBc1N0cmluZzooTlNTaGFkb3cgKilzaGFkb3cKK3sKKyAgICBp
ZiAoc2hhZG93ID09IG5pbCkKKyAgICAgICAgcmV0dXJuIEAibm9uZSI7CisgICAgTlNTaXplIG9m
ZnNldCA9IFtzaGFkb3cgc2hhZG93T2Zmc2V0XTsKKyAgICBmbG9hdCBibHVyUmFkaXVzID0gW3No
YWRvdyBzaGFkb3dCbHVyUmFkaXVzXTsKKyAgICBpZiAob2Zmc2V0LndpZHRoID09IDAgJiYgb2Zm
c2V0LmhlaWdodCA9PSAwICYmIGJsdXJSYWRpdXMgPT0gMCkKKyAgICAgICAgcmV0dXJuIEAibm9u
ZSI7CisgICAgTlNDb2xvciAqY29sb3IgPSBbc2hhZG93IHNoYWRvd0NvbG9yXTsKKyAgICBpZiAo
Y29sb3IgPT0gbmlsKQorICAgICAgICByZXR1cm4gQCJub25lIjsKKyAgICAvLyBGSVhNRTogSGFu
ZGxlIG5vbi1pbnRlZ3JhbCB2YWx1ZXMgaGVyZT8KKyAgICBpZiAoYmx1clJhZGl1cyA9PSAwKQor
ICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlLjBmcHggJS4w
ZnB4IiwgW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdLCBvZmZzZXQud2lkdGgsIG9mZnNldC5o
ZWlnaHRdOworICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAICUuMGZw
eCAlLjBmcHggJS4wZnB4IiwgW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdLCBvZmZzZXQud2lk
dGgsIG9mZnNldC5oZWlnaHQsIGJsdXJSYWRpdXNdOworfQorCistIChET01DU1NTdHlsZURlY2xh
cmF0aW9uICopX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0aW9u
YXJ5Cit7CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlT
dHlsZV07CisKKyAgICBOU0NvbG9yICpjb2xvciA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpO
U0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIFtzdHlsZSBzZXRCYWNrZ3JvdW5k
Q29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdXTsKKworICAgIE5TRm9udCAqZm9udCA9
IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICBpZiAo
IWZvbnQpIHsKKyAgICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6QCJIZWx2ZXRpY2EiXTsKKyAg
ICAgICAgW3N0eWxlIHNldEZvbnRTaXplOkAiMTJweCJdOworICAgICAgICBbc3R5bGUgc2V0Rm9u
dFdlaWdodDpAIm5vcm1hbCJdOworICAgICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOkAibm9ybWFs
Il07CisgICAgfSBlbHNlIHsKKyAgICAgICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250TWFu
YWdlciBzaGFyZWRGb250TWFuYWdlcl07CisgICAgICAgIC8vIEZJWE1FOiBOZWVkIG1vcmUgc29w
aGlzdGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxlIGZhbWlseSBuYW1l
cworICAgICAgICAvLyB3aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUgcXVvdGUgb3IgYmFja3Ns
YXNoIGluIHRoZWlyIG5hbWVzLgorICAgICAgICBbc3R5bGUgc2V0Rm9udEZhbWlseTpbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIiclQCciLCBbZm9udCBmYW1pbHlOYW1lXV1dOworICAgICAg
ICBbc3R5bGUgc2V0Rm9udFNpemU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlMC5mcHgi
LCBbZm9udCBwb2ludFNpemVdXV07CisgICAgICAgIC8vIEZJWE1FOiBNYXAgdG8gdGhlIGVudGly
ZSByYW5nZSBvZiBDU1Mgd2VpZ2h0IHZhbHVlcy4KKyAgICAgICAgaWYgKFtmbSB3ZWlnaHRPZkZv
bnQ6Zm9udF0gPj0gTUlOX0JPTERfV0VJR0hUKQorICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRX
ZWlnaHQ6QCJib2xkIl07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtzdHlsZSBzZXRGb250
V2VpZ2h0OkAibm9ybWFsIl07CisgICAgICAgIGlmIChbZm0gdHJhaXRzT2ZGb250OmZvbnRdICYg
TlNJdGFsaWNGb250TWFzaykKKyAgICAgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6QCJpdGFs
aWMiXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3N0eWxlIHNldEZvbnRTdHlsZTpAIm5v
cm1hbCJdOworICAgIH0KKworICAgIGNvbG9yID0gW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5T
Rm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgW3N0eWxlIHNldENvbG9yOmNvbG9y
ID8gW3NlbGYgX2NvbG9yQXNTdHJpbmc6Y29sb3JdIDogKE5TU3RyaW5nICopQCJibGFjayJdOwor
CisgICAgTlNTaGFkb3cgKnNoYWRvdyA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU1NoYWRv
d0F0dHJpYnV0ZU5hbWVdOworICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OltzZWxmIF9zaGFkb3dB
c1N0cmluZzpzaGFkb3ddXTsKKworICAgIGludCBzdHJpa2V0aHJvdWdoSW50ID0gW1tkaWN0aW9u
YXJ5IG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hTdHlsZUF0dHJpYnV0ZU5hbWVdIGludFZh
bHVlXTsKKworICAgIGludCBzdXBlcnNjcmlwdEludCA9IFtbZGljdGlvbmFyeSBvYmplY3RGb3JL
ZXk6TlNTdXBlcnNjcmlwdEF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKKyAgICBpZiAoc3VwZXJz
Y3JpcHRJbnQgPiAwKQorICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1cGVyIl07
CisgICAgZWxzZSBpZiAoc3VwZXJzY3JpcHRJbnQgPCAwKQorICAgICAgICBbc3R5bGUgc2V0VmVy
dGljYWxBbGlnbjpAInN1YiJdOworICAgIGVsc2UKKyAgICAgICAgW3N0eWxlIHNldFZlcnRpY2Fs
QWxpZ246QCJiYXNlbGluZSJdOworICAgIGludCB1bmRlcmxpbmVJbnQgPSBbW2RpY3Rpb25hcnkg
b2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Cisg
ICAgLy8gRklYTUU6IFVuZGVybGluZSB3aW5zIGhlcmUgaWYgd2UgaGF2ZSBib3RoIChzZWUgYnVn
IDM3OTA0NDMpLgorICAgIGlmIChzdHJpa2V0aHJvdWdoSW50ID09IE5TVW5kZXJsaW5lU3R5bGVO
b25lICYmIHVuZGVybGluZUludCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSkKKyAgICAgICAgW3N0
eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1
ZTpAIm5vbmUiIHByaW9yaXR5OkAiIl07CisgICAgZWxzZSBpZiAodW5kZXJsaW5lSW50ID09IE5T
VW5kZXJsaW5lU3R5bGVOb25lKQorICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwt
dGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibGluZS10aHJvdWdoIiBwcmlvcml0
eTpAIiJdOworICAgIGVsc2UKKyAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRl
eHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6QCIi
XTsKKworICAgIHJldHVybiBzdHlsZTsKK30KKworLSAodm9pZClfYXBwbHlTdHlsZVRvU2VsZWN0
aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0aFVuZG9BY3Rpb246KEVkaXRB
Y3Rpb24pdW5kb0FjdGlvbgoreworICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9uKTsKK30KKworLSAodm9pZClfYXBwbHlQYXJh
Z3JhcGhTdHlsZVRvU2VsZWN0aW9uOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgd2l0
aFVuZG9BY3Rpb246KEVkaXRBY3Rpb24pdW5kb0FjdGlvbgoreworICAgIGlmIChGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKKyAgICAgICAgY29yZUZyYW1lLT5lZGl0b3Io
KS0+YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKGNvcmUoc3R5bGUpLCB1bmRvQWN0aW9u
KTsKK30KKworLSAoQk9PTClfaGFuZGxlU3R5bGVLZXlFcXVpdmFsZW50OihOU0V2ZW50ICopZXZl
bnQKK3sKKyAgICBBU1NFUlQoW3NlbGYgX3dlYlZpZXddKTsKKyAgICBpZiAoIVtbW3NlbGYgX3dl
YlZpZXddIHByZWZlcmVuY2VzXSByZXNwZWN0U3RhbmRhcmRTdHlsZUtleUVxdWl2YWxlbnRzXSkK
KyAgICAgICAgcmV0dXJuIE5POworICAgIAorICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAg
ICAgICByZXR1cm4gTk87CisgICAgCisgICAgaWYgKChbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBO
U0RldmljZUluZGVwZW5kZW50TW9kaWZpZXJGbGFnc01hc2spICE9IE5TQ29tbWFuZEtleU1hc2sp
CisgICAgICAgIHJldHVybiBOTzsKKyAgICAKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW2V2ZW50
IGNoYXJhY3RlcnNdOworICAgIGlmIChbc3RyaW5nIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJi
Il0gPT0gTlNPcmRlcmVkU2FtZSkgeworICAgICAgICBbc2VsZiBleGVjdXRlQ29yZUNvbW1hbmRC
eU5hbWU6IlRvZ2dsZUJvbGQiXTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYg
KFtzdHJpbmcgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZTpAImkiXSA9PSBOU09yZGVyZWRTYW1lKSB7
CisgICAgICAgIFtzZWxmIGV4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZToiVG9nZ2xlSXRhbGljIl07
CisgICAgICAgIHJldHVybiBZRVM7CisgICAgfQorICAgIAorICAgIHJldHVybiBOTzsKK30KKwor
LSAoQk9PTClwZXJmb3JtS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdo
dCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwor
ICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBh
dXRvcmVsZWFzZV07CisKKyAgICBpZiAoW3NlbGYgX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDpl
dmVudF0pCisgICAgICAgIHJldHVybiBZRVM7CisgICAgCisgICAgQk9PTCBldmVudFdhc1NlbnRU
b1dlYkNvcmUgPSAoX3ByaXZhdGUtPmtleURvd25FdmVudCA9PSBldmVudCk7CisgICAgQk9PTCBy
ZXQgPSBOTzsKKworICAgIFtfcHJpdmF0ZS0+a2V5RG93bkV2ZW50IHJlbGVhc2VdOworICAgIF9w
cml2YXRlLT5rZXlEb3duRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKKyAgICAKKyAgICBbc2VsZiBy
ZXRhaW5dOworCisgICAgLy8gUGFzcyBjb21tYW5kLWtleSBjb21ib3MgdGhyb3VnaCBXZWJDb3Jl
IGlmIHRoZXJlIGlzIGEga2V5IGJpbmRpbmcgYXZhaWxhYmxlIGZvcgorICAgIC8vIHRoaXMgZXZl
bnQuIFRoaXMgbGV0cyB3ZWIgcGFnZXMgaGF2ZSBhIGNyYWNrIGF0IGludGVyY2VwdGluZyBjb21t
YW5kLW1vZGlmaWVkIGtleXByZXNzZXMuCisgICAgLy8gQnV0IGRvbid0IGRvIGl0IGlmIHdlIGhh
dmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBldmVudC4KKyAgICAvLyBQcmVzc2luZyBFc2MgcmVzdWx0
cyBpbiBhIGZha2UgZXZlbnQgYmVpbmcgc2VudCAtIGRvbid0IHBhc3MgaXQgdG8gV2ViQ29yZS4K
KyAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBldmVudCA9PSBbTlNBcHAgY3VycmVu
dEV2ZW50XSAmJiBzZWxmID09IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVyXSkKKyAgICAg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgICAgICBy
ZXQgPSBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKworICAgIGlmICgh
cmV0KQorICAgICAgICByZXQgPSBbc3VwZXIgcGVyZm9ybUtleUVxdWl2YWxlbnQ6ZXZlbnRdOwor
CisgICAgW3NlbGYgcmVsZWFzZV07CisgICAgCisgICAgcmV0dXJuIHJldDsKK30KKworLSAodm9p
ZCljb3B5Rm9udDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8g
UHV0IFJURiB3aXRoIGZvbnQgYXR0cmlidXRlcyBvbiB0aGUgcGFzdGVib2FyZC4KKyAgICAvLyBN
YXliZSBsYXRlciB3ZSBzaG91bGQgYWRkIGEgcGFzdGVib2FyZCB0eXBlIHRoYXQgY29udGFpbnMg
Q1NTIHRleHQgZm9yICJuYXRpdmUiIGNvcHkgYW5kIHBhc3RlIGZvbnQuCisgICAgTlNQYXN0ZWJv
YXJkICpmb250UGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOk5T
Rm9udFBib2FyZF07CisgICAgW2ZvbnRQYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczpbTlNBcnJheSBh
cnJheVdpdGhPYmplY3Q6TlNGb250UGJvYXJkVHlwZV0gb3duZXI6bmlsXTsKKyAgICBbZm9udFBh
c3RlYm9hcmQgc2V0RGF0YTpbc2VsZiBfc2VsZWN0aW9uU3RhcnRGb250QXR0cmlidXRlc0FzUlRG
XSBmb3JUeXBlOk5TRm9udFBib2FyZFR5cGVdOworfQorCistICh2b2lkKXBhc3RlRm9udDooaWQp
c2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgLy8gUmVhZCBSVEYgd2l0aCBm
b250IGF0dHJpYnV0ZXMgZnJvbSB0aGUgcGFzdGVib2FyZC4KKyAgICAvLyBNYXliZSBsYXRlciB3
ZSBzaG91bGQgYWRkIGEgcGFzdGVib2FyZCB0eXBlIHRoYXQgY29udGFpbnMgQ1NTIHRleHQgZm9y
ICJuYXRpdmUiIGNvcHkgYW5kIHBhc3RlIGZvbnQuCisgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1Nl
bGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udEF0dHJpYnV0ZXM6W3NlbGYgX2ZvbnRBdHRyaWJ1
dGVzRnJvbUZvbnRQYXN0ZWJvYXJkXV0gd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblBhc3RlRm9u
dF07Cit9CisKKy0gKHZvaWQpcGFzdGVBc1JpY2hUZXh0OihpZClzZW5kZXIKK3sKKyAgICBDT01N
QU5EX1BST0xPR1VFCisKKyAgICAvLyBTaW5jZSByaWNoIHRleHQgYWx3YXlzIGJlYXRzIHBsYWlu
IHRleHQgd2hlbiBib3RoIGFyZSBvbiB0aGUgcGFzdGVib2FyZCwgaXQncyBub3QKKyAgICAvLyBj
bGVhciBob3cgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBwbGFpbiBvbGQgcGFzdGUuCisgICAgW3Nl
bGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBnZW5lcmFsUGFzdGVib2FyZF0g
YWxsb3dQbGFpblRleHQ6Tk9dOworfQorCistIChOU0ZvbnQgKilfb3JpZ2luYWxGb250QQorewor
ICAgIHJldHVybiBbW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFt
aWx5OkAiSGVsdmV0aWNhIiB0cmFpdHM6MCB3ZWlnaHQ6U1RBTkRBUkRfV0VJR0hUIHNpemU6MTAu
MGZdOworfQorCistIChOU0ZvbnQgKilfb3JpZ2luYWxGb250QgoreworICAgIHJldHVybiBbW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdIGZvbnRXaXRoRmFtaWx5OkAiVGltZXMiIHRy
YWl0czpOU0ZvbnRJdGFsaWNUcmFpdCB3ZWlnaHQ6U1RBTkRBUkRfQk9MRF9XRUlHSFQgc2l6ZTox
Mi4wZl07Cit9CisKKy0gKHZvaWQpX2FkZFRvU3R5bGU6KERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KilzdHlsZSBmb250QTooTlNGb250ICopYSBmb250QjooTlNGb250ICopYgoreworICAgIC8vIFNp
bmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpcmVjdGx5IGFzayBOU0ZvbnRNYW5hZ2VyIHdoYXQgc3R5
bGUgY2hhbmdlIGl0J3MgZ29pbmcgdG8gZG8KKyAgICAvLyB3ZSBpbnN0ZWFkIHBhc3MgdHdvICJz
cGVjaW1lbiIgZm9udHMgdG8gaXQgYW5kIGxldCBpdCBjaGFuZ2UgdGhlbS4gV2UgdGhlbiBkZWR1
Y2Ugd2hhdAorICAgIC8vIHN0eWxlIGNoYW5nZSBpdCB3YXMgZG9pbmcgYnkgbG9va2luZyBhdCB3
aGF0IGhhcHBlbmVkIHRvIGVhY2ggb2YgdGhlIHR3byBmb250cy4KKyAgICAvLyBTbyBpZiBpdCB3
YXMgbWFraW5nIHRoZSB0ZXh0IGJvbGQsIGJvdGggZm9udHMgd2lsbCBiZSBib2xkIGFmdGVyIHRo
ZSBmYWN0LgorCisgICAgaWYgKGEgPT0gbmlsIHx8IGIgPT0gbmlsKQorICAgICAgICByZXR1cm47
CisKKyAgICBOU0ZvbnRNYW5hZ2VyICpmbSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5h
Z2VyXTsKKworICAgIE5TRm9udCAqb2EgPSBbc2VsZiBfb3JpZ2luYWxGb250QV07CisKKyAgICBO
U1N0cmluZyAqYUZhbWlseU5hbWUgPSBbYSBmYW1pbHlOYW1lXTsKKyAgICBOU1N0cmluZyAqYkZh
bWlseU5hbWUgPSBbYiBmYW1pbHlOYW1lXTsKKworICAgIGludCBhUG9pbnRTaXplID0gKGludClb
YSBwb2ludFNpemVdOworICAgIGludCBiUG9pbnRTaXplID0gKGludClbYiBwb2ludFNpemVdOwor
CisgICAgaW50IGFXZWlnaHQgPSBbZm0gd2VpZ2h0T2ZGb250OmFdOworICAgIGludCBiV2VpZ2h0
ID0gW2ZtIHdlaWdodE9mRm9udDpiXTsKKworICAgIEJPT0wgYUlzSXRhbGljID0gKFtmbSB0cmFp
dHNPZkZvbnQ6YV0gJiBOU0l0YWxpY0ZvbnRNYXNrKSAhPSAwOworICAgIEJPT0wgYklzSXRhbGlj
ID0gKFtmbSB0cmFpdHNPZkZvbnQ6Yl0gJiBOU0l0YWxpY0ZvbnRNYXNrKSAhPSAwOworCisgICAg
aWYgKFthRmFtaWx5TmFtZSBpc0VxdWFsVG9TdHJpbmc6YkZhbWlseU5hbWVdKSB7CisgICAgICAg
IE5TU3RyaW5nICpmYW1pbHlOYW1lRm9yQ1NTID0gYUZhbWlseU5hbWU7CisKKyAgICAgICAgLy8g
VGhlIGZhbWlseSBuYW1lIG1heSBub3QgYmUgc3BlY2lmaWMgZW5vdWdoIHRvIGdldCB1cyB0aGUg
Zm9udCBzcGVjaWZpZWQuCisgICAgICAgIC8vIEluIHNvbWUgY2FzZXMsIHRoZSBvbmx5IHdheSB0
byBnZXQgZXhhY3RseSB3aGF0IHdlIGFyZSBsb29raW5nIGZvciBpcyB0byB1c2UKKyAgICAgICAg
Ly8gdGhlIFBvc3RzY3JpcHQgbmFtZS4KKyAgICAgICAgCisgICAgICAgIC8vIEZpbmQgdGhlIGZv
bnQgdGhlIHNhbWUgd2F5IHRoZSByZW5kZXJpbmcgY29kZSB3b3VsZCBsYXRlciBpZiBpdCBlbmNv
dW50ZXJlZCB0aGlzIENTUy4KKyAgICAgICAgTlNGb250VHJhaXRNYXNrIHRyYWl0cyA9IGFJc0l0
YWxpYyA/IE5TRm9udEl0YWxpY1RyYWl0IDogMDsKKyAgICAgICAgTlNGb250ICpmb3VuZEZvbnQg
PSBXZWJDb3JlRmluZEZvbnQoYUZhbWlseU5hbWUsIHRyYWl0cywgYVdlaWdodCwgYVBvaW50U2l6
ZSk7CisKKyAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZmluZCBhIGZvbnQgd2l0aCB0aGUgc2FtZSBQ
b3N0c2NyaXB0IG5hbWUsIHRoZW4gd2UnbGwgaGF2ZSB0byB1c2UgdGhlCisgICAgICAgIC8vIFBv
c3RzY3JpcHQgbmFtZSB0byBtYWtlIHRoZSBDU1Mgc3BlY2lmaWMgZW5vdWdoLgorICAgICAgICBp
ZiAoIVtbZm91bmRGb250IGZvbnROYW1lXSBpc0VxdWFsVG9TdHJpbmc6W2EgZm9udE5hbWVdXSkK
KyAgICAgICAgICAgIGZhbWlseU5hbWVGb3JDU1MgPSBbYSBmb250TmFtZV07CisKKyAgICAgICAg
Ly8gRklYTUU6IE5lZWQgbW9yZSBzb3BoaXN0aWNhdGVkIGVzY2FwaW5nIGNvZGUgaWYgd2Ugd2Fu
dCB0byBoYW5kbGUgZmFtaWx5IG5hbWVzCisgICAgICAgIC8vIHdpdGggY2hhcmFjdGVycyBsaWtl
IHNpbmdsZSBxdW90ZSBvciBiYWNrc2xhc2ggaW4gdGhlaXIgbmFtZXMuCisgICAgICAgIFtzdHls
ZSBzZXRGb250RmFtaWx5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJyVAJyIsIGZhbWls
eU5hbWVGb3JDU1NdXTsKKyAgICB9CisKKyAgICBpbnQgc29hID0gKGludClbb2EgcG9pbnRTaXpl
XTsKKyAgICBpZiAoYVBvaW50U2l6ZSA9PSBiUG9pbnRTaXplKQorICAgICAgICBbc3R5bGUgc2V0
Rm9udFNpemU6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlZHB4IiwgYVBvaW50U2l6ZV1d
OworICAgIGVsc2UgaWYgKGFQb2ludFNpemUgPCBzb2EpCisgICAgICAgIFtzdHlsZSBfc2V0Rm9u
dFNpemVEZWx0YTpAIi0xcHgiXTsKKyAgICBlbHNlIGlmIChhUG9pbnRTaXplID4gc29hKQorICAg
ICAgICBbc3R5bGUgX3NldEZvbnRTaXplRGVsdGE6QCIxcHgiXTsKKworICAgIGlmIChhV2VpZ2h0
ID09IGJXZWlnaHQpCisgICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OmFXZWlnaHQgPiBNSU5f
Qk9MRF9XRUlHSFQgPyBAImJvbGQiIDogQCJub3JtYWwiXTsKKworICAgIGlmIChhSXNJdGFsaWMg
PT0gYklzSXRhbGljKQorICAgICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOmFJc0l0YWxpYyA/IEAi
aXRhbGljIiA6ICBAIm5vcm1hbCJdOworfQorCistIChET01DU1NTdHlsZURlY2xhcmF0aW9uICop
X3N0eWxlRnJvbUZvbnRNYW5hZ2VyT3BlcmF0aW9uCit7CisgICAgRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlTdHlsZV07CisKKyAgICBOU0ZvbnRNYW5hZ2VyICpm
bSA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKKworICAgIE5TRm9udCAqb2Eg
PSBbc2VsZiBfb3JpZ2luYWxGb250QV07CisgICAgTlNGb250ICpvYiA9IFtzZWxmIF9vcmlnaW5h
bEZvbnRCXTsgICAgCisgICAgW3NlbGYgX2FkZFRvU3R5bGU6c3R5bGUgZm9udEE6W2ZtIGNvbnZl
cnRGb250Om9hXSBmb250QjpbZm0gY29udmVydEZvbnQ6b2JdXTsKKworICAgIHJldHVybiBzdHls
ZTsKK30KKworLSAodm9pZCljaGFuZ2VGb250OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BS
T0xPR1VFCisKKyAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0aW9uOltzZWxmIF9zdHlsZUZy
b21Gb250TWFuYWdlck9wZXJhdGlvbl0gd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblNldEZvbnRd
OworfQorCistIChET01DU1NTdHlsZURlY2xhcmF0aW9uICopX3N0eWxlRm9yQXR0cmlidXRlQ2hh
bmdlOihpZClzZW5kZXIKK3sKKyAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtz
ZWxmIF9lbXB0eVN0eWxlXTsKKworICAgIE5TU2hhZG93ICpzaGFkb3cgPSBbW05TU2hhZG93IGFs
bG9jXSBpbml0XTsKKyAgICBbc2hhZG93IHNldFNoYWRvd09mZnNldDpOU01ha2VTaXplKDEsIDEp
XTsKKworICAgIE5TRGljdGlvbmFyeSAqb2EgPSBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRo
T2JqZWN0c0FuZEtleXM6CisgICAgICAgIFtzZWxmIF9vcmlnaW5hbEZvbnRBXSwgTlNGb250QXR0
cmlidXRlTmFtZSwKKyAgICAgICAgbmlsXTsKKyAgICBOU0RpY3Rpb25hcnkgKm9iID0gW05TRGlj
dGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgorICAgICAgICBbTlNDb2xvciBi
bGFja0NvbG9yXSwgTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAorICAgICAgICBbc2Vs
ZiBfb3JpZ2luYWxGb250Ql0sIE5TRm9udEF0dHJpYnV0ZU5hbWUsCisgICAgICAgIFtOU0NvbG9y
IHdoaXRlQ29sb3JdLCBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUsCisgICAgICAgIHNo
YWRvdywgTlNTaGFkb3dBdHRyaWJ1dGVOYW1lLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0
aEludDpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSwgTlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1
dGVOYW1lLAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDoxXSwgTlNTdXBlcnNjcmlw
dEF0dHJpYnV0ZU5hbWUsCisgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Ok5TVW5kZXJs
aW5lU3R5bGVTaW5nbGVdLCBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZSwKKyAgICAgICAg
bmlsXTsKKworICAgIFtzaGFkb3cgcmVsZWFzZV07CisKKyNpZiAwCisKK05TT2JsaXF1ZW5lc3NB
dHRyaWJ1dGVOYW1lICAgICAgICAvKiBmbG9hdDsgc2tldyB0byBiZSBhcHBsaWVkIHRvIGdseXBo
cywgZGVmYXVsdCAwOiBubyBza2V3ICovCisgICAgLy8gZm9udC1zdHlsZSwgYnV0IHRoYXQgaXMg
anVzdCBhbiBvbi1vZmYgc3dpdGNoCisKK05TRXhwYW5zaW9uQXR0cmlidXRlTmFtZSAgICAgICAg
ICAvKiBmbG9hdDsgbG9nIG9mIGV4cGFuc2lvbiBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byBnbHlw
aHMsIGRlZmF1bHQgMDogbm8gZXhwYW5zaW9uICovCisgICAgLy8gZm9udC1zdHJldGNoPworCitO
U0tlcm5BdHRyaWJ1dGVOYW1lICAgICAgICAgICAgICAgLyogZmxvYXQsIGFtb3VudCB0byBtb2Rp
ZnkgZGVmYXVsdCBrZXJuaW5nLCBpZiAwLCBrZXJuaW5nIG9mZiAqLworICAgIC8vIGxldHRlci1z
cGFjaW5nPyBwcm9iYWJseSBub3QgZ29vZCBlbm91Z2gKKworTlNVbmRlcmxpbmVDb2xvckF0dHJp
YnV0ZU5hbWUgICAgIC8qIE5TQ29sb3IsIGRlZmF1bHQgbmlsOiBzYW1lIGFzIGZvcmVncm91bmQg
Y29sb3IgKi8KK05TU3RyaWtldGhyb3VnaENvbG9yQXR0cmlidXRlTmFtZSAvKiBOU0NvbG9yLCBk
ZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCisgICAgLy8gdGV4dC1kZWNv
cmF0aW9uLWNvbG9yPworCitOU0xpZ2F0dXJlQXR0cmlidXRlTmFtZSAgICAgICAgICAgLyogaW50
LCBkZWZhdWx0IDE6IGRlZmF1bHQgbGlnYXR1cmVzLCAwOiBubyBsaWdhdHVyZXMsIDI6IGFsbCBs
aWdhdHVyZXMgKi8KK05TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVOYW1lICAgICAvKiBmbG9hdCwg
aW4gcG9pbnRzOyBvZmZzZXQgZnJvbSBiYXNlbGluZSwgZGVmYXVsdCAwICovCitOU1N0cm9rZVdp
ZHRoQXR0cmlidXRlTmFtZSAgICAgICAgLyogZmxvYXQsIGluIHBlcmNlbnQgb2YgZm9udCBwb2lu
dCBzaXplLCBkZWZhdWx0IDA6IG5vIHN0cm9rZTsgcG9zaXRpdmUgZm9yIHN0cm9rZSBhbG9uZSwg
bmVnYXRpdmUgZm9yIHN0cm9rZSBhbmQgZmlsbCAoYSB0eXBpY2FsIHZhbHVlIGZvciBvdXRsaW5l
ZCB0ZXh0IHdvdWxkIGJlIDMuMCkgKi8KK05TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lICAgICAg
ICAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCisg
ICAgLy8gbmVlZCBleHRlbnNpb25zPworCisjZW5kaWYKKyAgICAKKyAgICBOU0RpY3Rpb25hcnkg
KmEgPSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9hXTsKKyAgICBOU0RpY3Rpb25hcnkgKmIg
PSBbc2VuZGVyIGNvbnZlcnRBdHRyaWJ1dGVzOm9iXTsKKworICAgIE5TQ29sb3IgKmNhID0gW2Eg
b2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgTlNDb2xv
ciAqY2IgPSBbYiBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
KyAgICBpZiAoY2EgPT0gY2IpIHsKKyAgICAgICAgW3N0eWxlIHNldEJhY2tncm91bmRDb2xvcjpb
c2VsZiBfY29sb3JBc1N0cmluZzpjYV1dOworICAgIH0KKworICAgIFtzZWxmIF9hZGRUb1N0eWxl
OnN0eWxlIGZvbnRBOlthIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXSBmb250Qjpb
YiBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV1dOworCisgICAgY2EgPSBbYSBvYmpl
Y3RGb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICBjYiA9IFtiIG9i
amVjdEZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgIGlmIChjYSA9
PSBjYikgeworICAgICAgICBbc3R5bGUgc2V0Q29sb3I6W3NlbGYgX2NvbG9yQXNTdHJpbmc6Y2Fd
XTsKKyAgICB9CisKKyAgICBOU1NoYWRvdyAqc2hhID0gW2Egb2JqZWN0Rm9yS2V5Ok5TU2hhZG93
QXR0cmlidXRlTmFtZV07CisgICAgaWYgKHNoYSkKKyAgICAgICAgW3N0eWxlIHNldFRleHRTaGFk
b3c6W3NlbGYgX3NoYWRvd0FzU3RyaW5nOnNoYV1dOworICAgIGVsc2UgaWYgKFtiIG9iamVjdEZv
cktleTpOU1NoYWRvd0F0dHJpYnV0ZU5hbWVdID09IG5pbCkKKyAgICAgICAgW3N0eWxlIHNldFRl
eHRTaGFkb3c6QCJub25lIl07CisKKyAgICBpbnQgc2EgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TU3Ry
aWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGludCBzYiA9IFtb
YiBvYmplY3RGb3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1
ZV07CisgICAgaWYgKHNhID09IHNiKSB7CisgICAgICAgIGlmIChzYSA9PSBOU1VuZGVybGluZVN0
eWxlTm9uZSkKKyAgICAgICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRl
Y29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBwcmlvcml0eTpAIiJdOyAKKyAgICAg
ICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJubyBsaW5lLXRocm91Z2giIHJhdGhlciB0aGFuICJu
b25lIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0
bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QiIHZhbHVlOkAibGluZS10aHJvdWdoIiBwcmlv
cml0eTpAIiJdOworICAgICAgICAgICAgLy8gd2UgcmVhbGx5IG1lYW4gImFkZCBsaW5lLXRocm91
Z2giIHJhdGhlciB0aGFuICJsaW5lLXRocm91Z2giCisgICAgfQorCisgICAgc2EgPSBbW2Egb2Jq
ZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgc2Ig
PSBbW2Igb2JqZWN0Rm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07
CisgICAgaWYgKHNhID09IHNiKSB7CisgICAgICAgIGlmIChzYSA+IDApCisgICAgICAgICAgICBb
c3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1cGVyIl07CisgICAgICAgIGVsc2UgaWYgKHNhIDwg
MCkKKyAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAic3ViIl07CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAiYmFzZWxpbmUiXTsK
KyAgICB9CisKKyAgICBpbnQgdWEgPSBbW2Egb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lU3R5bGVB
dHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07CisgICAgaW50IHViID0gW1tiIG9iamVjdEZvcktleTpO
U1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOworICAgIGlmICh1YSA9PSB1
YikgeworICAgICAgICBpZiAodWEgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCisgICAgICAgICAg
ICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3Qi
IHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsKKyAgICAgICAgICAgIC8vIHdlIHJlYWxseSBt
ZWFuICJubyB1bmRlcmxpbmUiIHJhdGhlciB0aGFuICJub25lIgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1pbi1l
ZmZlY3QiIHZhbHVlOkAidW5kZXJsaW5lIiBwcmlvcml0eTpAIiJdOworICAgICAgICAgICAgLy8g
d2UgcmVhbGx5IG1lYW4gImFkZCB1bmRlcmxpbmUiIHJhdGhlciB0aGFuICJ1bmRlcmxpbmUiCisg
ICAgfQorCisgICAgcmV0dXJuIHN0eWxlOworfQorCistICh2b2lkKWNoYW5nZUF0dHJpYnV0ZXM6
KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9hcHBseVN0
eWxlVG9TZWxlY3Rpb246W3NlbGYgX3N0eWxlRm9yQXR0cmlidXRlQ2hhbmdlOnNlbmRlcl0gd2l0
aFVuZG9BY3Rpb246RWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXNdOworfQorCistIChET01DU1NT
dHlsZURlY2xhcmF0aW9uICopX3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6KFNFTClz
ZWxlY3RvcgoreworICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2Vt
cHR5U3R5bGVdOworCisgICAgQVNTRVJUKFtzdHlsZSByZXNwb25kc1RvU2VsZWN0b3I6c2VsZWN0
b3JdKTsKKyAgICBbc3R5bGUgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yIHdpdGhPYmplY3Q6W3Nl
bGYgX2NvbG9yQXNTdHJpbmc6W1tOU0NvbG9yUGFuZWwgc2hhcmVkQ29sb3JQYW5lbF0gY29sb3Jd
XV07CisgICAgCisgICAgcmV0dXJuIHN0eWxlOworfQorCistIChFZGl0QWN0aW9uKV91bmRvQWN0
aW9uRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIGlmIChz
ZWxlY3RvciA9PSBAc2VsZWN0b3Ioc2V0QmFja2dyb3VuZENvbG9yOikpCisgICAgICAgIHJldHVy
biBFZGl0QWN0aW9uU2V0QmFja2dyb3VuZENvbG9yOyAgICAKKyAgICByZXR1cm4gRWRpdEFjdGlv
blNldENvbG9yOworfQorCistICh2b2lkKV9jaGFuZ2VDU1NDb2xvclVzaW5nU2VsZWN0b3I6KFNF
TClzZWxlY3RvciBpblJhbmdlOihET01SYW5nZSAqKXJhbmdlCit7CisgICAgRE9NQ1NTU3R5bGVE
ZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3Rv
cjpzZWxlY3Rvcl07CisgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKKyAg
ICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmll
dyBzaG91bGRBcHBseVN0eWxlOnN0eWxlIHRvRWxlbWVudHNJbkRPTVJhbmdlOnJhbmdlXSkKKyAg
ICAgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAg
ICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+YXBwbHlTdHlsZShjb3JlKHN0eWxlKSwgW3NlbGYg
X3VuZG9BY3Rpb25Gcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpzZWxlY3Rvcl0pOworfQorCist
ICh2b2lkKWNoYW5nZURvY3VtZW50QmFja2dyb3VuZENvbG9yOihpZClzZW5kZXIKK3sKKyAgICBD
T01NQU5EX1BST0xPR1VFCisKKyAgICAvLyBNaW1pY2tpbmcgTlNUZXh0VmlldywgdGhpcyBtZXRo
b2Qgc2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlCisgICAgLy8gZW50aXJlIGRvY3Vt
ZW50LiBUaGVyZSBpcyBubyBOU1RleHRWaWV3IEFQSSBmb3Igc2V0dGluZyB0aGUgYmFja2dyb3Vu
ZAorICAgIC8vIGNvbG9yIG9uIHRoZSBzZWxlY3RlZCByYW5nZSBvbmx5LiBOb3RlIHRoYXQgdGhp
cyBtZXRob2QgaXMgY3VycmVudGx5CisgICAgLy8gbmV2ZXIgY2FsbGVkIGZyb20gdGhlIFVJIChz
ZWUgY29tbWVudCBpbiBjaGFuZ2VDb2xvcjopLgorICAgIC8vIEZJWE1FOiB0aGlzIGFjdHVhbGx5
IGhhcyBubyBlZmZlY3Qgd2hlbiBjYWxsZWQsIHByb2JhYmx5IGR1ZSB0byAzNjU0ODUwLiBfZG9j
dW1lbnRSYW5nZSBzZWVtcworICAgIC8vIHRvIGRvIHRoZSByaWdodCB0aGluZyBiZWNhdXNlIGl0
IHdvcmtzIGluIHN0YXJ0U3BlYWtpbmc6LCBhbmQgSSBrbm93IHNldEJhY2tncm91bmRDb2xvcjog
ZG9lcyB0aGUKKyAgICAvLyByaWdodCB0aGluZyBiZWNhdXNlIEkgdGVzdGVkIGl0IHdpdGggW3Nl
bGYgX3NlbGVjdGVkUmFuZ2VdLgorICAgIC8vIEZJWE1FOiBUaGlzIHdvbid0IGFjdHVhbGx5IGFw
cGx5IHRoZSBzdHlsZSB0byB0aGUgZW50aXJlIHJhbmdlIGhlcmUsIGJlY2F1c2UgaXQgZW5kcyB1
cCBjYWxsaW5nCisgICAgLy8gW2ZyYW1lIF9hcHBseVN0eWxlOl0sIHdoaWNoIG9wZXJhdGVzIG9u
IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4gVG8gbWFrZSB0aGlzIHdvcmsgcmlnaHQsIHdlJ2xsCisg
ICAgLy8gbmVlZCB0byBzYXZlIG9mZiB0aGUgc2VsZWN0aW9uLCB0ZW1wb3JhcmlseSBzZXQgaXQg
dG8gdGhlIGVudGlyZSByYW5nZSwgbWFrZSB0aGUgY2hhbmdlLCB0aGVuCisgICAgLy8gcmVzdG9y
ZSB0aGUgb2xkIHNlbGVjdGlvbi4KKyAgICBbc2VsZiBfY2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVj
dG9yOkBzZWxlY3RvcihzZXRCYWNrZ3JvdW5kQ29sb3I6KSBpblJhbmdlOltzZWxmIF9kb2N1bWVu
dFJhbmdlXV07Cit9CisKKy0gKHZvaWQpY2hhbmdlQ29sb3I6KGlkKXNlbmRlcgoreworICAgIENP
TU1BTkRfUFJPTE9HVUUKKworICAgIC8vIEZJWE1FOiBpbiBOU1RleHRWaWV3LCB0aGlzIG1ldGhv
ZCBjYWxscyBjaGFuZ2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjogd2hlbiBhCisgICAgLy8gcHJp
dmF0ZSBjYWxsIGhhcyBlYXJsaWVyIGJlZW4gbWFkZSBieSBbTlNGb250Rm9udEVmZmVjdHNCb3gg
Y2hhbmdlQ29sb3I6XSwgc2VlIDM2NzQ0OTMuIAorICAgIC8vIEFwcEtpdCB3aWxsIGhhdmUgdG8g
YmUgcmV2aXNlZCB0byBhbGxvdyB0aGlzIHRvIHdvcmsgd2l0aCBhbnl0aGluZyB0aGF0IGlzbid0
IGFuIAorICAgIC8vIE5TVGV4dFZpZXcuIEhvd2V2ZXIsIHRoaXMgbWlnaHQgbm90IGJlIHJlcXVp
cmVkIGZvciBUaWdlciwgc2luY2UgdGhlIGJhY2tncm91bmQtY29sb3IgCisgICAgLy8gY2hhbmdp
bmcgYm94IGluIHRoZSBmb250IHBhbmVsIGRvZXNuJ3Qgd29yayBpbiBNYWlsICgzNjc0NDgxKSwg
dGhvdWdoIGl0IGRvZXMgaW4gVGV4dEVkaXQuCisgICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVj
dGlvbjpbc2VsZiBfc3R5bGVGcm9tQ29sb3JQYW5lbFdpdGhTZWxlY3RvcjpAc2VsZWN0b3Ioc2V0
Q29sb3I6KV0gCisgICAgICAgICAgICAgICAgICB3aXRoVW5kb0FjdGlvbjpFZGl0QWN0aW9uU2V0
Q29sb3JdOworfQorCistICh2b2lkKV9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjooU0VMKXNl
bGVjdG9yCit7CisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CisgICAgW3NlbGYgc2VsZWN0V29y
ZDpuaWxdOworICAgIE5TU3RyaW5nICp3b3JkID0gW1tmcmFtZSBfc2VsZWN0ZWRTdHJpbmddIHBl
cmZvcm1TZWxlY3RvcjpzZWxlY3Rvcl07CisgICAgLy8gRklYTUU6IERvZXMgdGhpcyBuZWVkIGEg
ZGlmZmVyZW50IGFjdGlvbiBjb250ZXh0IG90aGVyIHRoYW4gInR5cGVkIj8KKyAgICBpZiAoW3Nl
bGYgX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3b3JkIGdpdmVuQWN0aW9uOldlYlZp
ZXdJbnNlcnRBY3Rpb25UeXBlZF0pCisgICAgICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OndvcmQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOk5PXTsKK30KKwor
LSAodm9pZCl1cHBlcmNhc2VXb3JkOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VF
CisKKyAgICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKHVwcGVy
Y2FzZVN0cmluZyldOworfQorCistICh2b2lkKWxvd2VyY2FzZVdvcmQ6KGlkKXNlbmRlcgorewor
ICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9jaGFuZ2VXb3JkQ2FzZVdpdGhTZWxl
Y3RvcjpAc2VsZWN0b3IobG93ZXJjYXNlU3RyaW5nKV07Cit9CisKKy0gKHZvaWQpY2FwaXRhbGl6
ZVdvcmQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtzZWxmIF9j
aGFuZ2VXb3JkQ2FzZVdpdGhTZWxlY3RvcjpAc2VsZWN0b3IoY2FwaXRhbGl6ZWRTdHJpbmcpXTsK
K30KKworLSAodm9pZCljb21wbGV0ZTooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dV
RQorCisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IV9wcml2YXRlLT5jb21wQ29udHJvbGxlcikKKyAgICAgICAgX3ByaXZhdGUtPmNvbXBDb250cm9s
bGVyID0gW1tXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEhUTUxWaWV3
OnNlbGZdOworICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZG9Db21wbGV0aW9uXTsKK30K
KworLSAodm9pZCljaGVja1NwZWxsaW5nOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xP
R1VFCisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisg
ICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFkdmFuY2VUb05leHRNaXNzcGVsbGluZygpOwor
fQorCistICh2b2lkKXNob3dHdWVzc1BhbmVsOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BS
T0xPR1VFCisKKyAgICBOU1NwZWxsQ2hlY2tlciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBz
aGFyZWRTcGVsbENoZWNrZXJdOworICAgIGlmICghY2hlY2tlcikgeworICAgICAgICBMT0dfRVJS
T1IoIk5vIE5TU3BlbGxDaGVja2VyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgTlNQYW5lbCAqc3BlbGxpbmdQYW5lbCA9IFtjaGVja2VyIHNwZWxsaW5nUGFuZWxdOworI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIC8vIFBvc3QtVGlnZXIsIHRoaXMgbWVudSBpdGVt
IGlzIGEgc2hvdy9oaWRlIHRvZ2dsZSwgdG8gbWF0Y2ggQXBwS2l0LiBMZWF2ZSBUaWdlciBiZWhh
dmlvciBhbG9uZQorICAgIC8vIHRvIG1hdGNoIHJlc3Qgb2YgT1MgWC4KKyAgICBpZiAoW3NwZWxs
aW5nUGFuZWwgaXNWaXNpYmxlXSkgeworICAgICAgICBbc3BlbGxpbmdQYW5lbCBvcmRlck91dDpz
ZW5kZXJdOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgCisgICAgaWYgKEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUt
PmVkaXRvcigpLT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcodHJ1ZSk7CisgICAgW3NwZWxsaW5n
UGFuZWwgb3JkZXJGcm9udDpzZW5kZXJdOworfQorCistICh2b2lkKV9jaGFuZ2VTcGVsbGluZ1Rv
V29yZDooTlNTdHJpbmcgKiluZXdXb3JkCit7CisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIERvbid0IGNvcnJlY3QgdG8gZW1wdHkgc3RyaW5nLiAg
KEFwcEtpdCBjaGVja2VkIHRoaXMsIHdlIG1pZ2h0IGFzIHdlbGwgdG9vLikKKyAgICBpZiAoIVtO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdKSB7CisgICAgICAgIExPR19FUlJPUigi
Tm8gTlNTcGVsbENoZWNrZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoW25ld1dvcmQgaXNFcXVhbFRvU3RyaW5nOkAiIl0pCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChbc2VsZiBfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgZ2l2ZW5B
Y3Rpb246V2ViVmlld0luc2VydEFjdGlvblBhc3RlZF0pCisgICAgICAgIFtbc2VsZiBfZnJhbWVd
IF9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6bmV3V29yZCBzZWxlY3RSZXBsYWNlbWVudDpZRVMg
c21hcnRSZXBsYWNlOk5PXTsKK30KKworLSAodm9pZCljaGFuZ2VTcGVsbGluZzooaWQpc2VuZGVy
Cit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYgX2NoYW5nZVNwZWxsaW5nVG9X
b3JkOltbc2VuZGVyIHNlbGVjdGVkQ2VsbF0gc3RyaW5nVmFsdWVdXTsKK30KKworLSAodm9pZClw
ZXJmb3JtRmluZFBhbmVsQWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VF
CisKKyAgICAvLyBJbXBsZW1lbnRpbmcgdGhpcyB3aWxsIHByb2JhYmx5IHJlcXVpcmUgY29weWlu
ZyBhbGwgb2YgTlNGaW5kUGFuZWwuaCBhbmQgLm0uCisgICAgLy8gV2UgbmVlZCAqYWxtb3N0KiB0
aGUgc2FtZSB0aGluZyBhcyBBcHBLaXQsIGJ1dCBub3QgcXVpdGUuCisgICAgTE9HX0VSUk9SKCJ1
bmltcGxlbWVudGVkIik7Cit9CisKKy0gKHZvaWQpc3RhcnRTcGVha2luZzooaWQpc2VuZGVyCit7
CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2Zy
YW1lXTsKKyAgICBET01SYW5nZSAqcmFuZ2UgPSBbc2VsZiBfc2VsZWN0ZWRSYW5nZV07CisgICAg
aWYgKCFyYW5nZSB8fCBbcmFuZ2UgY29sbGFwc2VkXSkKKyAgICAgICAgcmFuZ2UgPSBbc2VsZiBf
ZG9jdW1lbnRSYW5nZV07CisgICAgW05TQXBwIHNwZWFrU3RyaW5nOltmcmFtZSBfc3RyaW5nRm9y
UmFuZ2U6cmFuZ2VdXTsKK30KKworLSAodm9pZClzdG9wU3BlYWtpbmc6KGlkKXNlbmRlcgorewor
ICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAgIFtOU0FwcCBzdG9wU3BlYWtpbmc6c2VuZGVyXTsK
K30KKworLSAodm9pZCl0b2dnbGVCYXNlV3JpdGluZ0RpcmVjdGlvbjooaWQpc2VuZGVyCit7Cisg
ICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV3JpdGluZ0Rp
cmVjdGlvbiBkaXJlY3Rpb24gPSBSaWdodFRvTGVmdFdyaXRpbmdEaXJlY3Rpb247CisgICAgc3dp
dGNoIChjb3JlRnJhbWUtPmJhc2VXcml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQoKSkg
eworICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6Cisg
ICAgICAgICAgICBkaXJlY3Rpb24gPSBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb247CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgLy8gVGhlIHdyaXRpbmdEaXJlY3Rpb25Gb3JTZWxlY3Rp
b25TdGFydCBtZXRob2Qgd2lsbCBuZXZlciByZXR1cm4gIm5hdHVyYWwiLiBJdAorICAgICAgICAv
LyB3aWxsIGFsd2F5cyByZXR1cm4gYSBjb25jcmV0ZSBkaXJlY3Rpb24uIFNvLCBrZWVwIHRoZSBj
b21waWxlciBoYXBweSwgYW5kIGFzc2VydCBub3QgcmVhY2hlZC4KKyAgICAgICAgY2FzZSBOU1dy
aXRpbmdEaXJlY3Rpb25OYXR1cmFsOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9
IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPnNldEJh
c2VXcml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbik7Cit9CisKKy0gKHZvaWQpY2hhbmdlQmFzZVdy
aXRpbmdEaXJlY3Rpb246KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKworICAg
IGlmICghW3NlbGYgX2NhbkVkaXRdKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgTlNXcml0
aW5nRGlyZWN0aW9uIHdyaXRpbmdEaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxOU1dyaXRpbmdEaXJl
Y3Rpb24+KFtzZW5kZXIgdGFnXSk7CisgICAgCisgICAgLy8gV2UgZGlzYWJsZSB0aGUgbWVudSBp
dGVtIHRoYXQgcGVyZm9ybXMgdGhpcyBhY3Rpb24gYmVjYXVzZSB3ZSBjYW4ndCBpbXBsZW1lbnQK
KyAgICAvLyBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsJ3MgYmVoYXZpb3IgdXNpbmcgQ1NTLgor
ICAgIEFTU0VSVCh3cml0aW5nRGlyZWN0aW9uICE9IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwp
OworCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAg
ICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGluZ0RpcmVjdGlvbih3cml0aW5n
RGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0ID8gTGVmdFRvUmlnaHRX
cml0aW5nRGlyZWN0aW9uIDogUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uKTsKK30KKworc3Rh
dGljIEJPT0wgd3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzRW5hYmxlZCgpCit7CisjaWYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
CisgICAgcmV0dXJuIFlFUzsKKyNlbHNlCisgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0g
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKKyAgICByZXR1cm4gW2RlZmF1
bHRzIGJvb2xGb3JLZXk6QCJOU0FsbG93c0Jhc2VXcml0aW5nRGlyZWN0aW9uS2V5QmluZGluZ3Mi
XSB8fCBbZGVmYXVsdHMgYm9vbEZvcktleTpAIkFwcGxlVGV4dERpcmVjdGlvbiJdOworI2VuZGlm
Cit9CisKKy0gKHZvaWQpX2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86KE5TV3JpdGluZ0Rp
cmVjdGlvbilkaXJlY3Rpb24KK3sKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgc3RhdGljIEJPT0wgYmluZGluZ3NFbmFibGVkID0gd3JpdGluZ0RpcmVj
dGlvbktleUJpbmRpbmdzRW5hYmxlZCgpOworCisgICAgaWYgKCFiaW5kaW5nc0VuYWJsZWQpIHsK
KyAgICAgICAgTlNCZWVwKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkpCisgICAgICAgIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPnNldEJhc2VXcml0aW5nRGlyZWN0aW9uKGRpcmVjdGlvbiA9PSBOU1dyaXRpbmdE
aXJlY3Rpb25MZWZ0VG9SaWdodCA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVjdGlvbiA6IFJpZ2h0
VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbik7Cit9CisKKy0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGly
ZWN0aW9uTGVmdFRvUmlnaHQ6KGlkKXNlbmRlcgoreworICAgIENPTU1BTkRfUFJPTE9HVUUKKwor
ICAgIFtzZWxmIF9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGluZ0RpcmVjdGlv
bkxlZnRUb1JpZ2h0XTsKK30KKworLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdo
dFRvTGVmdDooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9QUk9MT0dVRQorCisgICAgW3NlbGYg
X2NoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG86TlNXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xl
ZnRdOworfQorCisjaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwgZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKQorLSAodm9pZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvTFRS
OihpZClzZW5kZXIKK3sKKyAgICBbc2VsZiBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25MZWZ0VG9S
aWdodDpzZW5kZXJdOworfQorCistICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGlyZWN0aW9uVG9S
VEw6KGlkKXNlbmRlcgoreworICAgIFtzZWxmIG1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvblJpZ2h0
VG9MZWZ0OnNlbmRlcl07Cit9CisjZW5kaWYKKworLSAodm9pZCltYWtlQmFzZVdyaXRpbmdEaXJl
Y3Rpb25OYXR1cmFsOihpZClzZW5kZXIKK3sKKyAgICBMT0dfRVJST1IoIlNlbnQgZnJvbSAlQC4i
LCBzZW5kZXIpOworfQorCisjaWYgMAorCisvLyBDU1MgZG9lcyBub3QgaGF2ZSBhIHdheSB0byBz
cGVjaWZ5IGFuIG91dGxpbmUgZm9udCwgd2hpY2ggbWF5IG1ha2UgdGhpcyBkaWZmaWN1bHQgdG8g
aW1wbGVtZW50LgorLy8gTWF5YmUgYSBzcGVjaWFsIGNhc2Ugb2YgdGV4dC1zaGFkb3c/CistICh2
b2lkKW91dGxpbmU6KGlkKXNlbmRlcjsKKworLy8gVGhpcyBpcyBwYXJ0IG9mIHRhYmxlIHN1cHBv
cnQsIHdoaWNoIG1heSBiZSBpbiBOU1RleHRWaWV3IGZvciBUaWdlci4KKy8vIEl0J3MgcHJvYmFi
bHkgc2ltcGxlIHRvIGRvIHRoZSBlcXVpdmFsZW50IHRoaW5nIGZvciBXZWJLaXQuCistICh2b2lk
KWluc2VydFRhYmxlOihpZClzZW5kZXI7CisKKy8vIFRoaXMgY291bGQgYmUgaW1wb3J0YW50Lgor
LSAodm9pZCl0b2dnbGVUcmFkaXRpb25hbENoYXJhY3RlclNoYXBlOihpZClzZW5kZXI7CisKKy8v
IEknbSBub3Qgc3VyZSB3aGF0IHRoZSBlcXVpdmFsZW50cyBvZiB0aGVzZSBpbiB0aGUgd2ViIHdv
cmxkIGFyZS4KKy0gKHZvaWQpaW5zZXJ0TGluZVNlcGFyYXRvcjooaWQpc2VuZGVyOworLSAodm9p
ZClpbnNlcnRQYWdlQnJlYWs6KGlkKXNlbmRlcjsKKworLy8gVGhlc2UgbWV0aG9kcyBhcmUgbm90
IGltcGxlbWVudGVkIGluIE5TVGV4dFZpZXcgeWV0IGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGlu
Zy4KKy0gKHZvaWQpY2hhbmdlQ2FzZU9mTGV0dGVyOihpZClzZW5kZXI7CistICh2b2lkKXRyYW5z
cG9zZVdvcmRzOihpZClzZW5kZXI7CisKKyNlbmRpZgorCisjaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCisKKy8vIE92ZXJyaWRlIHRoaXMgc28gdGhhdCBBcHBLaXQgd2lsbCBzZW5kIHVzIGFycm93
IGtleXMgYXMga2V5IGRvd24gZXZlbnRzIHNvIHdlIGNhbgorLy8gc3VwcG9ydCB0aGVtIHZpYSB0
aGUga2V5IGJpbmRpbmdzIG1lY2hhbmlzbS4KKy0gKEJPT0wpX3dhbnRzS2V5RG93bkZvckV2ZW50
OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBib29sIGhhdmVXZWJDb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworCisgICAgLy8gSWYgd2UgaGF2ZSBhIGZyYW1lLCBvdXIga2V5RG93biBt
ZXRob2Qgd2lsbCBoYW5kbGUga2V5IGJpbmRpbmdzIGFmdGVyIHNlbmRpbmcKKyAgICAvLyB0aGUg
ZXZlbnQgdGhyb3VnaCB0aGUgRE9NLCBzbyBhc2sgQXBwS2l0IG5vdCB0byBkbyBpdHMgZWFybHkg
c3BlY2lhbCBrZXkgYmluZGluZworICAgIC8vIG1hcHBpbmcuIElmIHdlIGRvbid0IGhhdmUgYSBm
cmFtZSwganVzdCBsZXQgdGhpbmdzIHdvcmsgdGhlIG5vcm1hbCB3YXkgd2l0aG91dAorICAgIC8v
IGEga2V5RG93bi4KKyAgICByZXR1cm4gaGF2ZVdlYkNvcmVGcmFtZTsKK30KKworI2Vsc2UKKwor
Ly8gU3VwZXItaGFjayBhbGVydC4KKy8vIEFsbCB0aGlzIGNvZGUgYWNjb21wbGlzaGVzIHRoZSBz
YW1lIHRoaW5nIGFzIHRoZSBfd2FudHNLZXlEb3duRm9yRXZlbnQgbWV0aG9kIGFib3ZlLgorCisv
LyBSZXR1cm5zIGEgc2VsZWN0b3Igb25seSBpZiBjYWxsZWQgd2hpbGU6CisvLyAgIDEpIGZpcnN0
IHJlc3BvbmRlciBpcyBzZWxmCisvLyAgIDIpIGhhbmRsaW5nIGEga2V5IGRvd24gZXZlbnQKKy8v
ICAgMykgbm90IHlldCBpbnNpZGUga2V5RG93bjogbWV0aG9kCisvLyAgIDQpIGtleSBpcyBhbiBh
cnJvdyBrZXkKKy8vIFRoZSBzZWxlY3RvciBpcyB0aGUgb25lIHRoYXQgZ2V0cyBzZW50IGJ5IC1b
TlNXaW5kb3cgX3Byb2Nlc3NLZXlib2FyZFVJS2V5XSBmb3IgdGhpcyBrZXkuCistIChTRUwpX2Fy
cm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcKK3sKKyAgICBOU1dpbmRvdyAq
dyA9IFtzZWxmIHdpbmRvd107CisgICAgaWYgKFt3IGZpcnN0UmVzcG9uZGVyXSAhPSBzZWxmKQor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBOU0V2ZW50ICplID0gW3cgY3VycmVudEV2ZW50XTsK
KyAgICBpZiAoW2UgdHlwZV0gIT0gTlNLZXlEb3duKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICBpZiAoZSA9PSBfcHJpdmF0ZS0+a2V5RG93bkV2ZW50KQorICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICBOU1N0cmluZyAqcyA9IFtlIGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107CisgICAg
aWYgKFtzIGxlbmd0aF0gPT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3dpdGNoIChb
cyBjaGFyYWN0ZXJBdEluZGV4OjBdKSB7CisgICAgICAgIGNhc2UgTlNEb3duQXJyb3dGdW5jdGlv
bktleToKKyAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZURvd246KTsKKyAgICAgICAg
Y2FzZSBOU0xlZnRBcnJvd0Z1bmN0aW9uS2V5OgorICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rv
cihtb3ZlTGVmdDopOworICAgICAgICBjYXNlIE5TUmlnaHRBcnJvd0Z1bmN0aW9uS2V5OgorICAg
ICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihtb3ZlUmlnaHQ6KTsKKyAgICAgICAgY2FzZSBOU1Vw
QXJyb3dGdW5jdGlvbktleToKKyAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZVVwOik7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisK
Ky8vIFJldHVybnMgTk8gaW5zdGVhZCBvZiBZRVMgaWYgY2FsbGVkIG9uIHRoZSBzZWxlY3RvciB0
aGF0IHRoZQorLy8gX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmcgbWV0
aG9kIHJldHVybnMuCisvLyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpbnNpZGUgLVtOU1dpbmRv
dyBfcHJvY2Vzc0tleWJvYXJkVUlLZXldLAorLy8gYW5kIHRvZ2V0aGVyIHdpdGggdGhlIGNoYW5n
ZSBiZWxvdyBzaG91bGQgY2F1c2UgdGhhdCBtZXRob2QKKy8vIHRvIHJldHVybiBOTyByYXRoZXIg
dGhhbiBoYW5kbGluZyB0aGUga2V5LgorLy8gQWxzbyBzZXQgYSAxLXNob3QgZmxhZyBmb3IgdGhl
IG5leHRSZXNwb25kZXIgY2hlY2sgYmVsb3cuCistIChCT09MKXJlc3BvbmRzVG9TZWxlY3Rvcjoo
U0VMKXNlbGVjdG9yCit7CisgICAgaWYgKCFbc3VwZXIgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVj
dG9yXSkKKyAgICAgICAgcmV0dXJuIE5POworICAgIFNFTCBhcnJvd0tleVNlbGVjdG9yID0gW3Nl
bGYgX2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmddOworICAgIGlmIChz
ZWxlY3RvciAhPSBhcnJvd0tleVNlbGVjdG9yKQorICAgICAgICByZXR1cm4gWUVTOworICAgIF9w
cml2YXRlLT5uZXh0UmVzcG9uZGVyRGlzYWJsZWRPbmNlID0gWUVTOworICAgIHJldHVybiBOTzsK
K30KKworLy8gUmV0dXJucyBuaWwgaW5zdGVhZCBvZiB0aGUgbmV4dCByZXNwb25kZXIgaWYgY2Fs
bGVkIHdoZW4gdGhlCisvLyBvbmUtc2hvdCBmbGFnIGlzIHNldCwgYW5kIF9hcnJvd0tleURvd25F
dmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nCisvLyByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0
aGFuIE5VTEwuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGluc2lkZQorLy8gLVtOU1dpbmRvdyBf
cHJvY2Vzc0tleWJvYXJkVUlLZXldIGFuZCB0b2dldGhlciB3aXRoIHRoZSBjaGFuZ2UgYWJvdmUK
Ky8vIHNob3VsZCBjYXVzZSB0aGF0IG1ldGhvZCB0byByZXR1cm4gTk8gcmF0aGVyIHRoYW4gaGFu
ZGxpbmcgdGhlIGtleS4KKy0gKE5TUmVzcG9uZGVyICopbmV4dFJlc3BvbmRlcgoreworICAgIEJP
T0wgZGlzYWJsZWQgPSBfcHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZTsKKyAgICBf
cHJpdmF0ZS0+bmV4dFJlc3BvbmRlckRpc2FibGVkT25jZSA9IE5POworICAgIGlmIChkaXNhYmxl
ZCAmJiBbc2VsZiBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3RvcklmUHJlcHJvY2Vzc2luZ10gIT0g
TlVMTCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW3N1cGVyIG5leHRSZXNwb25k
ZXJdOworfQorCisjZW5kaWYKKworLSAodm9pZClfdXBkYXRlQ29udHJvbFRpbnRzCit7CisgICAg
RnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBp
ZiAoIXZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICB2aWV3LT51cGRhdGVDb250cm9sVGludHMo
KTsKK30KKworLy8gRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBpcyBjYWxsZWQgYXQgZGlmZmVyZW50
IHRpbWVzIHRoYW4gd2luZG93RGlkQmVjb21lS2V5IGlzLgorLy8gSXQgdGFrZXMgaW50byBhY2Nv
dW50IGFsbCB0aGUgb3RoZXIgZmFjdG9ycyB0aGF0IGRldGVybWluZSB3aGVuIE5TQ2VsbCBkcmF3
cworLy8gd2l0aCBkaWZmZXJlbnQgdGludHMsIHNvIGl0J3MgdGhlIHJpZ2h0IGNhbGwgdG8gdXNl
IGZvciBjb250cm9sIHRpbnRzLiBXZSdkIHByZWZlcgorLy8gdG8gZG8gdGhpcyB3aXRoIEFQSS4g
PHJkYXI6Ly9wcm9ibGVtLzUxMzY3NjA+CistICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGUK
K3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFtzZWxmIF91cGRhdGVDb250
cm9sVGludHNdOworICAgIGVsc2UKKyAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWlu
VGhyZWFkOkBzZWxlY3RvcihfdXBkYXRlQ29udHJvbFRpbnRzKSB3aXRoT2JqZWN0Om5pbCB3YWl0
VW50aWxEb25lOk5PXTsKKworICAgIFtzdXBlciBfd2luZG93Q2hhbmdlZEtleVN0YXRlXTsKK30K
KworLSAodm9pZClvdGhlck1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKFtl
dmVudCBidXR0b25OdW1iZXJdID09IDIpCisgICAgICAgIFtzZWxmIG1vdXNlRG93bjpldmVudF07
CisgICAgZWxzZQorICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZURvd246ZXZlbnRdOworfQorCist
ICh2b2lkKW90aGVyTW91c2VEcmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoW2V2
ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKKyAgICAgICAgW3NlbGYgbW91c2VEcmFnZ2VkOmV2ZW50
XTsKKyAgICBlbHNlCisgICAgICAgIFtzdXBlciBvdGhlck1vdXNlRHJhZ2dlZDpldmVudF07Cit9
CisKKy0gKHZvaWQpb3RoZXJNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBpZiAoW2V2
ZW50IGJ1dHRvbk51bWJlcl0gPT0gMikKKyAgICAgICAgW3NlbGYgbW91c2VVcDpldmVudF07Cisg
ICAgZWxzZQorICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZVVwOmV2ZW50XTsKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gTlNBcnJheSAoV2ViSFRNTFZpZXcpCisKKy0gKHZvaWQpX3dlYl9t
YWtlUGx1Z2luVmlld3NQZXJmb3JtU2VsZWN0b3I6KFNFTClzZWxlY3RvciB3aXRoT2JqZWN0Oihp
ZClvYmplY3QKK3sKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBOU0VudW1l
cmF0b3IgKmVudW1lcmF0b3IgPSBbc2VsZiBvYmplY3RFbnVtZXJhdG9yXTsKKyAgICBXZWJOZXRz
Y2FwZVBsdWdpblZpZXcgKnZpZXc7CisgICAgd2hpbGUgKCh2aWV3ID0gW2VudW1lcmF0b3IgbmV4
dE9iamVjdF0pICE9IG5pbCkKKyAgICAgICAgaWYgKFt2aWV3IGlzS2luZE9mQ2xhc3M6W1dlYkJh
c2VOZXRzY2FwZVBsdWdpblZpZXcgY2xhc3NdXSkKKyAgICAgICAgICAgIFt2aWV3IHBlcmZvcm1T
ZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0Om9iamVjdF07CisjZW5kaWYKK30KKworQGVuZAor
CitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYkludGVybmFsKQorCistICh2b2lkKV9z
ZWxlY3Rpb25DaGFuZ2VkCit7CisgICAgW3NlbGYgX3VwZGF0ZVNlbGVjdGlvbkZvcklucHV0TWFu
YWdlcl07CisgICAgW3NlbGYgX3VwZGF0ZUZvbnRQYW5lbF07CisgICAgaWYgKEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigp
LT5zZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UodHJ1ZSk7Cit9CisKKy0gKHZvaWQpX3VwZGF0
ZUZvbnRQYW5lbAoreworICAgIC8vIEZJWE1FOiBOU1RleHRWaWV3IGJhaWxzIG91dCBpZiBiZWNv
bWluZyBvciByZXNpZ25pbmcgZmlyc3QgcmVzcG9uZGVyLCBmb3Igd2hpY2ggaXQgaGFzIGl2YXIg
ZmxhZ3MuIE5vdAorICAgIC8vIHN1cmUgaWYgd2UgbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxh
ci4KKyAgICAKKyAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgIC8vIEZJWE1FOiBp
cyB0aGlzIGZpcnN0LXJlc3BvbmRlciBjaGVjayBjb3JyZWN0PyBXaGF0IGhhcHBlbnMgaWYgYSBz
dWJmcmFtZSBpcyBlZGl0YWJsZSBhbmQgaXMgZmlyc3QgcmVzcG9uZGVyPworICAgIGlmIChbTlNB
cHAga2V5V2luZG93XSAhPSB3aW5kb3cgfHwgW3dpbmRvdyBmaXJzdFJlc3BvbmRlcl0gIT0gc2Vs
ZikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGJvb2wgbXVsdGlwbGVGb250cyA9IGZhbHNl
OworICAgIE5TRm9udCAqZm9udCA9IG5pbDsKKyAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpIHsKKyAgICAgICAgaWYgKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
ZCA9IGNvcmVGcmFtZS0+ZWRpdG9yKCktPmZvbnRGb3JTZWxlY3Rpb24obXVsdGlwbGVGb250cykp
CisgICAgICAgICAgICBmb250ID0gZmQtPmdldE5TRm9udCgpOworICAgIH0KKyAgICAKKworICAg
IC8vIEZJWE1FOiBmb3Igbm93LCByZXR1cm4gYSBib2d1cyBmb250IHRoYXQgZGlzdGluZ3Vpc2hl
cyB0aGUgZW1wdHkgc2VsZWN0aW9uIGZyb20gdGhlIG5vbi1lbXB0eQorICAgIC8vIHNlbGVjdGlv
bi4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlIHRoaXMgb25jZSB0aGUgcmVzdCBvZiB0aGlz
IGNvZGUgd29ya3MgcHJvcGVybHkuCisgICAgaWYgKGZvbnQgPT0gbmlsKQorICAgICAgICBmb250
ID0gW3NlbGYgX2hhc1NlbGVjdGlvbl0gPyBbTlNGb250IG1lbnVGb250T2ZTaXplOjIzXSA6IFtO
U0ZvbnQgdG9vbFRpcHNGb250T2ZTaXplOjE3XTsKKyAgICBBU1NFUlQoZm9udCAhPSBuaWwpOwor
CisgICAgW1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBzZXRTZWxlY3RlZEZvbnQ6
Zm9udCBpc011bHRpcGxlOm11bHRpcGxlRm9udHNdOworCisgICAgLy8gRklYTUU6IHdlIGRvbid0
IGtlZXAgdHJhY2sgb2Ygc2VsZWN0ZWQgYXR0cmlidXRlcywgb3Igc2V0IHRoZW0gb24gdGhlIGZv
bnQgcGFuZWwuIFRoaXMKKyAgICAvLyBhcHBlYXJzIHRvIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBV
SS4gRS5nLiwgdW5kZXJsaW5lZCB0ZXh0IGluIE1haWwgb3IgVGV4dEVkaXQgaXMKKyAgICAvLyBu
b3QgcmVmbGVjdGVkIGluIHRoZSBmb250IHBhbmVsLiBNYXliZSBzb21lZGF5IHRoaXMgd2lsbCBj
aGFuZ2UuCit9CisKKy0gKEJPT0wpX2NhblNtYXJ0Q29weU9yRGVsZXRlCit7CisgICAgaWYgKCFb
W3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF0pCisgICAgICAgIHJldHVy
biBOTzsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBy
ZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uR3JhbnVsYXJpdHkoKSA9PSBX
b3JkR3JhbnVsYXJpdHk7Cit9CisKKy0gKE5TRXZlbnQgKilfbW91c2VEb3duRXZlbnQKK3sKKyAg
ICByZXR1cm4gX3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50OworfQorCistIChpZDxXZWJIVE1MSGln
aGxpZ2h0ZXI+KV9oaWdobGlnaHRlckZvclR5cGU6KE5TU3RyaW5nKil0eXBlCit7CisgICAgcmV0
dXJuIFtfcHJpdmF0ZS0+aGlnaGxpZ2h0ZXJzIG9iamVjdEZvcktleTp0eXBlXTsKK30KKworLSAo
V2ViRnJhbWUgKilfZnJhbWUKK3sKKyAgICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291cmNlIHdl
YkZyYW1lXTsKK30KKworLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyCit7CisgICAgQ09NTUFORF9Q
Uk9MT0dVRQorCisgICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBzZWxmUHJvdGVjdG9yID0gc2Vs
ZjsKKyAgICBSZWZQdHI8RnJhbWU+IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Cisg
ICAgaWYgKCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY29yZUZyYW1lLT5l
ZGl0b3IoKS0+dHJ5REhUTUxQYXN0ZSgpKQorICAgICAgICByZXR1cm47IC8vIERIVE1MIGRpZCB0
aGUgd2hvbGUgb3BlcmF0aW9uCisgICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJv
YXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93UGxhaW5UZXh0OllFU107
CisgICAgZWxzZQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5wYXN0ZUFzUGxhaW5UZXh0
KCk7Cit9CisKKy0gKHZvaWQpcGFzdGVBc1BsYWluVGV4dDooaWQpc2VuZGVyCit7CisgICAgQ09N
TUFORF9QUk9MT0dVRQorCisgICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCisgICAgICAgIHJldHVy
bjsKKyAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9h
cmQgZ2VuZXJhbFBhc3RlYm9hcmRdXTsKK30KKworLSAodm9pZCljbG9zZUlmTm90Q3VycmVudFZp
ZXcKK3sKKyAgICBpZiAoW1tbc2VsZiBfZnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XSAh
PSBzZWxmKQorICAgICAgICBbc2VsZiBjbG9zZV07Cit9CisKKy0gKERPTURvY3VtZW50RnJhZ21l
bnQqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQKK3sKKyAgICByZXR1cm4gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpuaWwgYWxsb3dQbGFpblRleHQ6Tk9dOworfQorCisjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisKKy0gKEJPT0wpaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
Cit7CisgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3Ig
dGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1l
dGhvZCBoZXJlIGJlY2F1c2UKKyAgICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJz
dCByZXNwb25kZXIuCisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkXTsKK30KKworLSAodm9pZClzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOihCT09M
KWZsYWcKK3sKKyAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNr
IGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0
aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQorICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVja3MgdGhl
IGZpcnN0IHJlc3BvbmRlci4KKyAgICBbW3NlbGYgX3dlYlZpZXddIHNldEdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQ6ZmxhZ107Cit9CisKKy0gKHZvaWQpdG9nZ2xlR3JhbW1hckNoZWNraW5nOihpZClz
ZW5kZXIKK3sKKyAgICAvLyBGSVhNRSA0Nzk5MTM0OiBXZWJWaWV3IGlzIHRoZSBib3R0bGVuZWNr
IGZvciB0aGlzIGdyYW1tYXItY2hlY2tpbmcgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0
aGUgbWV0aG9kIGhlcmUgYmVjYXVzZQorICAgIC8vIHRoZSBBcHBLaXQgY29kZSBjaGVja3MgdGhl
IGZpcnN0IHJlc3BvbmRlci4KKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUdyYW1tYXJDaGVj
a2luZzpzZW5kZXJdOworfQorCisKK3N0YXRpYyBDR1BvaW50IGNvcmVHcmFwaGljc1NjcmVlblBv
aW50Rm9yQXBwS2l0U2NyZWVuUG9pbnQoTlNQb2ludCBwb2ludCkKK3sKKyAgICBOU0FycmF5ICpz
Y3JlZW5zID0gW05TU2NyZWVuIHNjcmVlbnNdOworICAgIAorICAgIGlmIChbc2NyZWVucyBjb3Vu
dF0gPT0gMCkgeworICAgICAgICAvLyBZb3UgY291bGQgdGhlb3JldGljYWxseSBnZXQgaGVyZSBp
ZiBydW5uaW5nIHdpdGggbm8gbW9uaXRvciwgaW4gd2hpY2ggY2FzZSBpdCBkb2Vzbid0IG1hdHRl
cgorICAgICAgICAvLyBtdWNoIHdoZXJlIHRoZSAib24tc2NyZWVuIiBwb2ludCBpcy4KKyAgICAg
ICAgcmV0dXJuIENHUG9pbnRNYWtlKHBvaW50LngsIHBvaW50LnkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBGbGlwIHRoZSB5IGNvb3JkaW5hdGUgZnJvbSB0aGUgdG9wIG9mIHRoZSBtZW51IGJhciBz
Y3JlZW4gLS0gc2VlIDQ2MzYzOTAKKyAgICByZXR1cm4gQ0dQb2ludE1ha2UocG9pbnQueCwgTlNN
YXhZKFtbc2NyZWVucyBvYmplY3RBdEluZGV4OjBdIGZyYW1lXSkgLSBwb2ludC55KTsKK30KKwor
I2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKworLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0aW9uc1BhbmVs
OihpZClzZW5kZXIKK3sKKyAgICBDT01NQU5EX1BST0xPR1VFCisKKyAgICBOU1NwZWxsQ2hlY2tl
ciAqY2hlY2tlciA9IFtOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdOworICAgIGlm
ICghY2hlY2tlcikgeworICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgTlNQYW5lbCAqc3Vic3RpdHV0aW9uc1Bh
bmVsID0gW2NoZWNrZXIgc3Vic3RpdHV0aW9uc1BhbmVsXTsKKyAgICBpZiAoW3N1YnN0aXR1dGlv
bnNQYW5lbCBpc1Zpc2libGVdKSB7CisgICAgICAgIFtzdWJzdGl0dXRpb25zUGFuZWwgb3JkZXJP
dXQ6c2VuZGVyXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBbc3Vic3RpdHV0aW9uc1Bh
bmVsIG9yZGVyRnJvbnQ6c2VuZGVyXTsKK30KKworLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBp
cyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBsb2dpYywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRo
ZXNlIG1ldGhvZHMgaGVyZSBiZWNhdXNlCisvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBm
aXJzdCByZXNwb25kZXIuCisKKy0gKEJPT0wpc21hcnRJbnNlcnREZWxldGVFbmFibGVkCit7Cisg
ICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21hcnRJbnNlcnREZWxldGVFbmFibGVkXTsKK30K
KworLSAodm9pZClzZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQ6KEJPT0wpZmxhZworeworICAg
IFtbc2VsZiBfd2ViVmlld10gc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOmZsYWddOworfQor
CistICh2b2lkKXRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOihpZClzZW5kZXIKK3sKKyAgICBbW3Nl
bGYgX3dlYlZpZXddIHRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOnNlbmRlcl07Cit9CisKKy0gKEJP
T0wpaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQKK3sKKyAgICByZXR1cm4gW1tz
ZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZF07Cit9CisK
Ky0gKHZvaWQpc2V0QXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWcK
K3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bjooaWQpc2VuZGVyCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNRdW90
ZVN1YnN0aXR1dGlvbjpzZW5kZXJdOworfQorCistIChCT09MKWlzQXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY0xp
bmtEZXRlY3Rpb25FbmFibGVkXTsKK30KKworLSAodm9pZClzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDpmbGFnXTsKK30KKworLSAodm9pZCl0b2dnbGVBdXRvbWF0
aWNMaW5rRGV0ZWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2ds
ZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb246c2VuZGVyXTsKK30KKworLSAoQk9PTClpc0F1dG9tYXRp
Y0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkCit7CisgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10g
aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0QXV0
b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIFtbc2VsZiBf
d2ViVmlld10gc2V0QXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQ6ZmxhZ107Cit9CisK
Ky0gKHZvaWQpdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjooaWQpc2VuZGVyCit7Cisg
ICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOnNlbmRl
cl07Cit9CisKKy0gKEJPT0wpaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkCit7Cisg
ICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFi
bGVkXTsKK30KKworLSAodm9pZClzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOihC
T09MKWZsYWcKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHNldEF1dG9tYXRpY1RleHRSZXBsYWNl
bWVudEVuYWJsZWQ6ZmxhZ107Cit9CisKKy0gKHZvaWQpdG9nZ2xlQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50OihpZClzZW5kZXIKK3sKKyAgICBbW3NlbGYgX3dlYlZpZXddIHRvZ2dsZUF1dG9tYXRp
Y1RleHRSZXBsYWNlbWVudDpzZW5kZXJdOworfQorCistIChCT09MKWlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZAoreworICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0
b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZF07Cit9CisKKy0gKHZvaWQpc2V0QXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDooQk9PTClmbGFnCit7CisgICAgW1tzZWxmIF93
ZWJWaWV3XSBzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOmZsYWddOworfQor
CistICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjooaWQpc2VuZGVyCit7
CisgICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246
c2VuZGVyXTsKK30KKworI2VuZGlmCisKKy0gKHZvaWQpX2xvb2tVcEluRGljdGlvbmFyeUZyb21N
ZW51OihpZClzZW5kZXIKK3sKKyAgICAvLyBEaWN0aW9uYXJ5IEFQSSB3aWxsIGFjY2VwdCBhIHdo
aXRlc3BhY2Utb25seSBzdHJpbmcgYW5kIGRpc3BsYXkgVUkgYXMgaWYgaXQgd2VyZSByZWFsIHRl
eHQsCisgICAgLy8gc28gYmFpbCBvdXQgZWFybHkgdG8gYXZvaWQgdGhhdC4KKyAgICBpZiAoW1tb
c2VsZiBzZWxlY3RlZFN0cmluZ10gX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZV0g
bGVuZ3RoXSA9PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJTdHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOworCisgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUp
CisgICAgICAgIHJldHVybjsKKworICAgIE5TUmVjdCByZWN0ID0gY29yZUZyYW1lLT5zZWxlY3Rp
b25Cb3VuZHMoKTsKKworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIE5TRGljdGlvbmFy
eSAqYXR0cmlidXRlcyA9IFthdHRyU3RyaW5nIGZvbnRBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VS
YW5nZSgwLDEpXTsKKyAgICBOU0ZvbnQgKmZvbnQgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgaWYgKGZvbnQpCisgICAgICAgIHJlY3Qub3JpZ2lu
LnkgKz0gW2ZvbnQgYXNjZW5kZXJdOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBbc2VsZiBzaG93
RGVmaW5pdGlvbkZvckF0dHJpYnV0ZWRTdHJpbmc6YXR0clN0cmluZyBhdFBvaW50OnJlY3Qub3Jp
Z2luXTsKKyAgICByZXR1cm47CisjZW5kaWYKKworICAgIC8vIFdlIHNvZnQgbGluayB0byBnZXQg
dGhlIGZ1bmN0aW9uIHRoYXQgZGlzcGxheXMgdGhlIGRpY3Rpb25hcnkgKGVpdGhlciBwb3AtdXAg
d2luZG93IG9yIGFwcCkgdG8gYXZvaWQgdGhlIHBlcmZvcm1hbmNlCisgICAgLy8gcGVuYWx0eSBv
ZiBsaW5raW5nIHRvIGFub3RoZXIgZnJhbWV3b3JrLiBUaGlzIGZ1bmN0aW9uIGNoYW5nZWQgc2ln
bmF0dXJlIGFzIHdlbGwgYXMgZnJhbWV3b3JrIGJldHdlZW4gVGlnZXIgYW5kIExlb3BhcmQsCisg
ICAgLy8gc28gdGhlIHR3byBjYXNlcyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgorCisjaWZkZWYg
QlVJTERJTkdfT05fVElHRVIKKyAgICB0eXBlZGVmIE9TU3RhdHVzICgqU2VydmljZVdpbmRvd1No
b3dGdW5jdGlvbikoaWQgaW5Xb3JkU3RyaW5nLCBOU1JlY3QgaW5Xb3JkQm91bmRhcnksIFVJbnQx
NiBpbkxpbmVEaXJlY3Rpb24pOworICAgIGNvbnN0IGNoYXIgKmZyYW1ld29ya1BhdGggPSAiL1N5
c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwbGljYXRpb25TZXJ2aWNlcy5mcmFtZXdvcmsvRnJh
bWV3b3Jrcy9MYW5nQW5hbHlzaXMuZnJhbWV3b3JrL0xhbmdBbmFseXNpcyI7CisgICAgY29uc3Qg
Y2hhciAqZnVuY3Rpb25OYW1lID0gIkRDTURpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyI7Cisj
ZWxzZQorICAgIHR5cGVkZWYgdm9pZCAoKlNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24pKGlkIHVu
dXNlZERpY3Rpb25hcnlSZWYsIGlkIGluV29yZFN0cmluZywgQ0ZSYW5nZSBzZWxlY3Rpb25SYW5n
ZSwgaWQgdW51c2VkRm9udCwgQ0dQb2ludCB0ZXh0T3JpZ2luLCBCb29sZWFuIHZlcnRpY2FsVGV4
dCwgaWQgdW51c2VkVHJhbnNmb3JtKTsKKyAgICBjb25zdCBjaGFyICpmcmFtZXdvcmtQYXRoID0g
Ii9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NhcmJvbi5mcmFtZXdvcmsvRnJhbWV3b3Jrcy9I
SVRvb2xib3guZnJhbWV3b3JrL0hJVG9vbGJveCI7CisgICAgY29uc3QgY2hhciAqZnVuY3Rpb25O
YW1lID0gIkhJRGljdGlvbmFyeVdpbmRvd1Nob3ciOworI2VuZGlmCisKKyAgICBzdGF0aWMgYm9v
bCBsb29rZWRGb3JGdW5jdGlvbiA9IGZhbHNlOworICAgIHN0YXRpYyBTZXJ2aWNlV2luZG93U2hv
d0Z1bmN0aW9uIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyA9IE5VTEw7CisKKyAgICBpZiAo
IWxvb2tlZEZvckZ1bmN0aW9uKSB7CisgICAgICAgIHZvaWQqIGxhbmdBbmFseXNpc0ZyYW1ld29y
ayA9IGRsb3BlbihmcmFtZXdvcmtQYXRoLCBSVExEX0xBWlkpOworICAgICAgICBBU1NFUlQobGFu
Z0FuYWx5c2lzRnJhbWV3b3JrKTsKKyAgICAgICAgaWYgKGxhbmdBbmFseXNpc0ZyYW1ld29yaykK
KyAgICAgICAgICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyA9IChTZXJ2aWNlV2luZG93
U2hvd0Z1bmN0aW9uKWRsc3ltKGxhbmdBbmFseXNpc0ZyYW1ld29yaywgZnVuY3Rpb25OYW1lKTsK
KyAgICAgICAgbG9va2VkRm9yRnVuY3Rpb24gPSB0cnVlOworICAgIH0KKworICAgIEFTU0VSVChk
aWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cpOworICAgIGlmICghZGljdGlvbmFyeVNlcnZpY2VX
aW5kb3dTaG93KSB7CisgICAgICAgIE5TTG9nKEAiQ291bGRuJ3QgZmluZCB0aGUgJXMgZnVuY3Rp
b24gaW4gJXMiLCBmdW5jdGlvbk5hbWUsIGZyYW1ld29ya1BhdGgpOyAKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gRklYTUU6IG11c3Qg
Y2hlY2sgZm9yIHJpZ2h0LXRvLWxlZnQgaGVyZQorICAgIE5TV3JpdGluZ0RpcmVjdGlvbiB3cml0
aW5nRGlyZWN0aW9uID0gTlNXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ7CisKKyAgICAvLyBG
SVhNRTogdGhlIGRpY3Rpb25hcnkgQVBJIGV4cGVjdHMgdGhlIHJlY3QgZm9yIHRoZSBmaXJzdCBs
aW5lIG9mIHNlbGVjdGlvbi4gUGFzc2luZworICAgIC8vIHRoZSByZWN0IGZvciB0aGUgZW50aXJl
IHNlbGVjdGlvbiwgYXMgd2UgZG8gaGVyZSwgcG9zaXRpb25zIHRoZSBwb3AtdXAgd2luZG93IG5l
YXIKKyAgICAvLyB0aGUgYm90dG9tIG9mIHRoZSBzZWxlY3Rpb24gcmF0aGVyIHRoYW4gYXQgdGhl
IHNlbGVjdGVkIHdvcmQuCisgICAgcmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3
Om5pbF07CisgICAgcmVjdC5vcmlnaW4gPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0QmFzZVRvU2Ny
ZWVuOnJlY3Qub3JpZ2luXTsKKyAgICBOU0RhdGEgKmRhdGEgPSBbYXR0clN0cmluZyBSVEZGcm9t
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1
dGVzOm5pbF07CisgICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KGRhdGEsIHJlY3QsICh3
cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0KSA/IDEgOiAw
KTsKKyNlbHNlCisgICAgLy8gVGhlIEhJRGljdGlvbmFyeVdpbmRvd1Nob3cgZnVuY3Rpb24gcmVx
dWlyZXMgdGhlIG9yaWdpbiwgaW4gQ0cgc2NyZWVuIGNvb3JkaW5hdGVzLCBvZiB0aGUgZmlyc3Qg
Y2hhcmFjdGVyIG9mIHRleHQgaW4gdGhlIHNlbGVjdGlvbi4KKyAgICAvLyBGSVhNRSA0OTQ1ODA4
OiBXZSBhcHByb3hpbWF0ZSB0aGlzIGluIGEgd2F5IHRoYXQgd29ya3Mgd2VsbCB3aGVuIGEgc2lu
Z2xlIHdvcmQgaXMgc2VsZWN0ZWQsIGFuZCBsZXNzIHdlbGwgaW4gc29tZSBvdGhlciBjYXNlcwor
ICAgIC8vIChidXQgbm8gd29yc2UgdGhhbiB3ZSBkaWQgaW4gVGlnZXIpCisgICAgTlNQb2ludCB3
aW5kb3dQb2ludCA9IFtzZWxmIGNvbnZlcnRQb2ludDpyZWN0Lm9yaWdpbiB0b1ZpZXc6bmlsXTsK
KyAgICBOU1BvaW50IHNjcmVlblBvaW50ID0gW1tzZWxmIHdpbmRvd10gY29udmVydEJhc2VUb1Nj
cmVlbjp3aW5kb3dQb2ludF07CisKKyAgICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cobmls
LCBhdHRyU3RyaW5nLCBDRlJhbmdlTWFrZSgwLCBbYXR0clN0cmluZyBsZW5ndGhdKSwgbmlsLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZUdyYXBoaWNzU2NyZWVuUG9pbnRG
b3JBcHBLaXRTY3JlZW5Qb2ludChzY3JlZW5Qb2ludCksIGZhbHNlLCBuaWwpOworI2VuZGlmCit9
CisKKy0gKHZvaWQpX2hvdmVyRmVlZGJhY2tTdXNwZW5kZWRDaGFuZ2VkCit7CisgICAgW3NlbGYg
X3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOworfQorCistIChCT09MKV9pbnRlcmNlcHRF
ZGl0aW5nS2V5RXZlbnQ6KEtleWJvYXJkRXZlbnQqKWV2ZW50IHNob3VsZFNhdmVDb21tYW5kOihC
T09MKXNob3VsZFNhdmUKK3sKKyAgICAvLyBBc2sgQXBwS2l0IHRvIHByb2Nlc3MgdGhlIGtleSBl
dmVudCAtLSBpdCB3aWxsIGNhbGwgYmFjayB3aXRoIGVpdGhlciBpbnNlcnRUZXh0IG9yIGRvQ29t
bWFuZEJ5U2VsZWN0b3IuCisgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5ldmVudFdhc0hhbmRsZWQgPSBmYWxzZTsK
KyAgICBwYXJhbWV0ZXJzLnNob3VsZFNhdmVDb21tYW5kID0gc2hvdWxkU2F2ZTsKKyAgICAvLyBJ
ZiB3ZSdyZSBpbnRlcmNlcHRpbmcgdGhlIGluaXRpYWwgSU0gY2FsbCB3ZSBhc3N1bWUgdGhhdCB0
aGUgSU0gaGFzIGNvbnN1bWVkIHRoZSBldmVudCwgCisgICAgLy8gYW5kIG9ubHkgY2hhbmdlIHRo
aXMgYXNzdW1wdGlvbiBpZiBvbmUgb2YgdGhlIE5TVGV4dElucHV0L1Jlc3BvbmRlciBjYWxsYmFj
a3MgaXMgdXNlZC4KKyAgICAvLyBXZSBhc3N1bWUgdGhlIElNIHdpbGwgKm5vdCogY29uc3VtZSBo
b3RrZXkgc2VxdWVuY2VzCisgICAgcGFyYW1ldGVycy5jb25zdW1lZEJ5SU0gPSAhZXZlbnQtPm1l
dGFLZXkoKSAmJiBzaG91bGRTYXZlOworCisgICAgaWYgKGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCogcGxhdGZvcm1FdmVudCA9IGV2ZW50LT5rZXlFdmVudCgpKSB7CisgICAgICAgIE5TRXZl
bnQgKm1hY0V2ZW50ID0gcGxhdGZvcm1FdmVudC0+bWFjRXZlbnQoKTsKKyAgICAgICAgaWYgKFtt
YWNFdmVudCB0eXBlXSA9PSBOU0tleURvd24gJiYgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBm
aWx0ZXJLZXlEb3duOm1hY0V2ZW50XSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKFttYWNFdmVudCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHBhcmFtZXRlcnMuZXZlbnQg
PSBldmVudDsKKyAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMg
PSAmcGFyYW1ldGVyczsKKyAgICAgICAgX3ByaXZhdGUtPnJlY2VpdmVkTk9PUCA9IE5POworICAg
ICAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMgPSBldmVudC0+a2V5
cHJlc3NDb21tYW5kcygpOworICAgICAgICBib29sIGhhc0tleXByZXNzQ29tbWFuZCA9ICFjb21t
YW5kcy5pc0VtcHR5KCk7CisKKyAgICAgICAgLy8gRklYTUU6IGludGVycHJldEtleUV2ZW50cyBk
b2Vzbid0IG1hdGNoIGFwcGxpY2F0aW9uIGtleSBlcXVpdmFsZW50cyAoc3VjaCBhcyBDbWQrQSks
CisgICAgICAgIC8vIGFuZCBzZW5kcyBub29wOiBmb3IgdGhvc2UuIEFzIGEgcmVzdWx0LCB3ZSBk
b24ndCBoYW5kbGUgdGhvc2UgZnJvbSB3aXRoaW4gV2ViQ29yZSwKKyAgICAgICAgLy8gYnV0IHNl
bmQgYSBmdWxsIHNlcXVlbmNlIG9mIERPTSBldmVudHMsIGluY2x1ZGluZyBhbiB1bm5lZWRlZCBr
ZXlwcmVzcy4KKyAgICAgICAgaWYgKHBhcmFtZXRlcnMuc2hvdWxkU2F2ZUNvbW1hbmQgfHwgIWhh
c0tleXByZXNzQ29tbWFuZCkKKyAgICAgICAgICAgIFtzZWxmIGludGVycHJldEtleUV2ZW50czpb
TlNBcnJheSBhcnJheVdpdGhPYmplY3Q6bWFjRXZlbnRdXTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGNvbW1hbmRzLnNpemUoKTsKKyAgICAgICAgICAgIC8vIEFy
ZSB0aGVyZSBjb21tYW5kcyB0aGF0IHdvdWxkIGp1c3QgY2F1c2UgdGV4dCBpbnNlcnRpb24gaWYg
ZXhlY3V0ZWQgdmlhIEVkaXRvcj8KKyAgICAgICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUg
ZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IG1vZGUgdG8gZGVjaWRlIGhvdyB0aGV5IHNob3VsZCBi
ZSB0cmVhdGVkLCBzbyB3ZSBsZWF2ZSBpdCB1cG9uIFdlYkNvcmUKKyAgICAgICAgICAgIC8vIHRv
IGVpdGhlciBoYW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZv
Y3VzKSBvciBsZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgIC8v
IChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCisgICAg
ICAgICAgICBib29sIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAg
aWYgKFtzZWxmIGNvcmVDb21tYW5kQnlTZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhjb21t
YW5kc1tpXS5jb21tYW5kTmFtZSldLmlzVGV4dEluc2VydGlvbigpKQorICAgICAgICAgICAgICAg
ICAgICBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyB8fCBwbGF0Zm9ybUV2ZW50
LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSB7CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0OiIpCisgICAgICAg
ICAgICAgICAgICAgICAgICBbc2VsZiBpbnNlcnRUZXh0OmNvbW1hbmRzW2ldLnRleHRdOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZiBkb0Nv
bW1hbmRCeVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKGNvbW1hbmRzW2ldLmNvbW1hbmRO
YW1lKV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsKKyAgICB9Cisg
ICAgcmV0dXJuICghX3ByaXZhdGUtPnJlY2VpdmVkTk9PUCAmJiBwYXJhbWV0ZXJzLmV2ZW50V2Fz
SGFuZGxlZCkgfHwgcGFyYW1ldGVycy5jb25zdW1lZEJ5SU07Cit9CisKKy0gKFdlYkNvcmU6OkNh
Y2hlZEltYWdlKilwcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZQoreworICAgIHJldHVybiBfcHJp
dmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2U7Cit9CisKKy0gKHZvaWQpc2V0UHJvbWlz
ZWREcmFnVElGRkRhdGFTb3VyY2U6KFdlYkNvcmU6OkNhY2hlZEltYWdlKilzb3VyY2UKK3sKKyAg
ICBpZiAoc291cmNlKQorICAgICAgICBzb3VyY2UtPmFkZENsaWVudChwcm9taXNlZERhdGFDbGll
bnQoKSk7CisgICAgCisgICAgaWYgKF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJj
ZSkKKyAgICAgICAgX3ByaXZhdGUtPnByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVD
bGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOworICAgIF9wcml2YXRlLT5wcm9taXNlZERyYWdU
SUZGRGF0YVNvdXJjZSA9IHNvdXJjZTsKK30KKworI3VuZGVmIENPTU1BTkRfUFJPTE9HVUUKKwor
LSAodm9pZClfbGF5b3V0SWZOZWVkZWQKK3sKKyAgICBBU1NFUlQoIV9wcml2YXRlLT5zdWJ2aWV3
c1NldEFzaWRlKTsKKworICAgIGlmIChfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzIHx8IFtz
ZWxmIF9uZWVkc0xheW91dF0pCisgICAgICAgIFtzZWxmIGxheW91dF07Cit9CisKKy0gKHZvaWQp
X3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZQoreworICAgIFtzZWxmIF9sYXlvdXRJZk5lZWRl
ZF07CisKKyNpZm5kZWYgTkRFQlVHCisgICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3Mg
PSBZRVM7CisjZW5kaWYKKworICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2ViSFRNTFZp
ZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CisKKyAgICBbc2VsZiBfd2ViX2Fk
ZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmlld3NdOwor
CisgICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3VudF07Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIFtbZGVzY2Vu
ZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9sYXlvdXRJZk5lZWRlZF07CisKKyAg
ICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKKworI2lmbmRlZiBOREVCVUcKKyAg
ICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POworI2VuZGlmCit9CisKKy0gKHZv
aWQpIF9kZXN0cm95QWxsV2ViUGx1Z2lucworeworICAgIFtbc2VsZiBfcGx1Z2luQ29udHJvbGxl
cl0gZGVzdHJveUFsbFBsdWdpbnNdOworfQorCistIChCT09MKV9pc1Jlc2lnbmluZ0ZpcnN0UmVz
cG9uZGVyCit7CisgICAgcmV0dXJuIF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsK
K30KKworLSAoQk9PTClfbmVlZHNMYXlvdXQKK3sKKyAgICByZXR1cm4gW1tzZWxmIF9mcmFtZV0g
X25lZWRzTGF5b3V0XTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKy0g
KHZvaWQpYXR0YWNoUm9vdExheWVyOihDQUxheWVyKilsYXllcgoreworICAgIGlmICghX3ByaXZh
dGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKKyAgICAgICAgV2ViTGF5ZXJIb3N0aW5nVmlldyogaG9z
dGluZ1ZpZXcgPSBbW1dlYkxheWVySG9zdGluZ1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W3Nl
bGYgYm91bmRzXV07CisgICAgICAgIFtob3N0aW5nVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOihO
U1ZpZXdXaWR0aFNpemFibGUgfCBOU1ZpZXdIZWlnaHRTaXphYmxlKV07CisgICAgICAgIFtzZWxm
IGFkZFN1YnZpZXc6aG9zdGluZ1ZpZXddOworICAgICAgICBbaG9zdGluZ1ZpZXcgcmVsZWFzZV07
CisgICAgICAgIC8vIGhvc3RpbmdWaWV3IGlzIG93bmVkIGJ5IGJlaW5nIGEgc3VidmlldyBvZiBz
ZWxmCisgICAgICAgIF9wcml2YXRlLT5sYXllckhvc3RpbmdWaWV3ID0gaG9zdGluZ1ZpZXc7Cisg
ICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
RnJhbWU6W3NlbGYgX2ZyYW1lXV07CisgICAgfQorCisgICAgLy8gTWFrZSBhIGNvbnRhaW5lciBs
YXllciwgd2hpY2ggd2lsbCBnZXQgc2l6ZWQvcG9zaXRpb25lZCBieSBBcHBLaXQgYW5kIENBCisg
ICAgQ0FMYXllciogdmlld0xheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOworICAgIFtfcHJpdmF0ZS0+
bGF5ZXJIb3N0aW5nVmlldyBzZXRMYXllcjp2aWV3TGF5ZXJdOworICAgIFtfcHJpdmF0ZS0+bGF5
ZXJIb3N0aW5nVmlldyBzZXRXYW50c0xheWVyOllFU107CisgICAgCisgICAgLy8gUGFyZW50IG91
ciByb290IGxheWVyIGluIHRoZSBjb250YWluZXIgbGF5ZXIKKyAgICBbdmlld0xheWVyIGFkZFN1
YmxheWVyOmxheWVyXTsKK30KKworLSAodm9pZClkZXRhY2hSb290TGF5ZXIKK3sKKyAgICBpZiAo
X3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKKyAgICAgICAgW19wcml2YXRlLT5sYXllckhv
c3RpbmdWaWV3IHNldExheWVyOm5pbF07CisgICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5n
VmlldyBzZXRXYW50c0xheWVyOk5PXTsKKyAgICAgICAgW19wcml2YXRlLT5sYXllckhvc3RpbmdW
aWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOworICAgICAgICBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5n
VmlldyA9IG5pbDsKKyAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBfc3RvcHBlZEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsKKyAgICB9Cit9CisjZW5kaWYKKwor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV2ViSFRNTFZpZXcgKFdlYk5TVGV4dElucHV0U3VwcG9y
dCkKKworLSAoTlNBcnJheSAqKXZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRleHQKK3sKKyAgICBz
dGF0aWMgTlNBcnJheSAqdmFsaWRBdHRyaWJ1dGVzOworICAgIGlmICghdmFsaWRBdHRyaWJ1dGVz
KSB7CisgICAgICAgIHZhbGlkQXR0cmlidXRlcyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhP
YmplY3RzOgorICAgICAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUsIE5TVW5k
ZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lLAorICAgICAgICAgICAgTlNNYXJrZWRDbGF1c2VTZWdt
ZW50QXR0cmlidXRlTmFtZSwgTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFt
ZSwgbmlsXTsKKyAgICAgICAgLy8gTlNUZXh0IGFsc28gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBh
dHRyaWJ1dGVzLCBidXQgaXQncworICAgICAgICAvLyBoYXJkIHRvIHRlbGwgd2hpY2ggYXJlIHJl
YWxseSByZXF1aXJlZCBmb3IgdGV4dCBpbnB1dCB0bworICAgICAgICAvLyB3b3JrIHdlbGw7IEkg
aGF2ZSBub3Qgc2VlbiBhbnkgaW5wdXQgbWV0aG9kIG1ha2UgdXNlIG9mIHRoZW0geWV0LgorICAg
ICAgICAvLyAgICAgTlNGb250QXR0cmlidXRlTmFtZSwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lLAorICAgICAgICAvLyAgICAgTlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLCBO
U0xhbmd1YWdlQXR0cmlidXRlTmFtZS4KKyAgICAgICAgQ0ZSZXRhaW4odmFsaWRBdHRyaWJ1dGVz
KTsKKyAgICB9CisgICAgTE9HKFRleHRJbnB1dCwgInZhbGlkQXR0cmlidXRlc0Zvck1hcmtlZFRl
eHQgLT4gKC4uLikiKTsKKyAgICByZXR1cm4gdmFsaWRBdHRyaWJ1dGVzOworfQorCistIChOU1Rl
eHRJbnB1dENvbnRleHQgKilpbnB1dENvbnRleHQKK3sKKyAgICByZXR1cm4gX3ByaXZhdGUtPmV4
cG9zZUlucHV0Q29udGV4dCA/IFtzdXBlciBpbnB1dENvbnRleHRdIDogbmlsOworfQorCistIChO
U0F0dHJpYnV0ZWRTdHJpbmcgKil0ZXh0U3RvcmFnZQoreworICAgIGlmICghX3ByaXZhdGUtPmV4
cG9zZUlucHV0Q29udGV4dCkgeworICAgICAgICBMT0coVGV4dElucHV0LCAidGV4dFN0b3JhZ2Ug
LT4gbmlsIik7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqcmVzdWx0ID0gW3NlbGYgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VS
YW5nZSgwLCBVSU5UX01BWCldOworICAgIAorICAgIExPRyhUZXh0SW5wdXQsICJ0ZXh0U3RvcmFn
ZSAtPiBcIiVAXCIiLCByZXN1bHQgPyBbcmVzdWx0IHN0cmluZ10gOiBAIiIpOworICAgIAorICAg
IC8vIFdlIGhhdmUgdG8gcmV0dXJuIGFuIGVtcHR5IHN0cmluZyByYXRoZXIgdGhhbiBudWxsIHRv
IHByZXZlbnQgVFNNIGZyb20gY2FsbGluZyAtc3RyaW5nCisgICAgcmV0dXJuIHJlc3VsdCA/IHJl
c3VsdCA6IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBh
dXRvcmVsZWFzZV07Cit9CisKKy0gKE5TVUludGVnZXIpY2hhcmFjdGVySW5kZXhGb3JQb2ludDoo
TlNQb2ludCl0aGVQb2ludAoreworICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3dd
OworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07CisKKyAgICBpZiAod2luZG93
KQorICAgICAgICB0aGVQb2ludCA9IFt3aW5kb3cgY29udmVydFNjcmVlblRvQmFzZTp0aGVQb2lu
dF07CisgICAgdGhlUG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6dGhlUG9pbnQgZnJvbVZpZXc6
bmlsXTsKKworICAgIERPTVJhbmdlICpyYW5nZSA9IFtmcmFtZSBfY2hhcmFjdGVyUmFuZ2VBdFBv
aW50OnRoZVBvaW50XTsKKyAgICBpZiAoIXJhbmdlKSB7CisgICAgICAgIExPRyhUZXh0SW5wdXQs
ICJjaGFyYWN0ZXJJbmRleEZvclBvaW50OiglZiwgJWYpIC0+IE5TTm90Rm91bmQiLCB0aGVQb2lu
dC54LCB0aGVQb2ludC55KTsKKyAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IFtmcmFtZSBfY29udmVydERPTVJhbmdlVG9OU1Jhbmdl
OnJhbmdlXS5sb2NhdGlvbjsKKyAgICBMT0coVGV4dElucHV0LCAiY2hhcmFjdGVySW5kZXhGb3JQ
b2ludDooJWYsICVmKSAtPiAldSIsIHRoZVBvaW50LngsIHRoZVBvaW50LnksIHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLSAoTlNSZWN0KWZpcnN0UmVjdEZvckNoYXJhY3RlclJh
bmdlOihOU1JhbmdlKXRoZVJhbmdlCit7ICAgIAorICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxm
IF9mcmFtZV07CisgICAgCisgICAgLy8gSnVzdCB0byBtYXRjaCBOU1RleHRWaWV3J3MgYmVoYXZp
b3IuIFJlZ3Jlc3Npb24gdGVzdHMgY2Fubm90IGRldGVjdCB0aGlzOworICAgIC8vIHRvIHJlcHJv
ZHVjZSwgdXNlIGEgdGVzdCBhcHBsaWNhdGlvbiBmcm9tIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ2ODIKKyAgICAvLyAodHlwZSBzb21ldGhpbmc7IHRyeSByYW5nZXMg
KDEsIC0xKSBhbmQgKDIsIC0xKS4KKyAgICBpZiAoKHRoZVJhbmdlLmxvY2F0aW9uICsgdGhlUmFu
Z2UubGVuZ3RoIDwgdGhlUmFuZ2UubG9jYXRpb24pICYmICh0aGVSYW5nZS5sb2NhdGlvbiArIHRo
ZVJhbmdlLmxlbmd0aCAhPSAwKSkKKyAgICAgICAgdGhlUmFuZ2UubGVuZ3RoID0gMDsKKyAgICAK
KyAgICBET01SYW5nZSAqcmFuZ2UgPSBbZnJhbWUgX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTp0
aGVSYW5nZV07CisgICAgaWYgKCFyYW5nZSkgeworICAgICAgICBMT0coVGV4dElucHV0LCAiZmly
c3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkgLT4gKDAsIDAsIDAsIDApIiwgdGhlUmFu
Z2UubG9jYXRpb24sIHRoZVJhbmdlLmxlbmd0aCk7CisgICAgICAgIHJldHVybiBOU01ha2VSZWN0
KDAsIDAsIDAsIDApOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoW3JhbmdlIHN0YXJ0Q29udGFp
bmVyXSk7CisgICAgQVNTRVJUKFtyYW5nZSBlbmRDb250YWluZXJdKTsKKyAgICAKKyAgICBOU1Jl
Y3QgcmVzdWx0UmVjdCA9IFtmcmFtZSBfZmlyc3RSZWN0Rm9yRE9NUmFuZ2U6cmFuZ2VdOworICAg
IHJlc3VsdFJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpyZXN1bHRSZWN0IHRvVmlldzpuaWxdOwor
CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxmIHdpbmRvd107CisgICAgaWYgKHdpbmRvdykK
KyAgICAgICAgcmVzdWx0UmVjdC5vcmlnaW4gPSBbd2luZG93IGNvbnZlcnRCYXNlVG9TY3JlZW46
cmVzdWx0UmVjdC5vcmlnaW5dOworICAgIAorICAgIExPRyhUZXh0SW5wdXQsICJmaXJzdFJlY3RG
b3JDaGFyYWN0ZXJSYW5nZTooJXUsICV1KSAtPiAoJWYsICVmLCAlZiwgJWYpIiwgdGhlUmFuZ2Uu
bG9jYXRpb24sIHRoZVJhbmdlLmxlbmd0aCwgcmVzdWx0UmVjdC5vcmlnaW4ueCwgcmVzdWx0UmVj
dC5vcmlnaW4ueSwgcmVzdWx0UmVjdC5zaXplLndpZHRoLCByZXN1bHRSZWN0LnNpemUuaGVpZ2h0
KTsKKyAgICByZXR1cm4gcmVzdWx0UmVjdDsKK30KKworLSAoTlNSYW5nZSlzZWxlY3RlZFJhbmdl
Cit7CisgICAgaWYgKCFpc1RleHRJbnB1dChjb3JlKFtzZWxmIF9mcmFtZV0pKSkgeworICAgICAg
ICBMT0coVGV4dElucHV0LCAic2VsZWN0ZWRSYW5nZSAtPiAoTlNOb3RGb3VuZCwgMCkiKTsKKyAg
ICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIH0KKyAgICBOU1Jh
bmdlIHJlc3VsdCA9IFtbc2VsZiBfZnJhbWVdIF9zZWxlY3RlZE5TUmFuZ2VdOworCisgICAgTE9H
KFRleHRJbnB1dCwgInNlbGVjdGVkUmFuZ2UgLT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24s
IHJlc3VsdC5sZW5ndGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKE5TUmFuZ2UpbWFy
a2VkUmFuZ2UKK3sKKyAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBbc2VsZiBfZnJhbWVdOworICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkK
KyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOworICAgIE5TUmFuZ2UgcmVzdWx0ID0g
W3dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmVGcmFtZS0+ZWRpdG9yKCktPmNvbXBvc2l0
aW9uUmFuZ2UoKS5nZXQoKV07CisKKyAgICBMT0coVGV4dElucHV0LCAibWFya2VkUmFuZ2UgLT4g
KCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdWJzdHJpbmdG
cm9tUmFuZ2U6KE5TUmFuZ2UpbnNSYW5nZQoreworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxm
IF9mcmFtZV07CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoZnJhbWUpOworICAgIGlmICgh
aXNUZXh0SW5wdXQoY29yZUZyYW1lKSB8fCBpc0luUGFzc3dvcmRGaWVsZChjb3JlRnJhbWUpKSB7
CisgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigl
dSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKKyAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgRE9NUmFuZ2UgKmRvbVJhbmdlID0gW2ZyYW1lIF9j
b252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6bnNSYW5nZV07CisgICAgaWYgKCFkb21SYW5nZSkgewor
ICAgICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUs
ICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7CisgICAgICAg
IHJldHVybiBuaWw7CisgICAgfQorCisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBb
TlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpjb3JlKGRv
bVJhbmdlKV07CisgICAgCisgICAgLy8gW05TQXR0cmlidXRlZFN0cmluZyhXZWJLaXRFeHRyYXMp
IF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpdICBpbnNpc3RzIG9uIGluc2VydGluZyBh
IHRyYWlsaW5nIAorICAgIC8vIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdo
aWNoIGJyZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1
MT4KKyAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRhbnQg
c3RyaW5nIHRvIHRoZSBjb3JyZWN0IGxlbmd0aC4KKyAgICBpZiAoW3Jlc3VsdCBsZW5ndGhdID4g
bnNSYW5nZS5sZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKFtyZXN1bHQgbGVuZ3RoXSA9PSBuc1Jh
bmdlLmxlbmd0aCArIDEpOworICAgICAgICBBU1NFUlQoW1tyZXN1bHQgc3RyaW5nXSBjaGFyYWN0
ZXJBdEluZGV4Om5zUmFuZ2UubGVuZ3RoXSA9PSAnXG4nIHx8IFtbcmVzdWx0IHN0cmluZ10gY2hh
cmFjdGVyQXRJbmRleDpuc1JhbmdlLmxlbmd0aF0gPT0gJyAnKTsKKyAgICAgICAgcmVzdWx0ID0g
W3Jlc3VsdCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFu
Z2UubGVuZ3RoKV07CisgICAgfQorICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3Ry
aW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IFwiJUBcIiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFu
Z2UubGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8v
IHRlc3QgZm9yIDEwLjQgYmVjYXVzZSBvZiA8cmRhcjovL3Byb2JsZW0vNDI0MzQ2Mz4KKyNpZmRl
ZiBCVUlMRElOR19PTl9USUdFUgorLSAobG9uZyljb252ZXJzYXRpb25JZGVudGlmaWVyCit7Cisg
ICAgcmV0dXJuIChsb25nKXNlbGY7Cit9CisjZWxzZQorLSAoTlNJbnRlZ2VyKWNvbnZlcnNhdGlv
bklkZW50aWZpZXIKK3sKKyAgICByZXR1cm4gKE5TSW50ZWdlcilzZWxmOworfQorI2VuZGlmCisK
Ky0gKEJPT0wpaGFzTWFya2VkVGV4dAoreworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIEJPT0wgcmVzdWx0ID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7CisgICAgTE9HKFRleHRJbnB1dCwgImhhc01hcmtl
ZFRleHQgLT4gJXUiLCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy0gKHZvaWQp
dW5tYXJrVGV4dAoreworICAgIExPRyhUZXh0SW5wdXQsICJ1bm1hcmtUZXh0Iik7CisKKyAgICAv
LyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxl
ciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCisgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVu
dHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1Bh
cmFtZXRlcnM7CisgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAw
OworCisgICAgaWYgKHBhcmFtZXRlcnMpIHsKKyAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNI
YW5kbGVkID0gWUVTOworICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsKKyAg
ICB9CisgICAgCisgICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
KQorICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24oKTsKK30K
Kworc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJp
bmcsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4mIHJlc3VsdCkKK3sKKyAgICBpbnQgbGVu
Z3RoID0gW1tzdHJpbmcgc3RyaW5nXSBsZW5ndGhdOworCisgICAgaW50IGkgPSAwOworICAgIHdo
aWxlIChpIDwgbGVuZ3RoKSB7CisgICAgICAgIE5TUmFuZ2UgcmFuZ2U7CisgICAgICAgIE5TRGlj
dGlvbmFyeSAqYXR0cnMgPSBbc3RyaW5nIGF0dHJpYnV0ZXNBdEluZGV4OmkgbG9uZ2VzdEVmZmVj
dGl2ZVJhbmdlOiZyYW5nZSBpblJhbmdlOk5TTWFrZVJhbmdlKGksIGxlbmd0aCAtIGkpXTsKKwor
ICAgICAgICBpZiAoTlNOdW1iZXIgKnN0eWxlID0gW2F0dHJzIG9iamVjdEZvcktleTpOU1VuZGVy
bGluZVN0eWxlQXR0cmlidXRlTmFtZV0pIHsKKyAgICAgICAgICAgIENvbG9yIGNvbG9yID0gQ29s
b3I6OmJsYWNrOworICAgICAgICAgICAgaWYgKE5TQ29sb3IgKmNvbG9yQXR0ciA9IFthdHRycyBv
YmplY3RGb3JLZXk6TlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWVdKQorICAgICAgICAgICAg
ICAgIGNvbG9yID0gY29sb3JGcm9tTlNDb2xvcihbY29sb3JBdHRyIGNvbG9yVXNpbmdDb2xvclNw
YWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoQ29tcG9zaXRpb25VbmRlcmxpbmUocmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UocmFuZ2Up
LCBjb2xvciwgW3N0eWxlIGludFZhbHVlXSA+IDEpKTsKKyAgICAgICAgfQorCisgICAgICAgIGkg
PSByYW5nZS5sb2NhdGlvbiArIHJhbmdlLmxlbmd0aDsKKyAgICB9Cit9CisKKy0gKHZvaWQpc2V0
TWFya2VkVGV4dDooaWQpc3RyaW5nIHNlbGVjdGVkUmFuZ2U6KE5TUmFuZ2UpbmV3U2VsUmFuZ2UK
K3sKKyAgICBCT09MIGlzQXR0cmlidXRlZFN0cmluZyA9IFtzdHJpbmcgaXNLaW5kT2ZDbGFzczpb
TlNBdHRyaWJ1dGVkU3RyaW5nIGNsYXNzXV07IC8vIE90aGVyd2lzZSwgTlNTdHJpbmcKKworICAg
IExPRyhUZXh0SW5wdXQsICJzZXRNYXJrZWRUZXh0OlwiJUBcIiBzZWxlY3RlZFJhbmdlOigldSwg
JXUpIiwgaXNBdHRyaWJ1dGVkU3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nLCBuZXdT
ZWxSYW5nZS5sb2NhdGlvbiwgbmV3U2VsUmFuZ2UubGVuZ3RoKTsKKworICAgIC8vIFVzZSBwb2lu
dGVyIHRvIGdldCBwYXJhbWV0ZXJzIHBhc3NlZCB0byB1cyBieSB0aGUgY2FsbGVyIG9mIGludGVy
cHJldEtleUV2ZW50cy4KKyAgICBXZWJIVE1MVmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVyczsK
KyAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CisKKyAgICBp
ZiAocGFyYW1ldGVycykgeworICAgICAgICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBZ
RVM7CisgICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POworICAgIH0KKyAgICAK
KyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNv
cmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFbc2VsZiBfaXNFZGl0YWJsZV0p
CisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4gdW5k
ZXJsaW5lczsKKyAgICBOU1N0cmluZyAqdGV4dCA9IHN0cmluZzsKKworICAgIGlmIChpc0F0dHJp
YnV0ZWRTdHJpbmcpIHsKKyAgICAgICAgdW5zaWduZWQgbWFya2VkVGV4dExlbmd0aCA9IFsoTlNT
dHJpbmcgKilzdHJpbmcgbGVuZ3RoXTsKKyAgICAgICAgTlNTdHJpbmcgKnJhbmdlU3RyaW5nID0g
W3N0cmluZyBhdHRyaWJ1dGU6TlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFt
ZSBhdEluZGV4OjAgbG9uZ2VzdEVmZmVjdGl2ZVJhbmdlOk5VTEwgaW5SYW5nZTpOU01ha2VSYW5n
ZSgwLCBtYXJrZWRUZXh0TGVuZ3RoKV07CisgICAgICAgIExPRyhUZXh0SW5wdXQsICIgICAgUmVw
bGFjZW1lbnRSYW5nZTogJUAiLCByYW5nZVN0cmluZyk7CisgICAgICAgIC8vIFRoZSBBcHBLaXQg
YWRkcyBhICdzZWNyZXQnIHByb3BlcnR5IHRvIHRoZSBzdHJpbmcgdGhhdCBjb250YWlucyB0aGUg
cmVwbGFjZW1lbnQgcmFuZ2UuCisgICAgICAgIC8vIFRoZSByZXBsYWNlbWVudCByYW5nZSBpcyB0
aGUgcmFuZ2Ugb2YgdGhlIHRoZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhl
IG5ldyBzdHJpbmcuCisgICAgICAgIGlmIChyYW5nZVN0cmluZykKKyAgICAgICAgICAgIFtbc2Vs
ZiBfZnJhbWVdIF9zZWxlY3ROU1JhbmdlOk5TUmFuZ2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07
CisKKyAgICAgICAgdGV4dCA9IFtzdHJpbmcgc3RyaW5nXTsKKyAgICAgICAgZXh0cmFjdFVuZGVy
bGluZXMoc3RyaW5nLCB1bmRlcmxpbmVzKTsKKyAgICB9CisKKyAgICBjb3JlRnJhbWUtPmVkaXRv
cigpLT5zZXRDb21wb3NpdGlvbih0ZXh0LCB1bmRlcmxpbmVzLCBuZXdTZWxSYW5nZS5sb2NhdGlv
biwgTlNNYXhSYW5nZShuZXdTZWxSYW5nZSkpOworfQorCistICh2b2lkKWRvQ29tbWFuZEJ5U2Vs
ZWN0b3I6KFNFTClzZWxlY3RvcgoreworICAgIExPRyhUZXh0SW5wdXQsICJkb0NvbW1hbmRCeVNl
bGVjdG9yOlwiJXNcIiIsIHNlbF9nZXROYW1lKHNlbGVjdG9yKSk7CisKKyAgICAvLyBVc2UgcG9p
bnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkgdGhlIGNhbGxlciBvZiBpbnRl
cnByZXRLZXlFdmVudHMuCisgICAgLy8gVGhlIHNhbWUgY2FsbCB0byBpbnRlcnByZXRLZXlFdmVu
dHMgY2FuIGRvIG1vcmUgdGhhbiBvbmUgY29tbWFuZC4KKyAgICBXZWJIVE1MVmlld0ludGVycHJl
dEtleUV2ZW50c1BhcmFtZXRlcnMqIHBhcmFtZXRlcnMgPSBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5
RXZlbnRzUGFyYW1ldGVyczsKKyAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgcGFyYW1ldGVy
cy0+Y29uc3VtZWRCeUlNID0gTk87CisKKyAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKG5v
b3A6KSkgeworICAgICAgICBfcHJpdmF0ZS0+cmVjZWl2ZWROT09QID0gWUVTOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJhbWV0ZXJzID8g
cGFyYW1ldGVycy0+ZXZlbnQgOiAwOworICAgIGJvb2wgc2hvdWxkU2F2ZUNvbW1hbmQgPSBwYXJh
bWV0ZXJzICYmIHBhcmFtZXRlcnMtPnNob3VsZFNhdmVDb21tYW5kOworCisgICAgaWYgKGV2ZW50
ICYmIHNob3VsZFNhdmVDb21tYW5kKQorICAgICAgICBldmVudC0+a2V5cHJlc3NDb21tYW5kcygp
LmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoTlNTdHJpbmdGcm9tU2VsZWN0b3Ioc2VsZWN0b3IpKSk7
CisgICAgZWxzZSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG9ubHkgZGlyZWN0IGNhbGxz
IHRvIGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHNlZSB0aGUgcGFyYW1ldGVycyBieSBzZXR0aW5nIHRv
IDAuCisgICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gMDsK
KworICAgICAgICBib29sIGV2ZW50V2FzSGFuZGxlZDsKKworICAgICAgICBXZWJWaWV3ICp3ZWJW
aWV3ID0gW3NlbGYgX3dlYlZpZXddOworICAgICAgICBpZiAoW1t3ZWJWaWV3IF9lZGl0aW5nRGVs
ZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVj
dG9yXSkKKyAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IHRydWU7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFu
ZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOworICAgICAgICAgICAgaWYgKGNvbW1hbmQuaXNTdXBwb3J0
ZWQoKSkKKyAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBjb21tYW5kLmV4ZWN1dGUo
ZXZlbnQpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgV2ViS2l0
IGRvZXMgbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kLCB3ZSBuZWVkIHRvIHBhc3MgdGhlIHNlbGVj
dG9yIHRvIHN1cGVyLgorICAgICAgICAgICAgICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29t
bWFuZEJ5U2VsZWN0b3IgPSBzZWxlY3RvcjsKKworICAgICAgICAgICAgICAgIC8vIFRoZSBzaW5r
IGRvZXMgdHdvIHRoaW5nczogMSkgVGVsbHMgdXMgaWYgdGhlIHJlc3BvbmRlciB3ZW50IHVuaGFu
ZGxlZCwgYW5kCisgICAgICAgICAgICAgICAgLy8gMikgcHJldmVudHMgYW55IE5TQmVlcDsgd2Ug
ZG9uJ3QgZXZlciB3YW50IHRvIGJlZXAgaGVyZS4KKyAgICAgICAgICAgICAgICBXZWJSZXNwb25k
ZXJDaGFpblNpbmsgKnNpbmsgPSBbW1dlYlJlc3BvbmRlckNoYWluU2luayBhbGxvY10gaW5pdFdp
dGhSZXNwb25kZXJDaGFpbjpzZWxmXTsKKyAgICAgICAgICAgICAgICBbc3VwZXIgZG9Db21tYW5k
QnlTZWxlY3RvcjpzZWxlY3Rvcl07CisgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkID0g
IVtzaW5rIHJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZF07CisgICAgICAgICAgICAgICAgW3Npbmsg
ZGV0YWNoXTsKKyAgICAgICAgICAgICAgICBbc2luayByZWxlYXNlXTsKKworICAgICAgICAgICAg
ICAgIF9wcml2YXRlLT5zZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3IgPSAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHBhcmFtZXRlcnMpCisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLT5ldmVudFdhc0hhbmRsZWQgPSBldmVudFdhc0hhbmRsZWQ7CisKKyAgICAg
ICAgLy8gUmVzdG9yZSB0aGUgcGFyYW1ldGVycyBzbyB0aGF0IG90aGVyIGNhbGxzIHRvIGRvQ29t
bWFuZEJ5U2VsZWN0b3I6IHNlZSB0aGVtLAorICAgICAgICAvLyBhbmQgb3RoZXIgY29tbWFuZHMg
Y2FuIHBhcnRpY2lwYXRlIGluIHNldHRpbmcgdGhlICJldmVudFdhc0hhbmRsZWQiIGZsYWcuCisg
ICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVy
czsKKyAgICB9Cit9CisKKy0gKHZvaWQpaW5zZXJ0VGV4dDooaWQpc3RyaW5nCit7CisgICAgQk9P
TCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3RyaW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRl
ZFN0cmluZyBjbGFzc11dOyAvLyBPdGhlcndpc2UsIE5TU3RyaW5nCisKKyAgICBMT0coVGV4dElu
cHV0LCAiaW5zZXJ0VGV4dDpcIiVAXCIiLCBpc0F0dHJpYnV0ZWRTdHJpbmcgPyBbc3RyaW5nIHN0
cmluZ10gOiBzdHJpbmcpOworCisgICAgV2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJh
bWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRl
cnM7CisgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOworICAg
IGlmIChwYXJhbWV0ZXJzKQorICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0gPSBOTzsK
KworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgaW5zZXJ0aW5nIGFuIGF0dHJpYnV0ZWQgc3RyaW5n
IGJ1dCBpbnB1dCBtZXRob2RzIGRvbid0IGFwcGVhciB0byByZXF1aXJlIHRoaXMuCisgICAgUmVm
UHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIE5TU3RyaW5n
ICp0ZXh0OworICAgIGJvb2wgaXNGcm9tSW5wdXRNZXRob2QgPSBjb3JlRnJhbWUgJiYgY29yZUZy
YW1lLT5lZGl0b3IoKS0+aGFzQ29tcG9zaXRpb24oKTsKKyAgICBpZiAoaXNBdHRyaWJ1dGVkU3Ry
aW5nKSB7CisgICAgICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107CisgICAgICAgIC8vIFdlIGRl
YWwgd2l0aCB0aGUgTlNUZXh0SW5wdXRSZXBsYWNlbWVudFJhbmdlQXR0cmlidXRlTmFtZSBhdHRy
aWJ1dGUgZnJvbSBOU0F0dHJpYnV0ZWRTdHJpbmcgaGVyZQorICAgICAgICAvLyBzaW1wbHkgYmVj
YXVzZSBpdCBpcyB1c2VkIGJ5IGF0IGxlYXN0IG9uZSBJbnB1dCBNZXRob2QgLS0gaXQgY29ycmVz
b25kcyB0byB0aGUga0V2ZW50UGFyYW1UZXh0SW5wdXRTZW5kUmVwbGFjZVJhbmdlCisgICAgICAg
IC8vIGV2ZW50IGluIFRTTS4gIFRoaXMgYmVoYXZpb3VyIG1hdGNoZXMgdGhhdCBvZiAtW1dlYkhU
TUxWaWV3IHNldE1hcmtlZFRleHQ6c2VsZWN0ZWRSYW5nZTpdIHdoZW4gaXQgcmVjZWl2ZXMgYW4K
KyAgICAgICAgLy8gTlNBdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIE5TU3RyaW5nICpyYW5nZVN0
cmluZyA9IFtzdHJpbmcgYXR0cmlidXRlOk5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5nZUF0dHJp
YnV0ZU5hbWUgYXRJbmRleDowIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTpOVUxMIGluUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW3RleHQgbGVuZ3RoXSldOworICAgICAgICBMT0coVGV4dElucHV0LCAiICAg
IFJlcGxhY2VtZW50UmFuZ2U6ICVAIiwgcmFuZ2VTdHJpbmcpOworICAgICAgICBpZiAocmFuZ2VT
dHJpbmcpIHsKKyAgICAgICAgICAgIFtbc2VsZiBfZnJhbWVdIF9zZWxlY3ROU1JhbmdlOk5TUmFu
Z2VGcm9tU3RyaW5nKHJhbmdlU3RyaW5nKV07CisgICAgICAgICAgICBpc0Zyb21JbnB1dE1ldGhv
ZCA9IFlFUzsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICB0ZXh0ID0gc3RyaW5nOwor
CisgICAgYm9vbCBldmVudEhhbmRsZWQgPSBmYWxzZTsKKyAgICBpZiAoW3RleHQgbGVuZ3RoXSkg
eworICAgICAgICBLZXlib2FyZEV2ZW50KiBldmVudCA9IHBhcmFtZXRlcnMgPyBwYXJhbWV0ZXJz
LT5ldmVudCA6IDA7CisKKyAgICAgICAgLy8gaW5zZXJ0VGV4dCBjYW4gYmUgY2FsbGVkIGZyb20g
YW4gaW5wdXQgbWV0aG9kIG9yIGZyb20gbm9ybWFsIGtleSBldmVudCBwcm9jZXNzaW5nCisgICAg
ICAgIC8vIElmIGl0cyBmcm9tIG5vcm1hbCBrZXkgZXZlbnQgcHJvY2Vzc2luZywgd2UgbWF5IG5l
ZWQgdG8gc2F2ZSB0aGUgYWN0aW9uIHRvIHBlcmZvcm0gaXQgbGF0ZXIuCisgICAgICAgIC8vIElm
IGl0cyBmcm9tIGFuIGlucHV0IG1ldGhvZCwgdGhlbiB3ZSBzaG91bGQgZ28gYWhlYWQgYW5kIGlu
c2VydCB0aGUgdGV4dCBub3cuICAKKyAgICAgICAgLy8gV2UgYXNzdW1lIGl0J3MgZnJvbSB0aGUg
aW5wdXQgbWV0aG9kIGlmIHdlIGhhdmUgbWFya2VkIHRleHQuCisgICAgICAgIC8vIEZJWE1FOiBJ
biB0aGVvcnksIHRoaXMgY291bGQgYmUgd3JvbmcgZm9yIHNvbWUgaW5wdXQgbWV0aG9kcywgc28g
d2Ugc2hvdWxkIHRyeSB0byBmaW5kCisgICAgICAgIC8vIGFub3RoZXIgd2F5IHRvIGRldGVybWlu
ZSBpZiB0aGUgY2FsbCBpcyBmcm9tIHRoZSBpbnB1dCBtZXRob2QKKyAgICAgICAgYm9vbCBzaG91
bGRTYXZlQ29tbWFuZCA9IHBhcmFtZXRlcnMgJiYgcGFyYW1ldGVycy0+c2hvdWxkU2F2ZUNvbW1h
bmQ7CisgICAgICAgIGlmIChldmVudCAmJiBzaG91bGRTYXZlQ29tbWFuZCAmJiAhaXNGcm9tSW5w
dXRNZXRob2QpIHsKKyAgICAgICAgICAgIGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuYXBwZW5k
KEtleXByZXNzQ29tbWFuZCgiaW5zZXJ0VGV4dDoiLCB0ZXh0KSk7CisgICAgICAgICAgICBfcHJp
dmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZyBldmVudFRl
eHQgPSB0ZXh0OworICAgICAgICBldmVudFRleHQucmVwbGFjZShOU0JhY2tUYWJDaGFyYWN0ZXIs
IE5TVGFiQ2hhcmFjdGVyKTsgLy8gc2FtZSB0aGluZyBpcyBkb25lIGluIEtleUV2ZW50TWFjLm1t
IGluIFdlYkNvcmUKKyAgICAgICAgaWYgKGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigp
LT5jYW5FZGl0KCkpIHsKKyAgICAgICAgICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+aGFz
Q29tcG9zaXRpb24oKSkKKyAgICAgICAgICAgICAgICBldmVudEhhbmRsZWQgPSBjb3JlRnJhbWUt
PmVkaXRvcigpLT5pbnNlcnRUZXh0KGV2ZW50VGV4dCwgZXZlbnQpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgZXZlbnRIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBjb3JlRnJhbWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb24oZXZlbnRUZXh0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoIXBhcmFtZXRlcnMp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoaXNGcm9tSW5wdXRNZXRob2QpIHsKKyAg
ICAgICAgLy8gQWxsb3cgZG9Db21tYW5kQnlTZWxlY3RvcjogdG8gYmUgY2FsbGVkIGFmdGVyIGlu
c2VydFRleHQ6IGJ5IHJlc2V0dGluZyBpbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzCisgICAg
ICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsK
KyAgICAgICAgcGFyYW1ldGVycy0+Y29uc3VtZWRCeUlNID0gWUVTOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIHBhcmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IGV2ZW50SGFu
ZGxlZDsKK30KKworLSAodm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyCit7Cisg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3Jl
RnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEJPT0wgZXhwb3NlSW5wdXRDb250ZXh0ID0g
aXNUZXh0SW5wdXQoY29yZUZyYW1lKSAmJiAhaXNJblBhc3N3b3JkRmllbGQoY29yZUZyYW1lKTsK
KyAgICBpZiAoZXhwb3NlSW5wdXRDb250ZXh0ICE9IF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRl
eHQpIHsKKyAgICAgICAgX3ByaXZhdGUtPmV4cG9zZUlucHV0Q29udGV4dCA9IGV4cG9zZUlucHV0
Q29udGV4dDsKKyAgICAgICAgLy8gTGV0IEFwcEtpdCBjYWNoZSBhIHBvdGVudGlhbGx5IGNoYW5n
ZWQgaW5wdXQgY29udGV4dC4KKyAgICAgICAgLy8gV2ViQ29yZSByb3V0aW5lbHkgc2V0cyB0aGUg
c2VsZWN0aW9uIHRvIE5vbmUgd2hlbiBlZGl0aW5nLCBhbmQgSU1zIGJlY29tZSB1bmhhcHB5IHdo
ZW4gYW4gaW5wdXQgY29udGV4dCBzdWRkZW5seSB0dXJucyBuaWwsIHNlZSBidWcgMjYwMDkuCisg
ICAgICAgIGlmICghY29yZUZyYW1lIHx8ICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc05vbmUo
KSkKKyAgICAgICAgICAgIFtOU0FwcCB1cGRhdGVXaW5kb3dzXTsKKyAgICB9CisKKyAgICBpZiAo
IWNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChjb3JlRnJhbWUtPmVkaXRvcigpLT5pZ25vcmVDb21wb3NpdGlvblNlbGVjdGlv
bkNoYW5nZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBzdGFydDsKKyAgICB1
bnNpZ25lZCBlbmQ7CisgICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPmdldENvbXBvc2l0aW9u
U2VsZWN0aW9uKHN0YXJ0LCBlbmQpKQorICAgICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJ
bnB1dE1hbmFnZXJdIG1hcmtlZFRleHRTZWxlY3Rpb25DaGFuZ2VkOk5TTWFrZVJhbmdlKHN0YXJ0
LCBlbmQgLSBzdGFydCkgY2xpZW50OnNlbGZdOworICAgIGVsc2UgeworICAgICAgICBjb3JlRnJh
bWUtPmVkaXRvcigpLT5jb25maXJtQ29tcG9zaXRpb25XaXRob3V0RGlzdHVyYmluZ1NlbGVjdGlv
bigpOworICAgICAgICBbW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdIG1hcmtl
ZFRleHRBYmFuZG9uZWQ6c2VsZl07CisgICAgfQorfQorCitAZW5kCisKKy8qCisgICAgVGhpcyBj
bGFzcyBydW5zIHRoZSBzaG93IGZvciBoYW5kaW5nIHRoZSBjb21wbGV0ZTogTlNUZXh0VmlldyBv
cGVyYXRpb24uICBJdCBjb3VudHMgb24gaXRzIEhUTUwgdmlldworICAgIHRvIGNhbGwgZW5kUmV2
ZXJ0aW5nQ2hhbmdlOiB3aGVuZXZlciB0aGUgY3VycmVudCBjb21wbGV0aW9uIG5lZWRzIHRvIGJl
IGFib3J0ZWQuCisgCisgICAgVGhlIGNsYXNzIGlzIGluIG9uZSBvZiB0d28gbW9kZXM6ICBQb3B1
cFdpbmRvdyBzaG93aW5nLCBvciBub3QuICBJdCBpcyBzaG93biB3aGVuIGEgY29tcGxldGlvbiB5
aWVsZHMKKyAgICBtb3JlIHRoYW4gb25lIG1hdGNoLiAgSWYgYSBjb21wbGV0aW9uIHlpZWxkcyBv
bmUgb3IgemVybyBtYXRjaGVzLCBpdCBpcyBub3Qgc2hvd24sIGFuZCAqKnRoZXJlIGlzIG5vCisg
ICAgc3RhdGUgY2FycmllZCBhY3Jvc3MgdG8gdGhlIG5leHQgY29tcGxldGlvbioqLgorICovCisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyCisKKy0gKGlkKWluaXRX
aXRoSFRNTFZpZXc6KFdlYkhUTUxWaWV3ICopdmlldworeworICAgIHNlbGYgPSBbc3VwZXIgaW5p
dF07CisgICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF92aWV3ID0gdmll
dzsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClkZWFsbG9jCit7CisgICAgW19wb3B1
cFdpbmRvdyByZWxlYXNlXTsKKyAgICBbX2NvbXBsZXRpb25zIHJlbGVhc2VdOworICAgIFtfb3Jp
Z2luYWxTdHJpbmcgcmVsZWFzZV07CisgICAgCisgICAgW3N1cGVyIGRlYWxsb2NdOworfQorCist
ICh2b2lkKV9pbnNlcnRNYXRjaDooTlNTdHJpbmcgKiltYXRjaAoreworICAgIC8vIEZJWE1FOiAz
NzY5NjU0IC0gV2Ugc2hvdWxkIHByZXNlcnZlIGNhc2Ugb2Ygc3RyaW5nIGJlaW5nIGluc2VydGVk
LCBldmVuIGluIHByZWZpeCAoYnV0IHRoZW4gYWxzbyBiZQorICAgIC8vIGFibGUgdG8gcmV2ZXJ0
IHRoYXQpLiAgTWltaWMgTlNUZXh0LgorICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJh
bWVdOworICAgIE5TU3RyaW5nICpuZXdUZXh0ID0gW21hdGNoIHN1YnN0cmluZ0Zyb21JbmRleDpw
cmVmaXhMZW5ndGhdOworICAgIFtmcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Om5ld1Rl
eHQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFjZTpOT107Cit9CisKKy8vIG1vc3Rs
eSBsaWZ0ZWQgZnJvbSBOU1RleHRWaWV3X0tleUJpbmRpbmcubQorLSAodm9pZClfYnVpbGRVSQor
eworICAgIE5TUmVjdCBzY3JvbGxGcmFtZSA9IE5TTWFrZVJlY3QoMCwgMCwgMTAwLCAxMDApOwor
ICAgIE5TUmVjdCB0YWJsZUZyYW1lID0gTlNaZXJvUmVjdDsgICAgCisgICAgdGFibGVGcmFtZS5z
aXplID0gW05TU2Nyb2xsVmlldyBjb250ZW50U2l6ZUZvckZyYW1lU2l6ZTpzY3JvbGxGcmFtZS5z
aXplIGhhc0hvcml6b250YWxTY3JvbGxlcjpOTyBoYXNWZXJ0aWNhbFNjcm9sbGVyOllFUyBib3Jk
ZXJUeXBlOk5TTm9Cb3JkZXJdOworICAgIC8vIEFkZGVkIGNhc3QgdG8gd29yayBhcm91bmQgcHJv
YmxlbSB3aXRoIG11bHRpcGxlIEZvdW5kYXRpb24gaW5pdFdpdGhJZGVudGlmaWVyOiBtZXRob2Rz
IHdpdGggZGlmZmVyZW50IHBhcmFtZXRlciB0eXBlcy4KKyAgICBOU1RhYmxlQ29sdW1uICpjb2x1
bW4gPSBbKE5TVGFibGVDb2x1bW4gKilbTlNUYWJsZUNvbHVtbiBhbGxvY10gaW5pdFdpdGhJZGVu
dGlmaWVyOltOU051bWJlciBudW1iZXJXaXRoSW50OjBdXTsKKyAgICBbY29sdW1uIHNldFdpZHRo
OnRhYmxlRnJhbWUuc2l6ZS53aWR0aF07CisgICAgW2NvbHVtbiBzZXRFZGl0YWJsZTpOT107Cisg
ICAgCisgICAgX3RhYmxlVmlldyA9IFtbTlNUYWJsZVZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
dGFibGVGcmFtZV07CisgICAgW190YWJsZVZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazpOU1ZpZXdX
aWR0aFNpemFibGVdOworICAgIFtfdGFibGVWaWV3IGFkZFRhYmxlQ29sdW1uOmNvbHVtbl07Cisg
ICAgW2NvbHVtbiByZWxlYXNlXTsKKyAgICBbX3RhYmxlVmlldyBzZXRHcmlkU3R5bGVNYXNrOk5T
VGFibGVWaWV3R3JpZE5vbmVdOworICAgIFtfdGFibGVWaWV3IHNldENvcm5lclZpZXc6bmlsXTsK
KyAgICBbX3RhYmxlVmlldyBzZXRIZWFkZXJWaWV3Om5pbF07CisgICAgW190YWJsZVZpZXcgc2V0
Q29sdW1uQXV0b3Jlc2l6aW5nU3R5bGU6TlNUYWJsZVZpZXdVbmlmb3JtQ29sdW1uQXV0b3Jlc2l6
aW5nU3R5bGVdOworICAgIFtfdGFibGVWaWV3IHNldERlbGVnYXRlOnNlbGZdOworICAgIFtfdGFi
bGVWaWV3IHNldERhdGFTb3VyY2U6c2VsZl07CisgICAgW190YWJsZVZpZXcgc2V0VGFyZ2V0OnNl
bGZdOworICAgIFtfdGFibGVWaWV3IHNldERvdWJsZUFjdGlvbjpAc2VsZWN0b3IodGFibGVBY3Rp
b246KV07CisgICAgCisgICAgTlNTY3JvbGxWaWV3ICpzY3JvbGxWaWV3ID0gW1tOU1Njcm9sbFZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2Nyb2xsRnJhbWVdOworICAgIFtzY3JvbGxWaWV3IHNl
dEJvcmRlclR5cGU6TlNOb0JvcmRlcl07CisgICAgW3Njcm9sbFZpZXcgc2V0SGFzVmVydGljYWxT
Y3JvbGxlcjpZRVNdOworICAgIFtzY3JvbGxWaWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3
V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZV07CisgICAgW3Njcm9sbFZpZXcgc2V0
RG9jdW1lbnRWaWV3Ol90YWJsZVZpZXddOworICAgIFtfdGFibGVWaWV3IHJlbGVhc2VdOworICAg
IAorICAgIF9wb3B1cFdpbmRvdyA9IFtbTlNXaW5kb3cgYWxsb2NdIGluaXRXaXRoQ29udGVudFJl
Y3Q6c2Nyb2xsRnJhbWUgc3R5bGVNYXNrOk5TQm9yZGVybGVzc1dpbmRvd01hc2sgYmFja2luZzpO
U0JhY2tpbmdTdG9yZUJ1ZmZlcmVkIGRlZmVyOk5PXTsKKyAgICBbX3BvcHVwV2luZG93IHNldEFs
cGhhVmFsdWU6MC44OGZdOworICAgIFtfcG9wdXBXaW5kb3cgc2V0Q29udGVudFZpZXc6c2Nyb2xs
Vmlld107CisgICAgW3Njcm9sbFZpZXcgcmVsZWFzZV07CisgICAgW19wb3B1cFdpbmRvdyBzZXRI
YXNTaGFkb3c6WUVTXTsKKyAgICBbX3BvcHVwV2luZG93IHNldE9uZVNob3Q6WUVTXTsKKyAgICBb
X3BvcHVwV2luZG93IF9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOllFU107CisgICAgW19wb3B1cFdp
bmRvdyBzZXRSZWxlYXNlZFdoZW5DbG9zZWQ6Tk9dOworfQorCisvLyBtb3N0bHkgbGlmdGVkIGZy
b20gTlNUZXh0Vmlld19LZXlCaW5kaW5nLm0KKy0gKHZvaWQpX3BsYWNlUG9wdXBXaW5kb3c6KE5T
UG9pbnQpdG9wTGVmdAoreworICAgIGludCBudW1iZXJUb1Nob3cgPSBbX2NvbXBsZXRpb25zIGNv
dW50XTsKKyAgICBpZiAobnVtYmVyVG9TaG93ID4gMjApIHsKKyAgICAgICAgbnVtYmVyVG9TaG93
ID0gMjA7CisgICAgfQorCisgICAgTlNSZWN0IHdpbmRvd0ZyYW1lOworICAgIE5TUG9pbnQgd29y
ZFN0YXJ0ID0gdG9wTGVmdDsKKyAgICB3aW5kb3dGcmFtZS5vcmlnaW4gPSBbW192aWV3IHdpbmRv
d10gY29udmVydEJhc2VUb1NjcmVlbjpbX3ZpZXcgY29udmVydFBvaW50OndvcmRTdGFydCB0b1Zp
ZXc6bmlsXV07CisgICAgd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQgPSBudW1iZXJUb1Nob3cgKiBb
X3RhYmxlVmlldyByb3dIZWlnaHRdICsgKG51bWJlclRvU2hvdyArIDEpICogW190YWJsZVZpZXcg
aW50ZXJjZWxsU3BhY2luZ10uaGVpZ2h0OworICAgIHdpbmRvd0ZyYW1lLm9yaWdpbi55IC09IHdp
bmRvd0ZyYW1lLnNpemUuaGVpZ2h0OworICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFtO
U0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNGb250IHN5c3RlbUZv
bnRPZlNpemU6MTIuMGZdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCBuaWxdOworICAgIGZsb2F0IG1h
eFdpZHRoID0gMC4wZjsKKyAgICBpbnQgbWF4SW5kZXggPSAtMTsKKyAgICBpbnQgaTsKKyAgICBm
b3IgKGkgPSAwOyBpIDwgbnVtYmVyVG9TaG93OyBpKyspIHsKKyAgICAgICAgZmxvYXQgd2lkdGgg
PSBjZWlsZihbW19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OmldIHNpemVXaXRoQXR0cmlidXRl
czphdHRyaWJ1dGVzXS53aWR0aCk7CisgICAgICAgIGlmICh3aWR0aCA+IG1heFdpZHRoKSB7Cisg
ICAgICAgICAgICBtYXhXaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgbWF4SW5kZXggPSBpOwor
ICAgICAgICB9CisgICAgfQorICAgIHdpbmRvd0ZyYW1lLnNpemUud2lkdGggPSAxMDA7CisgICAg
aWYgKG1heEluZGV4ID49IDApIHsKKyAgICAgICAgbWF4V2lkdGggPSBjZWlsZihbTlNTY3JvbGxW
aWV3IGZyYW1lU2l6ZUZvckNvbnRlbnRTaXplOk5TTWFrZVNpemUobWF4V2lkdGgsIDEwMC4wZikg
aGFzSG9yaXpvbnRhbFNjcm9sbGVyOk5PIGhhc1ZlcnRpY2FsU2Nyb2xsZXI6WUVTIGJvcmRlclR5
cGU6TlNOb0JvcmRlcl0ud2lkdGgpOworICAgICAgICBtYXhXaWR0aCA9IGNlaWxmKFtOU1dpbmRv
dyBmcmFtZVJlY3RGb3JDb250ZW50UmVjdDpOU01ha2VSZWN0KDAuMGYsIDAuMGYsIG1heFdpZHRo
LCAxMDAuMGYpIHN0eWxlTWFzazpOU0JvcmRlcmxlc3NXaW5kb3dNYXNrXS5zaXplLndpZHRoKTsK
KyAgICAgICAgbWF4V2lkdGggKz0gNS4wZjsKKyAgICAgICAgd2luZG93RnJhbWUuc2l6ZS53aWR0
aCA9IE1BWChtYXhXaWR0aCwgd2luZG93RnJhbWUuc2l6ZS53aWR0aCk7CisgICAgICAgIG1heFdp
ZHRoID0gTUlOKDQwMC4wZiwgd2luZG93RnJhbWUuc2l6ZS53aWR0aCk7CisgICAgfQorICAgIFtf
cG9wdXBXaW5kb3cgc2V0RnJhbWU6d2luZG93RnJhbWUgZGlzcGxheTpOT107CisgICAgCisgICAg
W190YWJsZVZpZXcgcmVsb2FkRGF0YV07CisgICAgW190YWJsZVZpZXcgc2VsZWN0Um93SW5kZXhl
czpbTlNJbmRleFNldCBpbmRleFNldFdpdGhJbmRleDowXSBieUV4dGVuZGluZ1NlbGVjdGlvbjpO
T107CisgICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxlOjBdOworICAgIFtzZWxmIF9y
ZWZsZWN0U2VsZWN0aW9uXTsKKyAgICBbX3BvcHVwV2luZG93IHNldExldmVsOk5TUG9wVXBNZW51
V2luZG93TGV2ZWxdOworICAgIFtfcG9wdXBXaW5kb3cgb3JkZXJGcm9udDpuaWxdOyAgICAKKyAg
ICBbW192aWV3IHdpbmRvd10gYWRkQ2hpbGRXaW5kb3c6X3BvcHVwV2luZG93IG9yZGVyZWQ6TlNX
aW5kb3dBYm92ZV07Cit9CisKKy0gKHZvaWQpZG9Db21wbGV0aW9uCit7CisgICAgaWYgKCFfcG9w
dXBXaW5kb3cpIHsKKyAgICAgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENo
ZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKKyAgICAgICAgaWYgKCFjaGVja2VyKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxDaGVja2VyIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KKyAg
ICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07CisgICAgICAgIERPTVJhbmdl
ICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKKyAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFu
Z2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpTZWxlY3Rpb25Db250cm9sbGVyOjpFWFRFTkQK
KyAgICAgICAgICAgIGRpcmVjdGlvbjpTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCBncmFu
dWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOworICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3do
b2xlV29yZCBjbG9uZVJhbmdlXTsKKyAgICAgICAgW3ByZWZpeCBzZXRFbmQ6W3NlbGVjdGlvbiBz
dGFydENvbnRhaW5lcl0gb2Zmc2V0OltzZWxlY3Rpb24gc3RhcnRPZmZzZXRdXTsKKworICAgICAg
ICAvLyBSZWplY3Qgc29tZSBOT1AgY2FzZXMKKyAgICAgICAgaWYgKFtwcmVmaXggY29sbGFwc2Vk
XSkgeworICAgICAgICAgICAgTlNCZWVwKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgTlNTdHJpbmcgKnByZWZpeFN0ciA9IFtmcmFtZSBfc3RyaW5nRm9yUmFuZ2U6
cHJlZml4XTsKKyAgICAgICAgTlNTdHJpbmcgKnRyaW1tZWRQcmVmaXggPSBbcHJlZml4U3RyIHN0
cmluZ0J5VHJpbW1pbmdDaGFyYWN0ZXJzSW5TZXQ6W05TQ2hhcmFjdGVyU2V0IHdoaXRlc3BhY2VB
bmROZXdsaW5lQ2hhcmFjdGVyU2V0XV07CisgICAgICAgIGlmIChbdHJpbW1lZFByZWZpeCBsZW5n
dGhdID09IDApIHsKKyAgICAgICAgICAgIE5TQmVlcCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHByZWZpeExlbmd0aCA9IFtwcmVmaXhTdHIgbGVuZ3RoXTsKKwor
ICAgICAgICAvLyBMb29rdXAgbWF0Y2hlcworICAgICAgICBbX2NvbXBsZXRpb25zIHJlbGVhc2Vd
OworICAgICAgICBfY29tcGxldGlvbnMgPSBbY2hlY2tlciBjb21wbGV0aW9uc0ZvclBhcnRpYWxX
b3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3ByZWZpeFN0ciBsZW5ndGhdKSBpblN0cmluZzpwcmVm
aXhTdHIgbGFuZ3VhZ2U6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6W1tfdmlldyBfd2ViVmll
d10gc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKKyAgICAgICAgW19jb21wbGV0aW9ucyByZXRh
aW5dOworICAgIAorICAgICAgICBpZiAoIV9jb21wbGV0aW9ucyB8fCBbX2NvbXBsZXRpb25zIGNv
dW50XSA9PSAwKSB7CisgICAgICAgICAgICBOU0JlZXAoKTsKKyAgICAgICAgfSBlbHNlIGlmIChb
X2NvbXBsZXRpb25zIGNvdW50XSA9PSAxKSB7CisgICAgICAgICAgICBbc2VsZiBfaW5zZXJ0TWF0
Y2g6W19jb21wbGV0aW9ucyBvYmplY3RBdEluZGV4OjBdXTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghX29yaWdpbmFsU3RyaW5nKTsgICAgICAgLy8gdGhpcyBzaG91bGQg
b25seSBiZSBzZXQgSUZGIHdlIGhhdmUgYSBwb3B1cCB3aW5kb3cKKyAgICAgICAgICAgIF9vcmln
aW5hbFN0cmluZyA9IFtbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnNlbGVjdGlvbl0gcmV0YWluXTsK
KyAgICAgICAgICAgIFtzZWxmIF9idWlsZFVJXTsKKyAgICAgICAgICAgIE5TUmVjdCB3b3JkUmVj
dCA9IFtmcmFtZSBfY2FyZXRSZWN0QXROb2RlOlt3aG9sZVdvcmQgc3RhcnRDb250YWluZXJdIG9m
ZnNldDpbd2hvbGVXb3JkIHN0YXJ0T2Zmc2V0XSBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5
RG93bnN0cmVhbV07CisgICAgICAgICAgICAvLyArMSB0byBiZSB1bmRlciB0aGUgd29yZCwgbm90
IHRoZSBjYXJldAorICAgICAgICAgICAgLy8gRklYTUUgLSAzNzY5NjUyIC0gV3JvbmcgcG9zaXRp
b25pbmcgZm9yIHJpZ2h0IHRvIGxlZnQgbGFuZ3VhZ2VzLiAgV2Ugc2hvdWxkIGxpbmUgdXAgdGhl
IHVwcGVyCisgICAgICAgICAgICAvLyByaWdodCBjb3JuZXIgd2l0aCB0aGUgY2FyZXQgaW5zdGVh
ZCBvZiB1cHBlciBsZWZ0LCBhbmQgdGhlICsxIHdvdWxkIGJlIGEgLTEuCisgICAgICAgICAgICBO
U1BvaW50IHdvcmRMb3dlckxlZnQgPSB7IE5TTWluWCh3b3JkUmVjdCkrMSwgTlNNYXhZKHdvcmRS
ZWN0KSB9OworICAgICAgICAgICAgW3NlbGYgX3BsYWNlUG9wdXBXaW5kb3c6d29yZExvd2VyTGVm
dF07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdD
aGFuZ2U6WUVTIG1vdmVMZWZ0Ok5PXTsKKyAgICB9Cit9CisKKy0gKHZvaWQpZW5kUmV2ZXJ0aW5n
Q2hhbmdlOihCT09MKXJldmVydENoYW5nZSBtb3ZlTGVmdDooQk9PTClnb0xlZnQKK3sKKyAgICBp
ZiAoX3BvcHVwV2luZG93KSB7CisgICAgICAgIC8vIHRlYXIgZG93biBVSQorICAgICAgICBbW192
aWV3IHdpbmRvd10gcmVtb3ZlQ2hpbGRXaW5kb3c6X3BvcHVwV2luZG93XTsKKyAgICAgICAgW19w
b3B1cFdpbmRvdyBvcmRlck91dDpzZWxmXTsKKyAgICAgICAgLy8gTXVzdCBhdXRvcmVsZWFzZSBi
ZWNhdXNlIGV2ZW50IHRyYWNraW5nIGNvZGUgbWF5IGJlIG9uIHRoZSBzdGFjayB0b3VjaGluZyBV
SQorICAgICAgICBbX3BvcHVwV2luZG93IGF1dG9yZWxlYXNlXTsKKyAgICAgICAgX3BvcHVwV2lu
ZG93ID0gbmlsOworCisgICAgICAgIGlmIChyZXZlcnRDaGFuZ2UpIHsKKyAgICAgICAgICAgIFdl
YkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVdOworICAgICAgICAgICAgW2ZyYW1lIF9yZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQ6X29yaWdpbmFsU3RyaW5nIHNlbGVjdFJlcGxhY2VtZW50OllF
UyBzbWFydFJlcGxhY2U6Tk9dOworICAgICAgICB9IGVsc2UgaWYgKFtfdmlldyBfaGFzU2VsZWN0
aW9uXSkgeworICAgICAgICAgICAgaWYgKGdvTGVmdCkKKyAgICAgICAgICAgICAgICBbX3ZpZXcg
bW92ZUJhY2t3YXJkOm5pbF07CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgW192
aWV3IG1vdmVGb3J3YXJkOm5pbF07CisgICAgICAgIH0KKyAgICAgICAgW19vcmlnaW5hbFN0cmlu
ZyByZWxlYXNlXTsKKyAgICAgICAgX29yaWdpbmFsU3RyaW5nID0gbmlsOworICAgIH0KKyAgICAv
LyBlbHNlIHRoZXJlIGlzIG5vIHN0YXRlIHRvIGFib3J0IGlmIHRoZSB3aW5kb3cgd2FzIG5vdCB1
cAorfQorCistIChCT09MKXBvcHVwV2luZG93SXNPcGVuCit7CisgICAgcmV0dXJuIF9wb3B1cFdp
bmRvdyAhPSBuaWw7Cit9CisKKy8vIFdlYkhUTUxWaWV3IGdpdmVzIHVzIGEgY3JhY2sgYXQga2V5
IGV2ZW50cyBpdCBzZWVzLiBSZXR1cm4gd2hldGhlciB3ZSBjb25zdW1lZCB0aGUgZXZlbnQuCisv
LyBUaGUgZmVhdHVyZXMgZm9yIHRoZSB2YXJpb3VzIGtleXMgbWltaWMgTlNUZXh0Vmlldy4KKy0g
KEJPT0wpZmlsdGVyS2V5RG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgaWYgKCFfcG9wdXBX
aW5kb3cpCisgICAgICAgIHJldHVybiBOTzsKKyAgICBOU1N0cmluZyAqc3RyaW5nID0gW2V2ZW50
IGNoYXJhY3RlcnNJZ25vcmluZ01vZGlmaWVyc107CisgICAgaWYgKCFbc3RyaW5nIGxlbmd0aF0p
CisgICAgICAgIHJldHVybiBOTzsKKyAgICB1bmljaGFyIGMgPSBbc3RyaW5nIGNoYXJhY3RlckF0
SW5kZXg6MF07CisgICAgaWYgKGMgPT0gTlNVcEFycm93RnVuY3Rpb25LZXkpIHsKKyAgICAgICAg
aW50IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOworICAgICAgICBpZiAo
MCA8IHNlbGVjdGVkUm93KSB7CisgICAgICAgICAgICBbX3RhYmxlVmlldyBzZWxlY3RSb3dJbmRl
eGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aEluZGV4OnNlbGVjdGVkUm93IC0gMV0gYnlFeHRl
bmRpbmdTZWxlY3Rpb246Tk9dOworICAgICAgICAgICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9W
aXNpYmxlOnNlbGVjdGVkUm93IC0gMV07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFlFUzsK
KyAgICB9CisgICAgaWYgKGMgPT0gTlNEb3duQXJyb3dGdW5jdGlvbktleSkgeworICAgICAgICBp
bnQgc2VsZWN0ZWRSb3cgPSBbX3RhYmxlVmlldyBzZWxlY3RlZFJvd107CisgICAgICAgIGlmIChz
ZWxlY3RlZFJvdyA8IChpbnQpW19jb21wbGV0aW9ucyBjb3VudF0gLSAxKSB7CisgICAgICAgICAg
ICBbX3RhYmxlVmlldyBzZWxlY3RSb3dJbmRleGVzOltOU0luZGV4U2V0IGluZGV4U2V0V2l0aElu
ZGV4OnNlbGVjdGVkUm93ICsgMV0gYnlFeHRlbmRpbmdTZWxlY3Rpb246Tk9dOworICAgICAgICAg
ICAgW190YWJsZVZpZXcgc2Nyb2xsUm93VG9WaXNpYmxlOnNlbGVjdGVkUm93ICsgMV07CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIFlFUzsKKyAgICB9CisgICAgaWYgKGMgPT0gTlNSaWdodEFy
cm93RnVuY3Rpb25LZXkgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcdCcpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgYmFja3RhYj8KKyAgICAgICAgW3NlbGYgZW5k
UmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVMZWZ0Ok5PXTsKKyAgICAgICAgcmV0dXJuIFlFUzsKKyAg
ICB9CisgICAgaWYgKGMgPT0gTlNMZWZ0QXJyb3dGdW5jdGlvbktleSkgeworICAgICAgICBbc2Vs
ZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6WUVTXTsKKyAgICAgICAgcmV0dXJuIFlF
UzsKKyAgICB9CisgICAgaWYgKGMgPT0gMHgxQiB8fCBjID09IE5TRjVGdW5jdGlvbktleSkgewor
ICAgICAgICAvLyBGSVhNRTogRjU/CisgICAgICAgIFtzZWxmIGVuZFJldmVydGluZ0NoYW5nZTpZ
RVMgbW92ZUxlZnQ6Tk9dOworICAgICAgICByZXR1cm4gWUVTOworICAgIH0KKyAgICBpZiAoYyA9
PSAnICcgfHwgYyA+PSAweDIxICYmIGMgPD0gMHgyRiB8fCBjID49IDB4M0EgJiYgYyA8PSAweDQw
IHx8IGMgPj0gMHg1QiAmJiBjIDw9IDB4NjAgfHwgYyA+PSAweDdCICYmIGMgPD0gMHg3RCkgewor
ICAgICAgICAvLyBGSVhNRTogSXMgdGhlIGFib3ZlIGxpc3Qgb2Yga2V5cyByZWFsbHkgZGVmaW5p
dGl2ZT8KKyAgICAgICAgLy8gT3JpZ2luYWxseSB0aGlzIGNvZGUgY2FsbGVkIGlzcHVuY3Q7IGFy
ZW4ndCB0aGVyZSBvdGhlciBwdW5jdHVhdGlvbiBrZXlzIG9uIGludGVybmF0aW9uYWwga2V5Ym9h
cmRzPworICAgICAgICBbc2VsZiBlbmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwor
ICAgICAgICByZXR1cm4gTk87IC8vIGxldCB0aGUgY2hhciBnZXQgaW5zZXJ0ZWQKKyAgICB9Cisg
ICAgcmV0dXJuIE5POworfQorCistICh2b2lkKV9yZWZsZWN0U2VsZWN0aW9uCit7CisgICAgaW50
IHNlbGVjdGVkUm93ID0gW190YWJsZVZpZXcgc2VsZWN0ZWRSb3ddOworICAgIEFTU0VSVChzZWxl
Y3RlZFJvdyA+PSAwICYmIHNlbGVjdGVkUm93IDwgKGludClbX2NvbXBsZXRpb25zIGNvdW50XSk7
CisgICAgW3NlbGYgX2luc2VydE1hdGNoOltfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDpzZWxl
Y3RlZFJvd11dOworfQorCistICh2b2lkKXRhYmxlQWN0aW9uOihpZClzZW5kZXIKK3sKKyAgICBb
c2VsZiBfcmVmbGVjdFNlbGVjdGlvbl07CisgICAgW3NlbGYgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5P
IG1vdmVMZWZ0Ok5PXTsKK30KKworLSAoTlNJbnRlZ2VyKW51bWJlck9mUm93c0luVGFibGVWaWV3
OihOU1RhYmxlVmlldyAqKXRhYmxlVmlldworeworICAgIHJldHVybiBbX2NvbXBsZXRpb25zIGNv
dW50XTsKK30KKworLSAoaWQpdGFibGVWaWV3OihOU1RhYmxlVmlldyAqKXRhYmxlVmlldyBvYmpl
Y3RWYWx1ZUZvclRhYmxlQ29sdW1uOihOU1RhYmxlQ29sdW1uICopdGFibGVDb2x1bW4gcm93OihO
U0ludGVnZXIpcm93Cit7CisgICAgcmV0dXJuIFtfY29tcGxldGlvbnMgb2JqZWN0QXRJbmRleDpy
b3ddOworfQorCistICh2b2lkKXRhYmxlVmlld1NlbGVjdGlvbkRpZENoYW5nZTooTlNOb3RpZmlj
YXRpb24gKilub3RpZmljYXRpb24KK3sKKyAgICBbc2VsZiBfcmVmbGVjdFNlbGVjdGlvbl07Cit9
CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJEb2N1bWVudFByaXZh
dGVQcm90b2NvbHMpCisKKy0gKE5TUmVjdClzZWxlY3Rpb25SZWN0Cit7CisgICAgaWYgKFtzZWxm
IF9oYXNTZWxlY3Rpb25dKQorICAgICAgICByZXR1cm4gY29yZShbc2VsZiBfZnJhbWVdKS0+c2Vs
ZWN0aW9uQm91bmRzKCk7CisgICAgcmV0dXJuIE5TWmVyb1JlY3Q7Cit9CisKKy0gKE5TQXJyYXkg
KilzZWxlY3Rpb25UZXh0UmVjdHMKK3sKKyAgICBpZiAoIVtzZWxmIF9oYXNTZWxlY3Rpb25dKQor
ICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGxpc3Q7Cisg
ICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQorICAgICAgICBj
b3JlRnJhbWUtPnNlbGVjdGlvblRleHRSZWN0cyhsaXN0KTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSBsaXN0LnNpemUoKTsKKyAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW1tbTlNNdXRhYmxl
QXJyYXkgYWxsb2NdIGluaXRXaXRoQ2FwYWNpdHk6c2l6ZV0gYXV0b3JlbGVhc2VdOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIFtyZXN1bHQgYWRkT2Jq
ZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6bGlzdFtpXV1dOworICAgIAorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKy0gKE5TVmlldyAqKXNlbGVjdGlvblZpZXcKK3sKKyAgICByZXR1cm4gc2Vs
ZjsKK30KKworLSAoTlNJbWFnZSAqKXNlbGVjdGlvbkltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9P
TClmb3JjZUJsYWNrVGV4dAoreworICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKKyAgICAg
ICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkltYWdlKGZvcmNlQmxhY2tU
ZXh0KTsKKyAgICByZXR1cm4gbmlsOworfQorCistIChOU1JlY3Qpc2VsZWN0aW9uSW1hZ2VSZWN0
Cit7CisgICAgaWYgKFtzZWxmIF9oYXNTZWxlY3Rpb25dKQorICAgICAgICByZXR1cm4gY29yZShb
c2VsZiBfZnJhbWVdKS0+c2VsZWN0aW9uQm91bmRzKCk7CisgICAgcmV0dXJuIE5TWmVyb1JlY3Q7
Cit9CisKKy0gKE5TQXJyYXkgKilwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rpb24KK3sKKyAgICBp
ZiAoW3NlbGYgX2NhblNtYXJ0Q29weU9yRGVsZXRlXSkgeworICAgICAgICBOU011dGFibGVBcnJh
eSAqdHlwZXMgPSBbW1tbc2VsZiBjbGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc10gbXV0
YWJsZUNvcHldIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgW3R5cGVzIGFkZE9iamVjdDpXZWJTbWFy
dFBhc3RlUGJvYXJkVHlwZV07CisgICAgICAgIHJldHVybiB0eXBlczsKKyAgICB9IGVsc2Ugewor
ICAgICAgICByZXR1cm4gW1tzZWxmIGNsYXNzXSBfc2VsZWN0aW9uUGFzdGVib2FyZFR5cGVzXTsK
KyAgICB9Cit9CisKKy0gKHZvaWQpd3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOihO
U0FycmF5ICopdHlwZXMgdG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCit7
CisgICAgW3NlbGYgX3dyaXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczp0eXBlcyB0b1Bh
c3RlYm9hcmQ6cGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOm5pbF07Cit9CisKKy0g
KHZvaWQpc2VsZWN0QWxsCit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CisgICAgaWYgKGNvcmVGcmFtZSkKKyAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS0+c2VsZWN0QWxsKCk7Cit9CisKKy0gKHZvaWQpZGVzZWxlY3RBbGwKK3sKKyAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmNsZWFyKCk7Cit9CisK
Ky0gKE5TU3RyaW5nICopc3RyaW5nCit7CisgICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9zdHJp
bmdGb3JSYW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1dOworfQorCistIChOU0F0dHJpYnV0ZWRT
dHJpbmcgKilfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCit7
CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOworI2lmICFMT0dfRElT
QUJMRUQgICAgICAgIAorICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVu
dCgpOworI2VuZGlmICAgIAorICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIF9pbml0V2l0aERPTVJhbmdlOnJhbmdlXSBhdXRvcmVsZWFzZV07CisjaWYg
IUxPR19ESVNBQkxFRAorICAgIGRvdWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3Vy
cmVudCgpIC0gc3RhcnQ7CisgICAgTE9HKFRpbWluZywgImNyZWF0aW5nIGF0dHJpYnV0ZWQgc3Ry
aW5nIGZyb20gc2VsZWN0aW9uIHRvb2sgJWYgc2Vjb25kcy4iLCBkdXJhdGlvbik7CisjZW5kaWYK
KyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKK30KKworLSAoTlNBdHRyaWJ1dGVkU3RyaW5n
ICopYXR0cmlidXRlZFN0cmluZworeworICAgIERPTURvY3VtZW50ICpkb2N1bWVudCA9IFtbc2Vs
ZiBfZnJhbWVdIERPTURvY3VtZW50XTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBf
ZG9jdW1lbnRSYW5nZV1dOworICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgeworICAgICAgICBE
b2N1bWVudCogY29yZURvY3VtZW50ID0gY29yZShkb2N1bWVudCk7CisgICAgICAgIGF0dHJpYnV0
ZWRTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZTpSYW5nZTo6Y3JlYXRlKGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9j
dW1lbnQsIGNvcmVEb2N1bWVudC0+Y2hpbGROb2RlQ291bnQoKSkuZ2V0KCldOworICAgIH0KKyAg
ICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKK30KKworLSAoTlNTdHJpbmcgKilzZWxlY3RlZFN0
cmluZworeworICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0ZWRTdHJpbmddOworfQor
CistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmcKK3sKKyAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRl
U3RyaW5nRnJvbURPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV07CisgICAgaWYgKCFhdHRy
aWJ1dGVkU3RyaW5nKSB7CisgICAgICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pOworICAgICAgICBpZiAoY29yZUZyYW1lKSB7CisgICAgICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbTlNBdHRyaWJ1dGVk
U3RyaW5nIF93ZWJfYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZTpyYW5nZS5nZXQoKV07CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Cit9CisKKy0gKEJPT0wp
c3VwcG9ydHNUZXh0RW5jb2RpbmcKK3sKKyAgICByZXR1cm4gWUVTOworfQorCistIChCT09MKXNl
YXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09MKWZvcndhcmQgY2FzZVNl
bnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rp
b246KEJPT0wpc3RhcnRJblNlbGVjdGlvbgoreworICAgIGlmICghW3N0cmluZyBsZW5ndGhdKQor
ICAgICAgICByZXR1cm4gTk87CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmZpbmRTdHJpbmcoc3Ry
aW5nLCBmb3J3YXJkLCBjYXNlRmxhZywgd3JhcEZsYWcsIHN0YXJ0SW5TZWxlY3Rpb24pOworfQor
CitAZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRJbnRlcm5h
bFByb3RvY29scykKKworLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5TUG9pbnQp
cG9pbnQKK3sKKyAgICByZXR1cm4gW3NlbGYgZWxlbWVudEF0UG9pbnQ6cG9pbnQgYWxsb3dTaGFk
b3dDb250ZW50Ok5PXTsKK30KKworLSAoTlNEaWN0aW9uYXJ5ICopZWxlbWVudEF0UG9pbnQ6KE5T
UG9pbnQpcG9pbnQgYWxsb3dTaGFkb3dDb250ZW50OihCT09MKWFsbG93Cit7CisgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3JlRnJhbWUpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFs
bG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1bHQ6Y29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0
VGVzdFJlc3VsdEF0UG9pbnQoSW50UG9pbnQocG9pbnQpLCBhbGxvdyldIGF1dG9yZWxlYXNlXTsK
K30KKworLSAoTlNVSW50ZWdlciltYXJrQWxsTWF0Y2hlc0ZvclRleHQ6KE5TU3RyaW5nICopc3Ry
aW5nIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcgbGltaXQ6KE5TVUludGVnZXIpbGltaXQK
K3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKKyAgICBpZiAo
IWNvcmVGcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvcmVGcmFtZS0+bWFy
a0FsbE1hdGNoZXNGb3JUZXh0KHN0cmluZywgY2FzZUZsYWcsIGxpbWl0KTsKK30KKworLSAodm9p
ZClzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkOihCT09MKW5ld1ZhbHVlCit7Cisg
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFjb3Jl
RnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBjb3JlRnJhbWUtPnNldE1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQobmV3VmFsdWUpOworfQorCistIChCT09MKW1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQKK3sKKyAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+bWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZCgpOworfQorCistICh2b2lkKXVubWFya0FsbFRleHRNYXRjaGVz
Cit7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYg
KCFjb3JlRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBj
b3JlRnJhbWUtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
OworICAgIGRvY3VtZW50LT5yZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gp
OworfQorCistIChOU0FycmF5ICopcmVjdHNGb3JUZXh0TWF0Y2hlcworeworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOworICAgIGlmICghY29yZUZyYW1lKQorICAg
ICAgICByZXR1cm4gW05TQXJyYXkgYXJyYXldOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNv
cmVGcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4g
W05TQXJyYXkgYXJyYXldOworCisgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzID0gZG9jdW1lbnQt
PnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAg
IHVuc2lnbmVkIGNvdW50ID0gcmVjdHMuc2l6ZSgpOworICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1
bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6Y291bnRdOworICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyArK2luZGV4KQorICAgICAgICBbcmVz
dWx0IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhSZWN0OnJlY3RzW2luZGV4XV1dOyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitAZW5kCisKKy8vIFRoaXMgaXMgdXNlZCBieSBBcHBL
aXQgYW5kIGlzIGluY2x1ZGVkIGhlcmUgc28gdGhhdCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUgaXMg
b25seSBkZWZpbmVkIG9uY2UuCitAaW1wbGVtZW50YXRpb24gTlNVUkwgKFdlYkRhdGFVUkwpCisK
KysgKE5TVVJMICopX3dlYl91bmlxdWVXZWJEYXRhVVJMCit7CisgICAgQ0ZVVUlEUmVmIFVVSURS
ZWYgPSBDRlVVSURDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCk7CisgICAgTlNTdHJpbmcgKlVV
SURTdHJpbmcgPSAoTlNTdHJpbmcgKilDRlVVSURDcmVhdGVTdHJpbmcoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgVVVJRFJlZik7CisgICAgQ0ZSZWxlYXNlKFVVSURSZWYpOworICAgIE5TVVJMICpVUkwg
PSBbTlNVUkwgVVJMV2l0aFN0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVAOi8v
JUAiLCBXZWJEYXRhUHJvdG9jb2xTY2hlbWUsIFVVSURTdHJpbmddXTsKKyAgICBDRlJlbGVhc2Uo
VVVJRFN0cmluZyk7CisgICAgcmV0dXJuIFVSTDsKK30KKworQGVuZAorCitAaW1wbGVtZW50YXRp
b24gV2ViUmVzcG9uZGVyQ2hhaW5TaW5rCisKKy0gKGlkKWluaXRXaXRoUmVzcG9uZGVyQ2hhaW46
KE5TUmVzcG9uZGVyICopY2hhaW4KK3sKKyAgICBzZWxmID0gW3N1cGVyIGluaXRdOworICAgIF9s
YXN0UmVzcG9uZGVySW5DaGFpbiA9IGNoYWluOworICAgIHdoaWxlIChOU1Jlc3BvbmRlciAqbmV4
dCA9IFtfbGFzdFJlc3BvbmRlckluQ2hhaW4gbmV4dFJlc3BvbmRlcl0pCisgICAgICAgIF9sYXN0
UmVzcG9uZGVySW5DaGFpbiA9IG5leHQ7CisgICAgW19sYXN0UmVzcG9uZGVySW5DaGFpbiBzZXRO
ZXh0UmVzcG9uZGVyOnNlbGZdOworICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWRldGFj
aAoreworICAgIFtfbGFzdFJlc3BvbmRlckluQ2hhaW4gc2V0TmV4dFJlc3BvbmRlcjpuaWxdOwor
ICAgIF9sYXN0UmVzcG9uZGVySW5DaGFpbiA9IG5pbDsKK30KKworLSAoQk9PTClyZWNlaXZlZFVu
aGFuZGxlZENvbW1hbmQKK3sKKyAgICByZXR1cm4gX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsK
K30KKworLSAodm9pZClub1Jlc3BvbmRlckZvcjooU0VMKXNlbGVjdG9yCit7CisgICAgX3JlY2Vp
dmVkVW5oYW5kbGVkQ29tbWFuZCA9IFlFUzsKK30KKworLSAodm9pZClkb0NvbW1hbmRCeVNlbGVj
dG9yOihTRUwpc2VsZWN0b3IKK3sKKyAgICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVT
OworfQorCistIChCT09MKXRyeVRvUGVyZm9ybTooU0VMKWFjdGlvbiB3aXRoOihpZClvYmplY3QK
K3sKKyAgICBfcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kID0gWUVTOworICAgIHJldHVybiBZRVM7
Cit9CisKK0BlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3L1dlYlRleHRDb21w
bGV0aW9uQ29udHJvbGxlci5tbQkocmV2aXNpb24gNDQyOTIpCisrKyBXZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNSBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMDYs
IDIwMDcgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDU4ODAgKzI2LDM1IEBACiAgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpbXBvcnQgIldlYkhUTUxWaWV3LmgiCisjaW1wb3J0ICJXZWJUZXh0Q29tcGxldGlv
bkNvbnRyb2xsZXIuaCIKIAotI2ltcG9ydCAiRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbkludGVybmFs
LmgiCi0jaW1wb3J0ICJET01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRP
TURvY3VtZW50SW50ZXJuYWwuaCIKLSNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgogI2ltcG9y
dCAiRE9NUmFuZ2VJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViQXJjaGl2ZS5oIgotI2ltcG9ydCAi
V2ViQ2xpcFZpZXcuaCIKLSNpbXBvcnQgIldlYkRPTU9wZXJhdGlvbnNJbnRlcm5hbC5oIgotI2lt
cG9ydCAiV2ViRGF0YVNvdXJjZUludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJEZWZhdWx0VUlEZWxl
Z2F0ZS5oIgotI2ltcG9ydCAiV2ViRG9jdW1lbnRJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViRHlu
YW1pY1Njcm9sbEJhcnNWaWV3LmgiCi0jaW1wb3J0ICJXZWJFZGl0aW5nRGVsZWdhdGUuaCIKLSNp
bXBvcnQgIldlYkVsZW1lbnREaWN0aW9uYXJ5LmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFs
LmgiCi0jaW1wb3J0ICJXZWJGcmFtZVByaXZhdGUuaCIKLSNpbXBvcnQgIldlYkZyYW1lVmlld0lu
dGVybmFsLmgiCi0jaW1wb3J0ICJXZWJIVE1MUmVwcmVzZW50YXRpb25Qcml2YXRlLmgiCiAjaW1w
b3J0ICJXZWJIVE1MVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJLaXRMb2dnaW5nLmgiCi0j
aW1wb3J0ICJXZWJLaXROU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViS2l0VmVyc2lvbkNo
ZWNrcy5oIgotI2ltcG9ydCAiV2ViTG9jYWxpemFibGVTdHJpbmdzLmgiCi0jaW1wb3J0ICJXZWJO
U0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TRXZlbnRFeHRyYXMuaCIK
LSNpbXBvcnQgIldlYk5TRmlsZU1hbmFnZXJFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TSW1hZ2VF
eHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1Bh
c3RlYm9hcmRFeHRyYXMuaCIKLSNpbXBvcnQgIldlYk5TUHJpbnRPcGVyYXRpb25FeHRyYXMuaCIK
LSNpbXBvcnQgIldlYk5TVVJMRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJOU1ZpZXdFeHRyYXMuaCIK
LSNpbXBvcnQgIldlYk5ldHNjYXBlUGx1Z2luVmlldy5oIgotI2ltcG9ydCAiV2ViTm9kZUhpZ2hs
aWdodC5oIgotI2ltcG9ydCAiV2ViUGx1Z2luQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViUHJl
ZmVyZW5jZXMuaCIKLSNpbXBvcnQgIldlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIgotI2ltcG9ydCAi
V2ViUmVzb3VyY2VQcml2YXRlLmgiCi0jaW1wb3J0ICJXZWJTdHJpbmdUcnVuY2F0b3IuaCIKLSNp
bXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYlVJRGVsZWdhdGVQcml2YXRl
LmgiCi0jaW1wb3J0ICJXZWJWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgPEFwcEtpdC9OU0FjY2Vz
c2liaWxpdHkuaD4KLSNpbXBvcnQgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oPgot
I2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRJbWFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9DYWNoZWRS
ZXNvdXJjZUNsaWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgotI2ltcG9ydCA8
V2ViQ29yZS9Db250ZXh0TWVudS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RG9jdW1lbnRGcmFnbWVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9EcmFnQ29udHJvbGxlci5oPgot
I2ltcG9ydCA8V2ViQ29yZS9FZGl0b3IuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRWRpdG9yRGVsZXRl
QWN0aW9uLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0VsZW1lbnQuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
RXZlbnRIYW5kbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0V4Y2VwdGlvbkhhbmRsZXJzLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgotI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRy
b2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0hUTUxOYW1lcy5oPgotI2ltcG9ydCA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0ltYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvTGVnYWN5V2ViQXJjaGl2ZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9N
SU1FVHlwZVJlZ2lzdHJ5Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3Jt
TW91c2VFdmVudC5oPgotI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5o
PgotI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVGb250RGF0YS5oPgotI2ltcG9ydCA8V2ViQ29yZS9U
ZXh0Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL1dlYkNvcmVUZXh0UmVuZGVyZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvbWFya3VwLmg+
Ci0jaW1wb3J0IDxXZWJLaXQvRE9NLmg+Ci0jaW1wb3J0IDxXZWJLaXQvRE9NRXh0ZW5zaW9ucy5o
PgotI2ltcG9ydCA8V2ViS2l0L0RPTVByaXZhdGUuaD4KLSNpbXBvcnQgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgotI2ltcG9ydCA8ZGxmY24uaD4KLSNpbXBvcnQgPGxpbWl0cz4KLSNpbXBvcnQg
PHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jZW5kaWYKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotdXNp
bmcgbmFtZXNwYWNlIFdURjsKLQotQGludGVyZmFjZSBOU1dpbmRvdyAoQm9yZGVyVmlld0FjY2Vz
cykKLS0gKE5TVmlldyopX3dlYl9ib3JkZXJWaWV3OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24g
TlNXaW5kb3cgKEJvcmRlclZpZXdBY2Nlc3MpCi0tIChOU1ZpZXcqKV93ZWJfYm9yZGVyVmlldwot
ewotICAgIHJldHVybiBfYm9yZGVyVmlldzsKLX0KLUBlbmQKLQotQGludGVyZmFjZSBXZWJSZXNw
b25kZXJDaGFpblNpbmsgOiBOU1Jlc3BvbmRlciB7Ci0gICAgTlNSZXNwb25kZXIqIF9sYXN0UmVz
cG9uZGVySW5DaGFpbjsKLSAgICBCT09MIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQ7Ci19Ci0t
IChpZClpbml0V2l0aFJlc3BvbmRlckNoYWluOihOU1Jlc3BvbmRlciAqKWNoYWluOwotLSAodm9p
ZClkZXRhY2g7Ci0tIChCT09MKXJlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZDsKLUBlbmQKLQotc3Rh
dGljIElNUCBvbGRTZXRDdXJzb3JJTVAgPSBOVUxMOwotCi0jaWZkZWYgQlVJTERJTkdfT05fVElH
RVIKLQotc3RhdGljIElNUCBvbGRSZXNldEN1cnNvclJlY3RzSU1QID0gTlVMTDsKLXN0YXRpYyBC
T09MIGNhblNldEN1cnNvciA9IFlFUzsKLQotc3RhdGljIHZvaWQgcmVzZXRDdXJzb3JSZWN0cyhO
U1dpbmRvdyogc2VsZiwgU0VMIGNtZCkKLXsKLSAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYgbW91
c2VMb2NhdGlvbk91dHNpZGVPZkV2ZW50U3RyZWFtXTsKLSAgICBOU1ZpZXcqIHZpZXcgPSBbW3Nl
bGYgX3dlYl9ib3JkZXJWaWV3XSBoaXRUZXN0OnBvaW50XTsKLSAgICBpZiAoW3ZpZXcgaXNLaW5k
T2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkgewotICAgICAgICBXZWJIVE1MVmlldyAqaHRt
bFZpZXcgPSAoV2ViSFRNTFZpZXcqKXZpZXc7Ci0gICAgICAgIE5TUG9pbnQgbG9jYWxQb2ludCA9
IFtodG1sVmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXTsKLSAgICAgICAgTlNE
aWN0aW9uYXJ5ICpkaWN0ID0gW2h0bWxWaWV3IGVsZW1lbnRBdFBvaW50OmxvY2FsUG9pbnQgYWxs
b3dTaGFkb3dDb250ZW50Ok5PXTsKLSAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtkaWN0
IG9iamVjdEZvcktleTpXZWJFbGVtZW50RE9NTm9kZUtleV07Ci0gICAgICAgIGlmICghW2VsZW1l
bnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTEFwcGxldEVsZW1lbnQgY2xhc3NdXSAmJiAhW2VsZW1l
bnQgaXNLaW5kT2ZDbGFzczpbRE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdXSAmJgotICAgICAg
ICAgICAgIVtlbGVtZW50IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxFbWJlZEVsZW1lbnQgY2xhc3Nd
XSkKLSAgICAgICAgICAgIGNhblNldEN1cnNvciA9IE5POwotICAgIH0KLSAgICBvbGRSZXNldEN1
cnNvclJlY3RzSU1QKHNlbGYsIGNtZCk7Ci0gICAgY2FuU2V0Q3Vyc29yID0gWUVTOwotfQotCi1z
dGF0aWMgdm9pZCBzZXRDdXJzb3IoTlNDdXJzb3IqIHNlbGYsIFNFTCBjbWQpCi17Ci0gICAgaWYg
KGNhblNldEN1cnNvcikKLSAgICAgICAgb2xkU2V0Q3Vyc29ySU1QKHNlbGYsIGNtZCk7Ci19Ci0K
LSNlbHNlCi0KLXN0YXRpYyB2b2lkIHNldEN1cnNvcihOU1dpbmRvdyogc2VsZiwgU0VMIGNtZCwg
TlNQb2ludCBwb2ludCkKLXsKLSAgICBOU1ZpZXcqIHZpZXcgPSBbW3NlbGYgX3dlYl9ib3JkZXJW
aWV3XSBoaXRUZXN0OnBvaW50XTsKLSAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRN
TFZpZXcgY2xhc3NdXSkgewotICAgICAgICBXZWJIVE1MVmlldyAqaHRtbFZpZXcgPSAoV2ViSFRN
TFZpZXcqKXZpZXc7Ci0gICAgICAgIE5TUG9pbnQgbG9jYWxQb2ludCA9IFtodG1sVmlldyBjb252
ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXTsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICpkaWN0
ID0gW2h0bWxWaWV3IGVsZW1lbnRBdFBvaW50OmxvY2FsUG9pbnQgYWxsb3dTaGFkb3dDb250ZW50
Ok5PXTsKLSAgICAgICAgRE9NRWxlbWVudCAqZWxlbWVudCA9IFtkaWN0IG9iamVjdEZvcktleTpX
ZWJFbGVtZW50RE9NTm9kZUtleV07Ci0gICAgICAgIGlmICghW2VsZW1lbnQgaXNLaW5kT2ZDbGFz
czpbRE9NSFRNTEFwcGxldEVsZW1lbnQgY2xhc3NdXSAmJiAhW2VsZW1lbnQgaXNLaW5kT2ZDbGFz
czpbRE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdXSAmJgotICAgICAgICAgICAgIVtlbGVtZW50
IGlzS2luZE9mQ2xhc3M6W0RPTUhUTUxFbWJlZEVsZW1lbnQgY2xhc3NdXSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgb2xkU2V0Q3Vyc29ySU1QKHNlbGYsIGNtZCwgcG9pbnQpOwot
fQotCi0jZW5kaWYKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotQGludGVy
ZmFjZSBXZWJMYXllckhvc3RpbmdWaWV3IDogTlNWaWV3Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlv
biBXZWJMYXllckhvc3RpbmdWaWV3Ci0KLS8vIEVtcHR5IE5TVmlld3MgaW50ZXJjZXB0IHJpZ2h0
TW91c2VEb3duOiB0byBkbyBjb250ZXh0IG1lbnUgaGFuZGxpbmcsIGJ1dCB3ZSBuZWVkIHRoZSBX
ZWJMYXllckhvc3RpbmdWaWV3IHRvCi0vLyBsZXQgcmlnaHQgbW91c2UgY2xpY2tzIHRocm91Z2gu
Ci0tICh2b2lkKXJpZ2h0TW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBbW3NlbGYg
bmV4dFJlc3BvbmRlcl0gcGVyZm9ybVNlbGVjdG9yOl9jbWQgd2l0aE9iamVjdDpldmVudF07Ci19
Ci0KLUBlbmQKLQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQotZXh0
ZXJuICJDIiB7Ci0KLS8vIE5lZWQgdG8gZGVjbGFyZSB0aGVzZSBhdHRyaWJ1dGUgbmFtZXMgYmVj
YXVzZSBBcHBLaXQgZXhwb3J0cyB0aGVtIGJ1dCBkb2VzIG5vdCBtYWtlIHRoZW0gYXZhaWxhYmxl
IGluIEFQSSBvciBTUEkgaGVhZGVycy4KLQotZXh0ZXJuIE5TU3RyaW5nICpOU01hcmtlZENsYXVz
ZVNlZ21lbnRBdHRyaWJ1dGVOYW1lOwotZXh0ZXJuIE5TU3RyaW5nICpOU1RleHRJbnB1dFJlcGxh
Y2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lOwotCi19Ci0KLUBpbnRlcmZhY2UgTlNWaWV3IChXZWJO
U1ZpZXdEZXRhaWxzKQotLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheVJlY3RJZk5lZWRlZElnbm9y
aW5nT3BhY2l0eTooTlNSZWN0KXJlY3QgaXNWaXNpYmxlUmVjdDooQk9PTClpc1Zpc2libGVSZWN0
IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzooTlNWaWV3ICopdmlzaWJsZVZpZXcgdG9wVmlldzoo
Qk9PTCl0b3BWaWV3OwotLSAodm9pZClfcmVjdXJzaXZlRGlzcGxheUFsbERpcnR5V2l0aExvY2tG
b2N1czooQk9PTCluZWVkc0xvY2tGb2N1cyB2aXNSZWN0OihOU1JlY3QpdmlzUmVjdDsKLS0gKHZv
aWQpX3JlY3Vyc2l2ZTooQk9PTClyZWN1cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OihO
U1JlY3QpZGlzcGxheVJlY3QgaW5Db250ZXh0OihOU0dyYXBoaWNzQ29udGV4dCAqKWNvbnRleHQg
dG9wVmlldzooQk9PTCl0b3BWaWV3OwotLSAoTlNSZWN0KV9kaXJ0eVJlY3Q7Ci0tICh2b2lkKV9z
ZXREcmF3c093bkRlc2NlbmRhbnRzOihCT09MKWRyYXdzT3duRGVzY2VuZGFudHM7Ci0tICh2b2lk
KV9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnM7Ci0tICh2b2lkKV93aW5kb3dD
aGFuZ2VkS2V5U3RhdGU7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNBcHBsaWNhdGlvbiAoV2ViTlNB
cHBsaWNhdGlvbkRldGFpbHMpCi0tICh2b2lkKXNwZWFrU3RyaW5nOihOU1N0cmluZyAqKXN0cmlu
ZzsKLUBlbmQKLQotQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQotLSAo
aWQpX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmc7Ci0tICh2b2lkKV9zZXRGb3JjZUFj
dGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVk
U3RyaW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQotLSAoaWQpX2luaXRXaXRoRE9N
UmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7Ci0tIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3Vt
ZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01Eb2N1bWVudCAqKWRvY3Vt
ZW50IGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdCBzdWJyZXNvdXJjZXM6
KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TU3BlbGxDaGVj
a2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFpbHMpCi0tICh2b2lkKWxlYXJuV29yZDooTlNTdHJp
bmcgKil3b3JkOwotQGVuZAotCi0vLyBCeSBpbWFnaW5nIHRvIGEgd2lkdGggYSBsaXR0bGUgd2lk
ZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHBpeGVscywKLS8vIHRoaW4gcGFnZXMgd2lsbCBiZSBzY2Fs
ZWQgZG93biBhIGxpdHRsZSwgbWF0Y2hpbmcgdGhlIHdheSB0aGV5Ci0vLyBwcmludCBpbiBJRSBh
bmQgQ2FtaW5vLiBUaGlzIGxldHMgdGhlbSB1c2UgZmV3ZXIgc2hlZXRzIHRoYW4gdGhleQotLy8g
d291bGQgb3RoZXJ3aXNlLCB3aGljaCBpcyBwcmVzdW1hYmx5IHdoeSBvdGhlciBicm93c2VycyBk
byB0aGlzLgotLy8gV2lkZSBwYWdlcyB3aWxsIGJlIHNjYWxlZCBkb3duIG1vcmUgdGhhbiB0aGlz
LgotI2RlZmluZSBQcmludGluZ01pbmltdW1TaHJpbmtGYWN0b3IgICAgIDEuMjVmCi0KLS8vIFRo
aXMgbnVtYmVyIGRldGVybWluZXMgaG93IHNtYWxsIHdlIGFyZSB3aWxsaW5nIHRvIHJlZHVjZSB0
aGUgcGFnZSBjb250ZW50Ci0vLyBpbiBvcmRlciB0byBhY2NvbW1vZGF0ZSB0aGUgd2lkZXN0IGxp
bmUuIElmIHRoZSBwYWdlIHdvdWxkIGhhdmUgdG8gYmUKLS8vIHJlZHVjZWQgc21hbGxlciB0byBt
YWtlIHRoZSB3aWRlc3QgbGluZSBmaXQsIHdlIGp1c3QgY2xpcCBpbnN0ZWFkICh0aGlzCi0vLyBi
ZWhhdmlvciBtYXRjaGVzIE1hY0lFIGFuZCBNb3ppbGxhLCBhdCBsZWFzdCkKLSNkZWZpbmUgUHJp
bnRpbmdNYXhpbXVtU2hyaW5rRmFjdG9yICAgICAyLjBmCi0KLS8vIFRoaXMgbnVtYmVyIGRldGVy
bWluZXMgaG93IHNob3J0IHRoZSBsYXN0IHByaW50ZWQgcGFnZSBvZiBhIG11bHRpLXBhZ2UgcHJp
bnQgc2Vzc2lvbgotLy8gY2FuIGJlIGJlZm9yZSB3ZSB0cnkgdG8gc2hyaW5rIHRoZSBzY2FsZSBp
biBvcmRlciB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBwYWdlcywgYW5kCi0vLyB0aHVzIGVsaW1p
bmF0ZSB0aGUgb3JwaGFuLgotI2RlZmluZSBMYXN0UHJpbnRlZFBhZ2VPcnBoYW5SYXRpbyAgICAg
IDAuMWYKLQotLy8gVGhpcyBudW1iZXIgZGV0ZXJtaW5lcyB0aGUgYW1vdW50IHRoZSBzY2FsZSBm
YWN0b3IgaXMgYWRqdXN0ZWQgdG8gdHJ5IHRvIGVsaW1pbmF0ZSBvcnBoYW5zLgotLy8gSXQgaGFz
IG5vIGRpcmVjdCBtYXRoZW1hdGljYWwgcmVsYXRpb25zaGlwIHRvIExhc3RQcmludGVkUGFnZU9y
cGhhblJhdGlvLCBkdWUgdG8gdmFyaWFibGUKLS8vIG51bWJlcnMgb2YgcGFnZXMsIGxvZ2ljIHRv
IGF2b2lkIGJyZWFraW5nIGVsZW1lbnRzLCBhbmQgQ1NTLXN1cHBsaWVkIGhhcmQgcGFnZSBicmVh
a3MuCi0jZGVmaW5lIFByaW50aW5nT3JwaGFuU2hyaW5rQWRqdXN0bWVudCAgMS4xZgotCi0jZGVm
aW5lIEFVVE9TQ1JPTExfSU5URVJWQUwgICAgICAgICAgICAgMC4xZgotCi0jZGVmaW5lIERSQUdf
TEFCRUxfQk9SREVSX1ggICAgICAgICAgICAgNC4wZgotLy9LZWVwIGJvcmRlcl95IGluIHN5bmNo
IHdpdGggRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQKLSNkZWZpbmUgRFJBR19M
QUJFTF9CT1JERVJfWSAgICAgICAgICAgICAyLjBmCi0jZGVmaW5lIERSQUdfTEFCRUxfUkFESVVT
ICAgICAgICAgICAgICAgNS4wZgotI2RlZmluZSBEUkFHX0xBQkVMX0JPUkRFUl9ZX09GRlNFVCAg
ICAgICAgICAgICAgMi4wZgotCi0jZGVmaW5lIE1JTl9EUkFHX0xBQkVMX1dJRFRIX0JFRk9SRV9D
TElQICAgICAgICAxMjAuMGYKLSNkZWZpbmUgTUFYX0RSQUdfTEFCRUxfV0lEVEggICAgICAgICAg
ICAgICAgICAgIDMyMC4wZgotCi0jZGVmaW5lIERSQUdfTElOS19MQUJFTF9GT05UX1NJWkUgICAx
MS4wZgotI2RlZmluZSBEUkFHX0xJTktfVVJMX0ZPTlRfU0laRSAgIDEwLjBmCi0KLS8vIEFueSBu
b24temVybyB2YWx1ZSB3aWxsIGRvLCBidXQgdXNpbmcgc29tZXRoaW5nIHJlY29nbml6YWJsZSBt
aWdodCBoZWxwIHVzIGRlYnVnIHNvbWUgZGF5LgotI2RlZmluZSBUUkFDS0lOR19SRUNUX1RBRyAw
eEJBREZBQ0UKLQotLy8gRklYTUU6IFRoaXMgY29uc3RhbnQgaXMgY29waWVkIGZyb20gQXBwS2l0
J3MgX05YU21hcnRQYXN0ZSBjb25zdGFudC4KLSNkZWZpbmUgV2ViU21hcnRQYXN0ZVBib2FyZFR5
cGUgQCJOZVhUIHNtYXJ0IHBhc3RlIHBhc3RlYm9hcmQgdHlwZSIKLQotI2RlZmluZSBTVEFOREFS
RF9XRUlHSFQgNQotI2RlZmluZSBNSU5fQk9MRF9XRUlHSFQgNwotI2RlZmluZSBTVEFOREFSRF9C
T0xEX1dFSUdIVCA5Ci0KLS8vIEZha2UgVVJMIHNjaGVtZS4KLSNkZWZpbmUgV2ViRGF0YVByb3Rv
Y29sU2NoZW1lIEAid2Via2l0LWZha2UtdXJsIgotCi0vLyA8cmRhcjovL3Byb2JsZW0vNDk4NTUy
ND4gUmVmZXJlbmNlcyB0byBXZWJDb3JlU2Nyb2xsVmlldyBhcyBhIHN1YnZpZXcgb2YgYSBXZWJI
VE1MVmlldyBtYXkgYmUgcHJlc2VudAotLy8gaW4gc29tZSBOSUIgZmlsZXMsIHNvIE5TVW5hcmNo
aXZlciBtdXN0IGJlIHN0aWxsIGFibGUgdG8gbG9vayB1cCB0aGlzIG5vdy11bnVzZWQgY2xhc3Mu
Ci1AaW50ZXJmYWNlIFdlYkNvcmVTY3JvbGxWaWV3IDogTlNTY3JvbGxWaWV3Ci1AZW5kCi0KLUBp
bXBsZW1lbnRhdGlvbiBXZWJDb3JlU2Nyb2xsVmlldwotQGVuZAotCi0vLyBpZiBZRVMsIGRvIHRo
ZSBzdGFuZGFyZCBOU1ZpZXcgaGl0IHRlc3QgKHdoaWNoIGNhbid0IGdpdmUgdGhlIHJpZ2h0IHJl
c3VsdCB3aGVuIEhUTUwgb3ZlcmxhcHMgYSB2aWV3KQotc3RhdGljIEJPT0wgZm9yY2VOU1ZpZXdI
aXRUZXN0OwotCi0vLyBpZiBZRVMsIGRvIHRoZSAidG9wIFdlYkhUTUxWaWV3IiBoaXQgdGVzdCAo
d2hpY2ggd2UnZCBsaWtlIHRvIGRvIGFsbCB0aGUgdGltZSBidXQgY2FuJ3QgYmVjYXVzZSBvZiBK
YXZhIHJlcXVpcmVtZW50cyBbc2VlIGJ1ZyA0MzQ5NzIxXSkKLXN0YXRpYyBCT09MIGZvcmNlV2Vi
SFRNTFZpZXdIaXRUZXN0OwotCi1zdGF0aWMgV2ViSFRNTFZpZXcgKmxhc3RIaXRWaWV3OwotCi0v
LyBXZSBuZWVkIHRoaXMgdG8gYmUgYWJsZSB0byBzYWZlbHkgcmVmZXJlbmNlIHRoZSBDYWNoZWRJ
bWFnZSBmb3IgdGhlIHByb21pc2VkIGRyYWcgZGF0YQotc3RhdGljIENhY2hlZFJlc291cmNlQ2xp
ZW50KiBwcm9taXNlZERhdGFDbGllbnQoKQotewotICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudCogc3RhdGljQ2FjaGVkUmVzb3VyY2VDbGllbnQgPSBuZXcgQ2FjaGVkUmVzb3VyY2VDbGll
bnQ7Ci0gICAgcmV0dXJuIHN0YXRpY0NhY2hlZFJlc291cmNlQ2xpZW50OwotfQotCi1AaW50ZXJm
YWNlIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLS0gKEJPT0wpX2ltYWdl
RXhpc3RzQXRQYXRoczooTlNBcnJheSAqKXBhdGhzOwotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAq
KV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9h
cmQgaW5Db250ZXh0OihET01SYW5nZSAqKWNvbnRleHQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxs
b3dQbGFpblRleHQ7Ci0tIChOU1N0cmluZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQ
YXN0ZWJvYXJkICopcGFzdGVib2FyZDsKLS0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRl
eHQ7Ci0tICh2b2lkKV9wYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQ7Ci0tICh2b2lkKV9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRp
dGlvbmFsbHk7Ci0tICh2b2lkKV9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnM7Ci0tICh2b2lkKV9y
ZW1vdmVXaW5kb3dPYnNlcnZlcnM7Ci0tIChCT09MKV9zaG91bGRJbnNlcnRGcmFnbWVudDooRE9N
RG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdlOihET01SYW5nZSAq
KXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFjdGlvbjsKLS0gKEJPT0wp
X3Nob3VsZEluc2VydFRleHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9N
UmFuZ2UgKilyYW5nZSBnaXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247Ci0t
IChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBn
aXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb247Ci0tIChmbG9hdClfY2FsY3Vs
YXRlUHJpbnRIZWlnaHQ7Ci0tIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlOwotLSAoQk9PTClf
c2hvdWxkRGVsZXRlUmFuZ2U6KERPTVJhbmdlICopcmFuZ2U7Ci0tIChOU1ZpZXcgKilfaGl0Vmll
d0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQ7Ci0tICh2b2lkKV93cml0ZVNlbGVjdGlvbldpdGhQ
YXN0ZWJvYXJkVHlwZXM6KE5TQXJyYXkgKil0eXBlcyB0b1Bhc3RlYm9hcmQ6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQgY2FjaGVkQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5n
ICopYXR0cmlidXRlZFN0cmluZzsKLS0gKERPTVJhbmdlICopX2RvY3VtZW50UmFuZ2U7Ci0tICh2
b2lkKV9zZXRNb3VzZURvd25FdmVudDooTlNFdmVudCAqKWV2ZW50OwotLSAoV2ViSFRNTFZpZXcg
KilfdG9wSFRNTFZpZXc7Ci0tIChCT09MKV9pc1RvcEhUTUxWaWV3OwotLSAodm9pZClfd2ViX3Nl
dFByaW50aW5nTW9kZVJlY3Vyc2l2ZTsKLS0gKHZvaWQpX3dlYl9zZXRQcmludGluZ01vZGVSZWN1
cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZTsKLS0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJl
Y3Vyc2l2ZTsKLUBlbmQKLQotI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotCi1AaW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJI
VE1MVmlld1RleHRDaGVja2luZ0ludGVybmFsKQotLSAodm9pZClvcmRlckZyb250U3Vic3RpdHV0
aW9uc1BhbmVsOihpZClzZW5kZXI7Ci0tIChCT09MKXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDsK
LS0gKHZvaWQpc2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOihCT09MKWZsYWc7Ci0tICh2b2lk
KXRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlOihpZClzZW5kZXI7Ci0tIChCT09MKWlzQXV0b21hdGlj
UXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOwotLSAodm9pZClzZXRBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljUXVvdGVT
dWJzdGl0dXRpb246KGlkKXNlbmRlcjsKLS0gKEJPT0wpaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9u
RW5hYmxlZDsKLS0gKHZvaWQpc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6KEJPT0wp
ZmxhZzsKLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbjooaWQpc2VuZGVyOwot
LSAoQk9PTClpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOwotLSAodm9pZClzZXRB
dXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dn
bGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOihpZClzZW5kZXI7Ci0tIChCT09MKWlzQXV0b21h
dGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDsKLS0gKHZvaWQpc2V0QXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50RW5hYmxlZDooQk9PTClmbGFnOwotLSAodm9pZCl0b2dnbGVBdXRvbWF0aWNUZXh0UmVw
bGFjZW1lbnQ6KGlkKXNlbmRlcjsKLS0gKEJPT0wpaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rp
b25FbmFibGVkOwotLSAodm9pZClzZXRBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVk
OihCT09MKWZsYWc7Ci0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjoo
aWQpc2VuZGVyOwotQGVuZAotCi0jZW5kaWYKLQotQGludGVyZmFjZSBXZWJIVE1MVmlldyAoV2Vi
Rm9yd2FyZERlY2xhcmF0aW9uKSAvLyBGSVhNRTogUHV0IHRoaXMgaW4gYSBub3JtYWwgY2F0ZWdv
cnkgYW5kIHN0b3AgZG9pbmcgdGhlIGZvcndhcmQgZGVjbGFyYXRpb24gdHJpY2suCi0tICh2b2lk
KV9zZXRQcmludGluZzooQk9PTClwcmludGluZyBtaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5Q
YWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdFZpZXdT
aXplOihCT09MKWFkanVzdFZpZXdTaXplOwotQGVuZAotCi1AY2xhc3MgTlNUZXh0SW5wdXRDb250
ZXh0OwotQGludGVyZmFjZSBOU1Jlc3BvbmRlciAoQXBwS2l0RGV0YWlscykKLS0gKE5TVGV4dElu
cHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsKLUBlbmQKLQotQGludGVyZmFjZSBOU09iamVjdCAo
TlNUZXh0SW5wdXRDb250ZXh0RGV0YWlscykKLS0gKEJPT0wpd2FudHNUb0hhbmRsZU1vdXNlRXZl
bnRzOwotLSAoQk9PTCloYW5kbGVNb3VzZUV2ZW50OihOU0V2ZW50ICopZXZlbnQ7Ci1AZW5kCi0K
LUBpbnRlcmZhY2UgV2ViSFRNTFZpZXcgKFdlYk5TVGV4dElucHV0U3VwcG9ydCkgPE5TVGV4dElu
cHV0PgotLSAodm9pZClfdXBkYXRlU2VsZWN0aW9uRm9ySW5wdXRNYW5hZ2VyOwotQGVuZAotCi1A
aW50ZXJmYWNlIFdlYkhUTUxWaWV3IChXZWJFZGl0aW5nU3R5bGVTdXBwb3J0KQotLSAoRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqKV9lbXB0eVN0eWxlOwotLSAoTlNTdHJpbmcgKilfY29sb3JBc1N0
cmluZzooTlNDb2xvciAqKWNvbG9yOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TVmlldyAoV2ViSFRN
TFZpZXdGaWxlSW50ZXJuYWwpCi0tICh2b2lkKV93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3
c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICopIGFycmF5OwotQGVuZAotCi1AaW50ZXJmYWNlIE5T
TXV0YWJsZURpY3Rpb25hcnkgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotLSAodm9pZClfd2Vi
X3NldE9iamVjdElmTm90TmlsOihpZClvYmplY3QgZm9yS2V5OihpZClrZXk7Ci1AZW5kCi0KLS8v
IEhhbmRsZXMgdGhlIGNvbXBsZXRlOiB0ZXh0IGNvbW1hbmQKLUBpbnRlcmZhY2UgV2ViVGV4dENv
bXBsZXRlQ29udHJvbGxlciA6IE5TT2JqZWN0IDxOU1RhYmxlVmlld0RlbGVnYXRlLCBOU1RhYmxl
Vmlld0RhdGFTb3VyY2U+IHsKLUBwcml2YXRlCi0gICAgV2ViSFRNTFZpZXcgKl92aWV3OwotICAg
IE5TV2luZG93ICpfcG9wdXBXaW5kb3c7Ci0gICAgTlNUYWJsZVZpZXcgKl90YWJsZVZpZXc7Ci0g
ICAgTlNBcnJheSAqX2NvbXBsZXRpb25zOwotICAgIE5TU3RyaW5nICpfb3JpZ2luYWxTdHJpbmc7
Ci0gICAgaW50IHByZWZpeExlbmd0aDsKLX0KLS0gKGlkKWluaXRXaXRoSFRNTFZpZXc6KFdlYkhU
TUxWaWV3ICopdmlldzsKLS0gKHZvaWQpZG9Db21wbGV0aW9uOwotLSAodm9pZCllbmRSZXZlcnRp
bmdDaGFuZ2U6KEJPT0wpcmV2ZXJ0Q2hhbmdlIG1vdmVMZWZ0OihCT09MKWdvTGVmdDsKLS0gKEJP
T0wpcG9wdXBXaW5kb3dJc09wZW47Ci0tIChCT09MKWZpbHRlcktleURvd246KE5TRXZlbnQgKill
dmVudDsKLS0gKHZvaWQpX3JlZmxlY3RTZWxlY3Rpb247Ci1AZW5kCi0KLXN0cnVjdCBXZWJIVE1M
Vmlld0ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgewotICAgIEtleWJvYXJkRXZlbnQqIGV2
ZW50OwotICAgIEJPT0wgZXZlbnRXYXNIYW5kbGVkOwotICAgIEJPT0wgc2hvdWxkU2F2ZUNvbW1h
bmQ7Ci0gICAgLy8gVGhlIElucHV0IE1ldGhvZCBtYXkgY29uc3VtZSBhbiBldmVudCBhbmQgbm90
IHRlbGwgdXMsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3ZSBzaG91bGQgbm90IGJ1YmJsZSB0aGUg
ZXZlbnQgdXAgdGhlIERPTQotICAgIEJPT0wgY29uc3VtZWRCeUlNOwotfTsKLQotQGludGVyZmFj
ZSBXZWJIVE1MVmlld1ByaXZhdGUgOiBOU09iamVjdCB7Ci1AcHVibGljCi0gICAgQk9PTCBjbG9z
ZWQ7Ci0gICAgQk9PTCBuZWVkc1RvQXBwbHlTdHlsZXM7Ci0gICAgQk9PTCBpZ25vcmluZ01vdXNl
RHJhZ2dlZEV2ZW50czsKLSAgICBCT09MIHByaW50aW5nOwotICAgIEJPT0wgYXZvaWRpbmdQcmlu
dE9ycGhhbjsKLSAgICBCT09MIG9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zOwotICAg
IEJPT0wgb2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9uczsKLSAgICBCT09MIG9ic2Vydmlu
Z1dpbmRvd05vdGlmaWNhdGlvbnM7Ci0gICAgQk9PTCByZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsK
LSAgICAKLSAgICBpZCBzYXZlZFN1YnZpZXdzOwotICAgIEJPT0wgc3Vidmlld3NTZXRBc2lkZTsK
LSAgICAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgTlNWaWV3ICpsYXll
ckhvc3RpbmdWaWV3OwotI2VuZGlmCi0KLSAgICBOU0V2ZW50ICptb3VzZURvd25FdmVudDsgLy8g
S2VwdCBhZnRlciBoYW5kbGluZyB0aGUgZXZlbnQuCi0gICAgQk9PTCBoYW5kbGluZ01vdXNlRG93
bkV2ZW50OwotICAgIE5TRXZlbnQgKmtleURvd25FdmVudDsgLy8gS2VwdCBhZnRlciBoYW5kbGlu
ZyB0aGUgZXZlbnQuCi0KLSAgICAvLyBBIFdlYkhUTUxWaWV3IGhhcyBhIHNpbmdsZSBpbnB1dCBj
b250ZXh0LCBidXQgd2UgcmV0dXJuIG5pbCB3aGVuIGluIG5vbi1lZGl0YWJsZSBjb250ZW50IHRv
IGF2b2lkIG1ha2luZyBpbnB1dCBtZXRob2RzIGRvIHRoZWlyIHdvcmsuCi0gICAgLy8gVGhpcyBz
dGF0ZSBpcyBzYXZlZCBlYWNoIHRpbWUgc2VsZWN0aW9uIGNoYW5nZXMsIGJlY2F1c2UgY29tcHV0
aW5nIGl0IGNhdXNlcyBzdHlsZSByZWNhbGMsIHdoaWNoIGlzIG5vdCBhbHdheXMgc2FmZSB0byBk
by4KLSAgICBCT09MIGV4cG9zZUlucHV0Q29udGV4dDsKLQotICAgIE5TUG9pbnQgbGFzdFNjcm9s
bFBvc2l0aW9uOwotCi0gICAgV2ViUGx1Z2luQ29udHJvbGxlciAqcGx1Z2luQ29udHJvbGxlcjsK
LSAgICAKLSAgICBOU1N0cmluZyAqdG9vbFRpcDsKLSAgICBOU1Rvb2xUaXBUYWcgbGFzdFRvb2xU
aXBUYWc7Ci0gICAgaWQgdHJhY2tpbmdSZWN0T3duZXI7Ci0gICAgdm9pZCAqdHJhY2tpbmdSZWN0
VXNlckRhdGE7Ci0gICAgCi0gICAgTlNUaW1lciAqYXV0b3Njcm9sbFRpbWVyOwotICAgIE5TRXZl
bnQgKmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQ7Ci0gICAgCi0gICAgTlNBcnJheSAqcGFnZVJlY3Rz
OwotCi0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqaGlnaGxpZ2h0ZXJzOwotCi0jaWZkZWYgQlVJ
TERJTkdfT05fVElHRVIKLSAgICBCT09MIG5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7Ci0jZW5k
aWYKLSAgICAKLSAgICBXZWJUZXh0Q29tcGxldGVDb250cm9sbGVyICpjb21wQ29udHJvbGxlcjsK
LSAgICAKLSAgICBCT09MIHRyYW5zcGFyZW50QmFja2dyb3VuZDsKLQotICAgIFdlYkhUTUxWaWV3
SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogaW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVy
czsKLSAgICBCT09MIHJlY2VpdmVkTk9PUDsKLSAgICAKLSAgICBXZWJEYXRhU291cmNlICpkYXRh
U291cmNlOwotICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBwcm9taXNlZERyYWdUSUZGRGF0YVNv
dXJjZTsKLSAgICAKLSAgICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVGb2N1c2VkQW5kQWN0aXZl
U3RhdGVUaW1lcjsKLSAgICBDRlJ1bkxvb3BUaW1lclJlZiB1cGRhdGVNb3VzZW92ZXJUaW1lcjsK
LQotICAgIFNFTCBzZWxlY3RvckZvckRvQ29tbWFuZEJ5U2VsZWN0b3I7Ci0KLSNpZm5kZWYgTkRF
QlVHCi0gICAgQk9PTCBlbnVtZXJhdGluZ1N1YnZpZXdzOwotI2VuZGlmCi19Ci0tICh2b2lkKWNs
ZWFyOwotQGVuZAotCi1zdGF0aWMgTlNDZWxsU3RhdGVWYWx1ZSBraXQoVHJpU3RhdGUgc3RhdGUp
Ci17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICBjYXNlIEZhbHNlVHJpU3RhdGU6Ci0g
ICAgICAgICAgICByZXR1cm4gTlNPZmZTdGF0ZTsKLSAgICAgICAgY2FzZSBUcnVlVHJpU3RhdGU6
Ci0gICAgICAgICAgICByZXR1cm4gTlNPblN0YXRlOwotICAgICAgICBjYXNlIE1peGVkVHJpU3Rh
dGU6Ci0gICAgICAgICAgICByZXR1cm4gTlNNaXhlZFN0YXRlOwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gTlNPZmZTdGF0ZTsKLX0KLQotQGltcGxlbWVudGF0
aW9uIFdlYkhUTUxWaWV3UHJpdmF0ZQotCi0rICh2b2lkKWluaXRpYWxpemUKLXsKLSAgICBKU0M6
OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBX
ZWJDb3JlT2JqQ0ZpbmFsaXplT25NYWluVGhyZWFkKHNlbGYpOwotI2VuZGlmCi0KLSAgICBpZiAo
IW9sZFNldEN1cnNvcklNUCkgewotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgICAgIE1l
dGhvZCBzZXRDdXJzb3JNZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChbTlNDdXJzb3Ig
Y2xhc3NdLCBAc2VsZWN0b3Ioc2V0KSk7Ci0jZWxzZQotICAgICAgICBNZXRob2Qgc2V0Q3Vyc29y
TWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05TV2luZG93IGNsYXNzXSwgQHNlbGVj
dG9yKF9zZXRDdXJzb3JGb3JNb3VzZUxvY2F0aW9uOikpOwotI2VuZGlmCi0gICAgICAgIEFTU0VS
VChzZXRDdXJzb3JNZXRob2QpOwotCi0gICAgICAgIG9sZFNldEN1cnNvcklNUCA9IG1ldGhvZF9z
ZXRJbXBsZW1lbnRhdGlvbihzZXRDdXJzb3JNZXRob2QsIChJTVApc2V0Q3Vyc29yKTsKLSAgICAg
ICAgQVNTRVJUKG9sZFNldEN1cnNvcklNUCk7Ci0gICAgfQotICAgIAotI2lmZGVmIEJVSUxESU5H
X09OX1RJR0VSCi0gICAgaWYgKCFvbGRSZXNldEN1cnNvclJlY3RzSU1QKSB7Ci0gICAgICAgIE1l
dGhvZCByZXNldEN1cnNvclJlY3RzTWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2QoW05T
V2luZG93IGNsYXNzXSwgQHNlbGVjdG9yKHJlc2V0Q3Vyc29yUmVjdHMpKTsKLSAgICAgICAgQVNT
RVJUKHJlc2V0Q3Vyc29yUmVjdHNNZXRob2QpOwotICAgICAgICBvbGRSZXNldEN1cnNvclJlY3Rz
SU1QID0gbWV0aG9kX3NldEltcGxlbWVudGF0aW9uKHJlc2V0Q3Vyc29yUmVjdHNNZXRob2QsIChJ
TVApcmVzZXRDdXJzb3JSZWN0cyk7Ci0gICAgICAgIEFTU0VSVChvbGRSZXNldEN1cnNvclJlY3Rz
SU1QKTsKLSAgICB9Ci0jZW5kaWYKLQotfQotCi0tICh2b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAo
V2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1haW5UaHJlYWQoW1dlYkhUTUxWaWV3UHJp
dmF0ZSBjbGFzc10sIHNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIWF1dG9z
Y3JvbGxUaW1lcik7Ci0gICAgQVNTRVJUKCFhdXRvc2Nyb2xsVHJpZ2dlckV2ZW50KTsKLSAgICBB
U1NFUlQoIXVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKLSAgICBBU1NFUlQoIXVw
ZGF0ZU1vdXNlb3ZlclRpbWVyKTsKLSAgICAKLSAgICBbbW91c2VEb3duRXZlbnQgcmVsZWFzZV07
Ci0gICAgW2tleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBbcGx1Z2luQ29udHJvbGxlciByZWxl
YXNlXTsKLSAgICBbdG9vbFRpcCByZWxlYXNlXTsKLSAgICBbY29tcENvbnRyb2xsZXIgcmVsZWFz
ZV07Ci0gICAgW2RhdGFTb3VyY2UgcmVsZWFzZV07Ci0gICAgW2hpZ2hsaWdodGVycyByZWxlYXNl
XTsKLSAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCi0gICAgICAgIHByb21pc2Vk
RHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwot
Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAgQVNT
RVJUX01BSU5fVEhSRUFEKCk7Ci0KLSAgICBpZiAocHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2Up
Ci0gICAgICAgIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlLT5yZW1vdmVDbGllbnQocHJvbWlz
ZWREYXRhQ2xpZW50KCkpOwotCi0gICAgW3N1cGVyIGZpbmFsaXplXTsKLX0KLQotLSAodm9pZClj
bGVhcgotewotICAgIFttb3VzZURvd25FdmVudCByZWxlYXNlXTsKLSAgICBba2V5RG93bkV2ZW50
IHJlbGVhc2VdOwotICAgIFtwbHVnaW5Db250cm9sbGVyIHJlbGVhc2VdOwotICAgIFt0b29sVGlw
IHJlbGVhc2VdOwotICAgIFtjb21wQ29udHJvbGxlciByZWxlYXNlXTsKLSAgICBbZGF0YVNvdXJj
ZSByZWxlYXNlXTsKLSAgICBbaGlnaGxpZ2h0ZXJzIHJlbGVhc2VdOwotICAgIGlmIChwcm9taXNl
ZERyYWdUSUZGRGF0YVNvdXJjZSkKLSAgICAgICAgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2Ut
PnJlbW92ZUNsaWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0KLSAgICBtb3VzZURvd25FdmVu
dCA9IG5pbDsKLSAgICBrZXlEb3duRXZlbnQgPSBuaWw7Ci0gICAgcGx1Z2luQ29udHJvbGxlciA9
IG5pbDsKLSAgICB0b29sVGlwID0gbmlsOwotICAgIGNvbXBDb250cm9sbGVyID0gbmlsOwotICAg
IGRhdGFTb3VyY2UgPSBuaWw7Ci0gICAgaGlnaGxpZ2h0ZXJzID0gbmlsOwotICAgIHByb21pc2Vk
RHJhZ1RJRkZEYXRhU291cmNlID0gMDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKLSAgICBsYXllckhvc3RpbmdWaWV3ID0gbmlsOwotI2VuZGlmCi19Ci0KLUBlbmQKLQotQGlt
cGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQotLSAo
RE9NUmFuZ2UgKilfZG9jdW1lbnRSYW5nZQotewotICAgIHJldHVybiBbW1tzZWxmIF9mcmFtZV0g
RE9NRG9jdW1lbnRdIF9kb2N1bWVudFJhbmdlXTsKLX0KLQotLSAoQk9PTClfaW1hZ2VFeGlzdHNB
dFBhdGhzOihOU0FycmF5ICopcGF0aHMKLXsKLSAgICBOU0VudW1lcmF0b3IgKmVudW1lcmF0b3Ig
PSBbcGF0aHMgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgTlNTdHJpbmcgKnBhdGg7Ci0gICAgCi0g
ICAgd2hpbGUgKChwYXRoID0gW2VudW1lcmF0b3IgbmV4dE9iamVjdF0pICE9IG5pbCkgewotICAg
ICAgICBOU1N0cmluZyAqTUlNRVR5cGUgPSBXS0dldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKFtwYXRo
IHBhdGhFeHRlbnNpb25dKTsKLSAgICAgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKE1JTUVUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBZ
RVM7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBOTzsKLX0KLQotLSAoV2ViRGF0YVNvdXJjZSAq
KV9kYXRhU291cmNlCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5kYXRhU291cmNlOwotfQotCi0t
IChXZWJWaWV3ICopX3dlYlZpZXcKLXsKLSAgICByZXR1cm4gW19wcml2YXRlLT5kYXRhU291cmNl
IF93ZWJWaWV3XTsKLX0KLQotLSAoV2ViRnJhbWVWaWV3ICopX2ZyYW1lVmlldwotewotICAgIHJl
dHVybiBbW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXSBmcmFtZVZpZXddOwotfQotCi0t
IChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoUGF0aHM6KE5TQXJy
YXkgKilwYXRocwotewotICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50OwotICAgIE5T
RW51bWVyYXRvciAqZW51bWVyYXRvciA9IFtwYXRocyBvYmplY3RFbnVtZXJhdG9yXTsKLSAgICBO
U011dGFibGVBcnJheSAqZG9tTm9kZXMgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsK
LSAgICBOU1N0cmluZyAqcGF0aDsKLSAgICAKLSAgICB3aGlsZSAoKHBhdGggPSBbZW51bWVyYXRv
ciBuZXh0T2JqZWN0XSkgIT0gbmlsKSB7Ci0gICAgICAgIC8vIE5vbi1pbWFnZSBmaWxlIHR5cGVz
OyBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nIGlzIGFwcHJvcHJpYXRlIGhlcmUgYmVjYXVzZSB0aGlz
IHdpbGwKLSAgICAgICAgLy8gYmUgcGFzdGVkIGFzIHZpc2libGUgdGV4dC4KLSAgICAgICAgTlNT
dHJpbmcgKnVybCA9IFtbW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpwYXRoXSBfd2Via2l0X2Nhbm9u
aWNhbGl6ZV0gX3dlYl91c2VyVmlzaWJsZVN0cmluZ107Ci0gICAgICAgIFtkb21Ob2RlcyBhZGRP
YmplY3Q6W1tbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSBjcmVhdGVUZXh0Tm9kZTogdXJsXV07
Ci0gICAgfQotICAgIAotICAgIGZyYWdtZW50ID0gW1tzZWxmIF9mcmFtZV0gX2RvY3VtZW50RnJh
Z21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6ZG9tTm9kZXNdOyAKLSAgICAKLSAgICBbZG9tTm9k
ZXMgcmVsZWFzZV07Ci0gICAgCi0gICAgcmV0dXJuIFtmcmFnbWVudCBmaXJzdENoaWxkXSAhPSBu
aWwgPyBmcmFnbWVudCA6IG5pbDsKLX0KLQotKyAoTlNBcnJheSAqKV9leGNsdWRlZEVsZW1lbnRz
Rm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24KLXsKLSAgICBzdGF0aWMgTlNBcnJheSAqZWxl
bWVudHMgPSBuaWw7Ci0gICAgaWYgKGVsZW1lbnRzID09IG5pbCkgewotICAgICAgICBlbGVtZW50
cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOgotICAgICAgICAgICAgLy8gT21p
dCBzdHlsZSBzaW5jZSB3ZSB3YW50IHN0eWxlIHRvIGJlIGlubGluZSBzbyB0aGUgZnJhZ21lbnQg
Y2FuIGJlIGVhc2lseSBpbnNlcnRlZC4KLSAgICAgICAgICAgIEAic3R5bGUiLAotICAgICAgICAg
ICAgLy8gT21pdCB4bWwgc28gdGhlIHJlc3VsdCBpcyBub3QgWEhUTUwuCi0gICAgICAgICAgICBA
InhtbCIsIAotICAgICAgICAgICAgLy8gT21pdCB0YWdzIHRoYXQgd2lsbCBnZXQgc3RyaXBwZWQg
d2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVudCBhbnl3YXkuCi0gICAgICAgICAgICBAImRvY3R5
cGUiLCBAImh0bWwiLCBAImhlYWQiLCBAImJvZHkiLAotICAgICAgICAgICAgLy8gT21pdCBkZXBy
ZWNhdGVkIHRhZ3MuCi0gICAgICAgICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRl
ciIsIEAiZGlyIiwgQCJmb250IiwgQCJpc2luZGV4IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2Ui
LCBAInUiLAotICAgICAgICAgICAgLy8gT21pdCBvYmplY3Qgc28gbm8gZmlsZSBhdHRhY2htZW50
cyBhcmUgcGFydCBvZiB0aGUgZnJhZ21lbnQuCi0gICAgICAgICAgICBAIm9iamVjdCIsIG5pbF07
Ci0gICAgICAgIENGUmV0YWluKGVsZW1lbnRzKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnRz
OwotfQotCi1zdGF0aWMgTlNVUkwqIHVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoTlNTdHJpbmcg
KnJlbGF0aXZlUGFydCkKLXsKLSAgICBDRlVVSURSZWYgVVVJRFJlZiA9IENGVVVJRENyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0KTsKLSAgICBOU1N0cmluZyAqVVVJRFN0cmluZyA9IChOU1N0cmlu
ZyAqKUNGVVVJRENyZWF0ZVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBVVUlEUmVmKTsKLSAg
ICBDRlJlbGVhc2UoVVVJRFJlZik7Ci0gICAgTlNVUkwgKlVSTCA9IFtOU1VSTCBVUkxXaXRoU3Ry
aW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUA6Ly8lQC8lQCIsIFdlYkRhdGFQcm90
b2NvbFNjaGVtZSwgVVVJRFN0cmluZywgcmVsYXRpdmVQYXJ0XV07Ci0gICAgQ0ZSZWxlYXNlKFVV
SURTdHJpbmcpOwotCi0gICAgcmV0dXJuIFVSTDsKLX0KLQotLSAoRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKV9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3Rl
Ym9hcmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5D
b250ZXh0OihET01SYW5nZSAqKWNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsbG93UGxhaW5UZXh0OihCT09MKWFsbG93UGxhaW5UZXh0Ci17Ci0gICAg
TlNBcnJheSAqdHlwZXMgPSBbcGFzdGVib2FyZCB0eXBlc107Ci0gICAgRE9NRG9jdW1lbnRGcmFn
bWVudCAqZnJhZ21lbnQgPSBuaWw7Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Oldl
YkFyY2hpdmVQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1l
bnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6V2ViQXJjaGl2ZVBib2FyZFR5
cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29u
dGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWlu
c09iamVjdDpOU0ZpbGVuYW1lc1Bib2FyZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtz
ZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU0ZpbGVu
YW1lc1Bib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7
Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0hUTUxQYm9hcmRUeXBlXSAm
JgotICAgICAgICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJv
YXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvclR5cGU6TlNIVE1MUGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAg
ICAgIHJldHVybiBmcmFnbWVudDsKLSAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TUlRGUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUlRGUGJvYXJkVHlwZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNv
bnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLQotICAgIGlmIChbdHlwZXMg
Y29udGFpbnNPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0g
W3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TUlRG
RFBib2FyZFR5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0pKQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0K
LSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdICYmCi0gICAg
ICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFz
dGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yVHlwZTpOU1RJRkZQYm9hcmRUeXBlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAgcmV0
dXJuIGZyYWdtZW50OwotCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1BERlBib2Fy
ZFR5cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJv
bVBhc3RlYm9hcmQ6cGFzdGVib2FyZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yVHlwZTpOU1BERlBib2FyZFR5cGUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluQ29udGV4dDpjb250ZXh0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6MF0p
KQotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0KLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgaWYgKFt0eXBlcyBjb250
YWluc09iamVjdDpOU1BJQ1RQYm9hcmRUeXBlXSAmJgotICAgICAgICAoZnJhZ21lbnQgPSBbc2Vs
ZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvclR5cGU6TlNQSUNUUGJv
YXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5Db250ZXh0OmNvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN1YnJlc291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSNlbmRp
ZgotCi0gICAgLy8gT25seSAxMC41IGFuZCBoaWdoZXIgc3VwcG9ydCBzZXR0aW5nIGFuZCByZXRy
aWV2aW5nIHBhc3RlYm9hcmQgdHlwZXMgd2l0aCBVVElzLCBidXQgd2UgZG9uJ3QgYmVsaWV2ZQot
ICAgIC8vIHRoYXQgYW55IGFwcGxpY2F0aW9ucyBvbiBUaWdlciBwdXQgdHlwZXMgZm9yIHdoaWNo
IHdlIG9ubHkgaGF2ZSBhIFVUSSwgbGlrZSBQTkcsIG9uIHRoZSBwYXN0ZWJvYXJkLgotICAgIGlm
IChbdHlwZXMgY29udGFpbnNPYmplY3Q6KE5TU3RyaW5nKilrVVRUeXBlUE5HXSAmJgotICAgICAg
ICAoZnJhZ21lbnQgPSBbc2VsZiBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvclR5cGU6KE5TU3RyaW5nKilrVVRUeXBlUE5HCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6Y29udGV4dAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOjBdKSkKLSAgICAgICAg
cmV0dXJuIGZyYWdtZW50OwotICAgICAgICAKLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0
Ok5TVVJMUGJvYXJkVHlwZV0gJiYKLSAgICAgICAgKGZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNv
bnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJl
c291cmNlczowXSkpCi0gICAgICAgIHJldHVybiBmcmFnbWVudDsKLSAgICAgICAgCi0gICAgaWYg
KGFsbG93UGxhaW5UZXh0ICYmIFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5
cGVdICYmCi0gICAgICAgIChmcmFnbWVudCA9IFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBh
c3RlYm9hcmQ6cGFzdGVib2FyZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5Db250ZXh0OmNvbnRleHQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczowXSkp
IHsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmls
OwotfQotCi0tIChOU1N0cmluZyAqKV9wbGFpblRleHRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVib2FyZAotewotICAgIE5TQXJyYXkgKnR5cGVzID0gW3Bhc3RlYm9hcmQgdHlw
ZXNdOwotICAgIAotICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRU
eXBlXSkKLSAgICAgICAgcmV0dXJuIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5n
UGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107Ci0gICAg
Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gbmlsOwotICAgIE5T
U3RyaW5nICpzdHJpbmc7Ci0KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBi
b2FyZFR5cGVdKQotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoUlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9h
cmRUeXBlXSBkb2N1bWVudEF0dHJpYnV0ZXM6TlVMTF07Ci0gICAgaWYgKGF0dHJpYnV0ZWRTdHJp
bmcgPT0gbmlsICYmIFt0eXBlcyBjb250YWluc09iamVjdDpOU1JURlBib2FyZFR5cGVdKQotICAg
ICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoUlRGOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRB
dHRyaWJ1dGVzOk5VTExdOwotICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nICE9IG5pbCkgewotICAg
ICAgICBzdHJpbmcgPSBbW2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXSBjb3B5XTsKLSAgICAgICAg
W2F0dHJpYnV0ZWRTdHJpbmcgcmVsZWFzZV07Ci0gICAgICAgIHJldHVybiBbc3RyaW5nIGF1dG9y
ZWxlYXNlXTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU0Zp
bGVuYW1lc1Bib2FyZFR5cGVdKSB7Ci0gICAgICAgIHN0cmluZyA9IFtbcGFzdGVib2FyZCBwcm9w
ZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZW5hbWVzUGJvYXJkVHlwZV0gY29tcG9uZW50c0pvaW5lZEJ5
U3RyaW5nOkAiXG4iXTsKLSAgICAgICAgaWYgKHN0cmluZyAhPSBuaWwpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nOwotICAgIH0KLSAgICAKLSAgICBOU1VSTCAqVVJMOwotICAgIAotICAgIGlm
ICgoVVJMID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdKSkgewotICAgICAg
ICBzdHJpbmcgPSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwotICAgICAgICBpZiAoW3N0
cmluZyBsZW5ndGhdID4gMCkKLSAgICAgICAgICAgIHJldHVybiBzdHJpbmc7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6KEJPT0wpYWxsb3dQbGFpblRl
eHQKLXsKLSAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tzZWxmIF93ZWJWaWV3XSByZXRhaW5dOwot
ICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotCi0gICAg
RE9NUmFuZ2UgKnJhbmdlID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOwotICAgIERPTURvY3VtZW50
RnJhZ21lbnQgKmZyYWdtZW50ID0gW3NlbGYgX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2Fy
ZDpwYXN0ZWJvYXJkIGluQ29udGV4dDpyYW5nZSBhbGxvd1BsYWluVGV4dDphbGxvd1BsYWluVGV4
dF07Ci0gICAgaWYgKGZyYWdtZW50ICYmIFtzZWxmIF9zaG91bGRJbnNlcnRGcmFnbWVudDpmcmFn
bWVudCByZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0
aW9uUGFzdGVkXSkKLSAgICAgICAgW1tzZWxmIF9mcmFtZV0gX3JlcGxhY2VTZWxlY3Rpb25XaXRo
RnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxm
IF9jYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXSBtYXRjaFN0eWxlOk5P
XTsKLQotICAgIFt3ZWJWaWV3IF9zZXRJbnNlcnRpb25QYXN0ZWJvYXJkOm5pbF07Ci0gICAgW3dl
YlZpZXcgcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIFdlYlZpZXcgKndlYlZpZXcg
PSBbW3NlbGYgX3dlYlZpZXddIHJldGFpbl07Ci0gICAgW3dlYlZpZXcgX3NldEluc2VydGlvblBh
c3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0KLSAgICBOU1N0cmluZyAqdGV4dCA9IFtzZWxmIF9wbGFp
blRleHRGcm9tUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLSAgICBpZiAoW3NlbGYgX3Nob3VsZFJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp0ZXh0IGdpdmVuQWN0aW9uOldlYlZpZXdJbnNlcnRBY3Rp
b25QYXN0ZWRdKQotICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0OnRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6Tk8gc21hcnRSZXBsYWNlOltzZWxmIF9jYW5TbWFy
dFJlcGxhY2VXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXV07Ci0KLSAgICBbd2ViVmlldyBfc2V0
SW5zZXJ0aW9uUGFzdGVib2FyZDpuaWxdOwotICAgIFt3ZWJWaWV3IHJlbGVhc2VdOwotfQotCi0t
ICh2b2lkKV9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJVbmNvbmRpdGlvbmFsbHkKLXsKLSAgICBp
ZiAoIV9wcml2YXRlIHx8ICFfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5vdGlmaWNhdGlv
bnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYgbmFtZTpXS01vdXNlTW92ZWROb3RpZmlj
YXRpb24oKSBvYmplY3Q6bmlsXTsKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nTW91c2VNb3ZlZE5v
dGlmaWNhdGlvbnMgPSBmYWxzZTsKLX0KLQotLSAodm9pZClfcmVtb3ZlU3VwZXJ2aWV3T2JzZXJ2
ZXJzCi17Ci0gICAgaWYgKCFfcHJpdmF0ZSB8fCAhX3ByaXZhdGUtPm9ic2VydmluZ1N1cGVydmll
d05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU1ZpZXcgKnN1cGVy
dmlldyA9IFtzZWxmIHN1cGVydmlld107Ci0gICAgaWYgKCFzdXBlcnZpZXcgfHwgIVtzZWxmIHdp
bmRvd10pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAq
bm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJd
OwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmll
d0ZyYW1lRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZpZXddOwotICAgIFtub3Rp
ZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TVmlld0JvdW5kc0RpZENo
YW5nZU5vdGlmaWNhdGlvbiBvYmplY3Q6c3VwZXJ2aWV3XTsKLSAgICAKLSAgICBfcHJpdmF0ZS0+
b2JzZXJ2aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucyA9IGZhbHNlOwotfQotCi0tICh2b2lkKV9y
ZW1vdmVXaW5kb3dPYnNlcnZlcnMKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5vYnNlcnZpbmdXaW5k
b3dOb3RpZmljYXRpb25zKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNXaW5kb3cgKndp
bmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBOU05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50
ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90aWZpY2F0
aW9uIG9iamVjdDpuaWxdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6
c2VsZiBuYW1lOk5TV2luZG93RGlkUmVzaWduS2V5Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwot
ICAgIFtub3RpZmljYXRpb25DZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOk5TV2luZG93
V2lsbENsb3NlTm90aWZpY2F0aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtub3RpZmljYXRpb25D
ZW50ZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBuYW1lOldLV2luZG93V2lsbE9yZGVyT25TY3JlZW5O
b3RpZmljYXRpb24oKSBvYmplY3Q6d2luZG93XTsKLSAgICAKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2
aW5nV2luZG93Tm90aWZpY2F0aW9ucyA9IGZhbHNlOwotfQotCi0tIChCT09MKV9zaG91bGRJbnNl
cnRGcmFnbWVudDooRE9NRG9jdW1lbnRGcmFnbWVudCAqKWZyYWdtZW50IHJlcGxhY2luZ0RPTVJh
bmdlOihET01SYW5nZSAqKXJhbmdlIGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zZXJ0QWN0aW9uKWFj
dGlvbgotewotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgRE9N
Tm9kZSAqY2hpbGQgPSBbZnJhZ21lbnQgZmlyc3RDaGlsZF07Ci0gICAgaWYgKFtmcmFnbWVudCBs
YXN0Q2hpbGRdID09IGNoaWxkICYmIFtjaGlsZCBpc0tpbmRPZkNsYXNzOltET01DaGFyYWN0ZXJE
YXRhIGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6WyhET01DaGFyYWN0ZXJE
YXRhICopY2hpbGQgZGF0YV0gcmVwbGFjaW5nRE9NUmFuZ2U6cmFuZ2UgZ2l2ZW5BY3Rpb246YWN0
aW9uXTsKLSAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6d2ViVmlldyBzaG91bGRJbnNlcnROb2RlOmZyYWdtZW50IHJlcGxhY2luZ0RPTVJhbmdl
OnJhbmdlIGdpdmVuQWN0aW9uOmFjdGlvbl07Ci19Ci0KLS0gKEJPT0wpX3Nob3VsZEluc2VydFRl
eHQ6KE5TU3RyaW5nICopdGV4dCByZXBsYWNpbmdET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBn
aXZlbkFjdGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KLXsKLSAgICBXZWJWaWV3ICp3
ZWJWaWV3ID0gW3NlbGYgX3dlYlZpZXddOwotICAgIHJldHVybiBbW3dlYlZpZXcgX2VkaXRpbmdE
ZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzp3ZWJWaWV3IHNob3VsZEluc2VydFRleHQ6dGV4dCBy
ZXBsYWNpbmdET01SYW5nZTpyYW5nZSBnaXZlbkFjdGlvbjphY3Rpb25dOwotfQotCi0tIChCT09M
KV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFj
dGlvbjooV2ViVmlld0luc2VydEFjdGlvbilhY3Rpb24KLXsKLSAgICByZXR1cm4gW3NlbGYgX3No
b3VsZEluc2VydFRleHQ6dGV4dCByZXBsYWNpbmdET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5n
ZV0gZ2l2ZW5BY3Rpb246YWN0aW9uXTsKLX0KLQotLy8gQ2FsY3VsYXRlIHRoZSB2ZXJ0aWNhbCBz
aXplIG9mIHRoZSB2aWV3IHRoYXQgZml0cyBvbiBhIHNpbmdsZSBwYWdlCi0tIChmbG9hdClfY2Fs
Y3VsYXRlUHJpbnRIZWlnaHQKLXsKLSAgICAvLyBPYnRhaW4gdGhlIHByaW50IGluZm8gb2JqZWN0
IGZvciB0aGUgY3VycmVudCBvcGVyYXRpb24KLSAgICBOU1ByaW50SW5mbyAqcGkgPSBbW05TUHJp
bnRPcGVyYXRpb24gY3VycmVudE9wZXJhdGlvbl0gcHJpbnRJbmZvXTsKLSAgICAKLSAgICAvLyBD
YWxjdWxhdGUgdGhlIHBhZ2UgaGVpZ2h0IGluIHBvaW50cwotICAgIE5TU2l6ZSBwYXBlclNpemUg
PSBbcGkgcGFwZXJTaXplXTsKLSAgICByZXR1cm4gcGFwZXJTaXplLmhlaWdodCAtIFtwaSB0b3BN
YXJnaW5dIC0gW3BpIGJvdHRvbU1hcmdpbl07Ci19Ci0KLS0gKERPTVJhbmdlICopX3NlbGVjdGVk
UmFuZ2UKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpIDogbmlsOwotfQotCi0tIChCT09MKV9zaG91bGREZWxldGVSYW5n
ZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+
c2hvdWxkRGVsZXRlUmFuZ2UoY29yZShyYW5nZSkpOwotfQotCi0tIChOU1ZpZXcgKilfaGl0Vmll
d0ZvckV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBVc3VhbGx5LCB3ZSBoYWNrIEFL
J3MgaGl0VGVzdCBtZXRob2QgdG8gY2F0Y2ggYWxsIGV2ZW50cyBhdCB0aGUgdG9wbW9zdCBXZWJI
VE1MVmlldy4gIAotICAgIC8vIENhbGxlcnMgb2YgdGhpcyBtZXRob2QsIGhvd2V2ZXIsIHdhbnQg
dG8gcXVlcnkgdGhlIGRlZXBlc3QgdmlldyBpbnN0ZWFkLgotICAgIGZvcmNlTlNWaWV3SGl0VGVz
dCA9IFlFUzsKLSAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbW1tzZWxmIHdpbmRvd10gY29udGVudFZp
ZXddIGhpdFRlc3Q6W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddXTsKLSAgICBmb3JjZU5TVmlld0hp
dFRlc3QgPSBOTzsgICAgCi0gICAgcmV0dXJuIGhpdFZpZXc7Ci19Ci0KLS0gKHZvaWQpX3dyaXRl
U2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVib2Fy
ZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBjYWNoZWRBdHRyaWJ1dGVkU3RyaW5nOihOU0F0
dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgLy8gUHV0IEhUTUwgb24g
dGhlIHBhc3RlYm9hcmQuCi0gICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpXZWJBcmNoaXZl
UGJvYXJkVHlwZV0pIHsKLSAgICAgICAgaWYgKFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBjb3Jl
QXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxlY3Rpb24oY29yZShbc2Vs
ZiBfZnJhbWVdKSkpIHsKLSAgICAgICAgICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRh
ID0gY29yZUFyY2hpdmUgPyBjb3JlQXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkgOiAw
KQotICAgICAgICAgICAgICAgIFtwYXN0ZWJvYXJkIHNldERhdGE6KE5TRGF0YSAqKWRhdGEuZ2V0
KCkgZm9yVHlwZTpXZWJBcmNoaXZlUGJvYXJkVHlwZV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgLy8gUHV0IHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBvbiB0aGUgcGFzdGVib2FyZCAoUlRG
L1JURkQgZm9ybWF0KS4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TUlRGRFBib2Fy
ZFR5cGVdKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVkU3RyaW5nID09IG5pbCkgewotICAgICAg
ICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ107
Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICBOU0RhdGEgKlJURkREYXRhID0gW2F0dHJpYnV0
ZWRTdHJpbmcgUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBs
ZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmlsXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0
RGF0YTpSVEZERGF0YSBmb3JUeXBlOk5TUlRGRFBib2FyZFR5cGVdOwotICAgIH0gICAgICAgIAot
ICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNSVEZQYm9hcmRUeXBlXSkgewotICAgICAg
ICBpZiAoYXR0cmlidXRlZFN0cmluZyA9PSBuaWwpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZWRT
dHJpbmcgPSBbc2VsZiBzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmddOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkgewotICAgICAg
ICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5nIF93ZWJfYXR0cmlidXRl
ZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnNdOwotICAgICAgICB9Ci0gICAg
ICAgIE5TRGF0YSAqUlRGRGF0YSA9IFthdHRyaWJ1dGVkU3RyaW5nIFJURkZyb21SYW5nZTpOU01h
a2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6
bmlsXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpSVEZEYXRhIGZvclR5cGU6TlNSVEZQ
Ym9hcmRUeXBlXTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUHV0IHBsYWluIHN0cmluZyBvbiB0aGUg
cGFzdGVib2FyZC4KLSAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2JqZWN0Ok5TU3RyaW5nUGJvYXJk
VHlwZV0pIHsKLSAgICAgICAgLy8gTWFwICZuYnNwOyB0byBhIHBsYWluIG9sZCBzcGFjZSBiZWNh
dXNlIHRoaXMgaXMgYmV0dGVyIGZvciBzb3VyY2UgY29kZSwgb3RoZXIgYnJvd3NlcnMgZG8gaXQs
Ci0gICAgICAgIC8vIGFuZCBiZWNhdXNlIEhUTUwgZm9yY2VzIHlvdSB0byBkbyB0aGlzIGFueSB0
aW1lIHlvdSB3YW50IHR3byBzcGFjZXMgaW4gYSByb3cuCi0gICAgICAgIE5TTXV0YWJsZVN0cmlu
ZyAqcyA9IFtbc2VsZiBzZWxlY3RlZFN0cmluZ10gbXV0YWJsZUNvcHldOwotICAgICAgICBjb25z
dCB1bmljaGFyIE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIgPSAweEEwOwotICAgICAgICBOU1N0
cmluZyAqTm9uQnJlYWtpbmdTcGFjZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFj
dGVyczomTm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciBsZW5ndGg6MV07Ci0gICAgICAgIFtzIHJl
cGxhY2VPY2N1cnJlbmNlc09mU3RyaW5nOk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgd2l0aFN0cmlu
ZzpAIiAiIG9wdGlvbnM6MCByYW5nZTpOU01ha2VSYW5nZSgwLCBbcyBsZW5ndGhdKV07Ci0gICAg
ICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzpzIGZvclR5cGU6TlNTdHJpbmdQYm9hcmRUeXBlXTsK
LSAgICAgICAgW3MgcmVsZWFzZV07Ci0gICAgfQotICAgIAotICAgIGlmIChbc2VsZiBfY2FuU21h
cnRDb3B5T3JEZWxldGVdICYmIFt0eXBlcyBjb250YWluc09iamVjdDpXZWJTbWFydFBhc3RlUGJv
YXJkVHlwZV0pIHsKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpuaWwgZm9yVHlwZTpXZWJT
bWFydFBhc3RlUGJvYXJkVHlwZV07Ci0gICAgfQotfQotCi0tICh2b2lkKV9zZXRNb3VzZURvd25F
dmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgQVNTRVJUKCFldmVudCB8fCBbZXZlbnQgdHlw
ZV0gPT0gTlNMZWZ0TW91c2VEb3duIHx8IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VEb3du
IHx8IFtldmVudCB0eXBlXSA9PSBOU090aGVyTW91c2VEb3duKTsKLQotICAgIGlmIChldmVudCA9
PSBfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFtldmVu
dCByZXRhaW5dOwotICAgIFtfcHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgcmVsZWFzZV07Ci0gICAg
X3ByaXZhdGUtPm1vdXNlRG93bkV2ZW50ID0gZXZlbnQ7Ci19Ci0KLS0gKHZvaWQpX2NhbmNlbFVw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyCi17Ci0gICAgaWYgKF9wcml2YXRlLT51cGRh
dGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lcikgewotICAgICAgICBDRlJ1bkxvb3BUaW1lcklu
dmFsaWRhdGUoX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyKTsKLSAg
ICAgICAgQ0ZSZWxlYXNlKF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1l
cik7Ci0gICAgICAgIF9wcml2YXRlLT51cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lciA9
IE5VTEw7Ci0gICAgfQotfQotCi0tICh2b2lkKV9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcgot
ewotICAgIGlmIChfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpIHsKLSAgICAgICAgQ0ZS
dW5Mb29wVGltZXJJbnZhbGlkYXRlKF9wcml2YXRlLT51cGRhdGVNb3VzZW92ZXJUaW1lcik7Ci0g
ICAgICAgIENGUmVsZWFzZShfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIpOwotICAgICAg
ICBfcHJpdmF0ZS0+dXBkYXRlTW91c2VvdmVyVGltZXIgPSBOVUxMOwotICAgIH0KLX0KLQotLSAo
V2ViSFRNTFZpZXcgKilfdG9wSFRNTFZpZXcKLXsKLSAgICAvLyBGSVhNRTogdGhpcyBjYW4gZmFp
bCBpZiB0aGUgZGF0YVNvdXJjZSBpcyBuaWwsIHdoaWNoIGhhcHBlbnMgd2hlbiB0aGUgV2ViVmll
dyBpcyB0ZWFyaW5nIGRvd24gZnJvbSB0aGUgd2luZG93IGNsb3NpbmcuCi0gICAgV2ViSFRNTFZp
ZXcgKnZpZXcgPSAoV2ViSFRNTFZpZXcgKilbW1tbX3ByaXZhdGUtPmRhdGFTb3VyY2UgX3dlYlZp
ZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIEFTU0VSVCh2aWV3
KTsKLSAgICBBU1NFUlQoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSk7
Ci0gICAgcmV0dXJuIHZpZXc7Ci19Ci0KLS0gKEJPT0wpX2lzVG9wSFRNTFZpZXcKLXsKLSAgICAv
LyBGSVhNRTogdGhpcyBzaG91bGQgYmUgYSBjYWNoZWQgYm9vbGVhbiB0aGF0IGRvZXNuJ3QgcmVs
eSBvbiBfdG9wSFRNTFZpZXcgc2luY2UgdGhhdCBjYW4gZmFpbCAoc2VlIF90b3BIVE1MVmlldyku
Ci0gICAgcmV0dXJuIHNlbGYgPT0gW3NlbGYgX3RvcEhUTUxWaWV3XTsKLX0KLQotLSAodm9pZClf
d2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZQotewotICAgIFtzZWxmIF9zZXRQcmludGluZzpZ
RVMgbWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3
U2l6ZTpOT107Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vi
dmlld3MgPSBZRVM7Ci0jZW5kaWYKLQotICAgIE5TTXV0YWJsZUFycmF5ICpkZXNjZW5kYW50V2Vi
SFRNTFZpZXdzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0KLSAgICBbc2VsZiBf
d2ViX2FkZERlc2NlbmRhbnRXZWJIVE1MVmlld3NUb0FycmF5OmRlc2NlbmRhbnRXZWJIVE1MVmll
d3NdOwotCi0gICAgdW5zaWduZWQgY291bnQgPSBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBjb3Vu
dF07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIFtb
ZGVzY2VuZGFudFdlYkhUTUxWaWV3cyBvYmplY3RBdEluZGV4OmldIF9zZXRQcmludGluZzpZRVMg
bWluaW11bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6
ZTpOT107Ci0KLSAgICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlm
Ci19Ci0KLS0gKHZvaWQpX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZQotewotICAgIFtz
ZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0
aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0
ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJy
YXkgKmRlc2NlbmRhbnRXZWJIVE1MVmlld3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0
XTsKLQotICAgIFtzZWxmIF93ZWJfYWRkRGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVz
Y2VuZGFudFdlYkhUTUxWaWV3c107Ci0KLSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50
V2ViSFRNTFZpZXdzIGNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7
ICsraSkKLSAgICAgICAgW1tkZXNjZW5kYW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0g
X3NldFByaW50aW5nOk5PIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAu
MGYgYWRqdXN0Vmlld1NpemU6Tk9dOwotCi0gICAgW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgcmVs
ZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmll
d3MgPSBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKV93ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJz
aXZlQW5kQWRqdXN0Vmlld1NpemUKLXsKLSAgICBbc2VsZiBfc2V0UHJpbnRpbmc6WUVTIG1pbmlt
dW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFnZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6WUVT
XTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9
IFlFUzsKLSNlbmRpZgotCi0gICAgTlNNdXRhYmxlQXJyYXkgKmRlc2NlbmRhbnRXZWJIVE1MVmll
d3MgPSBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0XTsKLQotICAgIFtzZWxmIF93ZWJfYWRk
RGVzY2VuZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6ZGVzY2VuZGFudFdlYkhUTUxWaWV3c107Ci0K
LSAgICB1bnNpZ25lZCBjb3VudCA9IFtkZXNjZW5kYW50V2ViSFRNTFZpZXdzIGNvdW50XTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgW1tkZXNjZW5k
YW50V2ViSFRNTFZpZXdzIG9iamVjdEF0SW5kZXg6aV0gX3NldFByaW50aW5nOllFUyBtaW5pbXVt
UGFnZVdpZHRoOjAuMGYgbWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllFU107
Ci0KLSAgICBbZGVzY2VuZGFudFdlYkhUTUxWaWV3cyByZWxlYXNlXTsKLQotI2lmbmRlZiBOREVC
VUcKLSAgICBfcHJpdmF0ZS0+ZW51bWVyYXRpbmdTdWJ2aWV3cyA9IE5POwotI2VuZGlmCi19Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChXZWJQcml2YXRlKQotCi0rIChO
U0FycmF5ICopc3VwcG9ydGVkTUlNRVR5cGVzCi17Ci0gICAgcmV0dXJuIFtXZWJIVE1MUmVwcmVz
ZW50YXRpb24gc3VwcG9ydGVkTUlNRVR5cGVzXTsKLX0KLQotKyAoTlNBcnJheSAqKXN1cHBvcnRl
ZEltYWdlTUlNRVR5cGVzCi17Ci0gICAgcmV0dXJuIFtXZWJIVE1MUmVwcmVzZW50YXRpb24gc3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZXNdOwotfQotCi0rIChOU0FycmF5ICopc3VwcG9ydGVkTm9uSW1h
Z2VNSU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBzdXBwb3J0
ZWROb25JbWFnZU1JTUVUeXBlc107Ci19Ci0KLSsgKE5TQXJyYXkgKil1bnN1cHBvcnRlZFRleHRN
SU1FVHlwZXMKLXsKLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czoKLSAgICAg
ICAgQCJ0ZXh0L2NhbGVuZGFyIiwgICAgICAgLy8gaUNhbAotICAgICAgICBAInRleHQveC1jYWxl
bmRhciIsCi0gICAgICAgIEAidGV4dC94LXZjYWxlbmRhciIsCi0gICAgICAgIEAidGV4dC92Y2Fs
ZW5kYXIiLAotICAgICAgICBAInRleHQvdmNhcmQiLCAgICAgICAgICAvLyB2Q2FyZAotICAgICAg
ICBAInRleHQveC12Y2FyZCIsCi0gICAgICAgIEAidGV4dC9kaXJlY3RvcnkiLAotICAgICAgICBA
InRleHQvbGRpZiIsICAgICAgICAgICAvLyBOZXRzY2FwZSBBZGRyZXNzIEJvb2sKLSAgICAgICAg
QCJ0ZXh0L3FpZiIsICAgICAgICAgICAgLy8gUXVpY2tlbgotICAgICAgICBAInRleHQveC1xaWYi
LAotICAgICAgICBAInRleHQveC1jc3YiLCAgICAgICAgICAvLyBDU1YgKGZvciBBZGRyZXNzIEJv
b2sgYW5kIE1pY3Jvc29mdCBPdXRsb29rKQotICAgICAgICBAInRleHQveC12Y2YiLCAgICAgICAg
ICAvLyB2Q2FyZCB0eXBlIHVzZWQgaW4gU3VuIGFmZmluaXR5IGFwcAotICAgICAgICBAInRleHQv
cnRmIiwgICAgICAgICAgICAvLyBSaWNoIFRleHQgRm9ybWF0Ci0gICAgICAgIG5pbF07Ci19Ci0K
LSsgKHZvaWQpX3Bvc3RGbGFnc0NoYW5nZWRFdmVudDooTlNFdmVudCAqKWZsYWdzQ2hhbmdlZEV2
ZW50Ci17Ci0gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yOiA8cmRhcjovL3Byb2JsZW0v
Mjk4MTYxOT4gTlNSZXNwb25kZXJfUHJpdmF0ZSBzaG91bGQgaW5jbHVkZSBub3RpZmljYXRpb24g
Zm9yIEZsYWdzQ2hhbmdlZAotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNl
RXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgbG9jYXRpb246W1tmbGFnc0NoYW5n
ZWRFdmVudCB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6W05TRXZlbnQgbW91c2VMb2NhdGlv
bl1dCi0gICAgICAgIG1vZGlmaWVyRmxhZ3M6W2ZsYWdzQ2hhbmdlZEV2ZW50IG1vZGlmaWVyRmxh
Z3NdCi0gICAgICAgIHRpbWVzdGFtcDpbZmxhZ3NDaGFuZ2VkRXZlbnQgdGltZXN0YW1wXQotICAg
ICAgICB3aW5kb3dOdW1iZXI6W2ZsYWdzQ2hhbmdlZEV2ZW50IHdpbmRvd051bWJlcl0KLSAgICAg
ICAgY29udGV4dDpbZmxhZ3NDaGFuZ2VkRXZlbnQgY29udGV4dF0KLSAgICAgICAgZXZlbnROdW1i
ZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07Ci0KLSAgICAvLyBQcmV0ZW5kIGl0J3MgYSBt
b3VzZSBtb3ZlLgotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0KLSAg
ICAgICAgcG9zdE5vdGlmaWNhdGlvbk5hbWU6V0tNb3VzZU1vdmVkTm90aWZpY2F0aW9uKCkgb2Jq
ZWN0OnNlbGYKLSAgICAgICAgdXNlckluZm86W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9i
amVjdDpmYWtlRXZlbnQgZm9yS2V5OkAiTlNFdmVudCJdXTsKLX0KLQotLSAoaWQpX2JyaWRnZQot
ewotICAgIC8vIFRoaXMgbWV0aG9kIGV4aXN0cyB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdp
dGggTGVvcGFyZCdzIERpY3Rpb25hcnkuYXBwLCBzaW5jZSBpdAotICAgIC8vIGNhbGxzIF9icmlk
Z2UgdG8gZ2V0IGFjY2VzcyB0byBjb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6IGFuZCBjb252ZXJ0
RE9NUmFuZ2VUb05TUmFuZ2U6LgotICAgIC8vIFJldHVybiB0aGUgV2ViRnJhbWUsIHdoaWNoIGlt
cGxlbWVudHMgdGhlIGNvbXBhdGliaWxpdHkgbWV0aG9kcy4gPHJkYXI6Ly9wcm9ibGVtLzYwMDIx
NjA+Ci0gICAgcmV0dXJuIFtzZWxmIF9mcmFtZV07Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZU1vdXNl
b3ZlcldpdGhGYWtlRXZlbnQKLXsKLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlTW91c2VvdmVyVGlt
ZXJdOwotICAgIAotICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRX
aXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgbG9jYXRpb246W1tzZWxmIHdpbmRvd10gY29u
dmVydFNjcmVlblRvQmFzZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KLSAgICAgICAgbW9kaWZp
ZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KLSAgICAgICAgdGlt
ZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQotICAgICAgICB3
aW5kb3dOdW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0
OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQotICAgICAgICBldmVudE51bWJlcjowIGNs
aWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKLSAgICAKLSAgICBbc2VsZiBfdXBkYXRlTW91c2VvdmVy
V2l0aEV2ZW50OmZha2VFdmVudF07Ci19Ci0KLXN0YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJU
aW1lckNhbGxiYWNrKENGUnVuTG9vcFRpbWVyUmVmIHRpbWVyLCB2b2lkICppbmZvKQotewotICAg
IFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdlYkhUTUxWaWV3ICopaW5mbzsKLSAgICAKLSAgICBbdmll
dyBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudF07Ci19Ci0KLS0gKHZvaWQpX2ZyYW1lT3JC
b3VuZHNDaGFuZ2VkCi17Ci0gICAgTlNQb2ludCBvcmlnaW4gPSBbW3NlbGYgc3VwZXJ2aWV3XSBi
b3VuZHNdLm9yaWdpbjsKLSAgICBpZiAoIU5TRXF1YWxQb2ludHMoX3ByaXZhdGUtPmxhc3RTY3Jv
bGxQb3NpdGlvbiwgb3JpZ2luKSkgewotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5zZW5kU2Nyb2xsRXZlbnQoKTsKLSAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBl
bmRSZXZlcnRpbmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotICAgICAgICAKLSAgICAgICAgV2Vi
VmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICAgICAgW1t3ZWJWaWV3IF9VSURl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZGlkU2Nyb2xsRG9jdW1lbnRJbkZyYW1l
Vmlldzpbc2VsZiBfZnJhbWVWaWV3XV07Ci0gICAgfQotICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xs
UG9zaXRpb24gPSBvcmlnaW47Ci0KLSAgICBpZiAoW3NlbGYgd2luZG93XSAmJiAhX3ByaXZhdGUt
PmNsb3NlZCAmJiAhX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyKSB7Ci0gICAgICAgIENG
UnVuTG9vcFRpbWVyQ29udGV4dCBjb250ZXh0ID0geyAwLCBzZWxmLCBOVUxMLCBOVUxMLCBOVUxM
IH07Ci0gICAgICAgIAotICAgICAgICAvLyBVc2UgYSAxMDBtcyBkZWxheSBzbyB0aGF0IHRoZSBz
eW50aGV0aWMgbW91c2Ugb3ZlciB1cGRhdGUgZG9lc24ndCBjYXVzZSBjdXJzb3IgdGhyYXNoaW5n
IHdoZW4gcGFnZXMgYXJlIGxvYWRpbmcKLSAgICAgICAgLy8gYW5kIHNjcm9sbGluZyByYXBpZGx5
IGJhY2sgdG8gYmFjay4KLSAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyID0g
Q0ZSdW5Mb29wVGltZXJDcmVhdGUoTlVMTCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgKyAw
LjEsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWNrLCAmY29udGV4
dCk7Ci0gICAgICAgIENGUnVuTG9vcEFkZFRpbWVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgX3By
aXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAg
IH0KLX0KLQotLSAodm9pZClfc2V0QXNpZGVTdWJ2aWV3cwotewotICAgIEFTU0VSVCghX3ByaXZh
dGUtPnN1YnZpZXdzU2V0QXNpZGUpOwotICAgIEFTU0VSVChfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3
cyA9PSBuaWwpOwotICAgIF9wcml2YXRlLT5zYXZlZFN1YnZpZXdzID0gX3N1YnZpZXdzOwotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdGhl
IGxheWVyLWhvc3RpbmcgdmlldyBpbiB0aGUgc3Vidmlld3MsIG90aGVyd2lzZSB0aGUgbGF5ZXJz
IGZsYXNoLgotICAgIGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykgewotICAgICAgICBO
U0FycmF5KiBuZXdTdWJ2aWV3cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3RzOl9w
cml2YXRlLT5sYXllckhvc3RpbmdWaWV3LCBuaWxdOwotICAgICAgICBfc3Vidmlld3MgPSBuZXdT
dWJ2aWV3czsKLSAgICB9IGVsc2UKLSAgICAgICAgX3N1YnZpZXdzID0gbmlsOwotI2Vsc2UKLSAg
ICBfc3Vidmlld3MgPSBuaWw7Ci0jZW5kaWYgICAgCi0gICAgX3ByaXZhdGUtPnN1YnZpZXdzU2V0
QXNpZGUgPSBZRVM7Ci0gfQotIAotIC0gKHZvaWQpX3Jlc3RvcmVTdWJ2aWV3cwotIHsKLSAgICBB
U1NFUlQoX3ByaXZhdGUtPnN1YnZpZXdzU2V0QXNpZGUpOwotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLSAgICBpZiAoX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcpIHsKLSAgICAg
ICAgW19zdWJ2aWV3cyByZWxlYXNlXTsKLSAgICAgICAgX3N1YnZpZXdzID0gX3ByaXZhdGUtPnNh
dmVkU3Vidmlld3M7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKF9zdWJ2aWV3cyA9PSBu
aWwpOwotICAgICAgICBfc3Vidmlld3MgPSBfcHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKLSAgICB9
Ci0jZWxzZQotICAgIEFTU0VSVChfc3Vidmlld3MgPT0gbmlsKTsKLSAgICBfc3Vidmlld3MgPSBf
cHJpdmF0ZS0+c2F2ZWRTdWJ2aWV3czsKLSNlbmRpZiAgICAKLSAgICBfcHJpdmF0ZS0+c2F2ZWRT
dWJ2aWV3cyA9IG5pbDsKLSAgICBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSA9IE5POwotfQot
Ci0jaWZuZGVmIE5ERUJVRwotCi0tICh2b2lkKWRpZEFkZFN1YnZpZXc6KE5TVmlldyAqKXN1YnZp
ZXcKLXsKLSAgICBpZiAoX3ByaXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MpCi0gICAgICAgIExP
RyhWaWV3LCAiQSB2aWV3IG9mIGNsYXNzICVzIHdhcyBhZGRlZCBkdXJpbmcgc3VidmlldyBlbnVt
ZXJhdGlvbiBmb3IgbGF5b3V0IG9yIHByaW50aW5nIG1vZGUgY2hhbmdlLiBUaGlzIHZpZXcgbWln
aHQgcGFpbnQgd2l0aG91dCBmaXJzdCByZWNlaXZpbmcgbGF5b3V0LiIsIG9iamVjdF9nZXRDbGFz
c05hbWUoW3N1YnZpZXcgY2xhc3NdKSk7Ci19Ci0KLS0gKHZvaWQpd2lsbFJlbW92ZVN1YnZpZXc6
KE5TVmlldyAqKXN1YnZpZXcKLXsKLSAgICAvLyBIYXZlIHRvIG51bGwtY2hlY2sgX3ByaXZhdGUs
IHNpbmNlIHRoaXMgY2FuIGJlIGNhbGxlZCB2aWEgLWRlYWxsb2Mgd2hlbgotICAgIC8vIGNsZWFu
aW5nIHVwIHRoZSB0aGUgbGF5ZXJIb3N0aW5nVmlldy4KLSAgICBpZiAoX3ByaXZhdGUgJiYgX3By
aXZhdGUtPmVudW1lcmF0aW5nU3Vidmlld3MpCi0gICAgICAgIExPRyhWaWV3LCAiQSB2aWV3IG9m
IGNsYXNzICVzIHdhcyByZW1vdmVkIGR1cmluZyBzdWJ2aWV3IGVudW1lcmF0aW9uIGZvciBsYXlv
dXQgb3IgcHJpbnRpbmcgbW9kZSBjaGFuZ2UuIFdlIHdpbGwgc3RpbGwgZG8gbGF5b3V0IG9yIHRo
ZSBwcmludGluZyBtb2RlIGNoYW5nZSBldmVuIHRob3VnaCB0aGlzIHZpZXcgaXMgbm8gbG9uZ2Vy
IGluIHRoZSB2aWV3IGhpZXJhcmNoeS4iLCBvYmplY3RfZ2V0Q2xhc3NOYW1lKFtzdWJ2aWV3IGNs
YXNzXSkpOwotfQotCi0jZW5kaWYKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLS8vIFRo
aXMgaXMgY2FsbGVkIHdoZW4gd2UgYXJlIGFib3V0IHRvIGRyYXcsIGJ1dCBiZWZvcmUgb3VyIGRp
cnR5IHJlY3QgaXMgcHJvcGFnYXRlZCB0byBvdXIgYW5jZXN0b3JzLgotLy8gVGhhdCdzIHRoZSBw
ZXJmZWN0IHRpbWUgdG8gZG8gYSBsYXlvdXQsIGV4Y2VwdCB0aGF0IGlkZWFsbHkgd2UnZCB3YW50
IHRvIGJlIHN1cmUgdGhhdCB3ZSdyZSBkaXJ0eQotLy8gYmVmb3JlIGRvaW5nIGl0LiBBcyBhIGNv
bXByb21pc2UsIHdoZW4gd2UncmUgb3BhcXVlIHdlIGRvIHRoZSBsYXlvdXQgb25seSB3aGVuIGFj
dHVhbGx5IGFza2VkIHRvCi0vLyBkcmF3LCBidXQgd2hlbiB3ZSdyZSB0cmFuc3BhcmVudCB3ZSBk
byB0aGUgbGF5b3V0IGF0IHRoaXMgc3RhZ2Ugc28gdmlld3MgYmVoaW5kIHVzIGtub3cgdGhhdCB0
aGV5Ci0vLyBuZWVkIHRvIGJlIHJlZHJhd24gKGluIGNhc2UgdGhlIGxheW91dCBjYXVzZXMgc29t
ZSB0aGluZ3MgdG8gZ2V0IGRpcnRpZWQpLgotLSAodm9pZClfcHJvcGFnYXRlRGlydHlSZWN0c1Rv
T3BhcXVlQW5jZXN0b3JzCi17Ci0gICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIGRyYXdzQmFja2dy
b3VuZF0pCi0gICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotICAg
IFtzdXBlciBfcHJvcGFnYXRlRGlydHlSZWN0c1RvT3BhcXVlQW5jZXN0b3JzXTsKLX0KLQotI2Vs
c2UKLQotLSAodm9pZCl2aWV3V2lsbERyYXcKLXsKLSAgICAvLyBPbiB3aW5kb3cgY2xvc2Ugd2Ug
d2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZGF0YXNvdXJjZSBpcyBuaWwsIHRoZW4gaGl0IGFuIGFz
c2VydCBpbiBfdG9wSFRNTFZpZXcKLSAgICAvLyBTbyBjaGVjayBpZiB0aGUgZGF0YVNvdXJjZSBp
cyBuaWwgYmVmb3JlIGNhbGxpbmcgW3NlbGYgX2lzVG9wSFRNTFZpZXddLCB0aGlzIGNhbiBiZSBy
ZW1vdmVkCi0gICAgLy8gb25jZSB0aGUgRklYTUUgaW4gX2lzVG9wSFRNTFZpZXcgaXMgZml4ZWQu
Ci0gICAgaWYgKF9wcml2YXRlLT5kYXRhU291cmNlICYmIFtzZWxmIF9pc1RvcEhUTUxWaWV3XSkK
LSAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0gICAgW3N1cGVy
IHZpZXdXaWxsRHJhd107Ci19Ci0KLSNlbmRpZgotCi0vLyBEb24ndCBsZXQgQXBwS2l0IGV2ZW4g
ZHJhdyBzdWJ2aWV3cy4gV2UgdGFrZSBjYXJlIG9mIHRoYXQuCi0tICh2b2lkKV9yZWN1cnNpdmVE
aXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OihOU1JlY3QpcmVjdCBpc1Zpc2libGVS
ZWN0OihCT09MKWlzVmlzaWJsZVJlY3QgcmVjdElzVmlzaWJsZVJlY3RGb3JWaWV3OihOU1ZpZXcg
Kil2aXNpYmxlVmlldyB0b3BWaWV3OihCT09MKXRvcFZpZXcKLXsKLSAgICAvLyBUaGlzIGhlbHBz
IHdoZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdlciBwcmludCBwcm9jZXNzLgotICAgIC8v
IElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hhdCB3ZSdyZSBwcmludGluZywgdGhlbiB3
ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KLSAgICBCT09MIHdhc0luUHJpbnRpbmdNb2Rl
ID0gX3ByaXZhdGUtPnByaW50aW5nOwotICAgIEJPT0wgaXNQcmludGluZyA9ICFbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dOwotICAgIGlmIChpc1ByaW50
aW5nKSB7Ci0gICAgICAgIGlmICghd2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgICAgICBbc2Vs
ZiBfd2ViX3NldFByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFtzZWxmIF93ZWJfbGF5b3V0SWZOZWVkZWRS
ZWN1cnNpdmVdOwotI2VuZGlmCi0gICAgfSBlbHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkKLSAg
ICAgICAgW3NlbGYgX3dlYl9jbGVhclByaW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0KLSNpZmRlZiBC
VUlMRElOR19PTl9USUdFUgotCi0gICAgLy8gQmVjYXVzZSBUaWdlciBkb2VzIG5vdCBoYXZlIHZp
ZXdXaWxsRHJhdyB3ZSBuZWVkIHRvIGRvIGxheW91dCBoZXJlLgotICAgIFtzZWxmIF93ZWJfbGF5
b3V0SWZOZWVkZWRSZWN1cnNpdmVdOwotICAgIFtfc3Vidmlld3MgbWFrZU9iamVjdHNQZXJmb3Jt
U2VsZWN0b3I6QHNlbGVjdG9yKF9wcm9wYWdhdGVEaXJ0eVJlY3RzVG9PcGFxdWVBbmNlc3RvcnMp
XTsKLQotI2VuZGlmCi0KLSAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107Ci0gICAgW3N1cGVy
IF9yZWN1cnNpdmVEaXNwbGF5UmVjdElmTmVlZGVkSWdub3JpbmdPcGFjaXR5OnJlY3QgaXNWaXNp
YmxlUmVjdDppc1Zpc2libGVSZWN0IHJlY3RJc1Zpc2libGVSZWN0Rm9yVmlldzp2aXNpYmxlVmll
dyB0b3BWaWV3OnRvcFZpZXddOwotICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOwotCi0gICAg
aWYgKHdhc0luUHJpbnRpbmdNb2RlICE9IGlzUHJpbnRpbmcpIHsKLSAgICAgICAgaWYgKHdhc0lu
UHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01vZGVSZWN1
cnNpdmVdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRp
bmdNb2RlUmVjdXJzaXZlXTsKLSAgICB9Ci19Ci0KLS8vIERvbid0IGxldCBBcHBLaXQgZXZlbiBk
cmF3IHN1YnZpZXdzLiBXZSB0YWtlIGNhcmUgb2YgdGhhdC4KLS0gKHZvaWQpX3JlY3Vyc2l2ZURp
c3BsYXlBbGxEaXJ0eVdpdGhMb2NrRm9jdXM6KEJPT0wpbmVlZHNMb2NrRm9jdXMgdmlzUmVjdDoo
TlNSZWN0KXZpc1JlY3QKLXsKLSAgICBCT09MIG5lZWRUb1NldEFzaWRlU3Vidmlld3MgPSAhX3By
aXZhdGUtPnN1YnZpZXdzU2V0QXNpZGU7Ci0KLSAgICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0g
X3ByaXZhdGUtPnByaW50aW5nOwotICAgIEJPT0wgaXNQcmludGluZyA9ICFbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHREcmF3aW5nVG9TY3JlZW5dOwotCi0gICAgaWYgKG5lZWRUb1Nl
dEFzaWRlU3Vidmlld3MpIHsKLSAgICAgICAgLy8gVGhpcyBoZWxwcyB3aGVuIHdlIHByaW50IGFz
IHBhcnQgb2YgYSBsYXJnZXIgcHJpbnQgcHJvY2Vzcy4KLSAgICAgICAgLy8gSWYgdGhlIFdlYkhU
TUxWaWV3IGl0c2VsZiBpcyB3aGF0IHdlJ3JlIHByaW50aW5nLCB0aGVuIHdlIHdpbGwgbmV2ZXIg
aGF2ZSB0byBkbyB0aGlzLgotICAgICAgICBpZiAoaXNQcmludGluZykgewotICAgICAgICAgICAg
aWYgKCF3YXNJblByaW50aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBbc2VsZiBfd2ViX3NldFBy
aW50aW5nTW9kZVJlY3Vyc2l2ZV07Ci0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vy
c2l2ZV07Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmICh3YXNJblByaW50aW5nTW9kZSkKLSAg
ICAgICAgICAgIFtzZWxmIF93ZWJfY2xlYXJQcmludGluZ01vZGVSZWN1cnNpdmVdOwotCi0jaWZk
ZWYgQlVJTERJTkdfT05fVElHRVIKLQotICAgICAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMgbm90
IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQgdG8gZG8gbGF5b3V0IGhlcmUuCi0gICAgICAgIE5T
UmVjdCBib3VuZHNCZWZvcmVMYXlvdXQgPSBbc2VsZiBib3VuZHNdOwotICAgICAgICBpZiAoIU5T
SXNFbXB0eVJlY3QodmlzUmVjdCkpCi0gICAgICAgICAgICBbc2VsZiBfd2ViX2xheW91dElmTmVl
ZGVkUmVjdXJzaXZlXTsKLQotICAgICAgICAvLyBJZiBsYXlvdXQgY2hhbmdlcyB0aGUgdmlldydz
IGJvdW5kcywgdGhlbiB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgdmlzUmVjdC4KLSAgICAgICAg
Ly8gVGhhdCdzIGJlY2F1c2UgdGhlIHZpc1JlY3QgcGFzc2VkIHRvIHVzIHdhcyBiYXNlZCBvbiB0
aGUgYm91bmRzIGF0IHRoZSB0aW1lCi0gICAgICAgIC8vIHdlIHdlcmUgY2FsbGVkLiBUaGlzIG1l
dGhvZCBpcyBvbmx5IGRpc3BsYXllZCB0byBkcmF3ICJhbGwiLCBzbyBpdCdzIHNhZmUKLSAgICAg
ICAgLy8gdG8ganVzdCBjYWxsIHZpc2libGVSZWN0IHRvIGNvbXB1dGUgdGhlIGVudGlyZSByZWN0
YW5nbGUuCi0gICAgICAgIGlmICghTlNFcXVhbFJlY3RzKGJvdW5kc0JlZm9yZUxheW91dCwgW3Nl
bGYgYm91bmRzXSkpCi0gICAgICAgICAgICB2aXNSZWN0ID0gW3NlbGYgdmlzaWJsZVJlY3RdOwot
Ci0jZW5kaWYKLQotICAgICAgICBbc2VsZiBfc2V0QXNpZGVTdWJ2aWV3c107Ci0gICAgfQotCi0g
ICAgW3N1cGVyIF9yZWN1cnNpdmVEaXNwbGF5QWxsRGlydHlXaXRoTG9ja0ZvY3VzOm5lZWRzTG9j
a0ZvY3VzIHZpc1JlY3Q6dmlzUmVjdF07Ci0KLSAgICBpZiAobmVlZFRvU2V0QXNpZGVTdWJ2aWV3
cykgewotICAgICAgICBpZiAod2FzSW5QcmludGluZ01vZGUgIT0gaXNQcmludGluZykgewotICAg
ICAgICAgICAgaWYgKHdhc0luUHJpbnRpbmdNb2RlKQotICAgICAgICAgICAgICAgIFtzZWxmIF93
ZWJfc2V0UHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBbc2VsZiBfd2ViX2NsZWFyUHJpbnRpbmdNb2RlUmVjdXJzaXZlXTsKLSAgICAgICAg
fQotCi0gICAgICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOwotICAgIH0KLX0KLQotLy8gRG9u
J3QgbGV0IEFwcEtpdCBldmVuIGRyYXcgc3Vidmlld3MuIFdlIHRha2UgY2FyZSBvZiB0aGF0Lgot
LSAodm9pZClfcmVjdXJzaXZlOihCT09MKXJlY3Vyc2UgZGlzcGxheVJlY3RJZ25vcmluZ09wYWNp
dHk6KE5TUmVjdClkaXNwbGF5UmVjdCBpbkNvbnRleHQ6KE5TR3JhcGhpY3NDb250ZXh0ICopY29u
dGV4dCB0b3BWaWV3OihCT09MKXRvcFZpZXcKLXsKLSNpZmRlZiBCVUlMRElOR19PTl9USUdFUiAK
LSAgICAvLyBCZWNhdXNlIFRpZ2VyIGRvZXMgbm90IGhhdmUgdmlld1dpbGxEcmF3IHdlIG5lZWQg
dG8gZG8gbGF5b3V0IGhlcmUuCi0gICAgW3NlbGYgX3dlYl9sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2
ZV07Ci0jZW5kaWYKLQotICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKLSAgICBbc3VwZXIg
X3JlY3Vyc2l2ZTpyZWN1cnNlIGRpc3BsYXlSZWN0SWdub3JpbmdPcGFjaXR5OmRpc3BsYXlSZWN0
IGluQ29udGV4dDpjb250ZXh0IHRvcFZpZXc6dG9wVmlld107Ci0gICAgW3NlbGYgX3Jlc3RvcmVT
dWJ2aWV3c107Ci19Ci0KLS0gKEJPT0wpX2luc2lkZUFub3RoZXJIVE1MVmlldwotewotICAgIHJl
dHVybiBzZWxmICE9IFtzZWxmIF90b3BIVE1MVmlld107Ci19Ci0KLS0gKE5TVmlldyAqKWhpdFRl
c3Q6KE5TUG9pbnQpcG9pbnQKLXsKLSAgICAvLyBXZWJIVE1MVmlldyBvYmplY3RzIGhhbmRsZSBh
bGwgZXZlbnRzIGZvciBvYmplY3RzIGluc2lkZSB0aGVtLgotICAgIC8vIFRvIGdldCB0aG9zZSBl
dmVudHMsIHdlIHByZXZlbnQgaGl0IHRlc3RpbmcgZnJvbSBBcHBLaXQuCi0KLSAgICAvLyBCdXQg
dGhlcmUgYXJlIHRocmVlIGV4Y2VwdGlvbnMgdG8gdGhpczoKLSAgICAvLyAgIDEpIEZvciByaWdo
dCBtb3VzZSBjbGlja3MgYW5kIGNvbnRyb2wgY2xpY2tzIHdlIGRvbid0IHlldCBoYXZlIGFuIGlt
cGxlbWVudGF0aW9uCi0gICAgLy8gICAgICB0aGF0IHdvcmtzIGZvciBuZXN0ZWQgdmlld3MsIHNv
IHdlIGxldCB0aGUgaGl0IHRlc3RpbmcgZ28gdGhyb3VnaCB0aGUKLSAgICAvLyAgICAgIHN0YW5k
YXJkIE5TVmlldyBjb2RlIHBhdGggKG5lZWRzIHRvIGJlIGZpeGVkLCBzZWUgYnVnIDQzNjE2MTgp
LgotICAgIC8vICAgMikgSmF2YSBkZXBlbmRzIG9uIGRvaW5nIGEgaGl0IHRlc3QgaW5zaWRlIGl0
J3MgbW91c2UgbW92ZWQgaGFuZGxpbmcsCi0gICAgLy8gICAgICBzbyB3ZSBsZXQgdGhlIGhpdCB0
ZXN0aW5nIGdvIHRocm91Z2ggdGhlIHN0YW5kYXJkIE5TVmlldyBjb2RlIHBhdGgKLSAgICAvLyAg
ICAgIHdoZW4gdGhlIGN1cnJlbnQgZXZlbnQgaXMgYSBtb3VzZSBtb3ZlIChleGNlcHQgd2hlbiB3
ZSBhcmUgY2FsbGluZwotICAgIC8vICAgICAgZnJvbSBfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50
LCBzbyB3ZSBoYXZlIHRvIHVzZSBhIGdsb2JhbCwKLSAgICAvLyAgICAgIGZvcmNlV2ViSFRNTFZp
ZXdIaXRUZXN0LCBmb3IgdGhhdCkKLSAgICAvLyAgIDMpIFRoZSBhY2NlcHRzRmlyc3RNb3VzZTog
YW5kIHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDogbWV0aG9kcwotICAgIC8vICAg
ICAgYm90aCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggdmlldyB0byBjaGVjayB3aXRoIGluc2lk
ZSB0aGUgV2ViSFRNTFZpZXcuCi0gICAgLy8gICAgICBUaGV5IHVzZSBhIGdsb2JhbCB0byBjaGFu
Z2UgdGhlIGJlaGF2aW9yIG9mIGhpdFRlc3Q6IHNvIHRoZXkgY2FuIGdldCB0aGUKLSAgICAvLyAg
ICAgIHJpZ2h0IHZpZXcuIFRoZSBnbG9iYWwgaXMgZm9yY2VOU1ZpZXdIaXRUZXN0IGFuZCB0aGUg
bWV0aG9kIHRoZXkgdXNlIHRvCi0gICAgLy8gICAgICBkbyB0aGUgaGl0IHRlc3RpbmcgaXMgX2hp
dFZpZXdGb3JFdmVudDouIChCdXQgdGhpcyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseQotICAgIC8v
ICAgICAgd2hlbiB0aGVyZSBpcyBIVE1MIG92ZXJsYXBwaW5nIHRoZSB2aWV3LCBzZWUgYnVnIDQz
NjE2MjYpCi0gICAgLy8gICA0KSBOU0FjY2Vzc2liaWxpdHlIaXRUZXN0IHJlbGllcyBvbiB0aGlz
IGZvciBjaGVja2luZyB0aGUgY3Vyc29yIHBvc2l0aW9uLgotICAgIC8vICAgICAgT3VyIGNoZWNr
IGZvciB0aGF0IGlzIHdoZXRoZXIgdGhlIGV2ZW50IGlzIE5TRmxhZ3NDaGFuZ2VkLiAgVGhpcyB3
b3JrcwotICAgIC8vICAgICAgZm9yIFZvaWNlT3ZlcidzIGNudGwtb3B0LWY1IGNvbW1hbmQgKG1v
dmUgZm9jdXMgdG8gaXRlbSB1bmRlciBjdXJzb3IpCi0gICAgLy8gICAgICBhbmQgRGljdGlvbmFy
eSdzIGNtZC1jbnRsLUQgKG9wZW4gZGljdGlvbmFyeSBwb3B1cCBmb3IgaXRlbSB1bmRlciBjdXJz
b3IpLgotICAgIC8vICAgICAgVGhpcyBpcyBvZiBjb3Vyc2UgYSBoYWNrLgotCi0gICAgQk9PTCBj
YXB0dXJlSGl0c09uU3Vidmlld3M7Ci0gICAgaWYgKGZvcmNlTlNWaWV3SGl0VGVzdCkKLSAgICAg
ICAgY2FwdHVyZUhpdHNPblN1YnZpZXdzID0gTk87Ci0gICAgZWxzZSBpZiAoZm9yY2VXZWJIVE1M
Vmlld0hpdFRlc3QpCi0gICAgICAgIGNhcHR1cmVIaXRzT25TdWJ2aWV3cyA9IFlFUzsKLSAgICBl
bHNlIHsKLSAgICAgICAgTlNFdmVudCAqZXZlbnQgPSBbW3NlbGYgd2luZG93XSBjdXJyZW50RXZl
bnRdOwotICAgICAgICBjYXB0dXJlSGl0c09uU3Vidmlld3MgPSAhKFtldmVudCB0eXBlXSA9PSBO
U01vdXNlTW92ZWQKLSAgICAgICAgICAgIHx8IFtldmVudCB0eXBlXSA9PSBOU1JpZ2h0TW91c2VE
b3duCi0gICAgICAgICAgICB8fCAoW2V2ZW50IHR5cGVdID09IE5TTGVmdE1vdXNlRG93biAmJiAo
W2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNDb250cm9sS2V5TWFzaykgIT0gMCkKLSAgICAgICAg
ICAgIHx8IFtldmVudCB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCk7Ci0gICAgfQotCi0gICAgaWYg
KCFjYXB0dXJlSGl0c09uU3Vidmlld3MpCi0gICAgICAgIHJldHVybiBbc3VwZXIgaGl0VGVzdDpw
b2ludF07Ci0gICAgaWYgKFtbc2VsZiBzdXBlcnZpZXddIG1vdXNlOnBvaW50IGluUmVjdDpbc2Vs
ZiBmcmFtZV1dKQotICAgICAgICByZXR1cm4gc2VsZjsKLSAgICByZXR1cm4gbmlsOwotfQotCi0t
ICh2b2lkKV9jbGVhckxhc3RIaXRWaWV3SWZTZWxmCi17Ci0gICAgaWYgKGxhc3RIaXRWaWV3ID09
IHNlbGYpCi0gICAgICAgIGxhc3RIaXRWaWV3ID0gbmlsOwotfQotCi0tIChOU1RyYWNraW5nUmVj
dFRhZylhZGRUcmFja2luZ1JlY3Q6KE5TUmVjdClyZWN0IG93bmVyOihpZClvd25lciB1c2VyRGF0
YToodm9pZCAqKWRhdGEgYXNzdW1lSW5zaWRlOihCT09MKWFzc3VtZUluc2lkZQotewotICAgIEFT
U0VSVChfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgPT0gbmlsKTsKLSAgICBfcHJpdmF0ZS0+
dHJhY2tpbmdSZWN0T3duZXIgPSBvd25lcjsKLSAgICBfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNl
ckRhdGEgPSBkYXRhOwotICAgIHJldHVybiBUUkFDS0lOR19SRUNUX1RBRzsKLX0KLQotLSAoTlNU
cmFja2luZ1JlY3RUYWcpX2FkZFRyYWNraW5nUmVjdDooTlNSZWN0KXJlY3Qgb3duZXI6KGlkKW93
bmVyIHVzZXJEYXRhOih2b2lkICopZGF0YSBhc3N1bWVJbnNpZGU6KEJPT0wpYXNzdW1lSW5zaWRl
IHVzZVRyYWNraW5nTnVtOihpbnQpdGFnCi17Ci0gICAgQVNTRVJUKHRhZyA9PSAwIHx8IHRhZyA9
PSBUUkFDS0lOR19SRUNUX1RBRyk7Ci0gICAgQVNTRVJUKF9wcml2YXRlLT50cmFja2luZ1JlY3RP
d25lciA9PSBuaWwpOwotICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RPd25lciA9IG93bmVyOwot
ICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9IGRhdGE7Ci0gICAgcmV0dXJuIFRS
QUNLSU5HX1JFQ1RfVEFHOwotfQotCi0tICh2b2lkKV9hZGRUcmFja2luZ1JlY3RzOihOU1JlY3Qg
KilyZWN0cyBvd25lcjooaWQpb3duZXIgdXNlckRhdGFMaXN0Oih2b2lkICoqKXVzZXJEYXRhTGlz
dCBhc3N1bWVJbnNpZGVMaXN0OihCT09MICopYXNzdW1lSW5zaWRlTGlzdCB0cmFja2luZ051bXM6
KE5TVHJhY2tpbmdSZWN0VGFnICopdHJhY2tpbmdOdW1zIGNvdW50OihpbnQpY291bnQKLXsKLSAg
ICBBU1NFUlQoY291bnQgPT0gMSk7Ci0gICAgQVNTRVJUKHRyYWNraW5nTnVtc1swXSA9PSAwIHx8
IHRyYWNraW5nTnVtc1swXSA9PSBUUkFDS0lOR19SRUNUX1RBRyk7Ci0gICAgQVNTRVJUKF9wcml2
YXRlLT50cmFja2luZ1JlY3RPd25lciA9PSBuaWwpOwotICAgIF9wcml2YXRlLT50cmFja2luZ1Jl
Y3RPd25lciA9IG93bmVyOwotICAgIF9wcml2YXRlLT50cmFja2luZ1JlY3RVc2VyRGF0YSA9IHVz
ZXJEYXRhTGlzdFswXTsKLSAgICB0cmFja2luZ051bXNbMF0gPSBUUkFDS0lOR19SRUNUX1RBRzsK
LX0KLQotLSAodm9pZClyZW1vdmVUcmFja2luZ1JlY3Q6KE5TVHJhY2tpbmdSZWN0VGFnKXRhZwot
ewotICAgIGlmICh0YWcgPT0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChfcHJp
dmF0ZSAmJiAodGFnID09IFRSQUNLSU5HX1JFQ1RfVEFHKSkgewotICAgICAgICBfcHJpdmF0ZS0+
dHJhY2tpbmdSZWN0T3duZXIgPSBuaWw7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKF9wcml2YXRlICYmICh0YWcgPT0gX3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnKSkgewot
ICAgICAgICBbc3VwZXIgcmVtb3ZlVHJhY2tpbmdSZWN0OnRhZ107Ci0gICAgICAgIF9wcml2YXRl
LT5sYXN0VG9vbFRpcFRhZyA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gSWYgYW55IG90aGVyIHRyYWNraW5nIHJlY3QgaXMgYmVpbmcgcmVtb3ZlZCwgd2UgZG9uJ3Qg
a25vdyBob3cgaXQgd2FzIGNyZWF0ZWQKLSAgICAvLyBhbmQgaXQncyBwb3NzaWJsZSB0aGVyZSdz
IGEgbGVhayBpbnZvbHZlZCAoc2VlIDM1MDAyMTcpCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci19Ci0KLS0gKHZvaWQpX3JlbW92ZVRyYWNraW5nUmVjdHM6KE5TVHJhY2tpbmdSZWN0VGFnICop
dGFncyBjb3VudDooaW50KWNvdW50Ci17Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKLSAgICAgICAgaW50IHRhZyA9IHRhZ3NbaV07Ci0gICAgICAgIGlmICh0
YWcgPT0gMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQodGFnID09IFRS
QUNLSU5HX1JFQ1RfVEFHKTsKLSAgICAgICAgaWYgKF9wcml2YXRlICE9IG5pbCkgewotICAgICAg
ICAgICAgX3ByaXZhdGUtPnRyYWNraW5nUmVjdE93bmVyID0gbmlsOwotICAgICAgICB9Ci0gICAg
fQotfQotCi0tICh2b2lkKV9zZW5kVG9vbFRpcE1vdXNlRXhpdGVkCi17Ci0gICAgLy8gTm90aGlu
ZyBtYXR0ZXJzIGV4Y2VwdCB3aW5kb3csIHRyYWNraW5nTnVtYmVyLCBhbmQgdXNlckRhdGEuCi0g
ICAgTlNFdmVudCAqZmFrZUV2ZW50ID0gW05TRXZlbnQgZW50ZXJFeGl0RXZlbnRXaXRoVHlwZTpO
U01vdXNlRXhpdGVkCi0gICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KDAsIDApCi0gICAgICAg
IG1vZGlmaWVyRmxhZ3M6MAotICAgICAgICB0aW1lc3RhbXA6MAotICAgICAgICB3aW5kb3dOdW1i
ZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0Ok5VTEwKLSAg
ICAgICAgZXZlbnROdW1iZXI6MAotICAgICAgICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19SRUNU
X1RBRwotICAgICAgICB1c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOwot
ICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFeGl0ZWQ6ZmFrZUV2ZW50XTsK
LX0KLQotLSAodm9pZClfc2VuZFRvb2xUaXBNb3VzZUVudGVyZWQKLXsKLSAgICAvLyBOb3RoaW5n
IG1hdHRlcnMgZXhjZXB0IHdpbmRvdywgdHJhY2tpbmdOdW1iZXIsIGFuZCB1c2VyRGF0YS4KLSAg
ICBOU0V2ZW50ICpmYWtlRXZlbnQgPSBbTlNFdmVudCBlbnRlckV4aXRFdmVudFdpdGhUeXBlOk5T
TW91c2VFbnRlcmVkCi0gICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KDAsIDApCi0gICAgICAg
IG1vZGlmaWVyRmxhZ3M6MAotICAgICAgICB0aW1lc3RhbXA6MAotICAgICAgICB3aW5kb3dOdW1i
ZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0Ok5VTEwKLSAg
ICAgICAgZXZlbnROdW1iZXI6MAotICAgICAgICB0cmFja2luZ051bWJlcjpUUkFDS0lOR19SRUNU
X1RBRwotICAgICAgICB1c2VyRGF0YTpfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0VXNlckRhdGFdOwot
ICAgIFtfcHJpdmF0ZS0+dHJhY2tpbmdSZWN0T3duZXIgbW91c2VFbnRlcmVkOmZha2VFdmVudF07
Ci19Ci0KLS0gKHZvaWQpX3NldFRvb2xUaXA6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgTlNT
dHJpbmcgKnRvb2xUaXAgPSBbc3RyaW5nIGxlbmd0aF0gPT0gMCA/IG5pbCA6IHN0cmluZzsKLSAg
ICBOU1N0cmluZyAqb2xkVG9vbFRpcCA9IF9wcml2YXRlLT50b29sVGlwOwotICAgIGlmICgodG9v
bFRpcCA9PSBuaWwgfHwgb2xkVG9vbFRpcCA9PSBuaWwpID8gdG9vbFRpcCA9PSBvbGRUb29sVGlw
IDogW3Rvb2xUaXAgaXNFcXVhbFRvU3RyaW5nOm9sZFRvb2xUaXBdKSB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKG9sZFRvb2xUaXApIHsKLSAgICAgICAgW3NlbGYgX3NlbmRUb29s
VGlwTW91c2VFeGl0ZWRdOwotICAgICAgICBbb2xkVG9vbFRpcCByZWxlYXNlXTsKLSAgICB9Ci0g
ICAgX3ByaXZhdGUtPnRvb2xUaXAgPSBbdG9vbFRpcCBjb3B5XTsKLSAgICBpZiAodG9vbFRpcCkg
ewotICAgICAgICAvLyBTZWUgcmFkYXIgMzUwMDIxNyBmb3Igd2h5IHdlIHJlbW92ZSBhbGwgdG9v
bHRpcHMgcmF0aGVyIHRoYW4ganVzdCB0aGUgc2luZ2xlIG9uZSB3ZSBjcmVhdGVkLgotICAgICAg
ICBbc2VsZiByZW1vdmVBbGxUb29sVGlwc107Ci0gICAgICAgIE5TUmVjdCB3aWRlT3BlblJlY3Qg
PSBOU01ha2VSZWN0KC0xMDAwMDAsIC0xMDAwMDAsIDIwMDAwMCwgMjAwMDAwKTsKLSAgICAgICAg
X3ByaXZhdGUtPmxhc3RUb29sVGlwVGFnID0gW3NlbGYgYWRkVG9vbFRpcFJlY3Q6d2lkZU9wZW5S
ZWN0IG93bmVyOnNlbGYgdXNlckRhdGE6TlVMTF07Ci0gICAgICAgIFtzZWxmIF9zZW5kVG9vbFRp
cE1vdXNlRW50ZXJlZF07Ci0gICAgfQotfQotCi0tIChOU1N0cmluZyAqKXZpZXc6KE5TVmlldyAq
KXZpZXcgc3RyaW5nRm9yVG9vbFRpcDooTlNUb29sVGlwVGFnKXRhZyBwb2ludDooTlNQb2ludClw
b2ludCB1c2VyRGF0YToodm9pZCAqKWRhdGEKLXsKLSAgICByZXR1cm4gW1tfcHJpdmF0ZS0+dG9v
bFRpcCBjb3B5XSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZU1vdXNlb3Zlcldp
dGhFdmVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKF9wcml2YXRlLT5jbG9zZWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbW2V2ZW50IHdpbmRv
d10gY29udGVudFZpZXddOwotICAgIE5TUG9pbnQgbG9jYXRpb25Gb3JIaXRUZXN0ID0gW1tjb250
ZW50VmlldyBzdXBlcnZpZXddIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10g
ZnJvbVZpZXc6bmlsXTsKLSAgICAKLSAgICBmb3JjZVdlYkhUTUxWaWV3SGl0VGVzdCA9IFlFUzsK
LSAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbY29udGVudFZpZXcgaGl0VGVzdDpsb2NhdGlvbkZvckhp
dFRlc3RdOwotICAgIGZvcmNlV2ViSFRNTFZpZXdIaXRUZXN0ID0gTk87Ci0gICAgCi0gICAgV2Vi
SFRNTFZpZXcgKnZpZXcgPSBuaWw7Ci0gICAgaWYgKFtoaXRWaWV3IGlzS2luZE9mQ2xhc3M6W1dl
YkhUTUxWaWV3IGNsYXNzXV0gJiYgIVtbKFdlYkhUTUxWaWV3ICopaGl0VmlldyBfd2ViVmlld10g
aXNIb3ZlckZlZWRiYWNrU3VzcGVuZGVkXSkKLSAgICAgICAgdmlldyA9IChXZWJIVE1MVmlldyAq
KWhpdFZpZXc7ICAgIAotCi0gICAgaWYgKHZpZXcpCi0gICAgICAgIFt2aWV3IHJldGFpbl07Ci0K
LSAgICBpZiAobGFzdEhpdFZpZXcgIT0gdmlldyAmJiBsYXN0SGl0VmlldyAmJiBbbGFzdEhpdFZp
ZXcgX2ZyYW1lXSkgewotICAgICAgICAvLyBJZiB3ZSBhcmUgbW92aW5nIG91dCBvZiBhIHZpZXcg
KG9yIGZyYW1lKSwgbGV0J3MgcHJldGVuZCB0aGUgbW91c2UgbW92ZWQKLSAgICAgICAgLy8gYWxs
IHRoZSB3YXkgb3V0IG9mIHRoYXQgdmlldy4gQnV0IHdlIGhhdmUgdG8gYWNjb3VudCBmb3Igc2Ny
b2xsaW5nLCBiZWNhdXNlCi0gICAgICAgIC8vIGtodG1sIGRvZXNuJ3QgdW5kZXJzdGFuZCBvdXIg
Y2xpcHBpbmcuCi0gICAgICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtbW1tsYXN0SGl0VmlldyBf
ZnJhbWVdIGZyYW1lVmlld10gX3Njcm9sbFZpZXddIGRvY3VtZW50VmlzaWJsZVJlY3RdOwotICAg
ICAgICBmbG9hdCB5U2Nyb2xsID0gdmlzaWJsZVJlY3Qub3JpZ2luLnk7Ci0gICAgICAgIGZsb2F0
IHhTY3JvbGwgPSB2aXNpYmxlUmVjdC5vcmlnaW4ueDsKLQotICAgICAgICBldmVudCA9IFtOU0V2
ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbjpOU01ha2VQb2ludCgtMSAtIHhTY3JvbGwsIC0xIC0geVNjcm9sbCApCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVu
dF0gbW9kaWZpZXJGbGFnc10KLSAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05T
RGF0ZSB0aW1lSW50ZXJ2YWxTaW5jZVJlZmVyZW5jZURhdGVdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgd2luZG93TnVtYmVyOltbdmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQot
ICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNz
dXJlOjBdOwotICAgICAgICBpZiAoRnJhbWUqIGxhc3RIaXRDb3JlRnJhbWUgPSBjb3JlKFtsYXN0
SGl0VmlldyBfZnJhbWVdKSkKLSAgICAgICAgICAgIGxhc3RIaXRDb3JlRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKLSAgICB9Ci0KLSAgICBsYXN0SGl0VmlldyA9IHZp
ZXc7Ci0KLSAgICBpZiAodmlldykgewotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3ZpZXcgX2ZyYW1lXSkpCi0gICAgICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5tb3VzZU1vdmVkKGV2ZW50KTsKLQotICAgICAgICBbdmlldyByZWxlYXNlXTsKLSAgICB9Ci19
Ci0KLS8vIGtlZXAgaW4gc3luYyB3aXRoIFdlYlBhc3RlYm9hcmRIZWxwZXI6Omluc2VydGFibGVQ
YXN0ZWJvYXJkVHlwZXMKLSsgKE5TQXJyYXkgKilfaW5zZXJ0YWJsZVBhc3RlYm9hcmRUeXBlcwot
ewotICAgIHN0YXRpYyBOU0FycmF5ICp0eXBlcyA9IG5pbDsKLSAgICBpZiAoIXR5cGVzKSB7Ci0g
ICAgICAgIHR5cGVzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6V2ViQXJjaGl2
ZVBib2FyZFR5cGUsIE5TSFRNTFBib2FyZFR5cGUsIE5TRmlsZW5hbWVzUGJvYXJkVHlwZSwgTlNU
SUZGUGJvYXJkVHlwZSwgTlNQREZQYm9hcmRUeXBlLAotI2lmIGRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICAgICAgICAgIE5TUElD
VFBib2FyZFR5cGUsCi0jZW5kaWYKLSAgICAgICAgICAgIE5TVVJMUGJvYXJkVHlwZSwgTlNSVEZE
UGJvYXJkVHlwZSwgTlNSVEZQYm9hcmRUeXBlLCBOU1N0cmluZ1Bib2FyZFR5cGUsIE5TQ29sb3JQ
Ym9hcmRUeXBlLCBrVVRUeXBlUE5HLCBuaWxdOwotICAgICAgICBDRlJldGFpbih0eXBlcyk7Ci0g
ICAgfQotICAgIHJldHVybiB0eXBlczsKLX0KLQotKyAoTlNBcnJheSAqKV9zZWxlY3Rpb25QYXN0
ZWJvYXJkVHlwZXMKLXsKLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHB1dCBkYXRhIGZvciBOU0hU
TUxQYm9hcmRUeXBlIG9uIHRoZSBwYXN0ZWJvYXJkIGJ1dCBNaWNyb3NvZnQgRXhjZWwgZG9lc24n
dCBsaWtlIG91ciBmb3JtYXQgb2YgSFRNTCAoMzY0MDQyMykuCi0gICAgcmV0dXJuIFtOU0FycmF5
IGFycmF5V2l0aE9iamVjdHM6V2ViQXJjaGl2ZVBib2FyZFR5cGUsIE5TUlRGRFBib2FyZFR5cGUs
IE5TUlRGUGJvYXJkVHlwZSwgTlNTdHJpbmdQYm9hcmRUeXBlLCBuaWxdOwotfQotCi0tIChOU0lt
YWdlICopX2RyYWdJbWFnZUZvclVSTDooTlNTdHJpbmcqKXVybFN0cmluZyB3aXRoTGFiZWw6KE5T
U3RyaW5nKilsYWJlbAotewotICAgIEJPT0wgZHJhd1VSTFN0cmluZyA9IFlFUzsKLSAgICBCT09M
IGNsaXBVUkxTdHJpbmcgPSBOTywgY2xpcExhYmVsU3RyaW5nID0gTk87Ci0gICAgCi0gICAgaWYg
KCFsYWJlbCkgewotICAgICAgICBkcmF3VVJMU3RyaW5nID0gTk87Ci0gICAgICAgIGxhYmVsID0g
dXJsU3RyaW5nOwotICAgIH0KLSAgICAKLSAgICBOU0ZvbnQgKmxhYmVsRm9udCA9IFtbTlNGb250
TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gY29udmVydEZvbnQ6W05TRm9udCBzeXN0ZW1Gb250
T2ZTaXplOkRSQUdfTElOS19MQUJFTF9GT05UX1NJWkVdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvSGF2ZVRyYWl0Ok5TQm9sZEZv
bnRNYXNrXTsKLSAgICBOU0ZvbnQgKnVybEZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6
IERSQUdfTElOS19VUkxfRk9OVF9TSVpFXTsKLSAgICBOU1NpemUgbGFiZWxTaXplOwotICAgIGxh
YmVsU2l6ZS53aWR0aCA9IFtsYWJlbCBfd2ViX3dpZHRoV2l0aEZvbnQ6IGxhYmVsRm9udF07Ci0g
ICAgbGFiZWxTaXplLmhlaWdodCA9IFtsYWJlbEZvbnQgYXNjZW5kZXJdIC0gW2xhYmVsRm9udCBk
ZXNjZW5kZXJdOwotICAgIGlmIChsYWJlbFNpemUud2lkdGggPiBNQVhfRFJBR19MQUJFTF9XSURU
SCl7Ci0gICAgICAgIGxhYmVsU2l6ZS53aWR0aCA9IE1BWF9EUkFHX0xBQkVMX1dJRFRIOwotICAg
ICAgICBjbGlwTGFiZWxTdHJpbmcgPSBZRVM7Ci0gICAgfQotICAgIAotICAgIE5TU2l6ZSBpbWFn
ZVNpemUsIHVybFN0cmluZ1NpemU7Ci0gICAgaW1hZ2VTaXplLndpZHRoID0gbGFiZWxTaXplLndp
ZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGY7Ci0gICAgaW1hZ2VTaXplLmhlaWdodCA9
IGxhYmVsU2l6ZS5oZWlnaHQgKyBEUkFHX0xBQkVMX0JPUkRFUl9ZICogMi4wZjsKLSAgICBpZiAo
ZHJhd1VSTFN0cmluZykgewotICAgICAgICB1cmxTdHJpbmdTaXplLndpZHRoID0gW3VybFN0cmlu
ZyBfd2ViX3dpZHRoV2l0aEZvbnQ6IHVybEZvbnRdOwotICAgICAgICB1cmxTdHJpbmdTaXplLmhl
aWdodCA9IFt1cmxGb250IGFzY2VuZGVyXSAtIFt1cmxGb250IGRlc2NlbmRlcl07Ci0gICAgICAg
IGltYWdlU2l6ZS5oZWlnaHQgKz0gdXJsU3RyaW5nU2l6ZS5oZWlnaHQ7Ci0gICAgICAgIGlmICh1
cmxTdHJpbmdTaXplLndpZHRoID4gTUFYX0RSQUdfTEFCRUxfV0lEVEgpIHsKLSAgICAgICAgICAg
IGltYWdlU2l6ZS53aWR0aCA9IE1BWChNQVhfRFJBR19MQUJFTF9XSURUSCArIERSQUdfTEFCRUxf
Qk9SREVSX1ggKiAyLjBmLCBNSU5fRFJBR19MQUJFTF9XSURUSF9CRUZPUkVfQ0xJUCk7Ci0gICAg
ICAgICAgICBjbGlwVVJMU3RyaW5nID0gWUVTOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaW1hZ2VTaXplLndpZHRoID0gTUFYKGxhYmVsU2l6ZS53aWR0aCArIERSQUdfTEFCRUxfQk9S
REVSX1ggKiAyLjBmLCB1cmxTdHJpbmdTaXplLndpZHRoICsgRFJBR19MQUJFTF9CT1JERVJfWCAq
IDIuMGYpOwotICAgICAgICB9Ci0gICAgfQotICAgIE5TSW1hZ2UgKmRyYWdJbWFnZSA9IFtbW05T
SW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTogaW1hZ2VTaXplXSBhdXRvcmVsZWFzZV07Ci0gICAg
W2RyYWdJbWFnZSBsb2NrRm9jdXNdOwotICAgIAotICAgIFtbTlNDb2xvciBjb2xvcldpdGhEZXZp
Y2VSZWQ6IDAuN2YgZ3JlZW46IDAuN2YgYmx1ZTogMC43ZiBhbHBoYTogMC44Zl0gc2V0XTsKLSAg
ICAKLSAgICAvLyBEcmFnIGEgcmVjdGFuZ2xlIHdpdGggcm91bmRlZCBjb3JuZXJzLwotICAgIE5T
QmV6aWVyUGF0aCAqcGF0aCA9IFtOU0JlemllclBhdGggYmV6aWVyUGF0aF07Ci0gICAgW3BhdGgg
YXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAuMGYsIDAuMGYsIERS
QUdfTEFCRUxfUkFESVVTICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07Ci0gICAg
W3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KDAsIGltYWdl
U2l6ZS5oZWlnaHQgLSBEUkFHX0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVT
ICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmKV07Ci0gICAgW3BhdGggYXBwZW5kQmV6
aWVyUGF0aFdpdGhPdmFsSW5SZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53aWR0aCAtIERSQUdf
TEFCRUxfUkFESVVTICogMi4wZiwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfUkFESVVT
ICogMi4wZiwgRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCBEUkFHX0xBQkVMX1JBRElVUyAqIDIu
MGYpXTsKLSAgICBbcGF0aCBhcHBlbmRCZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6IE5TTWFrZVJl
Y3QoaW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBmLCAwLjBmLCBEUkFH
X0xBQkVMX1JBRElVUyAqIDIuMGYsIERSQUdfTEFCRUxfUkFESVVTICogMi4wZildOwotICAgIAot
ICAgIFtwYXRoIGFwcGVuZEJlemllclBhdGhXaXRoUmVjdDogTlNNYWtlUmVjdChEUkFHX0xBQkVM
X1JBRElVUywgMC4wZiwgaW1hZ2VTaXplLndpZHRoIC0gRFJBR19MQUJFTF9SQURJVVMgKiAyLjBm
LCBpbWFnZVNpemUuaGVpZ2h0KV07Ci0gICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0
OiBOU01ha2VSZWN0KDAuMGYsIERSQUdfTEFCRUxfUkFESVVTLCBEUkFHX0xBQkVMX1JBRElVUyAr
IDEwLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gMi4wZiAqIERSQUdfTEFCRUxfUkFESVVTKV07Ci0g
ICAgW3BhdGggYXBwZW5kQmV6aWVyUGF0aFdpdGhSZWN0OiBOU01ha2VSZWN0KGltYWdlU2l6ZS53
aWR0aCAtIERSQUdfTEFCRUxfUkFESVVTIC0gMjAuMGYsIERSQUdfTEFCRUxfUkFESVVTLCBEUkFH
X0xBQkVMX1JBRElVUyArIDIwLjBmLCBpbWFnZVNpemUuaGVpZ2h0IC0gMi4wZiAqIERSQUdfTEFC
RUxfUkFESVVTKV07Ci0gICAgW3BhdGggZmlsbF07Ci0gICAgCi0gICAgTlNDb2xvciAqdG9wQ29s
b3IgPSBbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0ZTowLjBmIGFscGhhOjAuNzVmXTsKLSAg
ICBOU0NvbG9yICpib3R0b21Db2xvciA9IFtOU0NvbG9yIGNvbG9yV2l0aERldmljZVdoaXRlOjEu
MGYgYWxwaGE6MC41Zl07Ci0gICAgaWYgKGRyYXdVUkxTdHJpbmcpIHsKLSAgICAgICAgaWYgKGNs
aXBVUkxTdHJpbmcpCi0gICAgICAgICAgICB1cmxTdHJpbmcgPSBbV2ViU3RyaW5nVHJ1bmNhdG9y
IGNlbnRlclRydW5jYXRlU3RyaW5nOiB1cmxTdHJpbmcgdG9XaWR0aDppbWFnZVNpemUud2lkdGgg
LSAoRFJBR19MQUJFTF9CT1JERVJfWCAqIDIuMGYpIHdpdGhGb250OnVybEZvbnRdOwotICAgICAg
ICAKLSAgICAgICAgW3VybFN0cmluZyBfd2ViX2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQb2lu
dChEUkFHX0xBQkVMX0JPUkRFUl9YLCBEUkFHX0xBQkVMX0JPUkRFUl9ZIC0gW3VybEZvbnQgZGVz
Y2VuZGVyXSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoVG9wQ29sb3I6dG9w
Q29sb3IgYm90dG9tQ29sb3I6Ym90dG9tQ29sb3IgZm9udDp1cmxGb250XTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKGNsaXBMYWJlbFN0cmluZykKLSAgICAgICAgbGFiZWwgPSBbV2ViU3RyaW5nVHJ1
bmNhdG9yIHJpZ2h0VHJ1bmNhdGVTdHJpbmc6IGxhYmVsIHRvV2lkdGg6aW1hZ2VTaXplLndpZHRo
IC0gKERSQUdfTEFCRUxfQk9SREVSX1ggKiAyLjBmKSB3aXRoRm9udDpsYWJlbEZvbnRdOwotICAg
IFtsYWJlbCBfd2ViX2RyYXdEb3VibGVkQXRQb2ludDpOU01ha2VQb2ludCAoRFJBR19MQUJFTF9C
T1JERVJfWCwgaW1hZ2VTaXplLmhlaWdodCAtIERSQUdfTEFCRUxfQk9SREVSX1lfT0ZGU0VUIC0g
W2xhYmVsRm9udCBwb2ludFNpemVdKQotICAgICAgICAgICAgICAgICAgICAgIHdpdGhUb3BDb2xv
cjp0b3BDb2xvciBib3R0b21Db2xvcjpib3R0b21Db2xvciBmb250OmxhYmVsRm9udF07Ci0gICAg
Ci0gICAgW2RyYWdJbWFnZSB1bmxvY2tGb2N1c107Ci0gICAgCi0gICAgcmV0dXJuIGRyYWdJbWFn
ZTsKLX0KLQotLSAoTlNJbWFnZSAqKV9kcmFnSW1hZ2VGb3JMaW5rRWxlbWVudDooTlNEaWN0aW9u
YXJ5ICopZWxlbWVudAotewotICAgIE5TVVJMICpsaW5rVVJMID0gW2VsZW1lbnQgb2JqZWN0Rm9y
S2V5OiBXZWJFbGVtZW50TGlua1VSTEtleV07Ci0gICAgCi0gICAgTlNTdHJpbmcgKmxhYmVsID0g
W2VsZW1lbnQgb2JqZWN0Rm9yS2V5OiBXZWJFbGVtZW50TGlua0xhYmVsS2V5XTsKLSAgICBOU1N0
cmluZyAqdXJsU3RyaW5nID0gW2xpbmtVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107Ci0gICAg
cmV0dXJuIFtzZWxmIF9kcmFnSW1hZ2VGb3JVUkw6dXJsU3RyaW5nIHdpdGhMYWJlbDpsYWJlbF07
Ci19Ci0KLS0gKHZvaWQpcGFzdGVib2FyZENoYW5nZWRPd25lcjooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZAotewotICAgIFtzZWxmIHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBdOwot
fQotCi0tICh2b2lkKXBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQgcHJvdmlk
ZURhdGFGb3JUeXBlOihOU1N0cmluZyAqKXR5cGUKLXsKLSAgICBpZiAoW3R5cGUgaXNFcXVhbDpO
U1JURkRQYm9hcmRUeXBlXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2JqZWN0Oldl
YkFyY2hpdmVQYm9hcmRUeXBlXSkgewotICAgICAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW1tX
ZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6V2Vi
QXJjaGl2ZVBib2FyZFR5cGVdXTsKLSAgICAgICAgW3Bhc3RlYm9hcmQgX3dlYl93cml0ZVByb21p
c2VkUlRGREZyb21BcmNoaXZlOmFyY2hpdmUgY29udGFpbnNJbWFnZTpbW3Bhc3RlYm9hcmQgdHlw
ZXNdIGNvbnRhaW5zT2JqZWN0Ok5TVElGRlBib2FyZFR5cGVdXTsKLSAgICAgICAgW2FyY2hpdmUg
cmVsZWFzZV07Ci0gICAgfSBlbHNlIGlmIChbdHlwZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVd
ICYmIFtzZWxmIHByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlXSkgewotICAgICAgICBpZiAoSW1h
Z2UqIGltYWdlID0gW3NlbGYgcHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2VdLT5pbWFnZSgpKQot
ICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07Ci0gICAgICAgIFtzZWxm
IHNldFByb21pc2VkRHJhZ1RJRkZEYXRhU291cmNlOjBdOwotICAgIH0KLX0KLQotLSAodm9pZClf
aGFuZGxlQXV0b3Njcm9sbEZvck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50IAoteyAKLSAg
ICBbc2VsZiBhdXRvc2Nyb2xsOmV2ZW50XTsgCi0gICAgW3NlbGYgX3N0YXJ0QXV0b3Njcm9sbFRp
bWVyOmV2ZW50XTsgCi19IAotCi0tIChXZWJQbHVnaW5Db250cm9sbGVyICopX3BsdWdpbkNvbnRy
b2xsZXIKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXI7Ci19Ci0KLS0g
KHZvaWQpX2xheW91dEZvclByaW50aW5nCi17Ci0gICAgLy8gU2V0IHByaW50aW5nIG1vZGUgdGVt
cG9yYXJpbHkgc28gd2UgY2FuIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdmlldy4gVGhpcyB3aWxs
IGFsbG93Ci0gICAgLy8gQXBwS2l0J3MgcGFnaW5hdGlvbiBjb2RlIHRvIHVzZSB0aGUgY29ycmVj
dCBoZWlnaHQgZm9yIHRoZSBwYWdlIGNvbnRlbnQuIExlYXZpbmcgcHJpbnRpbmcKLSAgICAvLyBt
b2RlIG9uIGluZGVmaW5pdGVseSB3b3VsZCBpbnRlcmZlcmUgd2l0aCBNYWlsJ3MgcHJpbnRpbmcg
bWVjaGFuaXNtIChhdCBsZWFzdCksIHNvIHdlIGp1c3QKLSAgICAvLyB0dXJuIGl0IG9mZiBhZ2Fp
biBhZnRlciBhZGp1c3RpbmcgdGhlIHNpemUuCi0gICAgW3NlbGYgX3dlYl9zZXRQcmludGluZ01v
ZGVSZWN1cnNpdmVBbmRBZGp1c3RWaWV3U2l6ZV07Ci0gICAgW3NlbGYgX3dlYl9jbGVhclByaW50
aW5nTW9kZVJlY3Vyc2l2ZV07Ci19Ci0KLS0gKHZvaWQpX3NtYXJ0SW5zZXJ0Rm9yU3RyaW5nOihO
U1N0cmluZyAqKXBhc3RlU3RyaW5nIHJlcGxhY2luZ1JhbmdlOihET01SYW5nZSAqKXJhbmdlVG9S
ZXBsYWNlIGJlZm9yZVN0cmluZzooTlNTdHJpbmcgKiopYmVmb3JlU3RyaW5nIGFmdGVyU3RyaW5n
OihOU1N0cmluZyAqKilhZnRlclN0cmluZwotewotICAgIGlmICghcGFzdGVTdHJpbmcgfHwgIXJh
bmdlVG9SZXBsYWNlIHx8ICFbW3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxl
ZF0pIHsKLSAgICAgICAgaWYgKGJlZm9yZVN0cmluZykKLSAgICAgICAgICAgICpiZWZvcmVTdHJp
bmcgPSBuaWw7Ci0gICAgICAgIGlmIChhZnRlclN0cmluZykKLSAgICAgICAgICAgICphZnRlclN0
cmluZyA9IG5pbDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBbW3NlbGYgX2Zy
YW1lXSBfc21hcnRJbnNlcnRGb3JTdHJpbmc6cGFzdGVTdHJpbmcgcmVwbGFjaW5nUmFuZ2U6cmFu
Z2VUb1JlcGxhY2UgYmVmb3JlU3RyaW5nOmJlZm9yZVN0cmluZyBhZnRlclN0cmluZzphZnRlclN0
cmluZ107Ci19Ci0KLS0gKEJPT0wpX2NhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkOihOU1Bh
c3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gc21h
cnRJbnNlcnREZWxldGVFbmFibGVkXSAmJiBbW3Bhc3RlYm9hcmQgdHlwZXNdIGNvbnRhaW5zT2Jq
ZWN0OldlYlNtYXJ0UGFzdGVQYm9hcmRUeXBlXTsKLX0KLQotLSAodm9pZClfc3RhcnRBdXRvc2Ny
b2xsVGltZXI6IChOU0V2ZW50ICopdHJpZ2dlckV2ZW50Ci17Ci0gICAgaWYgKF9wcml2YXRlLT5h
dXRvc2Nyb2xsVGltZXIgPT0gbmlsKSB7Ci0gICAgICAgIF9wcml2YXRlLT5hdXRvc2Nyb2xsVGlt
ZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFsOkFVVE9TQ1JPTExf
SU5URVJWQUwKLSAgICAgICAgICAgIHRhcmdldDpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfYXV0
b3Njcm9sbCkgdXNlckluZm86bmlsIHJlcGVhdHM6WUVTXSByZXRhaW5dOwotICAgICAgICBfcHJp
dmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVudCA9IFt0cmlnZ2VyRXZlbnQgcmV0YWluXTsKLSAg
ICB9Ci19Ci0KLS8vIEZJWE1FOiBfc2VsZWN0aW9uUmVjdCBpcyBkZXByZWNhdGVkIGluIGZhdm9y
IG9mIHNlbGVjdGlvblJlY3QsIHdoaWNoIGlzIGluIHByb3RvY29sIFdlYkRvY3VtZW50U2VsZWN0
aW9uLgotLy8gV2UgY2FuJ3QgcmVtb3ZlIHRoaXMgeWV0IGJlY2F1c2UgaXQncyBzdGlsbCBpbiB1
c2UgYnkgTWFpbC4KLS0gKE5TUmVjdClfc2VsZWN0aW9uUmVjdAotewotICAgIHJldHVybiBbc2Vs
ZiBzZWxlY3Rpb25SZWN0XTsKLX0KLQotLSAodm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcgotewot
ICAgIE5TVGltZXIgKnRpbWVyID0gX3ByaXZhdGUtPmF1dG9zY3JvbGxUaW1lcjsKLSAgICBfcHJp
dmF0ZS0+YXV0b3Njcm9sbFRpbWVyID0gbmlsOwotICAgIFtfcHJpdmF0ZS0+YXV0b3Njcm9sbFRy
aWdnZXJFdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+YXV0b3Njcm9sbFRyaWdnZXJFdmVu
dCA9IG5pbDsKLSAgICBbdGltZXIgaW52YWxpZGF0ZV07Ci0gICAgW3RpbWVyIHJlbGVhc2VdOwot
fQotCi0tICh2b2lkKV9hdXRvc2Nyb2xsCi17Ci0gICAgLy8gR3VhcmFudGVlIHRoYXQgdGhlIGF1
dG9zY3JvbGwgdGltZXIgaXMgaW52YWxpZGF0ZWQsIGV2ZW4gaWYgd2UgZG9uJ3QgcmVjZWl2ZQot
ICAgIC8vIGEgbW91c2UgdXAgZXZlbnQuCi0gICAgQk9PTCBpc1N0aWxsRG93biA9IENHRXZlbnRT
b3VyY2VCdXR0b25TdGF0ZShrQ0dFdmVudFNvdXJjZVN0YXRlQ29tYmluZWRTZXNzaW9uU3RhdGUs
IGtDR01vdXNlQnV0dG9uTGVmdCk7ICAgCi0gICAgaWYgKCFpc1N0aWxsRG93bil7Ci0gICAgICAg
IFtzZWxmIF9zdG9wQXV0b3Njcm9sbFRpbWVyXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIE5TRXZlbnQgKmZha2VFdmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU0xl
ZnRNb3VzZURyYWdnZWQKLSAgICAgICAgbG9jYXRpb246W1tzZWxmIHdpbmRvd10gY29udmVydFNj
cmVlblRvQmFzZTpbTlNFdmVudCBtb3VzZUxvY2F0aW9uXV0KLSAgICAgICAgbW9kaWZpZXJGbGFn
czpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10KLSAgICAgICAgdGltZXN0YW1w
OltOU0RhdGUgdGltZUludGVydmFsU2luY2VSZWZlcmVuY2VEYXRlXQotICAgICAgICB3aW5kb3dO
dW1iZXI6W1tzZWxmIHdpbmRvd10gd2luZG93TnVtYmVyXQotICAgICAgICBjb250ZXh0OltbTlNB
cHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQotICAgICAgICBldmVudE51bWJlcjowIGNsaWNrQ291
bnQ6MCBwcmVzc3VyZTowXTsKLSAgICBbc2VsZiBtb3VzZURyYWdnZWQ6ZmFrZUV2ZW50XTsKLX0K
LQotLSAoQk9PTClfY2FuRWRpdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5lZGl0b3IoKS0+
Y2FuRWRpdCgpOwotfQotCi0tIChCT09MKV9jYW5FZGl0UmljaGx5Ci17Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCk7Ci19Ci0KLS0gKEJPT0wpX2NhbkFs
dGVyQ3VycmVudFNlbGVjdGlvbgotewotICAgIHJldHVybiBbc2VsZiBfaGFzU2VsZWN0aW9uT3JJ
bnNlcnRpb25Qb2ludF0gJiYgW3NlbGYgX2lzRWRpdGFibGVdOwotfQotCi0tIChCT09MKV9oYXNT
ZWxlY3Rpb24KLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
LSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2Uo
KTsKLX0KLQotLSAoQk9PTClfaGFzU2VsZWN0aW9uT3JJbnNlcnRpb25Qb2ludAotewotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDYXJldE9yUmFuZ2UoKTsKLX0KLQotLSAo
Qk9PTClfaGFzSW5zZXJ0aW9uUG9pbnQKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCktPmlzQ2FyZXQoKTsKLX0KLQotLSAoQk9PTClfaXNFZGl0YWJsZQotewotICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUg
JiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsKLX0KLQotLSAo
Qk9PTClfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kCi17Ci0gICAgcmV0dXJuIF9wcml2YXRlLT50cmFu
c3BhcmVudEJhY2tncm91bmQ7Ci19Ci0KLS0gKHZvaWQpX3NldFRyYW5zcGFyZW50QmFja2dyb3Vu
ZDooQk9PTClmCi17Ci0gICAgX3ByaXZhdGUtPnRyYW5zcGFyZW50QmFja2dyb3VuZCA9IGY7Ci19
Ci0KLS0gKE5TSW1hZ2UgKilfc2VsZWN0aW9uRHJhZ2dpbmdJbWFnZQotewotICAgIGlmIChbc2Vs
ZiBfaGFzU2VsZWN0aW9uXSkgewotICAgICAgICBOU0ltYWdlICpkcmFnSW1hZ2UgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pLT5zZWxlY3Rpb25JbWFnZSgpOwotICAgICAgICBbZHJhZ0ltYWdlIF93ZWJf
ZGlzc29sdmVUb0ZyYWN0aW9uOldlYkRyYWdJbWFnZUFscGhhXTsKLSAgICAgICAgcmV0dXJuIGRy
YWdJbWFnZTsKLSAgICB9Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAoTlNSZWN0KV9zZWxlY3Rp
b25EcmFnZ2luZ1JlY3QKLXsKLSAgICAvLyBNYWlsIGN1cnJlbnRseSBjYWxscyB0aGlzIG1ldGhv
ZC4gV2UgY2FuIGVsaW1pbmF0ZSBpdCB3aGVuIE1haWwgbm8gbG9uZ2VyIGNhbGxzIGl0LgotICAg
IHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0XTsKLX0KLQotLSAoRE9NTm9kZSAqKV9pbnNlcnRP
cmRlcmVkTGlzdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0
T3JkZXJlZExpc3QoKS5nZXQoKSkgOiBuaWw7Ci19Ci0KLS0gKERPTU5vZGUgKilfaW5zZXJ0VW5v
cmRlcmVkTGlzdAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0
VW5vcmRlcmVkTGlzdCgpLmdldCgpKSA6IG5pbDsKLX0KLQotLSAoQk9PTClfY2FuSW5jcmVhc2VT
ZWxlY3Rpb25MaXN0TGV2ZWwKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmNh
bkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKCk7Ci19Ci0KLS0gKEJPT0wpX2NhbkRlY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5j
YW5EZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpOwotfQotCi0tIChET01Ob2RlICopX2luY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPmVkaXRv
cigpLT5pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbCgpLmdldCgpKSA6IG5pbDsKLX0KLQotLSAo
RE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWQKLXsKLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1l
ID8ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCktPmluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsT3Jk
ZXJlZCgpLmdldCgpKSA6IG5pbDsKLX0KLQotLSAoRE9NTm9kZSAqKV9pbmNyZWFzZVNlbGVjdGlv
bkxpc3RMZXZlbFVub3JkZXJlZAotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5lZGl0b3Io
KS0+aW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxVbm9yZGVyZWQoKS5nZXQoKSkgOiBuaWw7Ci19
Ci0KLS0gKHZvaWQpX2RlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsCi17Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKGNvcmVGcmFtZSkKLSAgICAg
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKTsKLX0K
LQotLSAodm9pZClfc2V0SGlnaGxpZ2h0ZXI6KGlkPFdlYkhUTUxIaWdobGlnaHRlcj4paGlnaGxp
Z2h0ZXIgb2ZUeXBlOihOU1N0cmluZyopdHlwZQotewotICAgIGlmICghX3ByaXZhdGUtPmhpZ2hs
aWdodGVycykKLSAgICAgICAgX3ByaXZhdGUtPmhpZ2hsaWdodGVycyA9IFtbTlNNdXRhYmxlRGlj
dGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgW19wcml2YXRlLT5oaWdobGlnaHRlcnMgc2V0T2Jq
ZWN0OmhpZ2hsaWdodGVyIGZvcktleTp0eXBlXTsKLX0KLQotLSAodm9pZClfcmVtb3ZlSGlnaGxp
Z2h0ZXJPZlR5cGU6KE5TU3RyaW5nKil0eXBlCi17Ci0gICAgW19wcml2YXRlLT5oaWdobGlnaHRl
cnMgcmVtb3ZlT2JqZWN0Rm9yS2V5OnR5cGVdOwotfQotCi0tICh2b2lkKV91cGRhdGVGb2N1c2Vk
QW5kQWN0aXZlU3RhdGUKLXsKLSAgICBbc2VsZiBfY2FuY2VsVXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlVGltZXJdOwotCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBfdXBkYXRlRm9jdXNlZEFuZEFj
dGl2ZVN0YXRlRm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci19Ci0KLS0gKHZvaWQpX3dyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0gICAgQVNT
RVJUKFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsKLSAgICBOU0FycmF5ICp0eXBlcyA9IFtzZWxmIHBh
c3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbl07Ci0KLSAgICAvLyBEb24ndCB3cml0ZSBSVEZEIHRv
IHRoZSBwYXN0ZWJvYXJkIHdoZW4gdGhlIGNvcGllZCBhdHRyaWJ1dGVkIHN0cmluZyBoYXMgbm8g
YXR0YWNobWVudHMuCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0g
W3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKLSAgICBOU011dGFibGVBcnJheSAqbXV0
YWJsZVR5cGVzID0gbmlsOwotICAgIGlmICghW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRh
Y2htZW50c10pIHsKLSAgICAgICAgbXV0YWJsZVR5cGVzID0gW3R5cGVzIG11dGFibGVDb3B5XTsK
LSAgICAgICAgW211dGFibGVUeXBlcyByZW1vdmVPYmplY3Q6TlNSVEZEUGJvYXJkVHlwZV07Ci0g
ICAgICAgIHR5cGVzID0gbXV0YWJsZVR5cGVzOwotICAgIH0KLQotICAgIFtwYXN0ZWJvYXJkIGRl
Y2xhcmVUeXBlczp0eXBlcyBvd25lcjpbc2VsZiBfdG9wSFRNTFZpZXddXTsKLSAgICBbc2VsZiBf
d3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0
ZWJvYXJkIGNhY2hlZEF0dHJpYnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107Ci0gICAgW211
dGFibGVUeXBlcyByZWxlYXNlXTsKLX0KLQotLSAodm9pZCljbG9zZQotewotICAgIC8vIENoZWNr
IGZvciBhIG5pbCBfcHJpdmF0ZSBoZXJlIGluIGNhc2Ugd2Ugd2VyZSBjcmVhdGVkIHdpdGggaW5p
dFdpdGhDb2Rlci4gSW4gdGhhdCBjYXNlLCB0aGUgV2ViVmlldyBpcyBqdXN0IHRocm93aW5nCi0g
ICAgLy8gb3V0IHRoZSBhcmNoaXZlZCBXZWJIVE1MVmlldyBhbmQgcmVjcmVhdGluZyBhIG5ldyBv
bmUgaWYgbmVlZGVkLiBTbyBjbG9zZSBkb2Vzbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaW4gdGhh
dCBjYXNlLgotICAgIGlmICghX3ByaXZhdGUgfHwgX3ByaXZhdGUtPmNsb3NlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgX3ByaXZhdGUtPmNsb3NlZCA9IFlFUzsKLQotICAgIFtzZWxmIF9jYW5j
ZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07Ci0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRB
bmRBY3RpdmVTdGF0ZVRpbWVyXTsKLSAgICBbc2VsZiBfY2xlYXJMYXN0SGl0Vmlld0lmU2VsZl07
Ci0gICAgW3NlbGYgX3JlbW92ZU1vdXNlTW92ZWRPYnNlcnZlclVuY29uZGl0aW9uYWxseV07Ci0g
ICAgW3NlbGYgX3JlbW92ZVdpbmRvd09ic2VydmVyc107Ci0gICAgW3NlbGYgX3JlbW92ZVN1cGVy
dmlld09ic2VydmVyc107Ci0gICAgW19wcml2YXRlLT5wbHVnaW5Db250cm9sbGVyIGRlc3Ryb3lB
bGxQbHVnaW5zXTsKLSAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJj
ZTpuaWxdOwotICAgIC8vIHJlbW92ZSB0b29sdGlwcyBiZWZvcmUgY2xlYXJpbmcgX3ByaXZhdGUg
c28gcmVtb3ZlVHJhY2tpbmdSZWN0OiB3aWxsIHdvcmsgY29ycmVjdGx5Ci0gICAgW3NlbGYgcmVt
b3ZlQWxsVG9vbFRpcHNdOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAg
IGlmIChfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldykKLSAgICAgICAgW1tzZWxmIF93ZWJWaWV3
XSBfc3RvcHBlZEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTpbc2VsZiBfZnJhbWVdXTsK
LSNlbmRpZgotCi0gICAgW19wcml2YXRlIGNsZWFyXTsKLQotICAgIFBhZ2UqIHBhZ2UgPSBjb3Jl
KFtzZWxmIF93ZWJWaWV3XSk7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBhZ2UtPmRyYWdDb250
cm9sbGVyKCktPnNldERyYWdnaW5nSW1hZ2VVUkwoS1VSTCgpKTsKLX0KLQotLSAoQk9PTClfaGFz
SFRNTERvY3VtZW50Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBOTzsKLSAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50
ICYmIGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpOwotfQotCi0tIChET01Eb2N1bWVudEZyYWdt
ZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFz
dGVib2FyZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvclR5cGU6KE5TU3RyaW5nICopcGJvYXJkVHlwZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbkNvbnRleHQ6KERPTVJhbmdlICopY29udGV4dAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6KE5T
QXJyYXkgKiopc3VicmVzb3VyY2VzCi17Ci0gICAgaWYgKHBib2FyZFR5cGUgPT0gV2ViQXJjaGl2
ZVBib2FyZFR5cGUpIHsKLSAgICAgICAgV2ViQXJjaGl2ZSAqYXJjaGl2ZSA9IFtbV2ViQXJjaGl2
ZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOldlYkFyY2hpdmVQ
Ym9hcmRUeXBlXV07Ci0gICAgICAgIGlmIChzdWJyZXNvdXJjZXMpCi0gICAgICAgICAgICAqc3Vi
cmVzb3VyY2VzID0gW2FyY2hpdmUgc3VicmVzb3VyY2VzXTsKLSAgICAgICAgRE9NRG9jdW1lbnRG
cmFnbWVudCAqZnJhZ21lbnQgPSBbW3NlbGYgX2RhdGFTb3VyY2VdIF9kb2N1bWVudEZyYWdtZW50
V2l0aEFyY2hpdmU6YXJjaGl2ZV07Ci0gICAgICAgIFthcmNoaXZlIHJlbGVhc2VdOwotICAgICAg
ICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TRmlsZW5h
bWVzUGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50V2l0
aFBhdGhzOltwYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5cGU6TlNGaWxlbmFtZXNQYm9hcmRU
eXBlXV07Ci0gICAgICAgIAotICAgIGlmIChwYm9hcmRUeXBlID09IE5TSFRNTFBib2FyZFR5cGUp
IHsKLSAgICAgICAgTlNTdHJpbmcgKkhUTUxTdHJpbmcgPSBbcGFzdGVib2FyZCBzdHJpbmdGb3JU
eXBlOk5TSFRNTFBib2FyZFR5cGVdOwotICAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBtYWtl
IE1pY3Jvc29mdCdzIEhUTUwgcGFzdGVib2FyZCBkYXRhIHdvcmsuIFNlZSAzNzc4Nzg1LgotICAg
ICAgICBpZiAoW0hUTUxTdHJpbmcgaGFzUHJlZml4OkAiVmVyc2lvbjoiXSkgewotICAgICAgICAg
ICAgTlNSYW5nZSByYW5nZSA9IFtIVE1MU3RyaW5nIHJhbmdlT2ZTdHJpbmc6QCI8aHRtbCIgb3B0
aW9uczpOU0Nhc2VJbnNlbnNpdGl2ZVNlYXJjaF07Ci0gICAgICAgICAgICBpZiAocmFuZ2UubG9j
YXRpb24gIT0gTlNOb3RGb3VuZCkKLSAgICAgICAgICAgICAgICBIVE1MU3RyaW5nID0gW0hUTUxT
dHJpbmcgc3Vic3RyaW5nRnJvbUluZGV4OnJhbmdlLmxvY2F0aW9uXTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoW0hUTUxTdHJpbmcgbGVuZ3RoXSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfZG9jdW1lbnRGcmFn
bWVudFdpdGhNYXJrdXBTdHJpbmc6SFRNTFN0cmluZyBiYXNlVVJMU3RyaW5nOm5pbF07Ci0gICAg
fQotCi0gICAgLy8gVGhlIF9oYXNIVE1MRG9jdW1lbnQgY2xhdXNlIGhlcmUgaXMgYSB3b3JrYXJv
dW5kIGZvciBhIGJ1ZyBpbiBOU0F0dHJpYnV0ZWRTdHJpbmc6IFJhZGFyIDUwNTIzNjkuCi0gICAg
Ly8gSWYgd2UgY2FsbCBfZG9jdW1lbnRGcm9tUmFuZ2Ugb24gYW4gWE1MIGRvY3VtZW50IHdlJ2xs
IGdldCAic2V0SW5uZXJIVE1MOiBtZXRob2Qgbm90IGZvdW5kIi4KLSAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgb25jZSBidWcgNTA1MjM2OSBpcyBmaXhlZC4KLSAgICBpZiAoW3NlbGYgX2hhc0hU
TUxEb2N1bWVudF0gJiYgcGJvYXJkVHlwZSA9PSBOU1JURlBib2FyZFR5cGUgfHwgcGJvYXJkVHlw
ZSA9PSBOU1JURkRQYm9hcmRUeXBlKSB7Ci0gICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3Ry
aW5nID0gbmlsOwotICAgICAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1JURkRQYm9hcmRUeXBlKQot
ICAgICAgICAgICAgc3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
UlRGRDpbcGFzdGVib2FyZCBkYXRhRm9yVHlwZTpOU1JURkRQYm9hcmRUeXBlXSBkb2N1bWVudEF0
dHJpYnV0ZXM6TlVMTF07Ci0gICAgICAgIGlmIChzdHJpbmcgPT0gbmlsKQotICAgICAgICAgICAg
c3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOltwYXN0ZWJv
YXJkIGRhdGFGb3JUeXBlOk5TUlRGUGJvYXJkVHlwZV0gZG9jdW1lbnRBdHRyaWJ1dGVzOk5VTExd
OwotICAgICAgICBpZiAoc3RyaW5nID09IG5pbCkKLSAgICAgICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBb
W05TRGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgICAg
IFtbc2VsZiBjbGFzc10gX2V4Y2x1ZGVkRWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVy
c2lvbl0sIE5TRXhjbHVkZWRFbGVtZW50c0RvY3VtZW50QXR0cmlidXRlLAotICAgICAgICAgICAg
c2VsZiwgQCJXZWJSZXNvdXJjZUhhbmRsZXIiLCBuaWxdOwotICAgICAgICBOU0FycmF5ICpzOwot
ICAgICAgICAKLSAgICAgICAgQk9PTCB3YXNEZWZlcnJpbmdDYWxsYmFja3MgPSBbW3NlbGYgX3dl
YlZpZXddIGRlZmVyc0NhbGxiYWNrc107Ci0gICAgICAgIGlmICghd2FzRGVmZXJyaW5nQ2FsbGJh
Y2tzKQotICAgICAgICAgICAgW1tzZWxmIF93ZWJWaWV3XSBzZXREZWZlcnNDYWxsYmFja3M6WUVT
XTsKLSAgICAgICAgICAgIAotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9
IFtzdHJpbmcgX2RvY3VtZW50RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtzdHJpbmcgbGVuZ3Ro
XSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQ6W1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRBdHRyaWJ1dGVzOmRv
Y3VtZW50QXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3VicmVzb3VyY2VzOiZzXTsKLSAgICAgICAgaWYgKHN1YnJlc291cmNl
cykKLSAgICAgICAgICAgICpzdWJyZXNvdXJjZXMgPSBzOwotICAgICAgICAKLSAgICAgICAgTlNF
bnVtZXJhdG9yICplID0gW3Mgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgICAgIFdlYlJlc291cmNl
ICpyOwotICAgICAgICB3aGlsZSAoKHIgPSBbZSBuZXh0T2JqZWN0XSkpCi0gICAgICAgICAgICBb
W3NlbGYgX2RhdGFTb3VyY2VdIGFkZFN1YnJlc291cmNlOnJdOwotICAgICAgICAKLSAgICAgICAg
aWYgKCF3YXNEZWZlcnJpbmdDYWxsYmFja3MpCi0gICAgICAgICAgICBbW3NlbGYgX3dlYlZpZXdd
IHNldERlZmVyc0NhbGxiYWNrczpOT107Ci0gICAgICAgIAotICAgICAgICBbZG9jdW1lbnRBdHRy
aWJ1dGVzIHJlbGVhc2VdOwotICAgICAgICBbc3RyaW5nIHJlbGVhc2VdOwotICAgICAgICByZXR1
cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TVElGRlBib2FyZFR5
cGUpIHsKLSAgICAgICAgV2ViUmVzb3VyY2UgKnJlc291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxv
Y10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRhdGFGb3JUeXBlOk5TVElGRlBib2FyZFR5cGVd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVSTDp1bmlxdWVVUkxXaXRoUmVsYXRpdmVQYXJ0KEAiaW1hZ2UudGlmZiIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSU1F
VHlwZTpAImltYWdlL3RpZmYiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHRFbmNvZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAg
ICBET01Eb2N1bWVudEZyYWdtZW50ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2Rv
Y3VtZW50RnJhZ21lbnRXaXRoSW1hZ2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNv
dXJjZSByZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAo
cGJvYXJkVHlwZSA9PSBOU1BERlBib2FyZFR5cGUpIHsKLSAgICAgICAgV2ViUmVzb3VyY2UgKnJl
c291cmNlID0gW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOltwYXN0ZWJvYXJkIGRh
dGFGb3JUeXBlOk5TUERGUGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2
ZVBhcnQoQCJhcHBsaWNhdGlvbi5wZGYiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlNRVR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRFbmNv
ZGluZ05hbWU6bmlsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lTmFtZTpuaWxdOwotICAgICAgICBET01Eb2N1bWVudEZyYWdtZW50
ICpmcmFnbWVudCA9IFtbc2VsZiBfZGF0YVNvdXJjZV0gX2RvY3VtZW50RnJhZ21lbnRXaXRoSW1h
Z2VSZXNvdXJjZTpyZXNvdXJjZV07Ci0gICAgICAgIFtyZXNvdXJjZSByZWxlYXNlXTsKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSNpZiBkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSB8fCBkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgaWYgKHBib2FyZFR5cGUgPT0g
TlNQSUNUUGJvYXJkVHlwZSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dl
YlJlc291cmNlIGFsbG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6TlNQ
SUNUUGJvYXJkVHlwZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVVJMOnVuaXF1ZVVSTFdpdGhSZWxhdGl2ZVBhcnQoQCJpbWFn
ZS5waWN0IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1JTUVUeXBlOkAiaW1hZ2UvcGljdCIgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1l
Om5pbF07Ci0gICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9k
YXRhU291cmNlXSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsK
LSAgICAgICAgW3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0g
ICAgfQotI2VuZGlmCi0gICAgLy8gT25seSAxMC41IGFuZCBoaWdoZXIgc3VwcG9ydCBzZXR0aW5n
IGFuZCByZXRyaWV2aW5nIHBhc3RlYm9hcmQgdHlwZXMgd2l0aCBVVElzLCBidXQgd2UgZG9uJ3Qg
YmVsaWV2ZQotICAgIC8vIHRoYXQgYW55IGFwcGxpY2F0aW9ucyBvbiBUaWdlciBwdXQgdHlwZXMg
Zm9yIHdoaWNoIHdlIG9ubHkgaGF2ZSBhIFVUSSwgbGlrZSBQTkcsIG9uIHRoZSBwYXN0ZWJvYXJk
LgotICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nKilrVVRUeXBl
UE5HXSkgewotICAgICAgICBXZWJSZXNvdXJjZSAqcmVzb3VyY2UgPSBbW1dlYlJlc291cmNlIGFs
bG9jXSBpbml0V2l0aERhdGE6W3Bhc3RlYm9hcmQgZGF0YUZvclR5cGU6KE5TU3RyaW5nKilrVVRU
eXBlUE5HXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVUkw6dW5pcXVlVVJMV2l0aFJlbGF0aXZlUGFydChAImltYWdlLnBuZyIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNSU1FVHlwZTpAImltYWdlL3BuZyIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZTpuaWwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVOYW1lOm5pbF07Ci0g
ICAgICAgIERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW1tzZWxmIF9kYXRhU291cmNl
XSBfZG9jdW1lbnRGcmFnbWVudFdpdGhJbWFnZVJlc291cmNlOnJlc291cmNlXTsKLSAgICAgICAg
W3Jlc291cmNlIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gZnJhZ21lbnQ7Ci0gICAgfQotICAg
IGlmIChwYm9hcmRUeXBlID09IE5TVVJMUGJvYXJkVHlwZSkgewotICAgICAgICBOU1VSTCAqVVJM
ID0gW05TVVJMIFVSTEZyb21QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotICAgICAgICBET01Eb2N1
bWVudCogZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07Ci0gICAgICAgIEFT
U0VSVChkb2N1bWVudCk7Ci0gICAgICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgICAgICByZXR1
cm4gbmlsOwotICAgICAgICBET01IVE1MQW5jaG9yRWxlbWVudCAqYW5jaG9yID0gKERPTUhUTUxB
bmNob3JFbGVtZW50ICopW2RvY3VtZW50IGNyZWF0ZUVsZW1lbnQ6QCJhIl07Ci0gICAgICAgIE5T
U3RyaW5nICpVUkxTdHJpbmcgPSBbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddOyAvLyBP
cmlnaW5hbCBkYXRhIGlzIEFTQ0lJLW9ubHksIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJlY29t
cG9zZS4KLSAgICAgICAgaWYgKFtVUkxTdHJpbmcgbGVuZ3RoXSA9PSAwKQotICAgICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAgICAgTlNTdHJpbmcgKlVSTFRpdGxlU3RyaW5nID0gW1twYXN0ZWJv
YXJkIHN0cmluZ0ZvclR5cGU6V2ViVVJMTmFtZVBib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5n
V2l0aENhbm9uaWNhbE1hcHBpbmddOwotICAgICAgICBET01UZXh0ICp0ZXh0ID0gW2RvY3VtZW50
IGNyZWF0ZVRleHROb2RlOlVSTFRpdGxlU3RyaW5nXTsKLSAgICAgICAgW2FuY2hvciBzZXRIcmVm
OlVSTFN0cmluZ107Ci0gICAgICAgIFthbmNob3IgYXBwZW5kQ2hpbGQ6dGV4dF07Ci0gICAgICAg
IERPTURvY3VtZW50RnJhZ21lbnQgKmZyYWdtZW50ID0gW2RvY3VtZW50IGNyZWF0ZURvY3VtZW50
RnJhZ21lbnRdOwotICAgICAgICBbZnJhZ21lbnQgYXBwZW5kQ2hpbGQ6YW5jaG9yXTsKLSAgICAg
ICAgcmV0dXJuIGZyYWdtZW50OwotICAgIH0KLSAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0cmlu
Z1Bib2FyZFR5cGUpCi0gICAgICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChj
b3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5
cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKS5nZXQoKSk7Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKSAKLS0gKHZv
aWQpX3BhdXNlTnVsbEV2ZW50c0ZvckFsbE5ldHNjYXBlUGx1Z2lucyAKLXsgCi0gICAgTlNBcnJh
eSAqc3Vidmlld3MgPSBbc2VsZiBzdWJ2aWV3c107IAotICAgIHVuc2lnbmVkIGludCBzdWJ2aWV3
Q291bnQgPSBbc3Vidmlld3MgY291bnRdOyAKLSAgICB1bnNpZ25lZCBpbnQgc3Vidmlld0luZGV4
OyAKLSAgICAKLSAgICBmb3IgKHN1YnZpZXdJbmRleCA9IDA7IHN1YnZpZXdJbmRleCA8IHN1YnZp
ZXdDb3VudDsgc3Vidmlld0luZGV4KyspIHsgCi0gICAgICAgIE5TVmlldyAqc3VidmlldyA9IFtz
dWJ2aWV3cyBvYmplY3RBdEluZGV4OnN1YnZpZXdJbmRleF07IAotICAgICAgICBpZiAoW3N1YnZp
ZXcgaXNLaW5kT2ZDbGFzczpbV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyBjbGFzc11dKSAKLSAg
ICAgICAgICAgIFsoV2ViQmFzZU5ldHNjYXBlUGx1Z2luVmlldyAqKXN1YnZpZXcgc3RvcFRpbWVy
c107Ci0gICAgfSAKLX0gCi0jZW5kaWYgCi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkgCi0tICh2b2lkKV9yZXN1bWVOdWxsRXZlbnRzRm9yQWxsTmV0c2NhcGVQbHVnaW5zIAoteyAK
LSAgICBOU0FycmF5ICpzdWJ2aWV3cyA9IFtzZWxmIHN1YnZpZXdzXTsgCi0gICAgdW5zaWduZWQg
aW50IHN1YnZpZXdDb3VudCA9IFtzdWJ2aWV3cyBjb3VudF07IAotICAgIHVuc2lnbmVkIGludCBz
dWJ2aWV3SW5kZXg7IAotICAgIAotICAgIGZvciAoc3Vidmlld0luZGV4ID0gMDsgc3Vidmlld0lu
ZGV4IDwgc3Vidmlld0NvdW50OyBzdWJ2aWV3SW5kZXgrKykgeyAKLSAgICAgICAgTlNWaWV3ICpz
dWJ2aWV3ID0gW3N1YnZpZXdzIG9iamVjdEF0SW5kZXg6c3Vidmlld0luZGV4XTsgCi0gICAgICAg
IGlmIChbc3VidmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3IGNs
YXNzXV0pIAotICAgICAgICAgICAgWyhXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICopc3Vidmll
dyByZXN0YXJ0VGltZXJzXTsgCi0gICAgfSAKLX0gCi0jZW5kaWYgCi0KLS0gKEJPT0wpX2lzVXNp
bmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQotICAgIHJldHVybiBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyAhPSBuaWw7Ci0jZWxz
ZQotICAgIHJldHVybiBOTzsKLSNlbmRpZgotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBO
U1ZpZXcgKFdlYkhUTUxWaWV3RmlsZUludGVybmFsKQotCi0tICh2b2lkKV93ZWJfYWRkRGVzY2Vu
ZGFudFdlYkhUTUxWaWV3c1RvQXJyYXk6KE5TTXV0YWJsZUFycmF5ICopYXJyYXkKLXsKLSAgICB1
bnNpZ25lZCBjb3VudCA9IFtfc3Vidmlld3MgY291bnRdOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIE5TVmlldyAqY2hpbGQgPSBbX3N1YnZpZXdz
IG9iamVjdEF0SW5kZXg6aV07Ci0gICAgICAgIGlmIChbY2hpbGQgaXNLaW5kT2ZDbGFzczpbV2Vi
SFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgICAgIFthcnJheSBhZGRPYmplY3Q6Y2hpbGRdOwot
ICAgICAgICBbY2hpbGQgX3dlYl9hZGREZXNjZW5kYW50V2ViSFRNTFZpZXdzVG9BcnJheTphcnJh
eV07Ci0gICAgfQotfQotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBOU011dGFibGVEaWN0aW9u
YXJ5IChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkKLQotLSAodm9pZClfd2ViX3NldE9iamVjdElm
Tm90TmlsOihpZClvYmplY3QgZm9yS2V5OihpZClrZXkKLXsKLSAgICBpZiAob2JqZWN0ID09IG5p
bCkgewotICAgICAgICBbc2VsZiByZW1vdmVPYmplY3RGb3JLZXk6a2V5XTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBbc2VsZiBzZXRPYmplY3Q6b2JqZWN0IGZvcktleTprZXldOwotICAgIH0KLX0K
LQotQGVuZAotCi1AaW50ZXJmYWNlIE5TU3RyaW5nIChXZWJIVE1MVmlld0ZpbGVJbnRlcm5hbCkK
LS0gKEJPT0wpbWF0Y2hlc0V4dGVuc2lvbkVxdWl2YWxlbnQ6KE5TU3RyaW5nICopZXh0ZW5zaW9u
OwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNTdHJpbmcgKFdlYkhUTUxWaWV3RmlsZUludGVy
bmFsKQotCi0tIChCT09MKW1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50OihOU1N0cmluZyAqKWV4
dGVuc2lvbgotewotICAgIGlmIChbc2VsZiBoYXNTdWZmaXg6ZXh0ZW5zaW9uXSkKLSAgICAgICAg
cmV0dXJuIFlFUzsKLSAgICBlbHNlIGlmIChbZXh0ZW5zaW9uIGlzRXF1YWxUb1N0cmluZzpAImpw
ZWciXSAmJiBbc2VsZiBoYXNTdWZmaXg6QCJqcGciXSkKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAg
ICByZXR1cm4gTk87Ci19Ci0KLUBlbmQKLQotI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLS8v
IFRoZSBmb2xsb3dpbmcgaXMgYSB3b3JrYXJvdW5kIGZvcgotLy8gPHJkYXI6Ly9wcm9ibGVtLzM0
Mjk2MzE+IHdpbmRvdyBzdG9wcyBnZXR0aW5nIG1vdXNlIG1vdmVkIGV2ZW50cyBhZnRlciBmaXJz
dCB0b29sdGlwIGFwcGVhcnMKLS8vIFRoZSB0cmljayBpcyB0byBkZWZpbmUgYSBjYXRlZ29yeSBv
biBOU1Rvb2xUaXBQYW5lbCB0aGF0IGltcGxlbWVudHMgc2V0QWNjZXB0c01vdXNlTW92ZWRFdmVu
dHM6LgotLy8gU2luY2UgdGhlIGNhdGVnb3J5IHdpbGwgYmUgc2VhcmNoZWQgYmVmb3JlIHRoZSBy
ZWFsIGNsYXNzLCB3ZSdsbCBwcmV2ZW50IHRoZSBmbGFnIGZyb20gYmVpbmcKLS8vIHNldCBvbiB0
aGUgdG9vbCB0aXAgcGFuZWwuCi0KLUBpbnRlcmZhY2UgTlNUb29sVGlwUGFuZWwgOiBOU1BhbmVs
Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNUb29sVGlwUGFuZWwgKFdlYkhUTUxWaWV3RmlsZUludGVy
bmFsKQotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gTlNUb29sVGlwUGFuZWwgKFdlYkhUTUxWaWV3
RmlsZUludGVybmFsKQotCi0tICh2b2lkKXNldEFjY2VwdHNNb3VzZU1vdmVkRXZlbnRzOihCT09M
KWZsYWcKLXsKLSAgICAvLyBEbyBub3RoaW5nLCBwcmV2ZW50aW5nIHRoZSB0b29sIHRpcCBwYW5l
bCBmcm9tIHRyeWluZyB0byBhY2NlcHQgbW91c2UtbW92ZWQgZXZlbnRzLgotfQotCi1AZW5kCi0K
LSNlbmRpZgotCi1AaW50ZXJmYWNlIE5TQXJyYXkgKFdlYkhUTUxWaWV3KQotLSAodm9pZClfd2Vi
X21ha2VQbHVnaW5WaWV3c1BlcmZvcm1TZWxlY3RvcjooU0VMKXNlbGVjdG9yIHdpdGhPYmplY3Q6
KGlkKW9iamVjdDsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3Ci0KLSsgKHZv
aWQpaW5pdGlhbGl6ZQotewotICAgIFtOU0FwcCByZWdpc3RlclNlcnZpY2VzTWVudVNlbmRUeXBl
czpbW3NlbGYgY2xhc3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm5UeXBlczpbW3NlbGYgY2xhc3NdIF9pbnNlcnRhYmxlUGFz
dGVib2FyZFR5cGVzXV07Ci0gICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0jaWZuZGVm
IEJVSUxESU5HX09OX1RJR0VSCi0gICAgV2ViQ29yZU9iakNGaW5hbGl6ZU9uTWFpblRocmVhZChz
ZWxmKTsKLSNlbmRpZgotfQotCi0tIChpZClpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJhbWUKLXsK
LSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWVdOwotICAgIGlmICghc2VsZikK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBbc2VsZiBzZXRGb2N1c1JpbmdUeXBlOk5T
Rm9jdXNSaW5nVHlwZU5vbmVdOwotICAgIAotICAgIC8vIE1ha2UgYWxsIGRyYXdpbmcgZ28gdGhy
b3VnaCB1cyBpbnN0ZWFkIG9mIHN1YnZpZXdzLgotICAgIFtzZWxmIF9zZXREcmF3c093bkRlc2Nl
bmRhbnRzOllFU107Ci0gICAgCi0gICAgX3ByaXZhdGUgPSBbW1dlYkhUTUxWaWV3UHJpdmF0ZSBh
bGxvY10gaW5pdF07Ci0KLSAgICBfcHJpdmF0ZS0+cGx1Z2luQ29udHJvbGxlciA9IFtbV2ViUGx1
Z2luQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhEb2N1bWVudFZpZXc6c2VsZl07Ci0gICAgCi0g
ICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIGlmIChXZWJDb3Jl
T2JqQ1NjaGVkdWxlRGVhbGxvY2F0ZU9uTWFpblRocmVhZChbV2ViSFRNTFZpZXcgY2xhc3NdLCBz
ZWxmKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2UgY2FuJ3QgYXNzZXJ0IHRoYXQgY2xv
c2UgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgYmVjYXVzZQotICAgIC8vIHRoaXMgdmlldyBjYW4g
YmUgcmVtb3ZlZCBmcm9tIGl0J3Mgc3VwZXJ2aWV3LCBldmVuIHRob3VnaAotICAgIC8vIGl0IGNv
dWxkIGJlIG5lZWRlZCBsYXRlciwgc28gY2xvc2UgaWYgbmVlZGVkLgotICAgIFtzZWxmIGNsb3Nl
XTsKLSAgICBbX3ByaXZhdGUgcmVsZWFzZV07Ci0gICAgX3ByaXZhdGUgPSBuaWw7Ci0gICAgW3N1
cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17Ci0gICAgQVNTRVJUX01BSU5f
VEhSRUFEKCk7Ci0gICAgLy8gV2UgY2FuJ3QgYXNzZXJ0IHRoYXQgY2xvc2UgaGFzIGFscmVhZHkg
YmVlbiBjYWxsZWQgYmVjYXVzZQotICAgIC8vIHRoaXMgdmlldyBjYW4gYmUgcmVtb3ZlZCBmcm9t
IGl0J3Mgc3VwZXJ2aWV3LCBldmVuIHRob3VnaAotICAgIC8vIGl0IGNvdWxkIGJlIG5lZWRlZCBs
YXRlciwgc28gY2xvc2UgaWYgbmVlZGVkLgotICAgIFtzZWxmIGNsb3NlXTsKLSAgICBbc3VwZXIg
ZmluYWxpemVdOwotfQotCi0vLyBSZXR1cm5zIFlFUyBpZiB0aGUgZGVsZWdhdGUgcmV0dXJucyBZ
RVMgKHNvIHdlIHNob3VsZCBkbyBubyBtb3JlIHdvcmspLgotLSAoQk9PTCljYWxsRGVsZWdhdGVE
b0NvbW1hbmRCeVNlbGVjdG9ySWZOZWVkZWQ6KFNFTClzZWxlY3RvcgotewotICAgIEJPT0wgY2Fs
bGVyQWxyZWFkeUNhbGxlZERlbGVnYXRlID0gX3ByaXZhdGUtPnNlbGVjdG9yRm9yRG9Db21tYW5k
QnlTZWxlY3RvciA9PSBzZWxlY3RvcjsKLSAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1h
bmRCeVNlbGVjdG9yID0gMDsKLSAgICBpZiAoY2FsbGVyQWxyZWFkeUNhbGxlZERlbGVnYXRlKQot
ICAgICAgICByZXR1cm4gTk87Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3
XTsKLSAgICByZXR1cm4gW1t3ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZp
ZXc6d2ViVmlldyBkb0NvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKLX0KLQotc3RhdGljIFN0
cmluZyBjb21tYW5kTmFtZUZvclNlbGVjdG9yKFNFTCBzZWxlY3RvcikKLXsKLSAgICAvLyBDaGFu
Z2UgYSBmZXcgY29tbWFuZCBuYW1lcyBpbnRvIG9uZXMgc3VwcG9ydGVkIGJ5IFdlYkNvcmU6OkVk
aXRvci4KLSAgICAvLyBJZiB0aGlzIGxpc3QgZ2V0cyB0b28gbG9uZyB3ZSBtaWdodCBkZWNpZGUg
d2UgbmVlZCB0byB1c2UgYSBoYXNoIHRhYmxlLgotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0
b3IoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yOikgfHwgc2VsZWN0b3IgPT0gQHNlbGVjdG9yKGlu
c2VydE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yOikpCi0gICAgICAgIHJldHVybiAiSW5zZXJ0
TmV3bGluZSI7Ci0gICAgaWYgKHNlbGVjdG9yID09IEBzZWxlY3RvcihpbnNlcnRUYWJJZ25vcmlu
Z0ZpZWxkRWRpdG9yOikpCi0gICAgICAgIHJldHVybiAiSW5zZXJ0VGFiIjsKLSAgICBpZiAoc2Vs
ZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VEb3duOikpCi0gICAgICAgIHJldHVybiAiTW92ZVBhZ2VE
b3duIjsKLSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VEb3duQW5kTW9kaWZ5U2Vs
ZWN0aW9uOikpCi0gICAgICAgIHJldHVybiAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9u
IjsKLSAgICBpZiAoc2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhZ2VVcDopKQotICAgICAgICByZXR1
cm4gIk1vdmVQYWdlVXAiOwotICAgIGlmIChzZWxlY3RvciA9PSBAc2VsZWN0b3IocGFnZVVwQW5k
TW9kaWZ5U2VsZWN0aW9uOikpCi0gICAgICAgIHJldHVybiAiTW92ZVBhZ2VVcEFuZE1vZGlmeVNl
bGVjdGlvbiI7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nIGNvbG9uLgotICAgIGNvbnN0
IGNoYXIqIHNlbGVjdG9yTmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKLSAgICBzaXplX3Qg
c2VsZWN0b3JOYW1lTGVuZ3RoID0gc3RybGVuKHNlbGVjdG9yTmFtZSk7Ci0gICAgaWYgKHNlbGVj
dG9yTmFtZUxlbmd0aCA8IDIgfHwgc2VsZWN0b3JOYW1lW3NlbGVjdG9yTmFtZUxlbmd0aCAtIDFd
ICE9ICc6JykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBTdHJpbmcoc2Vs
ZWN0b3JOYW1lLCBzZWxlY3Rvck5hbWVMZW5ndGggLSAxKTsKLX0KLQotLSAoRWRpdG9yOjpDb21t
YW5kKWNvcmVDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgRnJhbWUqIGNv
cmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAg
ICAgIHJldHVybiBFZGl0b3I6OkNvbW1hbmQoKTsKLSAgICByZXR1cm4gY29yZUZyYW1lLT5lZGl0
b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZUZvclNlbGVjdG9yKHNlbGVjdG9yKSk7Ci19Ci0KLS0g
KEVkaXRvcjo6Q29tbWFuZCljb3JlQ29tbWFuZEJ5TmFtZTooY29uc3QgY2hhciopbmFtZQotewot
ICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29y
ZUZyYW1lKQotICAgICAgICByZXR1cm4gRWRpdG9yOjpDb21tYW5kKCk7Ci0gICAgcmV0dXJuIGNv
cmVGcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSk7Ci19Ci0KLS0gKHZvaWQpZXhlY3V0ZUNv
cmVDb21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0gICAgaWYgKFtzZWxmIGNhbGxE
ZWxlZ2F0ZURvQ29tbWFuZEJ5U2VsZWN0b3JJZk5lZWRlZDpzZWxlY3Rvcl0pCi0gICAgICAgIHJl
dHVybjsKLSAgICBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdLmV4ZWN1dGUo
KTsKLX0KLQotLSAodm9pZClleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6KGNvbnN0IGNoYXIqKW5h
bWUKLXsKLSAgICBbc2VsZiBjb3JlQ29tbWFuZEJ5TmFtZTpuYW1lXS5leGVjdXRlKCk7Ci19Ci0K
LS8vIFRoZXNlIGNvbW1hbmRzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIEVkaXRvciBvYmplY3QgaW4g
V2ViQ29yZS4KLS8vIElkZWFsbHkgd2UnZCBkbyB0aGlzIGZvciBhbGwgZWRpdGluZyBjb21tYW5k
czsgbW9yZSBvZiB0aGUgY29kZQotLy8gc2hvdWxkIGJlIG1vdmVkIGZyb20gaGVyZSB0byB0aGVy
ZSwgYW5kIG1vcmUgY29tbWFuZHMgc2hvdWxkIGJlCi0vLyBhZGRlZCB0byB0aGlzIGxpc3QuCi0K
LS8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgc2V0IHRoaW5ncyB1cCBzbyB0aGF0IGFsbCB0aGVz
ZSBzaGFyZSBhIHNpbmdsZSBtZXRob2QgaW1wbGVtZW50YXRpb24gZnVuY3Rpb24uCi0vLyBUaGUg
ZnVuY3Rpb25zIGFyZSBpZGVudGljYWwuCi0KLSNkZWZpbmUgV0VCQ09SRV9DT01NQU5EKGNvbW1h
bmQpIC0gKHZvaWQpY29tbWFuZDooaWQpc2VuZGVyIHsgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5k
QnlTZWxlY3RvcjpfY21kXTsgfQotCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25DZW50ZXIpCi1XRUJD
T1JFX0NPTU1BTkQoYWxpZ25KdXN0aWZpZWQpCi1XRUJDT1JFX0NPTU1BTkQoYWxpZ25MZWZ0KQot
V0VCQ09SRV9DT01NQU5EKGFsaWduUmlnaHQpCi1XRUJDT1JFX0NPTU1BTkQoY29weSkKLVdFQkNP
UkVfQ09NTUFORChjdXQpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlKQotV0VCQ09SRV9DT01NQU5E
KGRlbGV0ZUJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUJhY2t3YXJkQnlEZWNvbXBv
c2luZ1ByZXZpb3VzQ2hhcmFjdGVyKQotV0VCQ09SRV9DT01NQU5EKGRlbGV0ZUZvcndhcmQpCi1X
RUJDT1JFX0NPTU1BTkQoZGVsZXRlVG9CZWdpbm5pbmdPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQo
ZGVsZXRlVG9CZWdpbm5pbmdPZlBhcmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0Vu
ZE9mTGluZSkKLVdFQkNPUkVfQ09NTUFORChkZWxldGVUb0VuZE9mUGFyYWdyYXBoKQotV0VCQ09S
RV9DT01NQU5EKGRlbGV0ZVRvTWFyaykKLVdFQkNPUkVfQ09NTUFORChkZWxldGVXb3JkQmFja3dh
cmQpCi1XRUJDT1JFX0NPTU1BTkQoZGVsZXRlV29yZEZvcndhcmQpCi1XRUJDT1JFX0NPTU1BTkQo
aWdub3JlU3BlbGxpbmcpCi1XRUJDT1JFX0NPTU1BTkQoaW5kZW50KQotV0VCQ09SRV9DT01NQU5E
KGluc2VydEJhY2t0YWIpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TGluZUJyZWFrKQotV0VCQ09S
RV9DT01NQU5EKGluc2VydE5ld2xpbmUpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0TmV3bGluZUln
bm9yaW5nRmllbGRFZGl0b3IpCi1XRUJDT1JFX0NPTU1BTkQoaW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yKQotV0VCQ09SRV9DT01NQU5EKGluc2VydFRhYikKLVdFQkNPUkVfQ09NTUFORChpbnNlcnRU
YWJJZ25vcmluZ0ZpZWxkRWRpdG9yKQotV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0Rp
cmVjdGlvbkxlZnRUb1JpZ2h0KQotV0VCQ09SRV9DT01NQU5EKG1ha2VUZXh0V3JpdGluZ0RpcmVj
dGlvbk5hdHVyYWwpCi1XRUJDT1JFX0NPTU1BTkQobWFrZVRleHRXcml0aW5nRGlyZWN0aW9uUmln
aHRUb0xlZnQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZUJhY2t3YXJkKQotV0VCQ09SRV9DT01NQU5E
KG1vdmVCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlRG93
bikKLVdFQkNPUkVfQ09NTUFORChtb3ZlRG93bkFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVf
Q09NTUFORChtb3ZlRm9yd2FyZCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlRm9yd2FyZEFuZE1vZGlm
eVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlTGVmdCkKLVdFQkNPUkVfQ09NTUFORCht
b3ZlTGVmdEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlUGFyYWdyYXBo
QmFja3dhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVBhcmFncmFw
aEZvcndhcmRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVJpZ2h0KQot
V0VCQ09SRV9DT01NQU5EKG1vdmVSaWdodEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09N
TUFORChtb3ZlVG9CZWdpbm5pbmdPZkRvY3VtZW50KQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0Jl
Z2lubmluZ09mRG9jdW1lbnRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92
ZVRvQmVnaW5uaW5nT2ZMaW5lKQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mTGlu
ZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBh
cmFncmFwaCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlBhcmFncmFwaEFuZE1v
ZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9CZWdpbm5pbmdPZlNlbnRlbmNl
KQotV0VCQ09SRV9DT01NQU5EKG1vdmVUb0JlZ2lubmluZ09mU2VudGVuY2VBbmRNb2RpZnlTZWxl
Y3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZEb2N1bWVudCkKLVdFQkNPUkVfQ09N
TUFORChtb3ZlVG9FbmRPZkRvY3VtZW50QW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01N
QU5EKG1vdmVUb0VuZE9mTGluZSkKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9FbmRPZkxpbmVBbmRN
b2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGgpCi1X
RUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZQYXJhZ3JhcGhBbmRNb2RpZnlTZWxlY3Rpb24pCi1X
RUJDT1JFX0NPTU1BTkQobW92ZVRvRW5kT2ZTZW50ZW5jZSkKLVdFQkNPUkVfQ09NTUFORChtb3Zl
VG9FbmRPZlNlbnRlbmNlQW5kTW9kaWZ5U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVU
b0xlZnRFbmRPZkxpbmUpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVRvTGVmdEVuZE9mTGluZUFuZE1v
ZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORChtb3ZlVG9SaWdodEVuZE9mTGluZSkKLVdF
QkNPUkVfQ09NTUFORChtb3ZlVG9SaWdodEVuZE9mTGluZUFuZE1vZGlmeVNlbGVjdGlvbikKLVdF
QkNPUkVfQ09NTUFORChtb3ZlVXApCi1XRUJDT1JFX0NPTU1BTkQobW92ZVVwQW5kTW9kaWZ5U2Vs
ZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkQmFja3dhcmQpCi1XRUJDT1JFX0NPTU1B
TkQobW92ZVdvcmRCYWNrd2FyZEFuZE1vZGlmeVNlbGVjdGlvbikKLVdFQkNPUkVfQ09NTUFORCht
b3ZlV29yZEZvcndhcmQpCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdvcmRGb3J3YXJkQW5kTW9kaWZ5
U2VsZWN0aW9uKQotV0VCQ09SRV9DT01NQU5EKG1vdmVXb3JkTGVmdCkKLVdFQkNPUkVfQ09NTUFO
RChtb3ZlV29yZExlZnRBbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1BTkQobW92ZVdv
cmRSaWdodCkKLVdFQkNPUkVfQ09NTUFORChtb3ZlV29yZFJpZ2h0QW5kTW9kaWZ5U2VsZWN0aW9u
KQotV0VCQ09SRV9DT01NQU5EKG91dGRlbnQpCi1XRUJDT1JFX0NPTU1BTkQocGFnZURvd24pCi1X
RUJDT1JFX0NPTU1BTkQocGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24pCi1XRUJDT1JFX0NPTU1B
TkQocGFnZVVwKQotV0VCQ09SRV9DT01NQU5EKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbikKLVdF
QkNPUkVfQ09NTUFORChzZWxlY3RBbGwpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0TGluZSkKLVdF
QkNPUkVfQ09NTUFORChzZWxlY3RQYXJhZ3JhcGgpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0U2Vu
dGVuY2UpCi1XRUJDT1JFX0NPTU1BTkQoc2VsZWN0VG9NYXJrKQotV0VCQ09SRV9DT01NQU5EKHNl
bGVjdFdvcmQpCi1XRUJDT1JFX0NPTU1BTkQoc2V0TWFyaykKLVdFQkNPUkVfQ09NTUFORChzdWJz
Y3JpcHQpCi1XRUJDT1JFX0NPTU1BTkQoc3VwZXJzY3JpcHQpCi1XRUJDT1JFX0NPTU1BTkQoc3dh
cFdpdGhNYXJrKQotV0VCQ09SRV9DT01NQU5EKHRyYW5zcG9zZSkKLVdFQkNPUkVfQ09NTUFORCh1
bmRlcmxpbmUpCi1XRUJDT1JFX0NPTU1BTkQodW5zY3JpcHQpCi1XRUJDT1JFX0NPTU1BTkQoeWFu
aykKLVdFQkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0KQotCi0jdW5kZWYgV0VCQ09SRV9DT01N
QU5ECi0KLSNkZWZpbmUgQ09NTUFORF9QUk9MT0dVRSBpZiAoW3NlbGYgY2FsbERlbGVnYXRlRG9D
b21tYW5kQnlTZWxlY3RvcklmTmVlZGVkOl9jbWRdKSByZXR1cm47Ci0KLS0gKElCQWN0aW9uKXRh
a2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9M
T0dVRQotCi0gICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkgewotICAgICAgICBOU0JlZXAo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFtOU1Bhc3RlYm9hcmQgX3dlYl9zZXRG
aW5kUGFzdGVib2FyZFN0cmluZzpbc2VsZiBzZWxlY3RlZFN0cmluZ10gd2l0aE93bmVyOnNlbGZd
OwotfQotCi0tIChCT09MKXdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQg
KilwYXN0ZWJvYXJkIHR5cGVzOihOU0FycmF5ICopdHlwZXMKLXsKLSAgICBbcGFzdGVib2FyZCBk
ZWNsYXJlVHlwZXM6dHlwZXMgb3duZXI6W3NlbGYgX3RvcEhUTUxWaWV3XV07Ci0gICAgW3NlbGYg
d3JpdGVTZWxlY3Rpb25XaXRoUGFzdGVib2FyZFR5cGVzOnR5cGVzIHRvUGFzdGVib2FyZDpwYXN0
ZWJvYXJkXTsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKXJlYWRTZWxlY3Rpb25Gcm9t
UGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAg
ICByZXR1cm4gTk87Ci0gICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpCi0gICAgICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0ZWJvYXJkOnBhc3Rl
Ym9hcmQgYWxsb3dQbGFpblRleHQ6WUVTXTsKLSAgICBlbHNlCi0gICAgICAgIFtzZWxmIF9wYXN0
ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0gICAgcmV0dXJuIFlFUzsK
LX0KLQotLSAoaWQpdmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTooTlNTdHJpbmcgKilzZW5kVHlw
ZSByZXR1cm5UeXBlOihOU1N0cmluZyAqKXJldHVyblR5cGUKLXsKLSAgICBCT09MIGlzU2VuZFR5
cGVPSyA9ICFzZW5kVHlwZSB8fCAoW1tzZWxmIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbl0g
Y29udGFpbnNPYmplY3Q6c2VuZFR5cGVdICYmIFtzZWxmIF9oYXNTZWxlY3Rpb25dKTsKLSAgICBC
T09MIGlzUmV0dXJuVHlwZU9LID0gIXJldHVyblR5cGUgfHwgKFtbW3NlbGYgY2xhc3NdIF9pbnNl
cnRhYmxlUGFzdGVib2FyZFR5cGVzXSBjb250YWluc09iamVjdDpyZXR1cm5UeXBlXSAmJiBbc2Vs
ZiBfaXNFZGl0YWJsZV0pOwotICAgIGlmIChpc1NlbmRUeXBlT0sgJiYgaXNSZXR1cm5UeXBlT0sp
Ci0gICAgICAgIHJldHVybiBzZWxmOwotICAgIHJldHVybiBbW3NlbGYgbmV4dFJlc3BvbmRlcl0g
dmFsaWRSZXF1ZXN0b3JGb3JTZW5kVHlwZTpzZW5kVHlwZSByZXR1cm5UeXBlOnJldHVyblR5cGVd
OwotfQotCi0vLyBqdW1wVG9TZWxlY3Rpb24gaXMgdGhlIG9sZCBuYW1lIGZvciB3aGF0IEFwcEtp
dCBub3cgY2FsbHMgY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYS4gU2FmYXJpCi0vLyB3YXMg
dXNpbmcgdGhlIG9sZCBqdW1wVG9TZWxlY3Rpb24gc2VsZWN0b3IgaW4gaXRzIG1lbnUuIE5ld2Vy
IHZlcnNpb25zIG9mIFNhZmFyaSB3aWxsIHVzZSB0aGUKLS8vIHNlbGVjdG9yIGNlbnRlclNlbGVj
dGlvbkluVmlzaWJsZUFyZWEuIFdlJ2xsIGxlYXZlIHRoZSBvbGQgc2VsZWN0b3IgaW4gcGxhY2Ug
Zm9yIHR3byByZWFzb25zOgotLy8gKDEpIENvbXBhdGliaWxpdHkgYmV0d2VlbiBvbGRlciBTYWZh
cmkgYW5kIG5ld2VyIFdlYktpdDsgKDIpIG90aGVyIFdlYktpdC1iYXNlZCBhcHBsaWNhdGlvbnMK
LS8vIG1pZ2h0IGJlIHVzaW5nIHRoZSBzZWxlY3RvciwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYnJl
YWsgdGhlbS4KLS0gKHZvaWQpanVtcFRvU2VsZWN0aW9uOihpZClzZW5kZXIKLXsKLSAgICBDT01N
QU5EX1BST0xPR1VFCi0KLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+cmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25DZW50ZXJBbHdheXMpOwotfQotCi0tIChOU0NlbGxTdGF0ZVZhbHVlKXNlbGVjdGlv
bkhhc1N0eWxlOihDU1NTdHlsZURlY2xhcmF0aW9uKilzdHlsZQotewotICAgIEZyYW1lKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAg
ICByZXR1cm4gTlNPZmZTdGF0ZTsKLSAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+ZWRpdG9yKCkt
PnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlKSk7Ci19Ci0KLS0gKEJPT0wpdmFsaWRhdGVVc2VySW50
ZXJmYWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0
ZW0+KWl0ZW0KLXsKLSAgICBTRUwgYWN0aW9uID0gW2l0ZW0gYWN0aW9uXTsKLSAgICBSZWZQdHI8
RnJhbWU+IGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLQotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICAKLSAgICBpZiAoRG9jdW1lbnQqIGRvYyA9IGZyYW1lLT5k
b2N1bWVudCgpKSB7Ci0gICAgICAgIGlmIChkb2MtPmlzUGx1Z2luRG9jdW1lbnQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgaWYgKGRvYy0+aXNJbWFnZURvY3VtZW50KCkpIHsg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKGNvcHk6KSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5pc0NvbXBsZXRlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihjaGFuZ2VTcGVsbGluZzopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0g
QHNlbGVjdG9yKF9jaGFuZ2VTcGVsbGluZ0Zyb21NZW51OikKLSAgICAgICAgICAgIHx8IGFjdGlv
biA9PSBAc2VsZWN0b3IoY2hlY2tTcGVsbGluZzopCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0g
QHNlbGVjdG9yKGNvbXBsZXRlOikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3Io
cGFzdGVGb250OikpCi0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0KLSAgICBpZiAo
YWN0aW9uID09IEBzZWxlY3RvcihzaG93R3Vlc3NQYW5lbDopKSB7Ci0jaWZuZGVmIEJVSUxESU5H
X09OX1RJR0VSCi0gICAgICAgIC8vIE1hdGNoIE9TIFggQXBwS2l0IGJlaGF2aW9yIGZvciBwb3N0
LVRpZ2VyLiBEb24ndCBjaGFuZ2UgVGlnZXIgYmVoYXZpb3IuCi0gICAgICAgIE5TTWVudUl0ZW0g
Km1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlz
S2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgQk9PTCBwYW5l
bFNob3dpbmcgPSBbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHNwZWxsaW5n
UGFuZWxdIGlzVmlzaWJsZV07Ci0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6cGFuZWxT
aG93aW5nCi0gICAgICAgICAgICAgICAgPyBVSV9TVFJJTkcoIkhpZGUgU3BlbGxpbmcgYW5kIEdy
YW1tYXIiLCAibWVudSBpdGVtIHRpdGxlIikKLSAgICAgICAgICAgICAgICA6IFVJX1NUUklORygi
U2hvdyBTcGVsbGluZyBhbmQgR3JhbW1hciIsICJtZW51IGl0ZW0gdGl0bGUiKV07Ci0gICAgICAg
IH0KLSNlbmRpZgotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICAK
LSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjop
Ci0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKG1ha2VCYXNlV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0OikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IobWFr
ZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6KSkgewotICAgICAgICBOU1dyaXRpbmdE
aXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlvbjsKLQotICAgICAgICBpZiAoYWN0aW9uID09IEBzZWxl
Y3RvcihjaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvbjopKSB7Ci0gICAgICAgICAgICB3cml0aW5n
RGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8TlNXcml0aW5nRGlyZWN0aW9uPihbaXRlbSB0YWddKTsK
LSAgICAgICAgICAgIGlmICh3cml0aW5nRGlyZWN0aW9uID09IE5TV3JpdGluZ0RpcmVjdGlvbk5h
dHVyYWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICB9IGVsc2UgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IobWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6KSkK
LSAgICAgICAgICAgIHdyaXRpbmdEaXJlY3Rpb24gPSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9S
aWdodDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgd3JpdGluZ0RpcmVjdGlvbiA9IE5TV3Jp
dGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwotCi0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVt
ID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xh
c3M6W05TTWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlRGVj
bGFyYXRpb24+IHN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwot
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9w
ZXJ0eSgiZGlyZWN0aW9uIiwgd3JpdGluZ0RpcmVjdGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25M
ZWZ0VG9SaWdodCA/ICJMVFIiIDogIlJUTCIsIGVjKTsKLSAgICAgICAgICAgIFttZW51SXRlbSBz
ZXRTdGF0ZTpmcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGlvbkhhc1N0eWxlKHN0eWxlLmdldCgpKV07
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0XTsKLSAgICB9Ci0KLSAg
ICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25OYXR1cmFs
OikpIHsKLSAgICAgICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07
Ci0gICAgICAgIGlmIChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11d
KQotICAgICAgICAgICAgW21lbnVJdGVtIHNldFN0YXRlOk5TT2ZmU3RhdGVdOwotICAgICAgICBy
ZXR1cm4gTk87Ci0gICAgfQotCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQmFz
ZVdyaXRpbmdEaXJlY3Rpb246KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChO
U01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltO
U01lbnVJdGVtIGNsYXNzXV0pIHsKLSAgICAgICAgICAgIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHko
ImRpcmVjdGlvbiIsICJSVEwiLCBlYyk7Ci0gICAgICAgICAgICAvLyBUYWtlIGNvbnRyb2wgb2Yg
dGhlIHRpdGxlIG9mIHRoZSBtZW51IGl0ZW0gaW5zdGVhZCBvZiBqdXN0IGNoZWNraW5nL3VuY2hl
Y2tpbmcgaXQgYmVjYXVzZQotICAgICAgICAgICAgLy8gYSBjaGVjayB3b3VsZCBiZSBhbWJpZ3Vv
dXMuCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6ZnJhbWUtPmVkaXRvcigpLT5zZWxl
Y3Rpb25IYXNTdHlsZShzdHlsZS5nZXQoKSkKLSAgICAgICAgICAgICAgICA/IFVJX1NUUklORygi
TGVmdCB0byBSaWdodCIsICJMZWZ0IHRvIFJpZ2h0IGNvbnRleHQgbWVudSBpdGVtIikKLSAgICAg
ICAgICAgICAgICA6IFVJX1NUUklORygiUmlnaHQgdG8gTGVmdCIsICJSaWdodCB0byBMZWZ0IGNv
bnRleHQgbWVudSBpdGVtIildOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2Fu
RWRpdF07Ci0gICAgfSAKLSAgICAKLSAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihjaGFuZ2VB
dHRyaWJ1dGVzOikKLSAgICAgICAgICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdlQ29s
b3I6KSAgICAgICAgCi0gICAgICAgICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGNoYW5nZUZv
bnQ6KSkKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9jYW5FZGl0UmljaGx5XTsKLSAgICAKLSAgICBp
ZiAoYWN0aW9uID09IEBzZWxlY3RvcihjYXBpdGFsaXplV29yZDopCi0gICAgICAgICAgICAgICB8
fCBhY3Rpb24gPT0gQHNlbGVjdG9yKGxvd2VyY2FzZVdvcmQ6KQotICAgICAgICAgICAgICAgfHwg
YWN0aW9uID09IEBzZWxlY3Rvcih1cHBlcmNhc2VXb3JkOikpCi0gICAgICAgIHJldHVybiBbc2Vs
ZiBfaGFzU2VsZWN0aW9uXSAmJiBbc2VsZiBfaXNFZGl0YWJsZV07Ci0KLSAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3RvcihjZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhOikKLSAgICAgICAgICAg
ICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoanVtcFRvU2VsZWN0aW9uOikKLSAgICAgICAgICAg
ICAgIHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoY29weUZvbnQ6KSkKLSAgICAgICAgcmV0dXJuIFtz
ZWxmIF9oYXNTZWxlY3Rpb25dIHx8IChbc2VsZiBfaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2hhc0lu
c2VydGlvblBvaW50XSk7Ci0gICAgCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IoY2hhbmdl
RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6KSkKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBfd2ViVmll
d10gaXNFZGl0YWJsZV0gJiYgW3NlbGYgX2NhbkVkaXRSaWNobHldOwotICAgIAotICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKF9pZ25vcmVTcGVsbGluZ0Zyb21NZW51OikKLSAgICAgICAgICAg
IHx8IGFjdGlvbiA9PSBAc2VsZWN0b3IoX2xlYXJuU3BlbGxpbmdGcm9tTWVudTopCi0gICAgICAg
ICAgICB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHRha2VGaW5kU3RyaW5nRnJvbVNlbGVjdGlvbjop
KQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07Ci0gICAgCi0gICAgaWYgKGFj
dGlvbiA9PSBAc2VsZWN0b3IocGFzdGU6KSB8fCBhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlQXNQ
bGFpblRleHQ6KSkKLSAgICAgICAgcmV0dXJuIGZyYW1lICYmIChmcmFtZS0+ZWRpdG9yKCktPmNh
bkRIVE1MUGFzdGUoKSB8fCBmcmFtZS0+ZWRpdG9yKCktPmNhblBhc3RlKCkpOwotICAgIAotICAg
IGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlQXNSaWNoVGV4dDopKQotICAgICAgICByZXR1
cm4gZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxQYXN0ZSgpCi0gICAgICAgICAg
ICB8fCAoZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkpOwotICAgIAotICAgIGlmIChhY3Rpb24gPT0gQHNl
bGVjdG9yKHBlcmZvcm1GaW5kUGFuZWxBY3Rpb246KSkKLSAgICAgICAgcmV0dXJuIE5POwotICAg
IAotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKF9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVu
dTopKQotICAgICAgICByZXR1cm4gW3NlbGYgX2hhc1NlbGVjdGlvbl07Ci0gICAgCi0jaWZuZGVm
IEJVSUxESU5HX09OX1RJR0VSCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlR3Jh
bW1hckNoZWNraW5nOikpIHsKLSAgICAgICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0
aGUgYm90dGxlbmVjayBmb3IgdGhpcyBncmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVz
dCB2YWxpZGF0ZSAKLSAgICAgICAgLy8gdGhlIHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3ZSBpbXBs
ZW1lbnQgaXQgaGVyZSwgYW5kIHdlIG11c3QgaW1wbGVtZW50IGl0IGhlcmUgYmVjYXVzZSB0aGUg
QXBwS2l0IAotICAgICAgICAvLyBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVyLgotICAg
ICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAg
aWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAg
ICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3NlbGYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkXSA/
IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwotICAgICAgICByZXR1cm4gWUVTOwotICAgIH0KLSNl
bmRpZgotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3Iob3JkZXJGcm9udFN1
YnN0aXR1dGlvbnNQYW5lbDopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5T
TWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05T
TWVudUl0ZW0gY2xhc3NdXSkgewotICAgICAgICAgICAgQk9PTCBwYW5lbFNob3dpbmcgPSBbW1tO
U1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHN1YnN0aXR1dGlvbnNQYW5lbF0gaXNW
aXNpYmxlXTsKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRUaXRsZTpwYW5lbFNob3dpbmcKLSAg
ICAgICAgICAgICAgICA/IFVJX1NUUklORygiSGlkZSBTdWJzdGl0dXRpb25zIiwgIm1lbnUgaXRl
bSB0aXRsZSIpCi0gICAgICAgICAgICAgICAgOiBVSV9TVFJJTkcoIlNob3cgU3Vic3RpdHV0aW9u
cyIsICJtZW51IGl0ZW0gdGl0bGUiKV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFtzZWxm
IF9jYW5FZGl0XTsKLSAgICB9Ci0gICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUg
Ym90dGxlbmVjayBmb3IgdGhpcyBsb2dpYywgYnV0IHdlIG11c3QgdmFsaWRhdGUgCi0gICAgLy8g
dGhlIHNlbGVjdG9yIGhlcmUgYmVjYXVzZSB3ZSBpbXBsZW1lbnQgaXQgaGVyZSwgYW5kIHdlIG11
c3QgaW1wbGVtZW50IGl0IGhlcmUgYmVjYXVzZSB0aGUgQXBwS2l0IAotICAgIC8vIGNvZGUgY2hl
Y2tzIHRoZSBmaXJzdCByZXNwb25kZXIuCi0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9n
Z2xlU21hcnRJbnNlcnREZWxldGU6KSkgewotICAgICAgICBOU01lbnVJdGVtICptZW51SXRlbSA9
IChOU01lbnVJdGVtICopaXRlbTsKLSAgICAgICAgaWYgKFttZW51SXRlbSBpc0tpbmRPZkNsYXNz
OltOU01lbnVJdGVtIGNsYXNzXV0pCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0U3RhdGU6W3Nl
bGYgc21hcnRJbnNlcnREZWxldGVFbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVdOwot
ICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0aW9uID09
IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbjopKSB7Ci0gICAgICAg
IE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAo
W21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAg
IFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5h
YmxlZF0gPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIF9j
YW5FZGl0XTsKLSAgICB9Ci0gICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0b3IodG9nZ2xlQXV0b21h
dGljTGlua0RldGVjdGlvbjopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5T
TWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05T
TWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBp
c0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkXSA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVd
OwotICAgICAgICByZXR1cm4gW3NlbGYgX2NhbkVkaXRdOwotICAgIH0KLSAgICBpZiAoYWN0aW9u
ID09IEBzZWxlY3Rvcih0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uOikpIHsKLSAgICAg
ICAgTlNNZW51SXRlbSAqbWVudUl0ZW0gPSAoTlNNZW51SXRlbSAqKWl0ZW07Ci0gICAgICAgIGlm
IChbbWVudUl0ZW0gaXNLaW5kT2ZDbGFzczpbTlNNZW51SXRlbSBjbGFzc11dKQotICAgICAgICAg
ICAgW21lbnVJdGVtIHNldFN0YXRlOltzZWxmIGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBf
Y2FuRWRpdF07Ci0gICAgfQotICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9t
YXRpY1RleHRSZXBsYWNlbWVudDopKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0g
KE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6
W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2Vs
ZiBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZT
dGF0ZV07Ci0gICAgICAgIHJldHVybiBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotICAgIGlmIChh
Y3Rpb24gPT0gQHNlbGVjdG9yKHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbjopKSB7
Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVtID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAg
ICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xhc3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAg
ICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpbc2VsZiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbkVuYWJsZWRdID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Ci0gICAgICAgIHJldHVy
biBbc2VsZiBfY2FuRWRpdF07Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgRWRpdG9yOjpDb21t
YW5kIGNvbW1hbmQgPSBbc2VsZiBjb3JlQ29tbWFuZEJ5U2VsZWN0b3I6YWN0aW9uXTsKLSAgICBp
ZiAoY29tbWFuZC5pc1N1cHBvcnRlZCgpKSB7Ci0gICAgICAgIE5TTWVudUl0ZW0gKm1lbnVJdGVt
ID0gKE5TTWVudUl0ZW0gKilpdGVtOwotICAgICAgICBpZiAoW21lbnVJdGVtIGlzS2luZE9mQ2xh
c3M6W05TTWVudUl0ZW0gY2xhc3NdXSkKLSAgICAgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTpr
aXQoY29tbWFuZC5zdGF0ZSgpKV07Ci0gICAgICAgIHJldHVybiBjb21tYW5kLmlzRW5hYmxlZCgp
OwotICAgIH0KLQotICAgIHJldHVybiBZRVM7Ci19Ci0KLS0gKEJPT0wpdmFsaWRhdGVVc2VySW50
ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KLXsKLSAg
ICAvLyBUaGlzIGNhbiBiZSBjYWxsZWQgZHVyaW5nIHRlYXJkb3duIHdoZW4gX3dlYlZpZXcgaXMg
bmlsLiBSZXR1cm4gTk8gd2hlbiB0aGlzIGhhcHBlbnMsIGJlY2F1c2UgQ2FsbFVJRGVsZWdhdGVS
ZXR1cm5pbmdCb29sZWFuCi0gICAgLy8gYXNzdW1lcyB0aGUgV2ViVklldyBpcyBub24tbmlsLgot
ICAgIGlmICghW3NlbGYgX3dlYlZpZXddKQotICAgICAgICByZXR1cm4gTk87Ci0gICAgQk9PTCBy
ZXN1bHQgPSBbc2VsZiB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOml0
ZW1dOwotICAgIHJldHVybiBDYWxsVUlEZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4ocmVzdWx0LCBb
c2VsZiBfd2ViVmlld10sIEBzZWxlY3Rvcih3ZWJWaWV3OnZhbGlkYXRlVXNlckludGVyZmFjZUl0
ZW06ZGVmYXVsdFZhbGlkYXRpb246KSwgaXRlbSwgcmVzdWx0KTsKLX0KLQotLSAoQk9PTClhY2Nl
cHRzRmlyc3RSZXNwb25kZXIKLXsKLSAgICAvLyBEb24ndCBhY2NlcHQgZmlyc3QgcmVzcG9uZGVy
IHdoZW4gd2UgZmlyc3QgY2xpY2sgb24gdGhpcyB2aWV3LgotICAgIC8vIFdlIGhhdmUgdG8gcGFz
cyB0aGUgZXZlbnQgZG93biB0aHJvdWdoIFdlYkNvcmUgZmlyc3QgdG8gYmUgc3VyZSB3ZSBkb24n
dCBoaXQgYSBzdWJ2aWV3LgotICAgIC8vIERvIGFjY2VwdCBmaXJzdCByZXNwb25kZXIgYXQgYW55
IG90aGVyIHRpbWUsIGZvciBleGFtcGxlIGZyb20ga2V5Ym9hcmQgZXZlbnRzLAotICAgIC8vIG9y
IGZyb20gY2FsbHMgYmFjayBmcm9tIFdlYkNvcmUgb25jZSB3ZSBiZWdpbiBtb3VzZS1kb3duIGV2
ZW50IGhhbmRsaW5nLgotICAgIE5TRXZlbnQgKmV2ZW50ID0gW05TQXBwIGN1cnJlbnRFdmVudF07
Ci0gICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0xlZnRNb3VzZURvd24KLSAgICAgICAgICAgICYm
ICFfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudAotICAgICAgICAgICAgJiYgTlNQb2lu
dEluUmVjdChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtzZWxmIGNvbnZlcnRSZWN0OltzZWxm
IHZpc2libGVSZWN0XSB0b1ZpZXc6bmlsXSkpIHsKLSAgICAgICAgcmV0dXJuIE5POwotICAgIH0K
LSAgICByZXR1cm4gWUVTOwotfQotCi0tIChCT09MKW1haW50YWluc0luYWN0aXZlU2VsZWN0aW9u
Ci17Ci0gICAgLy8gVGhpcyBtZXRob2QgaGVscHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFdl
YkhUTUxWaWV3IHNob3VsZCBtYWludGFpbgotICAgIC8vIGFuIGluYWN0aXZlIHNlbGVjdGlvbiB3
aGVuIGl0J3Mgbm90IGZpcnN0IHJlc3BvbmRlci4KLSAgICAvLyBUcmFkaXRpb25hbGx5LCB0aGVz
ZSB2aWV3cyBoYXZlIG5vdCBtYWludGFpbmVkIHN1Y2ggc2VsZWN0aW9ucywKLSAgICAvLyBjbGVh
cmluZyB0aGVtIHdoZW4gdGhlIHZpZXcgd2FzIG5vdCBmaXJzdCByZXNwb25kZXIuIEhvd2V2ZXIs
Ci0gICAgLy8gdG8gZml4IGJ1Z3MgbGlrZSB0aGlzIG9uZToKLSAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vMzY3MjA4OD46ICJFZGl0YWJsZSBXZWJWaWV3cyBzaG91bGQgbWFpbnRhaW4gYSBzZWxlY3Rp
b24gZXZlbiAKLSAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZXkncmUg
bm90IGZpcnN0UmVzcG9uZGVyIgotICAgIC8vIGl0IHdhcyBkZWNpZGVkIHRvIGFkZCBhIHN3aXRj
aCB0byBhY3QgbW9yZSBsaWtlIGFuIE5TVGV4dFZpZXcuCi0KLSAgICBpZiAoW1tzZWxmIF93ZWJW
aWV3XSBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0K
LSAgICAvLyBQcmVkaWN0IHRoZSBjYXNlIHdoZXJlIHdlIGFyZSBsb3NpbmcgZmlyc3QgcmVzcG9u
ZGVyIHN0YXR1cyBvbmx5IHRvCi0gICAgLy8gZ2FpbiBpdCBiYWNrIGFnYWluLiBXYW50IHRvIGtl
ZXAgdGhlIHNlbGVjdGlvbiBpbiB0aGF0IGNhc2UuCi0gICAgaWQgbmV4dFJlc3BvbmRlciA9IFtb
c2VsZiB3aW5kb3ddIF9uZXdGaXJzdFJlc3BvbmRlckFmdGVyUmVzaWduaW5nXTsKLSAgICBpZiAo
W25leHRSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNTY3JvbGxWaWV3IGNsYXNzXV0pIHsKLSAg
ICAgICAgaWQgY29udGVudFZpZXcgPSBbbmV4dFJlc3BvbmRlciBjb250ZW50Vmlld107Ci0gICAg
ICAgIGlmIChjb250ZW50VmlldykKLSAgICAgICAgICAgIG5leHRSZXNwb25kZXIgPSBjb250ZW50
VmlldzsKLSAgICB9Ci0gICAgaWYgKFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TQ2xp
cFZpZXcgY2xhc3NdXSkgewotICAgICAgICBpZCBkb2N1bWVudFZpZXcgPSBbbmV4dFJlc3BvbmRl
ciBkb2N1bWVudFZpZXddOwotICAgICAgICBpZiAoZG9jdW1lbnRWaWV3KQotICAgICAgICAgICAg
bmV4dFJlc3BvbmRlciA9IGRvY3VtZW50VmlldzsKLSAgICB9Ci0gICAgaWYgKG5leHRSZXNwb25k
ZXIgPT0gc2VsZikKLSAgICAgICAgcmV0dXJuIFlFUzsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNv
cmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOwot
ICAgIGJvb2wgbmV4dFJlc3BvbmRlcklzSW5XZWJWaWV3ID0gW25leHRSZXNwb25kZXIgaXNLaW5k
T2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0KLSAgICAgICAgJiYgW25leHRSZXNwb25kZXIgaXNEZXNj
ZW5kYW50T2Y6W1tbc2VsZiBfd2ViVmlld10gbWFpbkZyYW1lXSBmcmFtZVZpZXddXTsKLQotICAg
IHJldHVybiBzZWxlY3Rpb25Jc0VkaXRhYmxlICYmIG5leHRSZXNwb25kZXJJc0luV2ViVmlldzsK
LX0KLQotLSAodm9pZClhZGRNb3VzZU1vdmVkT2JzZXJ2ZXIKLXsKLSAgICBpZiAoIV9wcml2YXRl
LT5kYXRhU291cmNlIHx8ICFbc2VsZiBfaXNUb3BIVE1MVmlld10gfHwgX3ByaXZhdGUtPm9ic2Vy
dmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBV
bmxlc3MgdGhlIERhc2hib2FyZCBhc2tzIHVzIHRvIGRvIHRoaXMgZm9yIGFsbCB3aW5kb3dzLCBr
ZWVwIGFuIG9ic2VydmVyIGdvaW5nIG9ubHkgZm9yIHRoZSBrZXkgd2luZG93LgotICAgIGlmICgh
KFtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSAKLSNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCi0gICAgICAgICAgICB8fCBbW3NlbGYgX3dlYlZpZXddIF9kYXNoYm9hcmRCZWhhdmlvcjpX
ZWJEYXNoYm9hcmRCZWhhdmlvckFsd2F5c1NlbmRNb3VzZUV2ZW50c1RvQWxsV2luZG93c10KLSNl
bmRpZgotICAgICAgICApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9y
KG1vdXNlTW92ZWROb3RpZmljYXRpb246KQotICAgICAgICBuYW1lOldLTW91c2VNb3ZlZE5vdGlm
aWNhdGlvbigpIG9iamVjdDpuaWxdOwotICAgIFtzZWxmIF9mcmFtZU9yQm91bmRzQ2hhbmdlZF07
Ci0gICAgX3ByaXZhdGUtPm9ic2VydmluZ01vdXNlTW92ZWROb3RpZmljYXRpb25zID0gdHJ1ZTsK
LX0KLQotLSAodm9pZClyZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXIKLXsKLSNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCi0gICAgLy8gRG9uJ3QgcmVtb3ZlIHRoZSBvYnNlcnZlciBpZiB3ZSdy
ZSBydW5uaW5nIHRoZSBEYXNoYm9hcmQuCi0gICAgaWYgKFtbc2VsZiBfd2ViVmlld10gX2Rhc2hi
b2FyZEJlaGF2aW9yOldlYkRhc2hib2FyZEJlaGF2aW9yQWx3YXlzU2VuZE1vdXNlRXZlbnRzVG9B
bGxXaW5kb3dzXSkKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSAgICBbW3NlbGYgX3dlYlZp
ZXddIF9tb3VzZURpZE1vdmVPdmVyRWxlbWVudDpuaWwgbW9kaWZpZXJGbGFnczowXTsKLSAgICBb
c2VsZiBfcmVtb3ZlTW91c2VNb3ZlZE9ic2VydmVyVW5jb25kaXRpb25hbGx5XTsKLX0KLQotLSAo
dm9pZClhZGRTdXBlcnZpZXdPYnNlcnZlcnMKLXsKLSAgICBpZiAoX3ByaXZhdGUtPm9ic2Vydmlu
Z1N1cGVydmlld05vdGlmaWNhdGlvbnMpCi0gICAgICAgIHJldHVybjsKLQotICAgIE5TVmlldyAq
c3VwZXJ2aWV3ID0gW3NlbGYgc3VwZXJ2aWV3XTsKLSAgICBpZiAoIXN1cGVydmlldyB8fCAhW3Nl
bGYgd2luZG93XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TTm90aWZpY2F0aW9uQ2Vu
dGVyICpub3RpZmljYXRpb25DZW50ZXIgPSBbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9y
OkBzZWxlY3RvcihfZnJhbWVPckJvdW5kc0NoYW5nZWQpIG5hbWU6TlNWaWV3RnJhbWVEaWRDaGFu
Z2VOb3RpZmljYXRpb24gb2JqZWN0OnN1cGVydmlld107Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRl
ciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihfZnJhbWVPckJvdW5kc0NoYW5n
ZWQpIG5hbWU6TlNWaWV3Qm91bmRzRGlkQ2hhbmdlTm90aWZpY2F0aW9uIG9iamVjdDpzdXBlcnZp
ZXddOwotICAgIAotICAgIC8vIEluIGFkZGl0aW9uIHRvIHJlZ2lzdGVyaW5nIGZvciBmcmFtZS9i
b3VuZHMgY2hhbmdlIG5vdGlmaWNhdGlvbnMsIGNhbGwgLV9mcmFtZU9yQm91bmRzQ2hhbmdlZC4K
LSAgICAvLyBJdCB3aWxsIGNoZWNrIHRoZSBjdXJyZW50IHNjcm9sbCBhZ2FpbnN0IHRoZSBwcmV2
aW91cyBsYXlvdXQncyBzY3JvbGwuICBXZSBuZWVkIHRvCi0gICAgLy8gZG8gdGhpcyBoZXJlIHRv
IGNhdGNoIHRoZSBjYXNlIHdoZXJlIHRoZSBXZWJWaWV3IGlzIGxhaWQgb3V0IGF0IG9uZSBzaXpl
LCByZW1vdmVkIGZyb20gaXRzCi0gICAgLy8gd2luZG93LCByZXNpemVkLCBhbmQgaW5zZXJ0ZWQg
aW50byBhbm90aGVyIHdpbmRvdy4gIE91ciBmcmFtZS9ib3VuZHMgY2hhbmdlZCBub3RpZmljYXRp
b25zCi0gICAgLy8gd2lsbCBub3QgYmUgc2VudCBpbiB0aGF0IHNpdHVhdGlvbiwgc2luY2Ugd2Ug
b25seSB3YXRjaCBmb3IgY2hhbmdlcyB3aGlsZSBpbiB0aGUgdmlldyBoaWVyYXJjaHkuCi0gICAg
W3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKLSAgICAKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2
aW5nU3VwZXJ2aWV3Tm90aWZpY2F0aW9ucyA9IHRydWU7Ci19Ci0KLS0gKHZvaWQpYWRkV2luZG93
T2JzZXJ2ZXJzCi17Ci0gICAgaWYgKF9wcml2YXRlLT5vYnNlcnZpbmdXaW5kb3dOb3RpZmljYXRp
b25zKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtzZWxm
IHdpbmRvd107Ci0gICAgaWYgKCF3aW5kb3cpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBO
U05vdGlmaWNhdGlvbkNlbnRlciAqbm90aWZpY2F0aW9uQ2VudGVyID0gW05TTm90aWZpY2F0aW9u
Q2VudGVyIGRlZmF1bHRDZW50ZXJdOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93RGlkQmVjb21lS2V5OikgbmFtZTpOU1dp
bmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKLSAgICBbbm90aWZpY2F0
aW9uQ2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpbmRvd0RpZFJl
c2lnbktleTopIG5hbWU6TlNXaW5kb3dEaWRSZXNpZ25LZXlOb3RpZmljYXRpb24gb2JqZWN0Om5p
bF07Ci0gICAgW25vdGlmaWNhdGlvbkNlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBz
ZWxlY3Rvcih3aW5kb3dXaWxsQ2xvc2U6KSBuYW1lOk5TV2luZG93V2lsbENsb3NlTm90aWZpY2F0
aW9uIG9iamVjdDp3aW5kb3ddOwotICAgIFtub3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6
c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2luZG93V2lsbE9yZGVyT25TY3JlZW46KSBuYW1lOldL
V2luZG93V2lsbE9yZGVyT25TY3JlZW5Ob3RpZmljYXRpb24oKSBvYmplY3Q6d2luZG93XTsKLSAg
ICAKLSAgICBfcHJpdmF0ZS0+b2JzZXJ2aW5nV2luZG93Tm90aWZpY2F0aW9ucyA9IHRydWU7Ci19
Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9TdXBlcnZpZXc6KE5TVmlldyAqKW5ld1N1cGVydmll
dwotewotICAgIFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwotfQotCi0tICh2b2lk
KXZpZXdEaWRNb3ZlVG9TdXBlcnZpZXcKLXsKLSAgICBpZiAoW3NlbGYgc3VwZXJ2aWV3XSAhPSBu
aWwpCi0gICAgICAgIFtzZWxmIGFkZFN1cGVydmlld09ic2VydmVyc107Ci19Ci0KLXN0YXRpYyB2
b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lckNhbGxiYWNrKENGUnVuTG9vcFRp
bWVyUmVmIHRpbWVyLCB2b2lkICppbmZvKQotewotICAgIFdlYkhUTUxWaWV3ICp2aWV3ID0gKFdl
YkhUTUxWaWV3ICopaW5mbzsKLSAgICBbdmlldyBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRl
XTsKLX0KLQotLSAodm9pZCl2aWV3V2lsbE1vdmVUb1dpbmRvdzooTlNXaW5kb3cgKil3aW5kb3cK
LXsKLSAgICAvLyBEb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBhcmVuJ3QgaW5pdGlhbGl6ZWQuICBU
aGlzIGhhcHBlbnMKLSAgICAvLyB3aGVuIGRlY29kaW5nIGEgV2ViVmlldy4gIFdoZW4gV2ViVmll
d3MgYXJlIGRlY29kZWQgdGhlaXIgc3Vidmlld3MKLSAgICAvLyBhcmUgY3JlYXRlZCBieSBpbml0
V2l0aENvZGVyOiBhbmQgc28gd29uJ3QgYmUgbm9ybWFsbHkKLSAgICAvLyBpbml0aWFsaXplZC4g
IFRoZSBzdHViIHZpZXdzIGFyZSBkaXNjYXJkZWQgYnkgV2ViVmlldy4KLSAgICBpZiAoIV9wcml2
YXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogU29tZSBvZiB0aGVzZSBjYWxs
cyBtYXkgbm90IHdvcmsgYmVjYXVzZSB0aGlzIHZpZXcgbWF5IGJlIGFscmVhZHkgcmVtb3ZlZCBm
cm9tIGl0J3Mgc3VwZXJ2aWV3LgotICAgIFtzZWxmIF9yZW1vdmVNb3VzZU1vdmVkT2JzZXJ2ZXJV
bmNvbmRpdGlvbmFsbHldOwotICAgIFtzZWxmIF9yZW1vdmVXaW5kb3dPYnNlcnZlcnNdOwotICAg
IFtzZWxmIF9yZW1vdmVTdXBlcnZpZXdPYnNlcnZlcnNdOwotICAgIFtzZWxmIF9jYW5jZWxVcGRh
dGVNb3VzZW92ZXJUaW1lcl07Ci0gICAgW3NlbGYgX2NhbmNlbFVwZGF0ZUZvY3VzZWRBbmRBY3Rp
dmVTdGF0ZVRpbWVyXTsKLSAgICAKLSAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIHN0b3BB
bGxQbHVnaW5zXTsKLX0KLQotLSAodm9pZCl2aWV3RGlkTW92ZVRvV2luZG93Ci17Ci0gICAgLy8g
RG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UgYXJlbid0IGluaXRpYWxpemVkLiAgVGhpcyBoYXBwZW5z
Ci0gICAgLy8gd2hlbiBkZWNvZGluZyBhIFdlYlZpZXcuICBXaGVuIFdlYlZpZXdzIGFyZSBkZWNv
ZGVkIHRoZWlyIHN1YnZpZXdzCi0gICAgLy8gYXJlIGNyZWF0ZWQgYnkgaW5pdFdpdGhDb2Rlcjog
YW5kIHNvIHdvbid0IGJlIG5vcm1hbGx5Ci0gICAgLy8gaW5pdGlhbGl6ZWQuICBUaGUgc3R1YiB2
aWV3cyBhcmUgZGlzY2FyZGVkIGJ5IFdlYlZpZXcuCi0gICAgaWYgKCFfcHJpdmF0ZSB8fCBfcHJp
dmF0ZS0+Y2xvc2VkKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIFtzZWxmIF9zdG9w
QXV0b3Njcm9sbFRpbWVyXTsKLSAgICBpZiAoW3NlbGYgd2luZG93XSkgewotICAgICAgICBfcHJp
dmF0ZS0+bGFzdFNjcm9sbFBvc2l0aW9uID0gW1tzZWxmIHN1cGVydmlld10gYm91bmRzXS5vcmln
aW47Ci0gICAgICAgIFtzZWxmIGFkZFdpbmRvd09ic2VydmVyc107Ci0gICAgICAgIFtzZWxmIGFk
ZFN1cGVydmlld09ic2VydmVyc107Ci0gICAgICAgIFtzZWxmIGFkZE1vdXNlTW92ZWRPYnNlcnZl
cl07Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB1cGRhdGUsIHJhdGhlciB0aGFuIG1ha2lu
ZyB0aGUgY2FsbCByaWdodCBub3cuCi0gICAgICAgIC8vIFRoZSByZWFzb24gaXMgdGhhdCBwbGFj
aW5nIHRoZSBjYXJldCBpbiB0aGUganVzdC1pbnN0YWxsZWQgdmlldyByZXF1aXJlcwotICAgICAg
ICAvLyB0aGUgSFRNTC9YTUwgZG9jdW1lbnQgdG8gYmUgYXZhaWxhYmxlIG9uIHRoZSBXZWJDb3Jl
IHNpZGUsIGJ1dCBpdCBpcyBub3QKLSAgICAgICAgLy8gYXQgdGhlIHRpbWUgdGhpcyBjb2RlIGlz
IHJ1bm5pbmcuIEhvd2V2ZXIsIGl0IHdpbGwgYmUgdGhlcmUgb24gdGhlIG5leHQKLSAgICAgICAg
Ly8gY3Jhbmsgb2YgdGhlIHJ1biBsb29wLiBEb2luZyB0aGlzIGhlbHBzIHRvIG1ha2UgYSBibGlu
a2luZyBjYXJldCBhcHBlYXIgCi0gICAgICAgIC8vIGluIGEgbmV3LCBlbXB0eSB3aW5kb3cgImF1
dG9tYXRpYyIuCi0gICAgICAgIGlmICghX3ByaXZhdGUtPnVwZGF0ZUZvY3VzZWRBbmRBY3RpdmVT
dGF0ZVRpbWVyKSB7Ci0gICAgICAgICAgICBDRlJ1bkxvb3BUaW1lckNvbnRleHQgY29udGV4dCA9
IHsgMCwgc2VsZiwgTlVMTCwgTlVMTCwgTlVMTCB9OwotICAgICAgICAgICAgX3ByaXZhdGUtPnVw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZVRpbWVyID0gQ0ZSdW5Mb29wVGltZXJDcmVhdGUoTlVM
TCwgQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF91cGRh
dGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lckNhbGxiYWNrLCAmY29udGV4dCk7Ci0gICAgICAg
ICAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT51
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVUaW1lciwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBz
dGFydEFsbFBsdWdpbnNdOwotCi0gICAgICAgIF9wcml2YXRlLT5sYXN0U2Nyb2xsUG9zaXRpb24g
PSBOU1plcm9Qb2ludDsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpdmlld1dpbGxNb3ZlVG9Ib3N0V2lu
ZG93OihOU1dpbmRvdyAqKWhvc3RXaW5kb3cKLXsKLSAgICBbW3NlbGYgc3Vidmlld3NdIF93ZWJf
bWFrZVBsdWdpblZpZXdzUGVyZm9ybVNlbGVjdG9yOkBzZWxlY3Rvcih2aWV3V2lsbE1vdmVUb0hv
c3RXaW5kb3c6KSB3aXRoT2JqZWN0Omhvc3RXaW5kb3ddOwotfQotCi0tICh2b2lkKXZpZXdEaWRN
b3ZlVG9Ib3N0V2luZG93Ci17Ci0gICAgW1tzZWxmIHN1YnZpZXdzXSBfd2ViX21ha2VQbHVnaW5W
aWV3c1BlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3Iodmlld0RpZE1vdmVUb0hvc3RXaW5kb3cpIHdp
dGhPYmplY3Q6bmlsXTsKLX0KLQotCi0tICh2b2lkKWFkZFN1YnZpZXc6KE5TVmlldyAqKXZpZXcK
LXsKLSAgICBbc3VwZXIgYWRkU3Vidmlldzp2aWV3XTsKLQotICAgIGlmIChbV2ViUGx1Z2luQ29u
dHJvbGxlciBpc1BsdWdJblZpZXc6dmlld10pCi0gICAgICAgIFtbc2VsZiBfcGx1Z2luQ29udHJv
bGxlcl0gYWRkUGx1Z2luOnZpZXddOwotfQotCi0tICh2b2lkKXdpbGxSZW1vdmVTdWJ2aWV3OihO
U1ZpZXcgKilzdWJ2aWV3Ci17Ci0gICAgaWYgKFtXZWJQbHVnaW5Db250cm9sbGVyIGlzUGx1Z0lu
VmlldzpzdWJ2aWV3XSkKLSAgICAgICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95
UGx1Z2luOnN1YnZpZXddOwotCi0gICAgW3N1cGVyIHdpbGxSZW1vdmVTdWJ2aWV3OnN1YnZpZXdd
OwotfQotCi0tICh2b2lkKXJlYXBwbHlTdHlsZXMKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5uZWVk
c1RvQXBwbHlTdHlsZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSNpZmRlZiBMT0dfVElNRVMK
LSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSNlbmRpZgot
Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAg
ICAgIGlmIChGcmFtZVZpZXcqIGNvcmVWaWV3ID0gY29yZUZyYW1lLT52aWV3KCkpCi0gICAgICAg
ICAgICBjb3JlVmlldy0+c2V0TWVkaWFUeXBlKF9wcml2YXRlLT5wcmludGluZyA/ICJwcmludCIg
OiAic2NyZWVuIik7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUt
PmRvY3VtZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudC0+c2V0UHJpbnRpbmcoX3ByaXZhdGUt
PnByaW50aW5nKTsKLSAgICAgICAgY29yZUZyYW1lLT5yZWFwcGx5U3R5bGVzKCk7Ci0gICAgfQot
ICAgIAotI2lmZGVmIExPR19USU1FUyAgICAgICAgCi0gICAgZG91YmxlIHRoaXNUaW1lID0gQ0ZB
YnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKLSAgICBMT0coVGltaW5nLCAiJXMgYXBw
bHkgc3R5bGUgc2Vjb25kcyA9ICVmIiwgW3NlbGYgVVJMXSwgdGhpc1RpbWUpOwotI2VuZGlmCi0K
LSAgICBfcHJpdmF0ZS0+bmVlZHNUb0FwcGx5U3R5bGVzID0gTk87Ci19Ci0KLS8vIERvIGEgbGF5
b3V0LCBidXQgc2V0IHVwIGEgbmV3IGZpeGVkIHdpZHRoIGZvciB0aGUgcHVycG9zZXMgb2YgZG9p
bmcgcHJpbnRpbmcgbGF5b3V0LgotLy8gbWluUGFnZVdpZHRoPT0wIGltcGxpZXMgYSBub24tcHJp
bnRpbmcgbGF5b3V0Ci0tICh2b2lkKWxheW91dFRvTWluaW11bVBhZ2VXaWR0aDooZmxvYXQpbWlu
UGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6KGZsb2F0KW1heFBhZ2VXaWR0aCBhZGp1c3RpbmdW
aWV3U2l6ZTooQk9PTClhZGp1c3RWaWV3U2l6ZQotewotICAgIFtzZWxmIHJlYXBwbHlTdHlsZXNd
OwotICAgIAotICAgIGlmICghW3NlbGYgX25lZWRzTGF5b3V0XSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWZkZWYgTE9HX1RJTUVTICAgICAgICAKLSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKTsKLSNlbmRpZgotCi0gICAgTE9HKFZpZXcsICIlQCBkb2luZyBsYXlv
dXQiLCBzZWxmKTsKLQotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRnJhbWVW
aWV3KiBjb3JlVmlldyA9IGNvcmVGcmFtZS0+dmlldygpKSB7Ci0gICAgICAgIGlmIChtaW5QYWdl
V2lkdGggPiAwLjApCi0gICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXRXaXRoUGFnZVdp
ZHRoUmFuZ2UobWluUGFnZVdpZHRoLCBtYXhQYWdlV2lkdGgsIGFkanVzdFZpZXdTaXplKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjb3JlVmlldy0+Zm9yY2VMYXlvdXQoIWFkanVzdFZp
ZXdTaXplKTsKLSAgICAgICAgICAgIGlmIChhZGp1c3RWaWV3U2l6ZSkKLSAgICAgICAgICAgICAg
ICBjb3JlVmlldy0+YWRqdXN0Vmlld1NpemUoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSNp
ZmRlZiBMT0dfVElNRVMgICAgICAgIAotICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJzb2x1dGVU
aW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Ci0gICAgTE9HKFRpbWluZywgIiVzIGxheW91dCBzZWNv
bmRzID0gJWYiLCBbc2VsZiBVUkxdLCB0aGlzVGltZSk7Ci0jZW5kaWYKLX0KLQotLSAodm9pZCls
YXlvdXQKLXsKLSAgICBbc2VsZiBsYXlvdXRUb01pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVt
UGFnZVdpZHRoOjAuMGYgYWRqdXN0aW5nVmlld1NpemU6Tk9dOwotfQotCi0vLyBEZWxpdmVyIG1v
dXNldXAgZXZlbnRzIHRvIHRoZSBET00gZm9yIGJ1dHRvbiAyLgotLSAodm9pZClyaWdodE1vdXNl
VXA6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB3
ZSBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCB0aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNlZC4KLSAg
ICAvLyBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZyBwcmV2ZW50cyB0aGF0IGZyb20g
Y2F1c2luZyBhIHByb2JsZW0gbGF0ZXIgaGVyZSBvcgotICAgIC8vIGluc2lkZSBBcHBLaXQgY29k
ZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgW3N1cGVyIHJpZ2h0
TW91c2VVcDpldmVudF07Ci0KLSAgICBpZiAoRnJhbWUqIGNvcmVmcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSkpCi0gICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlVXAoZXZl
bnQpOwotfQotCi0tIChOU01lbnUgKiltZW51Rm9yRXZlbnQ6KE5TRXZlbnQgKilldmVudAotewot
ICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCBpZiB3ZSBydW4gYSBuZXN0ZWQgZXZlbnQgbG9v
cCB0aGUgZXZlbnQgd2lsbCBiZSByZWxlYXNlZC4KLSAgICAvLyBSZXRhaW5pbmcgYW5kIHRoZW4g
YXV0b3JlbGVhc2luZyBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gbGF0ZXIg
aGVyZSBvcgotICAgIC8vIGluc2lkZSBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0g
YXV0b3JlbGVhc2VdOwotCi0gICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRp
bmdDaGFuZ2U6Tk8gbW92ZUxlZnQ6Tk9dOwotCi0gICAgUmVmUHRyPEZyYW1lPiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1
cm4gbmlsOwotCi0gICAgUGFnZSogcGFnZSA9IGNvcmVGcmFtZS0+cGFnZSgpOwotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8vIE1hdGNoIGJlaGF2aW9yIG9mIG90
aGVyIGJyb3dzZXJzIGJ5IHNlbmRpbmcgYSBtb3VzZWRvd24gZXZlbnQgZm9yIHJpZ2h0IGNsaWNr
cy4KLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9IFlFUzsKLSAgICBwYWdl
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwotICAgIGNvcmVG
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRG93bihldmVudCk7Ci0gICAgQk9PTCBoYW5kbGVk
RXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChQ
bGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKLSAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURv
d25FdmVudCA9IE5POwotCi0gICAgaWYgKCFoYW5kbGVkRXZlbnQpCi0gICAgICAgIHJldHVybiBu
aWw7Ci0KLSAgICAvLyBSZS1nZXQgcGFnZSwgc2luY2UgaXQgbWlnaHQgaGF2ZSBnb25lIGF3YXkg
ZHVyaW5nIGV2ZW50IGhhbmRsaW5nLgotICAgIHBhZ2UgPSBjb3JlRnJhbWUtPnBhZ2UoKTsKLSAg
ICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBDb250ZXh0TWVudSogY29y
ZU1lbnUgPSBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y29udGV4dE1lbnUoKTsKLSAg
ICBpZiAoIWNvcmVNZW51KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgTlNBcnJheSogbWVu
dUl0ZW1zID0gY29yZU1lbnUtPnBsYXRmb3JtRGVzY3JpcHRpb24oKTsKLSAgICBpZiAoIW1lbnVJ
dGVtcykKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIE5TVUludGVnZXIgY291bnQgPSBbbWVu
dUl0ZW1zIGNvdW50XTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgTlNNZW51KiBtZW51ID0gW1tbTlNNZW51IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Ci0g
ICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgW21lbnUg
YWRkSXRlbTpbbWVudUl0ZW1zIG9iamVjdEF0SW5kZXg6aV1dOwotICAgIHJldHVybiBtZW51Owot
fQotCi0tIChCT09MKXNlYXJjaEZvcjooTlNTdHJpbmcgKilzdHJpbmcgZGlyZWN0aW9uOihCT09M
KWZvcndhcmQgY2FzZVNlbnNpdGl2ZTooQk9PTCljYXNlRmxhZyB3cmFwOihCT09MKXdyYXBGbGFn
Ci17Ci0gICAgcmV0dXJuIFtzZWxmIHNlYXJjaEZvcjpzdHJpbmcgZGlyZWN0aW9uOmZvcndhcmQg
Y2FzZVNlbnNpdGl2ZTpjYXNlRmxhZyB3cmFwOndyYXBGbGFnIHN0YXJ0SW5TZWxlY3Rpb246Tk9d
OwotfQotCi0tICh2b2lkKWNsZWFyRm9jdXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAo
IWRvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZG9jdW1lbnQtPnNldEZvY3Vz
ZWROb2RlKDApOwotfQotCi0tIChCT09MKWlzT3BhcXVlCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBf
d2ViVmlld10gZHJhd3NCYWNrZ3JvdW5kXTsKLX0KLQotLSAodm9pZClzZXROZWVkc0Rpc3BsYXk6
KEJPT0wpZmxhZwotewotICAgIExPRyhWaWV3LCAiJUAgc2V0TmVlZHNEaXNwbGF5OiVAIiwgc2Vs
ZiwgZmxhZyA/IEAiWUVTIiA6IEAiTk8iKTsKLSAgICBbc3VwZXIgc2V0TmVlZHNEaXNwbGF5OmZs
YWddOwotfQotCi0tICh2b2lkKXNldE5lZWRzTGF5b3V0OiAoQk9PTClmbGFnCi17Ci0gICAgTE9H
KFZpZXcsICIlQCBzZXROZWVkc0xheW91dDolQCIsIHNlbGYsIGZsYWcgPyBAIllFUyIgOiBAIk5P
Iik7Ci0gICAgaWYgKCFmbGFnKQotICAgICAgICByZXR1cm47IC8vIFRoZXJlJ3Mgbm8gd2F5IHRv
IHNheSB5b3UgZG9uJ3QgbmVlZCBhIGxheW91dC4KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJh
bWUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpKQotICAgICAgICAgICAgdmll
dy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpc2V0TmVlZHNUb0FwcGx5
U3R5bGVzOiAoQk9PTClmbGFnCi17Ci0gICAgTE9HKFZpZXcsICIlQCBzZXROZWVkc1RvQXBwbHlT
dHlsZXM6JUAiLCBzZWxmLCBmbGFnID8gQCJZRVMiIDogQCJOTyIpOwotICAgIF9wcml2YXRlLT5u
ZWVkc1RvQXBwbHlTdHlsZXMgPSBmbGFnOwotfQotCi0tICh2b2lkKWRyYXdTaW5nbGVSZWN0OihO
U1JlY3QpcmVjdAotewotICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07
Ci0gICAgTlNSZWN0Q2xpcChyZWN0KTsKLSAgICAgICAgCi0gICAgQVNTRVJUKFtbc2VsZiBzdXBl
cnZpZXddIGlzS2luZE9mQ2xhc3M6W1dlYkNsaXBWaWV3IGNsYXNzXV0pOwotCi0gICAgWyhXZWJD
bGlwVmlldyAqKVtzZWxmIHN1cGVydmlld10gc2V0QWRkaXRpb25hbENsaXA6cmVjdF07Ci0KLSAg
ICBAdHJ5IHsKLSAgICAgICAgaWYgKFtzZWxmIF90cmFuc3BhcmVudEJhY2tncm91bmRdKSB7Ci0g
ICAgICAgICAgICBbW05TQ29sb3IgY2xlYXJDb2xvcl0gc2V0XTsKLSAgICAgICAgICAgIE5TUmVj
dEZpbGwgKHJlY3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgW1tzZWxmIF9mcmFtZV0gX2RyYXdS
ZWN0OnJlY3QgY29udGVudHNPbmx5OllFU107Ci0KLSAgICAgICAgV2ViVmlldyAqd2ViVmlldyA9
IFtzZWxmIF93ZWJWaWV3XTsKLQotICAgICAgICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGZvciA8
cmRhcjovL3Byb2JsZW0vNTAyMzU0NT4uIFdlIGNhbiBoaXQgYSByYWNlIGNvbmRpdGlvbiB3aGVy
ZSBkcmF3UmVjdCB3aWxsIGJlCi0gICAgICAgIC8vIGNhbGxlZCBhZnRlciB0aGUgV2ViVmlldyBo
YXMgY2xvc2VkLiBJZiB0aGUgY2xpZW50IGRpZCBub3QgcHJvcGVybHkgY2xvc2UgdGhlIFdlYlZp
ZXcgYW5kIHNldCB0aGUgCi0gICAgICAgIC8vIFVJRGVsZWdhdGUgdG8gbmlsLCB0aGVuIHRoZSBV
SURlbGVnYXRlIHdpbGwgYmUgc3RhbGUgYW5kIHRoaXMgY29kZSB3aWxsIGNyYXNoLiAKLSAgICAg
ICAgc3RhdGljIEJPT0wgdmVyc2lvbjNPckxhdGVyQ2xpZW50ID0gV2ViS2l0TGlua2VkT25PckFm
dGVyKFdFQktJVF9GSVJTVF9WRVJTSU9OX1dJVEhPVVRfUVVJQ0tCT09LU19RVUlSSyk7Ci0gICAg
ICAgIGlmICh2ZXJzaW9uM09yTGF0ZXJDbGllbnQpCi0gICAgICAgICAgICBbW3dlYlZpZXcgX1VJ
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6d2ViVmlldyBkaWREcmF3UmVjdDpbd2ViVmlldyBj
b252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3OnNlbGZdXTsKLQotICAgICAgICBpZiAoV2ViTm9kZUhp
Z2hsaWdodCAqY3VycmVudEhpZ2hsaWdodCA9IFt3ZWJWaWV3IGN1cnJlbnROb2RlSGlnaGxpZ2h0
XSkKLSAgICAgICAgICAgIFtjdXJyZW50SGlnaGxpZ2h0IHNldE5lZWRzVXBkYXRlSW5UYXJnZXRW
aWV3UmVjdDpbc2VsZiBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpbY3VycmVudEhpZ2hsaWdodCB0
YXJnZXRWaWV3XV1dOwotCi0gICAgICAgIFsoV2ViQ2xpcFZpZXcgKilbc2VsZiBzdXBlcnZpZXdd
IHJlc2V0QWRkaXRpb25hbENsaXBdOwotCi0gICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0
b3JlR3JhcGhpY3NTdGF0ZV07Ci0gICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpsb2NhbEV4Y2Vw
dGlvbikgewotICAgICAgICBbKFdlYkNsaXBWaWV3ICopW3NlbGYgc3VwZXJ2aWV3XSByZXNldEFk
ZGl0aW9uYWxDbGlwXTsKLSAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGlj
c1N0YXRlXTsKLSAgICAgICAgTE9HX0VSUk9SKCJFeGNlcHRpb24gY2F1Z2h0IHdoaWxlIGRyYXdp
bmc6ICVAIiwgbG9jYWxFeGNlcHRpb24pOwotICAgICAgICBbbG9jYWxFeGNlcHRpb24gcmFpc2Vd
OwotICAgIH0KLX0KLQotLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKLXsKLSAgICBBU1NF
UlRfTUFJTl9USFJFQUQoKTsKLSAgICBMT0coVmlldywgIiVAIGRyYXdpbmciLCBzZWxmKTsKLQot
ICAgIGNvbnN0IE5TUmVjdCAqcmVjdHM7Ci0gICAgTlNJbnRlZ2VyIGNvdW50OwotICAgIFtzZWxm
IGdldFJlY3RzQmVpbmdEcmF3bjomcmVjdHMgY291bnQ6JmNvdW50XTsKLQotICAgIEJPT0wgc3Vi
dmlld3NXZXJlU2V0QXNpZGUgPSBfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZTsKLSAgICBpZiAo
c3Vidmlld3NXZXJlU2V0QXNpZGUpCi0gICAgICAgIFtzZWxmIF9yZXN0b3JlU3Vidmlld3NdOwot
Ci0jaWZkZWYgTE9HX1RJTUVTCi0gICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRD
dXJyZW50KCk7Ci0jZW5kaWYKLQotICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9tdXN0RHJhd1Vu
aW9uZWRSZWN0OnJlY3Qgc2luZ2xlUmVjdHM6cmVjdHMgY291bnQ6Y291bnRdKQotICAgICAgICBb
c2VsZiBkcmF3U2luZ2xlUmVjdDpyZWN0XTsKLSAgICBlbHNlCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIFtzZWxmIGRyYXdTaW5nbGVSZWN0OnJl
Y3RzW2ldXTsKLQotI2lmZGVmIExPR19USU1FUwotICAgIGRvdWJsZSB0aGlzVGltZSA9IENGQWJz
b2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7Ci0gICAgTE9HKFRpbWluZywgIiVzIGRyYXcg
c2Vjb25kcyA9ICVmIiwgd2lkZ2V0LT5wYXJ0KCktPmJhc2VVUkwoKS5VUkwoKS5sYXRpbjEoKSwg
dGhpc1RpbWUpOwotI2VuZGlmCi0KLSAgICBpZiAoc3Vidmlld3NXZXJlU2V0QXNpZGUpCi0gICAg
ICAgIFtzZWxmIF9zZXRBc2lkZVN1YnZpZXdzXTsKLSAgICAgICAgCi0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQotICAgIGlmIChbW3NlbGYgX3dlYlZpZXddIF9uZWVkc09uZVNob3RE
cmF3aW5nU3luY2hyb25pemF0aW9uXSkgewotICAgICAgICAvLyBEaXNhYmxlIHNjcmVlbiB1cGRh
dGVzIHNvIHRoYXQgZHJhd2luZyBpbnRvIHRoZSBOU1ZpZXcgYW5kCi0gICAgICAgIC8vIENBTGF5
ZXIgdXBkYXRlcyBhcHBlYXIgb24gdGhlIHNjcmVlbiBhdCB0aGUgc2FtZSB0aW1lLgotICAgICAg
ICBbW3NlbGYgd2luZG93XSBkaXNhYmxlU2NyZWVuVXBkYXRlc1VudGlsRmx1c2hdOwotICAgICAg
ICBbQ0FUcmFuc2FjdGlvbiBmbHVzaF07Ci0gICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3NldE5l
ZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb246Tk9dOwotICAgIH0KLSNlbmRpZgotfQot
Ci0vLyBUdXJuIG9mZiB0aGUgYWRkaXRpb25hbCBjbGlwIHdoaWxlIGNvbXB1dGluZyBvdXIgdmlz
aWJsZVJlY3QuCi0tIChOU1JlY3QpdmlzaWJsZVJlY3QKLXsKLSAgICBpZiAoIShbW3NlbGYgc3Vw
ZXJ2aWV3XSBpc0tpbmRPZkNsYXNzOltXZWJDbGlwVmlldyBjbGFzc11dKSkKLSAgICAgICAgcmV0
dXJuIFtzdXBlciB2aXNpYmxlUmVjdF07Ci0gICAgICAgIAotICAgIFdlYkNsaXBWaWV3ICpjbGlw
VmlldyA9IChXZWJDbGlwVmlldyAqKVtzZWxmIHN1cGVydmlld107Ci0KLSAgICBCT09MIGhhc0Fk
ZGl0aW9uYWxDbGlwID0gW2NsaXBWaWV3IGhhc0FkZGl0aW9uYWxDbGlwXTsKLSAgICBpZiAoIWhh
c0FkZGl0aW9uYWxDbGlwKSB7Ci0gICAgICAgIHJldHVybiBbc3VwZXIgdmlzaWJsZVJlY3RdOwot
ICAgIH0KLSAgICAKLSAgICBOU1JlY3QgYWRkaXRpb25hbENsaXAgPSBbY2xpcFZpZXcgYWRkaXRp
b25hbENsaXBdOwotICAgIFtjbGlwVmlldyByZXNldEFkZGl0aW9uYWxDbGlwXTsKLSAgICBOU1Jl
Y3QgdmlzaWJsZVJlY3QgPSBbc3VwZXIgdmlzaWJsZVJlY3RdOwotICAgIFtjbGlwVmlldyBzZXRB
ZGRpdGlvbmFsQ2xpcDphZGRpdGlvbmFsQ2xpcF07Ci0gICAgcmV0dXJuIHZpc2libGVSZWN0Owot
fQotCi0tIChCT09MKWlzRmxpcHBlZCAKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0tICh2b2lk
KXdpbmRvd0RpZEJlY29tZUtleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KLXsKLSAg
ICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7Ci0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rv
ck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0aW9uIHdhaXRVbnRpbERvbmU6
Tk9dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNXaW5kb3cgKmtleVdpbmRvdyA9
IFtub3RpZmljYXRpb24gb2JqZWN0XTsKLQotICAgIGlmIChrZXlXaW5kb3cgPT0gW3NlbGYgd2lu
ZG93XSkKLSAgICAgICAgW3NlbGYgYWRkTW91c2VNb3ZlZE9ic2VydmVyXTsKLQotICAgIGlmIChr
ZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSB8fCBrZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10g
YXR0YWNoZWRTaGVldF0pCi0gICAgICAgIFtzZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3Rh
dGVdOwotfQotCi0tICh2b2lkKXdpbmRvd0RpZFJlc2lnbktleTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KLXsKLSAgICBpZiAoIXB0aHJlYWRfbWFpbl9ucCgpKSB7Ci0gICAgICAgIFtz
ZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpfY21kIHdpdGhPYmplY3Q6bm90aWZpY2F0
aW9uIHdhaXRVbnRpbERvbmU6Tk9dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTlNX
aW5kb3cgKmZvcm1lcktleVdpbmRvdyA9IFtub3RpZmljYXRpb24gb2JqZWN0XTsKLQotICAgIGlm
IChmb3JtZXJLZXlXaW5kb3cgPT0gW3NlbGYgd2luZG93XSkKLSAgICAgICAgW3NlbGYgcmVtb3Zl
TW91c2VNb3ZlZE9ic2VydmVyXTsKLQotICAgIGlmIChmb3JtZXJLZXlXaW5kb3cgPT0gW3NlbGYg
d2luZG93XSB8fCBmb3JtZXJLZXlXaW5kb3cgPT0gW1tzZWxmIHdpbmRvd10gYXR0YWNoZWRTaGVl
dF0pIHsKLSAgICAgICAgW3NlbGYgX3VwZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07Ci0gICAg
ICAgIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZW5kUmV2ZXJ0aW5nQ2hhbmdlOk5PIG1vdmVM
ZWZ0Ok5PXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbENsb3NlOihOU05vdGlmaWNh
dGlvbiAqKW5vdGlmaWNhdGlvbgotewotICAgIGlmICghcHRocmVhZF9tYWluX25wKCkpIHsKLSAg
ICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkOl9jbWQgd2l0aE9iamVjdDpu
b3RpZmljYXRpb24gd2FpdFVudGlsRG9uZTpOT107Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpOTyBtb3Zl
TGVmdDpOT107Ci0gICAgW1tzZWxmIF9wbHVnaW5Db250cm9sbGVyXSBkZXN0cm95QWxsUGx1Z2lu
c107Ci19Ci0KLS0gKHZvaWQpd2luZG93V2lsbE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0aW9u
ICopbm90aWZpY2F0aW9uCi17Ci0gICAgaWYgKCFbW3NlbGYgX3dlYlZpZXddIHNob3VsZFVwZGF0
ZVdoaWxlT2Zmc2NyZWVuXSkKLSAgICAgICAgW3NlbGYgc2V0TmVlZHNEaXNwbGF5OllFU107Ci19
Ci0KLS0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJl
J3MgYSBjaGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0
ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVs
ZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAv
LyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0g
aW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3Jl
bGVhc2VdOwotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBp
ZiAoIWZyYW1lIHx8ICFmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPndoZWVsRXZlbnQoZXZlbnQpKQot
ICAgICAgICBbc3VwZXIgc2Nyb2xsV2hlZWw6ZXZlbnRdOwotfQotCi0tIChCT09MKV9pc1NlbGVj
dGlvbkV2ZW50OihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICBOU1BvaW50IHBvaW50ID0gW3NlbGYg
Y29udmVydFBvaW50OltldmVudCBsb2NhdGlvbkluV2luZG93XSBmcm9tVmlldzpuaWxdOwotICAg
IHJldHVybiBbW1tzZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDpZ
RVNdIG9iamVjdEZvcktleTpXZWJFbGVtZW50SXNTZWxlY3RlZEtleV0gYm9vbFZhbHVlXTsKLX0K
LQotLSAoQk9PTClhY2NlcHRzRmlyc3RNb3VzZTooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8g
VGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBh
IG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdo
dCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwot
ICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJv
YmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBh
dXRvcmVsZWFzZV07Ci0KLSAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbc2VsZiBfaGl0Vmlld0ZvckV2
ZW50OmV2ZW50XTsKLSAgICBXZWJIVE1MVmlldyAqaGl0SFRNTFZpZXcgPSBbaGl0VmlldyBpc0tp
bmRPZkNsYXNzOltzZWxmIGNsYXNzXV0gPyAoV2ViSFRNTFZpZXcgKiloaXRWaWV3IDogbmlsOwot
ICAgIAotI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKLSAgICBpZiAoW1tzZWxmIF93ZWJW
aWV3XSBfZGFzaGJvYXJkQmVoYXZpb3I6V2ViRGFzaGJvYXJkQmVoYXZpb3JBbHdheXNBY2NlcHRz
Rmlyc3RNb3VzZV0pCi0gICAgICAgIHJldHVybiBZRVM7Ci0jZW5kaWYKLSAgICAKLSAgICBpZiAo
aGl0SFRNTFZpZXcpIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYg
KEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtoaXRIVE1MVmlldyBfZnJhbWVdKSkgewotICAgICAg
ICAgICAgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0QWN0aXZhdGlvbkV2ZW50TnVtYmVy
KFtldmVudCBldmVudE51bWJlcl0pOwotICAgICAgICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3Vz
ZURvd25FdmVudDpldmVudF07Ci0gICAgICAgICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVj
dGlvbkV2ZW50OmV2ZW50XSkKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5ldmVudE1heVN0YXJ0RHJhZyhldmVudCk7Ci0gICAgICAgICAgICBbaGl0
SFRNTFZpZXcgX3NldE1vdXNlRG93bkV2ZW50Om5pbF07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIFtoaXRWaWV3IGFjY2VwdHNGaXJzdE1vdXNl
OmV2ZW50XTsKLX0KLQotLSAoQk9PTClzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6
KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBjaGFuY2UgdGhhdCByZXNwb25k
aW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZlbnQgbG9vcCwgYW5kCi0gICAg
Ly8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWlu
aW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2
ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQg
Y29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotCi0gICAgTlNWaWV3ICpo
aXRWaWV3ID0gW3NlbGYgX2hpdFZpZXdGb3JFdmVudDpldmVudF07Ci0gICAgV2ViSFRNTFZpZXcg
KmhpdEhUTUxWaWV3ID0gW2hpdFZpZXcgaXNLaW5kT2ZDbGFzczpbc2VsZiBjbGFzc11dID8gKFdl
YkhUTUxWaWV3ICopaGl0VmlldyA6IG5pbDsKLSAgICBpZiAoaGl0SFRNTFZpZXcpIHsKLSAgICAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxl
Y3Rpb25FdmVudDpldmVudF0pCi0gICAgICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW2hpdEhUTUxWaWV3IF9mcmFtZV0pKSB7Ci0gICAgICAgICAgICAgICAgW2hpdEhUTUxWaWV3
IF9zZXRNb3VzZURvd25FdmVudDpldmVudF07Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29y
ZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+ZXZlbnRNYXlTdGFydERyYWcoZXZlbnQpOwotICAgICAg
ICAgICAgICAgIFtoaXRIVE1MVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIFtoaXRWaWV3
IHNob3VsZERlbGF5V2luZG93T3JkZXJpbmdGb3JFdmVudDpldmVudF07Ci19Ci0KLS0gKHZvaWQp
bW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKLXsKLSAgICAvLyBUaGVyZSdzIGEgY2hhbmNlIHRo
YXQgcmVzcG9uZGluZyB0byB0aGlzIGV2ZW50IHdpbGwgcnVuIGEgbmVzdGVkIGV2ZW50IGxvb3As
IGFuZAotICAgIC8vIGZldGNoaW5nIGEgbmV3IGV2ZW50IG1pZ2h0IHJlbGVhc2UgdGhlIG9sZCBv
bmUuIFJldGFpbmluZyBhbmQgdGhlbiBhdXRvcmVsZWFzaW5nCi0gICAgLy8gdGhlIGN1cnJlbnQg
ZXZlbnQgcHJldmVudHMgdGhhdCBmcm9tIGNhdXNpbmcgYSBwcm9ibGVtIGluc2lkZSBXZWJLaXQg
b3IgQXBwS2l0IGNvZGUuCi0gICAgW1tldmVudCByZXRhaW5dIGF1dG9yZWxlYXNlXTsKLQotICAg
IFJldGFpblB0cjxXZWJIVE1MVmlldz4gcHJvdGVjdG9yID0gc2VsZjsKLSAgICBpZiAoW1tzZWxm
IGlucHV0Q29udGV4dF0gd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5wdXRD
b250ZXh0XSBoYW5kbGVNb3VzZUV2ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
X3ByaXZhdGUtPmhhbmRsaW5nTW91c2VEb3duRXZlbnQgPSBZRVM7Ci0KLSAgICAvLyBSZWNvcmQg
dGhlIG1vdXNlIGRvd24gcG9zaXRpb24gc28gd2UgY2FuIGRldGVybWluZSBkcmFnIGh5c3RlcmVz
aXMuCi0gICAgW3NlbGYgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKLQotICAgIE5TSW5wdXRN
YW5hZ2VyICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1
dE1hbmFnZXJdOwotICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91
c2VFdmVudHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRd
KQotICAgICAgICBnb3RvIGRvbmU7Ci0KLSAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVu
ZFJldmVydGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107Ci0KLSAgICAvLyBJZiB0aGUgd2ViIHBh
Z2UgaGFuZGxlcyB0aGUgY29udGV4dCBtZW51IGV2ZW50IGFuZCBtZW51Rm9yRXZlbnQ6IHJldHVy
bnMgbmlsLCB3ZSdsbCBnZXQgY29udHJvbCBjbGljayBldmVudHMgaGVyZS4KLSAgICAvLyBXZSBk
b24ndCB3YW50IHRvIHBhc3MgdGhlbSBhbG9uZyB0byBLSFRNTCBhIHNlY29uZCB0aW1lLgotICAg
IGlmICghKFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spKSB7Ci0gICAg
ICAgIF9wcml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5POwotCi0gICAgICAg
IC8vIERvbid0IGRvIGFueSBtb3VzZW92ZXIgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCi0gICAg
ICAgIFtzZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07Ci0KLSAgICAgICAgLy8gTGV0
IFdlYkNvcmUgZ2V0IGEgY2hhbmNlIHRvIGRlYWwgd2l0aCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBj
YWxsIGJhY2sgdG8gdXMKLSAgICAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGltZXIg
aWYgYXBwcm9wcmlhdGUuCi0gICAgICAgIGlmIChGcmFtZSogY29yZWZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKSkKLSAgICAgICAgICAgIGNvcmVmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNl
RG93bihldmVudCk7Ci0gICAgfQotCi1kb25lOgotICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNl
RG93bkV2ZW50ID0gTk87Ci19Ci0KLS0gKHZvaWQpZHJhZ0ltYWdlOihOU0ltYWdlICopZHJhZ0lt
YWdlCi0gICAgICAgICAgICAgICBhdDooTlNQb2ludClhdAotICAgICAgICAgICBvZmZzZXQ6KE5T
U2l6ZSlvZmZzZXQKLSAgICAgICAgICAgIGV2ZW50OihOU0V2ZW50ICopZXZlbnQKLSAgICAgICBw
YXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi0gICAgICAgICAgIHNvdXJjZToo
aWQpc291cmNlCi0gICAgICAgIHNsaWRlQmFjazooQk9PTClzbGlkZUJhY2sKLXsKLSAgICBBU1NF
UlQoc2VsZiA9PSBbc2VsZiBfdG9wSFRNTFZpZXddKTsKLSAgICBbc3VwZXIgZHJhZ0ltYWdlOmRy
YWdJbWFnZSBhdDphdCBvZmZzZXQ6b2Zmc2V0IGV2ZW50OmV2ZW50IHBhc3RlYm9hcmQ6cGFzdGVi
b2FyZCBzb3VyY2U6c291cmNlIHNsaWRlQmFjazpzbGlkZUJhY2tdOwotfQotCi0tICh2b2lkKW1v
dXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0
aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29w
LCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQg
b25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50
IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0
IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAg
ICBOU0lucHV0TWFuYWdlciAqY3VycmVudElucHV0TWFuYWdlciA9IFtOU0lucHV0TWFuYWdlciBj
dXJyZW50SW5wdXRNYW5hZ2VyXTsKLSAgICBpZiAoW2N1cnJlbnRJbnB1dE1hbmFnZXIgd2FudHNU
b0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbY3VycmVudElucHV0TWFuYWdlciBoYW5kbGVNb3VzZUV2
ZW50OmV2ZW50XSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgW3NlbGYgcmV0YWluXTsKLQotICAg
IGlmICghX3ByaXZhdGUtPmlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzKSB7Ci0gICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKSB7Ci0gICAgICAgICAgICBpZiAo
UGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpCi0gICAgICAgICAgICAgICAgcGFnZS0+bWFpbkZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT5tb3VzZURyYWdnZWQoZXZlbnQpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgW3NlbGYgcmVsZWFzZV07Ci19Ci0KLS0gKE5TRHJhZ09wZXJhdGlvbilkcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tGb3JMb2NhbDooQk9PTClpc0xvY2FsCi17Ci0gICAgQVNT
RVJUKCFbc2VsZiBfd2ViVmlld10gfHwgW3NlbGYgX2lzVG9wSFRNTFZpZXddKTsKLSAgICAKLSAg
ICBQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pOwotICAgIGlmICghcGFnZSkKLSAg
ICAgICAgcmV0dXJuIE5TRHJhZ09wZXJhdGlvbk5vbmU7Ci0KLSAgICAvLyBGSVhNRTogV2h5IGRv
IHdlIG92ZXJyaWRlIHRoZSBzb3VyY2UgcHJvdmlkZWQgb3BlcmF0aW9uIGhlcmU/ICBXaHkgbm90
IGluIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcKLSAgICBpZiAocGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS0+c291cmNlRHJhZ09wZXJhdGlvbigpID09IERyYWdPcGVyYXRpb25Ob25lKQotICAgICAg
ICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uR2VuZXJpYyB8IE5TRHJhZ09wZXJhdGlvbkNvcHk7Ci0K
LSAgICByZXR1cm4gKE5TRHJhZ09wZXJhdGlvbilwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5zb3Vy
Y2VEcmFnT3BlcmF0aW9uKCk7Ci19Ci0KLS0gKHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdlICop
aW1hZ2UgbW92ZWRUbzooTlNQb2ludClzY3JlZW5Mb2MKLXsKLSAgICBBU1NFUlQoIVtzZWxmIF93
ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOwotICAgIAotICAgIE5TUG9pbnQgd2lu
ZG93SW1hZ2VMb2MgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOnNjcmVlbkxv
Y107Ci0gICAgTlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IHdpbmRvd0ltYWdlTG9jOwotICAgIAot
ICAgIGlmIChQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pKSB7Ci0gICAgICAgIERy
YWdDb250cm9sbGVyKiBkcmFnQ29udHJvbGxlciA9IHBhZ2UtPmRyYWdDb250cm9sbGVyKCk7Ci0g
ICAgICAgIE5TUG9pbnQgd2luZG93TW91c2VMb2MgPSBOU01ha2VQb2ludCh3aW5kb3dJbWFnZUxv
Yy54ICsgZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS54KCksIHdpbmRvd0ltYWdlTG9jLnkg
KyBkcmFnQ29udHJvbGxlci0+ZHJhZ09mZnNldCgpLnkoKSk7Ci0gICAgfQotICAgIAotICAgIFtb
c2VsZiBfZnJhbWVdIF9kcmFnU291cmNlTW92ZWRUbzp3aW5kb3dNb3VzZUxvY107Ci19Ci0KLS0g
KHZvaWQpZHJhZ2dlZEltYWdlOihOU0ltYWdlICopYW5JbWFnZSBlbmRlZEF0OihOU1BvaW50KWFQ
b2ludCBvcGVyYXRpb246KE5TRHJhZ09wZXJhdGlvbilvcGVyYXRpb24KLXsKLSAgICBBU1NFUlQo
IVtzZWxmIF93ZWJWaWV3XSB8fCBbc2VsZiBfaXNUb3BIVE1MVmlld10pOwotICAgIAotICAgIE5T
UG9pbnQgd2luZG93SW1hZ2VMb2MgPSBbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNl
OmFQb2ludF07Ci0gICAgTlNQb2ludCB3aW5kb3dNb3VzZUxvYyA9IHdpbmRvd0ltYWdlTG9jOwot
ICAgIAotICAgIGlmIChQYWdlKiBwYWdlID0gY29yZShbc2VsZiBfd2ViVmlld10pKSB7Ci0gICAg
ICAgIERyYWdDb250cm9sbGVyKiBkcmFnQ29udHJvbGxlciA9IHBhZ2UtPmRyYWdDb250cm9sbGVy
KCk7Ci0gICAgICAgIHdpbmRvd01vdXNlTG9jID0gTlNNYWtlUG9pbnQod2luZG93SW1hZ2VMb2Mu
eCArIGRyYWdDb250cm9sbGVyLT5kcmFnT2Zmc2V0KCkueCgpLCB3aW5kb3dJbWFnZUxvYy55ICsg
ZHJhZ0NvbnRyb2xsZXItPmRyYWdPZmZzZXQoKS55KCkpOwotICAgICAgICBkcmFnQ29udHJvbGxl
ci0+ZHJhZ0VuZGVkKCk7Ci0gICAgfQotICAgIAotICAgIFtbc2VsZiBfZnJhbWVdIF9kcmFnU291
cmNlRW5kZWRBdDp3aW5kb3dNb3VzZUxvYyBvcGVyYXRpb246b3BlcmF0aW9uXTsKLSAgICAKLSAg
ICAvLyBQcmV2ZW50IHF1ZXVlZCBtb3VzZURyYWdnZWQgZXZlbnRzIGZyb20gY29taW5nIGFmdGVy
IHRoZSBkcmFnIGFuZCBmYWtlIG1vdXNlVXAgZXZlbnQuCi0gICAgX3ByaXZhdGUtPmlnbm9yaW5n
TW91c2VEcmFnZ2VkRXZlbnRzID0gWUVTOwotICAgIAotICAgIC8vIE9uY2UgdGhlIGRyYWdnaW5n
IG1hY2hpbmVyeSBraWNrcyBpbiwgd2Ugbm8gbG9uZ2VyIGdldCBtb3VzZSBkcmFncyBvciB0aGUg
dXAgZXZlbnQuCi0gICAgLy8gV2ViQ29yZSBleHBlY3RzIHRvIGdldCBiYWxhbmNlZCBkb3duL3Vw
J3MsIHNvIHdlIG11c3QgZmFrZSB1cCBhIG1vdXNldXAuCi0gICAgTlNFdmVudCAqZmFrZUV2ZW50
ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTGVmdE1vdXNlVXAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb246d2luZG93TW91c2VMb2MK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6W1tO
U0FwcCBjdXJyZW50RXZlbnRdIG1vZGlmaWVyRmxhZ3NdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOltOU0RhdGUgdGltZUludGVydmFsU2luY2VS
ZWZlcmVuY2VEYXRlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
bmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3aW5kb3dOdW1iZXJdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50
XSBjb250ZXh0XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVu
dE51bWJlcjowIGNsaWNrQ291bnQ6MCBwcmVzc3VyZTowXTsKLSAgICBbc2VsZiBtb3VzZVVwOmZh
a2VFdmVudF07IC8vIFRoaXMgd2lsbCBhbHNvIHVwZGF0ZSB0aGUgbW91c2VvdmVyIHN0YXRlLgot
fQotCi0tIChOU0FycmF5ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlv
bjooTlNVUkwgKilkcm9wRGVzdGluYXRpb24KLXsKLSAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVy
ID0gbmlsOwotICAgIE5TVVJMICpkcmFnZ2luZ0ltYWdlVVJMID0gbmlsOwotICAgIAotICAgIGlm
IChXZWJDb3JlOjpDYWNoZWRJbWFnZSogdGlmZlJlc291cmNlID0gW3NlbGYgcHJvbWlzZWREcmFn
VElGRkRhdGFTb3VyY2VdKSB7Ci0gICAgICAgIAotICAgICAgICBTaGFyZWRCdWZmZXIgKmJ1ZmZl
ciA9IHN0YXRpY19jYXN0PENhY2hlZFJlc291cmNlKj4odGlmZlJlc291cmNlKS0+ZGF0YSgpOwot
ICAgICAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgICAgIGdvdG8gbm9Qcm9taXNlZERhdGE7Ci0g
ICAgICAgIAotICAgICAgICBOU0RhdGEgKmRhdGEgPSBidWZmZXItPmNyZWF0ZU5TRGF0YSgpOwot
ICAgICAgICBOU1VSTFJlc3BvbnNlICpyZXNwb25zZSA9IHRpZmZSZXNvdXJjZS0+cmVzcG9uc2Uo
KS5uc1VSTFJlc3BvbnNlKCk7Ci0gICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBbcmVzcG9uc2Ug
VVJMXTsKLSAgICAgICAgd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1
bGFyRmlsZVdpdGhDb250ZW50czpkYXRhXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgIE5TU3RyaW5n
KiBmaWxlbmFtZSA9IFtyZXNwb25zZSBzdWdnZXN0ZWRGaWxlbmFtZV07Ci0gICAgICAgIE5TU3Ry
aW5nKiB0cnVlRXh0ZW5zaW9uKHRpZmZSZXNvdXJjZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNp
b24oKSk7Ci0gICAgICAgIGlmICghW2ZpbGVuYW1lIG1hdGNoZXNFeHRlbnNpb25FcXVpdmFsZW50
OnRydWVFeHRlbnNpb25dKQotICAgICAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0cmlu
Z0J5QXBwZW5kaW5nU3RyaW5nOkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVFeHRl
bnNpb25dOwotICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07
Ci0gICAgfQotICAgIAotbm9Qcm9taXNlZERhdGE6Ci0gICAgCi0gICAgaWYgKCF3cmFwcGVyKSB7
Ci0gICAgICAgIEFTU0VSVCghW3NlbGYgX3dlYlZpZXddIHx8IFtzZWxmIF9pc1RvcEhUTUxWaWV3
XSk7Ci0gICAgICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKFtzZWxmIF93ZWJWaWV3XSk7Ci0gICAgICAg
IAotICAgICAgICAvL0lmIGEgbG9hZCBvY2N1cnMgbWlkd2F5IHRocm91Z2ggYSBkcmFnLCB0aGUg
dmlldyBtYXkgYmUgZGV0YWNoZWQsIHdoaWNoIGdpdmVzCi0gICAgICAgIC8vdXMgbm8gYWJpbGl0
eSB0byBnZXQgdG8gdGhlIG9yaWdpbmFsIFBhZ2UsIHNvIHdlIGNhbm5vdCBhY2Nlc3MgYW55IGRy
YWcgc3RhdGUKLSAgICAgICAgLy9GSVhNRTogaXMgdGhlcmUgYSB3YXkgdG8gcmVjb3Zlcj8KLSAg
ICAgICAgaWYgKCFwYWdlKSAKLSAgICAgICAgICAgIHJldHVybiBuaWw7IAotICAgICAgICAKLSAg
ICAgICAgY29uc3QgS1VSTCYgaW1hZ2VVUkwgPSBwYWdlLT5kcmFnQ29udHJvbGxlcigpLT5kcmFn
Z2luZ0ltYWdlVVJMKCk7Ci0gICAgICAgIEFTU0VSVCghaW1hZ2VVUkwuaXNFbXB0eSgpKTsKLSAg
ICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9IGltYWdlVVJMOwotCi0gICAgICAgIHdyYXBwZXIgPSBb
W3NlbGYgX2RhdGFTb3VyY2VdIF9maWxlV3JhcHBlckZvclVSTDpkcmFnZ2luZ0ltYWdlVVJMXTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKHdyYXBwZXIgPT0gbmlsKSB7Ci0gICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBmaWxlLiIpOwotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBSZXBvcnQgYW4gZXJyb3IgaWYgd2UgZmFpbCB0byBjcmVh
dGUgYSBmaWxlLgotICAgIE5TU3RyaW5nICpwYXRoID0gW1tkcm9wRGVzdGluYXRpb24gcGF0aF0g
c3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50Olt3cmFwcGVyIHByZWZlcnJlZEZpbGVuYW1l
XV07Ci0gICAgcGF0aCA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtpdF9w
YXRoV2l0aFVuaXF1ZUZpbGVuYW1lRm9yUGF0aDpwYXRoXTsKLSAgICBpZiAoIVt3cmFwcGVyIHdy
aXRlVG9GaWxlOnBhdGggYXRvbWljYWxseTpOTyB1cGRhdGVGaWxlbmFtZXM6WUVTXSkKLSAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGltYWdlIGZpbGUgdmlhIC1bTlNGaWxlV3Jh
cHBlciB3cml0ZVRvRmlsZTphdG9taWNhbGx5OnVwZGF0ZUZpbGVuYW1lczpdIik7Ci0gICAgCi0g
ICAgaWYgKGRyYWdnaW5nSW1hZ2VVUkwpCi0gICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gX3dlYmtpdF9zZXRNZXRhZGF0YVVSTDpbZHJhZ2dpbmdJbWFnZVVSTCBhYnNvbHV0
ZVN0cmluZ10gcmVmZXJyZXI6bmlsIGF0UGF0aDpwYXRoXTsKLSAgICAKLSAgICByZXR1cm4gW05T
QXJyYXkgYXJyYXlXaXRoT2JqZWN0OltwYXRoIGxhc3RQYXRoQ29tcG9uZW50XV07Ci19Ci0KLS0g
KHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5j
ZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBs
b29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBv
bGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJy
ZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2Vi
S2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0K
LSAgICBbc2VsZiBfc2V0TW91c2VEb3duRXZlbnQ6bmlsXTsKLQotICAgIE5TSW5wdXRNYW5hZ2Vy
ICpjdXJyZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFn
ZXJdOwotICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVu
dHNdICYmIFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBbc2VsZiByZXRhaW5dOwotCi0gICAgW3NlbGYgX3N0b3BBdXRv
c2Nyb2xsVGltZXJdOwotICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
KSB7Ci0gICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgICAg
IHBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+bW91c2VVcChldmVudCk7Ci0gICAg
fQotICAgIFtzZWxmIF91cGRhdGVNb3VzZW92ZXJXaXRoRmFrZUV2ZW50XTsKLQotICAgIFtzZWxm
IHJlbGVhc2VdOwotfQotCi0tICh2b2lkKW1vdXNlTW92ZWROb3RpZmljYXRpb246KE5TTm90aWZp
Y2F0aW9uICopbm90aWZpY2F0aW9uCi17Ci0gICAgW3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhF
dmVudDpbW25vdGlmaWNhdGlvbiB1c2VySW5mb10gb2JqZWN0Rm9yS2V5OkAiTlNFdmVudCJdXTsK
LX0KLQotLy8gcmV0dXJuaW5nIFlFUyBmcm9tIHRoaXMgbWV0aG9kIGlzIHRoZSB3YXkgd2UgdGVs
bCBBcHBLaXQgdGhhdCBpdCBpcyBvayBmb3IgdGhpcyB2aWV3Ci0vLyB0byBiZSBpbiB0aGUga2V5
IGxvb3AgZXZlbiB3aGVuICJ0YWIgdG8gYWxsIGNvbnRyb2xzIiBpcyBub3Qgb24uCi0tIChCT09M
KW5lZWRzUGFuZWxUb0JlY29tZUtleQotewotICAgIHJldHVybiBZRVM7Ci19Ci0KLS8vIFV0aWxp
dHkgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIHdlIGRvbid0IHJldHVybiBhbnl0aGluZyB0aHJvdWdo
IHRoZSBOU1RleHRJbnB1dAotLy8gQVBJIHdoZW4gYW4gZWRpdGFibGUgcmVnaW9uIGlzIG5vdCBj
dXJyZW50bHkgZm9jdXNlZC4KLXN0YXRpYyBCT09MIGlzVGV4dElucHV0KEZyYW1lKiBjb3JlRnJh
bWUpCi17Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiAhY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+
aXNOb25lKCkgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNDb250ZW50RWRpdGFibGUoKTsK
LX0KLQotc3RhdGljIEJPT0wgaXNJblBhc3N3b3JkRmllbGQoRnJhbWUqIGNvcmVGcmFtZSkKLXsK
LSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPmlzSW5QYXNz
d29yZEZpZWxkKCk7Ci19Ci0KLS0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKLXsKLSAgICBO
U1NlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBOU0RpcmVjdFNlbGVjdGlvbjsKLSAgICBp
ZiAoIVtbc2VsZiBfd2ViVmlld10gX2lzUGVyZm9ybWluZ1Byb2dyYW1tYXRpY0ZvY3VzXSkKLSAg
ICAgICAgZGlyZWN0aW9uID0gW1tzZWxmIHdpbmRvd10ga2V5Vmlld1NlbGVjdGlvbkRpcmVjdGlv
bl07Ci0KLSAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKLSAgICBbc2Vs
ZiBfdXBkYXRlRm9udFBhbmVsXTsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBZRVM7Ci0KLSAgICBC
T09MIGV4cG9zZUlucHV0Q29udGV4dCA9IGlzVGV4dElucHV0KGZyYW1lKSAmJiAhaXNJblBhc3N3
b3JkRmllbGQoZnJhbWUpOwotICAgIGlmIChleHBvc2VJbnB1dENvbnRleHQgIT0gX3ByaXZhdGUt
PmV4cG9zZUlucHV0Q29udGV4dCkgewotICAgICAgICBfcHJpdmF0ZS0+ZXhwb3NlSW5wdXRDb250
ZXh0ID0gZXhwb3NlSW5wdXRDb250ZXh0OwotICAgICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107
Ci0gICAgfQotCi0gICAgZnJhbWUtPmVkaXRvcigpLT5zZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVu
Y2UodHJ1ZSk7Ci0KLSAgICBpZiAoZGlyZWN0aW9uID09IE5TRGlyZWN0U2VsZWN0aW9uKQotICAg
ICAgICByZXR1cm4gWUVTOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0gICAg
aWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gWUVTOwotCi0gICAgcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPnNldEZvY3VzZWRGcmFtZShmcmFtZSk7Ci0gICAgaWYgKERvY3VtZW50KiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBkb2N1bWVudC0+c2V0Rm9jdXNlZE5vZGUo
MCk7Ci0gICAgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEluaXRpYWxGb2N1cyhkaXJlY3Rp
b24gPT0gTlNTZWxlY3RpbmdOZXh0ID8gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkIDogRm9jdXNEaXJl
Y3Rpb25CYWNrd2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+Y3VycmVudEtleWJvYXJkRXZlbnQoKS5nZXQoKSk7
Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTClyZXNpZ25GaXJzdFJlc3BvbmRlcgotewot
ICAgIEJPT0wgcmVzaWduID0gW3N1cGVyIHJlc2lnbkZpcnN0UmVzcG9uZGVyXTsKLSAgICBpZiAo
cmVzaWduKSB7Ci0gICAgICAgIF9wcml2YXRlLT5yZXNpZ25pbmdGaXJzdFJlc3BvbmRlciA9IFlF
UzsKLSAgICAgICAgW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBlbmRSZXZlcnRpbmdDaGFuZ2U6
Tk8gbW92ZUxlZnQ6Tk9dOwotICAgICAgICBpZiAoIVtzZWxmIG1haW50YWluc0luYWN0aXZlU2Vs
ZWN0aW9uXSkgeyAKLSAgICAgICAgICAgIFtzZWxmIGRlc2VsZWN0QWxsXTsKLSAgICAgICAgICAg
IGlmICghW1tzZWxmIF93ZWJWaWV3XSBfaXNQZXJmb3JtaW5nUHJvZ3JhbW1hdGljRm9jdXNdKQot
ICAgICAgICAgICAgICAgIFtzZWxmIGNsZWFyRm9jdXNdOwotICAgICAgICB9Ci0gICAgICAgIFtz
ZWxmIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVdOwotICAgICAgICBfcHJpdmF0ZS0+cmVz
aWduaW5nRmlyc3RSZXNwb25kZXIgPSBOTzsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc2lnbjsKLX0K
LQotLSAodm9pZClzZXREYXRhU291cmNlOihXZWJEYXRhU291cmNlICopZGF0YVNvdXJjZSAKLXsK
LSAgICBBU1NFUlQoZGF0YVNvdXJjZSk7Ci0gICAgaWYgKF9wcml2YXRlLT5kYXRhU291cmNlICE9
IGRhdGFTb3VyY2UpIHsKLSAgICAgICAgQVNTRVJUKCFfcHJpdmF0ZS0+Y2xvc2VkKTsKLSAgICAg
ICAgQk9PTCBoYWREYXRhU291cmNlID0gX3ByaXZhdGUtPmRhdGFTb3VyY2UgIT0gbmlsOwotCi0g
ICAgICAgIFtkYXRhU291cmNlIHJldGFpbl07Ci0gICAgICAgIFtfcHJpdmF0ZS0+ZGF0YVNvdXJj
ZSByZWxlYXNlXTsKLSAgICAgICAgX3ByaXZhdGUtPmRhdGFTb3VyY2UgPSBkYXRhU291cmNlOwot
ICAgICAgICBbX3ByaXZhdGUtPnBsdWdpbkNvbnRyb2xsZXIgc2V0RGF0YVNvdXJjZTpkYXRhU291
cmNlXTsKLQotICAgICAgICBpZiAoIWhhZERhdGFTb3VyY2UpCi0gICAgICAgICAgICBbc2VsZiBh
ZGRNb3VzZU1vdmVkT2JzZXJ2ZXJdOwotICAgIH0KLX0KLQotLSAodm9pZClkYXRhU291cmNlVXBk
YXRlZDooV2ViRGF0YVNvdXJjZSAqKWRhdGFTb3VyY2UKLXsKLX0KLQotLy8gVGhpcyBpcyBhbiBv
dmVycmlkZSBvZiBhbiBOU0NvbnRyb2wgbWV0aG9kIHRoYXQgd2FudHMgdG8gcmVwYWludCB0aGUg
ZW50aXJlIHZpZXcgd2hlbiB0aGUgd2luZG93IHJlc2lnbnMvYmVjb21lcwotLy8ga2V5LiAgV2Vi
SFRNTFZpZXcgaXMgYW4gTlNDb250cm9sIG9ubHkgYmVjYXVzZSBpdCBob3N0cyBOU0NlbGxzIHRo
YXQgYXJlIHBhaW50ZWQgYnkgV2ViQ29yZSdzIEFxdWEgdGhlbWUKLS8vIHJlbmRlcmVyIChhbmQg
dGhvc2UgY2VsbHMgbXVzdCBiZSBob3N0ZWQgYnkgYW4gZW5jbG9zaW5nIE5TQ29udHJvbCBpbiBv
cmRlciB0byBwYWludCBwcm9wZXJseSkuCi0tICh2b2lkKXVwZGF0ZUNlbGw6KE5TQ2VsbCopY2Vs
bAotewotfQotCi0vLyBEb2VzIHNldE5lZWRzRGlzcGxheTpOTyBhcyBhIHNpZGUgZWZmZWN0IHdo
ZW4gcHJpbnRpbmcgaXMgZW5kaW5nLgotLy8gcGFnZVdpZHRoICE9IDAgaW1wbGllcyB3ZSB3aWxs
IHJlbGF5b3V0IHRvIGEgbmV3IHdpZHRoCi0tICh2b2lkKV9zZXRQcmludGluZzooQk9PTClwcmlu
dGluZyBtaW5pbXVtUGFnZVdpZHRoOihmbG9hdCltaW5QYWdlV2lkdGggbWF4aW11bVBhZ2VXaWR0
aDooZmxvYXQpbWF4UGFnZVdpZHRoIGFkanVzdFZpZXdTaXplOihCT09MKWFkanVzdFZpZXdTaXpl
Ci17Ci0gICAgV2ViRnJhbWUgKmZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKLSAgICBOU0FycmF5ICpz
dWJmcmFtZXMgPSBbZnJhbWUgY2hpbGRGcmFtZXNdOwotICAgIHVuc2lnbmVkIG4gPSBbc3ViZnJh
bWVzIGNvdW50XTsKLSAgICB1bnNpZ25lZCBpOwotICAgIGZvciAoaSA9IDA7IGkgIT0gbjsgKytp
KSB7Ci0gICAgICAgIFdlYkZyYW1lICpzdWJmcmFtZSA9IFtzdWJmcmFtZXMgb2JqZWN0QXRJbmRl
eDppXTsKLSAgICAgICAgV2ViRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSBbc3ViZnJhbWUgZnJhbWVW
aWV3XTsKLSAgICAgICAgaWYgKFtbc3ViZnJhbWUgX2RhdGFTb3VyY2VdIF9pc0RvY3VtZW50SFRN
TF0pIHsKLSAgICAgICAgICAgIFsoV2ViSFRNTFZpZXcgKilbZnJhbWVWaWV3IGRvY3VtZW50Vmll
d10gX3NldFByaW50aW5nOnByaW50aW5nIG1pbmltdW1QYWdlV2lkdGg6MC4wZiBtYXhpbXVtUGFn
ZVdpZHRoOjAuMGYgYWRqdXN0Vmlld1NpemU6YWRqdXN0Vmlld1NpemVdOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHByaW50aW5nICE9IF9wcml2YXRlLT5wcmludGluZykgewotICAgICAg
ICBbX3ByaXZhdGUtPnBhZ2VSZWN0cyByZWxlYXNlXTsKLSAgICAgICAgX3ByaXZhdGUtPnBhZ2VS
ZWN0cyA9IG5pbDsKLSAgICAgICAgX3ByaXZhdGUtPnByaW50aW5nID0gcHJpbnRpbmc7Ci0gICAg
ICAgIGlmICghcHJpbnRpbmcpCi0gICAgICAgICAgICBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9y
cGhhbiA9IE5POwotICAgICAgICBbc2VsZiBzZXROZWVkc1RvQXBwbHlTdHlsZXM6WUVTXTsKLSAg
ICAgICAgW3NlbGYgc2V0TmVlZHNMYXlvdXQ6WUVTXTsKLSAgICAgICAgW3NlbGYgbGF5b3V0VG9N
aW5pbXVtUGFnZVdpZHRoOm1pblBhZ2VXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOm1heFBhZ2VXaWR0
aCBhZGp1c3RpbmdWaWV3U2l6ZTphZGp1c3RWaWV3U2l6ZV07Ci0gICAgICAgIGlmICghcHJpbnRp
bmcpIHsKLSAgICAgICAgICAgIC8vIENhbid0IGRvIHRoaXMgd2hlbiBzdGFydGluZyBwcmludGlu
ZyBvciBuZXN0ZWQgcHJpbnRpbmcgd29uJ3Qgd29yaywgc2VlIDM0OTE0MjcuCi0gICAgICAgICAg
ICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6Tk9dOwotICAgICAgICB9Ci0gICAgfQotfQotCi0tIChC
T09MKWNhblByaW50SGVhZGVyc0FuZEZvb3RlcnMKLXsKLSAgICByZXR1cm4gWUVTOwotfQotCi0v
LyBUaGlzIGlzIG5lZWRlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHdlYnZpZXcgaXMgZW1iZWRk
ZWQgaW4gdGhlIHZpZXcgdGhhdCdzIGJlaW5nIHByaW50ZWQuCi0vLyBJdCBzaG91bGRuJ3QgYmUg
Y2FsbGVkIHdoZW4gdGhlIHdlYnZpZXcgaXMgYmVpbmcgcHJpbnRlZCBkaXJlY3RseS4KLS0gKHZv
aWQpYWRqdXN0UGFnZUhlaWdodE5ldzooQ0dGbG9hdCAqKW5ld0JvdHRvbSB0b3A6KENHRmxvYXQp
b2xkVG9wIGJvdHRvbTooQ0dGbG9hdClvbGRCb3R0b20gbGltaXQ6KENHRmxvYXQpYm90dG9tTGlt
aXQKLXsKLSAgICAvLyBUaGlzIGhlbHBzIHdoZW4gd2UgcHJpbnQgYXMgcGFydCBvZiBhIGxhcmdl
ciBwcmludCBwcm9jZXNzLgotICAgIC8vIElmIHRoZSBXZWJIVE1MVmlldyBpdHNlbGYgaXMgd2hh
dCB3ZSdyZSBwcmludGluZywgdGhlbiB3ZSB3aWxsIG5ldmVyIGhhdmUgdG8gZG8gdGhpcy4KLSAg
ICBCT09MIHdhc0luUHJpbnRpbmdNb2RlID0gX3ByaXZhdGUtPnByaW50aW5nOwotICAgIGlmICgh
d2FzSW5QcmludGluZ01vZGUpCi0gICAgICAgIFtzZWxmIF9zZXRQcmludGluZzpZRVMgbWluaW11
bVBhZ2VXaWR0aDowLjBmIG1heGltdW1QYWdlV2lkdGg6MC4wZiBhZGp1c3RWaWV3U2l6ZTpOT107
Ci0KLSAgICBmbG9hdCBuZXdCb3R0b21GbG9hdCA9ICpuZXdCb3R0b207Ci0gICAgaWYgKEZyYW1l
VmlldyogdmlldyA9IGNvcmUoW3NlbGYgX2ZyYW1lXSktPnZpZXcoKSkKLSAgICAgICAgdmlldy0+
YWRqdXN0UGFnZUhlaWdodCgmbmV3Qm90dG9tRmxvYXQsIG9sZFRvcCwgb2xkQm90dG9tLCBib3R0
b21MaW1pdCk7Ci0KLSNpZmRlZiBfX0xQNjRfXwotICAgIC8vIElmIHRoZSBuZXcgYm90dG9tIGlz
IGVxdWFsIHRvIHRoZSBvbGQgYm90dG9tICh3aGVuIGJvdGggYXJlIHRyZWF0ZWQgYXMgZmxvYXRz
KSwgd2UganVzdCBjb3B5Ci0gICAgLy8gb2xkQm90dG9tIG92ZXIgdG8gbmV3Qm90dG9tLiBUaGlz
IHByZXZlbnRzIHJvdW5kaW5nIGVycm9ycyB0aGF0IGNhbiBvY2N1ciB3aGVuIGNvbnZlcnRpbmcg
bmV3Qm90dG9tRmxvYXQgdG8gYSBkb3VibGUuCi0gICAgaWYgKGZhYnMoKGZsb2F0KW9sZEJvdHRv
bSAtIG5ld0JvdHRvbUZsb2F0KSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6ZXBzaWxv
bigpKSAKLSAgICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKLSAgICBlbHNlCi0jZW5kaWYK
LSAgICAgICAgKm5ld0JvdHRvbSA9IG5ld0JvdHRvbUZsb2F0OwotICAgIAotICAgIGlmICghd2Fz
SW5QcmludGluZ01vZGUpIHsKLSAgICAgICAgTlNQcmludE9wZXJhdGlvbiAqY3VycmVuUHJpbnRP
cGVyYXRpb24gPSBbTlNQcmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXTsKLSAgICAgICAg
aWYgKGN1cnJlblByaW50T3BlcmF0aW9uKQotICAgICAgICAgICAgLy8gZGVsYXkgX3NldFByaW50
aW5nOk5PIHVudGlsIGJhY2sgdG8gbWFpbiBsb29wIGFzIHRoaXMgbWV0aG9kIG1heSBnZXQgY2Fs
bGVkIHJlcGVhdGVkbHkKLSAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0
b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRoT2JqZWN0OmN1cnJlblByaW50T3BlcmF0aW9u
IGFmdGVyRGVsYXk6MF07Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIC8vIG5vdCBzdXJlIGlm
IHRoaXMgaXMgYWN0dWFsbHkgZXZlciBpbnZva2VkLCBpdCBwcm9iYWJseSBzaG91bGRuJ3QgYmUK
LSAgICAgICAgICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYg
bWF4aW11bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLSAgICB9Ci19Ci0KLS0g
KGZsb2F0KV9hdmFpbGFibGVQYXBlcldpZHRoRm9yUHJpbnRPcGVyYXRpb246KE5TUHJpbnRPcGVy
YXRpb24gKilwcmludE9wZXJhdGlvbgotewotICAgIE5TUHJpbnRJbmZvICpwcmludEluZm8gPSBb
cHJpbnRPcGVyYXRpb24gcHJpbnRJbmZvXTsKLSAgICByZXR1cm4gW3ByaW50SW5mbyBwYXBlclNp
emVdLndpZHRoIC0gW3ByaW50SW5mbyBsZWZ0TWFyZ2luXSAtIFtwcmludEluZm8gcmlnaHRNYXJn
aW5dOwotfQotCi0tIChmbG9hdClfc2NhbGVGYWN0b3JGb3JQcmludE9wZXJhdGlvbjooTlNQcmlu
dE9wZXJhdGlvbiAqKXByaW50T3BlcmF0aW9uCi17Ci0gICAgZmxvYXQgdmlld1dpZHRoID0gTlNX
aWR0aChbc2VsZiBib3VuZHNdKTsKLSAgICBpZiAodmlld1dpZHRoIDwgMSkgewotICAgICAgICBM
T0dfRVJST1IoIiVAIGhhcyBubyB3aWR0aCB3aGVuIHByaW50aW5nIiwgc2VsZik7Ci0gICAgICAg
IHJldHVybiAxLjBmOwotICAgIH0KLQotICAgIGZsb2F0IHVzZXJTY2FsZUZhY3RvciA9IFtwcmlu
dE9wZXJhdGlvbiBfd2ViX3BhZ2VTZXR1cFNjYWxlRmFjdG9yXTsKLSAgICBmbG9hdCBtYXhTaHJp
bmtUb0ZpdFNjYWxlRmFjdG9yID0gMS4wZiAvIFByaW50aW5nTWF4aW11bVNocmlua0ZhY3RvcjsK
LSAgICBmbG9hdCBzaHJpbmtUb0ZpdFNjYWxlRmFjdG9yID0gW3NlbGYgX2F2YWlsYWJsZVBhcGVy
V2lkdGhGb3JQcmludE9wZXJhdGlvbjpwcmludE9wZXJhdGlvbl0vdmlld1dpZHRoOwotICAgIGZs
b2F0IHNocmlua1RvQXZvaWRPcnBoYW4gPSBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhhbiA/
ICgxLjBmIC8gUHJpbnRpbmdPcnBoYW5TaHJpbmtBZGp1c3RtZW50KSA6IDEuMGY7Ci0gICAgcmV0
dXJuIHVzZXJTY2FsZUZhY3RvciAqIE1BWChtYXhTaHJpbmtUb0ZpdFNjYWxlRmFjdG9yLCBzaHJp
bmtUb0ZpdFNjYWxlRmFjdG9yKSAqIHNocmlua1RvQXZvaWRPcnBoYW47Ci19Ci0KLS8vIEZJWE1F
IDM0OTEzNDQ6IFRoaXMgaXMgYSBzZWNyZXQgQXBwS2l0LWludGVybmFsIG1ldGhvZCB0aGF0IHdl
IG5lZWQgdG8gb3ZlcnJpZGUgaW4gb3JkZXIKLS8vIHRvIGdldCBvdXIgc2hyaW5rLXRvLWZpdCB0
byB3b3JrIHdpdGggYSBjdXN0b20gcGFnaW5hdGlvbiBzY2hlbWUuIFdlIGNhbiBkbyB0aGlzIGJl
dHRlcgotLy8gaWYgQXBwS2l0IG1ha2VzIGl0IFNQSS9BUEkuCi0tIChDR0Zsb2F0KV9wcm92aWRl
VG90YWxTY2FsZUZhY3RvckZvclByaW50T3BlcmF0aW9uOihOU1ByaW50T3BlcmF0aW9uICopcHJp
bnRPcGVyYXRpb24gCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9zY2FsZUZhY3RvckZvclByaW50T3Bl
cmF0aW9uOnByaW50T3BlcmF0aW9uXTsKLX0KLQotLy8gVGhpcyBpcyB1c2VkIGZvciBDYXJib24g
cHJpbnRpbmcuIEF0IHNvbWUgcG9pbnQgd2UgbWlnaHQgd2FudCB0byBtYWtlIHRoaXMgcHVibGlj
IEFQSS4KLS0gKHZvaWQpc2V0UGFnZVdpZHRoRm9yUHJpbnRpbmc6KGZsb2F0KXBhZ2VXaWR0aAot
ewotICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11
bVBhZ2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOk5PXTsKLSAgICBbc2VsZiBfc2V0UHJpbnRp
bmc6WUVTIG1pbmltdW1QYWdlV2lkdGg6cGFnZVdpZHRoIG1heGltdW1QYWdlV2lkdGg6cGFnZVdp
ZHRoIGFkanVzdFZpZXdTaXplOllFU107Ci19Ci0KLS0gKHZvaWQpX2VuZFByaW50TW9kZQotewot
ICAgIFtzZWxmIF9zZXRQcmludGluZzpOTyBtaW5pbXVtUGFnZVdpZHRoOjAuMGYgbWF4aW11bVBh
Z2VXaWR0aDowLjBmIGFkanVzdFZpZXdTaXplOllFU107Ci0gICAgW1tzZWxmIHdpbmRvd10gc2V0
QXV0b2Rpc3BsYXk6WUVTXTsKLX0KLQotLSAodm9pZClfZGVsYXllZEVuZFByaW50TW9kZTooTlNQ
cmludE9wZXJhdGlvbiAqKWluaXRpYXRpbmdPcGVyYXRpb24KLXsKLSAgICBBU1NFUlRfQVJHKGlu
aXRpYXRpbmdPcGVyYXRpb24sIGluaXRpYXRpbmdPcGVyYXRpb24gIT0gbmlsKTsKLSAgICBOU1By
aW50T3BlcmF0aW9uICpjdXJyZW50T3BlcmF0aW9uID0gW05TUHJpbnRPcGVyYXRpb24gY3VycmVu
dE9wZXJhdGlvbl07Ci0gICAgaWYgKGluaXRpYXRpbmdPcGVyYXRpb24gPT0gY3VycmVudE9wZXJh
dGlvbikgewotICAgICAgICAvLyBUaGUgcHJpbnQgb3BlcmF0aW9uIGlzIHN0aWxsIHVuZGVyd2F5
LiBXZSBkb24ndCBleHBlY3QgdGhpcyB0byBldmVyIGhhcHBlbiwgaGVuY2UgdGhlIGFzc2VydCwg
YnV0IHdlJ3JlCi0gICAgICAgIC8vIGJlaW5nIGV4dHJhIHBhcmFub2lkIGhlcmUgc2luY2UgdGhl
IHByaW50aW5nIGNvZGUgaXMgc28gZnJhZ2lsZS4gRGVsYXkgdGhlIGNsZWFudXAKLSAgICAgICAg
Ly8gZnVydGhlci4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIFtzZWxm
IHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IoX2RlbGF5ZWRFbmRQcmludE1vZGU6KSB3aXRoT2Jq
ZWN0OmluaXRpYXRpbmdPcGVyYXRpb24gYWZ0ZXJEZWxheTowXTsKLSAgICB9IGVsc2UgaWYgKFtj
dXJyZW50T3BlcmF0aW9uIHZpZXddID09IHNlbGYpIHsKLSAgICAgICAgLy8gQSBuZXcgcHJpbnQg
am9iIGhhcyBzdGFydGVkLCBidXQgaXQgaXMgcHJpbnRpbmcgdGhlIHNhbWUgV2ViSFRNTFZpZXcg
YWdhaW4uIFdlIGRvbid0IGV4cGVjdAotICAgICAgICAvLyB0aGlzIHRvIGV2ZXIgaGFwcGVuLCBo
ZW5jZSB0aGUgYXNzZXJ0LCBidXQgd2UncmUgYmVpbmcgZXh0cmEgcGFyYW5vaWQgaGVyZSBzaW5j
ZSB0aGUgcHJpbnRpbmcgY29kZSBpcyBzbwotICAgICAgICAvLyBmcmFnaWxlLiBEbyBub3RoaW5n
LCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgdGhlIHByaW50IGpvYiBjdXJyZW50bHkg
aW4gcHJvZ3Jlc3MsIGFuZAotICAgICAgICAvLyB0aGUgcHJpbnQgam9iIGN1cnJlbnRseSBpbiBw
cm9ncmVzcyBpcyByZXNwb25zaWJsZSBmb3IgaXRzIG93biBjbGVhbnVwLgotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGUgcHJpbnQgam9i
IHRoYXQga2lja2VkIG9mZiB0aGlzIGRlbGF5ZWQgY2FsbCBoYXMgZmluaXNoZWQsIGFuZCB0aGlz
IHZpZXcgaXMgbm90IGJlaW5nCi0gICAgICAgIC8vIHByaW50ZWQgYWdhaW4uIFdlIGV4cGVjdCB0
aGF0IG5vIG90aGVyIHByaW50IGpvYiBoYXMgc3RhcnRlZC4gU2luY2UgdGhpcyBkZWxheWVkIGNh
bGwgd2Fzbid0Ci0gICAgICAgIC8vIGNhbmNlbGxlZCwgYmVnaW5Eb2N1bWVudCBhbmQgZW5kRG9j
dW1lbnQgbXVzdCBub3QgaGF2ZSBiZWVuIGNhbGxlZCwgYW5kIHdlIG5lZWQgdG8gY2xlYW4gdXAK
LSAgICAgICAgLy8gdGhlIHByaW50IG1vZGUgaGVyZS4KLSAgICAgICAgQVNTRVJUKGN1cnJlbnRP
cGVyYXRpb24gPT0gbmlsKTsKLSAgICAgICAgW3NlbGYgX2VuZFByaW50TW9kZV07Ci0gICAgfQot
fQotCi0vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhdmFpbGFibGUgZm9yIHByaW50aW5n
Ci0tIChCT09MKWtub3dzUGFnZVJhbmdlOihOU1JhbmdlUG9pbnRlcilyYW5nZQotewotICAgIC8v
IE11c3QgZG8gdGhpcyBleHBsaWNpdCBkaXNwbGF5IGhlcmUsIGJlY2F1c2Ugb3RoZXJ3aXNlIHRo
ZSB2aWV3IG1pZ2h0IHJlZGlzcGxheSB3aGlsZSB0aGUgcHJpbnQKLSAgICAvLyBzaGVldCB3YXMg
dXAsIHVzaW5nIHByaW50ZXIgZm9udHMgKGFuZCBsb29raW5nIGRpZmZlcmVudCkuCi0gICAgW3Nl
bGYgZGlzcGxheUlmTmVlZGVkXTsKLSAgICBbW3NlbGYgd2luZG93XSBzZXRBdXRvZGlzcGxheTpO
T107Ci0gICAgCi0gICAgLy8gSWYgd2UgYXJlIGEgZnJhbWVzZXQganVzdCBwcmludCB3aXRoIHRo
ZSBsYXlvdXQgd2UgaGF2ZSBvbnNjcmVlbiwgb3RoZXJ3aXNlIHJlbGF5b3V0Ci0gICAgLy8gYWNj
b3JkaW5nIHRvIHRoZSBwYXBlciBzaXplCi0gICAgZmxvYXQgbWluTGF5b3V0V2lkdGggPSAwLjBm
OwotICAgIGZsb2F0IG1heExheW91dFdpZHRoID0gMC4wZjsKLSAgICBGcmFtZSogZnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBOTzsK
LSAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKS0+aXNGcmFt
ZVNldCgpKSB7Ci0gICAgICAgIGZsb2F0IHBhcGVyV2lkdGggPSBbc2VsZiBfYXZhaWxhYmxlUGFw
ZXJXaWR0aEZvclByaW50T3BlcmF0aW9uOltOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRPcGVyYXRp
b25dXTsKLSAgICAgICAgbWluTGF5b3V0V2lkdGggPSBwYXBlcldpZHRoICogUHJpbnRpbmdNaW5p
bXVtU2hyaW5rRmFjdG9yOwotICAgICAgICBtYXhMYXlvdXRXaWR0aCA9IHBhcGVyV2lkdGggKiBQ
cmludGluZ01heGltdW1TaHJpbmtGYWN0b3I7Ci0gICAgfQotICAgIFtzZWxmIF9zZXRQcmludGlu
ZzpZRVMgbWluaW11bVBhZ2VXaWR0aDptaW5MYXlvdXRXaWR0aCBtYXhpbXVtUGFnZVdpZHRoOm1h
eExheW91dFdpZHRoIGFkanVzdFZpZXdTaXplOllFU107IC8vIHdpbGwgcmVsYXlvdXQKLSAgICBO
U1ByaW50T3BlcmF0aW9uICpwcmludE9wZXJhdGlvbiA9IFtOU1ByaW50T3BlcmF0aW9uIGN1cnJl
bnRPcGVyYXRpb25dOwotICAgIC8vIENlcnRhaW4gdHlwZXMgb2YgZXJyb3JzLCBpbmNsdWRpbmcg
aW52YWxpZCBwYWdlIHJhbmdlcywgY2FuIGNhdXNlIGJlZ2luRG9jdW1lbnQgYW5kCi0gICAgLy8g
ZW5kRG9jdW1lbnQgdG8gYmUgc2tpcHBlZCBhZnRlciB3ZSd2ZSBwdXQgb3Vyc2VsdmVzIGluIHBy
aW50IG1vZGUgKHNlZSA0MTQ1OTA1KS4gSW4gdGhvc2UgY2FzZXMKLSAgICAvLyB3ZSBuZWVkIHRv
IGdldCBvdXQgb2YgcHJpbnQgbW9kZSB3aXRob3V0IHJlbHlpbmcgb24gYW55IG1vcmUgY2FsbGJh
Y2tzIGZyb20gdGhlIHByaW50aW5nIG1lY2hhbmlzbS4KLSAgICAvLyBJZiB3ZSBnZXQgYXMgZmFy
IGFzIGJlZ2luRG9jdW1lbnQgd2l0aG91dCB0cm91YmxlLCB0aGVuIHRoaXMgZGVsYXllZCByZXF1
ZXN0IHdpbGwgYmUgY2FuY2VsbGVkLgotICAgIC8vIElmIG5vdCBjYW5jZWxsZWQsIHRoaXMgZGVs
YXllZCBjYWxsIHdpbGwgYmUgaW52b2tlZCBpbiB0aGUgbmV4dCBwYXNzIHRocm91Z2ggdGhlIG1h
aW4gZXZlbnQgbG9vcCwKLSAgICAvLyB3aGljaCBpcyBhZnRlciBiZWdpbkRvY3VtZW50IGFuZCBl
bmREb2N1bWVudCB3b3VsZCBiZSBjYWxsZWQuCi0gICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9yOkBz
ZWxlY3RvcihfZGVsYXllZEVuZFByaW50TW9kZTopIHdpdGhPYmplY3Q6cHJpbnRPcGVyYXRpb24g
YWZ0ZXJEZWxheTowXTsKLSAgICBbW3NlbGYgX3dlYlZpZXddIF9hZGp1c3RQcmludGluZ01hcmdp
bnNGb3JIZWFkZXJBbmRGb290ZXJdOwotICAgIAotICAgIC8vIFRoZXJlIGlzIGEgdGhlb3JldGlj
YWwgY2hhbmNlIHRoYXQgc29tZW9uZSBjb3VsZCBkbyBzb21lIGRyYXdpbmcgYmV0d2VlbiBoZXJl
IGFuZCBlbmREb2N1bWVudCwKLSAgICAvLyBpZiBzb21ldGhpbmcgY2F1c2VkIHNldE5lZWRzRGlz
cGxheSBhZnRlciB0aGlzIHBvaW50LiBJZiBzbywgaXQncyBub3QgYSBiaWcgdHJhZ2VkeSwgYmVj
YXVzZQotICAgIC8vIHlvdSdkIHNpbXBseSBzZWUgdGhlIHByaW50ZXIgZm9udHMgb24gc2NyZWVu
LiBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoaXMgZG9lcyBub3QgaGFwcGVuIHdpdGggU2FmYXJpLgot
Ci0gICAgcmFuZ2UtPmxvY2F0aW9uID0gMTsKLSAgICBmbG9hdCB0b3RhbFNjYWxlRmFjdG9yID0g
W3NlbGYgX3NjYWxlRmFjdG9yRm9yUHJpbnRPcGVyYXRpb246cHJpbnRPcGVyYXRpb25dOwotICAg
IGZsb2F0IHVzZXJTY2FsZUZhY3RvciA9IFtwcmludE9wZXJhdGlvbiBfd2ViX3BhZ2VTZXR1cFNj
YWxlRmFjdG9yXTsKLSAgICBbX3ByaXZhdGUtPnBhZ2VSZWN0cyByZWxlYXNlXTsKLSAgICBmbG9h
dCBmdWxsUGFnZUhlaWdodCA9IGZsb29yZihbc2VsZiBfY2FsY3VsYXRlUHJpbnRIZWlnaHRdL3Rv
dGFsU2NhbGVGYWN0b3IpOwotICAgIE5TQXJyYXkgKm5ld1BhZ2VSZWN0cyA9IFtbc2VsZiBfZnJh
bWVdIF9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50V2lkdGhTY2FsZUZhY3Rvcjp1c2VyU2NhbGVG
YWN0b3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHRdOwotICAg
IAotICAgIC8vIEFwcEtpdCBnZXRzIGFsbCBtZXNzZWQgdXAgaWYgeW91IGdpdmUgaXQgYSB6ZXJv
LWxlbmd0aCBwYWdlIGNvdW50IChzZWUgMzU3NjMzNCksIHNvIGlmIHdlCi0gICAgLy8gaGl0IHRo
YXQgY2FzZSB3ZSdsbCBwYXNzIGFsb25nIGEgZGVnZW5lcmF0ZSAxIHBpeGVsIHNxdWFyZSB0byBw
cmludC4gVGhpcyB3aWxsIHByaW50Ci0gICAgLy8gYSBibGFuayBwYWdlICh3aXRoIGNvcnJlY3Qt
bG9va2luZyBoZWFkZXIgYW5kIGZvb3RlciBpZiB0aGF0IG9wdGlvbiBpcyBvbiksIHdoaWNoIG1h
dGNoZXMKLSAgICAvLyB0aGUgYmVoYXZpb3Igb2YgSUUgYW5kIENhbWlubyBhdCBsZWFzdC4KLSAg
ICBpZiAoW25ld1BhZ2VSZWN0cyBjb3VudF0gPT0gMCkKLSAgICAgICAgbmV3UGFnZVJlY3RzID0g
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltOU1ZhbHVlIHZhbHVlV2l0aFJlY3Q6TlNNYWtlUmVj
dCgwLCAwLCAxLCAxKV1dOwotICAgIGVsc2UgaWYgKFtuZXdQYWdlUmVjdHMgY291bnRdID4gMSkg
ewotICAgICAgICAvLyBJZiB0aGUgbGFzdCBwYWdlIGlzIGEgc2hvcnQgb3JwaGFuLCB0cnkgYWRq
dXN0aW5nIHRoZSBwcmludCBoZWlnaHQgc2xpZ2h0bHkgdG8gc2VlIGlmIHRoaXMgd2lsbCBzcXVl
ZXplIHRoZQotICAgICAgICAvLyBjb250ZW50IG9udG8gb25lIGZld2VyIHBhZ2UuIElmIGl0IGRv
ZXMsIHVzZSB0aGUgYWRqdXN0ZWQgc2NhbGUuIElmIG5vdCwgdXNlIHRoZSBvcmlnaW5hbCBzY2Fs
ZS4KLSAgICAgICAgZmxvYXQgbGFzdFBhZ2VIZWlnaHQgPSBOU0hlaWdodChbW25ld1BhZ2VSZWN0
cyBsYXN0T2JqZWN0XSByZWN0VmFsdWVdKTsKLSAgICAgICAgaWYgKGxhc3RQYWdlSGVpZ2h0L2Z1
bGxQYWdlSGVpZ2h0IDwgTGFzdFByaW50ZWRQYWdlT3JwaGFuUmF0aW8pIHsKLSAgICAgICAgICAg
IE5TQXJyYXkgKmFkanVzdGVkUGFnZVJlY3RzID0gW1tzZWxmIF9mcmFtZV0gX2NvbXB1dGVQYWdl
UmVjdHNXaXRoUHJpbnRXaWR0aFNjYWxlRmFjdG9yOnVzZXJTY2FsZUZhY3RvcgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpbnRIZWlnaHQ6ZnVsbFBhZ2VIZWlnaHQqUHJpbnRpbmdP
cnBoYW5TaHJpbmtBZGp1c3RtZW50XTsKLSAgICAgICAgICAgIC8vIFVzZSB0aGUgYWRqdXN0ZWQg
cmVjdHMgb25seSBpZiB0aGUgcGFnZSBjb3VudCB3ZW50IGRvd24KLSAgICAgICAgICAgIGlmIChb
YWRqdXN0ZWRQYWdlUmVjdHMgY291bnRdIDwgW25ld1BhZ2VSZWN0cyBjb3VudF0pIHsKLSAgICAg
ICAgICAgICAgICBuZXdQYWdlUmVjdHMgPSBhZGp1c3RlZFBhZ2VSZWN0czsKLSAgICAgICAgICAg
ICAgICBfcHJpdmF0ZS0+YXZvaWRpbmdQcmludE9ycGhhbiA9IFlFUzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBfcHJpdmF0ZS0+cGFnZVJlY3RzID0gW25ld1Bh
Z2VSZWN0cyByZXRhaW5dOwotICAgIAotICAgIHJhbmdlLT5sZW5ndGggPSBbX3ByaXZhdGUtPnBh
Z2VSZWN0cyBjb3VudF07Ci0gICAgCi0gICAgcmV0dXJuIFlFUzsKLX0KLQotLy8gUmV0dXJuIHRo
ZSBkcmF3aW5nIHJlY3RhbmdsZSBmb3IgYSBwYXJ0aWN1bGFyIHBhZ2UgbnVtYmVyCi0tIChOU1Jl
Y3QpcmVjdEZvclBhZ2U6KE5TSW50ZWdlcilwYWdlCi17Ci0gICAgcmV0dXJuIFtbX3ByaXZhdGUt
PnBhZ2VSZWN0cyBvYmplY3RBdEluZGV4OnBhZ2UgLSAxXSByZWN0VmFsdWVdOwotfQotCi0tICh2
b2lkKWRyYXdQYWdlQm9yZGVyV2l0aFNpemU6KE5TU2l6ZSlib3JkZXJTaXplCi17Ci0gICAgQVNT
RVJUKE5TRXF1YWxTaXplcyhib3JkZXJTaXplLCBbW1tOU1ByaW50T3BlcmF0aW9uIGN1cnJlbnRP
cGVyYXRpb25dIHByaW50SW5mb10gcGFwZXJTaXplXSkpOyAgICAKLSAgICBbW3NlbGYgX3dlYlZp
ZXddIF9kcmF3SGVhZGVyQW5kRm9vdGVyXTsKLX0KLQotLSAodm9pZCliZWdpbkRvY3VtZW50Ci17
Ci0gICAgQHRyeSB7Ci0gICAgICAgIC8vIEZyb20gbm93IG9uIHdlJ2xsIGdldCBhIGNoYW5jZSB0
byBjYWxsIF9lbmRQcmludE1vZGUgaW4gZWl0aGVyIGJlZ2luRG9jdW1lbnQgb3IKLSAgICAgICAg
Ly8gZW5kRG9jdW1lbnQsIHNvIHdlIGNhbiBjYW5jZWwgdGhlICJqdXN0IGluIGNhc2UiIHBlbmRp
bmcgY2FsbC4KLSAgICAgICAgW05TT2JqZWN0IGNhbmNlbFByZXZpb3VzUGVyZm9ybVJlcXVlc3Rz
V2l0aFRhcmdldDpzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKF9kZWxheWVkRW5kUHJpbnRNb2RlOikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpbTlNQ
cmludE9wZXJhdGlvbiBjdXJyZW50T3BlcmF0aW9uXV07Ci0gICAgICAgIFtzdXBlciBiZWdpbkRv
Y3VtZW50XTsKLSAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24gKmxvY2FsRXhjZXB0aW9uKSB7Ci0g
ICAgICAgIC8vIEV4Y2VwdGlvbiBkdXJpbmcgW3N1cGVyIGJlZ2luRG9jdW1lbnRdIG1lYW5zIHRo
YXQgZW5kRG9jdW1lbnQgd2lsbCBub3QgZ2V0IGNhbGxlZCwKLSAgICAgICAgLy8gc28gd2UgbmVl
ZCB0byBjbGVhbiB1cCBvdXIgInByaW50IG1vZGUiIGhlcmUuCi0gICAgICAgIFtzZWxmIF9lbmRQ
cmludE1vZGVdOwotICAgIH0KLX0KLQotLSAodm9pZCllbmREb2N1bWVudAotewotICAgIFtzdXBl
ciBlbmREb2N1bWVudF07Ci0gICAgLy8gTm90ZSBzYWRseSBhdCB0aGlzIHBvaW50IFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dERyYXdpbmdUb1NjcmVlbl0gaXMgc3RpbGwgTk8gCi0g
ICAgW3NlbGYgX2VuZFByaW50TW9kZV07Ci19Ci0KLS0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAq
KWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhp
cyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGlu
ZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRo
ZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQg
ZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAg
IFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBSZXRhaW5QdHI8V2ViSFRNTFZp
ZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3Jl
ID0gKF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQpOwotCi0gICAgQk9PTCBjYWxsU3Vw
ZXIgPSBOTzsKLQotICAgIFtfcHJpdmF0ZS0+a2V5RG93bkV2ZW50IHJlbGVhc2VdOwotICAgIF9w
cml2YXRlLT5rZXlEb3duRXZlbnQgPSBbZXZlbnQgcmV0YWluXTsKLQotICAgIEJPT0wgY29tcGxl
dGlvblBvcHVwV2FzT3BlbiA9IF9wcml2YXRlLT5jb21wQ29udHJvbGxlciAmJiBbX3ByaXZhdGUt
PmNvbXBDb250cm9sbGVyIHBvcHVwV2luZG93SXNPcGVuXTsKLSAgICBGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAm
JiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQp
KSB7Ci0gICAgICAgIC8vIFdlYkNvcmUgcHJvY2Vzc2VkIGEga2V5IGV2ZW50LCBiYWlsIG9uIGFu
eSBwcmVleGlzdGluZyBjb21wbGV0ZTogVUkKLSAgICAgICAgaWYgKGNvbXBsZXRpb25Qb3B1cFdh
c09wZW4pCi0gICAgICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGlu
Z0NoYW5nZTpZRVMgbW92ZUxlZnQ6Tk9dOwotICAgIH0gZWxzZSBpZiAoIV9wcml2YXRlLT5jb21w
Q29udHJvbGxlciB8fCAhW19wcml2YXRlLT5jb21wQ29udHJvbGxlciBmaWx0ZXJLZXlEb3duOmV2
ZW50XSkgewotICAgICAgICAvLyBOb3QgY29uc3VtZWQgYnkgY29tcGxldGU6IHBvcHVwIHdpbmRv
dwotICAgICAgICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGVuZFJldmVydGluZ0NoYW5nZTpZ
RVMgbW92ZUxlZnQ6Tk9dOwotICAgICAgICBjYWxsU3VwZXIgPSBZRVM7Ci0gICAgfQotICAgIGlm
IChjYWxsU3VwZXIpCi0gICAgICAgIFtzdXBlciBrZXlEb3duOmV2ZW50XTsKLSAgICBlbHNlCi0g
ICAgICAgIFtOU0N1cnNvciBzZXRIaWRkZW5VbnRpbE1vdXNlTW92ZXM6WUVTXTsKLX0KLQotLSAo
dm9pZClrZXlVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0
aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29w
LCBhbmQKLSAgICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQg
b25lLiBSZXRhaW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50
IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0
IG9yIEFwcEtpdCBjb2RlLgotICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAg
ICBCT09MIGV2ZW50V2FzU2VudFRvV2ViQ29yZSA9IChfcHJpdmF0ZS0+a2V5RG93bkV2ZW50ID09
IGV2ZW50KTsKLQotICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNl
bGY7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYg
KGNvcmVGcmFtZSAmJiAhZXZlbnRXYXNTZW50VG9XZWJDb3JlKQotICAgICAgICBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7Ci0gICAgZWxzZQotICAgICAgICBbc3Vw
ZXIga2V5VXA6ZXZlbnRdOwotfQotCi0tICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKWV2
ZW50Ci17Ci0gICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRpbmcgdG8gdGhpcyBl
dmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKLSAgICAvLyBmZXRjaGluZyBh
IG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRoZW4g
YXV0b3JlbGVhc2luZwotICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQgZnJv
bSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgotICAgIFtb
ZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0KLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoY29yZUZyYW1lKQotICAgICAgICBjb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKLSAgICAKLSAg
ICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHNlbGZQcm90ZWN0b3IgPSBzZWxmOwotCi0gICAgdW5z
aWduZWQgc2hvcnQga2V5Q29kZSA9IFtldmVudCBrZXlDb2RlXTsKLQotICAgIC8vRG9uJ3QgbWFr
ZSBhbiBldmVudCBmcm9tIHRoZSBudW0gbG9jayBhbmQgZnVuY3Rpb24ga2V5cwotICAgIGlmIChj
b3JlRnJhbWUgJiYga2V5Q29kZSAhPSAwICYmIGtleUNvZGUgIT0gMTAgJiYga2V5Q29kZSAhPSA2
MykgewotICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChQbGF0Zm9y
bUtleWJvYXJkRXZlbnQoZXZlbnQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAg
Ci0gICAgW3N1cGVyIGZsYWdzQ2hhbmdlZDpldmVudF07Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxp
dHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWUKLXsKLSAgICBpZiAoW2F0
dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlDaGlsZHJlbkF0dHJp
YnV0ZV0pIHsKLSAgICAgICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmls
aXR5VHJlZV07Ci0gICAgICAgIGlmIChhY2NUcmVlKQotICAgICAgICAgICAgcmV0dXJuIFtOU0Fy
cmF5IGFycmF5V2l0aE9iamVjdDphY2NUcmVlXTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9
Ci0gICAgcmV0dXJuIFtzdXBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6YXR0cmlidXRl
TmFtZV07Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50Ci17Ci0gICAg
aWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5VHJlZV07Ci0gICAgaWYg
KGFjY1RyZWUpCi0gICAgICAgIHJldHVybiBbYWNjVHJlZSBhY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJ
RWxlbWVudF07Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkKWFjY2Vzc2liaWxpdHlIaXRU
ZXN0OihOU1BvaW50KXBvaW50Ci17Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9h
Y2Nlc3NpYmlsaXR5VHJlZV07Ci0gICAgaWYgKGFjY1RyZWUpIHsKLSAgICAgICAgTlNQb2ludCB3
aW5kb3dDb29yZCA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRTY3JlZW5Ub0Jhc2U6cG9pbnRdOwot
ICAgICAgICByZXR1cm4gW2FjY1RyZWUgYWNjZXNzaWJpbGl0eUhpdFRlc3Q6W3NlbGYgY29udmVy
dFBvaW50OndpbmRvd0Nvb3JkIGZyb21WaWV3Om5pbF1dOwotICAgIH0KLSAgICByZXR1cm4gc2Vs
ZjsKLX0KLQotLSAoaWQpX2FjY2Vzc2liaWxpdHlQYXJlbnRGb3JTdWJ2aWV3OihOU1ZpZXcgKilz
dWJ2aWV3Ci17Ci0gICAgaWQgYWNjVHJlZSA9IFtbc2VsZiBfZnJhbWVdIF9hY2Nlc3NpYmlsaXR5
VHJlZV07Ci0gICAgaWYgKCFhY2NUcmVlKQotICAgICAgICByZXR1cm4gc2VsZjsKLSAgICBpZCBw
YXJlbnQgPSBbYWNjVHJlZSBfYWNjZXNzaWJpbGl0eVBhcmVudEZvclN1YnZpZXc6c3Vidmlld107
Ci0gICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiBzZWxmOwotICAgIHJldHVybiBwYXJl
bnQ7Ci19Ci0KLS0gKHZvaWQpY2VudGVyU2VsZWN0aW9uSW5WaXNpYmxlQXJlYTooaWQpc2VuZGVy
Ci17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPnJldmVhbFNlbGVjdGlvbihT
Y3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVyQWx3YXlzKTsKLX0KLQotLSAoTlNEYXRhICopX3Nl
bGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNBc1JURgotewotICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0g
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAieCIKLSAgICAgICAg
YXR0cmlidXRlczpjb3JlRnJhbWUgPyBjb3JlRnJhbWUtPmZvbnRBdHRyaWJ1dGVzRm9yU2VsZWN0
aW9uU3RhcnQoKSA6IG5pbF07Ci0gICAgTlNEYXRhICpkYXRhID0gW3N0cmluZyBSVEZGcm9tUmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgW3N0cmluZyBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6bmls
XTsKLSAgICBbc3RyaW5nIHJlbGVhc2VdOwotICAgIHJldHVybiBkYXRhOwotfQotCi0tIChOU0Rp
Y3Rpb25hcnkgKilfZm9udEF0dHJpYnV0ZXNGcm9tRm9udFBhc3RlYm9hcmQKLXsKLSAgICBOU1Bh
c3RlYm9hcmQgKmZvbnRQYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5h
bWU6TlNGb250UGJvYXJkXTsKLSAgICBpZiAoZm9udFBhc3RlYm9hcmQgPT0gbmlsKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIE5TRGF0YSAqZGF0YSA9IFtmb250UGFzdGVib2FyZCBkYXRhRm9y
VHlwZTpOU0ZvbnRQYm9hcmRUeXBlXTsKLSAgICBpZiAoZGF0YSA9PSBuaWwgfHwgW2RhdGEgbGVu
Z3RoXSA9PSAwKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIC8vIE5TVGV4dFZpZXcgZG9lcyBz
b21ldGhpbmcgbW9yZSBlZmZpY2llbnQgYnkgcGFyc2luZyB0aGUgYXR0cmlidXRlcyBvbmx5LCBi
dXQgdGhhdCdzIG5vdCBhdmFpbGFibGUgaW4gQVBJLgotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
c3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURjpkYXRhIGRv
Y3VtZW50QXR0cmlidXRlczpOVUxMXSBhdXRvcmVsZWFzZV07Ci0gICAgaWYgKHN0cmluZyA9PSBu
aWwgfHwgW3N0cmluZyBsZW5ndGhdID09IDApCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0
dXJuIFtzdHJpbmcgZm9udEF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIDEpXTsKLX0K
LQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9lbXB0eVN0eWxlCi17Ci0gICAgcmV0dXJu
IFtbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF0gY3JlYXRlQ1NTU3R5bGVEZWNsYXJhdGlvbl07
Ci19Ci0KLS0gKE5TU3RyaW5nICopX2NvbG9yQXNTdHJpbmc6KE5TQ29sb3IgKiljb2xvcgotewot
ICAgIE5TQ29sb3IgKnJnYkNvbG9yID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpO
U0RldmljZVJHQkNvbG9yU3BhY2VdOwotICAgIC8vIEZJWE1FOiBJZiBjb2xvciBpcyBub24tbmls
IGFuZCByZ2JDb2xvciBpcyBuaWwsIHRoYXQgbWVhbnMgd2UgZ290IHNvbWUga2luZAotICAgIC8v
IG9mIGZhbmN5IGNvbG9yIHRoYXQgY2FuJ3QgYmUgY29udmVydGVkIHRvIFJHQi4gQ2hhbmdpbmcg
dGhhdCB0byAidHJhbnNwYXJlbnQiCi0gICAgLy8gbWlnaHQgbm90IGJlIGdyZWF0LCBidXQgaXQn
cyBwcm9iYWJseSBPSy4KLSAgICBpZiAocmdiQ29sb3IgPT0gbmlsKQotICAgICAgICByZXR1cm4g
QCJ0cmFuc3BhcmVudCI7Ci0gICAgZmxvYXQgciA9IFtyZ2JDb2xvciByZWRDb21wb25lbnRdOwot
ICAgIGZsb2F0IGcgPSBbcmdiQ29sb3IgZ3JlZW5Db21wb25lbnRdOwotICAgIGZsb2F0IGIgPSBb
cmdiQ29sb3IgYmx1ZUNvbXBvbmVudF07Ci0gICAgZmxvYXQgYSA9IFtyZ2JDb2xvciBhbHBoYUNv
bXBvbmVudF07Ci0gICAgaWYgKGEgPT0gMCkKLSAgICAgICAgcmV0dXJuIEAidHJhbnNwYXJlbnQi
OwotICAgIGlmIChyID09IDAgJiYgZyA9PSAwICYmIGIgPT0gMCAmJiBhID09IDEpCi0gICAgICAg
IHJldHVybiBAImJsYWNrIjsKLSAgICBpZiAociA9PSAxICYmIGcgPT0gMSAmJiBiID09IDEgJiYg
YSA9PSAxKQotICAgICAgICByZXR1cm4gQCJ3aGl0ZSI7Ci0gICAgLy8gRklYTUU6IExvdHMgbW9y
ZSBuYW1lZCBjb2xvcnMuIE1heWJlIHdlIGNvdWxkIHVzZSB0aGUgdGFibGUgaW4gV2ViQ29yZT8K
LSAgICBpZiAoYSA9PSAxKQotICAgICAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCJyZ2IoJS4wZiwlLjBmLCUuMGYpIiwgciAqIDI1NSwgZyAqIDI1NSwgYiAqIDI1NV07Ci0g
ICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAicmdiYSglLjBmLCUuMGYsJS4w
ZiwlZikiLCByICogMjU1LCBnICogMjU1LCBiICogMjU1LCBhXTsKLX0KLQotLSAoTlNTdHJpbmcg
Kilfc2hhZG93QXNTdHJpbmc6KE5TU2hhZG93ICopc2hhZG93Ci17Ci0gICAgaWYgKHNoYWRvdyA9
PSBuaWwpCi0gICAgICAgIHJldHVybiBAIm5vbmUiOwotICAgIE5TU2l6ZSBvZmZzZXQgPSBbc2hh
ZG93IHNoYWRvd09mZnNldF07Ci0gICAgZmxvYXQgYmx1clJhZGl1cyA9IFtzaGFkb3cgc2hhZG93
Qmx1clJhZGl1c107Ci0gICAgaWYgKG9mZnNldC53aWR0aCA9PSAwICYmIG9mZnNldC5oZWlnaHQg
PT0gMCAmJiBibHVyUmFkaXVzID09IDApCi0gICAgICAgIHJldHVybiBAIm5vbmUiOwotICAgIE5T
Q29sb3IgKmNvbG9yID0gW3NoYWRvdyBzaGFkb3dDb2xvcl07Ci0gICAgaWYgKGNvbG9yID09IG5p
bCkKLSAgICAgICAgcmV0dXJuIEAibm9uZSI7Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBub24taW50
ZWdyYWwgdmFsdWVzIGhlcmU/Ci0gICAgaWYgKGJsdXJSYWRpdXMgPT0gMCkKLSAgICAgICAgcmV0
dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJS4wZnB4ICUuMGZweCIsIFtzZWxm
IF9jb2xvckFzU3RyaW5nOmNvbG9yXSwgb2Zmc2V0LndpZHRoLCBvZmZzZXQuaGVpZ2h0XTsKLSAg
ICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQCAlLjBmcHggJS4wZnB4ICUu
MGZweCIsIFtzZWxmIF9jb2xvckFzU3RyaW5nOmNvbG9yXSwgb2Zmc2V0LndpZHRoLCBvZmZzZXQu
aGVpZ2h0LCBibHVyUmFkaXVzXTsKLX0KLQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9z
dHlsZUZyb21Gb250QXR0cmlidXRlczooTlNEaWN0aW9uYXJ5ICopZGljdGlvbmFyeQotewotICAg
IERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxlID0gW3NlbGYgX2VtcHR5U3R5bGVdOwotCi0g
ICAgTlNDb2xvciAqY29sb3IgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNCYWNrZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBbc3R5bGUgc2V0QmFja2dyb3VuZENvbG9yOltzZWxm
IF9jb2xvckFzU3RyaW5nOmNvbG9yXV07Ci0KLSAgICBOU0ZvbnQgKmZvbnQgPSBbZGljdGlvbmFy
eSBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKCFmb250KSB7Ci0g
ICAgICAgIFtzdHlsZSBzZXRGb250RmFtaWx5OkAiSGVsdmV0aWNhIl07Ci0gICAgICAgIFtzdHls
ZSBzZXRGb250U2l6ZTpAIjEycHgiXTsKLSAgICAgICAgW3N0eWxlIHNldEZvbnRXZWlnaHQ6QCJu
b3JtYWwiXTsKLSAgICAgICAgW3N0eWxlIHNldEZvbnRTdHlsZTpAIm5vcm1hbCJdOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIE5TRm9udE1hbmFnZXIgKmZtID0gW05TRm9udE1hbmFnZXIgc2hhcmVk
Rm9udE1hbmFnZXJdOwotICAgICAgICAvLyBGSVhNRTogTmVlZCBtb3JlIHNvcGhpc3RpY2F0ZWQg
ZXNjYXBpbmcgY29kZSBpZiB3ZSB3YW50IHRvIGhhbmRsZSBmYW1pbHkgbmFtZXMKLSAgICAgICAg
Ly8gd2l0aCBjaGFyYWN0ZXJzIGxpa2Ugc2luZ2xlIHF1b3RlIG9yIGJhY2tzbGFzaCBpbiB0aGVp
ciBuYW1lcy4KLSAgICAgICAgW3N0eWxlIHNldEZvbnRGYW1pbHk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCInJUAnIiwgW2ZvbnQgZmFtaWx5TmFtZV1dXTsKLSAgICAgICAgW3N0eWxlIHNl
dEZvbnRTaXplOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJTAuZnB4IiwgW2ZvbnQgcG9p
bnRTaXplXV1dOwotICAgICAgICAvLyBGSVhNRTogTWFwIHRvIHRoZSBlbnRpcmUgcmFuZ2Ugb2Yg
Q1NTIHdlaWdodCB2YWx1ZXMuCi0gICAgICAgIGlmIChbZm0gd2VpZ2h0T2ZGb250OmZvbnRdID49
IE1JTl9CT0xEX1dFSUdIVCkKLSAgICAgICAgICAgIFtzdHlsZSBzZXRGb250V2VpZ2h0OkAiYm9s
ZCJdOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDpAIm5v
cm1hbCJdOwotICAgICAgICBpZiAoW2ZtIHRyYWl0c09mRm9udDpmb250XSAmIE5TSXRhbGljRm9u
dE1hc2spCi0gICAgICAgICAgICBbc3R5bGUgc2V0Rm9udFN0eWxlOkAiaXRhbGljIl07Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIFtzdHlsZSBzZXRGb250U3R5bGU6QCJub3JtYWwiXTsKLSAg
ICB9Ci0KLSAgICBjb2xvciA9IFtkaWN0aW9uYXJ5IG9iamVjdEZvcktleTpOU0ZvcmVncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIFtzdHlsZSBzZXRDb2xvcjpjb2xvciA/IFtzZWxmIF9j
b2xvckFzU3RyaW5nOmNvbG9yXSA6IChOU1N0cmluZyAqKUAiYmxhY2siXTsKLQotICAgIE5TU2hh
ZG93ICpzaGFkb3cgPSBbZGljdGlvbmFyeSBvYmplY3RGb3JLZXk6TlNTaGFkb3dBdHRyaWJ1dGVO
YW1lXTsKLSAgICBbc3R5bGUgc2V0VGV4dFNoYWRvdzpbc2VsZiBfc2hhZG93QXNTdHJpbmc6c2hh
ZG93XV07Ci0KLSAgICBpbnQgc3RyaWtldGhyb3VnaEludCA9IFtbZGljdGlvbmFyeSBvYmplY3RG
b3JLZXk6TlNTdHJpa2V0aHJvdWdoU3R5bGVBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0KLSAg
ICBpbnQgc3VwZXJzY3JpcHRJbnQgPSBbW2RpY3Rpb25hcnkgb2JqZWN0Rm9yS2V5Ok5TU3VwZXJz
Y3JpcHRBdHRyaWJ1dGVOYW1lXSBpbnRWYWx1ZV07Ci0gICAgaWYgKHN1cGVyc2NyaXB0SW50ID4g
MCkKLSAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246QCJzdXBlciJdOwotICAgIGVsc2Ug
aWYgKHN1cGVyc2NyaXB0SW50IDwgMCkKLSAgICAgICAgW3N0eWxlIHNldFZlcnRpY2FsQWxpZ246
QCJzdWIiXTsKLSAgICBlbHNlCi0gICAgICAgIFtzdHlsZSBzZXRWZXJ0aWNhbEFsaWduOkAiYmFz
ZWxpbmUiXTsKLSAgICBpbnQgdW5kZXJsaW5lSW50ID0gW1tkaWN0aW9uYXJ5IG9iamVjdEZvcktl
eTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIC8vIEZJWE1F
OiBVbmRlcmxpbmUgd2lucyBoZXJlIGlmIHdlIGhhdmUgYm90aCAoc2VlIGJ1ZyAzNzkwNDQzKS4K
LSAgICBpZiAoc3RyaWtldGhyb3VnaEludCA9PSBOU1VuZGVybGluZVN0eWxlTm9uZSAmJiB1bmRl
cmxpbmVJbnQgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCi0gICAgICAgIFtzdHlsZSBzZXRQcm9w
ZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCIgdmFsdWU6QCJub25lIiBw
cmlvcml0eTpAIiJdOwotICAgIGVsc2UgaWYgKHVuZGVybGluZUludCA9PSBOU1VuZGVybGluZVN0
eWxlTm9uZSkKLSAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3Jh
dGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsKLSAg
ICBlbHNlCi0gICAgICAgIFtzdHlsZSBzZXRQcm9wZXJ0eTpAIi1raHRtbC10ZXh0LWRlY29yYXRp
b25zLWluLWVmZmVjdCIgdmFsdWU6QCJ1bmRlcmxpbmUiIHByaW9yaXR5OkAiIl07Ci0KLSAgICBy
ZXR1cm4gc3R5bGU7Ci19Ci0KLS0gKHZvaWQpX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjooRE9NQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9uOihFZGl0QWN0aW9uKXVuZG9B
Y3Rpb24KLXsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSkp
Ci0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGVUb1NlbGVjdGlvbihjb3Jl
KHN0eWxlKSwgdW5kb0FjdGlvbik7Ci19Ci0KLS0gKHZvaWQpX2FwcGx5UGFyYWdyYXBoU3R5bGVU
b1NlbGVjdGlvbjooRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKXN0eWxlIHdpdGhVbmRvQWN0aW9u
OihFZGl0QWN0aW9uKXVuZG9BY3Rpb24KLXsKLSAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSkpCi0gICAgICAgIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmFwcGx5UGFy
YWdyYXBoU3R5bGVUb1NlbGVjdGlvbihjb3JlKHN0eWxlKSwgdW5kb0FjdGlvbik7Ci19Ci0KLS0g
KEJPT0wpX2hhbmRsZVN0eWxlS2V5RXF1aXZhbGVudDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAg
QVNTRVJUKFtzZWxmIF93ZWJWaWV3XSk7Ci0gICAgaWYgKCFbW1tzZWxmIF93ZWJWaWV3XSBwcmVm
ZXJlbmNlc10gcmVzcGVjdFN0YW5kYXJkU3R5bGVLZXlFcXVpdmFsZW50c10pCi0gICAgICAgIHJl
dHVybiBOTzsKLSAgICAKLSAgICBpZiAoIVtzZWxmIF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJu
IE5POwotICAgIAotICAgIGlmICgoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJbmRl
cGVuZGVudE1vZGlmaWVyRmxhZ3NNYXNrKSAhPSBOU0NvbW1hbmRLZXlNYXNrKQotICAgICAgICBy
ZXR1cm4gTk87Ci0gICAgCi0gICAgTlNTdHJpbmcgKnN0cmluZyA9IFtldmVudCBjaGFyYWN0ZXJz
XTsKLSAgICBpZiAoW3N0cmluZyBjYXNlSW5zZW5zaXRpdmVDb21wYXJlOkAiYiJdID09IE5TT3Jk
ZXJlZFNhbWUpIHsKLSAgICAgICAgW3NlbGYgZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lOiJUb2dn
bGVCb2xkIl07Ci0gICAgICAgIHJldHVybiBZRVM7Ci0gICAgfQotICAgIGlmIChbc3RyaW5nIGNh
c2VJbnNlbnNpdGl2ZUNvbXBhcmU6QCJpIl0gPT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAgICBb
c2VsZiBleGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6IlRvZ2dsZUl0YWxpYyJdOwotICAgICAgICBy
ZXR1cm4gWUVTOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gTk87Ci19Ci0KLS0gKEJPT0wpcGVy
Zm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKilldmVudAotewotICAgIC8vIFRoZXJlJ3MgYSBj
aGFuY2UgdGhhdCByZXNwb25kaW5nIHRvIHRoaXMgZXZlbnQgd2lsbCBydW4gYSBuZXN0ZWQgZXZl
bnQgbG9vcCwgYW5kCi0gICAgLy8gZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0
aGUgb2xkIG9uZS4gUmV0YWluaW5nIGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKLSAgICAvLyB0aGUg
Y3VycmVudCBldmVudCBwcmV2ZW50cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRl
IFdlYktpdCBvciBBcHBLaXQgY29kZS4KLSAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2Vd
OwotCi0gICAgaWYgKFtzZWxmIF9oYW5kbGVTdHlsZUtleUVxdWl2YWxlbnQ6ZXZlbnRdKQotICAg
ICAgICByZXR1cm4gWUVTOwotICAgIAotICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3JlID0g
KF9wcml2YXRlLT5rZXlEb3duRXZlbnQgPT0gZXZlbnQpOwotICAgIEJPT0wgcmV0ID0gTk87Ci0K
LSAgICBbX3ByaXZhdGUtPmtleURvd25FdmVudCByZWxlYXNlXTsKLSAgICBfcHJpdmF0ZS0+a2V5
RG93bkV2ZW50ID0gW2V2ZW50IHJldGFpbl07Ci0gICAgCi0gICAgW3NlbGYgcmV0YWluXTsKLQot
ICAgIC8vIFBhc3MgY29tbWFuZC1rZXkgY29tYm9zIHRocm91Z2ggV2ViQ29yZSBpZiB0aGVyZSBp
cyBhIGtleSBiaW5kaW5nIGF2YWlsYWJsZSBmb3IKLSAgICAvLyB0aGlzIGV2ZW50LiBUaGlzIGxl
dHMgd2ViIHBhZ2VzIGhhdmUgYSBjcmFjayBhdCBpbnRlcmNlcHRpbmcgY29tbWFuZC1tb2RpZmll
ZCBrZXlwcmVzc2VzLgotICAgIC8vIEJ1dCBkb24ndCBkbyBpdCBpZiB3ZSBoYXZlIGFscmVhZHkg
aGFuZGxlZCB0aGUgZXZlbnQuCi0gICAgLy8gUHJlc3NpbmcgRXNjIHJlc3VsdHMgaW4gYSBmYWtl
IGV2ZW50IGJlaW5nIHNlbnQgLSBkb24ndCBwYXNzIGl0IHRvIFdlYkNvcmUuCi0gICAgaWYgKCFl
dmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgZXZlbnQgPT0gW05TQXBwIGN1cnJlbnRFdmVudF0gJiYg
c2VsZiA9PSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl0pCi0gICAgICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICAgICAgcmV0ID0gZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7Ci0KLSAgICBpZiAoIXJldCkKLSAgICAg
ICAgcmV0ID0gW3N1cGVyIHBlcmZvcm1LZXlFcXVpdmFsZW50OmV2ZW50XTsKLQotICAgIFtzZWxm
IHJlbGVhc2VdOwotICAgIAotICAgIHJldHVybiByZXQ7Ci19Ci0KLS0gKHZvaWQpY29weUZvbnQ6
KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIFB1dCBSVEYgd2l0
aCBmb250IGF0dHJpYnV0ZXMgb24gdGhlIHBhc3RlYm9hcmQuCi0gICAgLy8gTWF5YmUgbGF0ZXIg
d2Ugc2hvdWxkIGFkZCBhIHBhc3RlYm9hcmQgdHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0IGZv
ciAibmF0aXZlIiBjb3B5IGFuZCBwYXN0ZSBmb250LgotICAgIE5TUGFzdGVib2FyZCAqZm9udFBh
c3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpOU0ZvbnRQYm9hcmRd
OwotICAgIFtmb250UGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6W05TQXJyYXkgYXJyYXlXaXRoT2Jq
ZWN0Ok5TRm9udFBib2FyZFR5cGVdIG93bmVyOm5pbF07Ci0gICAgW2ZvbnRQYXN0ZWJvYXJkIHNl
dERhdGE6W3NlbGYgX3NlbGVjdGlvblN0YXJ0Rm9udEF0dHJpYnV0ZXNBc1JURl0gZm9yVHlwZTpO
U0ZvbnRQYm9hcmRUeXBlXTsKLX0KLQotLSAodm9pZClwYXN0ZUZvbnQ6KGlkKXNlbmRlcgotewot
ICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIC8vIFJlYWQgUlRGIHdpdGggZm9udCBhdHRyaWJ1
dGVzIGZyb20gdGhlIHBhc3RlYm9hcmQuCi0gICAgLy8gTWF5YmUgbGF0ZXIgd2Ugc2hvdWxkIGFk
ZCBhIHBhc3RlYm9hcmQgdHlwZSB0aGF0IGNvbnRhaW5zIENTUyB0ZXh0IGZvciAibmF0aXZlIiBj
b3B5IGFuZCBwYXN0ZSBmb250LgotICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3Nl
bGYgX3N0eWxlRnJvbUZvbnRBdHRyaWJ1dGVzOltzZWxmIF9mb250QXR0cmlidXRlc0Zyb21Gb250
UGFzdGVib2FyZF1dIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25QYXN0ZUZvbnRdOwotfQotCi0t
ICh2b2lkKXBhc3RlQXNSaWNoVGV4dDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dV
RQotCi0gICAgLy8gU2luY2UgcmljaCB0ZXh0IGFsd2F5cyBiZWF0cyBwbGFpbiB0ZXh0IHdoZW4g
Ym90aCBhcmUgb24gdGhlIHBhc3RlYm9hcmQsIGl0J3Mgbm90Ci0gICAgLy8gY2xlYXIgaG93IHRo
aXMgaXMgZGlmZmVyZW50IGZyb20gcGxhaW4gb2xkIHBhc3RlLgotICAgIFtzZWxmIF9wYXN0ZVdp
dGhQYXN0ZWJvYXJkOltOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdIGFsbG93UGxhaW5U
ZXh0Ok5PXTsKLX0KLQotLSAoTlNGb250ICopX29yaWdpbmFsRm9udEEKLXsKLSAgICByZXR1cm4g
W1tOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0aEZhbWlseTpAIkhlbHZl
dGljYSIgdHJhaXRzOjAgd2VpZ2h0OlNUQU5EQVJEX1dFSUdIVCBzaXplOjEwLjBmXTsKLX0KLQot
LSAoTlNGb250ICopX29yaWdpbmFsRm9udEIKLXsKLSAgICByZXR1cm4gW1tOU0ZvbnRNYW5hZ2Vy
IHNoYXJlZEZvbnRNYW5hZ2VyXSBmb250V2l0aEZhbWlseTpAIlRpbWVzIiB0cmFpdHM6TlNGb250
SXRhbGljVHJhaXQgd2VpZ2h0OlNUQU5EQVJEX0JPTERfV0VJR0hUIHNpemU6MTIuMGZdOwotfQot
Ci0tICh2b2lkKV9hZGRUb1N0eWxlOihET01DU1NTdHlsZURlY2xhcmF0aW9uICopc3R5bGUgZm9u
dEE6KE5TRm9udCAqKWEgZm9udEI6KE5TRm9udCAqKWIKLXsKLSAgICAvLyBTaW5jZSB0aGVyZSdz
IG5vIHdheSB0byBkaXJlY3RseSBhc2sgTlNGb250TWFuYWdlciB3aGF0IHN0eWxlIGNoYW5nZSBp
dCdzIGdvaW5nIHRvIGRvCi0gICAgLy8gd2UgaW5zdGVhZCBwYXNzIHR3byAic3BlY2ltZW4iIGZv
bnRzIHRvIGl0IGFuZCBsZXQgaXQgY2hhbmdlIHRoZW0uIFdlIHRoZW4gZGVkdWNlIHdoYXQKLSAg
ICAvLyBzdHlsZSBjaGFuZ2UgaXQgd2FzIGRvaW5nIGJ5IGxvb2tpbmcgYXQgd2hhdCBoYXBwZW5l
ZCB0byBlYWNoIG9mIHRoZSB0d28gZm9udHMuCi0gICAgLy8gU28gaWYgaXQgd2FzIG1ha2luZyB0
aGUgdGV4dCBib2xkLCBib3RoIGZvbnRzIHdpbGwgYmUgYm9sZCBhZnRlciB0aGUgZmFjdC4KLQot
ICAgIGlmIChhID09IG5pbCB8fCBiID09IG5pbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNG
b250TWFuYWdlciAqZm0gPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0KLSAg
ICBOU0ZvbnQgKm9hID0gW3NlbGYgX29yaWdpbmFsRm9udEFdOwotCi0gICAgTlNTdHJpbmcgKmFG
YW1pbHlOYW1lID0gW2EgZmFtaWx5TmFtZV07Ci0gICAgTlNTdHJpbmcgKmJGYW1pbHlOYW1lID0g
W2IgZmFtaWx5TmFtZV07Ci0KLSAgICBpbnQgYVBvaW50U2l6ZSA9IChpbnQpW2EgcG9pbnRTaXpl
XTsKLSAgICBpbnQgYlBvaW50U2l6ZSA9IChpbnQpW2IgcG9pbnRTaXplXTsKLQotICAgIGludCBh
V2VpZ2h0ID0gW2ZtIHdlaWdodE9mRm9udDphXTsKLSAgICBpbnQgYldlaWdodCA9IFtmbSB3ZWln
aHRPZkZvbnQ6Yl07Ci0KLSAgICBCT09MIGFJc0l0YWxpYyA9IChbZm0gdHJhaXRzT2ZGb250OmFd
ICYgTlNJdGFsaWNGb250TWFzaykgIT0gMDsKLSAgICBCT09MIGJJc0l0YWxpYyA9IChbZm0gdHJh
aXRzT2ZGb250OmJdICYgTlNJdGFsaWNGb250TWFzaykgIT0gMDsKLQotICAgIGlmIChbYUZhbWls
eU5hbWUgaXNFcXVhbFRvU3RyaW5nOmJGYW1pbHlOYW1lXSkgewotICAgICAgICBOU1N0cmluZyAq
ZmFtaWx5TmFtZUZvckNTUyA9IGFGYW1pbHlOYW1lOwotCi0gICAgICAgIC8vIFRoZSBmYW1pbHkg
bmFtZSBtYXkgbm90IGJlIHNwZWNpZmljIGVub3VnaCB0byBnZXQgdXMgdGhlIGZvbnQgc3BlY2lm
aWVkLgotICAgICAgICAvLyBJbiBzb21lIGNhc2VzLCB0aGUgb25seSB3YXkgdG8gZ2V0IGV4YWN0
bHkgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdG8gdXNlCi0gICAgICAgIC8vIHRoZSBQb3N0
c2NyaXB0IG5hbWUuCi0gICAgICAgIAotICAgICAgICAvLyBGaW5kIHRoZSBmb250IHRoZSBzYW1l
IHdheSB0aGUgcmVuZGVyaW5nIGNvZGUgd291bGQgbGF0ZXIgaWYgaXQgZW5jb3VudGVyZWQgdGhp
cyBDU1MuCi0gICAgICAgIE5TRm9udFRyYWl0TWFzayB0cmFpdHMgPSBhSXNJdGFsaWMgPyBOU0Zv
bnRJdGFsaWNUcmFpdCA6IDA7Ci0gICAgICAgIE5TRm9udCAqZm91bmRGb250ID0gV2ViQ29yZUZp
bmRGb250KGFGYW1pbHlOYW1lLCB0cmFpdHMsIGFXZWlnaHQsIGFQb2ludFNpemUpOwotCi0gICAg
ICAgIC8vIElmIHdlIGRvbid0IGZpbmQgYSBmb250IHdpdGggdGhlIHNhbWUgUG9zdHNjcmlwdCBu
YW1lLCB0aGVuIHdlJ2xsIGhhdmUgdG8gdXNlIHRoZQotICAgICAgICAvLyBQb3N0c2NyaXB0IG5h
bWUgdG8gbWFrZSB0aGUgQ1NTIHNwZWNpZmljIGVub3VnaC4KLSAgICAgICAgaWYgKCFbW2ZvdW5k
Rm9udCBmb250TmFtZV0gaXNFcXVhbFRvU3RyaW5nOlthIGZvbnROYW1lXV0pCi0gICAgICAgICAg
ICBmYW1pbHlOYW1lRm9yQ1NTID0gW2EgZm9udE5hbWVdOwotCi0gICAgICAgIC8vIEZJWE1FOiBO
ZWVkIG1vcmUgc29waGlzdGljYXRlZCBlc2NhcGluZyBjb2RlIGlmIHdlIHdhbnQgdG8gaGFuZGxl
IGZhbWlseSBuYW1lcwotICAgICAgICAvLyB3aXRoIGNoYXJhY3RlcnMgbGlrZSBzaW5nbGUgcXVv
dGUgb3IgYmFja3NsYXNoIGluIHRoZWlyIG5hbWVzLgotICAgICAgICBbc3R5bGUgc2V0Rm9udEZh
bWlseTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiclQCciLCBmYW1pbHlOYW1lRm9yQ1NT
XV07Ci0gICAgfQotCi0gICAgaW50IHNvYSA9IChpbnQpW29hIHBvaW50U2l6ZV07Ci0gICAgaWYg
KGFQb2ludFNpemUgPT0gYlBvaW50U2l6ZSkKLSAgICAgICAgW3N0eWxlIHNldEZvbnRTaXplOltO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWRweCIsIGFQb2ludFNpemVdXTsKLSAgICBlbHNl
IGlmIChhUG9pbnRTaXplIDwgc29hKQotICAgICAgICBbc3R5bGUgX3NldEZvbnRTaXplRGVsdGE6
QCItMXB4Il07Ci0gICAgZWxzZSBpZiAoYVBvaW50U2l6ZSA+IHNvYSkKLSAgICAgICAgW3N0eWxl
IF9zZXRGb250U2l6ZURlbHRhOkAiMXB4Il07Ci0KLSAgICBpZiAoYVdlaWdodCA9PSBiV2VpZ2h0
KQotICAgICAgICBbc3R5bGUgc2V0Rm9udFdlaWdodDphV2VpZ2h0ID4gTUlOX0JPTERfV0VJR0hU
ID8gQCJib2xkIiA6IEAibm9ybWFsIl07Ci0KLSAgICBpZiAoYUlzSXRhbGljID09IGJJc0l0YWxp
YykKLSAgICAgICAgW3N0eWxlIHNldEZvbnRTdHlsZTphSXNJdGFsaWMgPyBAIml0YWxpYyIgOiAg
QCJub3JtYWwiXTsKLX0KLQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZyb21G
b250TWFuYWdlck9wZXJhdGlvbgotewotICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKnN0eWxl
ID0gW3NlbGYgX2VtcHR5U3R5bGVdOwotCi0gICAgTlNGb250TWFuYWdlciAqZm0gPSBbTlNGb250
TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0KLSAgICBOU0ZvbnQgKm9hID0gW3NlbGYgX29y
aWdpbmFsRm9udEFdOwotICAgIE5TRm9udCAqb2IgPSBbc2VsZiBfb3JpZ2luYWxGb250Ql07ICAg
IAotICAgIFtzZWxmIF9hZGRUb1N0eWxlOnN0eWxlIGZvbnRBOltmbSBjb252ZXJ0Rm9udDpvYV0g
Zm9udEI6W2ZtIGNvbnZlcnRGb250Om9iXV07Ci0KLSAgICByZXR1cm4gc3R5bGU7Ci19Ci0KLS0g
KHZvaWQpY2hhbmdlRm9udDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0g
ICAgW3NlbGYgX2FwcGx5U3R5bGVUb1NlbGVjdGlvbjpbc2VsZiBfc3R5bGVGcm9tRm9udE1hbmFn
ZXJPcGVyYXRpb25dIHdpdGhVbmRvQWN0aW9uOkVkaXRBY3Rpb25TZXRGb250XTsKLX0KLQotLSAo
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqKV9zdHlsZUZvckF0dHJpYnV0ZUNoYW5nZTooaWQpc2Vu
ZGVyCi17Ci0gICAgRE9NQ1NTU3R5bGVEZWNsYXJhdGlvbiAqc3R5bGUgPSBbc2VsZiBfZW1wdHlT
dHlsZV07Ci0KLSAgICBOU1NoYWRvdyAqc2hhZG93ID0gW1tOU1NoYWRvdyBhbGxvY10gaW5pdF07
Ci0gICAgW3NoYWRvdyBzZXRTaGFkb3dPZmZzZXQ6TlNNYWtlU2l6ZSgxLCAxKV07Ci0KLSAgICBO
U0RpY3Rpb25hcnkgKm9hID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRL
ZXlzOgotICAgICAgICBbc2VsZiBfb3JpZ2luYWxGb250QV0sIE5TRm9udEF0dHJpYnV0ZU5hbWUs
Ci0gICAgICAgIG5pbF07Ci0gICAgTlNEaWN0aW9uYXJ5ICpvYiA9IFtOU0RpY3Rpb25hcnkgZGlj
dGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czoKLSAgICAgICAgW05TQ29sb3IgYmxhY2tDb2xvcl0s
IE5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKLSAgICAgICAgW3NlbGYgX29yaWdpbmFs
Rm9udEJdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLAotICAgICAgICBbTlNDb2xvciB3aGl0ZUNvbG9y
XSwgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lLAotICAgICAgICBzaGFkb3csIE5TU2hh
ZG93QXR0cmlidXRlTmFtZSwKLSAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6TlNVbmRl
cmxpbmVTdHlsZVNpbmdsZV0sIE5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZSwKLSAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6MV0sIE5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVO
YW1lLAotICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpOU1VuZGVybGluZVN0eWxlU2lu
Z2xlXSwgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWUsCi0gICAgICAgIG5pbF07Ci0KLSAg
ICBbc2hhZG93IHJlbGVhc2VdOwotCi0jaWYgMAotCi1OU09ibGlxdWVuZXNzQXR0cmlidXRlTmFt
ZSAgICAgICAgLyogZmxvYXQ7IHNrZXcgdG8gYmUgYXBwbGllZCB0byBnbHlwaHMsIGRlZmF1bHQg
MDogbm8gc2tldyAqLwotICAgIC8vIGZvbnQtc3R5bGUsIGJ1dCB0aGF0IGlzIGp1c3QgYW4gb24t
b2ZmIHN3aXRjaAotCi1OU0V4cGFuc2lvbkF0dHJpYnV0ZU5hbWUgICAgICAgICAgLyogZmxvYXQ7
IGxvZyBvZiBleHBhbnNpb24gZmFjdG9yIHRvIGJlIGFwcGxpZWQgdG8gZ2x5cGhzLCBkZWZhdWx0
IDA6IG5vIGV4cGFuc2lvbiAqLwotICAgIC8vIGZvbnQtc3RyZXRjaD8KLQotTlNLZXJuQXR0cmli
dXRlTmFtZSAgICAgICAgICAgICAgIC8qIGZsb2F0LCBhbW91bnQgdG8gbW9kaWZ5IGRlZmF1bHQg
a2VybmluZywgaWYgMCwga2VybmluZyBvZmYgKi8KLSAgICAvLyBsZXR0ZXItc3BhY2luZz8gcHJv
YmFibHkgbm90IGdvb2QgZW5vdWdoCi0KLU5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1lICAg
ICAvKiBOU0NvbG9yLCBkZWZhdWx0IG5pbDogc2FtZSBhcyBmb3JlZ3JvdW5kIGNvbG9yICovCi1O
U1N0cmlrZXRocm91Z2hDb2xvckF0dHJpYnV0ZU5hbWUgLyogTlNDb2xvciwgZGVmYXVsdCBuaWw6
IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAqLwotICAgIC8vIHRleHQtZGVjb3JhdGlvbi1jb2xv
cj8KLQotTlNMaWdhdHVyZUF0dHJpYnV0ZU5hbWUgICAgICAgICAgIC8qIGludCwgZGVmYXVsdCAx
OiBkZWZhdWx0IGxpZ2F0dXJlcywgMDogbm8gbGlnYXR1cmVzLCAyOiBhbGwgbGlnYXR1cmVzICov
Ci1OU0Jhc2VsaW5lT2Zmc2V0QXR0cmlidXRlTmFtZSAgICAgLyogZmxvYXQsIGluIHBvaW50czsg
b2Zmc2V0IGZyb20gYmFzZWxpbmUsIGRlZmF1bHQgMCAqLwotTlNTdHJva2VXaWR0aEF0dHJpYnV0
ZU5hbWUgICAgICAgIC8qIGZsb2F0LCBpbiBwZXJjZW50IG9mIGZvbnQgcG9pbnQgc2l6ZSwgZGVm
YXVsdCAwOiBubyBzdHJva2U7IHBvc2l0aXZlIGZvciBzdHJva2UgYWxvbmUsIG5lZ2F0aXZlIGZv
ciBzdHJva2UgYW5kIGZpbGwgKGEgdHlwaWNhbCB2YWx1ZSBmb3Igb3V0bGluZWQgdGV4dCB3b3Vs
ZCBiZSAzLjApICovCi1OU1N0cm9rZUNvbG9yQXR0cmlidXRlTmFtZSAgICAgICAgLyogTlNDb2xv
ciwgZGVmYXVsdCBuaWw6IHNhbWUgYXMgZm9yZWdyb3VuZCBjb2xvciAqLwotICAgIC8vIG5lZWQg
ZXh0ZW5zaW9ucz8KLQotI2VuZGlmCi0gICAgCi0gICAgTlNEaWN0aW9uYXJ5ICphID0gW3NlbmRl
ciBjb252ZXJ0QXR0cmlidXRlczpvYV07Ci0gICAgTlNEaWN0aW9uYXJ5ICpiID0gW3NlbmRlciBj
b252ZXJ0QXR0cmlidXRlczpvYl07Ci0KLSAgICBOU0NvbG9yICpjYSA9IFthIG9iamVjdEZvcktl
eTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgIE5TQ29sb3IgKmNiID0gW2Ig
b2JqZWN0Rm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgaWYgKGNh
ID09IGNiKSB7Ci0gICAgICAgIFtzdHlsZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W3NlbGYgX2NvbG9y
QXNTdHJpbmc6Y2FdXTsKLSAgICB9Ci0KLSAgICBbc2VsZiBfYWRkVG9TdHlsZTpzdHlsZSBmb250
QTpbYSBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV0gZm9udEI6W2Igb2JqZWN0Rm9y
S2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdXTsKLQotICAgIGNhID0gW2Egb2JqZWN0Rm9yS2V5Ok5T
Rm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgY2IgPSBbYiBvYmplY3RGb3JLZXk6
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoY2EgPT0gY2IpIHsKLSAg
ICAgICAgW3N0eWxlIHNldENvbG9yOltzZWxmIF9jb2xvckFzU3RyaW5nOmNhXV07Ci0gICAgfQot
Ci0gICAgTlNTaGFkb3cgKnNoYSA9IFthIG9iamVjdEZvcktleTpOU1NoYWRvd0F0dHJpYnV0ZU5h
bWVdOwotICAgIGlmIChzaGEpCi0gICAgICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OltzZWxmIF9z
aGFkb3dBc1N0cmluZzpzaGFdXTsKLSAgICBlbHNlIGlmIChbYiBvYmplY3RGb3JLZXk6TlNTaGFk
b3dBdHRyaWJ1dGVOYW1lXSA9PSBuaWwpCi0gICAgICAgIFtzdHlsZSBzZXRUZXh0U2hhZG93OkAi
bm9uZSJdOwotCi0gICAgaW50IHNhID0gW1thIG9iamVjdEZvcktleTpOU1N0cmlrZXRocm91Z2hT
dHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpbnQgc2IgPSBbW2Igb2JqZWN0Rm9y
S2V5Ok5TU3RyaWtldGhyb3VnaFN0eWxlQXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIGlm
IChzYSA9PSBzYikgewotICAgICAgICBpZiAoc2EgPT0gTlNVbmRlcmxpbmVTdHlsZU5vbmUpCi0g
ICAgICAgICAgICBbc3R5bGUgc2V0UHJvcGVydHk6QCIta2h0bWwtdGV4dC1kZWNvcmF0aW9ucy1p
bi1lZmZlY3QiIHZhbHVlOkAibm9uZSIgcHJpb3JpdHk6QCIiXTsgCi0gICAgICAgICAgICAvLyB3
ZSByZWFsbHkgbWVhbiAibm8gbGluZS10aHJvdWdoIiByYXRoZXIgdGhhbiAibm9uZSIKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgW3N0eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVj
b3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAImxpbmUtdGhyb3VnaCIgcHJpb3JpdHk6QCIiXTsK
LSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBtZWFuICJhZGQgbGluZS10aHJvdWdoIiByYXRoZXIg
dGhhbiAibGluZS10aHJvdWdoIgotICAgIH0KLQotICAgIHNhID0gW1thIG9iamVjdEZvcktleTpO
U1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIHNiID0gW1tiIG9iamVj
dEZvcktleTpOU1N1cGVyc2NyaXB0QXR0cmlidXRlTmFtZV0gaW50VmFsdWVdOwotICAgIGlmIChz
YSA9PSBzYikgewotICAgICAgICBpZiAoc2EgPiAwKQotICAgICAgICAgICAgW3N0eWxlIHNldFZl
cnRpY2FsQWxpZ246QCJzdXBlciJdOwotICAgICAgICBlbHNlIGlmIChzYSA8IDApCi0gICAgICAg
ICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAInN1YiJdOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBbc3R5bGUgc2V0VmVydGljYWxBbGlnbjpAImJhc2VsaW5lIl07Ci0gICAgfQotCi0g
ICAgaW50IHVhID0gW1thIG9iamVjdEZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFt
ZV0gaW50VmFsdWVdOwotICAgIGludCB1YiA9IFtbYiBvYmplY3RGb3JLZXk6TlNVbmRlcmxpbmVT
dHlsZUF0dHJpYnV0ZU5hbWVdIGludFZhbHVlXTsKLSAgICBpZiAodWEgPT0gdWIpIHsKLSAgICAg
ICAgaWYgKHVhID09IE5TVW5kZXJsaW5lU3R5bGVOb25lKQotICAgICAgICAgICAgW3N0eWxlIHNl
dFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1ZTpAIm5v
bmUiIHByaW9yaXR5OkAiIl07Ci0gICAgICAgICAgICAvLyB3ZSByZWFsbHkgbWVhbiAibm8gdW5k
ZXJsaW5lIiByYXRoZXIgdGhhbiAibm9uZSIKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgW3N0
eWxlIHNldFByb3BlcnR5OkAiLWtodG1sLXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0IiB2YWx1
ZTpAInVuZGVybGluZSIgcHJpb3JpdHk6QCIiXTsKLSAgICAgICAgICAgIC8vIHdlIHJlYWxseSBt
ZWFuICJhZGQgdW5kZXJsaW5lIiByYXRoZXIgdGhhbiAidW5kZXJsaW5lIgotICAgIH0KLQotICAg
IHJldHVybiBzdHlsZTsKLX0KLQotLSAodm9pZCljaGFuZ2VBdHRyaWJ1dGVzOihpZClzZW5kZXIK
LXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfYXBwbHlTdHlsZVRvU2VsZWN0
aW9uOltzZWxmIF9zdHlsZUZvckF0dHJpYnV0ZUNoYW5nZTpzZW5kZXJdIHdpdGhVbmRvQWN0aW9u
OkVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzXTsKLX0KLQotLSAoRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbiAqKV9zdHlsZUZyb21Db2xvclBhbmVsV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsK
LSAgICBET01DU1NTdHlsZURlY2xhcmF0aW9uICpzdHlsZSA9IFtzZWxmIF9lbXB0eVN0eWxlXTsK
LQotICAgIEFTU0VSVChbc3R5bGUgcmVzcG9uZHNUb1NlbGVjdG9yOnNlbGVjdG9yXSk7Ci0gICAg
W3N0eWxlIHBlcmZvcm1TZWxlY3RvcjpzZWxlY3RvciB3aXRoT2JqZWN0OltzZWxmIF9jb2xvckFz
U3RyaW5nOltbTlNDb2xvclBhbmVsIHNoYXJlZENvbG9yUGFuZWxdIGNvbG9yXV1dOwotICAgIAot
ICAgIHJldHVybiBzdHlsZTsKLX0KLQotLSAoRWRpdEFjdGlvbilfdW5kb0FjdGlvbkZyb21Db2xv
clBhbmVsV2l0aFNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBpZiAoc2VsZWN0b3IgPT0g
QHNlbGVjdG9yKHNldEJhY2tncm91bmRDb2xvcjopKQotICAgICAgICByZXR1cm4gRWRpdEFjdGlv
blNldEJhY2tncm91bmRDb2xvcjsgICAgCi0gICAgcmV0dXJuIEVkaXRBY3Rpb25TZXRDb2xvcjsK
LX0KLQotLSAodm9pZClfY2hhbmdlQ1NTQ29sb3JVc2luZ1NlbGVjdG9yOihTRUwpc2VsZWN0b3Ig
aW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIERPTUNTU1N0eWxlRGVjbGFyYXRpb24g
KnN0eWxlID0gW3NlbGYgX3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3Jd
OwotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbc2VsZiBfd2ViVmlld107Ci0gICAgaWYgKFtbd2Vi
VmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgc2hvdWxkQXBw
bHlTdHlsZTpzdHlsZSB0b0VsZW1lbnRzSW5ET01SYW5nZTpyYW5nZV0pCi0gICAgICAgIGlmIChG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgICAgIGNvcmVG
cmFtZS0+ZWRpdG9yKCktPmFwcGx5U3R5bGUoY29yZShzdHlsZSksIFtzZWxmIF91bmRvQWN0aW9u
RnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6c2VsZWN0b3JdKTsKLX0KLQotLSAodm9pZCljaGFu
Z2VEb2N1bWVudEJhY2tncm91bmRDb2xvcjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9M
T0dVRQotCi0gICAgLy8gTWltaWNraW5nIE5TVGV4dFZpZXcsIHRoaXMgbWV0aG9kIHNldHMgdGhl
IGJhY2tncm91bmQgY29sb3IgZm9yIHRoZQotICAgIC8vIGVudGlyZSBkb2N1bWVudC4gVGhlcmUg
aXMgbm8gTlNUZXh0VmlldyBBUEkgZm9yIHNldHRpbmcgdGhlIGJhY2tncm91bmQKLSAgICAvLyBj
b2xvciBvbiB0aGUgc2VsZWN0ZWQgcmFuZ2Ugb25seS4gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlz
IGN1cnJlbnRseQotICAgIC8vIG5ldmVyIGNhbGxlZCBmcm9tIHRoZSBVSSAoc2VlIGNvbW1lbnQg
aW4gY2hhbmdlQ29sb3I6KS4KLSAgICAvLyBGSVhNRTogdGhpcyBhY3R1YWxseSBoYXMgbm8gZWZm
ZWN0IHdoZW4gY2FsbGVkLCBwcm9iYWJseSBkdWUgdG8gMzY1NDg1MC4gX2RvY3VtZW50UmFuZ2Ug
c2VlbXMKLSAgICAvLyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYmVjYXVzZSBpdCB3b3JrcyBpbiBz
dGFydFNwZWFraW5nOiwgYW5kIEkga25vdyBzZXRCYWNrZ3JvdW5kQ29sb3I6IGRvZXMgdGhlCi0g
ICAgLy8gcmlnaHQgdGhpbmcgYmVjYXVzZSBJIHRlc3RlZCBpdCB3aXRoIFtzZWxmIF9zZWxlY3Rl
ZFJhbmdlXS4KLSAgICAvLyBGSVhNRTogVGhpcyB3b24ndCBhY3R1YWxseSBhcHBseSB0aGUgc3R5
bGUgdG8gdGhlIGVudGlyZSByYW5nZSBoZXJlLCBiZWNhdXNlIGl0IGVuZHMgdXAgY2FsbGluZwot
ICAgIC8vIFtmcmFtZSBfYXBwbHlTdHlsZTpdLCB3aGljaCBvcGVyYXRlcyBvbiB0aGUgY3VycmVu
dCBzZWxlY3Rpb24uIFRvIG1ha2UgdGhpcyB3b3JrIHJpZ2h0LCB3ZSdsbAotICAgIC8vIG5lZWQg
dG8gc2F2ZSBvZmYgdGhlIHNlbGVjdGlvbiwgdGVtcG9yYXJpbHkgc2V0IGl0IHRvIHRoZSBlbnRp
cmUgcmFuZ2UsIG1ha2UgdGhlIGNoYW5nZSwgdGhlbgotICAgIC8vIHJlc3RvcmUgdGhlIG9sZCBz
ZWxlY3Rpb24uCi0gICAgW3NlbGYgX2NoYW5nZUNTU0NvbG9yVXNpbmdTZWxlY3RvcjpAc2VsZWN0
b3Ioc2V0QmFja2dyb3VuZENvbG9yOikgaW5SYW5nZTpbc2VsZiBfZG9jdW1lbnRSYW5nZV1dOwot
fQotCi0tICh2b2lkKWNoYW5nZUNvbG9yOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xP
R1VFCi0KLSAgICAvLyBGSVhNRTogaW4gTlNUZXh0VmlldywgdGhpcyBtZXRob2QgY2FsbHMgY2hh
bmdlRG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3I6IHdoZW4gYQotICAgIC8vIHByaXZhdGUgY2FsbCBo
YXMgZWFybGllciBiZWVuIG1hZGUgYnkgW05TRm9udEZvbnRFZmZlY3RzQm94IGNoYW5nZUNvbG9y
Ol0sIHNlZSAzNjc0NDkzLiAKLSAgICAvLyBBcHBLaXQgd2lsbCBoYXZlIHRvIGJlIHJldmlzZWQg
dG8gYWxsb3cgdGhpcyB0byB3b3JrIHdpdGggYW55dGhpbmcgdGhhdCBpc24ndCBhbiAKLSAgICAv
LyBOU1RleHRWaWV3LiBIb3dldmVyLCB0aGlzIG1pZ2h0IG5vdCBiZSByZXF1aXJlZCBmb3IgVGln
ZXIsIHNpbmNlIHRoZSBiYWNrZ3JvdW5kLWNvbG9yIAotICAgIC8vIGNoYW5naW5nIGJveCBpbiB0
aGUgZm9udCBwYW5lbCBkb2Vzbid0IHdvcmsgaW4gTWFpbCAoMzY3NDQ4MSksIHRob3VnaCBpdCBk
b2VzIGluIFRleHRFZGl0LgotICAgIFtzZWxmIF9hcHBseVN0eWxlVG9TZWxlY3Rpb246W3NlbGYg
X3N0eWxlRnJvbUNvbG9yUGFuZWxXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKHNldENvbG9yOildIAot
ICAgICAgICAgICAgICAgICAgd2l0aFVuZG9BY3Rpb246RWRpdEFjdGlvblNldENvbG9yXTsKLX0K
LQotLSAodm9pZClfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6KFNFTClzZWxlY3Rvcgotewot
ICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJGcmFt
ZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAgIFtzZWxmIHNlbGVjdFdvcmQ6bmlsXTsKLSAg
ICBOU1N0cmluZyAqd29yZCA9IFtbZnJhbWUgX3NlbGVjdGVkU3RyaW5nXSBwZXJmb3JtU2VsZWN0
b3I6c2VsZWN0b3JdOwotICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgbmVlZCBhIGRpZmZlcmVudCBh
Y3Rpb24gY29udGV4dCBvdGhlciB0aGFuICJ0eXBlZCI/Ci0gICAgaWYgKFtzZWxmIF9zaG91bGRS
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6d29yZCBnaXZlbkFjdGlvbjpXZWJWaWV3SW5zZXJ0QWN0
aW9uVHlwZWRdKQotICAgICAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDp3b3Jk
IHNlbGVjdFJlcGxhY2VtZW50Ok5PIHNtYXJ0UmVwbGFjZTpOT107Ci19Ci0KLS0gKHZvaWQpdXBw
ZXJjYXNlV29yZDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgW3Nl
bGYgX2NoYW5nZVdvcmRDYXNlV2l0aFNlbGVjdG9yOkBzZWxlY3Rvcih1cHBlcmNhc2VTdHJpbmcp
XTsKLX0KLQotLSAodm9pZClsb3dlcmNhc2VXb3JkOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5E
X1BST0xPR1VFCi0KLSAgICBbc2VsZiBfY2hhbmdlV29yZENhc2VXaXRoU2VsZWN0b3I6QHNlbGVj
dG9yKGxvd2VyY2FzZVN0cmluZyldOwotfQotCi0tICh2b2lkKWNhcGl0YWxpemVXb3JkOihpZClz
ZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBfY2hhbmdlV29yZENh
c2VXaXRoU2VsZWN0b3I6QHNlbGVjdG9yKGNhcGl0YWxpemVkU3RyaW5nKV07Ci19Ci0KLS0gKHZv
aWQpY29tcGxldGU6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIGlm
ICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFfcHJpdmF0ZS0+
Y29tcENvbnRyb2xsZXIpCi0gICAgICAgIF9wcml2YXRlLT5jb21wQ29udHJvbGxlciA9IFtbV2Vi
VGV4dENvbXBsZXRlQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhIVE1MVmlldzpzZWxmXTsKLSAg
ICBbX3ByaXZhdGUtPmNvbXBDb250cm9sbGVyIGRvQ29tcGxldGlvbl07Ci19Ci0KLS0gKHZvaWQp
Y2hlY2tTcGVsbGluZzooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAg
aWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoKTsKLX0KLQotLSAodm9p
ZClzaG93R3Vlc3NQYW5lbDooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0g
ICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXTsKLSAgICBpZiAoIWNoZWNrZXIpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJObyBOU1Nw
ZWxsQ2hlY2tlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIE5TUGFuZWwg
KnNwZWxsaW5nUGFuZWwgPSBbY2hlY2tlciBzcGVsbGluZ1BhbmVsXTsKLSNpZm5kZWYgQlVJTERJ
TkdfT05fVElHRVIKLSAgICAvLyBQb3N0LVRpZ2VyLCB0aGlzIG1lbnUgaXRlbSBpcyBhIHNob3cv
aGlkZSB0b2dnbGUsIHRvIG1hdGNoIEFwcEtpdC4gTGVhdmUgVGlnZXIgYmVoYXZpb3IgYWxvbmUK
LSAgICAvLyB0byBtYXRjaCByZXN0IG9mIE9TIFguCi0gICAgaWYgKFtzcGVsbGluZ1BhbmVsIGlz
VmlzaWJsZV0pIHsKLSAgICAgICAgW3NwZWxsaW5nUGFuZWwgb3JkZXJPdXQ6c2VuZGVyXTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIGlmIChGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+
YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHRydWUpOwotICAgIFtzcGVsbGluZ1BhbmVsIG9yZGVy
RnJvbnQ6c2VuZGVyXTsKLX0KLQotLSAodm9pZClfY2hhbmdlU3BlbGxpbmdUb1dvcmQ6KE5TU3Ry
aW5nICopbmV3V29yZAotewotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBEb24ndCBjb3JyZWN0IHRvIGVtcHR5IHN0cmluZy4gIChBcHBLaXQgY2hl
Y2tlZCB0aGlzLCB3ZSBtaWdodCBhcyB3ZWxsIHRvby4pCi0gICAgaWYgKCFbTlNTcGVsbENoZWNr
ZXIgc2hhcmVkU3BlbGxDaGVja2VyXSkgewotICAgICAgICBMT0dfRVJST1IoIk5vIE5TU3BlbGxD
aGVja2VyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKFtuZXdXb3Jk
IGlzRXF1YWxUb1N0cmluZzpAIiJdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoW3NlbGYg
X3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDpuZXdXb3JkIGdpdmVuQWN0aW9uOldlYlZp
ZXdJbnNlcnRBY3Rpb25QYXN0ZWRdKQotICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0Om5ld1dvcmQgc2VsZWN0UmVwbGFjZW1lbnQ6WUVTIHNtYXJ0UmVwbGFj
ZTpOT107Ci19Ci0KLS0gKHZvaWQpY2hhbmdlU3BlbGxpbmc6KGlkKXNlbmRlcgotewotICAgIENP
TU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VTcGVsbGluZ1RvV29yZDpbW3NlbmRl
ciBzZWxlY3RlZENlbGxdIHN0cmluZ1ZhbHVlXV07Ci19Ci0KLS0gKHZvaWQpcGVyZm9ybUZpbmRQ
YW5lbEFjdGlvbjooaWQpc2VuZGVyCi17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgLy8g
SW1wbGVtZW50aW5nIHRoaXMgd2lsbCBwcm9iYWJseSByZXF1aXJlIGNvcHlpbmcgYWxsIG9mIE5T
RmluZFBhbmVsLmggYW5kIC5tLgotICAgIC8vIFdlIG5lZWQgKmFsbW9zdCogdGhlIHNhbWUgdGhp
bmcgYXMgQXBwS2l0LCBidXQgbm90IHF1aXRlLgotICAgIExPR19FUlJPUigidW5pbXBsZW1lbnRl
ZCIpOwotfQotCi0tICh2b2lkKXN0YXJ0U3BlYWtpbmc6KGlkKXNlbmRlcgotewotICAgIENPTU1B
TkRfUFJPTE9HVUUKLQotICAgIFdlYkZyYW1lICpmcmFtZSA9IFtzZWxmIF9mcmFtZV07Ci0gICAg
RE9NUmFuZ2UgKnJhbmdlID0gW3NlbGYgX3NlbGVjdGVkUmFuZ2VdOwotICAgIGlmICghcmFuZ2Ug
fHwgW3JhbmdlIGNvbGxhcHNlZF0pCi0gICAgICAgIHJhbmdlID0gW3NlbGYgX2RvY3VtZW50UmFu
Z2VdOwotICAgIFtOU0FwcCBzcGVha1N0cmluZzpbZnJhbWUgX3N0cmluZ0ZvclJhbmdlOnJhbmdl
XV07Ci19Ci0KLS0gKHZvaWQpc3RvcFNwZWFraW5nOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5E
X1BST0xPR1VFCi0KLSAgICBbTlNBcHAgc3RvcFNwZWFraW5nOnNlbmRlcl07Ci19Ci0KLS0gKHZv
aWQpdG9nZ2xlQmFzZVdyaXRpbmdEaXJlY3Rpb246KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRf
UFJPTE9HVUUKLQotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYg
KCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdyaXRpbmdEaXJlY3Rpb24gZGly
ZWN0aW9uID0gUmlnaHRUb0xlZnRXcml0aW5nRGlyZWN0aW9uOwotICAgIHN3aXRjaCAoY29yZUZy
YW1lLT5iYXNlV3JpdGluZ0RpcmVjdGlvbkZvclNlbGVjdGlvblN0YXJ0KCkpIHsKLSAgICAgICAg
Y2FzZSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OgotICAgICAgICAgICAg
ZGlyZWN0aW9uID0gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIC8vIFRoZSB3cml0aW5nRGlyZWN0aW9uRm9yU2VsZWN0aW9uU3RhcnQgbWV0
aG9kIHdpbGwgbmV2ZXIgcmV0dXJuICJuYXR1cmFsIi4gSXQKLSAgICAgICAgLy8gd2lsbCBhbHdh
eXMgcmV0dXJuIGEgY29uY3JldGUgZGlyZWN0aW9uLiBTbywga2VlcCB0aGUgY29tcGlsZXIgaGFw
cHksIGFuZCBhc3NlcnQgbm90IHJlYWNoZWQuCi0gICAgICAgIGNhc2UgTlNXcml0aW5nRGlyZWN0
aW9uTmF0dXJhbDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5zZXRCYXNlV3JpdGluZ0Rp
cmVjdGlvbihkaXJlY3Rpb24pOwotfQotCi0tICh2b2lkKWNoYW5nZUJhc2VXcml0aW5nRGlyZWN0
aW9uOihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBpZiAoIVtzZWxm
IF9jYW5FZGl0XSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIE5TV3JpdGluZ0RpcmVjdGlv
biB3cml0aW5nRGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8TlNXcml0aW5nRGlyZWN0aW9uPihbc2Vu
ZGVyIHRhZ10pOwotICAgIAotICAgIC8vIFdlIGRpc2FibGUgdGhlIG1lbnUgaXRlbSB0aGF0IHBl
cmZvcm1zIHRoaXMgYWN0aW9uIGJlY2F1c2Ugd2UgY2FuJ3QgaW1wbGVtZW50Ci0gICAgLy8gTlNX
cml0aW5nRGlyZWN0aW9uTmF0dXJhbCdzIGJlaGF2aW9yIHVzaW5nIENTUy4KLSAgICBBU1NFUlQo
d3JpdGluZ0RpcmVjdGlvbiAhPSBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsKTsKLQotICAgIGlm
IChGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZy
YW1lLT5lZGl0b3IoKS0+c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb24od3JpdGluZ0RpcmVjdGlvbiA9
PSBOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA/IExlZnRUb1JpZ2h0V3JpdGluZ0RpcmVj
dGlvbiA6IFJpZ2h0VG9MZWZ0V3JpdGluZ0RpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBCT09MIHdy
aXRpbmdEaXJlY3Rpb25LZXlCaW5kaW5nc0VuYWJsZWQoKQotewotI2lmICFkZWZpbmVkKEJVSUxE
SU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIHJldHVy
biBZRVM7Ci0jZWxzZQotICAgIE5TVXNlckRlZmF1bHRzICpkZWZhdWx0cyA9IFtOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c107Ci0gICAgcmV0dXJuIFtkZWZhdWx0cyBib29sRm9y
S2V5OkAiTlNBbGxvd3NCYXNlV3JpdGluZ0RpcmVjdGlvbktleUJpbmRpbmdzIl0gfHwgW2RlZmF1
bHRzIGJvb2xGb3JLZXk6QCJBcHBsZVRleHREaXJlY3Rpb24iXTsKLSNlbmRpZgotfQotCi0tICh2
b2lkKV9jaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvOihOU1dyaXRpbmdEaXJlY3Rpb24pZGly
ZWN0aW9uCi17Ci0gICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN0YXRpYyBCT09MIGJpbmRpbmdzRW5hYmxlZCA9IHdyaXRpbmdEaXJlY3Rpb25LZXlCaW5k
aW5nc0VuYWJsZWQoKTsKLQotICAgIGlmICghYmluZGluZ3NFbmFibGVkKSB7Ci0gICAgICAgIE5T
QmVlcCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICBjb3JlRnJhbWUtPmVkaXRvcigpLT5z
ZXRCYXNlV3JpdGluZ0RpcmVjdGlvbihkaXJlY3Rpb24gPT0gTlNXcml0aW5nRGlyZWN0aW9uTGVm
dFRvUmlnaHQgPyBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24gOiBSaWdodFRvTGVmdFdyaXRp
bmdEaXJlY3Rpb24pOwotfQotCi0tICh2b2lkKW1ha2VCYXNlV3JpdGluZ0RpcmVjdGlvbkxlZnRU
b1JpZ2h0OihpZClzZW5kZXIKLXsKLSAgICBDT01NQU5EX1BST0xPR1VFCi0KLSAgICBbc2VsZiBf
Y2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25UbzpOU1dyaXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdo
dF07Ci19Ci0KLS0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ6KGlk
KXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQotICAgIFtzZWxmIF9jaGFuZ2VCYXNl
V3JpdGluZ0RpcmVjdGlvblRvOk5TV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0XTsKLX0KLQot
I2lmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpIHx8IGRlZmluZWQoQlVJTERJTkdfT05fTEVP
UEFSRCkKLS0gKHZvaWQpY2hhbmdlQmFzZVdyaXRpbmdEaXJlY3Rpb25Ub0xUUjooaWQpc2VuZGVy
Ci17Ci0gICAgW3NlbGYgbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQ6c2VuZGVy
XTsKLX0KLQotLSAodm9pZCljaGFuZ2VCYXNlV3JpdGluZ0RpcmVjdGlvblRvUlRMOihpZClzZW5k
ZXIKLXsKLSAgICBbc2VsZiBtYWtlQmFzZVdyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDpzZW5k
ZXJdOwotfQotI2VuZGlmCi0KLS0gKHZvaWQpbWFrZUJhc2VXcml0aW5nRGlyZWN0aW9uTmF0dXJh
bDooaWQpc2VuZGVyCi17Ci0gICAgTE9HX0VSUk9SKCJTZW50IGZyb20gJUAuIiwgc2VuZGVyKTsK
LX0KLQotI2lmIDAKLQotLy8gQ1NTIGRvZXMgbm90IGhhdmUgYSB3YXkgdG8gc3BlY2lmeSBhbiBv
dXRsaW5lIGZvbnQsIHdoaWNoIG1heSBtYWtlIHRoaXMgZGlmZmljdWx0IHRvIGltcGxlbWVudC4K
LS8vIE1heWJlIGEgc3BlY2lhbCBjYXNlIG9mIHRleHQtc2hhZG93PwotLSAodm9pZClvdXRsaW5l
OihpZClzZW5kZXI7Ci0KLS8vIFRoaXMgaXMgcGFydCBvZiB0YWJsZSBzdXBwb3J0LCB3aGljaCBt
YXkgYmUgaW4gTlNUZXh0VmlldyBmb3IgVGlnZXIuCi0vLyBJdCdzIHByb2JhYmx5IHNpbXBsZSB0
byBkbyB0aGUgZXF1aXZhbGVudCB0aGluZyBmb3IgV2ViS2l0LgotLSAodm9pZClpbnNlcnRUYWJs
ZTooaWQpc2VuZGVyOwotCi0vLyBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC4KLS0gKHZvaWQpdG9n
Z2xlVHJhZGl0aW9uYWxDaGFyYWN0ZXJTaGFwZTooaWQpc2VuZGVyOwotCi0vLyBJJ20gbm90IHN1
cmUgd2hhdCB0aGUgZXF1aXZhbGVudHMgb2YgdGhlc2UgaW4gdGhlIHdlYiB3b3JsZCBhcmUuCi0t
ICh2b2lkKWluc2VydExpbmVTZXBhcmF0b3I6KGlkKXNlbmRlcjsKLS0gKHZvaWQpaW5zZXJ0UGFn
ZUJyZWFrOihpZClzZW5kZXI7Ci0KLS8vIFRoZXNlIG1ldGhvZHMgYXJlIG5vdCBpbXBsZW1lbnRl
ZCBpbiBOU1RleHRWaWV3IHlldCBhdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcuCi0tICh2b2lk
KWNoYW5nZUNhc2VPZkxldHRlcjooaWQpc2VuZGVyOwotLSAodm9pZCl0cmFuc3Bvc2VXb3Jkczoo
aWQpc2VuZGVyOwotCi0jZW5kaWYKLQotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotCi0vLyBP
dmVycmlkZSB0aGlzIHNvIHRoYXQgQXBwS2l0IHdpbGwgc2VuZCB1cyBhcnJvdyBrZXlzIGFzIGtl
eSBkb3duIGV2ZW50cyBzbyB3ZSBjYW4KLS8vIHN1cHBvcnQgdGhlbSB2aWEgdGhlIGtleSBiaW5k
aW5ncyBtZWNoYW5pc20uCi0tIChCT09MKV93YW50c0tleURvd25Gb3JFdmVudDooTlNFdmVudCAq
KWV2ZW50Ci17Ci0gICAgYm9vbCBoYXZlV2ViQ29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBmcmFtZSwgb3VyIGtleURvd24gbWV0aG9kIHdpbGwg
aGFuZGxlIGtleSBiaW5kaW5ncyBhZnRlciBzZW5kaW5nCi0gICAgLy8gdGhlIGV2ZW50IHRocm91
Z2ggdGhlIERPTSwgc28gYXNrIEFwcEtpdCBub3QgdG8gZG8gaXRzIGVhcmx5IHNwZWNpYWwga2V5
IGJpbmRpbmcKLSAgICAvLyBtYXBwaW5nLiBJZiB3ZSBkb24ndCBoYXZlIGEgZnJhbWUsIGp1c3Qg
bGV0IHRoaW5ncyB3b3JrIHRoZSBub3JtYWwgd2F5IHdpdGhvdXQKLSAgICAvLyBhIGtleURvd24u
Ci0gICAgcmV0dXJuIGhhdmVXZWJDb3JlRnJhbWU7Ci19Ci0KLSNlbHNlCi0KLS8vIFN1cGVyLWhh
Y2sgYWxlcnQuCi0vLyBBbGwgdGhpcyBjb2RlIGFjY29tcGxpc2hlcyB0aGUgc2FtZSB0aGluZyBh
cyB0aGUgX3dhbnRzS2V5RG93bkZvckV2ZW50IG1ldGhvZCBhYm92ZS4KLQotLy8gUmV0dXJucyBh
IHNlbGVjdG9yIG9ubHkgaWYgY2FsbGVkIHdoaWxlOgotLy8gICAxKSBmaXJzdCByZXNwb25kZXIg
aXMgc2VsZgotLy8gICAyKSBoYW5kbGluZyBhIGtleSBkb3duIGV2ZW50Ci0vLyAgIDMpIG5vdCB5
ZXQgaW5zaWRlIGtleURvd246IG1ldGhvZAotLy8gICA0KSBrZXkgaXMgYW4gYXJyb3cga2V5Ci0v
LyBUaGUgc2VsZWN0b3IgaXMgdGhlIG9uZSB0aGF0IGdldHMgc2VudCBieSAtW05TV2luZG93IF9w
cm9jZXNzS2V5Ym9hcmRVSUtleV0gZm9yIHRoaXMga2V5LgotLSAoU0VMKV9hcnJvd0tleURvd25F
dmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nCi17Ci0gICAgTlNXaW5kb3cgKncgPSBbc2VsZiB3
aW5kb3ddOwotICAgIGlmIChbdyBmaXJzdFJlc3BvbmRlcl0gIT0gc2VsZikKLSAgICAgICAgcmV0
dXJuIE5VTEw7Ci0gICAgTlNFdmVudCAqZSA9IFt3IGN1cnJlbnRFdmVudF07Ci0gICAgaWYgKFtl
IHR5cGVdICE9IE5TS2V5RG93bikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGUgPT0g
X3ByaXZhdGUtPmtleURvd25FdmVudCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgTlNTdHJp
bmcgKnMgPSBbZSBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdOwotICAgIGlmIChbcyBsZW5n
dGhdID09IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHN3aXRjaCAoW3MgY2hhcmFjdGVy
QXRJbmRleDowXSkgewotICAgICAgICBjYXNlIE5TRG93bkFycm93RnVuY3Rpb25LZXk6Ci0gICAg
ICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVEb3duOik7Ci0gICAgICAgIGNhc2UgTlNMZWZ0
QXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IobW92ZUxlZnQ6
KTsKLSAgICAgICAgY2FzZSBOU1JpZ2h0QXJyb3dGdW5jdGlvbktleToKLSAgICAgICAgICAgIHJl
dHVybiBAc2VsZWN0b3IobW92ZVJpZ2h0Oik7Ci0gICAgICAgIGNhc2UgTlNVcEFycm93RnVuY3Rp
b25LZXk6Ci0gICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKG1vdmVVcDopOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0vLyBSZXR1cm5z
IE5PIGluc3RlYWQgb2YgWUVTIGlmIGNhbGxlZCBvbiB0aGUgc2VsZWN0b3IgdGhhdCB0aGUKLS8v
IF9hcnJvd0tleURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nIG1ldGhvZCByZXR1cm5z
LgotLy8gVGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW5zaWRlIC1bTlNXaW5kb3cgX3Byb2Nlc3NL
ZXlib2FyZFVJS2V5XSwKLS8vIGFuZCB0b2dldGhlciB3aXRoIHRoZSBjaGFuZ2UgYmVsb3cgc2hv
dWxkIGNhdXNlIHRoYXQgbWV0aG9kCi0vLyB0byByZXR1cm4gTk8gcmF0aGVyIHRoYW4gaGFuZGxp
bmcgdGhlIGtleS4KLS8vIEFsc28gc2V0IGEgMS1zaG90IGZsYWcgZm9yIHRoZSBuZXh0UmVzcG9u
ZGVyIGNoZWNrIGJlbG93LgotLSAoQk9PTClyZXNwb25kc1RvU2VsZWN0b3I6KFNFTClzZWxlY3Rv
cgotewotICAgIGlmICghW3N1cGVyIHJlc3BvbmRzVG9TZWxlY3RvcjpzZWxlY3Rvcl0pCi0gICAg
ICAgIHJldHVybiBOTzsKLSAgICBTRUwgYXJyb3dLZXlTZWxlY3RvciA9IFtzZWxmIF9hcnJvd0tl
eURvd25FdmVudFNlbGVjdG9ySWZQcmVwcm9jZXNzaW5nXTsKLSAgICBpZiAoc2VsZWN0b3IgIT0g
YXJyb3dLZXlTZWxlY3RvcikKLSAgICAgICAgcmV0dXJuIFlFUzsKLSAgICBfcHJpdmF0ZS0+bmV4
dFJlc3BvbmRlckRpc2FibGVkT25jZSA9IFlFUzsKLSAgICByZXR1cm4gTk87Ci19Ci0KLS8vIFJl
dHVybnMgbmlsIGluc3RlYWQgb2YgdGhlIG5leHQgcmVzcG9uZGVyIGlmIGNhbGxlZCB3aGVuIHRo
ZQotLy8gb25lLXNob3QgZmxhZyBpcyBzZXQsIGFuZCBfYXJyb3dLZXlEb3duRXZlbnRTZWxlY3Rv
cklmUHJlcHJvY2Vzc2luZwotLy8gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiBOVUxMLiBU
aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpbnNpZGUKLS8vIC1bTlNXaW5kb3cgX3Byb2Nlc3NLZXli
b2FyZFVJS2V5XSBhbmQgdG9nZXRoZXIgd2l0aCB0aGUgY2hhbmdlIGFib3ZlCi0vLyBzaG91bGQg
Y2F1c2UgdGhhdCBtZXRob2QgdG8gcmV0dXJuIE5PIHJhdGhlciB0aGFuIGhhbmRsaW5nIHRoZSBr
ZXkuCi0tIChOU1Jlc3BvbmRlciAqKW5leHRSZXNwb25kZXIKLXsKLSAgICBCT09MIGRpc2FibGVk
ID0gX3ByaXZhdGUtPm5leHRSZXNwb25kZXJEaXNhYmxlZE9uY2U7Ci0gICAgX3ByaXZhdGUtPm5l
eHRSZXNwb25kZXJEaXNhYmxlZE9uY2UgPSBOTzsKLSAgICBpZiAoZGlzYWJsZWQgJiYgW3NlbGYg
X2Fycm93S2V5RG93bkV2ZW50U2VsZWN0b3JJZlByZXByb2Nlc3NpbmddICE9IE5VTEwpCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtzdXBlciBuZXh0UmVzcG9uZGVyXTsKLX0KLQot
I2VuZGlmCi0KLS0gKHZvaWQpX3VwZGF0ZUNvbnRyb2xUaW50cwotewotICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQot
ICAgICAgICByZXR1cm47Ci0gICAgdmlldy0+dXBkYXRlQ29udHJvbFRpbnRzKCk7Ci19Ci0KLS8v
IERlc3BpdGUgaXRzIG5hbWUsIHRoaXMgaXMgY2FsbGVkIGF0IGRpZmZlcmVudCB0aW1lcyB0aGFu
IHdpbmRvd0RpZEJlY29tZUtleSBpcy4KLS8vIEl0IHRha2VzIGludG8gYWNjb3VudCBhbGwgdGhl
IG90aGVyIGZhY3RvcnMgdGhhdCBkZXRlcm1pbmUgd2hlbiBOU0NlbGwgZHJhd3MKLS8vIHdpdGgg
ZGlmZmVyZW50IHRpbnRzLCBzbyBpdCdzIHRoZSByaWdodCBjYWxsIHRvIHVzZSBmb3IgY29udHJv
bCB0aW50cy4gV2UnZCBwcmVmZXIKLS8vIHRvIGRvIHRoaXMgd2l0aCBBUEkuIDxyZGFyOi8vcHJv
YmxlbS81MTM2NzYwPgotLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlCi17Ci0gICAgaWYg
KHB0aHJlYWRfbWFpbl9ucCgpKQotICAgICAgICBbc2VsZiBfdXBkYXRlQ29udHJvbFRpbnRzXTsK
LSAgICBlbHNlCi0gICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2Vs
ZWN0b3IoX3VwZGF0ZUNvbnRyb2xUaW50cykgd2l0aE9iamVjdDpuaWwgd2FpdFVudGlsRG9uZTpO
T107Ci0KLSAgICBbc3VwZXIgX3dpbmRvd0NoYW5nZWRLZXlTdGF0ZV07Ci19Ci0KLS0gKHZvaWQp
b3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAotewotICAgIGlmIChbZXZlbnQgYnV0dG9u
TnVtYmVyXSA9PSAyKQotICAgICAgICBbc2VsZiBtb3VzZURvd246ZXZlbnRdOwotICAgIGVsc2UK
LSAgICAgICAgW3N1cGVyIG90aGVyTW91c2VEb3duOmV2ZW50XTsKLX0KLQotLSAodm9pZClvdGhl
ck1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKFtldmVudCBidXR0b25O
dW1iZXJdID09IDIpCi0gICAgICAgIFtzZWxmIG1vdXNlRHJhZ2dlZDpldmVudF07Ci0gICAgZWxz
ZQotICAgICAgICBbc3VwZXIgb3RoZXJNb3VzZURyYWdnZWQ6ZXZlbnRdOwotfQotCi0tICh2b2lk
KW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50Ci17Ci0gICAgaWYgKFtldmVudCBidXR0b25O
dW1iZXJdID09IDIpCi0gICAgICAgIFtzZWxmIG1vdXNlVXA6ZXZlbnRdOwotICAgIGVsc2UKLSAg
ICAgICAgW3N1cGVyIG90aGVyTW91c2VVcDpldmVudF07Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIE5TQXJyYXkgKFdlYkhUTUxWaWV3KQotCi0tICh2b2lkKV93ZWJfbWFrZVBsdWdpblZp
ZXdzUGVyZm9ybVNlbGVjdG9yOihTRUwpc2VsZWN0b3Igd2l0aE9iamVjdDooaWQpb2JqZWN0Ci17
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgTlNFbnVtZXJhdG9yICplbnVt
ZXJhdG9yID0gW3NlbGYgb2JqZWN0RW51bWVyYXRvcl07Ci0gICAgV2ViTmV0c2NhcGVQbHVnaW5W
aWV3ICp2aWV3OwotICAgIHdoaWxlICgodmlldyA9IFtlbnVtZXJhdG9yIG5leHRPYmplY3RdKSAh
PSBuaWwpCi0gICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNzOltXZWJCYXNlTmV0c2NhcGVQ
bHVnaW5WaWV3IGNsYXNzXV0pCi0gICAgICAgICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6c2Vs
ZWN0b3Igd2l0aE9iamVjdDpvYmplY3RdOwotI2VuZGlmCi19Ci0KLUBlbmQKLQotQGltcGxlbWVu
dGF0aW9uIFdlYkhUTUxWaWV3IChXZWJJbnRlcm5hbCkKLQotLSAodm9pZClfc2VsZWN0aW9uQ2hh
bmdlZAotewotICAgIFtzZWxmIF91cGRhdGVTZWxlY3Rpb25Gb3JJbnB1dE1hbmFnZXJdOwotICAg
IFtzZWxmIF91cGRhdGVGb250UGFuZWxdOwotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29y
ZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0U3RhcnRO
ZXdLaWxsUmluZ1NlcXVlbmNlKHRydWUpOwotfQotCi0tICh2b2lkKV91cGRhdGVGb250UGFuZWwK
LXsKLSAgICAvLyBGSVhNRTogTlNUZXh0VmlldyBiYWlscyBvdXQgaWYgYmVjb21pbmcgb3IgcmVz
aWduaW5nIGZpcnN0IHJlc3BvbmRlciwgZm9yIHdoaWNoIGl0IGhhcyBpdmFyIGZsYWdzLiBOb3QK
LSAgICAvLyBzdXJlIGlmIHdlIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIuCi0gICAgCi0g
ICAgaWYgKCFbc2VsZiBfY2FuRWRpdF0pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBOU1dp
bmRvdyAqd2luZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICAvLyBGSVhNRTogaXMgdGhpcyBmaXJz
dC1yZXNwb25kZXIgY2hlY2sgY29ycmVjdD8gV2hhdCBoYXBwZW5zIGlmIGEgc3ViZnJhbWUgaXMg
ZWRpdGFibGUgYW5kIGlzIGZpcnN0IHJlc3BvbmRlcj8KLSAgICBpZiAoW05TQXBwIGtleVdpbmRv
d10gIT0gd2luZG93IHx8IFt3aW5kb3cgZmlyc3RSZXNwb25kZXJdICE9IHNlbGYpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBib29sIG11bHRpcGxlRm9udHMgPSBmYWxzZTsKLSAgICBOU0Zv
bnQgKmZvbnQgPSBuaWw7Ci0gICAgaWYgKEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9m
cmFtZV0pKSB7Ci0gICAgICAgIGlmIChjb25zdCBTaW1wbGVGb250RGF0YSogZmQgPSBjb3JlRnJh
bWUtPmVkaXRvcigpLT5mb250Rm9yU2VsZWN0aW9uKG11bHRpcGxlRm9udHMpKQotICAgICAgICAg
ICAgZm9udCA9IGZkLT5nZXROU0ZvbnQoKTsKLSAgICB9Ci0gICAgCi0KLSAgICAvLyBGSVhNRTog
Zm9yIG5vdywgcmV0dXJuIGEgYm9ndXMgZm9udCB0aGF0IGRpc3Rpbmd1aXNoZXMgdGhlIGVtcHR5
IHNlbGVjdGlvbiBmcm9tIHRoZSBub24tZW1wdHkKLSAgICAvLyBzZWxlY3Rpb24uIFdlIHNob3Vs
ZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzIG9uY2UgdGhlIHJlc3Qgb2YgdGhpcyBjb2RlIHdvcmtz
IHByb3Blcmx5LgotICAgIGlmIChmb250ID09IG5pbCkKLSAgICAgICAgZm9udCA9IFtzZWxmIF9o
YXNTZWxlY3Rpb25dID8gW05TRm9udCBtZW51Rm9udE9mU2l6ZToyM10gOiBbTlNGb250IHRvb2xU
aXBzRm9udE9mU2l6ZToxN107Ci0gICAgQVNTRVJUKGZvbnQgIT0gbmlsKTsKLQotICAgIFtbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl0gc2V0U2VsZWN0ZWRGb250OmZvbnQgaXNNdWx0
aXBsZTptdWx0aXBsZUZvbnRzXTsKLQotICAgIC8vIEZJWE1FOiB3ZSBkb24ndCBrZWVwIHRyYWNr
IG9mIHNlbGVjdGVkIGF0dHJpYnV0ZXMsIG9yIHNldCB0aGVtIG9uIHRoZSBmb250IHBhbmVsLiBU
aGlzCi0gICAgLy8gYXBwZWFycyB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgVUkuIEUuZy4sIHVu
ZGVybGluZWQgdGV4dCBpbiBNYWlsIG9yIFRleHRFZGl0IGlzCi0gICAgLy8gbm90IHJlZmxlY3Rl
ZCBpbiB0aGUgZm9udCBwYW5lbC4gTWF5YmUgc29tZWRheSB0aGlzIHdpbGwgY2hhbmdlLgotfQot
Ci0tIChCT09MKV9jYW5TbWFydENvcHlPckRlbGV0ZQotewotICAgIGlmICghW1tzZWxmIF93ZWJW
aWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdKQotICAgICAgICByZXR1cm4gTk87Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbkdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFy
aXR5OwotfQotCi0tIChOU0V2ZW50ICopX21vdXNlRG93bkV2ZW50Ci17Ci0gICAgcmV0dXJuIF9w
cml2YXRlLT5tb3VzZURvd25FdmVudDsKLX0KLQotLSAoaWQ8V2ViSFRNTEhpZ2hsaWdodGVyPilf
aGlnaGxpZ2h0ZXJGb3JUeXBlOihOU1N0cmluZyopdHlwZQotewotICAgIHJldHVybiBbX3ByaXZh
dGUtPmhpZ2hsaWdodGVycyBvYmplY3RGb3JLZXk6dHlwZV07Ci19Ci0KLS0gKFdlYkZyYW1lICop
X2ZyYW1lCi17Ci0gICAgcmV0dXJuIFtfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV07Ci19
Ci0KLS0gKHZvaWQpcGFzdGU6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9HVUUKLQot
ICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7Ci0gICAgUmVm
UHRyPEZyYW1lPiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29y
ZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvcmVGcmFtZS0+ZWRpdG9yKCktPnRy
eURIVE1MUGFzdGUoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBESFRNTCBkaWQgdGhlIHdob2xlIG9w
ZXJhdGlvbgotICAgIGlmICghY29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuUGFzdGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLT5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKQotICAgICAgICBbc2VsZiBfcGFzdGVXaXRoUGFzdGVib2FyZDpbTlNQYXN0
ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXSBhbGxvd1BsYWluVGV4dDpZRVNdOwotICAgIGVsc2UK
LSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+cGFzdGVBc1BsYWluVGV4dCgpOwotfQotCi0t
ICh2b2lkKXBhc3RlQXNQbGFpblRleHQ6KGlkKXNlbmRlcgotewotICAgIENPTU1BTkRfUFJPTE9H
VUUKLQotICAgIGlmICghW3NlbGYgX2NhbkVkaXRdKQotICAgICAgICByZXR1cm47Ci0gICAgW3Nl
bGYgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQ
YXN0ZWJvYXJkXV07Ci19Ci0KLS0gKHZvaWQpY2xvc2VJZk5vdEN1cnJlbnRWaWV3Ci17Ci0gICAg
aWYgKFtbW3NlbGYgX2ZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld10gIT0gc2VsZikKLSAg
ICAgICAgW3NlbGYgY2xvc2VdOwotfQotCi0tIChET01Eb2N1bWVudEZyYWdtZW50KilfZG9jdW1l
bnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkCi17Ci0g
ICAgcmV0dXJuIFtzZWxmIF9kb2N1bWVudEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6cGFzdGVib2Fy
ZCBpbkNvbnRleHQ6bmlsIGFsbG93UGxhaW5UZXh0Ok5PXTsKLX0KLQotI2lmbmRlZiBCVUlMRElO
R19PTl9USUdFUgotCi0tIChCT09MKWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZAotewotICAgIC8v
IEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRsZW5lY2sgZm9yIHRoaXMgZ3JhbW1h
ci1jaGVja2luZyBsb2dpYywgYnV0IHdlIG11c3QgaW1wbGVtZW50IHRoZSBtZXRob2QgaGVyZSBi
ZWNhdXNlCi0gICAgLy8gdGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9uZGVy
LgotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZF07
Ci19Ci0KLS0gKHZvaWQpc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZDooQk9PTClmbGFnCi17Ci0g
ICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBn
cmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBo
ZXJlIGJlY2F1c2UKLSAgICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNw
b25kZXIuCi0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOmZs
YWddOwotfQotCi0tICh2b2lkKXRvZ2dsZUdyYW1tYXJDaGVja2luZzooaWQpc2VuZGVyCi17Ci0g
ICAgLy8gRklYTUUgNDc5OTEzNDogV2ViVmlldyBpcyB0aGUgYm90dGxlbmVjayBmb3IgdGhpcyBn
cmFtbWFyLWNoZWNraW5nIGxvZ2ljLCBidXQgd2UgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBo
ZXJlIGJlY2F1c2UKLSAgICAvLyB0aGUgQXBwS2l0IGNvZGUgY2hlY2tzIHRoZSBmaXJzdCByZXNw
b25kZXIuCi0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVHcmFtbWFyQ2hlY2tpbmc6c2VuZGVy
XTsKLX0KLQotCi1zdGF0aWMgQ0dQb2ludCBjb3JlR3JhcGhpY3NTY3JlZW5Qb2ludEZvckFwcEtp
dFNjcmVlblBvaW50KE5TUG9pbnQgcG9pbnQpCi17Ci0gICAgTlNBcnJheSAqc2NyZWVucyA9IFtO
U1NjcmVlbiBzY3JlZW5zXTsKLSAgICAKLSAgICBpZiAoW3NjcmVlbnMgY291bnRdID09IDApIHsK
LSAgICAgICAgLy8gWW91IGNvdWxkIHRoZW9yZXRpY2FsbHkgZ2V0IGhlcmUgaWYgcnVubmluZyB3
aXRoIG5vIG1vbml0b3IsIGluIHdoaWNoIGNhc2UgaXQgZG9lc24ndCBtYXR0ZXIKLSAgICAgICAg
Ly8gbXVjaCB3aGVyZSB0aGUgIm9uLXNjcmVlbiIgcG9pbnQgaXMuCi0gICAgICAgIHJldHVybiBD
R1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gRmxpcCB0
aGUgeSBjb29yZGluYXRlIGZyb20gdGhlIHRvcCBvZiB0aGUgbWVudSBiYXIgc2NyZWVuIC0tIHNl
ZSA0NjM2MzkwCi0gICAgcmV0dXJuIENHUG9pbnRNYWtlKHBvaW50LngsIE5TTWF4WShbW3NjcmVl
bnMgb2JqZWN0QXRJbmRleDowXSBmcmFtZV0pIC0gcG9pbnQueSk7Ci19Ci0KLSNlbmRpZgotCi0j
aWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCi0KLS0gKHZvaWQpb3JkZXJGcm9udFN1YnN0aXR1dGlvbnNQYW5lbDooaWQpc2VuZGVy
Ci17Ci0gICAgQ09NTUFORF9QUk9MT0dVRQotCi0gICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIg
PSBbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXTsKLSAgICBpZiAoIWNoZWNrZXIp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJObyBOU1NwZWxsQ2hlY2tlciIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIE5TUGFuZWwgKnN1YnN0aXR1dGlvbnNQYW5lbCA9IFtjaGVj
a2VyIHN1YnN0aXR1dGlvbnNQYW5lbF07Ci0gICAgaWYgKFtzdWJzdGl0dXRpb25zUGFuZWwgaXNW
aXNpYmxlXSkgewotICAgICAgICBbc3Vic3RpdHV0aW9uc1BhbmVsIG9yZGVyT3V0OnNlbmRlcl07
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgW3N1YnN0aXR1dGlvbnNQYW5lbCBvcmRlckZy
b250OnNlbmRlcl07Ci19Ci0KLS8vIEZJWE1FIDQ3OTkxMzQ6IFdlYlZpZXcgaXMgdGhlIGJvdHRs
ZW5lY2sgZm9yIHRoaXMgbG9naWMsIGJ1dCB3ZSBtdXN0IGltcGxlbWVudCB0aGVzZSBtZXRob2Rz
IGhlcmUgYmVjYXVzZQotLy8gdGhlIEFwcEtpdCBjb2RlIGNoZWNrcyB0aGUgZmlyc3QgcmVzcG9u
ZGVyLgotCi0tIChCT09MKXNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZAotewotICAgIHJldHVybiBb
W3NlbGYgX3dlYlZpZXddIHNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZF07Ci19Ci0KLS0gKHZvaWQp
c2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYgX3dl
YlZpZXddIHNldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0
b2dnbGVTbWFydEluc2VydERlbGV0ZTooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3
XSB0b2dnbGVTbWFydEluc2VydERlbGV0ZTpzZW5kZXJdOwotfQotCi0tIChCT09MKWlzQXV0b21h
dGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmll
d10gaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNl
dEF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW1tz
ZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ6ZmxhZ107
Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb246KGlkKXNlbmRl
cgotewotICAgIFtbc2VsZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRp
b246c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVk
Ci17Ci0gICAgcmV0dXJuIFtbc2VsZiBfd2ViVmlld10gaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9u
RW5hYmxlZF07Ci19Ci0KLS0gKHZvaWQpc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ6
KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0QXV0b21hdGljTGlua0RldGVj
dGlvbkVuYWJsZWQ6ZmxhZ107Ci19Ci0KLS0gKHZvaWQpdG9nZ2xlQXV0b21hdGljTGlua0RldGVj
dGlvbjooaWQpc2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uOnNlbmRlcl07Ci19Ci0KLS0gKEJPT0wpaXNBdXRvbWF0aWNEYXNoU3Vic3Rp
dHV0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbW3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGlj
RGFzaFN1YnN0aXR1dGlvbkVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldEF1dG9tYXRpY0Rhc2hT
dWJzdGl0dXRpb25FbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbW3NlbGYgX3dlYlZpZXddIHNl
dEF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOmZsYWddOwotfQotCi0tICh2b2lkKXRv
Z2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb246KGlkKXNlbmRlcgotewotICAgIFtbc2VsZiBf
d2ViVmlld10gdG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbjpzZW5kZXJdOwotfQotCi0t
IChCT09MKWlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZAotewotICAgIHJldHVybiBb
W3NlbGYgX3dlYlZpZXddIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZF07Ci19Ci0K
LS0gKHZvaWQpc2V0QXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDooQk9PTClmbGFnCi17
Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSBzZXRBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVk
OmZsYWddOwotfQotCi0tICh2b2lkKXRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudDooaWQp
c2VuZGVyCi17Ci0gICAgW1tzZWxmIF93ZWJWaWV3XSB0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFj
ZW1lbnQ6c2VuZGVyXTsKLX0KLQotLSAoQk9PTClpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQKLXsKLSAgICByZXR1cm4gW1tzZWxmIF93ZWJWaWV3XSBpc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWRdOwotfQotCi0tICh2b2lkKXNldEF1dG9tYXRpY1NwZWxsaW5n
Q29ycmVjdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtbc2VsZiBfd2ViVmlld10gc2V0
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDpmbGFnXTsKLX0KLQotLSAodm9pZCl0
b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb246KGlkKXNlbmRlcgotewotICAgIFtbc2Vs
ZiBfd2ViVmlld10gdG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uOnNlbmRlcl07Ci19
Ci0KLSNlbmRpZgotCi0tICh2b2lkKV9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTooaWQpc2Vu
ZGVyCi17Ci0gICAgLy8gRGljdGlvbmFyeSBBUEkgd2lsbCBhY2NlcHQgYSB3aGl0ZXNwYWNlLW9u
bHkgc3RyaW5nIGFuZCBkaXNwbGF5IFVJIGFzIGlmIGl0IHdlcmUgcmVhbCB0ZXh0LAotICAgIC8v
IHNvIGJhaWwgb3V0IGVhcmx5IHRvIGF2b2lkIHRoYXQuCi0gICAgaWYgKFtbW3NlbGYgc2VsZWN0
ZWRTdHJpbmddIF93ZWJraXRfc3RyaW5nQnlUcmltbWluZ1doaXRlc3BhY2VdIGxlbmd0aF0gPT0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyU3RyaW5n
ID0gW3NlbGYgc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nXTsKLQotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBOU1JlY3QgcmVjdCA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uQm91bmRzKCk7
Ci0KLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLSAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0
ZXMgPSBbYXR0clN0cmluZyBmb250QXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwxKV07
Ci0gICAgTlNGb250ICpmb250ID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOwotICAgIGlmIChmb250KQotICAgICAgICByZWN0Lm9yaWdpbi55ICs9IFtmb250
IGFzY2VuZGVyXTsKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0gICAgW3NlbGYgc2hvd0RlZmluaXRpb25G
b3JBdHRyaWJ1dGVkU3RyaW5nOmF0dHJTdHJpbmcgYXRQb2ludDpyZWN0Lm9yaWdpbl07Ci0gICAg
cmV0dXJuOwotI2VuZGlmCi0KLSAgICAvLyBXZSBzb2Z0IGxpbmsgdG8gZ2V0IHRoZSBmdW5jdGlv
biB0aGF0IGRpc3BsYXlzIHRoZSBkaWN0aW9uYXJ5IChlaXRoZXIgcG9wLXVwIHdpbmRvdyBvciBh
cHApIHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZQotICAgIC8vIHBlbmFsdHkgb2YgbGlua2luZyB0
byBhbm90aGVyIGZyYW1ld29yay4gVGhpcyBmdW5jdGlvbiBjaGFuZ2VkIHNpZ25hdHVyZSBhcyB3
ZWxsIGFzIGZyYW1ld29yayBiZXR3ZWVuIFRpZ2VyIGFuZCBMZW9wYXJkLAotICAgIC8vIHNvIHRo
ZSB0d28gY2FzZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4KLQotI2lmZGVmIEJVSUxESU5HX09O
X1RJR0VSCi0gICAgdHlwZWRlZiBPU1N0YXR1cyAoKlNlcnZpY2VXaW5kb3dTaG93RnVuY3Rpb24p
KGlkIGluV29yZFN0cmluZywgTlNSZWN0IGluV29yZEJvdW5kYXJ5LCBVSW50MTYgaW5MaW5lRGly
ZWN0aW9uKTsKLSAgICBjb25zdCBjaGFyICpmcmFtZXdvcmtQYXRoID0gIi9TeXN0ZW0vTGlicmFy
eS9GcmFtZXdvcmtzL0FwcGxpY2F0aW9uU2VydmljZXMuZnJhbWV3b3JrL0ZyYW1ld29ya3MvTGFu
Z0FuYWx5c2lzLmZyYW1ld29yay9MYW5nQW5hbHlzaXMiOwotICAgIGNvbnN0IGNoYXIgKmZ1bmN0
aW9uTmFtZSA9ICJEQ01EaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3ciOwotI2Vsc2UKLSAgICB0
eXBlZGVmIHZvaWQgKCpTZXJ2aWNlV2luZG93U2hvd0Z1bmN0aW9uKShpZCB1bnVzZWREaWN0aW9u
YXJ5UmVmLCBpZCBpbldvcmRTdHJpbmcsIENGUmFuZ2Ugc2VsZWN0aW9uUmFuZ2UsIGlkIHVudXNl
ZEZvbnQsIENHUG9pbnQgdGV4dE9yaWdpbiwgQm9vbGVhbiB2ZXJ0aWNhbFRleHQsIGlkIHVudXNl
ZFRyYW5zZm9ybSk7Ci0gICAgY29uc3QgY2hhciAqZnJhbWV3b3JrUGF0aCA9ICIvU3lzdGVtL0xp
YnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrL0ZyYW1ld29ya3MvSElUb29sYm94LmZy
YW1ld29yay9ISVRvb2xib3giOwotICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uTmFtZSA9ICJISURp
Y3Rpb25hcnlXaW5kb3dTaG93IjsKLSNlbmRpZgotCi0gICAgc3RhdGljIGJvb2wgbG9va2VkRm9y
RnVuY3Rpb24gPSBmYWxzZTsKLSAgICBzdGF0aWMgU2VydmljZVdpbmRvd1Nob3dGdW5jdGlvbiBk
aWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cgPSBOVUxMOwotCi0gICAgaWYgKCFsb29rZWRGb3JG
dW5jdGlvbikgewotICAgICAgICB2b2lkKiBsYW5nQW5hbHlzaXNGcmFtZXdvcmsgPSBkbG9wZW4o
ZnJhbWV3b3JrUGF0aCwgUlRMRF9MQVpZKTsKLSAgICAgICAgQVNTRVJUKGxhbmdBbmFseXNpc0Zy
YW1ld29yayk7Ci0gICAgICAgIGlmIChsYW5nQW5hbHlzaXNGcmFtZXdvcmspCi0gICAgICAgICAg
ICBkaWN0aW9uYXJ5U2VydmljZVdpbmRvd1Nob3cgPSAoU2VydmljZVdpbmRvd1Nob3dGdW5jdGlv
bilkbHN5bShsYW5nQW5hbHlzaXNGcmFtZXdvcmssIGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgIGxv
b2tlZEZvckZ1bmN0aW9uID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZGljdGlvbmFyeVNl
cnZpY2VXaW5kb3dTaG93KTsKLSAgICBpZiAoIWRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdykg
ewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0IGZpbmQgdGhlICVzIGZ1bmN0aW9uIGluICVzIiwg
ZnVuY3Rpb25OYW1lLCBmcmFtZXdvcmtQYXRoKTsgCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSNpZmRlZiBCVUlMRElOR19PTl9USUdFUgotICAgIC8vIEZJWE1FOiBtdXN0IGNoZWNrIGZvciBy
aWdodC10by1sZWZ0IGhlcmUKLSAgICBOU1dyaXRpbmdEaXJlY3Rpb24gd3JpdGluZ0RpcmVjdGlv
biA9IE5TV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0OwotCi0gICAgLy8gRklYTUU6IHRoZSBk
aWN0aW9uYXJ5IEFQSSBleHBlY3RzIHRoZSByZWN0IGZvciB0aGUgZmlyc3QgbGluZSBvZiBzZWxl
Y3Rpb24uIFBhc3NpbmcKLSAgICAvLyB0aGUgcmVjdCBmb3IgdGhlIGVudGlyZSBzZWxlY3Rpb24s
IGFzIHdlIGRvIGhlcmUsIHBvc2l0aW9ucyB0aGUgcG9wLXVwIHdpbmRvdyBuZWFyCi0gICAgLy8g
dGhlIGJvdHRvbSBvZiB0aGUgc2VsZWN0aW9uIHJhdGhlciB0aGFuIGF0IHRoZSBzZWxlY3RlZCB3
b3JkLgotICAgIHJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpuaWxdOwotICAg
IHJlY3Qub3JpZ2luID0gW1tzZWxmIHdpbmRvd10gY29udmVydEJhc2VUb1NjcmVlbjpyZWN0Lm9y
aWdpbl07Ci0gICAgTlNEYXRhICpkYXRhID0gW2F0dHJTdHJpbmcgUlRGRnJvbVJhbmdlOk5TTWFr
ZVJhbmdlKDAsIFthdHRyU3RyaW5nIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpuaWxdOwot
ICAgIGRpY3Rpb25hcnlTZXJ2aWNlV2luZG93U2hvdyhkYXRhLCByZWN0LCAod3JpdGluZ0RpcmVj
dGlvbiA9PSBOU1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdCkgPyAxIDogMCk7Ci0jZWxzZQot
ICAgIC8vIFRoZSBISURpY3Rpb25hcnlXaW5kb3dTaG93IGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBv
cmlnaW4sIGluIENHIHNjcmVlbiBjb29yZGluYXRlcywgb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBv
ZiB0ZXh0IGluIHRoZSBzZWxlY3Rpb24uCi0gICAgLy8gRklYTUUgNDk0NTgwODogV2UgYXBwcm94
aW1hdGUgdGhpcyBpbiBhIHdheSB0aGF0IHdvcmtzIHdlbGwgd2hlbiBhIHNpbmdsZSB3b3JkIGlz
IHNlbGVjdGVkLCBhbmQgbGVzcyB3ZWxsIGluIHNvbWUgb3RoZXIgY2FzZXMKLSAgICAvLyAoYnV0
IG5vIHdvcnNlIHRoYW4gd2UgZGlkIGluIFRpZ2VyKQotICAgIE5TUG9pbnQgd2luZG93UG9pbnQg
PSBbc2VsZiBjb252ZXJ0UG9pbnQ6cmVjdC5vcmlnaW4gdG9WaWV3Om5pbF07Ci0gICAgTlNQb2lu
dCBzY3JlZW5Qb2ludCA9IFtbc2VsZiB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46d2luZG93
UG9pbnRdOwotCi0gICAgZGljdGlvbmFyeVNlcnZpY2VXaW5kb3dTaG93KG5pbCwgYXR0clN0cmlu
ZywgQ0ZSYW5nZU1ha2UoMCwgW2F0dHJTdHJpbmcgbGVuZ3RoXSksIG5pbCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcmVHcmFwaGljc1NjcmVlblBvaW50Rm9yQXBwS2l0U2Ny
ZWVuUG9pbnQoc2NyZWVuUG9pbnQpLCBmYWxzZSwgbmlsKTsKLSNlbmRpZgotfQotCi0tICh2b2lk
KV9ob3ZlckZlZWRiYWNrU3VzcGVuZGVkQ2hhbmdlZAotewotICAgIFtzZWxmIF91cGRhdGVNb3Vz
ZW92ZXJXaXRoRmFrZUV2ZW50XTsKLX0KLQotLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2
ZW50OihLZXlib2FyZEV2ZW50KilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91bGRT
YXZlCi17Ci0gICAgLy8gQXNrIEFwcEtpdCB0byBwcm9jZXNzIHRoZSBrZXkgZXZlbnQgLS0gaXQg
d2lsbCBjYWxsIGJhY2sgd2l0aCBlaXRoZXIgaW5zZXJ0VGV4dCBvciBkb0NvbW1hbmRCeVNlbGVj
dG9yLgotICAgIFdlYkhUTUxWaWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyBwYXJhbWV0
ZXJzOwotICAgIHBhcmFtZXRlcnMuZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7Ci0gICAgcGFyYW1l
dGVycy5zaG91bGRTYXZlQ29tbWFuZCA9IHNob3VsZFNhdmU7Ci0gICAgLy8gSWYgd2UncmUgaW50
ZXJjZXB0aW5nIHRoZSBpbml0aWFsIElNIGNhbGwgd2UgYXNzdW1lIHRoYXQgdGhlIElNIGhhcyBj
b25zdW1lZCB0aGUgZXZlbnQsIAotICAgIC8vIGFuZCBvbmx5IGNoYW5nZSB0aGlzIGFzc3VtcHRp
b24gaWYgb25lIG9mIHRoZSBOU1RleHRJbnB1dC9SZXNwb25kZXIgY2FsbGJhY2tzIGlzIHVzZWQu
Ci0gICAgLy8gV2UgYXNzdW1lIHRoZSBJTSB3aWxsICpub3QqIGNvbnN1bWUgaG90a2V5IHNlcXVl
bmNlcwotICAgIHBhcmFtZXRlcnMuY29uc3VtZWRCeUlNID0gIWV2ZW50LT5tZXRhS2V5KCkgJiYg
c2hvdWxkU2F2ZTsKLQotICAgIGlmIChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQqIHBsYXRm
b3JtRXZlbnQgPSBldmVudC0+a2V5RXZlbnQoKSkgewotICAgICAgICBOU0V2ZW50ICptYWNFdmVu
dCA9IHBsYXRmb3JtRXZlbnQtPm1hY0V2ZW50KCk7Ci0gICAgICAgIGlmIChbbWFjRXZlbnQgdHlw
ZV0gPT0gTlNLZXlEb3duICYmIFtfcHJpdmF0ZS0+Y29tcENvbnRyb2xsZXIgZmlsdGVyS2V5RG93
bjptYWNFdmVudF0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChbbWFjRXZlbnQgdHlwZV0gPT0gTlNGbGFnc0NoYW5nZWQpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBwYXJhbWV0ZXJzLmV2ZW50ID0gZXZlbnQ7Ci0g
ICAgICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gJnBhcmFtZXRl
cnM7Ci0gICAgICAgIF9wcml2YXRlLT5yZWNlaXZlZE5PT1AgPSBOTzsKLSAgICAgICAgY29uc3Qg
VmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzID0gZXZlbnQtPmtleXByZXNzQ29tbWFu
ZHMoKTsKLSAgICAgICAgYm9vbCBoYXNLZXlwcmVzc0NvbW1hbmQgPSAhY29tbWFuZHMuaXNFbXB0
eSgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBpbnRlcnByZXRLZXlFdmVudHMgZG9lc24ndCBtYXRj
aCBhcHBsaWNhdGlvbiBrZXkgZXF1aXZhbGVudHMgKHN1Y2ggYXMgQ21kK0EpLAotICAgICAgICAv
LyBhbmQgc2VuZHMgbm9vcDogZm9yIHRob3NlLiBBcyBhIHJlc3VsdCwgd2UgZG9uJ3QgaGFuZGxl
IHRob3NlIGZyb20gd2l0aGluIFdlYkNvcmUsCi0gICAgICAgIC8vIGJ1dCBzZW5kIGEgZnVsbCBz
ZXF1ZW5jZSBvZiBET00gZXZlbnRzLCBpbmNsdWRpbmcgYW4gdW5uZWVkZWQga2V5cHJlc3MuCi0g
ICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZFNhdmVDb21tYW5kIHx8ICFoYXNLZXlwcmVzc0Nv
bW1hbmQpCi0gICAgICAgICAgICBbc2VsZiBpbnRlcnByZXRLZXlFdmVudHM6W05TQXJyYXkgYXJy
YXlXaXRoT2JqZWN0Om1hY0V2ZW50XV07Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2l6
ZV90IHNpemUgPSBjb21tYW5kcy5zaXplKCk7Ci0gICAgICAgICAgICAvLyBBcmUgdGhlcmUgY29t
bWFuZHMgdGhhdCB3b3VsZCBqdXN0IGNhdXNlIHRleHQgaW5zZXJ0aW9uIGlmIGV4ZWN1dGVkIHZp
YSBFZGl0b3I/Ci0gICAgICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZv
cm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgdGhleSBzaG91bGQgYmUgdHJlYXRlZCwg
c28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlCi0gICAgICAgICAgICAvLyB0byBlaXRoZXIgaGFu
ZGxlIHRoZW0gaW1tZWRpYXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0
IGEga2V5cHJlc3MgZXZlbnQgYmUgZ2VuZXJhdGVkCi0gICAgICAgICAgICAvLyAoZS5nLiBUYWIg
dGhhdCBpbnNlcnRzIGEgVGFiIGNoYXJhY3Rlciwgb3IgRW50ZXIpLgotICAgICAgICAgICAgYm9v
bCBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChbc2VsZiBj
b3JlQ29tbWFuZEJ5U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoY29tbWFuZHNbaV0uY29t
bWFuZE5hbWUpXS5pc1RleHRJbnNlcnRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgaGF2ZVRl
eHRJbnNlcnRpb25Db21tYW5kcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoIWhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgfHwgcGxhdGZvcm1FdmVudC0+dHlwZSgpID09
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhcikgewotICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21t
YW5kc1tpXS5jb21tYW5kTmFtZSA9PSAiaW5zZXJ0VGV4dDoiKQotICAgICAgICAgICAgICAgICAg
ICAgICAgW3NlbGYgaW5zZXJ0VGV4dDpjb21tYW5kc1tpXS50ZXh0XTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYgZG9Db21tYW5kQnlTZWxl
Y3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhjb21tYW5kc1tpXS5jb21tYW5kTmFtZSldOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBfcHJpdmF0
ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7Ci0gICAgfQotICAgIHJldHVybiAo
IV9wcml2YXRlLT5yZWNlaXZlZE5PT1AgJiYgcGFyYW1ldGVycy5ldmVudFdhc0hhbmRsZWQpIHx8
IHBhcmFtZXRlcnMuY29uc3VtZWRCeUlNOwotfQotCi0tIChXZWJDb3JlOjpDYWNoZWRJbWFnZSop
cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UKLXsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnByb21p
c2VkRHJhZ1RJRkZEYXRhU291cmNlOwotfQotCi0tICh2b2lkKXNldFByb21pc2VkRHJhZ1RJRkZE
YXRhU291cmNlOihXZWJDb3JlOjpDYWNoZWRJbWFnZSopc291cmNlCi17Ci0gICAgaWYgKHNvdXJj
ZSkKLSAgICAgICAgc291cmNlLT5hZGRDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkpOwotICAg
IAotICAgIGlmIChfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3VyY2UpCi0gICAgICAg
IF9wcml2YXRlLT5wcm9taXNlZERyYWdUSUZGRGF0YVNvdXJjZS0+cmVtb3ZlQ2xpZW50KHByb21p
c2VkRGF0YUNsaWVudCgpKTsKLSAgICBfcHJpdmF0ZS0+cHJvbWlzZWREcmFnVElGRkRhdGFTb3Vy
Y2UgPSBzb3VyY2U7Ci19Ci0KLSN1bmRlZiBDT01NQU5EX1BST0xPR1VFCi0KLS0gKHZvaWQpX2xh
eW91dElmTmVlZGVkCi17Ci0gICAgQVNTRVJUKCFfcHJpdmF0ZS0+c3Vidmlld3NTZXRBc2lkZSk7
Ci0KLSAgICBpZiAoX3ByaXZhdGUtPm5lZWRzVG9BcHBseVN0eWxlcyB8fCBbc2VsZiBfbmVlZHNM
YXlvdXRdKQotICAgICAgICBbc2VsZiBsYXlvdXRdOwotfQotCi0tICh2b2lkKV93ZWJfbGF5b3V0
SWZOZWVkZWRSZWN1cnNpdmUKLXsKLSAgICBbc2VsZiBfbGF5b3V0SWZOZWVkZWRdOwotCi0jaWZu
ZGVmIE5ERUJVRwotICAgIF9wcml2YXRlLT5lbnVtZXJhdGluZ1N1YnZpZXdzID0gWUVTOwotI2Vu
ZGlmCi0KLSAgICBOU011dGFibGVBcnJheSAqZGVzY2VuZGFudFdlYkhUTUxWaWV3cyA9IFtbTlNN
dXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwotCi0gICAgW3NlbGYgX3dlYl9hZGREZXNjZW5kYW50
V2ViSFRNTFZpZXdzVG9BcnJheTpkZXNjZW5kYW50V2ViSFRNTFZpZXdzXTsKLQotICAgIHVuc2ln
bmVkIGNvdW50ID0gW2Rlc2NlbmRhbnRXZWJIVE1MVmlld3MgY291bnRdOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBbW2Rlc2NlbmRhbnRXZWJIVE1M
Vmlld3Mgb2JqZWN0QXRJbmRleDppXSBfbGF5b3V0SWZOZWVkZWRdOwotCi0gICAgW2Rlc2NlbmRh
bnRXZWJIVE1MVmlld3MgcmVsZWFzZV07Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgX3ByaXZhdGUt
PmVudW1lcmF0aW5nU3Vidmlld3MgPSBOTzsKLSNlbmRpZgotfQotCi0tICh2b2lkKSBfZGVzdHJv
eUFsbFdlYlBsdWdpbnMKLXsKLSAgICBbW3NlbGYgX3BsdWdpbkNvbnRyb2xsZXJdIGRlc3Ryb3lB
bGxQbHVnaW5zXTsKLX0KLQotLSAoQk9PTClfaXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcgotewot
ICAgIHJldHVybiBfcHJpdmF0ZS0+cmVzaWduaW5nRmlyc3RSZXNwb25kZXI7Ci19Ci0KLS0gKEJP
T0wpX25lZWRzTGF5b3V0Ci17Ci0gICAgcmV0dXJuIFtbc2VsZiBfZnJhbWVdIF9uZWVkc0xheW91
dF07Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0tICh2b2lkKWF0dGFj
aFJvb3RMYXllcjooQ0FMYXllciopbGF5ZXIKLXsKLSAgICBpZiAoIV9wcml2YXRlLT5sYXllckhv
c3RpbmdWaWV3KSB7Ci0gICAgICAgIFdlYkxheWVySG9zdGluZ1ZpZXcqIGhvc3RpbmdWaWV3ID0g
W1tXZWJMYXllckhvc3RpbmdWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOltzZWxmIGJvdW5kc11d
OwotICAgICAgICBbaG9zdGluZ1ZpZXcgc2V0QXV0b3Jlc2l6aW5nTWFzazooTlNWaWV3V2lkdGhT
aXphYmxlIHwgTlNWaWV3SGVpZ2h0U2l6YWJsZSldOwotICAgICAgICBbc2VsZiBhZGRTdWJ2aWV3
Omhvc3RpbmdWaWV3XTsKLSAgICAgICAgW2hvc3RpbmdWaWV3IHJlbGVhc2VdOwotICAgICAgICAv
LyBob3N0aW5nVmlldyBpcyBvd25lZCBieSBiZWluZyBhIHN1YnZpZXcgb2Ygc2VsZgotICAgICAg
ICBfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyA9IGhvc3RpbmdWaWV3OwotICAgICAgICBbW3Nl
bGYgX3dlYlZpZXddIF9zdGFydGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOltzZWxm
IF9mcmFtZV1dOwotICAgIH0KLQotICAgIC8vIE1ha2UgYSBjb250YWluZXIgbGF5ZXIsIHdoaWNo
IHdpbGwgZ2V0IHNpemVkL3Bvc2l0aW9uZWQgYnkgQXBwS2l0IGFuZCBDQQotICAgIENBTGF5ZXIq
IHZpZXdMYXllciA9IFtDQUxheWVyIGxheWVyXTsKLSAgICBbX3ByaXZhdGUtPmxheWVySG9zdGlu
Z1ZpZXcgc2V0TGF5ZXI6dmlld0xheWVyXTsKLSAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1Zp
ZXcgc2V0V2FudHNMYXllcjpZRVNdOwotICAgIAotICAgIC8vIFBhcmVudCBvdXIgcm9vdCBsYXll
ciBpbiB0aGUgY29udGFpbmVyIGxheWVyCi0gICAgW3ZpZXdMYXllciBhZGRTdWJsYXllcjpsYXll
cl07Ci19Ci0KLS0gKHZvaWQpZGV0YWNoUm9vdExheWVyCi17Ci0gICAgaWYgKF9wcml2YXRlLT5s
YXllckhvc3RpbmdWaWV3KSB7Ci0gICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyBz
ZXRMYXllcjpuaWxdOwotICAgICAgICBbX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgc2V0V2Fu
dHNMYXllcjpOT107Ci0gICAgICAgIFtfcHJpdmF0ZS0+bGF5ZXJIb3N0aW5nVmlldyByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgX3ByaXZhdGUtPmxheWVySG9zdGluZ1ZpZXcgPSBuaWw7
Ci0gICAgICAgIFtbc2VsZiBfd2ViVmlld10gX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yRnJhbWU6W3NlbGYgX2ZyYW1lXV07Ci0gICAgfQotfQotI2VuZGlmCiAKK0BpbnRlcmZhY2Ug
TlNXaW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykKKy0gKHZvaWQpX3NldEZvcmNlQWN0aXZlQ29u
dHJvbHM6KEJPT0wpZmxhZzsKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFdlYkhUTUxWaWV3IChX
ZWJOU1RleHRJbnB1dFN1cHBvcnQpCi0KLS0gKE5TQXJyYXkgKil2YWxpZEF0dHJpYnV0ZXNGb3JN
YXJrZWRUZXh0Ci17Ci0gICAgc3RhdGljIE5TQXJyYXkgKnZhbGlkQXR0cmlidXRlczsKLSAgICBp
ZiAoIXZhbGlkQXR0cmlidXRlcykgewotICAgICAgICB2YWxpZEF0dHJpYnV0ZXMgPSBbW05TQXJy
YXkgYWxsb2NdIGluaXRXaXRoT2JqZWN0czoKLSAgICAgICAgICAgIE5TVW5kZXJsaW5lU3R5bGVB
dHRyaWJ1dGVOYW1lLCBOU1VuZGVybGluZUNvbG9yQXR0cmlidXRlTmFtZSwKLSAgICAgICAgICAg
IE5TTWFya2VkQ2xhdXNlU2VnbWVudEF0dHJpYnV0ZU5hbWUsIE5TVGV4dElucHV0UmVwbGFjZW1l
bnRSYW5nZUF0dHJpYnV0ZU5hbWUsIG5pbF07Ci0gICAgICAgIC8vIE5TVGV4dCBhbHNvIHN1cHBv
cnRzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcywgYnV0IGl0J3MKLSAgICAgICAgLy8gaGFyZCB0
byB0ZWxsIHdoaWNoIGFyZSByZWFsbHkgcmVxdWlyZWQgZm9yIHRleHQgaW5wdXQgdG8KLSAgICAg
ICAgLy8gd29yayB3ZWxsOyBJIGhhdmUgbm90IHNlZW4gYW55IGlucHV0IG1ldGhvZCBtYWtlIHVz
ZSBvZiB0aGVtIHlldC4KLSAgICAgICAgLy8gICAgIE5TRm9udEF0dHJpYnV0ZU5hbWUsIE5TRm9y
ZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSwKLSAgICAgICAgLy8gICAgIE5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZSwgTlNMYW5ndWFnZUF0dHJpYnV0ZU5hbWUuCi0gICAgICAgIENGUmV0
YWluKHZhbGlkQXR0cmlidXRlcyk7Ci0gICAgfQotICAgIExPRyhUZXh0SW5wdXQsICJ2YWxpZEF0
dHJpYnV0ZXNGb3JNYXJrZWRUZXh0IC0+ICguLi4pIik7Ci0gICAgcmV0dXJuIHZhbGlkQXR0cmli
dXRlczsKLX0KLQotLSAoTlNUZXh0SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0Ci17Ci0gICAg
cmV0dXJuIF9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQgPyBbc3VwZXIgaW5wdXRDb250ZXh0
XSA6IG5pbDsKLX0KLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopdGV4dFN0b3JhZ2UKLXsKLSAg
ICBpZiAoIV9wcml2YXRlLT5leHBvc2VJbnB1dENvbnRleHQpIHsKLSAgICAgICAgTE9HKFRleHRJ
bnB1dCwgInRleHRTdG9yYWdlIC0+IG5pbCIpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0K
LSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IFtzZWxmIGF0dHJpYnV0ZWRTdWJzdHJp
bmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgVUlOVF9NQVgpXTsKLSAgICAKLSAgICBMT0coVGV4
dElucHV0LCAidGV4dFN0b3JhZ2UgLT4gXCIlQFwiIiwgcmVzdWx0ID8gW3Jlc3VsdCBzdHJpbmdd
IDogQCIiKTsKLSAgICAKLSAgICAvLyBXZSBoYXZlIHRvIHJldHVybiBhbiBlbXB0eSBzdHJpbmcg
cmF0aGVyIHRoYW4gbnVsbCB0byBwcmV2ZW50IFRTTSBmcm9tIGNhbGxpbmcgLXN0cmluZwotICAg
IHJldHVybiByZXN1bHQgPyByZXN1bHQgOiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOwotfQotCi0tIChOU1VJbnRlZ2VyKWNoYXJh
Y3RlckluZGV4Rm9yUG9pbnQ6KE5TUG9pbnQpdGhlUG9pbnQKLXsKLSAgICBOU1dpbmRvdyAqd2lu
ZG93ID0gW3NlbGYgd2luZG93XTsKLSAgICBXZWJGcmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVd
OwotCi0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgdGhlUG9pbnQgPSBbd2luZG93IGNvbnZlcnRT
Y3JlZW5Ub0Jhc2U6dGhlUG9pbnRdOwotICAgIHRoZVBvaW50ID0gW3NlbGYgY29udmVydFBvaW50
OnRoZVBvaW50IGZyb21WaWV3Om5pbF07Ci0KLSAgICBET01SYW5nZSAqcmFuZ2UgPSBbZnJhbWUg
X2NoYXJhY3RlclJhbmdlQXRQb2ludDp0aGVQb2ludF07Ci0gICAgaWYgKCFyYW5nZSkgewotICAg
ICAgICBMT0coVGV4dElucHV0LCAiY2hhcmFjdGVySW5kZXhGb3JQb2ludDooJWYsICVmKSAtPiBO
U05vdEZvdW5kIiwgdGhlUG9pbnQueCwgdGhlUG9pbnQueSk7Ci0gICAgICAgIHJldHVybiBOU05v
dEZvdW5kOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCByZXN1bHQgPSBbZnJhbWUgX2NvbnZl
cnRET01SYW5nZVRvTlNSYW5nZTpyYW5nZV0ubG9jYXRpb247Ci0gICAgTE9HKFRleHRJbnB1dCwg
ImNoYXJhY3RlckluZGV4Rm9yUG9pbnQ6KCVmLCAlZikgLT4gJXUiLCB0aGVQb2ludC54LCB0aGVQ
b2ludC55LCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS0gKE5TUmVjdClmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZTooTlNSYW5nZSl0aGVSYW5nZQoteyAgICAKLSAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAgIAotICAgIC8vIEp1c3QgdG8gbWF0Y2gg
TlNUZXh0VmlldydzIGJlaGF2aW9yLiBSZWdyZXNzaW9uIHRlc3RzIGNhbm5vdCBkZXRlY3QgdGhp
czsKLSAgICAvLyB0byByZXByb2R1Y2UsIHVzZSBhIHRlc3QgYXBwbGljYXRpb24gZnJvbSBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NjgyCi0gICAgLy8gKHR5cGUgc29t
ZXRoaW5nOyB0cnkgcmFuZ2VzICgxLCAtMSkgYW5kICgyLCAtMSkuCi0gICAgaWYgKCh0aGVSYW5n
ZS5sb2NhdGlvbiArIHRoZVJhbmdlLmxlbmd0aCA8IHRoZVJhbmdlLmxvY2F0aW9uKSAmJiAodGhl
UmFuZ2UubG9jYXRpb24gKyB0aGVSYW5nZS5sZW5ndGggIT0gMCkpCi0gICAgICAgIHRoZVJhbmdl
Lmxlbmd0aCA9IDA7Ci0gICAgCi0gICAgRE9NUmFuZ2UgKnJhbmdlID0gW2ZyYW1lIF9jb252ZXJ0
TlNSYW5nZVRvRE9NUmFuZ2U6dGhlUmFuZ2VdOwotICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAg
TE9HKFRleHRJbnB1dCwgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlOigldSwgJXUpIC0+ICgw
LCAwLCAwLCAwKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5ndGgpOwotICAgICAg
ICByZXR1cm4gTlNNYWtlUmVjdCgwLCAwLCAwLCAwKTsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJU
KFtyYW5nZSBzdGFydENvbnRhaW5lcl0pOwotICAgIEFTU0VSVChbcmFuZ2UgZW5kQ29udGFpbmVy
XSk7Ci0gICAgCi0gICAgTlNSZWN0IHJlc3VsdFJlY3QgPSBbZnJhbWUgX2ZpcnN0UmVjdEZvckRP
TVJhbmdlOnJhbmdlXTsKLSAgICByZXN1bHRSZWN0ID0gW3NlbGYgY29udmVydFJlY3Q6cmVzdWx0
UmVjdCB0b1ZpZXc6bmlsXTsKLQotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3dd
OwotICAgIGlmICh3aW5kb3cpCi0gICAgICAgIHJlc3VsdFJlY3Qub3JpZ2luID0gW3dpbmRvdyBj
b252ZXJ0QmFzZVRvU2NyZWVuOnJlc3VsdFJlY3Qub3JpZ2luXTsKLSAgICAKLSAgICBMT0coVGV4
dElucHV0LCAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2U6KCV1LCAldSkgLT4gKCVmLCAlZiwg
JWYsICVmKSIsIHRoZVJhbmdlLmxvY2F0aW9uLCB0aGVSYW5nZS5sZW5ndGgsIHJlc3VsdFJlY3Qu
b3JpZ2luLngsIHJlc3VsdFJlY3Qub3JpZ2luLnksIHJlc3VsdFJlY3Quc2l6ZS53aWR0aCwgcmVz
dWx0UmVjdC5zaXplLmhlaWdodCk7Ci0gICAgcmV0dXJuIHJlc3VsdFJlY3Q7Ci19Ci0KLS0gKE5T
UmFuZ2Upc2VsZWN0ZWRSYW5nZQotewotICAgIGlmICghaXNUZXh0SW5wdXQoY29yZShbc2VsZiBf
ZnJhbWVdKSkpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgInNlbGVjdGVkUmFuZ2UgLT4gKE5T
Tm90Rm91bmQsIDApIik7Ci0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKLSAgICB9Ci0gICAgTlNSYW5nZSByZXN1bHQgPSBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0ZWRO
U1JhbmdlXTsKLQotICAgIExPRyhUZXh0SW5wdXQsICJzZWxlY3RlZFJhbmdlIC0+ICgldSwgJXUp
IiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi0tIChOU1JhbmdlKW1hcmtlZFJhbmdlCi17Ci0gICAgV2ViRnJhbWUgKndlYkZyYW1lID0g
W3NlbGYgX2ZyYW1lXTsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZSh3ZWJGcmFtZSk7Ci0g
ICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZSgwLCAwKTsKLSAg
ICBOU1JhbmdlIHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpjb3JlRnJhbWUt
PmVkaXRvcigpLT5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCldOwotCi0gICAgTE9HKFRleHRJbnB1
dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVu
Z3RoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilh
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOihOU1JhbmdlKW5zUmFuZ2UKLXsKLSAgICBXZWJG
cmFtZSAqZnJhbWUgPSBbc2VsZiBfZnJhbWVdOwotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KGZyYW1lKTsKLSAgICBpZiAoIWlzVGV4dElucHV0KGNvcmVGcmFtZSkgfHwgaXNJblBhc3N3b3Jk
RmllbGQoY29yZUZyYW1lKSkgewotICAgICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1
YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1Jh
bmdlLmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgfQotICAgIERPTVJhbmdlICpk
b21SYW5nZSA9IFtmcmFtZSBfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOm5zUmFuZ2VdOwotICAg
IGlmICghZG9tUmFuZ2UpIHsKLSAgICAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJz
dHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmlsIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5n
ZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqcmVzdWx0ID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2U6Y29yZShkb21SYW5nZSldOwotICAgIAotICAgIC8vIFtOU0F0dHJpYnV0ZWRT
dHJpbmcoV2ViS2l0RXh0cmFzKSBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6XSAgaW5z
aXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGluZyAKLSAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBl
bmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJk
YXI6Ly9wcm9ibGVtLzU0MDA1NTE+Ci0gICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVu
Y2F0ZSB0aGUgcmVzdWx0YW50IHN0cmluZyB0byB0aGUgY29ycmVjdCBsZW5ndGguCi0gICAgaWYg
KFtyZXN1bHQgbGVuZ3RoXSA+IG5zUmFuZ2UubGVuZ3RoKSB7Ci0gICAgICAgIEFTU0VSVChbcmVz
dWx0IGxlbmd0aF0gPT0gbnNSYW5nZS5sZW5ndGggKyAxKTsKLSAgICAgICAgQVNTRVJUKFtbcmVz
dWx0IHN0cmluZ10gY2hhcmFjdGVyQXRJbmRleDpuc1JhbmdlLmxlbmd0aF0gPT0gJ1xuJyB8fCBb
W3Jlc3VsdCBzdHJpbmddIGNoYXJhY3RlckF0SW5kZXg6bnNSYW5nZS5sZW5ndGhdID09ICcgJyk7
Ci0gICAgICAgIHJlc3VsdCA9IFtyZXN1bHQgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpO
U01ha2VSYW5nZSgwLCBuc1JhbmdlLmxlbmd0aCldOwotICAgIH0KLSAgICBMT0coVGV4dElucHV0
LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBuc1Jh
bmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3VsdCBzdHJpbmddKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi0vLyB0ZXN0IGZvciAxMC40IGJlY2F1c2Ugb2YgPHJkYXI6Ly9wcm9i
bGVtLzQyNDM0NjM+Ci0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLS0gKGxvbmcpY29udmVyc2F0
aW9uSWRlbnRpZmllcgotewotICAgIHJldHVybiAobG9uZylzZWxmOwotfQotI2Vsc2UKLS0gKE5T
SW50ZWdlciljb252ZXJzYXRpb25JZGVudGlmaWVyCi17Ci0gICAgcmV0dXJuIChOU0ludGVnZXIp
c2VsZjsKLX0KLSNlbmRpZgotCi0tIChCT09MKWhhc01hcmtlZFRleHQKLXsKLSAgICBGcmFtZSog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBCT09MIHJlc3VsdCA9IGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigpOwotICAgIExPRyhU
ZXh0SW5wdXQsICJoYXNNYXJrZWRUZXh0IC0+ICV1IiwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0tICh2b2lkKXVubWFya1RleHQKLXsKLSAgICBMT0coVGV4dElucHV0LCAidW5t
YXJrVGV4dCIpOwotCi0gICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2Vk
IHRvIHVzIGJ5IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgotICAgIFdlYkhUTUxW
aWV3SW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5p
bnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlF
dmVudHNQYXJhbWV0ZXJzID0gMDsKLQotICAgIGlmIChwYXJhbWV0ZXJzKSB7Ci0gICAgICAgIHBh
cmFtZXRlcnMtPmV2ZW50V2FzSGFuZGxlZCA9IFlFUzsKLSAgICAgICAgcGFyYW1ldGVycy0+Y29u
c3VtZWRCeUlNID0gTk87Ci0gICAgfQotICAgIAotICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmly
bUNvbXBvc2l0aW9uKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5TQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nLCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbmU+JiByZXN1
bHQpCi17Ci0gICAgaW50IGxlbmd0aCA9IFtbc3RyaW5nIHN0cmluZ10gbGVuZ3RoXTsKLQotICAg
IGludCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IGxlbmd0aCkgewotICAgICAgICBOU1JhbmdlIHJh
bmdlOwotICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJzID0gW3N0cmluZyBhdHRyaWJ1dGVzQXRJ
bmRleDppIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTomcmFuZ2UgaW5SYW5nZTpOU01ha2VSYW5nZShp
LCBsZW5ndGggLSBpKV07Ci0KLSAgICAgICAgaWYgKE5TTnVtYmVyICpzdHlsZSA9IFthdHRycyBv
YmplY3RGb3JLZXk6TlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWVdKSB7Ci0gICAgICAgICAg
ICBDb2xvciBjb2xvciA9IENvbG9yOjpibGFjazsKLSAgICAgICAgICAgIGlmIChOU0NvbG9yICpj
b2xvckF0dHIgPSBbYXR0cnMgb2JqZWN0Rm9yS2V5Ok5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVO
YW1lXSkKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW2NvbG9yQXR0
ciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSk7Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKHJhbmdlLmxvY2F0aW9u
LCBOU01heFJhbmdlKHJhbmdlKSwgY29sb3IsIFtzdHlsZSBpbnRWYWx1ZV0gPiAxKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpID0gcmFuZ2UubG9jYXRpb24gKyByYW5nZS5sZW5ndGg7Ci0gICAg
fQotfQotCi0tICh2b2lkKXNldE1hcmtlZFRleHQ6KGlkKXN0cmluZyBzZWxlY3RlZFJhbmdlOihO
U1JhbmdlKW5ld1NlbFJhbmdlCi17Ci0gICAgQk9PTCBpc0F0dHJpYnV0ZWRTdHJpbmcgPSBbc3Ry
aW5nIGlzS2luZE9mQ2xhc3M6W05TQXR0cmlidXRlZFN0cmluZyBjbGFzc11dOyAvLyBPdGhlcndp
c2UsIE5TU3RyaW5nCi0KLSAgICBMT0coVGV4dElucHV0LCAic2V0TWFya2VkVGV4dDpcIiVAXCIg
c2VsZWN0ZWRSYW5nZTooJXUsICV1KSIsIGlzQXR0cmlidXRlZFN0cmluZyA/IFtzdHJpbmcgc3Ry
aW5nXSA6IHN0cmluZywgbmV3U2VsUmFuZ2UubG9jYXRpb24sIG5ld1NlbFJhbmdlLmxlbmd0aCk7
Ci0KLSAgICAvLyBVc2UgcG9pbnRlciB0byBnZXQgcGFyYW1ldGVycyBwYXNzZWQgdG8gdXMgYnkg
dGhlIGNhbGxlciBvZiBpbnRlcnByZXRLZXlFdmVudHMuCi0gICAgV2ViSFRNTFZpZXdJbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3ByaXZhdGUtPmludGVycHJldEtl
eUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFt
ZXRlcnMgPSAwOwotCi0gICAgaWYgKHBhcmFtZXRlcnMpIHsKLSAgICAgICAgcGFyYW1ldGVycy0+
ZXZlbnRXYXNIYW5kbGVkID0gWUVTOwotICAgICAgICBwYXJhbWV0ZXJzLT5jb25zdW1lZEJ5SU0g
PSBOTzsKLSAgICB9Ci0gICAgCi0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICgh
W3NlbGYgX2lzRWRpdGFibGVdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8Q29tcG9z
aXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7Ci0gICAgTlNTdHJpbmcgKnRleHQgPSBzdHJpbmc7
Ci0KLSAgICBpZiAoaXNBdHRyaWJ1dGVkU3RyaW5nKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1hcmtl
ZFRleHRMZW5ndGggPSBbKE5TU3RyaW5nICopc3RyaW5nIGxlbmd0aF07Ci0gICAgICAgIE5TU3Ry
aW5nICpyYW5nZVN0cmluZyA9IFtzdHJpbmcgYXR0cmlidXRlOk5TVGV4dElucHV0UmVwbGFjZW1l
bnRSYW5nZUF0dHJpYnV0ZU5hbWUgYXRJbmRleDowIGxvbmdlc3RFZmZlY3RpdmVSYW5nZTpOVUxM
IGluUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbWFya2VkVGV4dExlbmd0aCldOwotICAgICAgICBMT0co
VGV4dElucHV0LCAiICAgIFJlcGxhY2VtZW50UmFuZ2U6ICVAIiwgcmFuZ2VTdHJpbmcpOwotICAg
ICAgICAvLyBUaGUgQXBwS2l0IGFkZHMgYSAnc2VjcmV0JyBwcm9wZXJ0eSB0byB0aGUgc3RyaW5n
IHRoYXQgY29udGFpbnMgdGhlIHJlcGxhY2VtZW50IHJhbmdlLgotICAgICAgICAvLyBUaGUgcmVw
bGFjZW1lbnQgcmFuZ2UgaXMgdGhlIHJhbmdlIG9mIHRoZSB0aGUgdGV4dCB0aGF0IHNob3VsZCBi
ZSByZXBsYWNlZCB3aXRoIHRoZSBuZXcgc3RyaW5nLgotICAgICAgICBpZiAocmFuZ2VTdHJpbmcp
Ci0gICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBfc2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0
cmluZyhyYW5nZVN0cmluZyldOwotCi0gICAgICAgIHRleHQgPSBbc3RyaW5nIHN0cmluZ107Ci0g
ICAgICAgIGV4dHJhY3RVbmRlcmxpbmVzKHN0cmluZywgdW5kZXJsaW5lcyk7Ci0gICAgfQotCi0g
ICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+c2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywg
bmV3U2VsUmFuZ2UubG9jYXRpb24sIE5TTWF4UmFuZ2UobmV3U2VsUmFuZ2UpKTsKLX0KLQotLSAo
dm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2VsZWN0b3IKLXsKLSAgICBMT0coVGV4dElu
cHV0LCAiZG9Db21tYW5kQnlTZWxlY3RvcjpcIiVzXCIiLCBzZWxfZ2V0TmFtZShzZWxlY3Rvcikp
OwotCi0gICAgLy8gVXNlIHBvaW50ZXIgdG8gZ2V0IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHVzIGJ5
IHRoZSBjYWxsZXIgb2YgaW50ZXJwcmV0S2V5RXZlbnRzLgotICAgIC8vIFRoZSBzYW1lIGNhbGwg
dG8gaW50ZXJwcmV0S2V5RXZlbnRzIGNhbiBkbyBtb3JlIHRoYW4gb25lIGNvbW1hbmQuCi0gICAg
V2ViSFRNTFZpZXdJbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzID0gX3By
aXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnM7Ci0gICAgaWYgKHBhcmFtZXRlcnMp
Ci0gICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IE5POwotCi0gICAgaWYgKHNlbGVj
dG9yID09IEBzZWxlY3Rvcihub29wOikpIHsKLSAgICAgICAgX3ByaXZhdGUtPnJlY2VpdmVkTk9P
UCA9IFlFUzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEtleWJvYXJkRXZlbnQqIGV2
ZW50ID0gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMtPmV2ZW50IDogMDsKLSAgICBib29sIHNob3Vs
ZFNhdmVDb21tYW5kID0gcGFyYW1ldGVycyAmJiBwYXJhbWV0ZXJzLT5zaG91bGRTYXZlQ29tbWFu
ZDsKLQotICAgIGlmIChldmVudCAmJiBzaG91bGRTYXZlQ29tbWFuZCkKLSAgICAgICAgZXZlbnQt
PmtleXByZXNzQ29tbWFuZHMoKS5hcHBlbmQoS2V5cHJlc3NDb21tYW5kKE5TU3RyaW5nRnJvbVNl
bGVjdG9yKHNlbGVjdG9yKSkpOwotICAgIGVsc2UgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhh
dCBvbmx5IGRpcmVjdCBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yOiBzZWUgdGhlIHBhcmFt
ZXRlcnMgYnkgc2V0dGluZyB0byAwLgotICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycyA9IDA7Ci0KLSAgICAgICAgYm9vbCBldmVudFdhc0hhbmRsZWQ7Ci0KLSAg
ICAgICAgV2ViVmlldyAqd2ViVmlldyA9IFtzZWxmIF93ZWJWaWV3XTsKLSAgICAgICAgaWYgKFtb
d2ViVmlldyBfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3OndlYlZpZXcgZG9Db21t
YW5kQnlTZWxlY3RvcjpzZWxlY3Rvcl0pCi0gICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgPSB0
cnVlOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEVkaXRvcjo6Q29tbWFuZCBjb21tYW5k
ID0gW3NlbGYgY29yZUNvbW1hbmRCeVNlbGVjdG9yOnNlbGVjdG9yXTsKLSAgICAgICAgICAgIGlm
IChjb21tYW5kLmlzU3VwcG9ydGVkKCkpCi0gICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVk
ID0gY29tbWFuZC5leGVjdXRlKGV2ZW50KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIC8vIElmIFdlYktpdCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgY29tbWFuZCwgd2UgbmVl
ZCB0byBwYXNzIHRoZSBzZWxlY3RvciB0byBzdXBlci4KLSAgICAgICAgICAgICAgICBfcHJpdmF0
ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNlbGVjdG9yID0gc2VsZWN0b3I7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBUaGUgc2luayBkb2VzIHR3byB0aGluZ3M6IDEpIFRlbGxzIHVzIGlmIHRoZSBy
ZXNwb25kZXIgd2VudCB1bmhhbmRsZWQsIGFuZAotICAgICAgICAgICAgICAgIC8vIDIpIHByZXZl
bnRzIGFueSBOU0JlZXA7IHdlIGRvbid0IGV2ZXIgd2FudCB0byBiZWVwIGhlcmUuCi0gICAgICAg
ICAgICAgICAgV2ViUmVzcG9uZGVyQ2hhaW5TaW5rICpzaW5rID0gW1tXZWJSZXNwb25kZXJDaGFp
blNpbmsgYWxsb2NdIGluaXRXaXRoUmVzcG9uZGVyQ2hhaW46c2VsZl07Ci0gICAgICAgICAgICAg
ICAgW3N1cGVyIGRvQ29tbWFuZEJ5U2VsZWN0b3I6c2VsZWN0b3JdOwotICAgICAgICAgICAgICAg
IGV2ZW50V2FzSGFuZGxlZCA9ICFbc2luayByZWNlaXZlZFVuaGFuZGxlZENvbW1hbmRdOwotICAg
ICAgICAgICAgICAgIFtzaW5rIGRldGFjaF07Ci0gICAgICAgICAgICAgICAgW3NpbmsgcmVsZWFz
ZV07Ci0KLSAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+c2VsZWN0b3JGb3JEb0NvbW1hbmRCeVNl
bGVjdG9yID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXJh
bWV0ZXJzKQotICAgICAgICAgICAgcGFyYW1ldGVycy0+ZXZlbnRXYXNIYW5kbGVkID0gZXZlbnRX
YXNIYW5kbGVkOwotCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIHBhcmFtZXRlcnMgc28gdGhhdCBv
dGhlciBjYWxscyB0byBkb0NvbW1hbmRCeVNlbGVjdG9yOiBzZWUgdGhlbSwKLSAgICAgICAgLy8g
YW5kIG90aGVyIGNvbW1hbmRzIGNhbiBwYXJ0aWNpcGF0ZSBpbiBzZXR0aW5nIHRoZSAiZXZlbnRX
YXNIYW5kbGVkIiBmbGFnLgotICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFy
YW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgfQotfQotCi0tICh2b2lkKWluc2VydFRleHQ6KGlk
KXN0cmluZwotewotICAgIEJPT0wgaXNBdHRyaWJ1dGVkU3RyaW5nID0gW3N0cmluZyBpc0tpbmRP
ZkNsYXNzOltOU0F0dHJpYnV0ZWRTdHJpbmcgY2xhc3NdXTsgLy8gT3RoZXJ3aXNlLCBOU1N0cmlu
ZwotCi0gICAgTE9HKFRleHRJbnB1dCwgImluc2VydFRleHQ6XCIlQFwiIiwgaXNBdHRyaWJ1dGVk
U3RyaW5nID8gW3N0cmluZyBzdHJpbmddIDogc3RyaW5nKTsKLQotICAgIFdlYkhUTUxWaWV3SW50
ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyogcGFyYW1ldGVycyA9IF9wcml2YXRlLT5pbnRlcnBy
ZXRLZXlFdmVudHNQYXJhbWV0ZXJzOwotICAgIF9wcml2YXRlLT5pbnRlcnByZXRLZXlFdmVudHNQ
YXJhbWV0ZXJzID0gMDsKLSAgICBpZiAocGFyYW1ldGVycykKLSAgICAgICAgcGFyYW1ldGVycy0+
Y29uc3VtZWRCeUlNID0gTk87Ci0KLSAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGluc2VydGluZyBh
biBhdHRyaWJ1dGVkIHN0cmluZyBidXQgaW5wdXQgbWV0aG9kcyBkb24ndCBhcHBlYXIgdG8gcmVx
dWlyZSB0aGlzLgotICAgIFJlZlB0cjxGcmFtZT4gY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICBOU1N0cmluZyAqdGV4dDsKLSAgICBib29sIGlzRnJvbUlucHV0TWV0aG9kID0g
Y29yZUZyYW1lICYmIGNvcmVGcmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCk7Ci0gICAg
aWYgKGlzQXR0cmlidXRlZFN0cmluZykgewotICAgICAgICB0ZXh0ID0gW3N0cmluZyBzdHJpbmdd
OwotICAgICAgICAvLyBXZSBkZWFsIHdpdGggdGhlIE5TVGV4dElucHV0UmVwbGFjZW1lbnRSYW5n
ZUF0dHJpYnV0ZU5hbWUgYXR0cmlidXRlIGZyb20gTlNBdHRyaWJ1dGVkU3RyaW5nIGhlcmUKLSAg
ICAgICAgLy8gc2ltcGx5IGJlY2F1c2UgaXQgaXMgdXNlZCBieSBhdCBsZWFzdCBvbmUgSW5wdXQg
TWV0aG9kIC0tIGl0IGNvcnJlc29uZHMgdG8gdGhlIGtFdmVudFBhcmFtVGV4dElucHV0U2VuZFJl
cGxhY2VSYW5nZQotICAgICAgICAvLyBldmVudCBpbiBUU00uICBUaGlzIGJlaGF2aW91ciBtYXRj
aGVzIHRoYXQgb2YgLVtXZWJIVE1MVmlldyBzZXRNYXJrZWRUZXh0OnNlbGVjdGVkUmFuZ2U6XSB3
aGVuIGl0IHJlY2VpdmVzIGFuCi0gICAgICAgIC8vIE5TQXR0cmlidXRlZFN0cmluZwotICAgICAg
ICBOU1N0cmluZyAqcmFuZ2VTdHJpbmcgPSBbc3RyaW5nIGF0dHJpYnV0ZTpOU1RleHRJbnB1dFJl
cGxhY2VtZW50UmFuZ2VBdHRyaWJ1dGVOYW1lIGF0SW5kZXg6MCBsb25nZXN0RWZmZWN0aXZlUmFu
Z2U6TlVMTCBpblJhbmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0IGxlbmd0aF0pXTsKLSAgICAgICAg
TE9HKFRleHRJbnB1dCwgIiAgICBSZXBsYWNlbWVudFJhbmdlOiAlQCIsIHJhbmdlU3RyaW5nKTsK
LSAgICAgICAgaWYgKHJhbmdlU3RyaW5nKSB7Ci0gICAgICAgICAgICBbW3NlbGYgX2ZyYW1lXSBf
c2VsZWN0TlNSYW5nZTpOU1JhbmdlRnJvbVN0cmluZyhyYW5nZVN0cmluZyldOwotICAgICAgICAg
ICAgaXNGcm9tSW5wdXRNZXRob2QgPSBZRVM7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAg
ICAgdGV4dCA9IHN0cmluZzsKLQotICAgIGJvb2wgZXZlbnRIYW5kbGVkID0gZmFsc2U7Ci0gICAg
aWYgKFt0ZXh0IGxlbmd0aF0pIHsKLSAgICAgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQgPSBwYXJh
bWV0ZXJzID8gcGFyYW1ldGVycy0+ZXZlbnQgOiAwOwotCi0gICAgICAgIC8vIGluc2VydFRleHQg
Y2FuIGJlIGNhbGxlZCBmcm9tIGFuIGlucHV0IG1ldGhvZCBvciBmcm9tIG5vcm1hbCBrZXkgZXZl
bnQgcHJvY2Vzc2luZwotICAgICAgICAvLyBJZiBpdHMgZnJvbSBub3JtYWwga2V5IGV2ZW50IHBy
b2Nlc3NpbmcsIHdlIG1heSBuZWVkIHRvIHNhdmUgdGhlIGFjdGlvbiB0byBwZXJmb3JtIGl0IGxh
dGVyLgotICAgICAgICAvLyBJZiBpdHMgZnJvbSBhbiBpbnB1dCBtZXRob2QsIHRoZW4gd2Ugc2hv
dWxkIGdvIGFoZWFkIGFuZCBpbnNlcnQgdGhlIHRleHQgbm93LiAgCi0gICAgICAgIC8vIFdlIGFz
c3VtZSBpdCdzIGZyb20gdGhlIGlucHV0IG1ldGhvZCBpZiB3ZSBoYXZlIG1hcmtlZCB0ZXh0Lgot
ICAgICAgICAvLyBGSVhNRTogSW4gdGhlb3J5LCB0aGlzIGNvdWxkIGJlIHdyb25nIGZvciBzb21l
IGlucHV0IG1ldGhvZHMsIHNvIHdlIHNob3VsZCB0cnkgdG8gZmluZAotICAgICAgICAvLyBhbm90
aGVyIHdheSB0byBkZXRlcm1pbmUgaWYgdGhlIGNhbGwgaXMgZnJvbSB0aGUgaW5wdXQgbWV0aG9k
Ci0gICAgICAgIGJvb2wgc2hvdWxkU2F2ZUNvbW1hbmQgPSBwYXJhbWV0ZXJzICYmIHBhcmFtZXRl
cnMtPnNob3VsZFNhdmVDb21tYW5kOwotICAgICAgICBpZiAoZXZlbnQgJiYgc2hvdWxkU2F2ZUNv
bW1hbmQgJiYgIWlzRnJvbUlucHV0TWV0aG9kKSB7Ci0gICAgICAgICAgICBldmVudC0+a2V5cHJl
c3NDb21tYW5kcygpLmFwcGVuZChLZXlwcmVzc0NvbW1hbmQoImluc2VydFRleHQ6IiwgdGV4dCkp
OwotICAgICAgICAgICAgX3ByaXZhdGUtPmludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSBw
YXJhbWV0ZXJzOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBTdHJpbmcgZXZlbnRUZXh0ID0gdGV4dDsKLSAgICAgICAgZXZlbnRUZXh0LnJlcGxhY2Uo
TlNCYWNrVGFiQ2hhcmFjdGVyLCBOU1RhYkNoYXJhY3Rlcik7IC8vIHNhbWUgdGhpbmcgaXMgZG9u
ZSBpbiBLZXlFdmVudE1hYy5tbSBpbiBXZWJDb3JlCi0gICAgICAgIGlmIChjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5lZGl0b3IoKS0+Y2FuRWRpdCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWNvcmVG
cmFtZS0+ZWRpdG9yKCktPmhhc0NvbXBvc2l0aW9uKCkpCi0gICAgICAgICAgICAgICAgZXZlbnRI
YW5kbGVkID0gY29yZUZyYW1lLT5lZGl0b3IoKS0+aW5zZXJ0VGV4dChldmVudFRleHQsIGV2ZW50
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0
aW9uKGV2ZW50VGV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFwYXJhbWV0ZXJzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGlzRnJv
bUlucHV0TWV0aG9kKSB7Ci0gICAgICAgIC8vIEFsbG93IGRvQ29tbWFuZEJ5U2VsZWN0b3I6IHRv
IGJlIGNhbGxlZCBhZnRlciBpbnNlcnRUZXh0OiBieSByZXNldHRpbmcgaW50ZXJwcmV0S2V5RXZl
bnRzUGFyYW1ldGVycwotICAgICAgICBfcHJpdmF0ZS0+aW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1l
dGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgICAgIHBhcmFtZXRlcnMtPmNvbnN1bWVkQnlJTSA9IFlF
UzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBwYXJhbWV0ZXJzLT5ldmVudFdh
c0hhbmRsZWQgPSBldmVudEhhbmRsZWQ7Ci19Ci0KLS0gKHZvaWQpX3VwZGF0ZVNlbGVjdGlvbkZv
cklucHV0TWFuYWdlcgotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBCT09MIGV4
cG9zZUlucHV0Q29udGV4dCA9IGlzVGV4dElucHV0KGNvcmVGcmFtZSkgJiYgIWlzSW5QYXNzd29y
ZEZpZWxkKGNvcmVGcmFtZSk7Ci0gICAgaWYgKGV4cG9zZUlucHV0Q29udGV4dCAhPSBfcHJpdmF0
ZS0+ZXhwb3NlSW5wdXRDb250ZXh0KSB7Ci0gICAgICAgIF9wcml2YXRlLT5leHBvc2VJbnB1dENv
bnRleHQgPSBleHBvc2VJbnB1dENvbnRleHQ7Ci0gICAgICAgIC8vIExldCBBcHBLaXQgY2FjaGUg
YSBwb3RlbnRpYWxseSBjaGFuZ2VkIGlucHV0IGNvbnRleHQuCi0gICAgICAgIC8vIFdlYkNvcmUg
cm91dGluZWx5IHNldHMgdGhlIHNlbGVjdGlvbiB0byBOb25lIHdoZW4gZWRpdGluZywgYW5kIElN
cyBiZWNvbWUgdW5oYXBweSB3aGVuIGFuIGlucHV0IGNvbnRleHQgc3VkZGVubHkgdHVybnMgbmls
LCBzZWUgYnVnIDI2MDA5LgotICAgICAgICBpZiAoIWNvcmVGcmFtZSB8fCAhY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS0+aXNOb25lKCkpCi0gICAgICAgICAgICBbTlNBcHAgdXBkYXRlV2luZG93c107
Ci0gICAgfQotCi0gICAgaWYgKCFjb3JlRnJhbWUtPmVkaXRvcigpLT5oYXNDb21wb3NpdGlvbigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY29yZUZyYW1lLT5lZGl0b3IoKS0+aWdub3Jl
Q29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5z
aWduZWQgc3RhcnQ7Ci0gICAgdW5zaWduZWQgZW5kOwotICAgIGlmIChjb3JlRnJhbWUtPmVkaXRv
cigpLT5nZXRDb21wb3NpdGlvblNlbGVjdGlvbihzdGFydCwgZW5kKSkKLSAgICAgICAgW1tOU0lu
cHV0TWFuYWdlciBjdXJyZW50SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0U2VsZWN0aW9uQ2hhbmdl
ZDpOU01ha2VSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpIGNsaWVudDpzZWxmXTsKLSAgICBlbHNl
IHsKLSAgICAgICAgY29yZUZyYW1lLT5lZGl0b3IoKS0+Y29uZmlybUNvbXBvc2l0aW9uV2l0aG91
dERpc3R1cmJpbmdTZWxlY3Rpb24oKTsKLSAgICAgICAgW1tOU0lucHV0TWFuYWdlciBjdXJyZW50
SW5wdXRNYW5hZ2VyXSBtYXJrZWRUZXh0QWJhbmRvbmVkOnNlbGZdOwotICAgIH0KLX0KK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1AZW5kCisvLyBUaGlzIGNsYXNzIGhhbmRsZXMgdGhlIGNv
bXBsZXRlOiBvcGVyYXRpb24uCisvLyBJdCBjb3VudHMgb24gaXRzIGhvc3QgdmlldyB0byBjYWxs
IGVuZFJldmVydGluZ0NoYW5nZTogd2hlbmV2ZXIgdGhlIGN1cnJlbnQgY29tcGxldGlvbiBuZWVk
cyB0byBiZSBhYm9ydGVkLgogCi0vKgotICAgIFRoaXMgY2xhc3MgcnVucyB0aGUgc2hvdyBmb3Ig
aGFuZGluZyB0aGUgY29tcGxldGU6IE5TVGV4dFZpZXcgb3BlcmF0aW9uLiAgSXQgY291bnRzIG9u
IGl0cyBIVE1MIHZpZXcKLSAgICB0byBjYWxsIGVuZFJldmVydGluZ0NoYW5nZTogd2hlbmV2ZXIg
dGhlIGN1cnJlbnQgY29tcGxldGlvbiBuZWVkcyB0byBiZSBhYm9ydGVkLgotIAotICAgIFRoZSBj
bGFzcyBpcyBpbiBvbmUgb2YgdHdvIG1vZGVzOiAgUG9wdXBXaW5kb3cgc2hvd2luZywgb3Igbm90
LiAgSXQgaXMgc2hvd24gd2hlbiBhIGNvbXBsZXRpb24geWllbGRzCi0gICAgbW9yZSB0aGFuIG9u
ZSBtYXRjaC4gIElmIGEgY29tcGxldGlvbiB5aWVsZHMgb25lIG9yIHplcm8gbWF0Y2hlcywgaXQg
aXMgbm90IHNob3duLCBhbmQgKip0aGVyZSBpcyBubwotICAgIHN0YXRlIGNhcnJpZWQgYWNyb3Nz
IHRvIHRoZSBuZXh0IGNvbXBsZXRpb24qKi4KLSAqLworLy8gVGhlIGNsYXNzIGlzIGluIG9uZSBv
ZiB0d28gbW9kZXM6IFBvcHVwIHdpbmRvdyBzaG93aW5nLCBvciBub3QuCisvLyBJdCBpcyBzaG93
biB3aGVuIGEgY29tcGxldGlvbiB5aWVsZHMgbW9yZSB0aGFuIG9uZSBtYXRjaC4KKy8vIElmIGEg
Y29tcGxldGlvbiB5aWVsZHMgb25lIG9yIHplcm8gbWF0Y2hlcywgaXQgaXMgbm90IHNob3duLCBh
bmQgdGhlcmUgaXMgbm8gc3RhdGUgY2FycmllZCBhY3Jvc3MgdG8gdGhlIG5leHQgY29tcGxldGlv
bi4KIAotQGltcGxlbWVudGF0aW9uIFdlYlRleHRDb21wbGV0ZUNvbnRyb2xsZXIKK0BpbXBsZW1l
bnRhdGlvbiBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIKIAotLSAoaWQpaW5pdFdpdGhIVE1M
VmlldzooV2ViSFRNTFZpZXcgKil2aWV3CistIChpZClpbml0V2l0aFdlYlZpZXc6KFdlYlZpZXcg
Kil2aWV3IEhUTUxWaWV3OihXZWJIVE1MVmlldyAqKWh0bWxWaWV3CiB7CiAgICAgc2VsZiA9IFtz
dXBlciBpbml0XTsKICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgX3Zp
ZXcgPSB2aWV3OworICAgIF9odG1sVmlldyA9IGh0bWxWaWV3OwogICAgIHJldHVybiBzZWxmOwog
fQogCkBAIC01OTE3LDcgKzcxLDcgQEAgc3RhdGljIHZvaWQgZXh0cmFjdFVuZGVybGluZXMoTlNB
dHRyaWJ1dAogewogICAgIC8vIEZJWE1FOiAzNzY5NjU0IC0gV2Ugc2hvdWxkIHByZXNlcnZlIGNh
c2Ugb2Ygc3RyaW5nIGJlaW5nIGluc2VydGVkLCBldmVuIGluIHByZWZpeCAoYnV0IHRoZW4gYWxz
byBiZQogICAgIC8vIGFibGUgdG8gcmV2ZXJ0IHRoYXQpLiAgTWltaWMgTlNUZXh0LgotICAgIFdl
YkZyYW1lICpmcmFtZSA9IFtfdmlldyBfZnJhbWVdOworICAgIFdlYkZyYW1lICpmcmFtZSA9IFtf
aHRtbFZpZXcgX2ZyYW1lXTsKICAgICBOU1N0cmluZyAqbmV3VGV4dCA9IFttYXRjaCBzdWJzdHJp
bmdGcm9tSW5kZXg6cHJlZml4TGVuZ3RoXTsKICAgICBbZnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dDpuZXdUZXh0IHNlbGVjdFJlcGxhY2VtZW50OllFUyBzbWFydFJlcGxhY2U6Tk9dOwog
fQpAQCAtNTk2NywxMyArMTIxLDEyIEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxpbmVzKE5T
QXR0cmlidXQKIC0gKHZvaWQpX3BsYWNlUG9wdXBXaW5kb3c6KE5TUG9pbnQpdG9wTGVmdAogewog
ICAgIGludCBudW1iZXJUb1Nob3cgPSBbX2NvbXBsZXRpb25zIGNvdW50XTsKLSAgICBpZiAobnVt
YmVyVG9TaG93ID4gMjApIHsKKyAgICBpZiAobnVtYmVyVG9TaG93ID4gMjApCiAgICAgICAgIG51
bWJlclRvU2hvdyA9IDIwOwotICAgIH0KIAogICAgIE5TUmVjdCB3aW5kb3dGcmFtZTsKICAgICBO
U1BvaW50IHdvcmRTdGFydCA9IHRvcExlZnQ7Ci0gICAgd2luZG93RnJhbWUub3JpZ2luID0gW1tf
dmlldyB3aW5kb3ddIGNvbnZlcnRCYXNlVG9TY3JlZW46W192aWV3IGNvbnZlcnRQb2ludDp3b3Jk
U3RhcnQgdG9WaWV3Om5pbF1dOworICAgIHdpbmRvd0ZyYW1lLm9yaWdpbiA9IFtbX3ZpZXcgd2lu
ZG93XSBjb252ZXJ0QmFzZVRvU2NyZWVuOltfaHRtbFZpZXcgY29udmVydFBvaW50OndvcmRTdGFy
dCB0b1ZpZXc6bmlsXV07CiAgICAgd2luZG93RnJhbWUuc2l6ZS5oZWlnaHQgPSBudW1iZXJUb1No
b3cgKiBbX3RhYmxlVmlldyByb3dIZWlnaHRdICsgKG51bWJlclRvU2hvdyArIDEpICogW190YWJs
ZVZpZXcgaW50ZXJjZWxsU3BhY2luZ10uaGVpZ2h0OwogICAgIHdpbmRvd0ZyYW1lLm9yaWdpbi55
IC09IHdpbmRvd0ZyYW1lLnNpemUuaGVpZ2h0OwogICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRl
cyA9IFtOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNGb250IHN5
c3RlbUZvbnRPZlNpemU6MTIuMGZdLCBOU0ZvbnRBdHRyaWJ1dGVOYW1lLCBuaWxdOwpAQCAtNjAx
Niw3ICsxNjksNyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KLSAgICAgICAg
V2ViRnJhbWUgKmZyYW1lID0gW192aWV3IF9mcmFtZV07CisgICAgICAgIFdlYkZyYW1lICpmcmFt
ZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKICAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtp
dChjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwog
ICAgICAgICBET01SYW5nZSAqd2hvbGVXb3JkID0gW2ZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJy
ZW50U2VsZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6OkVYVEVORAogICAgICAgICAgICAgZGly
ZWN0aW9uOlNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJEIGdyYW51bGFyaXR5OldvcmRHcmFu
dWxhcml0eV07CkBAIC02MDM4LDcgKzE5MSw3IEBAIHN0YXRpYyB2b2lkIGV4dHJhY3RVbmRlcmxp
bmVzKE5TQXR0cmlidXQKIAogICAgICAgICAvLyBMb29rdXAgbWF0Y2hlcwogICAgICAgICBbX2Nv
bXBsZXRpb25zIHJlbGVhc2VdOwotICAgICAgICBfY29tcGxldGlvbnMgPSBbY2hlY2tlciBjb21w
bGV0aW9uc0ZvclBhcnRpYWxXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW3ByZWZpeFN0ciBsZW5n
dGhdKSBpblN0cmluZzpwcmVmaXhTdHIgbGFuZ3VhZ2U6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhU
YWc6W1tfdmlldyBfd2ViVmlld10gc3BlbGxDaGVja2VyRG9jdW1lbnRUYWddXTsKKyAgICAgICAg
X2NvbXBsZXRpb25zID0gW2NoZWNrZXIgY29tcGxldGlvbnNGb3JQYXJ0aWFsV29yZFJhbmdlOk5T
TWFrZVJhbmdlKDAsIFtwcmVmaXhTdHIgbGVuZ3RoXSkgaW5TdHJpbmc6cHJlZml4U3RyIGxhbmd1
YWdlOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOltfdmlldyBzcGVsbENoZWNrZXJEb2N1bWVu
dFRhZ11dOwogICAgICAgICBbX2NvbXBsZXRpb25zIHJldGFpbl07CiAgICAgCiAgICAgICAgIGlm
ICghX2NvbXBsZXRpb25zIHx8IFtfY29tcGxldGlvbnMgY291bnRdID09IDApIHsKQEAgLTYwNzIs
MTMgKzIyNSwxMyBAQCBzdGF0aWMgdm9pZCBleHRyYWN0VW5kZXJsaW5lcyhOU0F0dHJpYnV0CiAg
ICAgICAgIF9wb3B1cFdpbmRvdyA9IG5pbDsKIAogICAgICAgICBpZiAocmV2ZXJ0Q2hhbmdlKSB7
Ci0gICAgICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX3ZpZXcgX2ZyYW1lXTsKKyAgICAgICAg
ICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKICAgICAgICAgICAgIFtm
cmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0Ol9vcmlnaW5hbFN0cmluZyBzZWxlY3RSZXBs
YWNlbWVudDpZRVMgc21hcnRSZXBsYWNlOk5PXTsKLSAgICAgICAgfSBlbHNlIGlmIChbX3ZpZXcg
X2hhc1NlbGVjdGlvbl0pIHsKKyAgICAgICAgfSBlbHNlIGlmIChbX2h0bWxWaWV3IF9oYXNTZWxl
Y3Rpb25dKSB7CiAgICAgICAgICAgICBpZiAoZ29MZWZ0KQotICAgICAgICAgICAgICAgIFtfdmll
dyBtb3ZlQmFja3dhcmQ6bmlsXTsKKyAgICAgICAgICAgICAgICBbX2h0bWxWaWV3IG1vdmVCYWNr
d2FyZDpuaWxdOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFtfdmlldyBtb3Zl
Rm9yd2FyZDpuaWxdOworICAgICAgICAgICAgICAgIFtfaHRtbFZpZXcgbW92ZUZvcndhcmQ6bmls
XTsKICAgICAgICAgfQogICAgICAgICBbX29yaWdpbmFsU3RyaW5nIHJlbGVhc2VdOwogICAgICAg
ICBfb3JpZ2luYWxTdHJpbmcgPSBuaWw7CkBAIC02MTY5LDI2NSArMzIyLDMgQEAgc3RhdGljIHZv
aWQgZXh0cmFjdFVuZGVybGluZXMoTlNBdHRyaWJ1dAogfQogCiBAZW5kCi0KLUBpbXBsZW1lbnRh
dGlvbiBXZWJIVE1MVmlldyAoV2ViRG9jdW1lbnRQcml2YXRlUHJvdG9jb2xzKQotCi0tIChOU1Jl
Y3Qpc2VsZWN0aW9uUmVjdAotewotICAgIGlmIChbc2VsZiBfaGFzU2VsZWN0aW9uXSkKLSAgICAg
ICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlvbkJvdW5kcygpOwotICAgIHJl
dHVybiBOU1plcm9SZWN0OwotfQotCi0tIChOU0FycmF5ICopc2VsZWN0aW9uVGV4dFJlY3RzCi17
Ci0gICAgaWYgKCFbc2VsZiBfaGFzU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBsaXN0OwotICAgIGlmIChGcmFtZSogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKSkKLSAgICAgICAgY29yZUZyYW1lLT5zZWxlY3Rpb25UZXh0
UmVjdHMobGlzdCk7Ci0KLSAgICB1bnNpZ25lZCBzaXplID0gbGlzdC5zaXplKCk7Ci0gICAgTlNN
dXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aENh
cGFjaXR5OnNpemVdIGF1dG9yZWxlYXNlXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDpbTlNWYWx1ZSB2YWx1ZVdpdGhS
ZWN0Omxpc3RbaV1dXTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0tIChOU1ZpZXcg
KilzZWxlY3Rpb25WaWV3Ci17Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKE5TSW1hZ2UgKilz
ZWxlY3Rpb25JbWFnZUZvcmNpbmdCbGFja1RleHQ6KEJPT0wpZm9yY2VCbGFja1RleHQKLXsKLSAg
ICBpZiAoW3NlbGYgX2hhc1NlbGVjdGlvbl0pCi0gICAgICAgIHJldHVybiBjb3JlKFtzZWxmIF9m
cmFtZV0pLT5zZWxlY3Rpb25JbWFnZShmb3JjZUJsYWNrVGV4dCk7Ci0gICAgcmV0dXJuIG5pbDsK
LX0KLQotLSAoTlNSZWN0KXNlbGVjdGlvbkltYWdlUmVjdAotewotICAgIGlmIChbc2VsZiBfaGFz
U2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIGNvcmUoW3NlbGYgX2ZyYW1lXSktPnNlbGVjdGlv
bkJvdW5kcygpOwotICAgIHJldHVybiBOU1plcm9SZWN0OwotfQotCi0tIChOU0FycmF5ICopcGFz
dGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uCi17Ci0gICAgaWYgKFtzZWxmIF9jYW5TbWFydENvcHlP
ckRlbGV0ZV0pIHsKLSAgICAgICAgTlNNdXRhYmxlQXJyYXkgKnR5cGVzID0gW1tbW3NlbGYgY2xh
c3NdIF9zZWxlY3Rpb25QYXN0ZWJvYXJkVHlwZXNdIG11dGFibGVDb3B5XSBhdXRvcmVsZWFzZV07
Ci0gICAgICAgIFt0eXBlcyBhZGRPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwotICAg
ICAgICByZXR1cm4gdHlwZXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFtbc2VsZiBj
bGFzc10gX3NlbGVjdGlvblBhc3RlYm9hcmRUeXBlc107Ci0gICAgfQotfQotCi0tICh2b2lkKXdy
aXRlU2VsZWN0aW9uV2l0aFBhc3RlYm9hcmRUeXBlczooTlNBcnJheSAqKXR5cGVzIHRvUGFzdGVi
b2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZAotewotICAgIFtzZWxmIF93cml0ZVNlbGVj
dGlvbldpdGhQYXN0ZWJvYXJkVHlwZXM6dHlwZXMgdG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmQgY2Fj
aGVkQXR0cmlidXRlZFN0cmluZzpuaWxdOwotfQotCi0tICh2b2lkKXNlbGVjdEFsbAotewotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmIChjb3JlRnJh
bWUpCi0gICAgICAgIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdEFsbCgpOwotfQotCi0t
ICh2b2lkKWRlc2VsZWN0QWxsCi17Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLT5jbGVhcigpOwotfQotCi0tIChOU1N0cmluZyAqKXN0cmluZwot
ewotICAgIHJldHVybiBbW3NlbGYgX2ZyYW1lXSBfc3RyaW5nRm9yUmFuZ2U6W3NlbGYgX2RvY3Vt
ZW50UmFuZ2VdXTsKLX0KLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZVN0cmlu
Z0Zyb21ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQotewotICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZzsKLSNpZiAhTE9HX0RJU0FCTEVEICAgICAgICAKLSAgICBkb3Vi
bGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSNlbmRpZiAgICAKLSAgICBh
dHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBfaW5pdFdpdGhE
T01SYW5nZTpyYW5nZV0gYXV0b3JlbGVhc2VdOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBkb3Vi
bGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OwotICAgIExP
RyhUaW1pbmcsICJjcmVhdGluZyBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHNlbGVjdGlvbiB0b29r
ICVmIHNlY29uZHMuIiwgZHVyYXRpb24pOwotI2VuZGlmCi0gICAgcmV0dXJuIGF0dHJpYnV0ZWRT
dHJpbmc7Ci19Ci0KLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKLXsK
LSAgICBET01Eb2N1bWVudCAqZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07
Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJp
YnV0ZVN0cmluZ0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXTsKLSAgICBp
ZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgRG9jdW1lbnQqIGNvcmVEb2N1bWVudCA9
IGNvcmUoZG9jdW1lbnQpOwotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRl
ZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2U6UmFuZ2U6OmNyZWF0ZShjb3Jl
RG9jdW1lbnQsIGNvcmVEb2N1bWVudCwgMCwgY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQtPmNo
aWxkTm9kZUNvdW50KCkpLmdldCgpXTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJp
bmc7Ci19Ci0KLS0gKE5TU3RyaW5nICopc2VsZWN0ZWRTdHJpbmcKLXsKLSAgICByZXR1cm4gW1tz
ZWxmIF9mcmFtZV0gX3NlbGVjdGVkU3RyaW5nXTsKLX0KLQotLSAoTlNBdHRyaWJ1dGVkU3RyaW5n
ICopc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCi17Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICph
dHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZVN0cmluZ0Zyb21ET01SYW5nZTpbc2Vs
ZiBfc2VsZWN0ZWRSYW5nZV1dOwotICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewotICAgICAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICAgICAgaWYgKGNv
cmVGcmFtZSkgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgICAg
ICBhdHRyaWJ1dGVkU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBfd2ViX2F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2U6cmFuZ2UuZ2V0KCldOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBhdHRyaWJ1dGVkU3RyaW5nOwotfQotCi0tIChCT09MKXN1cHBvcnRzVGV4dEVuY29kaW5nCi17
Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotLSAoQk9PTClzZWFyY2hGb3I6KE5TU3RyaW5nICopc3Ry
aW5nIGRpcmVjdGlvbjooQk9PTClmb3J3YXJkIGNhc2VTZW5zaXRpdmU6KEJPT0wpY2FzZUZsYWcg
d3JhcDooQk9PTCl3cmFwRmxhZyBzdGFydEluU2VsZWN0aW9uOihCT09MKXN0YXJ0SW5TZWxlY3Rp
b24KLXsKLSAgICBpZiAoIVtzdHJpbmcgbGVuZ3RoXSkKLSAgICAgICAgcmV0dXJuIE5POwotICAg
IEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5maW5kU3RyaW5nKHN0cmluZywgZm9yd2FyZCwgY2FzZUZsYWcs
IHdyYXBGbGFnLCBzdGFydEluU2VsZWN0aW9uKTsKLX0KLQotQGVuZAotCi1AaW1wbGVtZW50YXRp
b24gV2ViSFRNTFZpZXcgKFdlYkRvY3VtZW50SW50ZXJuYWxQcm90b2NvbHMpCi0KLS0gKE5TRGlj
dGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBvaW50Ci17Ci0gICAgcmV0dXJuIFtz
ZWxmIGVsZW1lbnRBdFBvaW50OnBvaW50IGFsbG93U2hhZG93Q29udGVudDpOT107Ci19Ci0KLS0g
KE5TRGljdGlvbmFyeSAqKWVsZW1lbnRBdFBvaW50OihOU1BvaW50KXBvaW50IGFsbG93U2hhZG93
Q29udGVudDooQk9PTClhbGxvdwotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiBbW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVz
dWx0OmNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KEludFBv
aW50KHBvaW50KSwgYWxsb3cpXSBhdXRvcmVsZWFzZV07Ci19Ci0KLS0gKE5TVUludGVnZXIpbWFy
a0FsbE1hdGNoZXNGb3JUZXh0OihOU1N0cmluZyAqKXN0cmluZyBjYXNlU2Vuc2l0aXZlOihCT09M
KWNhc2VGbGFnIGxpbWl0OihOU1VJbnRlZ2VyKWxpbWl0Ci17Ci0gICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBjb3JlRnJhbWUtPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChzdHJp
bmcsIGNhc2VGbGFnLCBsaW1pdCk7Ci19Ci0KLS0gKHZvaWQpc2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZDooQk9PTCluZXdWYWx1ZQotewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm47
Ci0gICAgY29yZUZyYW1lLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKG5ld1Zh
bHVlKTsKLX0KLQotLSAoQk9PTCltYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkCi17Ci0g
ICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNv
cmVGcmFtZSAmJiBjb3JlRnJhbWUtPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsK
LX0KLQotLSAodm9pZCl1bm1hcmtBbGxUZXh0TWF0Y2hlcwotewotICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICBy
ZXR1cm47Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpOwot
ICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2N1bWVudC0+cmVtb3Zl
TWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLX0KLQotLSAoTlNBcnJheSAqKXJl
Y3RzRm9yVGV4dE1hdGNoZXMKLXsKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsKLSAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFy
cmF5XTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb3JlRnJhbWUtPmRvY3VtZW50KCk7Ci0g
ICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5XTsKLQotICAg
IFZlY3RvcjxJbnRSZWN0PiByZWN0cyA9IGRvY3VtZW50LT5yZW5kZXJlZFJlY3RzRm9yTWFya2Vy
cyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKLSAgICB1bnNpZ25lZCBjb3VudCA9IHJlY3Rz
LnNpemUoKTsKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5OmNvdW50XTsKLSAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBjb3VudDsgKytpbmRleCkKLSAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6W05TVmFsdWUg
dmFsdWVXaXRoUmVjdDpyZWN0c1tpbmRleF1dXTsgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotQGVuZAotCi0vLyBUaGlzIGlzIHVzZWQgYnkgQXBwS2l0IGFuZCBpcyBpbmNsdWRlZCBoZXJl
IHNvIHRoYXQgV2ViRGF0YVByb3RvY29sU2NoZW1lIGlzIG9ubHkgZGVmaW5lZCBvbmNlLgotQGlt
cGxlbWVudGF0aW9uIE5TVVJMIChXZWJEYXRhVVJMKQotCi0rIChOU1VSTCAqKV93ZWJfdW5pcXVl
V2ViRGF0YVVSTAotewotICAgIENGVVVJRFJlZiBVVUlEUmVmID0gQ0ZVVUlEQ3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQpOwotICAgIE5TU3RyaW5nICpVVUlEU3RyaW5nID0gKE5TU3RyaW5nICop
Q0ZVVUlEQ3JlYXRlU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIFVVSURSZWYpOwotICAgIENG
UmVsZWFzZShVVUlEUmVmKTsKLSAgICBOU1VSTCAqVVJMID0gW05TVVJMIFVSTFdpdGhTdHJpbmc6
W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIlQDovLyVAIiwgV2ViRGF0YVByb3RvY29sU2No
ZW1lLCBVVUlEU3RyaW5nXV07Ci0gICAgQ0ZSZWxlYXNlKFVVSURTdHJpbmcpOwotICAgIHJldHVy
biBVUkw7Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlJlc3BvbmRlckNoYWluU2lu
awotCi0tIChpZClpbml0V2l0aFJlc3BvbmRlckNoYWluOihOU1Jlc3BvbmRlciAqKWNoYWluCi17
Ci0gICAgc2VsZiA9IFtzdXBlciBpbml0XTsKLSAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4gPSBj
aGFpbjsKLSAgICB3aGlsZSAoTlNSZXNwb25kZXIgKm5leHQgPSBbX2xhc3RSZXNwb25kZXJJbkNo
YWluIG5leHRSZXNwb25kZXJdKQotICAgICAgICBfbGFzdFJlc3BvbmRlckluQ2hhaW4gPSBuZXh0
OwotICAgIFtfbGFzdFJlc3BvbmRlckluQ2hhaW4gc2V0TmV4dFJlc3BvbmRlcjpzZWxmXTsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZXRhY2gKLXsKLSAgICBbX2xhc3RSZXNwb25k
ZXJJbkNoYWluIHNldE5leHRSZXNwb25kZXI6bmlsXTsKLSAgICBfbGFzdFJlc3BvbmRlckluQ2hh
aW4gPSBuaWw7Ci19Ci0KLS0gKEJPT0wpcmVjZWl2ZWRVbmhhbmRsZWRDb21tYW5kCi17Ci0gICAg
cmV0dXJuIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQ7Ci19Ci0KLS0gKHZvaWQpbm9SZXNwb25k
ZXJGb3I6KFNFTClzZWxlY3RvcgotewotICAgIF9yZWNlaXZlZFVuaGFuZGxlZENvbW1hbmQgPSBZ
RVM7Ci19Ci0KLS0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3RvcjooU0VMKXNlbGVjdG9yCi17Ci0g
ICAgX3JlY2VpdmVkVW5oYW5kbGVkQ29tbWFuZCA9IFlFUzsKLX0KLQotLSAoQk9PTCl0cnlUb1Bl
cmZvcm06KFNFTClhY3Rpb24gd2l0aDooaWQpb2JqZWN0Ci17Ci0gICAgX3JlY2VpdmVkVW5oYW5k
bGVkQ29tbWFuZCA9IFlFUzsKLSAgICByZXR1cm4gWUVTOwotfQotCi1AZW5kCkluZGV4OiBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaAkocmV2aXNpb24gNDQzMDkpCisr
KyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVUlEZWxlZ2F0ZVByaXZhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI2LDQgKzEyNiwxMyBAQCBlbnVtIHsgCiAKIC0gKEJPT0wpd2ViVmlldzooV2ViVmll
dyAqKXNlbmRlciBmcmFtZTooV2ViRnJhbWUgKilmcmFtZSByZXF1ZXN0R2VvbG9jYXRpb25QZXJt
aXNzaW9uOihXZWJHZW9sb2NhdGlvbiAqKWdlb2xvY2F0aW9uIHNlY3VyaXR5T3JpZ2luOihXZWJT
ZWN1cml0eU9yaWdpbiAqKW9yaWdpbjsKIAorLyohCisgICAgQG1ldGhvZCB3ZWJWaWV3OnByaW50
RnJhbWU6CisgICAgQGFic3RyYWN0IEluZm9ybXMgdGhhdCBhIFdlYkZyYW1lIG5lZWRzIHRvIGJl
IHByaW50ZWQKKyAgICBAcGFyYW0gd2ViVmlldyBUaGUgV2ViVmlldyBzZW5kaW5nIHRoZSBkZWxl
Z2F0ZSBtZXRob2QKKyAgICBAcGFyYW0gZnJhbWVWaWV3IFRoZSBXZWJGcmFtZSBuZWVkaW5nIHRv
IGJlIHByaW50ZWQKKyAgICBAZGlzY3Vzc2lvbiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBh
IHNjcmlwdCBvciB1c2VyIHJlcXVlc3RzIHRoZSBwYWdlIHRvIGJlIHByaW50ZWQuCisqLworLSAo
dm9pZCl3ZWJWaWV3OihXZWJWaWV3ICopc2VuZGVyIHByaW50RnJhbWU6KFdlYkZyYW1lICopZnJh
bWU7CisKIEBlbmQKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA0NDMwOSkKKysr
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4
Nyw3IEBACiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCIKICNpbXBvcnQgIldlYlNj
cmlwdERlYnVnRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCAiV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJUZXh0SXRl
cmF0b3IuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldlYlVJRGVsZWdh
dGVQcml2YXRlLmgiCkBAIC0xNTMsNiArMTU0LDI2IEBACiAjaW1wb3J0IDxXZWJLaXQvV2ViRGFz
aGJvYXJkUmVnaW9uLmg+CiAjZW5kaWYKIAorQGNsYXNzIE5TVGV4dElucHV0Q29udGV4dDsKKwor
QGludGVyZmFjZSBOU1Jlc3BvbmRlciAoV2ViTlNSZXNwb25kZXJEZXRhaWxzKQorLSAoTlNUZXh0
SW5wdXRDb250ZXh0ICopaW5wdXRDb250ZXh0OworQGVuZAorCitAaW50ZXJmYWNlIE5TU3BlbGxD
aGVja2VyIChXZWJOU1NwZWxsQ2hlY2tlckRldGFpbHMpCistICh2b2lkKV9wcmVmbGlnaHRDaG9z
ZW5TcGVsbFNlcnZlcjsKK0BlbmQKKworQGludGVyZmFjZSBOU1ZpZXcgKFdlYk5TVmlld0RldGFp
bHMpCistIChOU1ZpZXcgKilfaGl0VGVzdDooTlNQb2ludCAqKWFQb2ludCBkcmFnVHlwZXM6KE5T
U2V0ICopdHlwZXM7CistICh2b2lkKV9hdXRvc2Nyb2xsRm9yRHJhZ2dpbmdJbmZvOihpZClkcmFn
SW5mbyB0aW1lRGVsdGE6KE5TVGltZUludGVydmFsKXJlcGVhdERlbHRhOworLSAoQk9PTClfc2hv
dWxkQXV0b3Njcm9sbEZvckRyYWdnaW5nSW5mbzooaWQpZHJhZ0luZm87CitAZW5kCisKK0BpbnRl
cmZhY2UgTlNXaW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykgCistIChpZClfb2xkRmlyc3RSZXNw
b25kZXJCZWZvcmVCZWNvbWluZzsKK0BlbmQKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1
c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0zMDIsMzIgKzMyMywxOSBAQCBtYWNybyh5YW5rQW5k
U2VsZWN0KSBcCiAjZGVmaW5lIFVzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5IEAi
X2lzVXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nIgogI2VuZGlmICAgICAgICAgICAgCiAKLQog
c3RhdGljIEJPT0wgc19kaWRTZXRDYWNoZU1vZGVsOwogc3RhdGljIFdlYkNhY2hlTW9kZWwgc19j
YWNoZU1vZGVsID0gV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmlld2VyOwogCiBzdGF0aWMgQk9PTCBh
cHBsaWNhdGlvbklzVGVybWluYXRpbmc7CiBzdGF0aWMgaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50
Q291bnQgPSAwOwogCitzdGF0aWMgV2ViVmlldyAqbGFzdE1vdXNlb3ZlclZpZXc7CisKICNpZm5k
ZWYgTkRFQlVHCiBzdGF0aWMgY29uc3QgY2hhciB3ZWJWaWV3SXNPcGVuW10gPSAiQXQgbGVhc3Qg
b25lIFdlYlZpZXcgaXMgc3RpbGwgb3Blbi4iOwogI2VuZGlmCiAKLUBpbnRlcmZhY2UgTlNTcGVs
bENoZWNrZXIgKEFwcEtpdFNlY3JldHNJS25vdykKLS0gKHZvaWQpX3ByZWZsaWdodENob3NlblNw
ZWxsU2VydmVyOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TVmlldyAoQXBwS2l0U2VjcmV0c0lLbm93
KQotLSAoTlNWaWV3ICopX2hpdFRlc3Q6KE5TUG9pbnQgKilhUG9pbnQgZHJhZ1R5cGVzOihOU1Nl
dCAqKXR5cGVzOwotLSAodm9pZClfYXV0b3Njcm9sbEZvckRyYWdnaW5nSW5mbzooaWQpZHJhZ0lu
Zm8gdGltZURlbHRhOihOU1RpbWVJbnRlcnZhbClyZXBlYXREZWx0YTsKLS0gKEJPT0wpX3Nob3Vs
ZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0luZm86KGlkKWRyYWdJbmZvOwotQGVuZAotCi1AaW50ZXJm
YWNlIE5TV2luZG93IChBcHBLaXRTZWNyZXRzSUtub3cpIAotLSAoaWQpX29sZEZpcnN0UmVzcG9u
ZGVyQmVmb3JlQmVjb21pbmc7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNPYmplY3QgKFZhbGlkYXRl
V2l0aG91dERlbGVnYXRlKQorQGludGVyZmFjZSBOU09iamVjdCAoV2ViVmFsaWRhdGVXaXRob3V0
RGVsZWdhdGUpCiAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0RGVsZWdh
dGU6KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtOwogQGVuZAogCkBAIC00
MjEsNyArNDI5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgd2ViVmlld0lzT3BlbltdID0gIkF0IAog
ICAgIEJPT0wgc2hvdWxkVXBkYXRlV2hpbGVPZmZzY3JlZW47CiAgICAgCiAgICAgLy8gV2hlbiB0
aGlzIGZsYWcgaXMgc2V0LCB3ZSB3aWxsIG5vdCBtYWtlIGFueSBzdWJ2aWV3cyB1bmRlcm5lYXRo
IHRoaXMgV2ViVmlldy4gIFRoaXMgbWVhbnMgbm8gV2ViRnJhbWVWaWV3cyBhbmQgbm8gV2ViSFRN
TFZpZXdzLgotICAgIEJPT0wgdXNlRG9jdW1lbnRWaWV3czsKKyAgICBCT09MIHVzZXNEb2N1bWVu
dFZpZXdzOwogICAgIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAvLyBX
aGVuIHRoaXMgZmxhZyBpcyBzZXQsIG5leHQgdGltZSBhIFdlYkhUTUxWaWV3IGRyYXdzLCBpdCBu
ZWVkcyB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIHNjcmVlbiB1cGRhdGVzCkBAIC00MzYsNiArNDQ0
LDE5IEBAIHN0YXRpYyBjb25zdCBjaGFyIHdlYlZpZXdJc09wZW5bXSA9ICJBdCAKICAgICBOU1Bh
c3RlYm9hcmQgKmluc2VydGlvblBhc3RlYm9hcmQ7CiAgICAgICAgICAgICAKICAgICBOU1NpemUg
bGFzdExheW91dFNpemU7CisKKyAgICBCT09MIGlnbm9yaW5nTW91c2VEcmFnZ2VkRXZlbnRzOwor
CisgICAgTlNFdmVudCAqbW91c2VEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhl
IGV2ZW50LgorICAgIEJPT0wgaGFuZGxpbmdNb3VzZURvd25FdmVudDsKKyAgICBOU0V2ZW50ICpr
ZXlEb3duRXZlbnQ7IC8vIEtlcHQgYWZ0ZXIgaGFuZGxpbmcgdGhlIGV2ZW50LgorCisgICAgV2Vi
VGV4dENvbXBsZXRpb25Db250cm9sbGVyICpjb21wbGV0aW9uQ29udHJvbGxlcjsKKworICAgIE5T
VGltZXIgKmF1dG9zY3JvbGxUaW1lcjsKKyAgICBOU0V2ZW50ICphdXRvc2Nyb2xsVHJpZ2dlckV2
ZW50OworCisgICAgQ0ZSdW5Mb29wVGltZXJSZWYgdXBkYXRlTW91c2VvdmVyVGltZXI7CiB9CiBA
ZW5kCiAKQEAgLTc1Myw3ICs3NzQsNyBAQCBzdGF0aWMgYm9vbCBydW5uaW5nVGlnZXJNYWlsKCkK
IAogLSAoQk9PTClfdXNlc0RvY3VtZW50Vmlld3MKIHsKLSAgICByZXR1cm4gX3ByaXZhdGUtPnVz
ZURvY3VtZW50Vmlld3M7CisgICAgcmV0dXJuIF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3czsK
IH0KIAogLSAodm9pZClfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOihOU1N0cmlu
ZyAqKWZyYW1lTmFtZSBncm91cE5hbWU6KE5TU3RyaW5nICopZ3JvdXBOYW1lIHVzZXNEb2N1bWVu
dFZpZXdzOihCT09MKXVzZXNEb2N1bWVudFZpZXdzCkBAIC03NzIsMTAgKzc5MywxMCBAQCBzdGF0
aWMgYm9vbCBydW5uaW5nVGlnZXJNYWlsKCkKICAgICBfcHJpdmF0ZS0+bWFpbkZyYW1lRG9jdW1l
bnRSZWFkeSA9IE5POwogICAgIF9wcml2YXRlLT5kcmF3c0JhY2tncm91bmQgPSBZRVM7CiAgICAg
X3ByaXZhdGUtPmJhY2tncm91bmRDb2xvciA9IFtbTlNDb2xvciBjb2xvcldpdGhEZXZpY2VXaGl0
ZToxIGFscGhhOjFdIHJldGFpbl07Ci0gICAgX3ByaXZhdGUtPnVzZURvY3VtZW50Vmlld3MgPSB1
c2VzRG9jdW1lbnRWaWV3czsKKyAgICBfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MgPSB1c2Vz
RG9jdW1lbnRWaWV3czsKIAogICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gbmlsOwotICAg
IGlmIChfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cykgeworICAgIGlmIChfcHJpdmF0ZS0+dXNl
c0RvY3VtZW50Vmlld3MpIHsKICAgICAgICAgTlNSZWN0IGYgPSBbc2VsZiBmcmFtZV07CiAgICAg
ICAgIGZyYW1lVmlldyA9IFtbV2ViRnJhbWVWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOiBOU01h
a2VSZWN0KDAsMCxmLnNpemUud2lkdGgsZi5zaXplLmhlaWdodCldOwogICAgICAgICBbZnJhbWVW
aWV3IHNldEF1dG9yZXNpemluZ01hc2s6TlNWaWV3V2lkdGhTaXphYmxlIHwgTlNWaWV3SGVpZ2h0
U2l6YWJsZV07CkBAIC04OTksNyArOTIwLDcgQEAgc3RhdGljIGJvb2wgcnVubmluZ1RpZ2VyTWFp
bCgpCiAKIC0gKHZvaWQpZHJhd1NpbmdsZVJlY3Q6KE5TUmVjdClyZWN0CiB7Ci0gICAgQVNTRVJU
KCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyk7CisgICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNl
c0RvY3VtZW50Vmlld3MpOwogICAgIAogICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhp
Y3NTdGF0ZV07CiAgICAgTlNSZWN0Q2xpcChyZWN0KTsKQEAgLTkyMywxOCArOTQ0LDE4IEBAIHN0
YXRpYyBib29sIHJ1bm5pbmdUaWdlck1haWwoKQogCiAtIChCT09MKWlzRmxpcHBlZCAKIHsKLSAg
ICByZXR1cm4gX3ByaXZhdGUgJiYgIV9wcml2YXRlLT51c2VEb2N1bWVudFZpZXdzOworICAgIHJl
dHVybiBfcHJpdmF0ZSAmJiAhX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzOwogfQogCiAtICh2
b2lkKXNldEZyYW1lU2l6ZTooTlNTaXplKXNpemUKIHsKICAgICBpZiAoIU5TRXF1YWxTaXplcyhf
cHJpdmF0ZS0+bGFzdExheW91dFNpemUsIHNpemUpKSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9
IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IFtzZWxmIF9t
YWluQ29yZUZyYW1lXTsKICAgICAgICAgLy8gRklYTUU6IFZpZXdsZXNzIFdlYktpdCBpcyBicm9r
ZW4gd2l0aCBTYWZhcmkgYmFubmVycyAoZS5nLiwgdGhlIEZpbmQgYmFubmVyKS4gIFdlJ2xsIGhh
dmUgdG8gZmlndXJlIG91dCBhIHdheSBmb3IKICAgICAgICAgLy8gU2FmYXJpIHRvIGNvbW11bmlj
YXRlIHRoYXQgdGhpcyBzcGFjZSBpcyBiZWluZyBjb25zdW1lZC4gIEZvciBXZWJLaXQgd2l0aCBk
b2N1bWVudCB2aWV3cywgdGhlcmUncyBubwogICAgICAgICAvLyBuZWVkIHRvIGRvIGFuIGV4cGxp
Y2l0IHJlc2l6ZSwgc2luY2UgV2ViRnJhbWVWaWV3cyBoYXZlIGF1dG8gcmVzaXppbmcgdHVybmVk
IG9uIGFuZCB3aWxsIGhhbmRsZSBjaGFuZ2luZwogICAgICAgICAvLyB0aGVpciBib3VuZHMgYXV0
b21hdGljYWxseS4gU2VlIDxyZGFyOi8vcHJvYmxlbS82ODM1NTczPiBmb3IgZGV0YWlscy4KLSAg
ICAgICAgaWYgKCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cykKKyAgICAgICAgaWYgKCFfcHJp
dmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpCiAgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5yZXNp
emUoSW50U2l6ZShzaXplKSk7CiAgICAgICAgIGZyYW1lLT52aWV3KCktPnNldE5lZWRzTGF5b3V0
KCk7CiAgICAgICAgIFtzZWxmIHNldE5lZWRzRGlzcGxheTpZRVNdOwpAQCAtOTQ1LDE5ICs5NjYs
MjEgQEAgc3RhdGljIGJvb2wgcnVubmluZ1RpZ2VyTWFpbCgpCiB9CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpIHx8ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQorCiAtICh2
b2lkKV92aWV3V2lsbERyYXdJbnRlcm5hbAogewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUoW3Nl
bGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVd
OwogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+dmlldygpKQogICAgICAgICBmcmFtZS0+dmlldygp
LT5sYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogfQorCiAjZW5kaWYKIAogI2lmbmRlZiBCVUlM
RElOR19PTl9USUdFUgogCiAtICh2b2lkKXZpZXdXaWxsRHJhdwogewotICAgIGlmICghX3ByaXZh
dGUtPnVzZURvY3VtZW50Vmlld3MpCisgICAgaWYgKCFfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmll
d3MpCiAgICAgICAgIFtzZWxmIF92aWV3V2lsbERyYXdJbnRlcm5hbF07CiAgICAgW3N1cGVyIHZp
ZXdXaWxsRHJhd107CiB9CkBAIC05NjcsNyArOTkwLDcgQEAgc3RhdGljIGJvb2wgcnVubmluZ1Rp
Z2VyTWFpbCgpCiAKIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiB7Ci0gICAgaWYgKF9w
cml2YXRlLT51c2VEb2N1bWVudFZpZXdzKQorICAgIGlmIChfcHJpdmF0ZS0+dXNlc0RvY3VtZW50
Vmlld3MpCiAgICAgICAgIHJldHVybiBbc3VwZXIgZHJhd1JlY3Q6cmVjdF07CiAgICAgCiAgICAg
QVNTRVJUX01BSU5fVEhSRUFEKCk7CkBAIC0xMTU5LDYgKzExODIsOSBAQCBzdGF0aWMgYm9vbCBm
YXN0RG9jdW1lbnRUZWFyZG93bkVuYWJsZWQoCiAgICAgaWYgKCFfcHJpdmF0ZSB8fCBfcHJpdmF0
ZS0+Y2xvc2VkKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobGFzdE1vdXNlb3ZlclZpZXcg
PT0gc2VsZikKKyAgICAgICAgbGFzdE1vdXNlb3ZlclZpZXcgPSBuaWw7CisKICNpZm5kZWYgTkRF
QlVHCiAgICAgV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXI6OmNhbmNlbE1lc3NhZ2VTdXBwcmVz
c2lvbih3ZWJWaWV3SXNPcGVuKTsKICNlbmRpZgpAQCAtMTE3MCw3ICsxMTk2LDcgQEAgc3RhdGlj
IGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pKQor
ICAgIGlmIChGcmFtZSogbWFpbkZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdKQogICAgICAg
ICBtYWluRnJhbWUtPmxvYWRlcigpLT5kZXRhY2hGcm9tUGFyZW50KCk7CiAKICAgICBbc2VsZiBf
cmVtb3ZlRnJvbUFsbFdlYlZpZXdzU2V0XTsKQEAgLTE5MzAsNyArMTk1Niw3IEBAIFdlYlNjcmlw
dERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gKIC0gKE5TRGljdGlvbmFyeSAqKV9kYXNo
Ym9hcmRSZWdpb25zCiB7CiAgICAgLy8gT25seSByZXR1cm4gcmVnaW9ucyBmcm9tIG1haW4gZnJh
bWUuCi0gICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAg
RnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIW1haW5G
cmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpyZWdp
b25zID0gbWFpbkZyYW1lLT5kYXNoYm9hcmRSZWdpb25zRGljdGlvbmFyeSgpOwpAQCAtMjA1MCw4
ICsyMDc2LDcgQEAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaAogCiAt
ICh2b2lkKXNldFByb2hpYml0c01haW5GcmFtZVNjcm9sbGluZzooQk9PTClwcm9oaWJpdHMKIHsK
LSAgICBGcmFtZSogbWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKLSAgICBpZiAo
bWFpbkZyYW1lKQorICAgIGlmIChGcmFtZSogbWFpbkZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJh
bWVdKQogICAgICAgICBtYWluRnJhbWUtPnZpZXcoKS0+c2V0UHJvaGliaXRzU2Nyb2xsaW5nKHBy
b2hpYml0cyk7CiB9CiAKQEAgLTIwNjMsMTQgKzIwODgsMTMgQEAgV2ViU2NyaXB0RGVidWdEZWxl
Z2F0ZUltcGxlbWVudGF0aW9uQ2FjaAogCiAtICh2b2lkKV9zZXRJblZpZXdTb3VyY2VNb2RlOihC
T09MKWZsYWcKIHsKLSAgICBGcmFtZSogbWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVd
KTsKLSAgICBpZiAobWFpbkZyYW1lKQorICAgIGlmIChGcmFtZSogbWFpbkZyYW1lID0gW3NlbGYg
X21haW5Db3JlRnJhbWVdKQogICAgICAgICBtYWluRnJhbWUtPnNldEluVmlld1NvdXJjZU1vZGUo
ZmxhZyk7CiB9CiAKIC0gKEJPT0wpX2luVmlld1NvdXJjZU1vZGUKIHsKLSAgICBGcmFtZSogbWFp
bkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogbWFpbkZyYW1lID0g
W3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIHJldHVybiBtYWluRnJhbWUgJiYgbWFpbkZyYW1l
LT5pblZpZXdTb3VyY2VNb2RlKCk7CiB9CiAKQEAgLTIxMTMsMTMgKzIxMzcsMTMgQEAgV2ViU2Ny
aXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaAogCiAtICh2b2lkKV9hdHRhY2hTY3Jp
cHREZWJ1Z2dlclRvQWxsRnJhbWVzCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBjb3JlKFtz
ZWxmIG1haW5GcmFtZV0pOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KCkpCiAgICAgICAgIFtraXQo
ZnJhbWUpIF9hdHRhY2hTY3JpcHREZWJ1Z2dlcl07CiB9CiAKIC0gKHZvaWQpX2RldGFjaFNjcmlw
dERlYnVnZ2VyRnJvbUFsbEZyYW1lcwogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gY29yZShb
c2VsZiBtYWluRnJhbWVdKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VO
ZXh0KCkpCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBba2l0
KGZyYW1lKSBfZGV0YWNoU2NyaXB0RGVidWdnZXJdOwogfQogCkBAIC0yMTgyLDcgKzIyMDYsNyBA
QCBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoCiAgICAgSW50UG9pbnQg
cmVjdFN0YXJ0KHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnkpOwogICAgIEludFBvaW50IHJl
Y3RFbmQocmVjdC5vcmlnaW4ueCArIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5vcmlnaW4ueSArIHJl
Y3Quc2l6ZS5oZWlnaHQpOwogICAgIAotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IG1haW5GcmFtZV0pOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFt
ZV07CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC0y
MjE2LDcgKzIyNDAsNyBAQCBXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNo
CiAKIC0gKHZvaWQpX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5TmFtZTooTlNTdHJpbmcgKiluYW1lIHZh
bHVlOihOU1N0cmluZyAqKXZhbHVlCiB7Ci0gICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZy
YW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIGNvcmVGcmFt
ZS0+ZWRpdG9yKCktPmNvbW1hbmQobmFtZSkuZXhlY3V0ZSh2YWx1ZSk7CkBAIC0yMjczLDQyICsy
Mjk3LDYgQEAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaAogICAgIHJl
dHVybiBoYW5kQ3Vyc29yKCkuaW1wbCgpOwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQotCi0tIChCT09MKV9uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uCi17
Ci0gICAgcmV0dXJuIF9wcml2YXRlLT5uZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9u
OwotfQotCi0tICh2b2lkKV9zZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uOihC
T09MKW5lZWRzU3luY2hyb25pemF0aW9uCi17Ci0gICAgX3ByaXZhdGUtPm5lZWRzT25lU2hvdERy
YXdpbmdTeW5jaHJvbml6YXRpb24gPSBuZWVkc1N5bmNocm9uaXphdGlvbjsKLX0KLQotLSAodm9p
ZClfc3RhcnRlZEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JGcmFtZTooV2ViRnJhbWUqKXdlYkZy
YW1lCi17Ci0gICAgQk9PTCBlbnRlcmluZyA9IF9wcml2YXRlLT5hY2NlbGVyYXRlZEZyYW1lc0Nv
dW50ID09IDA7Ci0gICAgaWYgKGVudGVyaW5nKQotICAgICAgICBbc2VsZiB3aWxsQ2hhbmdlVmFs
dWVGb3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nUHJvcGVydHldOwotICAgICsrX3By
aXZhdGUtPmFjY2VsZXJhdGVkRnJhbWVzQ291bnQ7Ci0gICAgaWYgKGVudGVyaW5nKQotICAgICAg
ICBbc2VsZiBkaWRDaGFuZ2VWYWx1ZUZvcktleTpVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdQ
cm9wZXJ0eV07Ci19Ci0KLS0gKHZvaWQpX3N0b3BwZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9y
RnJhbWU6KFdlYkZyYW1lKil3ZWJGcmFtZQotewotICAgIEJPT0wgbGVhdmluZyA9IF9wcml2YXRl
LT5hY2NlbGVyYXRlZEZyYW1lc0NvdW50ID09IDE7Ci0gICAgQVNTRVJUKF9wcml2YXRlLT5hY2Nl
bGVyYXRlZEZyYW1lc0NvdW50ID4gMCk7Ci0gICAgCi0gICAgaWYgKGxlYXZpbmcpCi0gICAgICAg
IFtzZWxmIHdpbGxDaGFuZ2VWYWx1ZUZvcktleTpVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdQ
cm9wZXJ0eV07Ci0gICAgLS1fcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudDsKLSAgICBp
ZiAobGVhdmluZykKLSAgICAgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nUHJvcGVydHldOwotfQotCi0jZW5kaWYgICAgCi0KIC0gKEJPT0wp
X2lzVXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0aW5nCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpAQCAtMjcxMyw3ICsyNzAxLDcgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3
SW5pdFRocmVhZFdvcmthcgogCiAtICh2b2lkKWFkZFdpbmRvd09ic2VydmVyc0ZvcldpbmRvdzoo
TlNXaW5kb3cgKil3aW5kb3cKIHsKLSAgICBpZiAoIV9wcml2YXRlLT51c2VEb2N1bWVudFZpZXdz
ICYmIHdpbmRvdykgeworICAgIGlmICghX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzICYmIHdp
bmRvdykgewogICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFk
ZE9ic2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF93aW5kb3dEaWRCZWNvbWVLZXk6KQog
ICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtleU5vdGlmaWNhdGlvbiBvYmplY3Q6
bmlsXTsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRP
YnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfd2luZG93RGlkUmVzaWduS2V5OikKQEAg
LTI3MjYsNyArMjcxNCw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3Jr
YXIKIC0gKHZvaWQpcmVtb3ZlV2luZG93T2JzZXJ2ZXJzCiB7CiAgICAgTlNXaW5kb3cgKndpbmRv
dyA9IFtzZWxmIHdpbmRvd107Ci0gICAgaWYgKCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyAm
JiB3aW5kb3cpIHsKKyAgICBpZiAoIV9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cyAmJiB3aW5k
b3cpIHsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1v
dmVPYnNlcnZlcjpzZWxmCiAgICAgICAgICAgICBuYW1lOk5TV2luZG93RGlkQmVjb21lS2V5Tm90
aWZpY2F0aW9uIG9iamVjdDpuaWxdOwogICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOnNlbGYKQEAgLTI3NzksMTEgKzI3NjcsMTEgQEAg
c3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcgogCiAtICh2b2lkKV91cGRh
dGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUKIHsKLSAgICBBU1NFUlQoIV9wcml2YXRlLT51c2VEb2N1
bWVudFZpZXdzKTsKLSAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlRm9yRnJh
bWU6W3NlbGYgbWFpbkZyYW1lXV07CisgICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNlc0RvY3VtZW50
Vmlld3MpOworICAgIFtXZWJWaWV3IF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGVGb3JGcmFt
ZTpbc2VsZiBtYWluRnJhbWVdXTsKIH0KIAotLSAodm9pZClfdXBkYXRlRm9jdXNlZEFuZEFjdGl2
ZVN0YXRlRm9yRnJhbWU6KFdlYkZyYW1lICopd2ViRnJhbWUKKysgKHZvaWQpX3VwZGF0ZUZvY3Vz
ZWRBbmRBY3RpdmVTdGF0ZUZvckZyYW1lOihXZWJGcmFtZSAqKXdlYkZyYW1lCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gY29yZSh3ZWJGcmFtZSk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTI3OTMsMjYg
KzI3ODEsMzIgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcgogICAg
IGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFtz
ZWxmIHdpbmRvd107CisgICAgV2ViVmlldyAqd2ViVmlldyA9IGtpdChwYWdlKTsKKworICAgIE5T
V2luZG93ICp3aW5kb3cgPSBbd2ViVmlldyB3aW5kb3ddOwogICAgIEJPT0wgd2luZG93SXNLZXkg
PSBbd2luZG93IGlzS2V5V2luZG93XTsKLSAgICBCT09MIHdpbmRvd09yU2hlZXRJc0tleSA9IHdp
bmRvd0lzS2V5IHx8IFtbd2luZG93IGF0dGFjaGVkU2hlZXRdIGlzS2V5V2luZG93XTsKIAotICAg
IFdlYkZyYW1lVmlldyAqbWFpbkZyYW1lVmlldyA9IFtbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmll
d107Ci0gICAgaWQgPFdlYkRvY3VtZW50Vmlldz4gZG9jdW1lbnRWaWV3ID0gW21haW5GcmFtZVZp
ZXcgZG9jdW1lbnRWaWV3XTsKLSAgICBCT09MIGRvY3VtZW50Vmlld0lzUmVzaWduaW5nRmlyc3RS
ZXNwb25kZXIgPSBbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxWaWV3IGNsYXNz
XV0gJiYgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaXNSZXNpZ25pbmdGaXJzdFJlc3Bv
bmRlcl07Ci0gICAgICAgIAorICAgIE5TVmlldyAqY29udGVudFZpZXcgPSB3ZWJWaWV3LT5fcHJp
dmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MgPyAoTlNWaWV3ICopW1t3ZWJWaWV3IG1haW5GcmFtZV0g
ZnJhbWVWaWV3XSA6IHdlYlZpZXc7CiAgICAgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9uZGVyID0g
W3dpbmRvdyBmaXJzdFJlc3BvbmRlcl07Ci0gICAgaWYgKFtmaXJzdFJlc3BvbmRlciBpc0tpbmRP
ZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSAKLSAgICAgICAgJiYgWyhOU1ZpZXcgKilmaXJzdFJlc3Bv
bmRlciBpc0Rlc2NlbmRhbnRPZjptYWluRnJhbWVWaWV3XSkKKyAgICBpZiAoW2ZpcnN0UmVzcG9u
ZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dICYmIFsoTlNWaWV3ICopZmlyc3RSZXNw
b25kZXIgaXNEZXNjZW5kYW50T2Y6Y29udGVudFZpZXddKSB7CisgICAgICAgIEJPT0wgZG9jdW1l
bnRWaWV3SXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcjsKKyAgICAgICAgaWYgKCF3ZWJWaWV3LT5f
cHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZWJW
aWV3IHByb2JhYmx5IG5lZWRzIGEgInJlc2lnbmluZyBmaXJzdCByZXNwb25kZXIiIHN0YXRlIGp1
c3QgYXMgV2ViSFRNTFZpZXcgaGFzLgorICAgICAgICAgICAgZG9jdW1lbnRWaWV3SXNSZXNpZ25p
bmdGaXJzdFJlc3BvbmRlciA9IE5POworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWQg
PFdlYkRvY3VtZW50Vmlldz4gZG9jdW1lbnRWaWV3ID0gW1tbd2ViVmlldyBtYWluRnJhbWVdIGZy
YW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgICAgIGRvY3VtZW50Vmlld0lzUmVzaWdu
aW5nRmlyc3RSZXNwb25kZXIgPSBbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xhc3M6W1dlYkhUTUxW
aWV3IGNsYXNzXV0gJiYgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaXNSZXNpZ25pbmdG
aXJzdFJlc3BvbmRlcl07CisgICAgICAgIH0KICAgICAgICAgcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPnNldEFjdGl2ZSh3aW5kb3dJc0tleSAmJiAhZG9jdW1lbnRWaWV3SXNSZXNpZ25pbmdGaXJz
dFJlc3BvbmRlcik7CisgICAgfQogCi0gICAgRnJhbWUqIGZvY3VzZWRGcmFtZSA9IHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBmcmFtZS0+c2VsZWN0
aW9uKCktPnNldEZvY3VzZWQoZnJhbWUgPT0gZm9jdXNlZEZyYW1lICYmIHdpbmRvd09yU2hlZXRJ
c0tleSk7CisgICAgQk9PTCB3aW5kb3dPclNoZWV0SXNLZXkgPSB3aW5kb3dJc0tleSB8fCBbW3dp
bmRvdyBhdHRhY2hlZFNoZWV0XSBpc0tleVdpbmRvd107CisgICAgZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRGb2N1c2VkKGZyYW1lID09IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKSAmJiB3aW5kb3dPclNoZWV0SXNLZXkpOwogfQogCiAtICh2b2lkKV93aW5kb3dE
aWRCZWNvbWVLZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0gICAgQVNTRVJU
KCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyk7CisgICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNl
c0RvY3VtZW50Vmlld3MpOwogICAgIE5TV2luZG93ICprZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9u
IG9iamVjdF07CiAgICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGtleVdpbmRv
dyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkKICAgICAgICAgW3NlbGYgX3VwZGF0
ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07CkBAIC0yODIwLDcgKzI4MTQsNyBAQCBzdGF0aWMgYm9v
bCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAKIC0gKHZvaWQpX3dpbmRvd0RpZFJlc2ln
bktleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBBU1NFUlQoIV9wcml2
YXRlLT51c2VEb2N1bWVudFZpZXdzKTsKKyAgICBBU1NFUlQoIV9wcml2YXRlLT51c2VzRG9jdW1l
bnRWaWV3cyk7CiAgICAgTlNXaW5kb3cgKmZvcm1lcktleVdpbmRvdyA9IFtub3RpZmljYXRpb24g
b2JqZWN0XTsKICAgICBpZiAoZm9ybWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwgZm9y
bWVyS2V5V2luZG93ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKQogICAgICAgICBb
c2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKQEAgLTI4MjgsNyArMjgyMiw3IEBA
IHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKIAogLSAodm9pZClfd2lu
ZG93V2lsbE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0g
ICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyk7CisgICAgQVNTRVJUKCFfcHJp
dmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpOwogICAgIGlmICghW3NlbGYgc2hvdWxkVXBkYXRlV2hp
bGVPZmZzY3JlZW5dKQogICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKIH0KQEAg
LTI5NDksMjEgKzI5NDMsMjEgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdv
cmthcgogLSAoV2ViRnJhbWUgKiltYWluRnJhbWUKIHsKICAgICAvLyBUaGlzIGNhbiBiZSBjYWxs
ZWQgaW4gaW5pdGlhbGl6YXRpb24sIGJlZm9yZSBfcHJpdmF0ZSBoYXMgYmVlbiBzZXQgdXAgKDM0
NjU2MTMpCi0gICAgaWYgKCFfcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBpZiAo
IV9wcml2YXRlLT5wYWdlKQorICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2YXRlLT5wYWdlKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPm1haW5G
cmFtZSgpKTsKIH0KIAogLSAoV2ViRnJhbWUgKilzZWxlY3RlZEZyYW1lCiB7Ci0gICAgLy8gSWYg
dGhlIGZpcnN0IHJlc3BvbmRlciBpcyBhIHZpZXcgaW4gb3VyIHRyZWUsIHdlIGdldCB0aGUgZnJh
bWUgY29udGFpbmluZyB0aGUgZmlyc3QgcmVzcG9uZGVyLgotICAgIC8vIFRoaXMgaXMgZmFzdGVy
IHRoYW4gc2VhcmNoaW5nIHRoZSBmcmFtZSBoaWVyYXJjaHksIGFuZCB3aWxsIGdpdmUgdXMgYSBy
ZXN1bHQgZXZlbiBpbiB0aGUgY2FzZQotICAgIC8vIHdoZXJlIHRoZSBmb2N1c2VkIGZyYW1lIGRv
ZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBhIHNlbGVjdGlvbi4KLSAgICBXZWJGcmFtZSAqZm9jdXNl
ZEZyYW1lID0gW3NlbGYgX2ZvY3VzZWRGcmFtZV07Ci0gICAgaWYgKGZvY3VzZWRGcmFtZSkKLSAg
ICAgICAgcmV0dXJuIGZvY3VzZWRGcmFtZTsKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVu
dFZpZXdzKSB7CisgICAgICAgIC8vIElmIHRoZSBmaXJzdCByZXNwb25kZXIgaXMgYSB2aWV3IGlu
IG91ciB0cmVlLCB3ZSBnZXQgdGhlIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGZpcnN0IHJlc3BvbmRl
ci4KKyAgICAgICAgLy8gVGhpcyBpcyBmYXN0ZXIgdGhhbiBzZWFyY2hpbmcgdGhlIGZyYW1lIGhp
ZXJhcmNoeSwgYW5kIHdpbGwgZ2l2ZSB1cyBhIHJlc3VsdCBldmVuIGluIHRoZSBjYXNlCisgICAg
ICAgIC8vIHdoZXJlIHRoZSBmb2N1c2VkIGZyYW1lIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBh
IHNlbGVjdGlvbi4KKyAgICAgICAgV2ViRnJhbWUgKmZvY3VzZWRGcmFtZSA9IFtzZWxmIF9mb2N1
c2VkRnJhbWVdOworICAgICAgICBpZiAoZm9jdXNlZEZyYW1lKQorICAgICAgICAgICAgcmV0dXJu
IGZvY3VzZWRGcmFtZTsKKyAgICB9CiAgICAgCiAgICAgLy8gSWYgdGhlIGZpcnN0IHJlc3BvbmRl
ciBpcyBvdXRzaWRlIG9mIG91ciB2aWV3IHRyZWUsIHdlIHNlYXJjaCBmb3IgYSBmcmFtZSBjb250
YWluaW5nIGEgc2VsZWN0aW9uLgogICAgIC8vIFRoZXJlIHNob3VsZCBiZSBhdCBtb3N0IG9ubHkg
b25lIG9mIHRoZXNlLgpAQCAtMjk3OSw3ICsyOTczLDcgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJW
aWV3SW5pdFRocmVhZFdvcmthcgogICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpKTsKIH0KIAotLSAodm9pZClzZXRNYWludGFpbnNCYWNrRm9yd2FyZExpc3Q6
IChCT09MKWZsYWcKKy0gKHZvaWQpc2V0TWFpbnRhaW5zQmFja0ZvcndhcmRMaXN0OihCT09MKWZs
YWcKIHsKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm47CkBAIC0zMDMx
LDcgKzMwMjUsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAg
ICAgCiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIG5pY2UgdG8gcmV3b3JrIHRoaXMgY29kZSBz
byB0aGF0IF9wcml2YXRlLT56b29tTXVsdGlwbGllciBkb2Vzbid0IGV4aXN0IGFuZCBjYWxsZXJz
CiAgICAgLy8gYWxsIGFjY2VzcyBfcHJpdmF0ZS0+cGFnZS0+c2V0dGluZ3MoKS4KLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmIChjb3JlRnJhbWUpCiAgICAgICAg
IGNvcmVGcmFtZS0+c2V0Wm9vbUZhY3RvcihtLCBpc1RleHRPbmx5KTsKIH0KQEAgLTMxNzgsNyAr
MzE3Miw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKICAgICBO
U1N0cmluZyAqb2xkRW5jb2RpbmcgPSBbc2VsZiBjdXN0b21UZXh0RW5jb2RpbmdOYW1lXTsKICAg
ICBpZiAoZW5jb2RpbmcgPT0gb2xkRW5jb2RpbmcgfHwgW2VuY29kaW5nIGlzRXF1YWxUb1N0cmlu
ZzpvbGRFbmNvZGluZ10pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoRnJhbWUqIG1haW5GcmFt
ZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSkpCisgICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBb
c2VsZiBfbWFpbkNvcmVGcmFtZV0pCiAgICAgICAgIG1haW5GcmFtZS0+bG9hZGVyKCktPnJlbG9h
ZFdpdGhPdmVycmlkZUVuY29kaW5nKGVuY29kaW5nKTsKIH0KIApAQCAtMzIxOSw3ICszMjEzLDcg
QEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcgogCiAtIChXZWJTY3Jp
cHRPYmplY3QgKil3aW5kb3dTY3JpcHRPYmplY3QKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21h
aW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIHJldHVybiBjb3JlRnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHRPYmplY3QoKTsKQEAg
LTMyMzgsMTcgKzMyMzIsMjEgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdv
cmthcgogICAgIGlmIChob3N0V2luZG93ID09IF9wcml2YXRlLT5ob3N0V2luZG93KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVd
KTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpCi0gICAgICAgIFtbW2tpdChmcmFt
ZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzpob3N0
V2luZG93XTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwor
ICAgIGlmIChfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dChjb3JlRnJhbWUpKQorICAgICAgICAgICAgW1tba2l0KGZyYW1lKSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gdmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93Omhvc3RXaW5kb3ddOworICAg
IH0KICAgICBpZiAoX3ByaXZhdGUtPmhvc3RXaW5kb3cgJiYgW3NlbGYgd2luZG93XSAhPSBfcHJp
dmF0ZS0+aG9zdFdpbmRvdykKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmlj
YXRpb24gb2JqZWN0Ol9wcml2YXRlLT5ob3N0V2luZG93XTsKICAgICBpZiAoaG9zdFdpbmRvdykK
ICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfd2luZG93V2lsbENsb3NlOikgbmFtZTpOU1dpbmRv
d1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6aG9zdFdpbmRvd107CiAgICAgW19wcml2YXRl
LT5ob3N0V2luZG93IHJlbGVhc2VdOwogICAgIF9wcml2YXRlLT5ob3N0V2luZG93ID0gW2hvc3RX
aW5kb3cgcmV0YWluXTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpCi0gICAgICAg
IFtbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIHZpZXdEaWRNb3ZlVG9Ib3N0
V2luZG93XTsKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkKKyAgICAgICAgICAgIFtbW2tpdChmcmFtZSkg
ZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93XTsKKyAgICB9
CiB9CiAKIC0gKE5TV2luZG93ICopaG9zdFdpbmRvdwpAQCAtMzI4NCw3ICszMjgyLDcgQEAgc3Rh
dGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcgogICAgIHJldHVybiBbc2VsZiBf
ZWxlbWVudEF0V2luZG93UG9pbnQ6W3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxd
XTsKIH0KIAotLy8gVGhlIGZvbGxvd2luZyAyIGludGVybmFsIE5TVmlldyBtZXRob2RzIGFyZSBj
YWxsZWQgb24gdGhlIGRyYWcgZGVzdGluYXRpb24gYnkgbWFrZSBzY3JvbGxpbmcgd2hpbGUgZHJh
Z2dpbmcgd29yay4KKy8vIFRoZSBmb2xsb3dpbmcgMiBpbnRlcm5hbCBOU1ZpZXcgbWV0aG9kcyBh
cmUgY2FsbGVkIG9uIHRoZSBkcmFnIGRlc3RpbmF0aW9uIHRvIG1ha2Ugc2Nyb2xsaW5nIHdoaWxl
IGRyYWdnaW5nIHdvcmsuCiAvLyBTY3JvbGxpbmcgd2hpbGUgZHJhZ2dpbmcgd2lsbCBvbmx5IHdv
cmsgaWYgdGhlIGRyYWcgZGVzdGluYXRpb24gaXMgaW4gYSBzY3JvbGwgdmlldy4gVGhlIFdlYlZp
ZXcgaXMgdGhlIGRyYWcgZGVzdGluYXRpb24uIAogLy8gV2hlbiBkcmFnZ2luZyB0byBhIFdlYlZp
ZXcsIHRoZSBkb2N1bWVudCBzdWJ2aWV3IHNob3VsZCBzY3JvbGwsIGJ1dCBpdCBkb2Vzbid0IGJl
Y2F1c2UgaXQgaXMgbm90IHRoZSBkcmFnIGRlc3RpbmF0aW9uLiAKIC8vIEZvcndhcmQgdGhlc2Ug
Y2FsbHMgdG8gdGhlIGRvY3VtZW50IHN1YnZpZXcgdG8gbWFrZSBpdHMgc2Nyb2xsIHZpZXcgc2Ny
b2xsLgpAQCAtMzM1Myw4NyArMzM1MSw5OCBAQCBzdGF0aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0
VGhyZWFkV29ya2FyCiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCktPnBl
cmZvcm1EcmFnKCZkcmFnRGF0YSk7CiB9CiAKLS0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50
ICopYVBvaW50IGRyYWdUeXBlczooTlNTZXQgKil0eXBlcworLSAoTlNWaWV3ICopX2hpdFRlc3Q6
KE5TUG9pbnQgKilwb2ludCBkcmFnVHlwZXM6KE5TU2V0ICopdHlwZXMKIHsKLSAgICBOU1ZpZXcg
KmhpdFZpZXcgPSBbc3VwZXIgX2hpdFRlc3Q6YVBvaW50IGRyYWdUeXBlczp0eXBlc107Ci0gICAg
aWYgKCFoaXRWaWV3ICYmIFtbc2VsZiBzdXBlcnZpZXddIG1vdXNlOiphUG9pbnQgaW5SZWN0Oltz
ZWxmIGZyYW1lXV0pIHsKKyAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbc3VwZXIgX2hpdFRlc3Q6cG9p
bnQgZHJhZ1R5cGVzOnR5cGVzXTsKKyAgICBpZiAoIWhpdFZpZXcgJiYgW1tzZWxmIHN1cGVydmll
d10gbW91c2U6KnBvaW50IGluUmVjdDpbc2VsZiBmcmFtZV1dKQogICAgICAgICByZXR1cm4gc2Vs
ZjsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gaGl0VmlldzsKLSAgICB9CisgICAgcmV0
dXJuIGhpdFZpZXc7CiB9CiAKIC0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCiB7Ci0gICAg
cmV0dXJuIFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGFjY2VwdHNGaXJzdFJlc3BvbmRl
cl07CisgICAgaWYgKF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykKKyAgICAgICAgcmV0dXJu
IFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGFjY2VwdHNGaXJzdFJlc3BvbmRlcl07CisK
KyAgICAvLyBGSVhNRSAoVmlld2xlc3MpOiBOZWVkIG1vcmUgY29kZSBmcm9tIFdlYkhUTUxWaWV3
IGhlcmUuCisgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRl
cgogewotICAgIGlmIChfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlcikgewotICAgICAg
ICAvLyBGaXggZm9yIHVucmVwcm8gaW5maW5pdGUgcmVjdXJzaW9uIHJlcG9ydGVkIGluIHJhZGFy
IDQ0NDgxODEuIElmIHdlIGhpdCB0aGlzIGFzc2VydCBvbgotICAgICAgICAvLyBhIGRlYnVnIGJ1
aWxkLCB3ZSBzaG91bGQgZmlndXJlIG91dCB3aGF0IGNhdXNlcyB0aGUgcHJvYmxlbSBhbmQgZG8g
YSBiZXR0ZXIgZml4LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIE5POwotICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIHdvcmtzIHRvZ2V0aGVyIHdpdGggc2V0
TmV4dEtleVZpZXcgdG8gc3BsaWNlIHRoZSBXZWJWaWV3IGludG8KLSAgICAvLyB0aGUga2V5IGxv
b3Agc2ltaWxhciB0byB0aGUgd2F5IE5TU2Nyb2xsVmlldyBkb2VzIHRoaXMuIE5vdGUgdGhhdAot
ICAgIC8vIFdlYkZyYW1lVmlldyBoYXMgdmVyeSBzaW1pbGFyIGNvZGUuCi0gICAgTlNXaW5kb3cg
KndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgV2ViRnJhbWVWaWV3ICptYWluRnJhbWVWaWV3
ID0gW1tzZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XTsKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNE
b2N1bWVudFZpZXdzKSB7CisgICAgICAgIGlmIChfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3Bv
bmRlcikgeworICAgICAgICAgICAgLy8gRml4IGZvciB1bnJlcHJvIGluZmluaXRlIHJlY3Vyc2lv
biByZXBvcnRlZCBpbiBSYWRhciA0NDQ4MTgxLiBJZiB3ZSBoaXQgdGhpcyBhc3NlcnQgb24KKyAg
ICAgICAgICAgIC8vIGEgZGVidWcgYnVpbGQsIHdlIHNob3VsZCBmaWd1cmUgb3V0IHdoYXQgY2F1
c2VzIHRoZSBwcm9ibGVtIGFuZCBkbyBhIGJldHRlciBmaXguCisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gVGhpcyB3b3JrcyB0b2dldGhlciB3aXRoIHNldE5leHRLZXlWaWV3IHRv
IHNwbGljZSB0aGUgV2ViVmlldyBpbnRvCisgICAgICAgIC8vIHRoZSBrZXkgbG9vcCBzaW1pbGFy
IHRvIHRoZSB3YXkgTlNTY3JvbGxWaWV3IGRvZXMgdGhpcy4gTm90ZSB0aGF0CisgICAgICAgIC8v
IFdlYkZyYW1lVmlldyBoYXMgdmVyeSBzaW1pbGFyIGNvZGUuCisgICAgICAgIE5TV2luZG93ICp3
aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgICAgICBXZWJGcmFtZVZpZXcgKm1haW5GcmFtZVZp
ZXcgPSBbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddOworCisgICAgICAgIE5TUmVzcG9uZGVy
ICpwcmV2aW91c0ZpcnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX29sZEZpcnN0UmVzcG9u
ZGVyQmVmb3JlQmVjb21pbmddOworICAgICAgICBCT09MIGZyb21PdXRzaWRlID0gIVtwcmV2aW91
c0ZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dIHx8ICghWyhOU1Zp
ZXcgKilwcmV2aW91c0ZpcnN0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOnNlbGZdICYmIHByZXZp
b3VzRmlyc3RSZXNwb25kZXIgIT0gc2VsZik7CisKKyAgICAgICAgaWYgKFt3aW5kb3cga2V5Vmll
d1NlbGVjdGlvbkRpcmVjdGlvbl0gPT0gTlNTZWxlY3RpbmdQcmV2aW91cykgeworICAgICAgICAg
ICAgTlNWaWV3ICpwcmV2aW91c1ZhbGlkS2V5VmlldyA9IFtzZWxmIHByZXZpb3VzVmFsaWRLZXlW
aWV3XTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbGlkS2V5VmlldyAhPSBzZWxmICYmIHBy
ZXZpb3VzVmFsaWRLZXlWaWV3ICE9IG1haW5GcmFtZVZpZXcpIHsKKyAgICAgICAgICAgICAgICBf
cHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKKyAgICAgICAgICAgICAgICBf
cHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlID0gZnJvbU91dHNpZGU7
CisgICAgICAgICAgICAgICAgW3dpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6cHJldmlvdXNWYWxp
ZEtleVZpZXddOworICAgICAgICAgICAgICAgIF9wcml2YXRlLT5iZWNvbWluZ0ZpcnN0UmVzcG9u
ZGVyRnJvbU91dHNpZGUgPSBOTzsKKyAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+YmVjb21pbmdG
aXJzdFJlc3BvbmRlciA9IE5POworICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KIAotICAgIE5TUmVzcG9u
ZGVyICpwcmV2aW91c0ZpcnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX29sZEZpcnN0UmVz
cG9uZGVyQmVmb3JlQmVjb21pbmddOwotICAgIEJPT0wgZnJvbU91dHNpZGUgPSAhW3ByZXZpb3Vz
Rmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0gfHwgKCFbKE5TVmll
dyAqKXByZXZpb3VzRmlyc3RSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6c2VsZl0gJiYgcHJldmlv
dXNGaXJzdFJlc3BvbmRlciAhPSBzZWxmKTsKLSAgICAKLSAgICBpZiAoW3dpbmRvdyBrZXlWaWV3
U2VsZWN0aW9uRGlyZWN0aW9uXSA9PSBOU1NlbGVjdGluZ1ByZXZpb3VzKSB7Ci0gICAgICAgIE5T
VmlldyAqcHJldmlvdXNWYWxpZEtleVZpZXcgPSBbc2VsZiBwcmV2aW91c1ZhbGlkS2V5Vmlld107
Ci0gICAgICAgIGlmICgocHJldmlvdXNWYWxpZEtleVZpZXcgIT0gc2VsZikgJiYgKHByZXZpb3Vz
VmFsaWRLZXlWaWV3ICE9IG1haW5GcmFtZVZpZXcpKSB7CisgICAgICAgIGlmIChbbWFpbkZyYW1l
VmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKSB7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+YmVj
b21pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKICAgICAgICAgICAgIF9wcml2YXRlLT5iZWNvbWlu
Z0ZpcnN0UmVzcG9uZGVyRnJvbU91dHNpZGUgPSBmcm9tT3V0c2lkZTsKLSAgICAgICAgICAgIFt3
aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnByZXZpb3VzVmFsaWRLZXlWaWV3XTsKKyAgICAgICAg
ICAgIFt3aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOm1haW5GcmFtZVZpZXddOwogICAgICAgICAg
ICAgX3ByaXZhdGUtPmJlY29taW5nRmlyc3RSZXNwb25kZXJGcm9tT3V0c2lkZSA9IE5POwogICAg
ICAgICAgICAgX3ByaXZhdGUtPmJlY29taW5nRmlyc3RSZXNwb25kZXIgPSBOTzsKICAgICAgICAg
ICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgICAgIH0KKyAgICAgICAgfSAKKworICAgICAgICByZXR1cm4gTk87CiAgICAgfQotICAg
IAotICAgIGlmIChbbWFpbkZyYW1lVmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKSB7Ci0gICAg
ICAgIF9wcml2YXRlLT5iZWNvbWluZ0ZpcnN0UmVzcG9uZGVyID0gWUVTOwotICAgICAgICBfcHJp
dmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlID0gZnJvbU91dHNpZGU7Ci0g
ICAgICAgIFt3aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOm1haW5GcmFtZVZpZXddOwotICAgICAg
ICBfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlID0gTk87Ci0gICAg
ICAgIF9wcml2YXRlLT5iZWNvbWluZ0ZpcnN0UmVzcG9uZGVyID0gTk87Ci0gICAgICAgIHJldHVy
biBZRVM7Ci0gICAgfSAKLSAgICAKLSAgICByZXR1cm4gTk87CisKKyAgICAvLyBGSVhNRSAoVmll
d2xlc3MpOiBOZWVkIG1vcmUgY29kZSBmcm9tIFdlYkhUTUxWaWV3IGhlcmUuCisgICAgcmV0dXJu
IFlFUzsKIH0KIAogLSAoTlNWaWV3ICopX3dlYmNvcmVfZWZmZWN0aXZlRmlyc3RSZXNwb25kZXIK
IHsKLSAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtbc2VsZiBtYWluRnJhbWVdIGZyYW1l
Vmlld107Ci0gICAgcmV0dXJuIGZyYW1lVmlldyA/IFtmcmFtZVZpZXcgX3dlYmNvcmVfZWZmZWN0
aXZlRmlyc3RSZXNwb25kZXJdIDogW3N1cGVyIF93ZWJjb3JlX2VmZmVjdGl2ZUZpcnN0UmVzcG9u
ZGVyXTsKKyAgICBpZiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7
CisgICAgICAgIGlmIChXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtbc2VsZiBtYWluRnJhbWVd
IGZyYW1lVmlld10pCisgICAgICAgICAgICByZXR1cm4gW2ZyYW1lVmlldyBfd2ViY29yZV9lZmZl
Y3RpdmVGaXJzdFJlc3BvbmRlcl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgX3dlYmNvcmVf
ZWZmZWN0aXZlRmlyc3RSZXNwb25kZXJdOwogfQogCi0tICh2b2lkKXNldE5leHRLZXlWaWV3OihO
U1ZpZXcgKilhVmlldworLSAodm9pZClzZXROZXh0S2V5VmlldzooTlNWaWV3ICopdmlldwogewot
ICAgIC8vIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBiZWNvbWVGaXJzdFJlc3BvbmRlciB0byBz
cGxpY2UgdGhlIFdlYlZpZXcgaW50bwotICAgIC8vIHRoZSBrZXkgbG9vcCBzaW1pbGFyIHRvIHRo
ZSB3YXkgTlNTY3JvbGxWaWV3IGRvZXMgdGhpcy4gTm90ZSB0aGF0Ci0gICAgLy8gV2ViRnJhbWVW
aWV3IGhhcyB2ZXJ5IHNpbWlsYXIgY29kZS4KLSAgICBXZWJGcmFtZVZpZXcgKm1haW5GcmFtZVZp
ZXcgPSBbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddOwotICAgIGlmIChtYWluRnJhbWVWaWV3
ICE9IG5pbCkgewotICAgICAgICBbbWFpbkZyYW1lVmlldyBzZXROZXh0S2V5VmlldzphVmlld107
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW3N1cGVyIHNldE5leHRLZXlWaWV3OmFWaWV3XTsKKyAg
ICBpZiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAg
IC8vIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBiZWNvbWVGaXJzdFJlc3BvbmRlciB0byBzcGxp
Y2UgdGhlIFdlYlZpZXcgaW50bworICAgICAgICAvLyB0aGUga2V5IGxvb3Agc2ltaWxhciB0byB0
aGUgd2F5IE5TU2Nyb2xsVmlldyBkb2VzIHRoaXMuIE5vdGUgdGhhdAorICAgICAgICAvLyBXZWJG
cmFtZVZpZXcgaGFzIHNpbWlsYXIgY29kZS4KKyAgICAgICAgaWYgKFdlYkZyYW1lVmlldyAqbWFp
bkZyYW1lVmlldyA9IFtbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10pIHsKKyAgICAgICAgICAg
IFttYWluRnJhbWVWaWV3IHNldE5leHRLZXlWaWV3OnZpZXddOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgfQorCisgICAgW3N1cGVyIHNldE5leHRLZXlWaWV3OnZpZXddOwog
fQogCi1zdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lICpjdXJyLCBCT09M
IGZvcndhcmQsIEJPT0wgd3JhcEZsYWcpCitzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1l
KFdlYkZyYW1lICpmcmFtZSwgQk9PTCBmb3J3YXJkLCBCT09MIHdyYXBGbGFnKQogewotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKGN1cnIpOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KGZyYW1lKTsKICAgICByZXR1cm4ga2l0KGZvcndhcmQKICAgICAgICAgPyBjb3JlRnJhbWUtPnRy
ZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdyYXAod3JhcEZsYWcpCiAgICAgICAgIDogY29yZUZyYW1l
LT50cmVlKCktPnRyYXZlcnNlUHJldmlvdXNXaXRoV3JhcCh3cmFwRmxhZykpOwpAQCAtMzQ3NCw3
ICszNDgzLDYgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogewog
ICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAgICAgIHJldHVybiAwLjA7Ci0KICAgICByZXR1
cm4gX3ByaXZhdGUtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiB9CiAK
QEAgLTM2NDIsNiArMzY1MCw4NyBAQCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdl
YkZyYW1lCiAgICAgcmV0dXJuIFtwcmV2aW91c1ZpZXcgcHJldmlvdXNWYWxpZEtleVZpZXddOwog
fQogCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gRklYTUUg
KFZpZXdsZXNzKTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIFdlYkhUTUxWaWV3
LCB3aGljaCBuZWVkcyB0bworICAgIC8vIGRvIHRoZSBzYW1lIHdvcmsgaW4gdGhlIHVzZXNEb2N1
bWVudFZpZXdzIGNhc2UuIFdlIGRvbid0IHdhbnQgdG8gbWFpbnRhaW4gdHdvCisgICAgLy8gZHVw
bGljYXRlIGNvcGllcyBvZiB0aGlzIG1ldGhvZC4KKworICAgIGlmIChfcHJpdmF0ZS0+dXNlc0Rv
Y3VtZW50Vmlld3MpIHsKKyAgICAgICAgW3N1cGVyIG1vdXNlRG93bjpldmVudF07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3Bv
bmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAg
ICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRh
aW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHBy
ZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtp
dCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBSZXRhaW5Q
dHI8V2ViVmlldz4gcHJvdGVjdG9yID0gc2VsZjsKKyAgICBpZiAoW1tzZWxmIGlucHV0Q29udGV4
dF0gd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5wdXRDb250ZXh0XSBoYW5k
bGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPmhh
bmRsaW5nTW91c2VEb3duRXZlbnQgPSBZRVM7CisKKyAgICAvLyBSZWNvcmQgdGhlIG1vdXNlIGRv
d24gcG9zaXRpb24gc28gd2UgY2FuIGRldGVybWluZSBkcmFnIGh5c3RlcmVzaXMuCisgICAgW3Nl
bGYgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJy
ZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOwor
ICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYm
IFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICBn
b3RvIGRvbmU7CisKKyAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVy
dGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisKKyAgICAvLyBJZiB0aGUgd2ViIHBhZ2UgaGFu
ZGxlcyB0aGUgY29udGV4dCBtZW51IGV2ZW50IGFuZCBtZW51Rm9yRXZlbnQ6IHJldHVybnMgbmls
LCB3ZSdsbCBnZXQgY29udHJvbCBjbGljayBldmVudHMgaGVyZS4KKyAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHBhc3MgdGhlbSBhbG9uZyB0byBLSFRNTCBhIHNlY29uZCB0aW1lLgorICAgIGlmICgh
KFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spKSB7CisgICAgICAgIF9w
cml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5POworCisgICAgICAgIC8vIERv
bid0IGRvIGFueSBtb3VzZW92ZXIgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCisgICAgICAgIFtz
ZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07CisKKyAgICAgICAgLy8gTGV0IFdlYkNv
cmUgZ2V0IGEgY2hhbmNlIHRvIGRlYWwgd2l0aCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBjYWxsIGJh
Y2sgdG8gdXMKKyAgICAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaWYgYXBw
cm9wcmlhdGUuCisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFt
ZV0pCisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRG93bihldmVudCk7
CisgICAgfQorCitkb25lOgorICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0g
Tk87Cit9CisKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gRklY
TUUgKFZpZXdsZXNzKTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIFdlYkhUTUxW
aWV3LCB3aGljaCBuZWVkcyB0bworICAgIC8vIGRvIHRoZSBzYW1lIHdvcmsgaW4gdGhlIHVzZXNE
b2N1bWVudFZpZXdzIGNhc2UuIFdlIGRvbid0IHdhbnQgdG8gbWFpbnRhaW4gdHdvCisgICAgLy8g
ZHVwbGljYXRlIGNvcGllcyBvZiB0aGlzIG1ldGhvZC4KKworICAgIGlmIChfcHJpdmF0ZS0+dXNl
c0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgW3N1cGVyIG1vdXNlVXA6ZXZlbnRdOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRp
bmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAv
LyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5p
bmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZl
bnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBj
b2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBbc2VsZiBfc2V0
TW91c2VEb3duRXZlbnQ6bmlsXTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRN
YW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAgIGlmIChb
Y3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50
SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm47CisK
KyAgICBbc2VsZiByZXRhaW5dOworCisgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwor
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV0pCisgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VVcChldmVudCk7CisgICAgW3NlbGYgX3VwZGF0ZU1v
dXNlb3ZlcldpdGhGYWtlRXZlbnRdOworCisgICAgW3NlbGYgcmVsZWFzZV07Cit9CisKIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYklCQWN0aW9ucykKQEAgLTM5MzYsMTUgKzQw
MjUsMjEgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgX3ByaXZhdGUtPmhvdmVyRmVlZGJhY2tTdXNwZW5kZWQgPSBu
ZXdWYWx1ZTsKLSAgICBpZCA8V2ViRG9jdW1lbnRWaWV3PiBkb2N1bWVudFZpZXcgPSBbW1tzZWxm
IG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIC8vIEZJWE1FOiBpbiBh
IHBlcmZlY3Qgd29ybGQgd2UnZCBkbyB0aGlzIGluIGEgZ2VuZXJhbCB3YXkgdGhhdCB3b3JrZWQg
d2l0aCBhbnkgZG9jdW1lbnQgdmlldywKLSAgICAvLyBzdWNoIGFzIGJ5IGNhbGxpbmcgYSBwcm90
b2NvbCBtZXRob2Qgb3IgdXNpbmcgcmVzcG9uZHNUb1NlbGVjdG9yIG9yIHNlbmRpbmcgYSBub3Rp
ZmljYXRpb24uCi0gICAgLy8gQnV0IHVudGlsIHRoZXJlIGlzIGFueSBuZWVkIGZvciB0aGVzZSBt
b3JlIGdlbmVyYWwgc29sdXRpb25zLCB3ZSdsbCBqdXN0IGhhcmR3aXJlIGl0IHRvIHdvcmsKLSAg
ICAvLyB3aXRoIFdlYkhUTUxWaWV3LgotICAgIC8vIE5vdGUgdGhhdCBfaG92ZXJGZWVkYmFja1N1
c3BlbmRlZENoYW5nZWQgbmVlZHMgdG8gYmUgY2FsbGVkIG9ubHkgb24gdGhlIG1haW4gV2ViSFRN
TFZpZXcsIG5vdAotICAgIC8vIG9uIGVhY2ggc3ViZnJhbWUgc2VwYXJhdGVseS4KLSAgICBpZiAo
W2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAg
ICBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9ob3ZlckZlZWRiYWNrU3VzcGVuZGVkQ2hh
bmdlZF07CisKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAg
IGlkIDxXZWJEb2N1bWVudFZpZXc+IGRvY3VtZW50VmlldyA9IFtbW3NlbGYgbWFpbkZyYW1lXSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgICAgIC8vIEZJWE1FOiBpbiBhIHBlcmZlY3Qg
d29ybGQgd2UnZCBkbyB0aGlzIGluIGEgZ2VuZXJhbCB3YXkgdGhhdCB3b3JrZWQgd2l0aCBhbnkg
ZG9jdW1lbnQgdmlldywKKyAgICAgICAgLy8gc3VjaCBhcyBieSBjYWxsaW5nIGEgcHJvdG9jb2wg
bWV0aG9kIG9yIHVzaW5nIHJlc3BvbmRzVG9TZWxlY3RvciBvciBzZW5kaW5nIGEgbm90aWZpY2F0
aW9uLgorICAgICAgICAvLyBCdXQgdW50aWwgdGhlcmUgaXMgYW55IG5lZWQgZm9yIHRoZXNlIG1v
cmUgZ2VuZXJhbCBzb2x1dGlvbnMsIHdlJ2xsIGp1c3QgaGFyZHdpcmUgaXQgdG8gd29yaworICAg
ICAgICAvLyB3aXRoIFdlYkhUTUxWaWV3LgorICAgICAgICAvLyBOb3RlIHRoYXQgX2hvdmVyRmVl
ZGJhY2tTdXNwZW5kZWRDaGFuZ2VkIG5lZWRzIHRvIGJlIGNhbGxlZCBvbmx5IG9uIHRoZSBtYWlu
IFdlYkhUTUxWaWV3LCBub3QKKyAgICAgICAgLy8gb24gZWFjaCBzdWJmcmFtZSBzZXBhcmF0ZWx5
LgorICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBj
bGFzc11dKQorICAgICAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaG92ZXJG
ZWVkYmFja1N1c3BlbmRlZENoYW5nZWRdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
W3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwogfQogCiAtIChCT09MKWlzSG92
ZXJGZWVkYmFja1N1c3BlbmRlZApAQCAtNDAwMiw3ICs0MDk3LDcgQEAgc3RhdGljIFdlYkZyYW1l
ICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogCiAtIChCT09MKXNob3VsZENsb3NlCiB7Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGNv
cmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAg
ICAgICAgcmV0dXJuIFlFUzsKICAgICByZXR1cm4gY29yZUZyYW1lLT5zaG91bGRDbG9zZSgpOwpA
QCAtNDA2NSw3ICs0MTYwLDcgQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVz
Y0ZybwogCiAtIChOU0FwcGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc2NyaXB0CiB7Ci0gICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtz
ZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICBpZiAoIWNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKQEAgLTQ0NDAsNyArNDUzNSw3
IEBAIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8KICAgICAgICAgX3By
aXZhdGUtPmVkaXRhYmxlID0gZmxhZzsKICAgICAgICAgaWYgKCFfcHJpdmF0ZS0+dGFiS2V5Q3lj
bGVzVGhyb3VnaEVsZW1lbnRzQ2hhbmdlZCAmJiBfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgICAg
IF9wcml2YXRlLT5wYWdlLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoIWZsYWcpOwot
ICAgICAgICBGcmFtZSogbWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICAg
ICAgRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICAgICAgaWYg
KG1haW5GcmFtZSkgewogICAgICAgICAgICAgaWYgKGZsYWcpIHsKICAgICAgICAgICAgICAgICBt
YWluRnJhbWUtPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwpAQCAtNTExNyw2ICs1
MjEyLDcgQEAgc3RhdGljIFdlYkZyYW1lVmlldyAqY29udGFpbmluZ0ZyYW1lVmlldwogewogICAg
IGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQogICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChf
cHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpOwogICAgIE5TVmlldyAqdmlldyA9IFtzZWxmIGhp
dFRlc3Q6W1tzZWxmIHN1cGVydmlld10gY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF1d
OwogICAgIGlmICghW3ZpZXcgaXNEZXNjZW5kYW50T2Y6W1tzZWxmIG1haW5GcmFtZV0gZnJhbWVW
aWV3XV0pCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC01MzYyLDYgKzU0NTgsMTg0IEBAIHN0YXRp
YyBXZWJGcmFtZVZpZXcgKmNvbnRhaW5pbmdGcmFtZVZpZXcKICAgICBfcHJpdmF0ZS0+aW5zZXJ0
aW9uUGFzdGVib2FyZCA9IHBhc3RlYm9hcmQ7CiB9CiAKKy0gKHZvaWQpX3NldE1vdXNlRG93bkV2
ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBl
XSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24g
fHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJNb3VzZURvd24pOworCisgICAgaWYgKGV2ZW50ID09
IF9wcml2YXRlLT5tb3VzZURvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW2V2ZW50
IHJldGFpbl07CisgICAgW19wcml2YXRlLT5tb3VzZURvd25FdmVudCByZWxlYXNlXTsKKyAgICBf
cHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgPSBldmVudDsKK30KKworLSAodm9pZClfY2FuY2VsVXBk
YXRlTW91c2VvdmVyVGltZXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRp
bWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShfcHJpdmF0ZS0+dXBkYXRl
TW91c2VvdmVyVGltZXIpOworICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUtPnVwZGF0ZU1vdXNl
b3ZlclRpbWVyKTsKKyAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyID0gTlVM
TDsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKK3sKKyAgICBOU1Rp
bWVyICp0aW1lciA9IF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXI7CisgICAgX3ByaXZhdGUtPmF1
dG9zY3JvbGxUaW1lciA9IG5pbDsKKyAgICBbX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZl
bnQgcmVsZWFzZV07CisgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7
CisgICAgW3RpbWVyIGludmFsaWRhdGVdOworICAgIFt0aW1lciByZWxlYXNlXTsKK30KKworKyAo
dm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBX
ZWJWaWV3ICpvbGRWaWV3ID0gbGFzdE1vdXNlb3ZlclZpZXc7CisKKyAgICBsYXN0TW91c2VvdmVy
VmlldyA9IG5pbDsKKworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbW2V2ZW50IHdpbmRvd10g
Y29udGVudFZpZXddOworICAgIE5TUG9pbnQgbG9jYXRpb25Gb3JIaXRUZXN0ID0gW1tjb250ZW50
VmlldyBzdXBlcnZpZXddIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJv
bVZpZXc6bmlsXTsKKyAgICBmb3IgKE5TVmlldyAqaGl0VmlldyA9IFtjb250ZW50VmlldyBoaXRU
ZXN0OmxvY2F0aW9uRm9ySGl0VGVzdF07IGhpdFZpZXc7IGhpdFZpZXcgPSBbaGl0VmlldyBzdXBl
cnZpZXddKSB7CisgICAgICAgIGlmIChbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltXZWJWaWV3IGNs
YXNzXV0pIHsKKyAgICAgICAgICAgIGxhc3RNb3VzZW92ZXJWaWV3ID0gc3RhdGljX2Nhc3Q8V2Vi
VmlldyAqPihoaXRWaWV3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGxhc3RNb3VzZW92ZXJWaWV3ICYmIGxhc3RNb3VzZW92ZXJWaWV3LT5fcHJpdmF0
ZS0+aG92ZXJGZWVkYmFja1N1c3BlbmRlZCkKKyAgICAgICAgbGFzdE1vdXNlb3ZlclZpZXcgPSBu
aWw7CisKKyAgICBpZiAobGFzdE1vdXNlb3ZlclZpZXcgIT0gb2xkVmlldykgeworICAgICAgICBp
ZiAoRnJhbWUqIG9sZENvcmVGcmFtZSA9IFtvbGRWaWV3IF9tYWluQ29yZUZyYW1lXSkgeworICAg
ICAgICAgICAgTlNFdmVudCAqb2xkVmlld0V2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhU
eXBlOk5TTW91c2VNb3ZlZAorICAgICAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0x
LCAtMSkKKyAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50
XSBtb2RpZmllckZsYWdzXQorICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJ
bnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6
W1tvbGRWaWV3IHdpbmRvd10gd2luZG93TnVtYmVyXQorICAgICAgICAgICAgICAgIGNvbnRleHQ6
W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgICAgICAgICAgZXZlbnROdW1i
ZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgICAgICAgICBvbGRDb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKG9sZFZpZXdFdmVudCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIWxhc3RNb3VzZW92ZXJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2xhc3RNb3VzZW92ZXJWaWV3IG1haW5GcmFt
ZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50
KTsKK30KKworLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudAoreworICAgIFtz
ZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07CisgICAgCisgICAgTlNFdmVudCAqZmFr
ZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAg
ICBsb2NhdGlvbjpbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1v
dXNlTG9jYXRpb25dXQorICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50
XSBtb2RpZmllckZsYWdzXQorICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdCisgICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3
aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRl
eHRdCisgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAg
IAorICAgIFtbc2VsZiBjbGFzc10gX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpmYWtlRXZlbnRd
OworfQorCistICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXRvb2xUaXAKK3sKKyAgICBp
ZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAgIGlkIGRvY3VtZW50Vmll
dyA9IFtbW3NlbGYgc2VsZWN0ZWRGcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAg
ICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
KQorICAgICAgICAgICAgW2RvY3VtZW50VmlldyBfc2V0VG9vbFRpcDp0b29sVGlwXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FIChWaWV3bGVzcyk6IENvZGUgdG8gaGFu
ZGxlIHRvb2x0aXBzIG5lZWRzIHRvIG1vdmUgaW50byBXZWJWaWV3LgorfQorCistICh2b2lkKV9z
ZWxlY3Rpb25DaGFuZ2VkCit7CisgICAgaWYgKF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykg
eworICAgICAgICBpZCBkb2N1bWVudFZpZXcgPSBbW1tzZWxmIHNlbGVjdGVkRnJhbWVdIGZyYW1l
Vmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgICAgIFtkb2N1bWVudFZpZXcgX3Nl
bGVjdGlvbkNoYW5nZWRdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUUg
KFZpZXdsZXNzKTogV2UnbGwgbmVlZCBjb2RlIGhlcmUuCit9CisKKy0gKEZyYW1lKilfbWFpbkNv
cmVGcmFtZQoreworICAgIHJldHVybiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPnBhZ2UpID8gX3By
aXZhdGUtPnBhZ2UtPm1haW5GcmFtZSgpIDogMDsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworLSAoQk9PTClfbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlv
bgoreworICAgIHJldHVybiBfcHJpdmF0ZS0+bmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXph
dGlvbjsKK30KKworLSAodm9pZClfc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlv
bjooQk9PTCluZWVkc1N5bmNocm9uaXphdGlvbgoreworICAgIF9wcml2YXRlLT5uZWVkc09uZVNo
b3REcmF3aW5nU3luY2hyb25pemF0aW9uID0gbmVlZHNTeW5jaHJvbml6YXRpb247Cit9CisKKy0g
KHZvaWQpX3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1lKil3
ZWJGcmFtZQoreworICAgIEJPT0wgZW50ZXJpbmcgPSBfcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFt
ZXNDb3VudCA9PSAwOworICAgIGlmIChlbnRlcmluZykKKyAgICAgICAgW3NlbGYgd2lsbENoYW5n
ZVZhbHVlRm9yS2V5OlVzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5XTsKKyAgICAr
K19wcml2YXRlLT5hY2NlbGVyYXRlZEZyYW1lc0NvdW50OworICAgIGlmIChlbnRlcmluZykKKyAg
ICAgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUHJvcGVydHldOworfQorCistICh2b2lkKV9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWUKK3sKKyAgICBCT09MIGxlYXZpbmcgPSBfcHJp
dmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA9PSAxOworICAgIEFTU0VSVChfcHJpdmF0ZS0+
YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA+IDApOworICAgIAorICAgIGlmIChsZWF2aW5nKQorICAg
ICAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUHJvcGVydHldOworICAgIC0tX3ByaXZhdGUtPmFjY2VsZXJhdGVkRnJhbWVzQ291bnQ7Cisg
ICAgaWYgKGxlYXZpbmcpCisgICAgICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OlVzaW5n
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5XTsKK30KKworc3RhdGljIHZvaWQgdmlld1Vw
ZGF0ZVJ1bkxvb3BPYnNlcnZlckNhbGxCYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxv
b3BBY3Rpdml0eSwgdm9pZCogaW5mbykKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVpbnRl
cnByZXRfY2FzdDxXZWJWaWV3Kj4oaW5mbyk7CisgICAgW3dlYlZpZXcgX3ZpZXdXaWxsRHJhd0lu
dGVybmFsXTsKKyAgICBbd2ViVmlldy0+X3ByaXZhdGUgX2NsZWFyVmlld1VwZGF0ZVJ1bkxvb3BP
YnNlcnZlcl07Cit9CisKKy0gKHZvaWQpX3NjaGVkdWxlVmlld1VwZGF0ZQoreworICAgIC8vIFRo
aXMgaXMgdGhlIGNvbXBvc2l0aW5nIGVxdWl2YWxlbnQgb2YgLXZpZXdXaWxsRHJhdy4gV2hlbiB3
ZSBrbm93IHRoYXQgY29tcG9zaXRpbmcgbGF5ZXJzCisgICAgLy8gaGF2ZSBiZWVuIHNldCBhcyBu
ZWVkaW5nIGRpc3BsYXksIHdlIGhhdmUgdG8gbWFrZSBhbiBlYWdlciBsYXlvdXQgaGFwcGVuIGJl
Zm9yZSB0aGUKKyAgICAvLyBsYXllcnMgZ2V0IGNvbW1pdHRlZCBieSBDb3JlQW5pbWF0aW9uLgor
CisgICAgaWYgKF9wcml2YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9ic2VydmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBSdW4gYmVmb3JlIEFwcEtpdCBkb2VzIGl0cyB3aW5kb3cgdXBkYXRl
LgorICAgIGNvbnN0IENGSW5kZXggcnVuTG9vcE9yZGVyID0gTlNEaXNwbGF5V2luZG93UnVuTG9v
cE9yZGVyaW5nIC0gMTsKKworICAgIC8vIFRoZSBXZWJWaWV3IGFsd2F5cyBvdXRsaXZlcyB0aGUg
b2JzZXJ2ZXIsIHNvIG5vIG5lZWQgdG8gcmV0YWluL3JlbGVhc2UuCisgICAgQ0ZSdW5Mb29wT2Jz
ZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIDAsIDAsIDAgfTsKKworICAgIF9wcml2
YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9ic2VydmVyID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVhdGUo
TlVMTCwKKyAgICAgICAga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5Mb29wRXhpdCwg
RkFMU0UgLyogb25lIHNob3QgKi8sCisgICAgICAgIHJ1bkxvb3BPcmRlciwgdmlld1VwZGF0ZVJ1
bkxvb3BPYnNlcnZlckNhbGxCYWNrLCAmY29udGV4dCk7CisKKyAgICBDRlJ1bkxvb3BBZGRPYnNl
cnZlcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9i
c2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworfQorCisjZW5kaWYKKwogQGVuZAogCiAv
LyBXZSB1c2UgdGhlc2UgZnVuY3Rpb25zIHRvIGNhbGwgdGhlIGRlbGVnYXRlcyBhbmQgYmxvY2sg
ZXhjZXB0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGFyZQpAQCAtNTg5MywzNyArNjE2Nyw2IEBAIEJP
T0wgQ2FsbEZvcm1EZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oQk8KICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotc3RhdGljIHZvaWQgdmll
d1VwZGF0ZVJ1bkxvb3BPYnNlcnZlckNhbGxCYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1
bkxvb3BBY3Rpdml0eSwgdm9pZCogaW5mbykKLXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVp
bnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4oaW5mbyk7Ci0gICAgW3dlYlZpZXcgX3ZpZXdXaWxsRHJh
d0ludGVybmFsXTsKLSAgICBbd2ViVmlldy0+X3ByaXZhdGUgX2NsZWFyVmlld1VwZGF0ZVJ1bkxv
b3BPYnNlcnZlcl07Ci19Ci0KLS0gKHZvaWQpX3NjaGVkdWxlVmlld1VwZGF0ZQotewotICAgIC8v
IFRoaXMgaXMgdGhlIGNvbXBvc2l0aW5nIGVxdWl2YWxlbnQgb2YgLXZpZXdXaWxsRHJhdy4gV2hl
biB3ZSBrbm93IHRoYXQgY29tcG9zaXRpbmcgbGF5ZXJzCi0gICAgLy8gaGF2ZSBiZWVuIHNldCBh
cyBuZWVkaW5nIGRpc3BsYXksIHdlIGhhdmUgdG8gbWFrZSBhbiBlYWdlciBsYXlvdXQgaGFwcGVu
IGJlZm9yZSB0aGUKLSAgICAvLyBsYXllcnMgZ2V0IGNvbW1pdHRlZCBieSBDQS4KLSAgICBpZiAo
IV9wcml2YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9ic2VydmVyKSB7Ci0gICAgICAgIGNvbnN0IENG
SW5kZXggcnVuTG9vcE9yZGVyID0gTlNEaXNwbGF5V2luZG93UnVuTG9vcE9yZGVyaW5nLTE7IC8v
IFJ1biBiZWZvcmUgQXBwS2l0IGRvZXMgaXRzIHdpbmRvdyB1cGRhdGUKLSAgICAgICAgQ0ZSdW5M
b29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7Ci0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VsZiksCi0gICAgICAgICAgICBOVUxMLCAgIC8v
IFRoZSBXZWJWaWV3IGFsd2F5cyBvdXRsaXZlcyB0aGUgb2JzZXJ2ZXIsIHNvIG5vIG5lZWQgdG8g
cmV0YWluL3JlbGVhc2UuCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTAotICAg
ICAgICB9OwotICAgICAgICBfcHJpdmF0ZS0+dmlld1VwZGF0ZVJ1bkxvb3BPYnNlcnZlciA9IENG
UnVuTG9vcE9ic2VydmVyQ3JlYXRlKE5VTEwsIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5nIHwga0NG
UnVuTG9vcEV4aXQsIGZhbHNlIC8qIG9uZSBzaG90ICovLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5Mb29wT3JkZXIsIHZpZXdVcGRh
dGVSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjaywgJmNvbnRleHQpOwotCi0gICAgICAgIENGUnVuTG9v
cEFkZE9ic2VydmVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgX3ByaXZhdGUtPnZpZXdVcGRhdGVS
dW5Mb29wT2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgfQotICAgIAotfQot
I2VuZGlmCi0KIEBlbmQKIAogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDQ0MzA5KQorKysgV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyNCArMzgs
MjIgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xh
c3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBLVVJMOworICAg
IGNsYXNzIEtleWJvYXJkRXZlbnQ7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBTdHJpbmc7
CiB9Ci10eXBlZGVmIFdlYkNvcmU6OktleWJvYXJkRXZlbnQgV2ViQ29yZUtleWJvYXJkRXZlbnQ7
Ci10eXBlZGVmIFdlYkNvcmU6OlBhZ2UgV2ViQ29yZVBhZ2U7Ci0jZWxzZQotQGNsYXNzIFdlYkNv
cmVLZXlib2FyZEV2ZW50OwotQGNsYXNzIFdlYkNvcmVQYWdlOwogI2VuZGlmCiAKIEBjbGFzcyBX
ZWJCYXNlUGx1Z2luUGFja2FnZTsKIEBjbGFzcyBXZWJEb3dubG9hZDsKIEBjbGFzcyBXZWJOb2Rl
SGlnaGxpZ2h0OwogCisjaWZkZWYgX19jcGx1c3BsdXMKKwogQGludGVyZmFjZSBXZWJWaWV3IChX
ZWJWaWV3RWRpdGluZ0V4dHJhcykKLS0gKEJPT0wpX2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDoo
V2ViQ29yZUtleWJvYXJkRXZlbnQgKilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91
bGRTYXZlOworLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihXZWJDb3JlOjpLZXli
b2FyZEV2ZW50KilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91bGRTYXZlOwogLSAo
Qk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50UmFu
Z2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1NlbGVj
dGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7
CiBAZW5kCiAKQEAgLTY2LDE3ICs2NCw0NiBAQCB0eXBlZGVmIFdlYkNvcmU6OlBhZ2UgV2ViQ29y
ZVBhZ2U7CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld0ludGVybmFsKQotI2lm
ZGVmIF9fY3BsdXNwbHVzCisKKy0gKFdlYkNvcmU6OkZyYW1lKilfbWFpbkNvcmVGcmFtZTsKKwog
LSAoV2ViQ29yZTo6U3RyaW5nKV91c2VyQWdlbnRGb3JVUkw6KGNvbnN0IFdlYkNvcmU6OktVUkwm
KXVybDsKIC0gKFdlYkNvcmU6OktleWJvYXJkVUlNb2RlKV9rZXlib2FyZFVJTW9kZTsKKworLSAo
Qk9PTClfYmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlOworCistICh2b2lkKV9yZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb246KEJPT0wpbGlzdGVuOworLSAodm9pZClfZGlzcGF0Y2hE
aWRSZWNlaXZlSWNvbkZyb21XZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZTsKKworLSAodm9p
ZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpX2NhbmNlbFVw
ZGF0ZU1vdXNlb3ZlclRpbWVyOworLSAodm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcjsKKy0gKHZv
aWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnQ7CistICh2b2lkKV9zZWxlY3Rpb25DaGFu
Z2VkOworLSAodm9pZClfc2V0VG9vbFRpcDooTlNTdHJpbmcgKil0b29sVGlwOworCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorLSAoQk9PTClfbmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbjsKKy0gKHZvaWQpX3NldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb246KEJPT0wpbmVlZHNTeW5jaHJvbml6YXRpb247CistICh2b2lkKV9zdGFydGVkQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWU7CistICh2b2lkKV9z
dG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWU7
CistICh2b2lkKV9zY2hlZHVsZVZpZXdVcGRhdGU7CiAjZW5kaWYKKwogQGVuZAogCi1AaW50ZXJm
YWNlIFdlYlZpZXcgKFdlYlZpZXdNaXNjSW50ZXJuYWwpCisjZW5kaWYKKworLy8gRklYTUU6IFRl
bXBvcmFyeSB3YXkgdG8gZXhwb3NlIG1ldGhvZHMgdGhhdCBhcmUgaW4gdGhlIHdyb25nIGNhdGVn
b3J5IGluc2lkZSBXZWJWaWV3LgorQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3T3RoZXJJbnRl
cm5hbCkKIAogKyAodm9pZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVs
OwogKyAoV2ViQ2FjaGVNb2RlbClfY2FjaGVNb2RlbDsKLS0gKFdlYkNvcmVQYWdlKilwYWdlOwor
CisjaWZkZWYgX19jcGx1c3BsdXMKKy0gKFdlYkNvcmU6OlBhZ2UqKXBhZ2U7CisjZW5kaWYKKwog
LSAoTlNNZW51ICopX21lbnVGb3JFbGVtZW50OihOU0RpY3Rpb25hcnkgKillbGVtZW50IGRlZmF1
bHRJdGVtczooTlNBcnJheSAqKWl0ZW1zOwogLSAoaWQpX1VJRGVsZWdhdGVGb3J3YXJkZXI7CiAt
IChpZClfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyOwpAQCAtMTIzLDEyICsxNTAsOCBAQCB0eXBl
ZGVmIFdlYkNvcmU6OlBhZ2UgV2ViQ29yZVBhZ2U7CiAtICh2b2lkKV9hZGRPYmplY3Q6KGlkKW9i
amVjdCBmb3JJZGVudGlmaWVyOih1bnNpZ25lZCBsb25nKWlkZW50aWZpZXI7CiAtIChpZClfb2Jq
ZWN0Rm9ySWRlbnRpZmllcjoodW5zaWduZWQgbG9uZylpZGVudGlmaWVyOwogLSAodm9pZClfcmVt
b3ZlT2JqZWN0Rm9ySWRlbnRpZmllcjoodW5zaWduZWQgbG9uZylpZGVudGlmaWVyOwotLSAoQk9P
TClfYmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlOwogCi0tICh2b2lkKV9yZWdpc3Rl
ckZvckljb25Ob3RpZmljYXRpb246KEJPT0wpbGlzdGVuOwotLSAodm9pZClfZGlzcGF0Y2hEaWRS
ZWNlaXZlSWNvbkZyb21XZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZTsKLQotLSAodm9pZClf
c2V0Wm9vbU11bHRpcGxpZXI6KGZsb2F0KW0gaXNUZXh0T25seTooQk9PTClpc1RleHRPbmx5Owor
LSAodm9pZClfc2V0Wm9vbU11bHRpcGxpZXI6KGZsb2F0KW11bHRpcGxpZXIgaXNUZXh0T25seToo
Qk9PTClpc1RleHRPbmx5OwogLSAoZmxvYXQpX3pvb21NdWx0aXBsaWVyOihCT09MKWlzVGV4dE9u
bHk7CiAtIChmbG9hdClfcmVhbFpvb21NdWx0aXBsaWVyOwogLSAoQk9PTClfcmVhbFpvb21NdWx0
aXBsaWVySXNUZXh0T25seTsKQEAgLTE0MCwyMyArMTYzLDE3IEBAIHR5cGVkZWYgV2ViQ29yZTo6
UGFnZSBXZWJDb3JlUGFnZTsKIC0gKElCQWN0aW9uKV9yZXNldFpvb206KGlkKXNlbmRlciBpc1Rl
eHRPbmx5OihCT09MKWlzVGV4dE9ubHk7CiAKIC0gKEJPT0wpX211c3REcmF3VW5pb25lZFJlY3Q6
KE5TUmVjdClyZWN0IHNpbmdsZVJlY3RzOihjb25zdCBOU1JlY3QgKilyZWN0cyBjb3VudDooTlNJ
bnRlZ2VyKWNvdW50OwotLSAodm9pZClfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlRm9yRnJh
bWU6KFdlYkZyYW1lICopd2ViRnJhbWU7CisrICh2b2lkKV91cGRhdGVGb2N1c2VkQW5kQWN0aXZl
U3RhdGVGb3JGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZTsKIAogKyAoQk9PTClfY2FuSGFuZGxl
UmVxdWVzdDooTlNVUkxSZXF1ZXN0ICopcmVxdWVzdCBmb3JNYWluRnJhbWU6KEJPT0wpZm9yTWFp
bkZyYW1lOwogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotLSAoQk9PTClfbmVl
ZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjsKLS0gKHZvaWQpX3NldE5lZWRzT25lU2hv
dERyYXdpbmdTeW5jaHJvbml6YXRpb246KEJPT0wpbmVlZHNTeW5jaHJvbml6YXRpb247Ci0tICh2
b2lkKV9zdGFydGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2Vi
RnJhbWU7Ci0tICh2b2lkKV9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihX
ZWJGcmFtZSopd2ViRnJhbWU7Ci0tICh2b2lkKV9zY2hlZHVsZVZpZXdVcGRhdGU7Ci0jZW5kaWYK
LQogLSAodm9pZClfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVi
b2FyZDsKIAogQGVuZAogCi10eXBlZGVmIHN0cnVjdCBfV2ViUmVzb3VyY2VEZWxlZ2F0ZUltcGxl
bWVudGF0aW9uQ2FjaGUgeworI2lmZGVmIF9fY3BsdXNwbHVzCisKK3N0cnVjdCBXZWJSZXNvdXJj
ZURlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSB7CiAgICAgSU1QIGRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRnVuYzsKICAgICBJTVAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRnVuYzsKICAgICBJTVAgaWRlbnRpZmllckZvclJlcXVlc3RGdW5jOwpAQCAtMTY5LDkg
KzE4Niw5IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJSZXNvdXJjZURlbGVnYXRlSW1wbGUKICAgICBJ
TVAgd2lsbENhY2hlUmVzcG9uc2VGdW5jOwogICAgIElNUCBwbHVnSW5GYWlsZWRXaXRoRXJyb3JG
dW5jOwogICAgIElNUCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZUZ1bmM7Ci19IFdlYlJlc291
cmNlRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1dl
YkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSB7CitzdHJ1Y3QgV2ViRnJhbWVM
b2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlIHsKICAgICBJTVAgZGlkQ2xlYXJXaW5kb3dP
YmplY3RGb3JGcmFtZUZ1bmM7CiAgICAgSU1QIHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZUZ1
bmM7CiAgICAgSU1QIGRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lRnVuYzsKQEAgLTE5MCw5
ICsyMDcsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsCiAgICAg
SU1QIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEluRnJhbWVGdW5jOwogICAgIElNUCBk
aWRSZWNlaXZlSWNvbkZvckZyYW1lRnVuYzsKICAgICBJTVAgZGlkRmluaXNoRG9jdW1lbnRMb2Fk
Rm9yRnJhbWVGdW5jOwotfSBXZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGU7
Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0
aW9uQ2FjaGUgeworc3RydWN0IFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNh
Y2hlIHsKICAgICBCT09MIGRpZFBhcnNlU291cmNlRXhwZWN0c0Jhc2VMaW5lTnVtYmVyOwogICAg
IElNUCBkaWRQYXJzZVNvdXJjZUZ1bmM7CiAgICAgSU1QIGZhaWxlZFRvUGFyc2VTb3VyY2VGdW5j
OwpAQCAtMjAwLDEzICsyMTcsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYlNjcmlwdERlYnVnRGVs
ZWdhdGVJbQogICAgIElNUCB3aWxsRXhlY3V0ZVN0YXRlbWVudEZ1bmM7CiAgICAgSU1QIHdpbGxM
ZWF2ZUNhbGxGcmFtZUZ1bmM7CiAgICAgSU1QIGV4Y2VwdGlvbldhc1JhaXNlZEZ1bmM7Ci19IFdl
YlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlOworfTsKIAotV2ViUmVzb3Vy
Y2VEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIFdlYlZpZXdHZXRSZXNvdXJjZUxvYWREZWxl
Z2F0ZUltcGxlbWVudGF0aW9ucyhXZWJWaWV3ICp3ZWJWaWV3KTsKLVdlYkZyYW1lTG9hZERlbGVn
YXRlSW1wbGVtZW50YXRpb25DYWNoZSogV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25zKFdlYlZpZXcgKndlYlZpZXcpOwotV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxl
bWVudGF0aW9uQ2FjaGUqIFdlYlZpZXdHZXRTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRp
b25zKFdlYlZpZXcgKndlYlZpZXcpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKK1dlYlJlc291cmNl
RGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlKiBXZWJWaWV3R2V0UmVzb3VyY2VMb2FkRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbnMoV2ViVmlldyAqKTsKK1dlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVt
ZW50YXRpb25DYWNoZSogV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25z
KFdlYlZpZXcgKik7CitXZWJTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSog
V2ViVmlld0dldFNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMoV2ViVmlldyAqKTsK
IAogaWQgQ2FsbEZvcm1EZWxlZ2F0ZShXZWJWaWV3ICosIFNFTCwgaWQsIGlkKTsKIGlkIENhbGxG
b3JtRGVsZWdhdGUoV2ViVmlldyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBv
YmplY3QyLCBpZCBvYmplY3QzLCBpZCBvYmplY3Q0LCBpZCBvYmplY3Q1KTsKSW5kZXg6IFdlYktp
dC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNp
b24gNDQzMDkpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTEgQEAKKzIwMDktMDUtMzEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0U3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50V3g6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOiBVc2UgRnJhbWVW
aWV3OjpjcmVhdGUKKyAgICAgICAgYW5kIFJlZlB0ciBpbnN0ZWFkIG9mIHRoZSBvbGQgImNyYXp5
IiByZWZlcmVuY2UgY291bnRpbmcuCisKIDIwMDktMDUtMjMgIERhdmlkIEtpbHplciAgPGRka2ls
emVyQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXJ0IDIgb2YgMjogQnVnIDI1NDk1OiBJbXBsZW1l
bnQgUGFzc093blB0ciBhbmQgcmVwbGFjZSB1c2VzIG9mIHN0ZDo6YXV0b19wdHIKSW5kZXg6IFdl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCShyZXZp
c2lvbiA0NDMwOSkKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsMTUgKzg5MCwxNCBAQCB2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50V3g6OnRyYW5zaXRpb25Ub0NvCiAKICAgICBtX2ZyYW1lLT5zZXRWaWV3KDApOwog
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXc7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gZnJhbWVW
aWV3OwogICAgIGlmIChpc01haW5GcmFtZSkKLSAgICAgICAgZnJhbWVWaWV3ID0gbmV3IEZyYW1l
VmlldyhtX2ZyYW1lLCBJbnRSZWN0KG1fd2ViVmlldy0+R2V0UmVjdCgpKS5zaXplKCkpOworICAg
ICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShtX2ZyYW1lLCBJbnRSZWN0KG1fd2Vi
Vmlldy0+R2V0UmVjdCgpKS5zaXplKCkpOwogICAgIGVsc2UKLSAgICAgICAgZnJhbWVWaWV3ID0g
bmV3IEZyYW1lVmlldyhtX2ZyYW1lKTsKKyAgICAgICAgZnJhbWVWaWV3ID0gRnJhbWVWaWV3Ojpj
cmVhdGUobV9mcmFtZSk7CiAKICAgICBBU1NFUlQoZnJhbWVWaWV3KTsKICAgICBtX2ZyYW1lLT5z
ZXRWaWV3KGZyYW1lVmlldyk7Ci0gICAgZnJhbWVWaWV3LT5kZXJlZigpOyAvLyBGcmFtZVZpZXdz
IGFyZSBjcmVhdGVkIHdpdGggYSByZWYgY291bnQgb2YgMS4gUmVsZWFzZSB0aGlzIHJlZiBzaW5j
ZSB3ZSd2ZSBhc3NpZ25lZCBpdCB0byBmcmFtZS4KIAogICAgIGZyYW1lVmlldy0+c2V0UGxhdGZv
cm1XaWRnZXQobV93ZWJWaWV3KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30829</attachid>
            <date>2009-06-01 02:11:00 -0700</date>
            <delta_ts>2009-06-05 16:38:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ViewlessEventPatch.txt</filename>
            <type>text/plain</type>
            <size>156698</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDMxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcyIEBACisyMDA5LTA2LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjYxMTI6IHZpZXdsZXNzIFdlYktpdCAtLSBtYWtlIGV2ZW50cyB3b3JrCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjExMgorCisgICAgICAgIFRoZSBt
YWluIGZpeCBoZXJlIGlzIHRvIG1ha2UgbW91c2UgYW5kIHdoZWVsIGV2ZW50IGNvb3JkaW5hdGVz
IGluIHRoZSBjb29yZGluYXRlCisgICAgICAgIHN5c3RlbSBvZiB0aGUgdG9wIGxldmVsIE5TVmll
dyByYXRoZXIgdGhhbiB0aGUgTlNXaW5kb3cgd2hlbiBpbiB0aGUgdmlld2xlc3MgbW9kZS4KKyAg
ICAgICAgVGhpcyBpcyB0aGUgZGVzaWduIEh5YXR0IGNob3NlLCBidXQgdGhlIGV2ZW50IHBhcnQg
b2YgaXQgd2Fzbid0IGRvbmUgeWV0LgorCisgICAgICAgIEFsc28gZml4IEZyYW1lVmlldyB0byBk
byBub3JtYWwgcmVmZXJlbmNlIGNvdW50aW5nIGluc3RlYWQgb2YgYSBzdHJhbmdlIG1vZGVsIHdp
dGgKKyAgICAgICAgYW4gZXhwbGljaXQgZGVyZWYgbmVhciBjcmVhdGlvbiB0aW1lLgorCisgICAg
ICAgICogV2ViQ29yZS5iYXNlLmV4cDogVXBkYXRlZC4KKworICAgICAgICAqIHBhZ2UvRXZlbnRI
YW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZXZlbnRMb29wSGFu
ZGxlTW91c2VVcCk6IE1vdmVkIHRoaXMgZnVuY3Rpb24gaW50byB0aGUgZmlsZQorICAgICAgICB0
byByZWR1Y2UgY29uZGl0aW9uYWxzIGluIHRoZSBoZWFkZXIuCisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmV2ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZCk6IERpdHRvLgorCisgICAg
ICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDogUmVkdWNlZCBpbmNsdWRlcy4gRml4ZWQgZm9ybWF0
dGluZyBvZiBPYmplY3RpdmUtQyB0eXBlcy4KKyAgICAgICAgTWFkZSBjdXJyZW50TlNFdmVudCBh
IHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uIEFkZGVkIHNlbmRDb250ZXh0TWVudUV2ZW50IGFuZAor
ICAgICAgICBldmVudE1heVN0YXJ0RHJhZyBmdW5jdGlvbnMgdGhhdCB0YWtlcyBOU0V2ZW50ICog
c28gdGhlIGNvbnZlcnNpb24gdG8gUGxhdGZvcm1Nb3VzZUV2ZW50CisgICAgICAgIGNhbiBiZSBk
b25lIGhlcmUgcmF0aGVyIHRoYW4gaW4gV2ViS2l0LiBSZWR1Y2VkICNpZiBieSBtYWtpbmcgZXZl
bnRMb29wSGFuZGxlTW91c2VVcCBhbmQKKyAgICAgICAgZXZlbnRMb29wSGFuZGxlTW91c2VEcmFn
Z2VkIHVuY29uZGl0aW9uYWwuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpzZXRWaWV3KTogTWFkZSB0aGlzIHRha2UgYSBQYXNzUmVmUHRyIHNp
bmNlIGl0IHRha2VzIG93bmVyc2hpcC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjcmVhdGVW
aWV3KTogQ2hhbmdlZCB0byB1c2UgUmVmUHRyIGFuZCBGcmFtZVZpZXc6OmNyZWF0ZSBhbmQgcmVt
b3ZlCisgICAgICAgIHRoZSBleHBsaWNpdCBkZXJlZi4KKworICAgICAgICAqIHBhZ2UvRnJhbWUu
aDogQ2hhbmdlZCBzZXRWaWV3IHRvIHRha2UgYSBQYXNzUmVmUHRyLgorCisgICAgICAgICogcGFn
ZS9GcmFtZVRyZWUuY3BwOiBBZGRlZCBuZXdseS1uZWVkZWQgaW5jbHVkZS4KKworICAgICAgICAq
IHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6RnJhbWVW
aWV3KTogR290IHJpZCBvZiBvbmUgb2YgdGhlIHR3byBjb25zdHJ1Y3RvcnMsIGFuZCByZW1vdmVk
CisgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbiBvZiBtX3JlZkNvdW50IGFuZCBjYWxsIHRvIHNo
b3cgZnJvbSB0aGUgcmVhbWluaW5nIG9uZS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
Y3JlYXRlKTogQWRkZWQgdHdvIGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBkbyB3aGF0IHRoZSB0d28K
KyAgICAgICAgY29uc3RydWN0b3JzIGRpZCBiZWZvcmUsIGV4Y2VwdCB0aGF0IHRoZXkgcmV0dXJu
IGEgUGFzc1JlZlB0ciB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgIHJlZmVyZW5jZSBjb3VudGlu
ZyBpcyBoYW5kbGVkIGNvcnJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6fkZy
YW1lVmlldyk6IFJlbW92ZWQgYXNzZXJ0aW9uIGZyb20gd2hlbiBGcmFtZVZpZXcgaW1wbGVtZW50
ZWQKKyAgICAgICAgaXRzIG93biByZWZlcmVuY2UgY291bnRpbmcuCisKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5oOiBJbmhlcml0IGZyb20gUmVmQ291bnRlZCBmb3IgcmVmZXJlbmNlIGNvdW50
aW5nLiBNYWRlIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBwcml2YXRlIGFuZCBhZGRlZCBjcmVh
dGUgZnVuY3Rpb25zLiBHb3QgcmlkIG9mIHRoZSBoYW5kLWltcGxlbWVudGVkCisgICAgICAgIHJl
ZmVyZW5jZSBjb3VudGluZyBpbiB0aGlzIGNsYXNzLgorCisgICAgICAgICogcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVudE5TRXZlbnRTbG90KTog
UmVuYW1lZCBjdXJyZW50RXZlbnQgdG8gY3VycmVudE5TRXZlbnRTbG90IHRvCisgICAgICAgIG1h
a2UgaXQgbW9yZSBjbGVhciBob3cgaXQgcmVsYXRlcyB0byBjdXJyZW50TlNFdmVudC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3VycmVudE5TRXZlbnQpOiBVcGRhdGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q3VycmVudEV2ZW50U2NvcGU6OkN1cnJlbnRFdmVudFNjb3BlKTogQWRk
ZWQuIFVzZSB0byBzZXQvcmVzZXQgdGhlCisgICAgICAgIGN1cnJlbnQgZXZlbnQgaW4gYSBmb29s
cHJvb2Ygd2F5LgorICAgICAgICAoV2ViQ29yZTo6Q3VycmVudEV2ZW50U2NvcGU6On5DdXJyZW50
RXZlbnRTY29wZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp3aGVl
bEV2ZW50KTogVXNlIEN1cnJlbnRFdmVudFNjb3BlLiBQYXNzIHRoZSBwbGF0Zm9ybQorICAgICAg
ICB3aW5kb3cgaW4gd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIFBsYXRmb3JtV2hlZWxFdmVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6a2V5RXZlbnQpOiBVc2UgQ3VycmVudEV2ZW50
U2NvcGUuCisgICAgICAgIChXZWJDb3JlOjpsYXN0RXZlbnRJc01vdXNlVXApOiBVc2UgY3VycmVu
dE5TRXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25F
dmVudFRvV2lkZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmV2
ZW50TG9vcEhhbmRsZU1vdXNlRHJhZ2dlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpldmVudExvb3BIYW5kbGVNb3VzZVVwKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZSk6IFVzZQorICAg
ICAgICBjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50IHRvIGdldCBhIG1vdXNlIGV2ZW50IHRoYXQg
aGFzIHRoZSBhcHByb3ByaWF0ZQorICAgICAgICBwbGF0Zm9ybSB3aW5kb3cgcGFzc2VkIHRvIGNy
ZWF0ZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRU
b1dpZGdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjptb3VzZURv
d24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VEcmFnZ2Vk
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6Om1vdXNlVXApOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50
KTogQWRkZWQuIFBhc3NlcyB0aGUKKyAgICAgICAgcGxhdGZvcm0gd2luZG93IHRoYXQncyBub3cg
bmVlZGVkIHRvIGNyZWF0ZSBhIFBsYXRmb3JtTW91c2VFdmVudC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6ZXZlbnRNYXlTdGFydERyYWcpOiBBZGRlZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcyBhbmQg
Y29uc3RydWN0b3IgZGVmaW5pdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOiBTb3J0ZWQgdGhpbmdzIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKyAgICAgICAg
Q2hhbmdlZCBNYWMgY29uc3RydWN0b3IgdG8gdGFrZSBhIHdpbmRvd1ZpZXcgYXMgd2VsbCBhcyB0
aGUgZXZlbnQuIFRoaXMgaXMKKyAgICAgICAgbmVlZGVkIGluIHZpZXdsZXNzIG1vZGUsIHNpbmNl
IHRoZSAid2luZG93IiBpcyBhY3R1YWxseSBhbiBOU1ZpZXcsIHNvIHRoZQorICAgICAgICBldmVu
dCBoYXMgdG8ga25vdyB3aGljaCB2aWV3IHRvIGNvbXB1dGUgdGhlIGNvb3JkaW5hdGVzIHdpdGgu
IE1hZGUgdGhlCisgICAgICAgIHNhbWUgY2hhbmdlIHRvIHBvaW50Rm9yRXZlbnQuCisgICAgICAg
ICogcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50Lmg6IERpdHRvLgorCisgICAgICAgICogcGxh
dGZvcm0vbWFjL1BsYXRmb3JtTW91c2VFdmVudE1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBv
aW50Rm9yRXZlbnQpOiBDb252ZXJ0IHBvaW50IGZyb20gd2luZG93IGNvb3JkaW5hdGVzIHRvIHZp
ZXcKKyAgICAgICAgY29vcmRpbmF0ZXMgaWYgYSB3aW5kb3dWaWV3IGlzIHBhc3NlZCBpbi4gVGhp
cyBpcyB1c2VkIGluIHZpZXdsZXNzIG1vZGUuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1v
dXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9XaGVlbEV2ZW50TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9XaWRnZXRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvdyk6IEZpeGVkIGNhc2Ugd2hlcmUgdGhlcmUKKyAgICAgICAgaXMgbm8gcGxh
dGZvcm0gd2lkZ2V0IGFuZCBubyBwYXJlbnQuIEJlZm9yZSBpdCB3b3VsZCB5aWVsZCB1bnByZWRp
Y3RhYmxlCisgICAgICAgIHJlc3VsdHMgYmVjYXVzZSBvZiBkaXNwYXRjaGluZyB0byBhIG5pbCBv
YmplY3QgYW5kIHJldHVybmluZyBhIHN0cnVjdHVyZS4KKyAgICAgICAgTm93IGl0IHJldHVybnMg
dGhlIHBvaW50IHdpdGhvdXQgY2hhbmdpbmcgY29vcmRpbmF0ZXMgYXQgYWxsLCB3aGljaCBpcyB3
aGF0CisgICAgICAgIHdlIG5lZWQgZm9yIHRoaXMgY2FzZSBpbiB2aWV3bGVzcyBtb2RlLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5j
bHVkZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJBcHBsZXQ6OmludHJpbnNpY1NpemUpOiBV
c2Ugd2lkZ2V0IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQXBwbGV0OjpjcmVh
dGVXaWRnZXRJZk5lY2Vzc2FyeSk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckFwcGxldC5oOiBNYWtlIG1vcmUgdGhpbmdzIHByaXZhdGUuIEdldCByaWQgb2YgdW5uZWVkZWQK
KyAgICAgICAgZXhwbGljaXQgZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJGcmFtZS5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZXMuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGcmFtZTo6ZWRnZUluZm8pOiBVcGRhdGVkIHRvIHVzZSBub2RlIGZ1bmN0aW9uIHNv
IGhlYWRlcgorICAgICAgICBkb2Vzbid0IGhhdmUgdG8gZGVmaW5lIGVsZW1lbnQgZnVuY3Rpb24u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZTo6dmlld0NsZWFyZWQpOiBEaXR0by4gQWxz
byBjaGFuZ2VkIHRvIHVzZSB3aWRnZXQKKyAgICAgICAgZnVuY3Rpb24uCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRnJhbWUuaDogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4gTWFkZSBz
b21lIHRoaW5ncworICAgICAgICBwcml2YXRlLiBHb3QgcmlkIG9mIGVsZW1lbnQgZnVuY3Rpb24u
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHA6IFJlbW92ZWQgdW5uZWVkZWQg
aW5jbHVkZXMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0Ojp+UmVuZGVyUGFydCk6IENo
YW5nZWQgdG8gdXNlIGNsZWFyV2lkZ2V0IGZ1bmN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUGFydDo6c2V0V2lkZ2V0KTogQ2hhbmdlZCB0byB1c2Ugd2lkZ2V0IGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydDo6ZGVsZXRlV2lkZ2V0KTogQ2hhbmdlZCB0byB1c2Ug
cGFzc2VkLWluIHdpZGdldC4KKyAgICAgICAgVGhpcyBpcyBub3cgb25seSBjYWxsZWQgYnkgdGhl
IGNsZWFyV2lkZ2V0IGZ1bmN0aW9uLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclBhcnQu
aDogUmVtb3ZlZCB1bm5lZWRlZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgTWFkZSBt
b3JlIGZ1bmN0aW9ucyBwcml2YXRlLiBVcGRhdGVkIGRlbGV0ZVdpZGdldCB0byB0YWtlIHdpZGdl
dCBhcmd1bWVudC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6On5SZW5kZXJQYXJ0T2JqZWN0KTog
dXNlIGZyYW1lVmlldyBmdW5jdGlvbgorICAgICAgICBpbnN0ZWFkIG9mIGdldHRpbmcgYXQgbV92
aWV3IGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydE9iamVjdDo6dXBkYXRl
V2lkZ2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0T2JqZWN0OjpsYXlv
dXQpOiBEaXR0by4gU2FtZSBmb3Igd2lkZ2V0IGFuZCBtX3dpZGdldC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclBhcnRPYmplY3Q6OnZpZXdDbGVhcmVkKTogRGl0dG8uCisKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5oOiBNYWRlIHNvbWUgZnVuY3Rpb25zIHByaXZhdGUu
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcldpZGdldDo6UmVuZGVyV2lkZ2V0KTogSW5pdGlhbGl6ZSBtX2ZyYW1lVmlldyB3
aXRoCisgICAgICAgIGNvbnN0cnVjdGlvbiBzeW50YXggaW5zdGVhZCBvZiBhc3NpZ25tZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpkZXN0cm95KTogVXBkYXRlZCBmb3IgbmFt
ZSBjaGFuZ2Ugb2YgbV92aWV3CisgICAgICAgIHRvIG1fZnJhbWVWaWV3LgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyV2lkZ2V0Ojp+UmVuZGVyV2lkZ2V0KTogVXNlIGNsZWFyV2lkZ2V0IHRvIGRl
bGV0ZQorICAgICAgICB0aGUgd2lkZ2V0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0
OjpzZXRXaWRnZXQpOiBVc2UgY2xlYXJXaWRnZXQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJX
aWRnZXQ6OnBhaW50KTogVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2Ugb2YgbV92aWV3CisgICAgICAg
IHRvIG1fZnJhbWVWaWV3LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyV2lkZ2V0OjpkZWxldGVX
aWRnZXQpOiBDaGFuZ2VkIHRvIHVzZSBwYXNzZWQtaW4gd2lkZ2V0LgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5oOiBNYWRlIG1hbnkgZnVuY3Rpb25zIHByb3RlY3RlZCwgb3Ro
ZXJzCisgICAgICAgIHByaXZhdGUgYW5kIG1hZGUgYWxsIGRhdGEgbWVtYmVycyBwcml2YXRlLgor
CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oOiBSZW1vdmVkIHVuaGVscGZ1bCBt
YXggYW5kIG1pbiBmdW5jdGlvbnMuIFRoZXNlCisgICAgICAgIGp1c3QgZG8gd2hhdCBzdGQ6Om1h
eCBhbmQgc3RkOjptaW4gd2lsbCBhbHJlYWR5IGRvIGF1dG9tYXRpY2FsbHkgZm9yIHRoaXMKKyAg
ICAgICAgdHlwZSwgc28gdGhleSBhcmUgbm90IGhlbHBmdWwuCisKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OlNWR0ltYWdl
KTogUmVtb3ZlZCB1bm5lZWRlZCBpbml0aWFsIHZhbHVlcyBmb3IgdHlwZXMKKyAgICAgICAgdGhh
dCBpbml0aWFsaXplIHRvIHplcm8gd2l0aG91dCBhbnl0aGluZyBleHBsaWNpdC4KKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ltYWdlOjp+U1ZHSW1hZ2UpOiBVcGRhdGUgc2luY2UgbV9mcmFtZSBhbmQg
bV9mcmFtZVZpZXcgYXJlCisgICAgICAgIG5vIGxvbmdlciBzdG9yZWQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW1hZ2U6OnVzZXNDb250YWluZXJTaXplKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbWFnZTo6c2l6ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Omhh
c1JlbGF0aXZlV2lkdGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpoYXNS
ZWxhdGl2ZUhlaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRyYXcp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6OmRhdGFDaGFuZ2Vk
KTogRGl0dG8uCisKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuaDogUmVtb3ZlZCB1
bm5lZWRlZCBpbmNsdWRlcyBhbmQgdW5uZWVkZWQgZGF0YQorICAgICAgICBtZW1iZXJzIG1fZG9j
dW1lbnQsIG1fZnJhbWUsIG1fZnJhbWVWaWV3LCBhbmQgbV9taW5TaXplLgorCiAyMDA5LTA2LTAx
ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGltaXRyaSBHbGF6a292LiAgTGFuZGVkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL1dl
YkNvcmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShy
ZXZpc2lvbiA0NDMxMykKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5
KQpAQCAtMjMyLDkgKzIzMiwxMCBAQCBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE0c2Nyb2xs
T3ZlcmZsCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1c2VuZFNjcm9sbEV2ZW50RXYKIF9f
Wk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdkcmFnU291cmNlRW5kZWRBdEVSS05TXzE4UGxhdGZv
cm1Nb3VzZUV2ZW50RU5TXzEzRHJhZ09wZXJhdGlvbkUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5k
bGVyMTdkcmFnU291cmNlTW92ZWRUb0VSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQorX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIxN2V2ZW50TWF5U3RhcnREcmFnRVA3TlNFdmVudAogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIyMGhhbmRsZVRleHRJbnB1dEV2ZW50RVJLTlNfNlN0cmluZ0VQ
TlNfNUV2ZW50RWJiCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwaGl0VGVzdFJlc3VsdEF0
UG9pbnRFUktOU184SW50UG9pbnRFYmIKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjBzZW5k
Q29udGV4dE1lbnVFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQorX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIyMHNlbmRDb250ZXh0TWVudUV2ZW50RVA3TlNFdmVudAogX19aTjdXZWJD
b3JlMTJFdmVudEhhbmRsZXIyN2NhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZEV2CiBfX1pON1dl
YkNvcmUxMkV2ZW50SGFuZGxlcjdtb3VzZVVwRVA3TlNFdmVudAogX19aTjdXZWJDb3JlMTJFdmVu
dEhhbmRsZXI4a2V5RXZlbnRFUDdOU0V2ZW50CkBAIC0zOTUsNyArMzk2LDYgQEAgX19aTjdXZWJD
b3JlMTZ0aHJlYWRHbG9iYWxEYXRhRXYKIF9fWk43V2ViQ29yZTE3RE9NSW1wbGVtZW50YXRpb24x
NGlzVGV4dE1JTUVUeXBlRVJLTlNfNlN0cmluZ0UKIF9fWk43V2ViQ29yZTE3R2x5cGhQYWdlVHJl
ZU5vZGUxOHRyZWVHbHlwaFBhZ2VDb3VudEV2CiBfX1pON1dlYkNvcmUxN2VxdWFsSWdub3JpbmdD
YXNlRVBOU18xMFN0cmluZ0ltcGxFUzFfCi1fX1pON1dlYkNvcmUxOFBsYXRmb3JtTW91c2VFdmVu
dEMxRVA3TlNFdmVudAogX19aTjdXZWJDb3JlMThpc1N0YXJ0T2ZQYXJhZ3JhcGhFUktOU18xNVZp
c2libGVQb3NpdGlvbkUKIF9fWk43V2ViQ29yZTE5QW5pbWF0aW9uQ29udHJvbGxlcjIwcGF1c2VB
bmltYXRpb25BdFRpbWVFUE5TXzEyUmVuZGVyT2JqZWN0RVJLTlNfNlN0cmluZ0VkCiBfX1pON1dl
YkNvcmUxOUFuaW1hdGlvbkNvbnRyb2xsZXIyMXBhdXNlVHJhbnNpdGlvbkF0VGltZUVQTlNfMTJS
ZW5kZXJPYmplY3RFUktOU182U3RyaW5nRWQKQEAgLTUxOSw3ICs1MTksNyBAQCBfX1pON1dlYkNv
cmU1RnJhbWUyOHNlYXJjaEZvckxhYmVsc0JlZm9yCiBfX1pON1dlYkNvcmU1RnJhbWUzNHNldE1h
cmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWRFYgogX19aTjdXZWJDb3JlNUZyYW1lNGluaXRF
dgogX19aTjdXZWJDb3JlNUZyYW1lNnNjcmlwdEV2Ci1fX1pON1dlYkNvcmU1RnJhbWU3c2V0Vmll
d0VQTlNfOUZyYW1lVmlld0UKK19fWk43V2ViQ29yZTVGcmFtZTdzZXRWaWV3RU4zV1RGMTBQYXNz
UmVmUHRySU5TXzlGcmFtZVZpZXdFRUUKIF9fWk43V2ViQ29yZTVGcmFtZUMxRVBOU180UGFnZUVQ
TlNfMjFIVE1MRnJhbWVPd25lckVsZW1lbnRFUE5TXzE3RnJhbWVMb2FkZXJDbGllbnRFCiBfX1pO
N1dlYkNvcmU1RnJhbWVEMUV2CiBfX1pON1dlYkNvcmU1SW1hZ2UxMnN1cHBvcnRzVHlwZUVSS05T
XzZTdHJpbmdFCkBAIC02ODMsOCArNjgzLDggQEAgX19aTjdXZWJDb3JlOUZyYW1lVmlldzIyc2V0
QmFzZUJhY2tncm91bgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzIzbGF5b3V0SWZOZWVkZWRSZWN1
cnNpdmVFdgogX19aTjdXZWJDb3JlOUZyYW1lVmlldzI5Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRo
UmFuZ2VFZmZiCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MjlzZXRTaG91bGRVcGRhdGVXaGlsZU9m
ZnNjcmVlbkViCi1fX1pON1dlYkNvcmU5RnJhbWVWaWV3QzFFUE5TXzVGcmFtZUUKLV9fWk43V2Vi
Q29yZTlGcmFtZVZpZXdDMUVQTlNfNUZyYW1lRVJLTlNfN0ludFNpemVFCitfX1pON1dlYkNvcmU5
RnJhbWVWaWV3NmNyZWF0ZUVQTlNfNUZyYW1lRQorX19aTjdXZWJDb3JlOUZyYW1lVmlldzZjcmVh
dGVFUE5TXzVGcmFtZUVSS05TXzdJbnRTaXplRQogX19aTjdXZWJDb3JlOUhUTUxOYW1lczEwbGlz
dGluZ1RhZ0UKIF9fWk43V2ViQ29yZTlIVE1MTmFtZXMxMXRleHRhcmVhVGFnRQogX19aTjdXZWJD
b3JlOUhUTUxOYW1lczEzYmxvY2txdW90ZVRhZ0UKQEAgLTc3Myw3ICs3NzMsNiBAQCBfX1pOSzdX
ZWJDb3JlMTFIaXN0b3J5SXRlbThjaGlsZHJlbkV2CiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRl
bThyZWZlcnJlckV2CiBfX1pOSzdXZWJDb3JlMTFIaXN0b3J5SXRlbTl1cmxTdHJpbmdFdgogX19a
Tks3V2ViQ29yZTExSGlzdG9yeUl0ZW05dmlld1N0YXRlRXYKLV9fWk5LN1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjE3ZXZlbnRNYXlTdGFydERyYWdFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKIF9f
Wk5LN1dlYkNvcmUxMkV2ZW50SGFuZGxlcjIwY3VycmVudEtleWJvYXJkRXZlbnRFdgogX19aTks3
V2ViQ29yZTEySWNvbkRhdGFiYXNlMTJkYXRhYmFzZVBhdGhFdgogX19aTks3V2ViQ29yZTEySWNv
bkRhdGFiYXNlMjRzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHlFdgpJbmRleDogV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMjAgQEAgc3RhdGljIGlubGluZSB2b2lkIHNj
cm9sbEFuZEFjY2VwdEV2ZW50KAogICAgICAgICBlLmFjY2VwdCgpOwogfQogCisjaWYgIVBMQVRG
T1JNKE1BQykKKworaW5saW5lIGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudExvb3BIYW5kbGVNb3Vz
ZVVwKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKQoreworICAgIHJldHVybiBm
YWxzZTsKK30KKworaW5saW5lIGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudExvb3BIYW5kbGVNb3Vz
ZURyYWdnZWQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCisjZW5kaWYKKwogRXZlbnRIYW5kbGVyOjpFdmVudEhhbmRsZXIoRnJh
bWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICAgICAsIG1fbW91c2VQcmVzc2VkKGZh
bHNlKQpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gNDQzMTMpCisrKyBXZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDIyICsyNywx
NSBAQAogI2RlZmluZSBFdmVudEhhbmRsZXJfaAogCiAjaW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIK
LSNpbmNsdWRlICJGb2N1c0RpcmVjdGlvbi5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIFBMQVRG
T1JNKE1BQykKLSNpbmNsdWRlICJXZWJDb3JlS2V5Ym9hcmRVSU1vZGUuaCIKLSNpZm5kZWYgX19P
QkpDX18KLWNsYXNzIE5TRXZlbnQ7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChfX09C
SkNfXykKIGNsYXNzIE5TVmlldzsKICNlbmRpZgotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTEsNyArNDQsNiBAQCBjbGFzcyBDbGlwYm9hcmQ7CiBjbGFzcyBDdXJzb3I7CiBj
bGFzcyBFdmVudDsKIGNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBG
cmFtZTsKIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKQEAgLTY4
LDcgKzYwLDYgQEAgY2xhc3MgU2Nyb2xsYmFyOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgU1ZHRWxl
bWVudEluc3RhbmNlOwogY2xhc3MgVGV4dEV2ZW50OwotY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwog
Y2xhc3MgV2lkZ2V0OwogICAgIAogZXh0ZXJuIGNvbnN0IGludCBMaW5rRHJhZ0h5c3RlcmVzaXM7
CkBAIC0xNTksMjEgKzE1MCwyNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZW5kUmVzaXplRXZlbnQo
KTsKICAgICB2b2lkIHNlbmRTY3JvbGxFdmVudCgpOwogICAgIAotI2lmIFBMQVRGT1JNKE1BQykK
KyNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQoX19PQkpDX18pCiAgICAgUGFzc1JlZlB0cjxL
ZXlib2FyZEV2ZW50PiBjdXJyZW50S2V5Ym9hcmRFdmVudCgpIGNvbnN0OwogCi0gICAgdm9pZCBt
b3VzZURvd24oTlNFdmVudCopOwotICAgIHZvaWQgbW91c2VEcmFnZ2VkKE5TRXZlbnQqKTsKLSAg
ICB2b2lkIG1vdXNlVXAoTlNFdmVudCopOwotICAgIHZvaWQgbW91c2VNb3ZlZChOU0V2ZW50Kik7
Ci0gICAgYm9vbCBrZXlFdmVudChOU0V2ZW50Kik7Ci0gICAgYm9vbCB3aGVlbEV2ZW50KE5TRXZl
bnQqKTsKKyAgICB2b2lkIG1vdXNlRG93bihOU0V2ZW50ICopOworICAgIHZvaWQgbW91c2VEcmFn
Z2VkKE5TRXZlbnQgKik7CisgICAgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKik7CisgICAgdm9pZCBt
b3VzZU1vdmVkKE5TRXZlbnQgKik7CisgICAgYm9vbCBrZXlFdmVudChOU0V2ZW50ICopOworICAg
IGJvb2wgd2hlZWxFdmVudChOU0V2ZW50ICopOworCisgICAgYm9vbCBzZW5kQ29udGV4dE1lbnVF
dmVudChOU0V2ZW50ICopOworICAgIGJvb2wgZXZlbnRNYXlTdGFydERyYWcoTlNFdmVudCAqKTsK
IAotICAgIHZvaWQgc2VuZEZha2VFdmVudHNBZnRlcldpZGdldFRyYWNraW5nKE5TRXZlbnQqIGlu
aXRpYXRpbmdFdmVudCk7CisgICAgdm9pZCBzZW5kRmFrZUV2ZW50c0FmdGVyV2lkZ2V0VHJhY2tp
bmcoTlNFdmVudCAqaW5pdGlhdGluZ0V2ZW50KTsKIAogICAgIHZvaWQgc2V0QWN0aXZhdGlvbkV2
ZW50TnVtYmVyKGludCBudW0pIHsgbV9hY3RpdmF0aW9uRXZlbnROdW1iZXIgPSBudW07IH0KIAot
ICAgIE5TRXZlbnQgKmN1cnJlbnROU0V2ZW50KCk7CisgICAgc3RhdGljIE5TRXZlbnQgKmN1cnJl
bnROU0V2ZW50KCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTE5Myw4ICsxODcsOCBAQCBwcml2
YXRlOgogICAgIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgp
IGNvbnN0OwogICAgIAogICAgIGJvb2wgZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYpIGNvbnN0OwotICAgIHZvaWQgc2VsZWN0Q2xvc2VzdFdvcmRGcm9tTW91c2VF
dmVudChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCk7Ci0gICAgdm9p
ZCBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2ZW50KGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmIGV2ZW50KTsKKyAgICB2b2lkIHNlbGVjdENsb3Nlc3RXb3JkRnJv
bU1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOworICAgIHZv
aWQgc2VsZWN0Q2xvc2VzdFdvcmRPckxpbmtGcm9tTW91c2VFdmVudChjb25zdCBNb3VzZUV2ZW50
V2l0aEhpdFRlc3RSZXN1bHRzJik7CiAKICAgICBib29sIGhhbmRsZU1vdXNlRG91YmxlQ2xpY2tF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKIApAQCAtMjY2LDE0ICsyNjAsOCBAQCBw
cml2YXRlOgogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBhcmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5p
bmcgb2YgaGFuZGxlTW91c2VVcCBhbmQgaGFuZGxlRHJhZy4gIAogICAgIC8vIElmIHRoZXkgcmV0
dXJuIHRydWUgaXQgaW5kaWNhdGVzIHRoYXQgdGhleSBoYXZlIGNvbnN1bWVkIHRoZSBldmVudC4K
LSNpZiBQTEFURk9STShNQUMpCiAgICAgYm9vbCBldmVudExvb3BIYW5kbGVNb3VzZVVwKGNvbnN0
IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsKICAgICBib29sIGV2ZW50TG9vcEhhbmRs
ZU1vdXNlRHJhZ2dlZChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7Ci0gICAg
TlNWaWV3ICptb3VzZURvd25WaWV3SWZTdGlsbEdvb2QoKTsKLSNlbHNlCi0gICAgYm9vbCBldmVu
dExvb3BIYW5kbGVNb3VzZVVwKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKSB7
IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgZXZlbnRMb29wSGFuZGxlTW91c2VEcmFnZ2VkKGNv
bnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKSB7IHJldHVybiBmYWxzZTsgfQotI2Vu
ZGlmCiAKICAgICBib29sIGludmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhLZXlib2FyZEV2ZW50Kikg
Y29uc3Q7CiAKQEAgLTI4MSw2ICsyNjksMTIgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgY2FwdHVy
ZXNEcmFnZ2luZygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwdHVyZXNEcmFnZ2luZzsgfQogCisjaWYg
UExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkKF9fT0JKQ19fKQorICAgIE5TVmlldyAqbW91c2VEb3du
Vmlld0lmU3RpbGxHb29kKCk7CisKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgY3VycmVudFBsYXRm
b3JtTW91c2VFdmVudCgpIGNvbnN0OworI2VuZGlmCisKICAgICBGcmFtZSogbV9mcmFtZTsKIAog
ICAgIGJvb2wgbV9tb3VzZVByZXNzZWQ7CkBAIC0zMDQsNiArMjk4LDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fYXV0b3Njcm9sbEluUHJvZ3Jlc3M7CiAgICAgYm9vbCBtX21vdXNlRG93bk1heVN0
YXJ0QXV0b3Njcm9sbDsKICAgICBib29sIG1fbW91c2VEb3duV2FzSW5TdWJmcmFtZTsKKwogI2lm
IEVOQUJMRShTVkcpCiAgICAgYm9vbCBtX3N2Z1BhbjsKICAgICBSZWZQdHI8U1ZHRWxlbWVudElu
c3RhbmNlPiBtX2luc3RhbmNlVW5kZXJNb3VzZTsKQEAgLTMzOCw3ICszMzMsNiBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXc7CiAgICAgaW50IG1fYWN0aXZhdGlv
bkV2ZW50TnVtYmVyOwogI2VuZGlmCi0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcAkocmV2aXNpb24gNDQzMTMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgRnJhbWVWaWV3KiBGcmFtZTo6dmlldygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fdmlldy5nZXQoKTsKIH0KIAotdm9pZCBGcmFtZTo6c2V0VmlldyhG
cmFtZVZpZXcqIHZpZXcpCit2b2lkIEZyYW1lOjpzZXRWaWV3KFBhc3NSZWZQdHI8RnJhbWVWaWV3
PiB2aWV3KQogewogICAgIC8vIERldGFjaCB0aGUgZG9jdW1lbnQgbm93LCBzbyBhbnkgb25Vbmxv
YWQgaGFuZGxlcnMgZ2V0IHJ1biAtIGlmCiAgICAgLy8gd2Ugd2FpdCB1bnRpbCB0aGUgdmlldyBp
cyBkZXN0cm95ZWQsIHRoZW4gdGhpbmdzIHdvbid0IGJlCkBAIC0xNzUxLDIwICsxNzUxLDE4IEBA
IHZvaWQgRnJhbWU6OmNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYgdmkKIAogICAgIHNldFZpZXco
MCk7CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldzsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBm
cmFtZVZpZXc7CiAgICAgaWYgKGlzTWFpbkZyYW1lKSB7Ci0gICAgICAgIGZyYW1lVmlldyA9IG5l
dyBGcmFtZVZpZXcodGhpcywgdmlld3BvcnRTaXplKTsKKyAgICAgICAgZnJhbWVWaWV3ID0gRnJh
bWVWaWV3OjpjcmVhdGUodGhpcywgdmlld3BvcnRTaXplKTsKICAgICAgICAgZnJhbWVWaWV3LT5z
ZXRGaXhlZExheW91dFNpemUoZml4ZWRMYXlvdXRTaXplKTsKICAgICAgICAgZnJhbWVWaWV3LT5z
ZXRVc2VGaXhlZExheW91dCh1c2VGaXhlZExheW91dCk7CiAgICAgfSBlbHNlCi0gICAgICAgIGZy
YW1lVmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7CisgICAgICAgIGZyYW1lVmlldyA9IEZyYW1l
Vmlldzo6Y3JlYXRlKHRoaXMpOwogCiAgICAgZnJhbWVWaWV3LT5zZXRTY3JvbGxiYXJNb2Rlcyho
b3Jpem9udGFsU2Nyb2xsYmFyTW9kZSwgdmVydGljYWxTY3JvbGxiYXJNb2RlKTsKICAgICBmcmFt
ZVZpZXctPnVwZGF0ZURlZmF1bHRTY3JvbGxiYXJTdGF0ZSgpOwogCiAgICAgc2V0VmlldyhmcmFt
ZVZpZXcpOwotICAgIC8vIEZyYW1lVmlld3MgYXJlIGNyZWF0ZWQgd2l0aCBhIHJlZiBjb3VudCBv
ZiAxLiBSZWxlYXNlIHRoaXMgcmVmIHNpbmNlIHdlJ3ZlIGFzc2lnbmVkIGl0IHRvIGZyYW1lLgot
ICAgIGZyYW1lVmlldy0+ZGVyZWYoKTsKIAogICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IuaXNWYWxp
ZCgpKQogICAgICAgICBmcmFtZVZpZXctPnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShiYWNr
Z3JvdW5kQ29sb3IsIHRyYW5zcGFyZW50KTsKQEAgLTE3NzMsNyArMTc3MSw3IEBAIHZvaWQgRnJh
bWU6OmNyZWF0ZVZpZXcoY29uc3QgSW50U2l6ZSYgdmkKICAgICAgICAgZnJhbWVWaWV3LT5zZXRQ
YXJlbnRWaXNpYmxlKHRydWUpOwogCiAgICAgaWYgKG93bmVyUmVuZGVyZXIoKSkKLSAgICAgICAg
b3duZXJSZW5kZXJlcigpLT5zZXRXaWRnZXQoZnJhbWVWaWV3KTsKKyAgICAgICAgb3duZXJSZW5k
ZXJlcigpLT5zZXRXaWRnZXQoZnJhbWVWaWV3LmdldCgpKTsKIAogICAgIGlmIChIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyID0gb3duZXJFbGVtZW50KCkpCiAgICAgICAgIHZpZXcoKS0+c2V0
Q2FuSGF2ZVNjcm9sbGJhcnMob3duZXItPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJBbHdh
eXNPZmYpOwpJbmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0ZyYW1lLmgJKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUsNyArNSw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgIDIw
MDAtMjAwMSBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KICAqICAgICAgICAgICAg
ICAgICAgICAgMjAwMC0yMDAxIERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgogICogICAg
ICAgICAgICAgICAgICAgICAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpIDwxU3RlaW5AZ214LmRlPgot
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4K
ICAqCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRnJhbWUocGFnZSwgb3duZXJFbGVtZW50LCBjbGllbnQpKTsKICAgICB9Ci0gICAg
dm9pZCBzZXRWaWV3KEZyYW1lVmlldyopOworICAgIHZvaWQgc2V0VmlldyhQYXNzUmVmUHRyPEZy
YW1lVmlldz4pOwogICAgIH5GcmFtZSgpOwogICAgIAogICAgIHZvaWQgaW5pdCgpOwpJbmRleDog
V2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0Zy
YW1lVHJlZS5jcHAJKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJGcmFtZVRyZWUu
aCIKIAogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpJ
bmRleDogV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDggKzkwLDcgQEAgc3RydWN0IFNjaGVkdWxl
ZEV2ZW50IHsKIH07CiAKIEZyYW1lVmlldzo6RnJhbWVWaWV3KEZyYW1lKiBmcmFtZSkKLSAgICA6
IG1fcmVmQ291bnQoMSkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCisgICAgOiBtX2ZyYW1lKGZyYW1l
KQogICAgICwgbV92bW9kZShTY3JvbGxiYXJBdXRvKQogICAgICwgbV9obW9kZShTY3JvbGxiYXJB
dXRvKQogICAgICwgbV9zbG93UmVwYWludE9iamVjdENvdW50KDApCkBAIC0xMTQsMzYgKzExMywy
MSBAQCBGcmFtZVZpZXc6OkZyYW1lVmlldyhGcmFtZSogZnJhbWUpCiAgICAgLCBtX2xvY2tlZFRv
QW5jaG9yKGZhbHNlKQogewogICAgIGluaXQoKTsKLSAgICBzaG93KCk7CiB9CiAKLUZyYW1lVmll
dzo6RnJhbWVWaWV3KEZyYW1lKiBmcmFtZSwgY29uc3QgSW50U2l6ZSYgaW5pdGlhbFNpemUpCi0g
ICAgOiBtX3JlZkNvdW50KDEpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV92bW9kZShT
Y3JvbGxiYXJBdXRvKQotICAgICwgbV9obW9kZShTY3JvbGxiYXJBdXRvKQotICAgICwgbV9zbG93
UmVwYWludE9iamVjdENvdW50KDApCi0gICAgLCBtX2xheW91dFRpbWVyKHRoaXMsICZGcmFtZVZp
ZXc6OmxheW91dFRpbWVyRmlyZWQpCi0gICAgLCBtX2xheW91dFJvb3QoMCkKLSAgICAsIG1fcG9z
dExheW91dFRhc2tzVGltZXIodGhpcywgJkZyYW1lVmlldzo6cG9zdExheW91dFRpbWVyRmlyZWQp
Ci0gICAgLCBtX25lZWRUb0luaXRTY3JvbGxiYXJzKHRydWUpCi0gICAgLCBtX2lzVHJhbnNwYXJl
bnQoZmFsc2UpCi0gICAgLCBtX2Jhc2VCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQotICAg
ICwgbV9tZWRpYVR5cGUoInNjcmVlbiIpCi0gICAgLCBtX2VucXVldWVFdmVudHMoMCkKLSAgICAs
IG1fb3ZlcmZsb3dTdGF0dXNEaXJ0eSh0cnVlKQotICAgICwgbV92aWV3cG9ydFJlbmRlcmVyKDAp
Ci0gICAgLCBtX3dhc1Njcm9sbGVkQnlVc2VyKGZhbHNlKQotICAgICwgbV9pblByb2dyYW1tYXRp
Y1Njcm9sbChmYWxzZSkKLSAgICAsIG1fZGVmZXJyZWRSZXBhaW50VGltZXIodGhpcywgJkZyYW1l
Vmlldzo6ZGVmZXJyZWRSZXBhaW50VGltZXJGaXJlZCkKLSAgICAsIG1fc2hvdWxkVXBkYXRlV2hp
bGVPZmZzY3JlZW4odHJ1ZSkKLSAgICAsIG1fZGVmZXJTZXROZWVkc0xheW91dHMoMCkKLSAgICAs
IG1fc2V0TmVlZHNMYXlvdXRXYXNEZWZlcnJlZChmYWxzZSkKLSAgICAsIG1fbG9ja2VkVG9BbmNo
b3IoZmFsc2UpCitQYXNzUmVmUHRyPEZyYW1lVmlldz4gRnJhbWVWaWV3OjpjcmVhdGUoRnJhbWUq
IGZyYW1lKQogewotICAgIGluaXQoKTsKLSAgICBXaWRnZXQ6OnNldEZyYW1lUmVjdChJbnRSZWN0
KHgoKSwgeSgpLCBpbml0aWFsU2l6ZS53aWR0aCgpLCBpbml0aWFsU2l6ZS5oZWlnaHQoKSkpOwot
ICAgIHNob3coKTsKKyAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3ID0gYWRvcHRSZWYobmV3IEZy
YW1lVmlldyhmcmFtZSkpOworICAgIHZpZXctPnNob3coKTsKKyAgICByZXR1cm4gdmlldy5yZWxl
YXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8RnJhbWVWaWV3PiBGcmFtZVZpZXc6OmNyZWF0ZShGcmFt
ZSogZnJhbWUsIGNvbnN0IEludFNpemUmIGluaXRpYWxTaXplKQoreworICAgIFJlZlB0cjxGcmFt
ZVZpZXc+IHZpZXcgPSBhZG9wdFJlZihuZXcgRnJhbWVWaWV3KGZyYW1lKSk7CisgICAgdmlldy0+
V2lkZ2V0OjpzZXRGcmFtZVJlY3QoSW50UmVjdCh2aWV3LT5wb3MoKSwgaW5pdGlhbFNpemUpKTsK
KyAgICB2aWV3LT5zaG93KCk7CisgICAgcmV0dXJuIHZpZXcucmVsZWFzZSgpOwogfQogCiBGcmFt
ZVZpZXc6On5GcmFtZVZpZXcoKQpAQCAtMTU4LDcgKzE0Miw2IEBAIEZyYW1lVmlldzo6fkZyYW1l
VmlldygpCiAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7IC8vIFJlbW92ZSBu
YXRpdmUgc2Nyb2xsYmFycyBub3cgYmVmb3JlIHdlIGxvc2UgdGhlIGNvbm5lY3Rpb24gdG8gdGhl
IEhvc3RXaW5kb3cuCiAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoZmFsc2UpOwogICAgIAot
ICAgIEFTU0VSVChtX3JlZkNvdW50ID09IDApOwogICAgIEFTU0VSVChtX3NjaGVkdWxlZEV2ZW50
cy5pc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9lbnF1ZXVlRXZlbnRzKTsKIApJbmRleDogV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaAkocmV2aXNpb24gNDQzMTMpCisrKyBXZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMiBAQCBjbGFzcyBTdHJpbmc7CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBjbGFzcyBUaW1lcjsKIAotY2xhc3MgRnJhbWVWaWV3IDogcHVibGljIFNjcm9s
bFZpZXcgeworY2xhc3MgRnJhbWVWaWV3IDogcHVibGljIFNjcm9sbFZpZXcsIHB1YmxpYyBSZWZD
b3VudGVkPEZyYW1lVmlldz4gewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJWaWV3
OwogCi0gICAgRnJhbWVWaWV3KEZyYW1lKik7Ci0gICAgRnJhbWVWaWV3KEZyYW1lKiwgY29uc3Qg
SW50U2l6ZSYgaW5pdGlhbFNpemUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZyYW1lVmlldz4g
Y3JlYXRlKEZyYW1lKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RnJhbWVWaWV3PiBjcmVhdGUo
RnJhbWUqLCBjb25zdCBJbnRTaXplJiBpbml0aWFsU2l6ZSk7CiAKICAgICB2aXJ0dWFsIH5GcmFt
ZVZpZXcoKTsKIApAQCAtNjQsMTAgKzY0LDYgQEAgcHVibGljOgogICAgIEZyYW1lKiBmcmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWUuZ2V0KCk7IH0KICAgICB2b2lkIGNsZWFyRnJhbWUoKTsK
IAotICAgIHZvaWQgcmVmKCkgeyArK21fcmVmQ291bnQ7IH0KLSAgICB2b2lkIGRlcmVmKCkgeyBp
ZiAoIS0tbV9yZWZDb3VudCkgZGVsZXRlIHRoaXM7IH0KLSAgICBib29sIGhhc09uZVJlZigpIHsg
cmV0dXJuIG1fcmVmQ291bnQgPT0gMTsgfQotCiAgICAgaW50IG1hcmdpbldpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXJnaW5zLndpZHRoKCk7IH0gLy8gLTEgbWVhbnMgZGVmYXVsdAogICAgIGlu
dCBtYXJnaW5IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdpbnMuaGVpZ2h0KCk7IH0gLy8g
LTEgbWVhbnMgZGVmYXVsdAogICAgIHZvaWQgc2V0TWFyZ2luV2lkdGgoaW50KTsKQEAgLTE5Myw2
ICsxODksOCBAQCBwdWJsaWM6CiAKIAogcHJpdmF0ZToKKyAgICBGcmFtZVZpZXcoRnJhbWUqKTsK
KwogICAgIHZvaWQgcmVzZXQoKTsKICAgICB2b2lkIGluaXQoKTsKIApAQCAtMjI1LDcgKzIyMyw2
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGRvdWJsZSBzQ3VycmVudFBhaW50VGltZVN0
YW1wOyAvLyB1c2VkIGZvciBkZXRlY3RpbmcgZGVjb2RlZCByZXNvdXJjZSB0aHJhc2ggaW4gdGhl
IGNhY2hlCiAKLSAgICB1bnNpZ25lZCBtX3JlZkNvdW50OwogICAgIEludFNpemUgbV9zaXplOwog
ICAgIEludFNpemUgbV9tYXJnaW5zOwogICAgIE93blB0cjxIYXNoU2V0PFJlbmRlclBhcnRPYmpl
Y3QqPiA+IG1fd2lkZ2V0VXBkYXRlU2V0OwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0JKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYxLDcgKzYxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBkb3VibGUgRXZlbnRIYW5kbGVyOjpUZXh0
RHJhZ0RlbGF5ID0gMC4xNTsKIAotc3RhdGljIFJldGFpblB0cjxOU0V2ZW50PiYgY3VycmVudEV2
ZW50KCkKK3N0YXRpYyBSZXRhaW5QdHI8TlNFdmVudD4mIGN1cnJlbnROU0V2ZW50U2xvdCgpCiB7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChSZXRhaW5QdHI8TlNFdmVudD4sIGV2ZW50LCAoKSk7
CiAgICAgcmV0dXJuIGV2ZW50OwpAQCAtNjksMTkgKzY5LDQ2IEBAIHN0YXRpYyBSZXRhaW5QdHI8
TlNFdmVudD4mIGN1cnJlbnRFdmVudCgKIAogTlNFdmVudCAqRXZlbnRIYW5kbGVyOjpjdXJyZW50
TlNFdmVudCgpCiB7Ci0gICAgcmV0dXJuIGN1cnJlbnRFdmVudCgpLmdldCgpOworICAgIHJldHVy
biBjdXJyZW50TlNFdmVudFNsb3QoKS5nZXQoKTsKK30KKworY2xhc3MgQ3VycmVudEV2ZW50U2Nv
cGUgOiBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQ3VycmVudEV2ZW50U2NvcGUoTlNFdmVu
dCAqKTsKKyAgICB+Q3VycmVudEV2ZW50U2NvcGUoKTsKKworcHJpdmF0ZToKKyAgICBSZXRhaW5Q
dHI8TlNFdmVudD4gbV9zYXZlZEN1cnJlbnRFdmVudDsKKyNpZm5kZWYgTkRFQlVHCisgICAgUmV0
YWluUHRyPE5TRXZlbnQ+IG1fZXZlbnQ7CisjZW5kaWYKK307CisKK2lubGluZSBDdXJyZW50RXZl
bnRTY29wZTo6Q3VycmVudEV2ZW50U2NvcGUoTlNFdmVudCAqZXZlbnQpCisgICAgOiBtX3NhdmVk
Q3VycmVudEV2ZW50KGN1cnJlbnROU0V2ZW50U2xvdCgpKQorI2lmbmRlZiBOREVCVUcKKyAgICAs
IG1fZXZlbnQoZXZlbnQpCisjZW5kaWYKK3sKKyAgICBjdXJyZW50TlNFdmVudFNsb3QoKSA9IGV2
ZW50OworfQorCitpbmxpbmUgQ3VycmVudEV2ZW50U2NvcGU6On5DdXJyZW50RXZlbnRTY29wZSgp
Cit7CisgICAgQVNTRVJUKGN1cnJlbnROU0V2ZW50U2xvdCgpID09IG1fZXZlbnQpOworICAgIGN1
cnJlbnROU0V2ZW50U2xvdCgpID0gbV9zYXZlZEN1cnJlbnRFdmVudDsKIH0KIAogYm9vbCBFdmVu
dEhhbmRsZXI6OndoZWVsRXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7Ci0gICAgUmV0YWluUHRyPE5T
RXZlbnQ+IG9sZEN1cnJlbnRFdmVudCA9IGN1cnJlbnRFdmVudCgpOwotICAgIGN1cnJlbnRFdmVu
dCgpID0gZXZlbnQ7CisgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAo
IXBhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFBsYXRmb3JtV2hlZWxFdmVudCB3
aGVlbEV2ZW50KGV2ZW50KTsKLSAgICBoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAg
IEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKIAotICAgIEFTU0VSVChjdXJyZW50RXZl
bnQoKSA9PSBldmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBvbGRDdXJyZW50RXZlbnQ7Cisg
ICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQsIHBhZ2UtPmNocm9tZSgpLT5w
bGF0Zm9ybVdpbmRvdygpKTsKKyAgICBoYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwogCiAg
ICAgcmV0dXJuIHdoZWVsRXZlbnQuaXNBY2NlcHRlZCgpOwogfQpAQCAtMTY1LDIwICsxOTIsMTIg
QEAgYm9vbCBFdmVudEhhbmRsZXI6Om5lZWRzS2V5Ym9hcmRFdmVudERpcwogCiBib29sIEV2ZW50
SGFuZGxlcjo6a2V5RXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7Ci0gICAgYm9vbCByZXN1bHQ7CiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCiAgICAgQVNTRVJUKFtldmVudCB0eXBl
XSA9PSBOU0tleURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TS2V5VXApOwogCi0gICAgUmV0YWlu
UHRyPE5TRXZlbnQ+IG9sZEN1cnJlbnRFdmVudCA9IGN1cnJlbnRFdmVudCgpOwotICAgIGN1cnJl
bnRFdmVudCgpID0gZXZlbnQ7Ci0KLSAgICByZXN1bHQgPSBrZXlFdmVudChQbGF0Zm9ybUtleWJv
YXJkRXZlbnQoZXZlbnQpKTsKLSAgICAKLSAgICBBU1NFUlQoY3VycmVudEV2ZW50KCkgPT0gZXZl
bnQpOwotICAgIGN1cnJlbnRFdmVudCgpID0gb2xkQ3VycmVudEV2ZW50OwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBzY29wZShldmVudCk7CisgICAgcmV0dXJu
IGtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOwogCiAgICAgRU5EX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKIApAQCAtMjIwLDE3ICsyMzksMTcgQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdgogCiBzdGF0aWMgYm9vbCBsYXN0RXZlbnRJc01vdXNl
VXAoKQogewotICAgIC8vIE1hbnkgQUsgd2lkZ2V0cyBydW4gdGhlaXIgb3duIGV2ZW50IGxvb3Bz
IGFuZCBjb25zdW1lIGV2ZW50cyB3aGlsZSB0aGUgbW91c2UgaXMgZG93bi4KLSAgICAvLyBXaGVu
IHRoZXkgZmluaXNoLCBjdXJyZW50RXZlbnQgaXMgdGhlIG1vdXNlVXAgdGhhdCB0aGV5IGV4aXRl
ZCBvbi4gIFdlIG5lZWQgdG8gdXBkYXRlCi0gICAgLy8gdGhlIGtodG1sIHN0YXRlIHdpdGggdGhp
cyBtb3VzZVVwLCB3aGljaCBraHRtbCBuZXZlciBzYXcuICBUaGlzIG1ldGhvZCBsZXRzIHVzIGRl
dGVjdAotICAgIC8vIHRoYXQgc3RhdGUuCisgICAgLy8gTWFueSBBcHBLaXQgd2lkZ2V0cyBydW4g
dGhlaXIgb3duIGV2ZW50IGxvb3BzIGFuZCBjb25zdW1lIGV2ZW50cyB3aGlsZSB0aGUgbW91c2Ug
aXMgZG93bi4KKyAgICAvLyBXaGVuIHRoZXkgZmluaXNoLCBjdXJyZW50RXZlbnQgaXMgdGhlIG1v
dXNlVXAgdGhhdCB0aGV5IGV4aXRlZCBvbi4gV2UgbmVlZCB0byB1cGRhdGUKKyAgICAvLyB0aGUg
V2ViQ29yZSBzdGF0ZSB3aXRoIHRoaXMgbW91c2VVcCwgd2hpY2ggd2UgbmV2ZXIgc2F3LiBUaGlz
IG1ldGhvZCBsZXRzIHVzIGRldGVjdAorICAgIC8vIHRoYXQgc3RhdGUuIEhhbmRsaW5nIHRoaXMg
d2FzIGNyaXRpY2FsIHdoZW4gd2UgdXNlZCBBcHBLaXQgd2lkZ2V0cyBmb3IgZm9ybSBlbGVtZW50
cy4KKyAgICAvLyBJdCdzIG5vdCBjbGVhciBpbiB3aGF0IGNhc2VzIHRoaXMgaXMgaGVscGZ1bCBu
b3cgLS0gaXQncyBwb3NzaWJsZSBpdCBjYW4gYmUgcmVtb3ZlZC4gCiAKICAgICBCRUdJTl9CTE9D
S19PQkpDX0VYQ0VQVElPTlM7CiAgICAgTlNFdmVudCAqY3VycmVudEV2ZW50QWZ0ZXJIYW5kbGlu
Z01vdXNlRG93biA9IFtOU0FwcCBjdXJyZW50RXZlbnRdOwotICAgIGlmIChjdXJyZW50RXZlbnQo
KSAhPSBjdXJyZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duICYmCi0gICAgICAgIFtjdXJy
ZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duIHR5cGVdID09IE5TTGVmdE1vdXNlVXAgJiYK
LSAgICAgICAgW2N1cnJlbnRFdmVudEFmdGVySGFuZGxpbmdNb3VzZURvd24gdGltZXN0YW1wXSA+
PSBbY3VycmVudEV2ZW50KCkuZ2V0KCkgdGltZXN0YW1wXSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBFdmVudEhhbmRsZXI6OmN1cnJlbnROU0V2ZW50KCkgIT0gY3VycmVu
dEV2ZW50QWZ0ZXJIYW5kbGluZ01vdXNlRG93bgorICAgICAgICAmJiBbY3VycmVudEV2ZW50QWZ0
ZXJIYW5kbGluZ01vdXNlRG93biB0eXBlXSA9PSBOU0xlZnRNb3VzZVVwCisgICAgICAgICYmIFtj
dXJyZW50RXZlbnRBZnRlckhhbmRsaW5nTW91c2VEb3duIHRpbWVzdGFtcF0gPj0gW0V2ZW50SGFu
ZGxlcjo6Y3VycmVudE5TRXZlbnQoKSB0aW1lc3RhbXBdOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzgsNyArMjU3LDggQEAgc3RhdGlj
IGJvb2wgbGFzdEV2ZW50SXNNb3VzZVVwKCkKIAogYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIC8vIEZJWE1FOiB0aGlz
IG1ldGhvZCBhbHdheXMgcmV0dXJucyB0cnVlCisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24g
YWx3YXlzIHJldHVybnMgdHJ1ZS4gSXQgc2hvdWxkIGJlIGNoYW5nZWQgZWl0aGVyIHRvIHJldHVy
bgorICAgIC8vIGZhbHNlIGluIHNvbWUgY2FzZXMgb3IgdGhlIHJldHVybiB2YWx1ZSBzaG91bGQg
YmUgcmVtb3ZlZC4KIAogICAgIGlmICghd2lkZ2V0KSB7CiAgICAgICAgIExPR19FUlJPUigiaGl0
IGEgUmVuZGVyV2lkZ2V0IHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIFdpZGdldCwgbWVhbnMgYSBm
cmFtZSBpcyBoYWxmLWNvbnN0cnVjdGVkIik7CkBAIC0yNTAsNyArMjcwLDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvVwogICAgIE5TVmlldyAqbm9kZVZpZXcgPSB3
aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCk7CiAgICAgQVNTRVJUKG5vZGVWaWV3KTsKICAgICBBU1NF
UlQoW25vZGVWaWV3IHN1cGVydmlld10pOwotICAgIE5TVmlldyAqdmlldyA9IFtub2RlVmlldyBo
aXRUZXN0Oltbbm9kZVZpZXcgc3VwZXJ2aWV3XSBjb252ZXJ0UG9pbnQ6W2N1cnJlbnRFdmVudCgp
LmdldCgpIGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF1dOworICAgIE5TVmlldyAqdmll
dyA9IFtub2RlVmlldyBoaXRUZXN0Oltbbm9kZVZpZXcgc3VwZXJ2aWV3XSBjb252ZXJ0UG9pbnQ6
W2N1cnJlbnROU0V2ZW50KCkgbG9jYXRpb25JbldpbmRvd10gZnJvbVZpZXc6bmlsXV07CiAgICAg
aWYgKCF2aWV3KSB7CiAgICAgICAgIC8vIFdlIHByb2JhYmx5IGhpdCB0aGUgYm9yZGVyIG9mIGEg
UmVuZGVyV2lkZ2V0CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjYzLDcgKzI4Myw3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3duRXZlbnRUb1cKICAgICBpZiAocGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5maXJzdFJlc3BvbmRlcigpICE9IHZpZXcpIHsKICAgICAgICAgLy8g
Tm9ybWFsbHkgW05TV2luZG93IHNlbmRFdmVudDpdIGhhbmRsZXMgc2V0dGluZyB0aGUgZmlyc3Qg
cmVzcG9uZGVyLgogICAgICAgICAvLyBCdXQgaW4gb3VyIGNhc2UsIHRoZSBldmVudCB3YXMgc2Vu
dCB0byB0aGUgdmlldyByZXByZXNlbnRpbmcgdGhlIGVudGlyZSB3ZWIgcGFnZS4KLSAgICAgICAg
aWYgKFtjdXJyZW50RXZlbnQoKS5nZXQoKSBjbGlja0NvdW50XSA8PSAxICYmIFt2aWV3IGFjY2Vw
dHNGaXJzdFJlc3BvbmRlcl0gJiYgW3ZpZXcgbmVlZHNQYW5lbFRvQmVjb21lS2V5XSkKKyAgICAg
ICAgaWYgKFtjdXJyZW50TlNFdmVudCgpIGNsaWNrQ291bnRdIDw9IDEgJiYgW3ZpZXcgYWNjZXB0
c0ZpcnN0UmVzcG9uZGVyXSAmJiBbdmlldyBuZWVkc1BhbmVsVG9CZWNvbWVLZXldKQogICAgICAg
ICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5tYWtlRmlyc3RSZXNwb25kZXIodmlldyk7
CiAgICAgfQogCkBAIC0yODAsNyArMzAwLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3Vz
ZURvd25FdmVudFRvVwogCiAgICAgQVNTRVJUKCFtX3NlbmRpbmdFdmVudFRvU3Vidmlldyk7CiAg
ICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0cnVlOwotICAgIFt2aWV3IG1vdXNlRG93bjpj
dXJyZW50RXZlbnQoKS5nZXQoKV07CisgICAgW3ZpZXcgbW91c2VEb3duOmN1cnJlbnROU0V2ZW50
KCldOwogICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KCF3YXNEZWZlcnJpbmdMb2FkaW5nKQpAQCAtMzU1LDcgKzM3NSw3IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpldmVudExvb3BIYW5kbGVNb3VzZUQKICAgICAgICAgQVNTRVJUKCFtX3NlbmRpbmdFdmVu
dFRvU3Vidmlldyk7CiAgICAgICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gdHJ1ZTsKICAg
ICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgICAgICBbdmlldyBtb3VzZURy
YWdnZWQ6Y3VycmVudEV2ZW50KCkuZ2V0KCldOworICAgICAgICBbdmlldyBtb3VzZURyYWdnZWQ6
Y3VycmVudE5TRXZlbnQoKV07CiAgICAgICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAg
ICAgICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7CiAgICAgfQpAQCAtMzgyLDcg
KzQwMiw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudExvb3BIYW5kbGVNb3VzZVUKICAgICAg
ICAgQVNTRVJUKCFtX3NlbmRpbmdFdmVudFRvU3Vidmlldyk7CiAgICAgICAgIG1fc2VuZGluZ0V2
ZW50VG9TdWJ2aWV3ID0gdHJ1ZTsKICAgICAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05T
OwotICAgICAgICBbdmlldyBtb3VzZVVwOmN1cnJlbnRFdmVudCgpLmdldCgpXTsKKyAgICAgICAg
W3ZpZXcgbW91c2VVcDpjdXJyZW50TlNFdmVudCgpXTsKICAgICAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSBmYWxzZTsKICAg
ICB9CkBAIC0zOTQsNyArNDE0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2
ZW50VG9TdQogewogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIHN3aXRj
aCAoW2N1cnJlbnRFdmVudCgpLmdldCgpIHR5cGVdKSB7CisgICAgc3dpdGNoIChbY3VycmVudE5T
RXZlbnQoKSB0eXBlXSkgewogICAgICAgICBjYXNlIE5TTGVmdE1vdXNlRHJhZ2dlZDoKICAgICAg
ICAgY2FzZSBOU090aGVyTW91c2VEcmFnZ2VkOgogICAgICAgICBjYXNlIE5TUmlnaHRNb3VzZURy
YWdnZWQ6CkBAIC00MDUsMTIgKzQyNSwxMiBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1N1YmZy
YW1lRXZlbnRUb1N1CiAgICAgICAgICAgICBpZiAoc3ViZnJhbWUtPnBhZ2UoKS0+ZHJhZ0NvbnRy
b2xsZXIoKS0+ZGlkSW5pdGlhdGVEcmFnKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBjYXNlIE5TTW91c2VNb3ZlZDoKLSAgICAgICAgICAgIC8vIFNpbmNlIHdlJ3Jl
IHBhc3NpbmcgaW4gY3VycmVudEV2ZW50KCkgaGVyZSwgd2UgY2FuIGNhbGwKKyAgICAgICAgICAg
IC8vIFNpbmNlIHdlJ3JlIHBhc3NpbmcgaW4gY3VycmVudE5TRXZlbnQoKSBoZXJlLCB3ZSBjYW4g
Y2FsbAogICAgICAgICAgICAgLy8gaGFuZGxlTW91c2VNb3ZlRXZlbnQoKSBkaXJlY3RseSwgc2lu
Y2UgdGhlIHNhdmUvcmVzdG9yZSBvZgotICAgICAgICAgICAgLy8gY3VycmVudEV2ZW50KCkgdGhh
dCBtb3VzZU1vdmVkKCkgZG9lcyB3b3VsZCBoYXZlIG5vIGVmZmVjdC4KKyAgICAgICAgICAgIC8v
IGN1cnJlbnROU0V2ZW50KCkgdGhhdCBtb3VzZU1vdmVkKCkgZG9lcyB3b3VsZCBoYXZlIG5vIGVm
ZmVjdC4KICAgICAgICAgICAgIEFTU0VSVCghbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcpOwogICAg
ICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0cnVlOwotICAgICAgICAgICAgc3Vi
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChjdXJyZW50RXZlbnQo
KS5nZXQoKSwgaG92ZXJlZE5vZGUpOworICAgICAgICAgICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCksIGhv
dmVyZWROb2RlKTsKICAgICAgICAgICAgIG1fc2VuZGluZ0V2ZW50VG9TdWJ2aWV3ID0gZmFsc2U7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCkBAIC00MzQsNyArNDU0LDcgQEAg
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIEFTU0VSVCghbV9zZW5kaW5nRXZlbnRUb1N1YnZp
ZXcpOwogICAgICAgICAgICAgbV9zZW5kaW5nRXZlbnRUb1N1YnZpZXcgPSB0cnVlOwotICAgICAg
ICAgICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChj
dXJyZW50RXZlbnQoKS5nZXQoKSk7CisgICAgICAgICAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGN1cnJlbnRQbGF0Zm9ybU1vdXNlRXZlbnQoKSk7
CiAgICAgICAgICAgICBtX3NlbmRpbmdFdmVudFRvU3VidmlldyA9IGZhbHNlOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQ4NCwxMyArNTA0LDEzIEBAIGJvb2wgRXZl
bnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRvV2lkZ2UKIHsKICAgICBCRUdJTl9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiAgICAgICAgIAotICAgIGlmIChbY3VycmVudEV2ZW50KCkuZ2V0KCkgdHlw
ZV0gIT0gTlNTY3JvbGxXaGVlbCB8fCBtX3NlbmRpbmdFdmVudFRvU3VidmlldyB8fCAhd2lkZ2V0
KSAKKyAgICBpZiAoW2N1cnJlbnROU0V2ZW50KCkgdHlwZV0gIT0gTlNTY3JvbGxXaGVlbCB8fCBt
X3NlbmRpbmdFdmVudFRvU3VidmlldyB8fCAhd2lkZ2V0KSAKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgTlNWaWV3KiBub2RlVmlldyA9IHdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKTsKICAg
ICBBU1NFUlQobm9kZVZpZXcpOwogICAgIEFTU0VSVChbbm9kZVZpZXcgc3VwZXJ2aWV3XSk7Ci0g
ICAgTlNWaWV3ICp2aWV3ID0gW25vZGVWaWV3IGhpdFRlc3Q6W1tub2RlVmlldyBzdXBlcnZpZXdd
IGNvbnZlcnRQb2ludDpbY3VycmVudEV2ZW50KCkuZ2V0KCkgbG9jYXRpb25JbldpbmRvd10gZnJv
bVZpZXc6bmlsXV07CisgICAgTlNWaWV3ICp2aWV3ID0gW25vZGVWaWV3IGhpdFRlc3Q6W1tub2Rl
VmlldyBzdXBlcnZpZXddIGNvbnZlcnRQb2ludDpbY3VycmVudE5TRXZlbnQoKSBsb2NhdGlvbklu
V2luZG93XSBmcm9tVmlldzpuaWxdXTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIC8vIFdlIHBy
b2JhYmx5IGhpdCB0aGUgYm9yZGVyIG9mIGEgUmVuZGVyV2lkZ2V0CiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTUwMSw3ICs1MjEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZl
bnRUb1dpZGdlCiAgICAgLy8gY3Jhc2ggaWYgdGhlIE5TU2Nyb2xsVmlldyBpcyByZWxlYXNlZCBk
dXJpbmcgdGltZXIgb3IgbmV0d29yayBjYWxsYmFjayBkaXNwYXRjaAogICAgIC8vIGluIHRoZSBu
ZXN0ZWQgdHJhY2tpbmcgcnVubG9vcCB0aGF0IC1bTlNTY3JvbGxWaWV3IHNjcm9sbFdoZWVsOl0g
cnVucy4KICAgICBzZXROU1Njcm9sbFZpZXdTY3JvbGxXaGVlbFNob3VsZFJldGFpblNlbGYodHJ1
ZSk7Ci0gICAgW3ZpZXcgc2Nyb2xsV2hlZWw6Y3VycmVudEV2ZW50KCkuZ2V0KCldOworICAgIFt2
aWV3IHNjcm9sbFdoZWVsOmN1cnJlbnROU0V2ZW50KCldOwogICAgIHNldE5TU2Nyb2xsVmlld1Nj
cm9sbFdoZWVsU2hvdWxkUmV0YWluU2VsZihmYWxzZSk7CiAgICAgbV9zZW5kaW5nRXZlbnRUb1N1
YnZpZXcgPSBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTUyMiwxNCArNTQyLDkgQEAgdm9p
ZCBFdmVudEhhbmRsZXI6Om1vdXNlRG93bihOU0V2ZW50ICpldgogCiAgICAgbV9tb3VzZURvd25W
aWV3ID0gbmlsOwogICAgIAotICAgIFJldGFpblB0cjxOU0V2ZW50PiBvbGRDdXJyZW50RXZlbnQg
PSBjdXJyZW50RXZlbnQoKTsKLSAgICBjdXJyZW50RXZlbnQoKSA9IGV2ZW50OwotICAgIG1fbW91
c2VEb3duID0gUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KTsKLSAgICAKLSAgICBoYW5kbGVNb3Vz
ZVByZXNzRXZlbnQoZXZlbnQpOwotICAgIAotICAgIEFTU0VSVChjdXJyZW50RXZlbnQoKSA9PSBl
dmVudCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBvbGRDdXJyZW50RXZlbnQ7CisgICAgQ3VycmVu
dEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOworICAgIG1fbW91c2VEb3duID0gY3VycmVudFBsYXRm
b3JtTW91c2VFdmVudCgpOworICAgIGhhbmRsZU1vdXNlUHJlc3NFdmVudChtX21vdXNlRG93bik7
CiAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQpAQCAtNTQyLDEzICs1NTcsOCBA
QCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VEcmFnZ2VkKE5TRXZlbnQgCiAKICAgICBCRUdJTl9C
TE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gb2xkQ3VycmVu
dEV2ZW50ID0gY3VycmVudEV2ZW50KCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBldmVudDsKLQot
ICAgIGhhbmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50KTsKLSAgICAKLSAgICBBU1NFUlQoY3VycmVu
dEV2ZW50KCkgPT0gZXZlbnQpOwotICAgIGN1cnJlbnRFdmVudCgpID0gb2xkQ3VycmVudEV2ZW50
OworICAgIEN1cnJlbnRFdmVudFNjb3BlIHNjb3BlKGV2ZW50KTsKKyAgICBoYW5kbGVNb3VzZU1v
dmVFdmVudChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50KCkpOwogCiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIH0KQEAgLTU2MSw4ICs1NzEsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6
bW91c2VVcChOU0V2ZW50ICpldmVuCiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
CiAKLSAgICBSZXRhaW5QdHI8TlNFdmVudD4gb2xkQ3VycmVudEV2ZW50ID0gY3VycmVudEV2ZW50
KCk7Ci0gICAgY3VycmVudEV2ZW50KCkgPSBldmVudDsKKyAgICBDdXJyZW50RXZlbnRTY29wZSBz
Y29wZShldmVudCk7CiAKICAgICAvLyBPdXIgYmVoYXZpb3IgaGVyZSBpcyBhIGxpdHRsZSBkaWZm
ZXJlbnQgdGhhdCBRdC4gUXQgYWx3YXlzIHNlbmRzCiAgICAgLy8gYSBtb3VzZSByZWxlYXNlIGV2
ZW50LCBldmVuIGZvciBhIGRvdWJsZSBjbGljay4gVG8gY29ycmVjdCBwcm9ibGVtcwpAQCAtNTcz
LDEyICs1ODIsOSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VVcChOU0V2ZW50ICpldmVuCiAg
ICAgLy8gdHJlYXRlZCBhcyBhbm90aGVyIGRvdWJsZSBjbGljay4gSGVuY2UgdGhlICIlIDIiIGJl
bG93LgogICAgIGludCBjbGlja0NvdW50ID0gW2V2ZW50IGNsaWNrQ291bnRdOwogICAgIGlmIChj
bGlja0NvdW50ID4gMCAmJiBjbGlja0NvdW50ICUgMiA9PSAwKQotICAgICAgICBoYW5kbGVNb3Vz
ZURvdWJsZUNsaWNrRXZlbnQoZXZlbnQpOworICAgICAgICBoYW5kbGVNb3VzZURvdWJsZUNsaWNr
RXZlbnQoY3VycmVudFBsYXRmb3JtTW91c2VFdmVudCgpKTsKICAgICBlbHNlCi0gICAgICAgIGhh
bmRsZU1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKLSAgICAKLSAgICBBU1NFUlQoY3VycmVudEV2
ZW50KCkgPT0gZXZlbnQpOwotICAgIGN1cnJlbnRFdmVudCgpID0gb2xkQ3VycmVudEV2ZW50Owor
ICAgICAgICBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjdXJyZW50UGxhdGZvcm1Nb3VzZUV2ZW50
KCkpOwogICAgIAogICAgIG1fbW91c2VEb3duVmlldyA9IG5pbDsKIApAQCAtNjU3LDE1ICs2NjMs
OCBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6bW91c2VNb3ZlZChOU0V2ZW50ICplCiAgICAgICAgIHJl
dHVybjsKICAgICAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBSZXRh
aW5QdHI8TlNFdmVudD4gb2xkQ3VycmVudEV2ZW50ID0gY3VycmVudEV2ZW50KCk7Ci0gICAgY3Vy
cmVudEV2ZW50KCkgPSBldmVudDsKLSAgICAKLSAgICBtb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VF
dmVudChldmVudCkpOwotICAgIAotICAgIEFTU0VSVChjdXJyZW50RXZlbnQoKSA9PSBldmVudCk7
Ci0gICAgY3VycmVudEV2ZW50KCkgPSBvbGRDdXJyZW50RXZlbnQ7Ci0KKyAgICBDdXJyZW50RXZl
bnRTY29wZSBzY29wZShldmVudCk7CisgICAgbW91c2VNb3ZlZChjdXJyZW50UGxhdGZvcm1Nb3Vz
ZUV2ZW50KCkpOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKQEAgLTY5NSw0
ICs2OTQsMjggQEAgdW5zaWduZWQgRXZlbnRIYW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcgogICAg
IHJldHVybiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkN0cmxLZXkgfCBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OkFsdEtleTsKIH0KIAorUGxhdGZvcm1Nb3VzZUV2ZW50IEV2ZW50SGFuZGxlcjo6Y3Vy
cmVudFBsYXRmb3JtTW91c2VFdmVudCgpIGNvbnN0Cit7CisgICAgTlNWaWV3ICp3aW5kb3dWaWV3
ID0gbmlsOworICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQorICAgICAgICB3
aW5kb3dWaWV3ID0gcGFnZS0+Y2hyb21lKCktPnBsYXRmb3JtV2luZG93KCk7CisgICAgcmV0dXJu
IFBsYXRmb3JtTW91c2VFdmVudChjdXJyZW50TlNFdmVudCgpLCB3aW5kb3dWaWV3KTsKK30KKwor
Ym9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50KE5TRXZlbnQgKmV2ZW50KQor
eworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHNlbmRDb250ZXh0TWVudUV2ZW50KFBsYXRm
b3JtTW91c2VFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCktPnBsYXRmb3JtV2luZG93KCkpKTsK
K30KKworYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50TWF5U3RhcnREcmFnKE5TRXZlbnQgKmV2ZW50
KQoreworICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGV2ZW50TWF5U3RhcnREcmFnKFBsYXRm
b3JtTW91c2VFdmVudChldmVudCwgcGFnZS0+Y2hyb21lKCktPnBsYXRmb3JtV2luZG93KCkpKTsK
K30KKwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgJKHJldmlzaW9uIDQ0MzEzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE4ICsyNywx
MyBAQAogI2RlZmluZSBIb3N0V2luZG93X2gKIAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci0KIGNsYXNzIEhv
c3RXaW5kb3cgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgSG9zdFdpbmRvdygpIHt9Ci0g
ICAgdmlydHVhbCB+SG9zdFdpbmRvdygpIHt9CisgICAgdmlydHVhbCB+SG9zdFdpbmRvdygpIHsg
fQogCiAgICAgLy8gVGhlIHJlcGFpbnQgbWV0aG9kIGFza3MgdGhlIGhvc3Qgd2luZG93IHRvIHJl
cGFpbnQgYSByZWN0IGluIHRoZSB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNlLiAgVGhlCiAgICAg
Ly8gY29udGVudENoYW5nZWQgYm9vbGVhbiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIFdl
YiBwYWdlIGNvbnRlbnQgYWN0dWFsbHkgY2hhbmdlZCAob3IgaWYgYSByZXBhaW50CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgJKHJldmlzaW9uIDQ0MzEzKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyNiArMjcsNiBAQAogI2RlZmluZSBQbGF0
Zm9ybU1vdXNlRXZlbnRfaAogCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpZmRlZiBfX09CSkNfXwotQGNsYXNz
IE5TRXZlbnQ7Ci1AY2xhc3MgTlNTY3JlZW47Ci1AY2xhc3MgTlNXaW5kb3c7Ci0jZWxzZQotY2xh
c3MgTlNFdmVudDsKLWNsYXNzIE5TU2NyZWVuOwotY2xhc3MgTlNXaW5kb3c7Ci0jZW5kaWYKLSNl
bmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwot
dHlwZWRlZiB1bnNpZ25lZCBVSU5UOwotdHlwZWRlZiB1bnNpZ25lZCBXUEFSQU07Ci10eXBlZGVm
IGxvbmcgTFBBUkFNOwotI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVj
dCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247CkBAIC01OSw2ICszOSwxMyBAQCBjbGFz
cyBRSW5wdXRFdmVudDsKIFFUX0VORF9OQU1FU1BBQ0UKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOKQordHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwordHlwZWRlZiB1bnNpZ25lZCBVSU5U
OwordHlwZWRlZiB1bnNpZ25lZCBXUEFSQU07Cit0eXBlZGVmIGxvbmcgTFBBUkFNOworI2VuZGlm
CisKICNpZiBQTEFURk9STShXWCkKIGNsYXNzIHd4TW91c2VFdmVudDsKICNlbmRpZgpAQCAtODQs
OSArNzEsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgIH0KIAot
ICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoY29uc3QgSW50UG9pbnQmIHBvcywgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvcywgTW91c2VCdXR0b24gYnV0dG9uLCBNb3VzZUV2ZW50VHlwZSBldmVu
dFR5cGUsCisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChjb25zdCBJbnRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgTW91c2VCdXR0b24gYnV0dG9uLCBN
b3VzZUV2ZW50VHlwZSBldmVudFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Y2xpY2tDb3VudCwgYm9vbCBzaGlmdCwgYm9vbCBjdHJsLCBib29sIGFsdCwgYm9vbCBtZXRhLCBk
b3VibGUgdGltZXN0YW1wKQotICAgICAgICAgICAgOiBtX3Bvc2l0aW9uKHBvcyksIG1fZ2xvYmFs
UG9zaXRpb24oZ2xvYmFsUG9zKSwgbV9idXR0b24oYnV0dG9uKQorICAgICAgICAgICAgOiBtX3Bv
c2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAgICAgLCBtX2dsb2JhbFBvc2l0aW9uKGdsb2JhbFBv
c2l0aW9uKQorICAgICAgICAgICAgLCBtX2J1dHRvbihidXR0b24pCiAgICAgICAgICAgICAsIG1f
ZXZlbnRUeXBlKGV2ZW50VHlwZSkKICAgICAgICAgICAgICwgbV9jbGlja0NvdW50KGNsaWNrQ291
bnQpCiAgICAgICAgICAgICAsIG1fc2hpZnRLZXkoc2hpZnQpCkBAIC0xMTIsMzIgKzEwMSwzNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbWV0YUtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWV0YUtleTsgfQogICAgICAgICB1bnNpZ25lZCBtb2RpZmllckZsYWdzKCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RpZmllckZsYWdzOyB9CiAgICAgICAgIAotICAgICAgICAvL3RpbWUgaW4g
c2Vjb25kcworICAgICAgICAvLyBUaW1lIGluIHNlY29uZHMuCiAgICAgICAgIGRvdWJsZSB0aW1l
c3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQogCi0jaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoTlNFdmVudCopOwotICAgICAgICBpbnQgZXZl
bnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2V2ZW50TnVtYmVyOyB9Ci0jZW5kaWYKLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChIV05ELCBVSU5ULCBXUEFS
QU0sIExQQVJBTSwgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3ID0gZmFsc2UpOwotICAgICAgICB2b2lk
IHNldENsaWNrQ291bnQoaW50IGNvdW50KSB7IG1fY2xpY2tDb3VudCA9IGNvdW50OyB9Ci0gICAg
ICAgIGJvb2wgYWN0aXZhdGVkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZhdGVkV2Vi
VmlldzsgfQotI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKSAKICAgICAgICAgUGxhdGZvcm1Nb3Vz
ZUV2ZW50KEdka0V2ZW50QnV0dG9uKik7CiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtF
dmVudE1vdGlvbiopOwogI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQoX19P
QkpDX18pCisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChOU0V2ZW50ICosIE5TVmlldyAqd2lu
ZG93Vmlldyk7CisgICAgICAgIGludCBldmVudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZXZl
bnROdW1iZXI7IH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3Jt
TW91c2VFdmVudChRSW5wdXRFdmVudCosIGludCBjbGlja0NvdW50KTsKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oV0lOKQorICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoSFdORCwgVUlOVCwgV1BB
UkFNLCBMUEFSQU0sIGJvb2wgYWN0aXZhdGVkV2ViVmlldyA9IGZhbHNlKTsKKyAgICAgICAgdm9p
ZCBzZXRDbGlja0NvdW50KGludCBjb3VudCkgeyBtX2NsaWNrQ291bnQgPSBjb3VudDsgfQorICAg
ICAgICBib29sIGFjdGl2YXRlZFdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2YXRlZFdl
YlZpZXc7IH0KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV1gpCiAgICAgICAgIFBsYXRmb3JtTW91
c2VFdmVudChjb25zdCB3eE1vdXNlRXZlbnQmLCBjb25zdCB3eFBvaW50JiBnbG9iYWxQb2ludCwg
aW50IGNsaWNrQ291bnQpOwogI2VuZGlmCiAKLQotICAgIHByb3RlY3RlZDoKKyAgICBwcml2YXRl
OgogICAgICAgICBJbnRQb2ludCBtX3Bvc2l0aW9uOwogICAgICAgICBJbnRQb2ludCBtX2dsb2Jh
bFBvc2l0aW9uOwogICAgICAgICBNb3VzZUJ1dHRvbiBtX2J1dHRvbjsKQEAgLTE0OSwxOCArMTQw
LDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX21ldGFLZXk7CiAgICAg
ICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsgLy8gdW5pdDogc2Vjb25kcwogICAgICAgICB1bnNpZ25l
ZCBtX21vZGlmaWVyRmxhZ3M7CisKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIGludCBtX2V2
ZW50TnVtYmVyOwogI2VuZGlmCisKICNpZiBQTEFURk9STShXSU4pCiAgICAgICAgIGJvb2wgbV9h
Y3RpdmF0ZWRXZWJWaWV3OwogI2VuZGlmCiAgICAgfTsKIAotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBJbnRQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5k
b3cgKndpbmRvdyk7Ci0gICAgSW50UG9pbnQgcG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCk7
Ci0gICAgSW50UG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCk7CisjaWYg
UExBVEZPUk0oTUFDKSAmJiBkZWZpbmVkKF9fT0JKQ19fKQorICAgIEludFBvaW50IGdsb2JhbFBv
aW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dpbmRvdyAqKTsKKyAgICBJbnRQb2lu
dCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKiwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKKyAgICBJbnRQ
b2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQgKik7CiAjZW5kaWYKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVsRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oCShy
ZXZpc2lvbiA0NDMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2ZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMjAg
KzI4LDYgQEAKIAogI2luY2x1ZGUgIkludFBvaW50LmgiCiAKLSNpZiBQTEFURk9STShNQUMpCi0j
aWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU0V2ZW50OwotI2Vsc2UKLWNsYXNzIE5TRXZlbnQ7Ci0j
ZW5kaWYKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotdHlwZWRlZiBzdHJ1Y3QgSFdORF9f
KiBIV05EOwotdHlwZWRlZiB1bnNpZ25lZCBXUEFSQU07Ci10eXBlZGVmIGxvbmcgTFBBUkFNOwot
I2VuZGlmCi0KICNpZiBQTEFURk9STShHVEspCiB0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRTY3Jv
bGwgR2RrRXZlbnRTY3JvbGw7CiAjZW5kaWYKQEAgLTUyLDYgKzM4LDEyIEBAIGNsYXNzIFFXaGVl
bEV2ZW50OwogUVRfRU5EX05BTUVTUEFDRQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShXSU4pCit0
eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7Cit0eXBlZGVmIHVuc2lnbmVkIFdQQVJBTTsKK3R5
cGVkZWYgbG9uZyBMUEFSQU07CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFdYKQogY2xhc3Mgd3hN
b3VzZUV2ZW50OwogY2xhc3Mgd3hQb2ludDsKQEAgLTkzLDIzICs4NSwyNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYWNjZXB0KCkgeyBtX2lzQWNjZXB0ZWQgPSB0cnVlOyB9
CiAgICAgICAgIHZvaWQgaWdub3JlKCkgeyBtX2lzQWNjZXB0ZWQgPSBmYWxzZTsgfQogCi0jaWYg
UExBVEZPUk0oTUFDKQotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoTlNFdmVudCopOwotI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwg
V1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNNb3VzZUhXaGVlbCk7Ci0jZW5kaWYKICNpZiBQTEFURk9S
TShHVEspCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCopOwogI2Vu
ZGlmCisKKyNpZiBQTEFURk9STShNQUMpICYmIGRlZmluZWQoX19PQkpDX18pCisgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChOU0V2ZW50ICosIE5TVmlldyAqd2luZG93Vmlldyk7CisjZW5kaWYK
KwogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoUVdoZWVsRXZl
bnQqKTsKICNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICBQbGF0Zm9ybVdoZWVs
RXZlbnQoSFdORCwgV1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNNb3VzZUhXaGVlbCk7CisjZW5kaWYK
KwogI2lmIFBMQVRGT1JNKFdYKQogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoY29uc3Qgd3hN
b3VzZUV2ZW50JiwgY29uc3Qgd3hQb2ludCYpOwogI2VuZGlmCiAKLSAgICBwcm90ZWN0ZWQ6Cisg
ICAgcHJpdmF0ZToKICAgICAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKICAgICAgICAgSW50UG9p
bnQgbV9nbG9iYWxQb3NpdGlvbjsKICAgICAgICAgZmxvYXQgbV9kZWx0YVg7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybU1vdXNlRXZlbnRNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Nb3VzZUV2ZW50TWFjLm1tCShyZXZpc2lvbiA0
NDMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtTW91c2VFdmVudE1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDEyIEBAIHN0YXRpYyBpbnQgY2xpY2tDb3VudEZv
ckV2ZW50KE5TRXZlbnQgKmUKICAgICB9CiB9CiAKLUludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0
IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dpbmRvdyogd2luZG93KQorSW50UG9pbnQgZ2xvYmFs
UG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93ICp3aW5kb3cpCiB7CiAg
ICAgcmV0dXJuIEludFBvaW50KGZsaXBTY3JlZW5Qb2ludChbd2luZG93IGNvbnZlcnRCYXNlVG9T
Y3JlZW46d2luZG93UG9pbnRdLCBzY3JlZW5Gb3JXaW5kb3cod2luZG93KSkpOwogfQogCi1JbnRQ
b2ludCBwb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQorSW50UG9pbnQgcG9pbnRGb3JFdmVu
dChOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KQogewogICAgIHN3aXRjaCAoW2V2
ZW50IHR5cGVdKSB7CiAgICAgICAgIGNhc2UgTlNMZWZ0TW91c2VEb3duOgpAQCAtODYsMTEgKzg2
LDE0IEBAIEludFBvaW50IHBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiAgICAgICAgIGNh
c2UgTlNPdGhlck1vdXNlVXA6CiAgICAgICAgIGNhc2UgTlNPdGhlck1vdXNlRHJhZ2dlZDoKICAg
ICAgICAgY2FzZSBOU01vdXNlTW92ZWQ6Ci0gICAgICAgIGNhc2UgTlNTY3JvbGxXaGVlbDoKLSAg
ICAgICAgICAgIC8vIE5vdGU6IFRoaXMgaGFzIGl0cyBvcmlnaW4gYXQgdGhlIGJvdHRvbSBsZWZ0
IG9mIHRoZSB3aW5kb3cuCi0gICAgICAgICAgICAvLyBUaGUgWSBjb29yZGluYXRlIGdldHMgZmxp
cHBlZCBieSBTY3JvbGxWaWV3Ojp2aWV3cG9ydFRvQ29udGVudHMuCi0gICAgICAgICAgICAvLyBX
ZSBzaG91bGQgcHJvYmFibHkgY2hhbmdlIGJvdGggdGhpcyBhbmQgdGhhdCB0byBub3QgdXNlICJi
b3R0b20gbGVmdCBvcmlnaW4iIGNvb3JkaW5hdGVzIGF0IGFsbC4KLSAgICAgICAgICAgIHJldHVy
biBJbnRQb2ludChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10pOworICAgICAgICBjYXNlIE5TU2Ny
b2xsV2hlZWw6IHsKKyAgICAgICAgICAgIC8vIE5vdGU6IFRoaXMgd2lsbCBoYXZlIGl0cyBvcmln
aW4gYXQgdGhlIGJvdHRvbSBsZWZ0IG9mIHRoZSB3aW5kb3cgdW5sZXNzIHdpbmRvd1ZpZXcgaXMg
ZmxpcHBlZC4KKyAgICAgICAgICAgIC8vIEluIHRob3NlIGNhc2VzLCB0aGUgWSBjb29yZGluYXRl
IGdldHMgZmxpcHBlZCBieSBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdy4KKyAg
ICAgICAgICAgIE5TUG9pbnQgbG9jYXRpb24gPSBbZXZlbnQgbG9jYXRpb25JbldpbmRvd107Cisg
ICAgICAgICAgICBpZiAod2luZG93VmlldykKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IFt3
aW5kb3dWaWV3IGNvbnZlcnRQb2ludDpsb2NhdGlvbiBmcm9tVmlldzpuaWxdOworICAgICAgICAg
ICAgcmV0dXJuIEludFBvaW50KGxvY2F0aW9uKTsKKyAgICAgICAgfQogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CiAgICAgfQpAQCAtMTM5LDggKzE0Miw4
IEBAIHN0YXRpYyBNb3VzZUV2ZW50VHlwZSBtb3VzZUV2ZW50Rm9yTlNFdmUKICAgICB9CiB9CiAK
LVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQqIGV2ZW50KQot
ICAgIDogbV9wb3NpdGlvbihwb2ludEZvckV2ZW50KGV2ZW50KSkKK1BsYXRmb3JtTW91c2VFdmVu
dDo6UGxhdGZvcm1Nb3VzZUV2ZW50KE5TRXZlbnQqIGV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcp
CisgICAgOiBtX3Bvc2l0aW9uKHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpKQogICAg
ICwgbV9nbG9iYWxQb3NpdGlvbihnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KSkKICAgICAsIG1f
YnV0dG9uKG1vdXNlQnV0dG9uRm9yRXZlbnQoZXZlbnQpKQogICAgICwgbV9ldmVudFR5cGUobW91
c2VFdmVudEZvck5TRXZlbnQoZXZlbnQpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2hl
ZWxFdmVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaGVlbEV2
ZW50TWFjLm1tCShyZXZpc2lvbiA0NDMxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1doZWVs
RXZlbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChOU0V2
ZW50KiBldmVudCkKLSAgICA6IG1fcG9zaXRpb24ocG9pbnRGb3JFdmVudChldmVudCkpCitQbGF0
Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVudChOU0V2ZW50KiBldmVudCwgTlNWaWV3
ICp3aW5kb3dWaWV3KQorICAgIDogbV9wb3NpdGlvbihwb2ludEZvckV2ZW50KGV2ZW50LCB3aW5k
b3dWaWV3KSkKICAgICAsIG1fZ2xvYmFsUG9zaXRpb24oZ2xvYmFsUG9pbnRGb3JFdmVudChldmVu
dCkpCiAgICAgLCBtX2dyYW51bGFyaXR5KFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50KQogICAgICwg
bV9pc0FjY2VwdGVkKGZhbHNlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQkocmV2
aXNpb24gNDQzMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI4NSw3ICsyODUsOSBAQCB2b2lkIFdpZGdldDo6YWZ0ZXJNb3VzZURvd24o
TlNWaWV3ICp2aWV3CiAKIEludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBpZiAoIXBsYXRmb3JtV2lk
Z2V0KCkgJiYgcGFyZW50KCkpIHsKKyAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBwb2ludDsKICAgICAgICAgSW50
UG9pbnQgcmVzdWx0ID0gcGFyZW50KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhwb2lu
dCk7CiAgICAgICAgIHJlc3VsdC5tb3ZlKHBhcmVudCgpLT5zY3JvbGxYKCkgLSB4KCksIHBhcmVu
dCgpLT5zY3JvbGxZKCkgLSB5KCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzAwLDcg
KzMwMiw5IEBAIEludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2kKIAogSW50
UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAogewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSAmJiBwYXJlbnQoKSkgewor
ICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkgeworICAgICAgICBpZiAoIXBhcmVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHJlY3Q7CiAgICAgICAgIEludFJlY3QgcmVzdWx0ID0gcGFyZW50KCkt
PmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhyZWN0KTsKICAgICAgICAgcmVzdWx0Lm1vdmUo
cGFyZW50KCktPnNjcm9sbFgoKSAtIHgoKSwgcGFyZW50KCktPnNjcm9sbFkoKSAtIHkoKSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJBcHBs
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJ
KHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIEhUTUwgd2lkZ2V0IGZvciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
NCwxMyArMjIsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJBcHBs
ZXQuaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxBcHBsZXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgotI2luY2x1
ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQzLDIzICszOCwxOSBA
QCBSZW5kZXJBcHBsZXQ6OlJlbmRlckFwcGxldChIVE1MQXBwbGV0RWxlCiAgICAgc2V0SW5saW5l
KHRydWUpOwogfQogCi1SZW5kZXJBcHBsZXQ6On5SZW5kZXJBcHBsZXQoKQotewotfQotCiBJbnRT
aXplIFJlbmRlckFwcGxldDo6aW50cmluc2ljU2l6ZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6
IFRoaXMgZG9lc24ndCBtYWtlIHNlbnNlLiBXZSBjYW4ndCBqdXN0IHN0YXJ0IHJldHVybmluZwog
ICAgIC8vIGEgZGlmZmVyZW50IHNpemUgb25jZSB3ZSd2ZSBjcmVhdGVkIHRoZSB3aWRnZXQgYW5k
IGV4cGVjdAogICAgIC8vIGxheW91dCBhbmQgc2l6aW5nIHRvIGJlIGNvcnJlY3QuIFdlIHNob3Vs
ZCByZW1vdmUgdGhpcyBhbmQKICAgICAvLyBwYXNzIHRoZSBhcHByb3ByaWF0ZSBpbnRyaW5zaWMg
c2l6ZSBpbiB0aGUgY29uc3RydWN0b3IuCi0gICAgcmV0dXJuIG1fd2lkZ2V0ID8gSW50U2l6ZSg1
MCwgNTApIDogSW50U2l6ZSgxNTAsIDE1MCk7CisgICAgcmV0dXJuIHdpZGdldCgpID8gSW50U2l6
ZSg1MCwgNTApIDogSW50U2l6ZSgxNTAsIDE1MCk7CiB9CiAKIHZvaWQgUmVuZGVyQXBwbGV0Ojpj
cmVhdGVXaWRnZXRJZk5lY2Vzc2FyeSgpCiB7CiAgICAgSFRNTEFwcGxldEVsZW1lbnQqIGVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgaWYgKG1f
d2lkZ2V0IHx8ICFlbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCisgICAgaWYg
KHdpZGdldCgpIHx8ICFlbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBKYXZhIGFwcGxldHMgY2FuJ3QgYmUgcmVzaXpl
ZCAodGhpcyBpcyBhIGJ1ZyBpbiBBcHBsZSdzIEphdmEgaW1wbGVtZW50YXRpb24pLgpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmgJKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQXBwbGV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsOCArMzIsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFJlbmRlckFwcGxldCA6IHB1YmxpYyBSZW5kZXJXaWRnZXQgewog
ICAgIHB1YmxpYzoKICAgICAgICAgUmVuZGVyQXBwbGV0KEhUTUxBcHBsZXRFbGVtZW50KiwgY29u
c3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mIGFyZ3MpOwotICAgICAgICB2aXJ0dWFsIH5SZW5k
ZXJBcHBsZXQoKTsKIAorICAgICAgICB2b2lkIGNyZWF0ZVdpZGdldElmTmVjZXNzYXJ5KCk7CisK
KyAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCB7IHJldHVybiAiUmVuZGVyQXBwbGV0IjsgfQogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c0FwcGxldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTQxLDkgKzQzLDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgICAgIHZp
cnR1YWwgSW50U2l6ZSBpbnRyaW5zaWNTaXplKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBjcmVh
dGVXaWRnZXRJZk5lY2Vzc2FyeSgpOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgSGFzaE1hcDxT
dHJpbmcsIFN0cmluZz4gbV9hcmdzOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFtZS5jcHAJKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDggQEAKLS8qKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0LgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5
OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1v
biBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KICAqICAgICAgICAgICAoQykgMjAwMCBTdGVm
YW4gU2NoaW1hbnNraSAoMVN0ZWluQGdteC5kZSkKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMjUsMTUgKzIzLDEyIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJSZW5kZXJGcmFtZS5oIgotI2luY2x1ZGUgIlJlbmRlckZyYW1lU2V0LmgiCisKICNpbmNs
dWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVTZXRFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KIFJlbmRlckZy
YW1lOjpSZW5kZXJGcmFtZShIVE1MRnJhbWVFbGVtZW50KiBmcmFtZSkKICAgICA6IFJlbmRlclBh
cnQoZnJhbWUpCiB7CkBAIC00MiwyMSArMzcsMjUgQEAgUmVuZGVyRnJhbWU6OlJlbmRlckZyYW1l
KEhUTUxGcmFtZUVsZW1lbgogCiBGcmFtZUVkZ2VJbmZvIFJlbmRlckZyYW1lOjplZGdlSW5mbygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIEZyYW1lRWRnZUluZm8oZWxlbWVudCgpLT5ub1Jlc2l6ZSgp
LCBlbGVtZW50KCktPmhhc0ZyYW1lQm9yZGVyKCkpOworICAgIEhUTUxGcmFtZUVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4obm9kZSgpKTsKKyAgICByZXR1
cm4gRnJhbWVFZGdlSW5mbyhlbGVtZW50LT5ub1Jlc2l6ZSgpLCBlbGVtZW50LT5oYXNGcmFtZUJv
cmRlcigpKTsKIH0KIAogdm9pZCBSZW5kZXJGcmFtZTo6dmlld0NsZWFyZWQoKQogewotICAgIGlm
IChlbGVtZW50KCkgJiYgbV93aWRnZXQgJiYgbV93aWRnZXQtPmlzRnJhbWVWaWV3KCkpIHsKLSAg
ICAgICAgRnJhbWVWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV93aWRnZXQp
OwotICAgICAgICBpbnQgbWFyZ2ludyA9IGVsZW1lbnQoKS0+Z2V0TWFyZ2luV2lkdGgoKTsKLSAg
ICAgICAgaW50IG1hcmdpbmggPSBlbGVtZW50KCktPmdldE1hcmdpbkhlaWdodCgpOwotCi0gICAg
ICAgIGlmIChtYXJnaW53ICE9IC0xKQotICAgICAgICAgICAgdmlldy0+c2V0TWFyZ2luV2lkdGgo
bWFyZ2ludyk7Ci0gICAgICAgIGlmIChtYXJnaW5oICE9IC0xKQotICAgICAgICAgICAgdmlldy0+
c2V0TWFyZ2luSGVpZ2h0KG1hcmdpbmgpOwotICAgIH0KKyAgICBIVE1MRnJhbWVFbGVtZW50KiBl
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudCo+KG5vZGUoKSk7CisgICAgaWYg
KCFlbGVtZW50IHx8ICF3aWRnZXQoKSB8fCAhd2lkZ2V0KCktPmlzRnJhbWVWaWV3KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHdpZGdldCgpKTsKKworICAgIGludCBtYXJnaW53ID0gZWxlbWVudC0+Z2V0TWFyZ2luV2lk
dGgoKTsKKyAgICBpbnQgbWFyZ2luaCA9IGVsZW1lbnQtPmdldE1hcmdpbkhlaWdodCgpOworCisg
ICAgaWYgKG1hcmdpbncgIT0gLTEpCisgICAgICAgIHZpZXctPnNldE1hcmdpbldpZHRoKG1hcmdp
bncpOworICAgIGlmIChtYXJnaW5oICE9IC0xKQorICAgICAgICB2aWV3LT5zZXRNYXJnaW5IZWln
aHQobWFyZ2luaCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWUuaAkocmV2aXNpb24gNDQzMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNyBAQAogLyoKLSAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdC4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBI
YXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjUsMjMgKzIzLDIzIEBA
CiAjaWZuZGVmIFJlbmRlckZyYW1lX2gKICNkZWZpbmUgUmVuZGVyRnJhbWVfaAogCi0jaW5jbHVk
ZSAiSFRNTEZyYW1lRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJGcmFtZVNldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEhUTUxG
cmFtZUVsZW1lbnQ7CisKIGNsYXNzIFJlbmRlckZyYW1lIDogcHVibGljIFJlbmRlclBhcnQgewog
cHVibGljOgogICAgIFJlbmRlckZyYW1lKEhUTUxGcmFtZUVsZW1lbnQqKTsKIAorICAgIEZyYW1l
RWRnZUluZm8gZWRnZUluZm8oKSBjb25zdDsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyRnJhbWUiOyB9CiAgICAg
dmlydHVhbCBib29sIGlzRnJhbWUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBIVE1M
RnJhbWVFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lRWxlbWVudCo+KFJlbmRlclBhcnQ6Om5vZGUoKSk7IH0KLQotICAgIEZyYW1lRWRnZUluZm8g
ZWRnZUluZm8oKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCB2aWV3Q2xlYXJlZCgpOwogfTsK
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAJKHJldmlzaW9uIDQ0MzEzKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEs
OCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QuCi0gKgor
LyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgogICog
ICAgICAgICAgIChDKSAyMDAwIFN0ZWZhbiBTY2hpbWFuc2tpICgxU3RlaW5AZ214LmRlKQotICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiwyMSArMjAsMTUgQEAKICAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotCiBSZW5kZXJQYXJ0OjpSZW5kZXJQYXJ0KEVsZW1lbnQq
IG5vZGUpCiAgICAgOiBSZW5kZXJXaWRnZXQobm9kZSkKIHsKQEAgLTQ2LDM5ICszOCwzNyBAQCBS
ZW5kZXJQYXJ0OjpSZW5kZXJQYXJ0KEVsZW1lbnQqIG5vZGUpCiAKIFJlbmRlclBhcnQ6On5SZW5k
ZXJQYXJ0KCkKIHsKLSAgICAvLyBTaW5jZSBkZXJlZiBlbmRzIHVwIGNhbGxpbmcgc2V0V2lkZ2V0
IGJhY2sgb24gdXMsIG5lZWQgdG8gbWFrZSBzdXJlCi0gICAgLy8gdGhhdCB3aWRnZXQgaXMgYWxy
ZWFkeSAwIHNvIGl0IHdvbid0IGRvIGFueSB3b3JrLgotICAgIFdpZGdldCogd2lkZ2V0ID0gbV93
aWRnZXQ7Ci0gICAgbV93aWRnZXQgPSAwOwotICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0LT5pc0Zy
YW1lVmlldygpKQotICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpLT5kZXJl
ZigpOwotICAgIGVsc2UKLSAgICAgICAgZGVsZXRlIHdpZGdldDsKKyAgICBjbGVhcldpZGdldCgp
OwogfQogCiB2b2lkIFJlbmRlclBhcnQ6OnNldFdpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAg
ICBpZiAod2lkZ2V0ICE9IG1fd2lkZ2V0KSB7Ci0gICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0
LT5pc0ZyYW1lVmlldygpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lk
Z2V0KS0+cmVmKCk7Ci0gICAgICAgIFJlbmRlcldpZGdldDo6c2V0V2lkZ2V0KHdpZGdldCk7Ci0K
LSAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBzZXQgY29ycmVjdGx5IGZv
ciByZXN0b3JlCi0gICAgICAgIC8vICMjIyBmaW5kIGJldHRlciBmaXgKLSAgICAgICAgdmlld0Ns
ZWFyZWQoKTsKLSAgICB9CisgICAgaWYgKHdpZGdldCA9PSB0aGlzLT53aWRnZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKHdpZGdldCAmJiB3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCisg
ICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPnJlZigpOworICAgIFJlbmRl
cldpZGdldDo6c2V0V2lkZ2V0KHdpZGdldCk7CisKKyAgICAvLyBtYWtlIHN1cmUgdGhlIHNjcm9s
bGJhcnMgYXJlIHNldCBjb3JyZWN0bHkgZm9yIHJlc3RvcmUKKyAgICAvLyAjIyMgZmluZCBiZXR0
ZXIgZml4CisgICAgdmlld0NsZWFyZWQoKTsKIH0KIAogdm9pZCBSZW5kZXJQYXJ0Ojp2aWV3Q2xl
YXJlZCgpCiB7CiB9CiAKLXZvaWQgUmVuZGVyUGFydDo6ZGVsZXRlV2lkZ2V0KCkKK3ZvaWQgUmVu
ZGVyUGFydDo6ZGVsZXRlV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQogewotICAgIGlmIChtX3dpZGdl
dCAmJiBtX3dpZGdldC0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVW
aWV3Kj4obV93aWRnZXQpLT5kZXJlZigpOworICAgIC8vIFNpbmNlIGRlcmVmIGVuZHMgdXAgY2Fs
bGluZyBzZXRXaWRnZXQgYmFjayBvbiB1cywgbmVlZCB0byBtYWtlIHN1cmUKKyAgICAvLyB0aGF0
IHdpZGdldCBpcyBhbHJlYWR5IDAgc28gaXQgd29uJ3QgZG8gYW55IHdvcmsuCisgICAgQVNTRVJU
KCF0aGlzLT53aWRnZXQoKSk7CisKKyAgICBpZiAod2lkZ2V0ICYmIHdpZGdldC0+aXNGcmFtZVZp
ZXcoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZGVyZWYoKTsK
ICAgICBlbHNlCi0gICAgICAgIGRlbGV0ZSBtX3dpZGdldDsKKyAgICAgICAgZGVsZXRlIHdpZGdl
dDsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuaAkocmV2aXNpb24gNDQzMTMpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOSAr
MSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0LgotICoK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yOSwyOCArMjcsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBG
cmFtZTsKLWNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKLQogY2xhc3MgUmVuZGVyUGFydCA6
IHB1YmxpYyBSZW5kZXJXaWRnZXQgewogcHVibGljOgogICAgIFJlbmRlclBhcnQoRWxlbWVudCop
OwogICAgIHZpcnR1YWwgflJlbmRlclBhcnQoKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJQYXJ0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJQYXJ0IjsgfQotCi0gICAgdmly
dHVhbCB2b2lkIHNldFdpZGdldChXaWRnZXQqKTsKLQogICAgIGJvb2wgaGFzRmFsbGJhY2tDb250
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9oYXNGYWxsYmFja0NvbnRlbnQ7IH0KIAorICAgIHZpcnR1
YWwgdm9pZCBzZXRXaWRnZXQoV2lkZ2V0Kik7CiAgICAgdmlydHVhbCB2b2lkIHZpZXdDbGVhcmVk
KCk7CiAKIHByb3RlY3RlZDoKICAgICBib29sIG1faGFzRmFsbGJhY2tDb250ZW50OwogCiBwcml2
YXRlOgotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVXaWRnZXQoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNSZW5kZXJQYXJ0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJQYXJ0IjsgfQorCisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZVdpZGdldChXaWRnZXQqKTsKIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCShyZXZpc2lvbiA0NDMxMykKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcg
KzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+
CiAgKiAgICAgICAgICAgKEMpIDIwMDAgU3RlZmFuIFNjaGltYW5za2kgKDFTdGVpbkBnbXguZGUp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjUsMjUgKzI1LDIyIEBACiAjaW5jbHVkZSAiUmVuZGVyUGFydE9iamVjdC5oIgogCiAj
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVlLmgiCi0jaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJ
RnJhbWVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9i
amVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCi0jaWYgRU5BQkxF
KFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNlbmRpZgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAKKyNpZiBFTkFCTEUo
UExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwpAQCAtNjEsOCArNTgsOCBAQCBSZW5kZXJQYXJ0T2JqZWN0OjpSZW5kZXJQYXJ0T2JqZWN0KEVs
ZW1lCiAKIFJlbmRlclBhcnRPYmplY3Q6On5SZW5kZXJQYXJ0T2JqZWN0KCkKIHsKLSAgICBpZiAo
bV92aWV3KQotICAgICAgICBtX3ZpZXctPnJlbW92ZVdpZGdldFRvVXBkYXRlKHRoaXMpOworICAg
IGlmIChmcmFtZVZpZXcoKSkKKyAgICAgICAgZnJhbWVWaWV3KCktPnJlbW92ZVdpZGdldFRvVXBk
YXRlKHRoaXMpOwogfQogCiBzdGF0aWMgYm9vbCBpc1VSTEFsbG93ZWQoRG9jdW1lbnQqIGRvYywg
Y29uc3QgU3RyaW5nJiB1cmwpCkBAIC0xNTEsNyArMTQ4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2Jq
ZWN0Ojp1cGRhdGVXaWRnZXQoYm9vbAogICAgIFN0cmluZyBzZXJ2aWNlVHlwZTsKICAgICBWZWN0
b3I8U3RyaW5nPiBwYXJhbU5hbWVzOwogICAgIFZlY3RvcjxTdHJpbmc+IHBhcmFtVmFsdWVzOwot
ICAgIEZyYW1lKiBmcmFtZSA9IG1fdmlldy0+ZnJhbWUoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBm
cmFtZVZpZXcoKS0+ZnJhbWUoKTsKIAogICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUob2JqZWN0
VGFnKSkgewogICAgICAgICBIVE1MT2JqZWN0RWxlbWVudCogbyA9IHN0YXRpY19jYXN0PEhUTUxP
YmplY3RFbGVtZW50Kj4obm9kZSgpKTsKQEAgLTMzNywxNiArMzM0LDE2IEBAIHZvaWQgUmVuZGVy
UGFydE9iamVjdDo6bGF5b3V0KCkKIAogICAgIFJlbmRlclBhcnQ6OmxheW91dCgpOwogCi0gICAg
aWYgKCFtX3dpZGdldCAmJiBtX3ZpZXcpCi0gICAgICAgIG1fdmlldy0+YWRkV2lkZ2V0VG9VcGRh
dGUodGhpcyk7CisgICAgaWYgKCF3aWRnZXQoKSAmJiBmcmFtZVZpZXcoKSkKKyAgICAgICAgZnJh
bWVWaWV3KCktPmFkZFdpZGdldFRvVXBkYXRlKHRoaXMpOwogCiAgICAgc2V0TmVlZHNMYXlvdXQo
ZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnZpZXdDbGVhcmVkKCkKIHsKLSAg
ICBpZiAobm9kZSgpICYmIG1fd2lkZ2V0ICYmIG1fd2lkZ2V0LT5pc0ZyYW1lVmlldygpKSB7Ci0g
ICAgICAgIEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fd2lkZ2V0
KTsKKyAgICBpZiAobm9kZSgpICYmIHdpZGdldCgpICYmIHdpZGdldCgpLT5pc0ZyYW1lVmlldygp
KSB7CisgICAgICAgIEZyYW1lVmlldyogdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdp
ZGdldCgpKTsKICAgICAgICAgaW50IG1hcmdpbncgPSAtMTsKICAgICAgICAgaW50IG1hcmdpbmgg
PSAtMTsKICAgICAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShpZnJhbWVUYWcpKSB7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5oCShyZXZpc2lvbiA0NDMxMykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5
ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QuCi0g
KgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwOSBBcHBsZSBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM0LDEwICszMiwx
MiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyUGFydE9iamVjdChFbGVtZW50Kik7CiAgICAgdmlydHVh
bCB+UmVuZGVyUGFydE9iamVjdCgpOwogCisgICAgdm9pZCB1cGRhdGVXaWRnZXQoYm9vbCBvbmx5
Q3JlYXRlTm9uTmV0c2NhcGVQbHVnaW5zKTsKKworcHJpdmF0ZToKICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyUGFydE9iamVjdCI7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2b2lkIHVwZGF0ZVdpZGdldChib29s
IG9ubHlDcmVhdGVOb25OZXRzY2FwZVBsdWdpbnMpOwogCiAgICAgdmlydHVhbCB2b2lkIHZpZXdD
bGVhcmVkKCk7CiB9OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lv
biA0NDMxMykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsOSArMSw3IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBI
VE1MIHdpZGdldCBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwMCBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMTMgKzI1LDgg
QEAKIAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJBWE9iamVj
dENhY2hlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CkBAIC00NywxNCArNDAsMTEgQEAgc3RhdGljIEhhc2hNYXA8Y29uc3QgV2lkZ2V0KiwgUmVu
ZGVyV2lkZwogfQogCiBSZW5kZXJXaWRnZXQ6OlJlbmRlcldpZGdldChOb2RlKiBub2RlKQotICAg
ICAgOiBSZW5kZXJSZXBsYWNlZChub2RlKQotICAgICAgLCBtX3dpZGdldCgwKQotICAgICAgLCBt
X3JlZkNvdW50KDApCi17Ci0gICAgLy8gYSByZXBsYWNlZCBlbGVtZW50IGRvZXNuJ3Qgc3VwcG9y
dCBiZWluZyBhbm9ueW1vdXMKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgbV92aWV3ID0gbm9kZS0+
ZG9jdW1lbnQoKS0+dmlldygpOwotCisgICAgOiBSZW5kZXJSZXBsYWNlZChub2RlKQorICAgICwg
bV93aWRnZXQoMCkKKyAgICAsIG1fZnJhbWVWaWV3KG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKSkK
KyAgICAsIG1fcmVmQ291bnQoMCkKK3sKICAgICB2aWV3KCktPmFkZFdpZGdldCh0aGlzKTsKIAog
ICAgIC8vIFJlZmVyZW5jZSBjb3VudGluZyBpcyB1c2VkIHRvIHByZXZlbnQgdGhlIHdpZGdldCBm
cm9tIGJlaW5nCkBAIC04Miw4ICs3Miw4IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpkZXN0cm95KCkK
ICAgICByZW1vdmUoKTsKIAogICAgIGlmIChtX3dpZGdldCkgewotICAgICAgICBpZiAobV92aWV3
KQotICAgICAgICAgICAgbV92aWV3LT5yZW1vdmVDaGlsZChtX3dpZGdldCk7CisgICAgICAgIGlm
IChtX2ZyYW1lVmlldykKKyAgICAgICAgICAgIG1fZnJhbWVWaWV3LT5yZW1vdmVDaGlsZChtX3dp
ZGdldCk7CiAgICAgICAgIHdpZGdldFJlbmRlcmVyTWFwKCkucmVtb3ZlKG1fd2lkZ2V0KTsKICAg
ICB9CiAgICAgCkBAIC0xMTAsNyArMTAwLDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OmRlc3Ryb3ko
KQogUmVuZGVyV2lkZ2V0Ojp+UmVuZGVyV2lkZ2V0KCkKIHsKICAgICBBU1NFUlQobV9yZWZDb3Vu
dCA8PSAwKTsKLSAgICBkZWxldGVXaWRnZXQoKTsKKyAgICBjbGVhcldpZGdldCgpOwogfQogCiB2
b2lkIFJlbmRlcldpZGdldDo6c2V0V2lkZ2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgZnJhbWUp
CkBAIC0xMjksNyArMTE5LDcgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnNldFdpZGdldChXaWRnZXQq
IHdpZAogICAgICAgICBpZiAobV93aWRnZXQpIHsKICAgICAgICAgICAgIG1fd2lkZ2V0LT5yZW1v
dmVGcm9tUGFyZW50KCk7CiAgICAgICAgICAgICB3aWRnZXRSZW5kZXJlck1hcCgpLnJlbW92ZSht
X3dpZGdldCk7Ci0gICAgICAgICAgICBkZWxldGVXaWRnZXQoKTsKKyAgICAgICAgICAgIGNsZWFy
V2lkZ2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgbV93aWRnZXQgPSB3aWRnZXQ7CiAgICAgICAg
IGlmIChtX3dpZGdldCkgewpAQCAtMTQ1LDcgKzEzNSw3IEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojpz
ZXRXaWRnZXQoV2lkZ2V0KiB3aWQKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIG1fd2lkZ2V0LT5zaG93KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Zp
ZXctPmFkZENoaWxkKG1fd2lkZ2V0KTsKKyAgICAgICAgICAgIG1fZnJhbWVWaWV3LT5hZGRDaGls
ZChtX3dpZGdldCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODQsNyArMTc0LDcgQEAgdm9p
ZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbgogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCFtX3ZpZXcgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VG
b3JlZ3JvdW5kIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgIGlmICgh
bV9mcmFtZVZpZXcgfHwgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8
IHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm47CiAKICNp
ZiBQTEFURk9STShNQUMpCkBAIC0yODQsOSArMjc0LDE3IEBAIHZvaWQgUmVuZGVyV2lkZ2V0Ojpz
ZXRTZWxlY3Rpb25TdGF0ZShTZWwKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyV2lkZ2V0OjpkZWxl
dGVXaWRnZXQoKQordm9pZCBSZW5kZXJXaWRnZXQ6OmNsZWFyV2lkZ2V0KCkKK3sKKyAgICBXaWRn
ZXQqIHdpZGdldCA9IG1fd2lkZ2V0OworICAgIG1fd2lkZ2V0ID0gMDsKKyAgICBpZiAod2lkZ2V0
KQorICAgICAgICBkZWxldGVXaWRnZXQod2lkZ2V0KTsKK30KKwordm9pZCBSZW5kZXJXaWRnZXQ6
OmRlbGV0ZVdpZGdldChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBkZWxldGUgbV93aWRnZXQ7Cisg
ICAgZGVsZXRlIHdpZGdldDsKIH0KIAogUmVuZGVyV2lkZ2V0KiBSZW5kZXJXaWRnZXQ6OmZpbmQo
Y29uc3QgV2lkZ2V0KiB3aWRnZXQpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkocmV2
aXNpb24gNDQzMTMpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
SFRNTCB3aWRnZXQgZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MzMsNDYgKzMxLDQyIEBAIGNsYXNzIFdpZGdldDsKIAogY2xhc3MgUmVuZGVyV2lkZ2V0IDogcHVi
bGljIFJlbmRlclJlcGxhY2VkLCBwcml2YXRlIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudCB7CiBw
dWJsaWM6Ci0gICAgUmVuZGVyV2lkZ2V0KE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJXaWRn
ZXQoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQo
KTsKLQogICAgIFdpZGdldCogd2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gbV93aWRnZXQ7IH0KLSAg
ICBzdGF0aWMgUmVuZGVyV2lkZ2V0KiBmaW5kKGNvbnN0IFdpZGdldCopOwotCi0gICAgUmVuZGVy
QXJlbmEqIHJlZigpIHsgKyttX3JlZkNvdW50OyByZXR1cm4gcmVuZGVyQXJlbmEoKTsgfQotICAg
IHZvaWQgZGVyZWYoUmVuZGVyQXJlbmEqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0V2lkZ2V0KFdp
ZGdldCopOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0
YXRlKTsKKyAgICBzdGF0aWMgUmVuZGVyV2lkZ2V0KiBmaW5kKGNvbnN0IFdpZGdldCopOwogCiAg
ICAgdm9pZCB1cGRhdGVXaWRnZXRQb3NpdGlvbigpOwogCi0gICAgdmlydHVhbCB2b2lkIHNldFdp
ZGdldChXaWRnZXQqKTsKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJXaWRnZXQoTm9kZSopOwogCi0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwor
ICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVZpZXc7IH0K
KworICAgIHZvaWQgY2xlYXJXaWRnZXQoKTsKIAotcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRT
dHlsZSk7CisgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcml2YXRlOgotICAgIHZvaWQg
c2V0V2lkZ2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZVdpZGdldCgpOworICAgIHZpcnR1YWwgYm9vbCBpc1dpZGdldCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIC8vIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudAorICAgIHZpcnR1YWwg
dm9pZCBwYWludChQYWludEluZm8mLCBpbnQgeCwgaW50IHkpOworICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0
YXRlKTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFj
dGlvbik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVdpZGdldChXaWRnZXQqKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0T3ZlcmxhcFRlc3RSZXN1bHQoYm9vbCk7CiAKLXByb3RlY3RlZDoKLSAgICBX
aWRnZXQqIG1fd2lkZ2V0OwotICAgIEZyYW1lVmlldyogbV92aWV3OworICAgIHZvaWQgc2V0V2lk
Z2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwogCi1wcml2YXRlOgorICAgIFJlbmRlckFyZW5h
KiByZWYoKSB7ICsrbV9yZWZDb3VudDsgcmV0dXJuIHJlbmRlckFyZW5hKCk7IH0KKyAgICB2b2lk
IGRlcmVmKFJlbmRlckFyZW5hKik7CisKKyAgICBXaWRnZXQqIG1fd2lkZ2V0OworICAgIEZyYW1l
VmlldyogbV9mcmFtZVZpZXc7CiAgICAgaW50IG1fcmVmQ291bnQ7CiB9OwogCkluZGV4OiBXZWJD
b3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWUuaAkocmV2aXNpb24gNDQzMTMpCisrKyBXZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU01JTFRpbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsOCArNjIsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBTTUlMVGltZSYg
YSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA+IGIudmFsdWUoKSB8fCBv
cGVyYXRvcj09KGEsIGIpOyB9CiAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBTTUlM
VGltZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIGEudmFsdWUoKSA8IGIudmFsdWUo
KSB8fCBvcGVyYXRvcj09KGEsIGIpOyB9CiAKLSAgICBpbmxpbmUgU01JTFRpbWUgbWF4KGNvbnN0
IFNNSUxUaW1lJiBhLCBjb25zdCBTTUlMVGltZSYgYikgeyByZXR1cm4gc3RkOjptYXgoYS52YWx1
ZSgpLCBiLnZhbHVlKCkpOyB9Ci0gICAgaW5saW5lIFNNSUxUaW1lIG1pbihjb25zdCBTTUlMVGlt
ZSYgYSwgY29uc3QgU01JTFRpbWUmIGIpIHsgcmV0dXJuIHN0ZDo6bWluKGEudmFsdWUoKSwgYi52
YWx1ZSgpKTsgfQogICAgIFNNSUxUaW1lIG9wZXJhdG9yKyhjb25zdCBTTUlMVGltZSYsIGNvbnN0
IFNNSUxUaW1lJik7CiAgICAgU01JTFRpbWUgb3BlcmF0b3ItKGNvbnN0IFNNSUxUaW1lJiwgY29u
c3QgU01JTFRpbWUmKTsKICAgICAvLyBTbyBtdWx0aXBseWluZyB0aW1lcyBkb2VzIG5vdCBtYWtl
IHRvbyBtdWNoIHNlbnNlIGJ1dCBTTUlMIGRlZmluZXMgaXQgZm9yIGR1cmF0aW9uICogcmVwZWF0
Q291bnQKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9uIDQ0MzEzKQor
KysgV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBFcmljIFNlaWRlbCAoZXJpY0B3
ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxMiAr
MzAsMTQgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgorI2luY2x1ZGUgIkVtcHR5Q2xpZW50cy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJI
VE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIklt
YWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgpAQCAtNDYsOCArNDgsNiBAQAogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJTZXR0aW5ncy5oIgogCi0jaW5jbHVkZSAiRW1wdHlDbGllbnRzLmgiCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgU1ZHSW1hZ2VDaHJvbWVDbGllbnQgOiBwdWJsaWMgRW1wdHlDaHJv
bWVDbGllbnQgewpAQCAtNzYsMzYgKzc2LDMzIEBAIHByaXZhdGU6CiAKIFNWR0ltYWdlOjpTVkdJ
bWFnZShJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQotICAg
ICwgbV9kb2N1bWVudCgwKQotICAgICwgbV9jaHJvbWVDbGllbnQoMCkKLSAgICAsIG1fcGFnZSgw
KQotICAgICwgbV9mcmFtZSgwKQotICAgICwgbV9mcmFtZVZpZXcoMCkKIHsKIH0KIAogU1ZHSW1h
Z2U6On5TVkdJbWFnZSgpCiB7Ci0gICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIG1fZnJhbWUtPmxv
YWRlcigpLT5mcmFtZURldGFjaGVkKCk7IC8vIEJyZWFrIGJvdGggdGhlIGxvYWRlciBhbmQgdmll
dyByZWZlcmVuY2VzIHRvIHRoZSBmcmFtZQorICAgIGlmIChtX3BhZ2UpIHsKKyAgICAgICAgbV9w
YWdlLT5tYWluRnJhbWUoKS0+bG9hZGVyKCktPmZyYW1lRGV0YWNoZWQoKTsgLy8gQnJlYWsgYm90
aCB0aGUgbG9hZGVyIGFuZCB2aWV3IHJlZmVyZW5jZXMgdG8gdGhlIGZyYW1lCisKKyAgICAgICAg
Ly8gQ2xlYXIgZXhwbGljaXRseSBiZWNhdXNlIHdlIHdhbnQgdG8gZGVsZXRlIHRoZSBwYWdlIGJl
Zm9yZSB0aGUgQ2hyb21lQ2xpZW50LgorICAgICAgICAvLyBGSVhNRTogSSBiZWxpZXZlIHRoYXQn
cyBhbHJlYWR5IGd1YXJhbnRlZWQgYnkgQysrIG9iamVjdCBkZXN0cnVjdGlvbiBydWxlcywKKyAg
ICAgICAgLy8gc28gdGhpcyBtYXkgbWF0dGVyIG9ubHkgZm9yIHRoZSBhc3NlcnRpb24gYmVsb3cu
CisgICAgICAgIG1fcGFnZS5jbGVhcigpOworICAgIH0KIAotICAgIC8vIENsZWFyIHRoZXNlIG1h
bnVhbGx5IHNvIHdlIGNhbiBzYWZlbHkgZGVsZXRlIHRoZSBDaHJvbWVDbGllbnQgYWZ0ZXJ3YXJk
cwotICAgIG1fZnJhbWVWaWV3LmNsZWFyKCk7Ci0gICAgbV9mcmFtZS5jbGVhcigpOwotICAgIG1f
cGFnZS5jbGVhcigpOwotICAgIAogICAgIC8vIFZlcmlmeSB0aGF0IHBhZ2UgdGVhcmRvd24gZGVz
dHJveWVkIHRoZSBDaHJvbWUKICAgICBBU1NFUlQoIW1fY2hyb21lQ2xpZW50LT5pbWFnZSgpKTsK
IH0KIAogdm9pZCBTVkdJbWFnZTo6c2V0Q29udGFpbmVyU2l6ZShjb25zdCBJbnRTaXplJiBjb250
YWluZXJTaXplKQogewotICAgIGlmIChjb250YWluZXJTaXplLndpZHRoKCkgPD0gMCB8fCBjb250
YWluZXJTaXplLmhlaWdodCgpIDw9IDApCisgICAgaWYgKGNvbnRhaW5lclNpemUuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX3BhZ2Up
CiAgICAgICAgIHJldHVybjsKLSAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR0RvY3VtZW50Kj4obV9mcmFtZS0+ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7
CisgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBTVkdTVkdFbGVt
ZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oZnJhbWUtPmRvY3Vt
ZW50KCkpLT5yb290RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTE0LDkgKzExMSwxMCBAQCB2b2lkIFNWR0ltYWdlOjpzZXRDb250YWluZXJT
aXplKGNvbnN0IEluCiAKIGJvb2wgU1ZHSW1hZ2U6OnVzZXNDb250YWluZXJTaXplKCkgY29uc3QK
IHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBTVkdTVkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0Rv
Y3VtZW50Kj4obV9mcmFtZS0+ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7CisgICAgRnJhbWUq
IGZyYW1lID0gbV9wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBTVkdTVkdFbGVtZW50KiByb290RWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oZnJhbWUtPmRvY3VtZW50KCkpLT5yb290
RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTI1LDEwICsxMjMsMTAgQEAgYm9vbCBTVkdJbWFnZTo6dXNlc0NvbnRhaW5lclNpemUo
KSBjb25zdAogCiBJbnRTaXplIFNWR0ltYWdlOjpzaXplKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
ZnJhbWUpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0gICAg
Ci0gICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVu
dCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpLT5yb290RWxlbWVudCgpOworICAgIEZyYW1lKiBmcmFt
ZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7CisgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KGZyYW1lLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1l
bnQoKTsKICAgICBpZiAoIXJvb3RFbGVtZW50KQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwog
ICAgIApAQCAtMTUxLDkgKzE0OSw5IEBAIEludFNpemUgU1ZHSW1hZ2U6OnNpemUoKSBjb25zdAog
CiBib29sIFNWR0ltYWdlOjpoYXNSZWxhdGl2ZVdpZHRoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
ZnJhbWUpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBTVkdT
VkdFbGVtZW50KiByb290RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4obV9mcmFt
ZS0+ZG9jdW1lbnQoKSktPnJvb3RFbGVtZW50KCk7CisgICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KG1fcGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCkpLT5yb290RWxlbWVudCgpOwogICAgIGlmICghcm9vdEVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMTYyLDkgKzE2MCw5IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1Jl
bGF0aXZlV2lkdGgoKSBjb25zdAogCiBib29sIFNWR0ltYWdlOjpoYXNSZWxhdGl2ZUhlaWdodCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV9wYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgU1ZHU1ZHRWxlbWVudCogcm9vdEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdEb2N1bWVudCo+KG1fZnJhbWUtPmRvY3VtZW50KCkpLT5yb290RWxlbWVudCgpOworICAg
IFNWR1NWR0VsZW1lbnQqIHJvb3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPiht
X3BhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpKS0+cm9vdEVsZW1lbnQoKTsKICAgICBpZiAo
IXJvb3RFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE3MywyMiArMTcxLDI0
IEBAIGJvb2wgU1ZHSW1hZ2U6Omhhc1JlbGF0aXZlSGVpZ2h0KCkgY29uc3QKIAogdm9pZCBTVkdJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCkKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJl
dHVybjsKLSAgICAKKworICAgIEZyYW1lVmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkt
PnZpZXcoKTsKKwogICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICBjb250ZXh0LT5zZXRDb21wb3Np
dGVPcGVyYXRpb24oY29tcG9zaXRlT3ApOwogICAgIGNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50
UmVjdChkc3RSZWN0KSk7CiAgICAgaWYgKGNvbXBvc2l0ZU9wICE9IENvbXBvc2l0ZVNvdXJjZU92
ZXIpCi0gICAgICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMS4wZik7CisgICAg
ICAgIGNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMSk7CiAgICAgY29udGV4dC0+dHJh
bnNsYXRlKGRzdFJlY3QubG9jYXRpb24oKS54KCksIGRzdFJlY3QubG9jYXRpb24oKS55KCkpOwot
ICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShkc3RSZWN0LndpZHRoKCkvc3JjUmVjdC53aWR0
aCgpLCBkc3RSZWN0LmhlaWdodCgpL3NyY1JlY3QuaGVpZ2h0KCkpKTsKKyAgICBjb250ZXh0LT5z
Y2FsZShGbG9hdFNpemUoZHN0UmVjdC53aWR0aCgpIC8gc3JjUmVjdC53aWR0aCgpLCBkc3RSZWN0
LmhlaWdodCgpIC8gc3JjUmVjdC5oZWlnaHQoKSkpOwogCi0gICAgbV9mcmFtZS0+dmlldygpLT5y
ZXNpemUoc2l6ZSgpKTsKKyAgICB2aWV3LT5yZXNpemUoc2l6ZSgpKTsKIAotICAgIGlmIChtX2Zy
YW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+bGF5
b3V0KCk7Ci0gICAgbV9mcmFtZS0+dmlldygpLT5wYWludChjb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KHNyY1JlY3QpKTsKKyAgICBpZiAodmlldy0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgdmll
dy0+bGF5b3V0KCk7CisgICAgdmlldy0+cGFpbnQoY29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChz
cmNSZWN0KSk7CiAKICAgICBpZiAoY29tcG9zaXRlT3AgIT0gQ29tcG9zaXRlU291cmNlT3ZlcikK
ICAgICAgICAgY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKQEAgLTIwNSwyMCArMjA1
LDIyIEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckMKICAgICAvLyBm
cmFtZSBjYWNoZSwgb3IgYmV0dGVyIHlldCwgbm90IHVzZSBhIGNhY2hlIGZvciB0aWxlZCBkcmF3
aW5nIGF0IGFsbCwgaW5zdGVhZAogICAgIC8vIGhhdmluZyBhIHRpbGVkIGRyYXdpbmcgY2FsbGJh
Y2sgKGhvcGVmdWxseSBub24tdmlydHVhbCkuCiAgICAgaWYgKCFtX2ZyYW1lQ2FjaGUpIHsKKyAg
ICAgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgbV9mcmFt
ZUNhY2hlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIGZhbHNlKTsKICAgICAgICAgaWYg
KCFtX2ZyYW1lQ2FjaGUpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIHJlbmRlclN1YnRyZWVUb0ltYWdlKG1fZnJhbWVDYWNoZS5nZXQo
KSwgbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpOworICAgICAgICByZW5kZXJTdWJ0cmVlVG9J
bWFnZShtX2ZyYW1lQ2FjaGUuZ2V0KCksIG1fcGFnZS0+bWFpbkZyYW1lKCktPmNvbnRlbnRSZW5k
ZXJlcigpKTsKICAgICB9CiAgICAgcmV0dXJuIG1fZnJhbWVDYWNoZS0+aW1hZ2UoKS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKIH0KIAogYm9vbCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQo
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCiB7Ci0gICAgaW50IGxlbmd0aCA9IG1fZGF0YS0+c2l6ZSgp
OwotICAgIGlmICghbGVuZ3RoKSAvLyBpZiB0aGlzIHdhcyBhbiBlbXB0eSBpbWFnZQorICAgIC8v
IERvbid0IGRvIGFueXRoaW5nIGlmIGlzIGFuIGVtcHR5IGltYWdlLgorICAgIGlmICghbV9kYXRh
LT5zaXplKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAorCiAgICAgaWYgKGFsbERhdGFS
ZWNlaXZlZCkgewogICAgICAgICBzdGF0aWMgRnJhbWVMb2FkZXJDbGllbnQqIGR1bW15RnJhbWVM
b2FkZXJDbGllbnQgPSAgbmV3IEVtcHR5RnJhbWVMb2FkZXJDbGllbnQ7CiAgICAgICAgIHN0YXRp
YyBFZGl0b3JDbGllbnQqIGR1bW15RWRpdG9yQ2xpZW50ID0gbmV3IEVtcHR5RWRpdG9yQ2xpZW50
OwpAQCAtMjI4LDI4ICsyMzAsMjkgQEAgYm9vbCBTVkdJbWFnZTo6ZGF0YUNoYW5nZWQoYm9vbCBh
bGxEYXRhUgogCiAgICAgICAgIG1fY2hyb21lQ2xpZW50LnNldChuZXcgU1ZHSW1hZ2VDaHJvbWVD
bGllbnQodGhpcykpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgU1ZHIGVu
ZHMgdXAgbG9hZGluZyBpdHNlbGYsIHdlJ2xsIGxlYWsgdGhpcyBGcmFtZSAoYW5kIGFzc29jaWF0
ZWQgRE9NICYgcmVuZGVyIHRyZWVzKS4KLSAgICAgICAgLy8gVGhlIENhY2hlIGNvZGUgZG9lcyBu
b3Qga25vdyBhYm91dCBDYWNoZWRJbWFnZXMgaG9sZGluZyBGcmFtZXMgYW5kIHdvbid0IGtub3cg
dG8gYnJlYWsgdGhlIGN5Y2xlLgorICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBTVkcgZW5kcyB1
cCBsb2FkaW5nIGl0c2VsZiwgd2UgbWlnaHQgbGVhayB0aGUgd29ybGQuCisgICAgICAgIC8vIFRI
ZSBjb21tZW50IHNhaWQgdGhhdCB0aGUgQ2FjaGUgY29kZSBkb2VzIG5vdCBrbm93IGFib3V0IENh
Y2hlZEltYWdlcworICAgICAgICAvLyBob2xkaW5nIEZyYW1lcyBhbmQgd29uJ3Qga25vdyB0byBi
cmVhayB0aGUgY3ljbGUuIEJ1dCAKICAgICAgICAgbV9wYWdlLnNldChuZXcgUGFnZShtX2Nocm9t
ZUNsaWVudC5nZXQoKSwgZHVtbXlDb250ZXh0TWVudUNsaWVudCwgZHVtbXlFZGl0b3JDbGllbnQs
IGR1bW15RHJhZ0NsaWVudCwgZHVtbXlJbnNwZWN0b3JDbGllbnQpKTsKICAgICAgICAgbV9wYWdl
LT5zZXR0aW5ncygpLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgIG1fcGFn
ZS0+c2V0dGluZ3MoKS0+c2V0UGx1Z2luc0VuYWJsZWQoZmFsc2UpOwogCi0gICAgICAgIG1fZnJh
bWUgPSBGcmFtZTo6Y3JlYXRlKG1fcGFnZS5nZXQoKSwgMCwgZHVtbXlGcmFtZUxvYWRlckNsaWVu
dCk7Ci0gICAgICAgIG1fZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhtX2ZyYW1lLmdldCgpKTsK
LSAgICAgICAgbV9mcmFtZVZpZXctPmRlcmVmKCk7IC8vIEZJWE1FOiBGcmFtZVZpZXcgc3RhcnRz
IHdpdGggYSByZWZjb3VudCBvZiAxCi0gICAgICAgIG1fZnJhbWUtPnNldFZpZXcobV9mcmFtZVZp
ZXcuZ2V0KCkpOwotICAgICAgICBtX2ZyYW1lLT5pbml0KCk7CisgICAgICAgIFJlZlB0cjxGcmFt
ZT4gZnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fcGFnZS5nZXQoKSwgMCwgZHVtbXlGcmFtZUxvYWRl
ckNsaWVudCk7CisgICAgICAgIGZyYW1lLT5zZXRWaWV3KEZyYW1lVmlldzo6Y3JlYXRlKGZyYW1l
LmdldCgpKSk7CisgICAgICAgIGZyYW1lLT5pbml0KCk7CiAgICAgICAgIFJlc291cmNlUmVxdWVz
dCBmYWtlUmVxdWVzdChLVVJMKCIiKSk7Ci0gICAgICAgIG1fZnJhbWUtPmxvYWRlcigpLT5sb2Fk
KGZha2VSZXF1ZXN0LCBmYWxzZSk7IC8vIE1ha2Ugc3VyZSB0aGUgRG9jdW1lbnRMb2FkZXIgaXMg
Y3JlYXRlZAotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQ29udGVudFBvbGljeUNo
ZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcwotICAgICAgICBtX2ZyYW1lLT5sb2Fk
ZXIoKS0+Y29tbWl0UHJvdmlzaW9uYWxMb2FkKDApOwotICAgICAgICBtX2ZyYW1lLT5sb2FkZXIo
KS0+c2V0UmVzcG9uc2VNSU1FVHlwZSgiaW1hZ2Uvc3ZnK3htbCIpOwotICAgICAgICBtX2ZyYW1l
LT5sb2FkZXIoKS0+YmVnaW4oS1VSTCgpKTsgLy8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAot
ICAgICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+d3JpdGUobV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+
c2l6ZSgpKTsKLSAgICAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmVuZCgpOwotICAgICAgICBtX2Zy
YW1lVmlldy0+c2V0VHJhbnNwYXJlbnQodHJ1ZSk7IC8vIFNWRyBJbWFnZXMgYXJlIHRyYW5zcGFy
ZW50LgorICAgICAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOworICAg
ICAgICBsb2FkZXItPmxvYWQoZmFrZVJlcXVlc3QsIGZhbHNlKTsgLy8gTWFrZSBzdXJlIHRoZSBE
b2N1bWVudExvYWRlciBpcyBjcmVhdGVkCisgICAgICAgIGxvYWRlci0+Y2FuY2VsQ29udGVudFBv
bGljeUNoZWNrKCk7IC8vIGNhbmNlbCBhbnkgcG9saWN5IGNoZWNrcworICAgICAgICBsb2FkZXIt
PmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgwKTsKKyAgICAgICAgbG9hZGVyLT5zZXRSZXNwb25zZU1J
TUVUeXBlKCJpbWFnZS9zdmcreG1sIik7CisgICAgICAgIGxvYWRlci0+YmVnaW4oS1VSTCgpKTsg
Ly8gY3JlYXRlIHRoZSBlbXB0eSBkb2N1bWVudAorICAgICAgICBsb2FkZXItPndyaXRlKG1fZGF0
YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSk7CisgICAgICAgIGxvYWRlci0+ZW5kKCk7CisgICAg
ICAgIGZyYW1lLT52aWV3KCktPnNldFRyYW5zcGFyZW50KHRydWUpOyAvLyBTVkcgSW1hZ2VzIGFy
ZSB0cmFuc3BhcmVudC4KICAgICB9Ci0gICAgcmV0dXJuIG1fZnJhbWVWaWV3OworCisgICAgcmV0
dXJuIG1fcGFnZTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5oCShyZXZpc2lv
biA0NDMxMykKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEVyaWMgU2VpZGVs
IChlcmljQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwx
NSArMzAsMTAgQEAKICNpZiBFTkFCTEUoU1ZHKQogCiAjaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBjbGFzcyBTVkdEb2N1
bWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBGcmFtZVZpZXc7CisKKyAgICBjbGFz
cyBJbWFnZUJ1ZmZlcjsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFNWR0ltYWdlQ2hyb21l
Q2xpZW50OwogICAgIApAQCAtNzIsMTIgKzY4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAKICAgICAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpOwogICAgICAgICAKLSAgICAgICAgU1ZHRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAg
ICAgICAgIE93blB0cjxTVkdJbWFnZUNocm9tZUNsaWVudD4gbV9jaHJvbWVDbGllbnQ7CiAgICAg
ICAgIE93blB0cjxQYWdlPiBtX3BhZ2U7Ci0gICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mcmFtZTsK
LSAgICAgICAgUmVmUHRyPEZyYW1lVmlldz4gbV9mcmFtZVZpZXc7Ci0gICAgICAgIEludFNpemUg
bV9taW5TaXplOwogICAgICAgICBPd25QdHI8SW1hZ2VCdWZmZXI+IG1fZnJhbWVDYWNoZTsKICAg
ICB9OwogfQpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MzE2KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNDQgQEAKKzIwMDktMDYtMDEgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEJ1ZyAyNjExMjogdmlld2xlc3MgV2ViS2l0IC0tIG1ha2UgZXZlbnRzIHdv
cmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2MTEy
CisKKyAgICAgICAgT25lIGNoYW5nZSBoZXJlIGlzIHRvIG1ha2UgdGhlIC1bV2ViRnJhbWUgZnJh
bWVWaWV3XSBmdW5jdGlvbiBhc3NlcnQgaWYgZXZlciBjYWxsZWQKKyAgICAgICAgaW4gdmlld2xl
c3MgbW9kZSwgYW5kIGZpeCBtYW55IGNhbGxlcnMgdGhhdCB3b3VsZCB0cmlwIHRoYXQgYXNzZXJ0
aW9uLgorCisgICAgICAgIEEgbWFqb3IgY2hhbmdlIGlzIHRvIHB1dCBzb21lIG1ldGhvZHMgYW5k
IGRhdGEgaW4gV2ViVmlldyB0aGF0IGFyZSBjdXJyZW50bHkgaW4KKyAgICAgICAgV2ViSFRNTFZp
ZXcsIHVzZWQgb25seSBpbiB2aWV3bGVzcyBtb2RlLiBBIG5leHQgc3RlcCB3aWxsIGJlIHRvIHVz
ZSB0aGUgV2ViVmlldworICAgICAgICBtZXRob2RzIHdoZW5ldmVyIHBvc3NpYmxlLCBldmVuIHdo
ZW4gbm90IGluIHRoZSB2aWV3bGVzcyBtb2RlLgorCisgICAgICAgIEFsc28gZml4IEZyYW1lVmll
dyB0byBkbyBub3JtYWwgcmVmZXJlbmNlIGNvdW50aW5nIGluc3RlYWQgb2YgYSBzdHJhbmdlIG1v
ZGVsIHdpdGgKKyAgICAgICAgYW4gZXhwbGljaXQgZGVyZWYgbmVhciBjcmVhdGlvbiB0aW1lLgor
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAo
V2ViQ2hyb21lQ2xpZW50OjpzY3JvbGxSZWN0SW50b1ZpZXcpOiBBZGQgY29kZSB0byBzdGFydCBp
biB0aGUgYXBwcm9wcmlhdGUgcGxhY2UKKyAgICAgICAgd2hlbiBkZWFsaW5nIHdpdGggdmlld2xl
c3MgbW9kZS4gVGhpcyBnZXRzIHRyaWdnZXJlZCB3aGVuIHZpc2l0aW5nIHRoZSBHb29nbGUgaG9t
ZSBwYWdlLgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKTogQ2hhbmdlZCB0
byBjYWxsIFdlYlZpZXcgaW5zdGVhZCBvZiBXZWJIVE1MVmlldy4KKyAgICAgICAgKFdlYkNocm9t
ZUNsaWVudDo6cHJpbnQpOiBDaGFuZ2VkIHRvIHVzZSBhIG5ldyBzZWxlY3RvciB0aGF0IGRvZXNu
J3QgcmVxdWlyZSBhCisgICAgICAgIFdlYkZyYW1lVmlldyBpZiBwcmVzZW50LiBBbHNvIGRvbid0
IGV2ZW4gdHJ5IHRvIHVzZSB0aGUgb2xkIHNlbGVjdG9yIGluIHZpZXdsZXNzIG1vZGUuCisKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJF
ZGl0b3JDbGllbnQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOiBDaGFuZ2VkIHRvIGNhbGwg
V2ViVmlldyBpbnN0ZWFkIG9mIFdlYkhUTUxWaWV3LgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVu
dDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSk6IEFkZGVkIG1vcmUgY29kZSBwYXRo
cyBmb3IKKyAgICAgICAgdmlld2xlc3MgbW9kZSB0byBza2lwIHRoaW5ncyB3ZSBjYW4ndCBkbyBp
biB0aGF0IG1vZGUsIHdpdGggYXBwcm9wcmlhdGUgRklYTUUuCisgICAgICAgIFVzZSBGcmFtZTo6
Y3JlYXRlIGFuZCBSZWZQdHIgYW5kIGVsaW1pbmF0ZSB0aGUgc3RyYW5nZSByZWZlcmVuY2UgY291
bnRpbmcgb2YgRnJhbWVWaWV3LgorCisgICAgICAgICogV2ViVmlldy9XZWJEYXRhU291cmNlLm1t
OgorICAgICAgICAoLVtXZWJEYXRhU291cmNlIF9yZWNlaXZlZERhdGE6XSk6IEFkZGVkIGEgX3Vz
ZXNEb2N1bWVudFZpZXdzIGd1YXJkIGFyb3VuZCBjb2RlIHRoYXQncworICAgICAgICBzcGVjaWZp
YyB0byBkb2N1bWVudCB2aWV3cy4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06Cisg
ICAgICAgICgtW1dlYkZyYW1lIF91cGRhdGVCYWNrZ3JvdW5kQW5kVXBkYXRlc1doaWxlT2Zmc2Ny
ZWVuXSk6IEFkZGVkIGEgX3VzZXNEb2N1bWVudFZpZXdzCisgICAgICAgIGd1YXJkIGFyb3VuZCBj
b2RlIHRoYXQncyBzcGVjaWZpYyB0byBkb2N1bWVudCB2aWV3cy4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX2hhc1NlbGVjdGlvbl0pOiBBZGRlZCBhbiBpbXBsZW1lbnRhdGlvbiBmb3Igdmlld2xlc3Mg
bW9kZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NsZWFyU2VsZWN0aW9uXSk6IEFzc2VydCB3ZSdy
ZSBub3QgaW4gdmlld2xlc3MgbW9kZTsgaXQgZG9lc24ndCByZWFsbHkKKyAgICAgICAgbWFrZSBz
ZW5zZSB0byBjbGVhciB0aGUgc2VsZWN0aW9uIGluIG9ubHkgb25lIGZyYW1lIGluIHZpZXdsZXNz
IG1vZGUuIExhdGVyIHdlIGNhbgorICAgICAgICBkZWNpZGUgd2hhdCB0byBkby4KKyAgICAgICAg
KC1bV2ViRnJhbWUgX2RyYWdTb3VyY2VNb3ZlZFRvOl0pOiBBc3NlcnQgd2UncmUgbm90IGluIHZp
ZXdsZXNzIG1vZGU7IHRoZSBkcmFnZ2luZworICAgICAgICBjb2RlIGZvciB2aWV3bGVzcyBtb2Rl
IHNob3VsZG4ndCBoYXZlIHRvIGludm9sdmUgdGhlIFdlYkZyYW1lIG9iamVjdCBhdCBhbGwuCisg
ICAgICAgICgtW1dlYkZyYW1lIF9kcmFnU291cmNlRW5kZWRBdDpvcGVyYXRpb246XSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJGcmFtZSBmcmFtZVZpZXddKTogQXNzZXJ0IHdlJ3JlIG5vdCBpbiB2
aWV3bGVzcyBtb2RlLiBUaGlzIGFzc2VydGlvbiBmaXJlcworICAgICAgICBvZnRlbiwgYnV0IGl0
J3MgYSBncmVhdCBwb2ludGVyIHRvIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBjaGFuZ2VkLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
aGl0VGVzdDpdKTogVHdlYWtlZCBhIGNvbW1lbnQuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF91
cGRhdGVNb3VzZW92ZXJXaXRoRXZlbnQ6XSk6IEZpeGVkIGEgYnVnIHdoZXJlIHRoZSBmYWtlIGV2
ZW50IGZvcgorICAgICAgICBtb3ZpbmcgdGhlIG1vdXNlIG91dCBvZiB0aGUgb2xkIHZpZXcgZW5k
ZWQgdXAgb3ZlcndyaXRpbmcgdGhlIGV2ZW50IGZvciBtb3ZpbmcKKyAgICAgICAgdGhlIG1vdXNl
IHdpdGhpbiB0aGUgbmV3IHZpZXcuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1vdXNlRG93bjpd
KTogR290IHJpZCBvZiBleHBsaWNpdCBjb252ZXJzaW9uIG9mIGV2ZW50IHRvCisgICAgICAgIFBs
YXRmb3JtTW91c2VFdmVudCBpbiBjYWxsIHRvIHNlbmRDb250ZXh0TWVudUV2ZW50OyB0aGF0J3Mg
bm8gbG9uZ2VyIHBvc3NpYmxlCisgICAgICAgIHdpdGhvdXQgcGFzc2luZyBhbm90aGVyIGFyZ3Vt
ZW50LCBhbmQgaXQncyBub3cgaGFuZGxlZCBpbiBFdmVudEhhbmRsZXIuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oOiBDb3BpZWQgZnJvbSBXZWJLaXQv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0uCisgICAgICAgIFJlbW92ZWQgZXZlcnl0aGluZyBl
eGNlcHQgZm9yIHRoZSBXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgY2xhc3MuCisgICAgICAg
ICogV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW06IENvcGllZCBmcm9tIFdl
YktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbS4KKyAgICAgICAgRGl0dG8uCisKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlVJRGVsZWdhdGVQcml2YXRlLmg6IEFkZGVkIHdlYlZpZXc6cHJpbnRG
cmFtZTogbWV0aG9kLgorCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOiBNb3ZlZCBpbmNs
dWRlcyBhbmQgZmllbGRzIGluIGZyb20gV2ViSFRNTFZpZXcuCisgICAgICAgICgtW1dlYlZpZXcg
X3VzZXNEb2N1bWVudFZpZXdzXSk6IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIGZyb20gdXNlRG9j
dW1lbnRWaWV3cworICAgICAgICB0byB1c2VzRG9jdW1lbnRWaWV3cy4KKyAgICAgICAgKC1bV2Vi
VmlldyBfY29tbW9uSW5pdGlhbGl6YXRpb25XaXRoRnJhbWVOYW1lOmdyb3VwTmFtZTp1c2VzRG9j
dW1lbnRWaWV3czpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgZHJhd1NpbmdsZVJlY3Q6
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IGlzRmxpcHBlZF0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViVmlldyBzZXRGcmFtZVNpemU6XSk6IERpdHRvLiBBbHNvIGNoYW5nZWQgdG8gdXNl
IF9tYWluQ29yZUZyYW1lIG1ldGhvZC4KKyAgICAgICAgKC1bV2ViVmlldyBfdmlld1dpbGxEcmF3
SW50ZXJuYWxdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgdmlld1dpbGxEcmF3XSk6IERp
dHRvLgorICAgICAgICAoLVtXZWJWaWV3IGRyYXdSZWN0Ol0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViVmlldyBfY2xvc2VdKTogQWRkZWQgY29kZSB0byBuaWwgb3V0IHRoZSBsYXN0TW91c2VvdmVy
VmlldyBnbG9iYWwuCisgICAgICAgICgtW1dlYlZpZXcgX2Rhc2hib2FyZFJlZ2lvbnNdKTogVXNl
IF9tYWluQ29yZUZyYW1lLgorICAgICAgICAoLVtXZWJWaWV3IHNldFByb2hpYml0c01haW5GcmFt
ZVNjcm9sbGluZzpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX3NldEluVmlld1NvdXJj
ZU1vZGU6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9pblZpZXdTb3VyY2VNb2RlXSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9hdHRhY2hTY3JpcHREZWJ1Z2dlclRvQWxsRnJh
bWVzXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9kZXRhY2hTY3JpcHREZWJ1Z2dlckZy
b21BbGxGcmFtZXNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgdGV4dEl0ZXJhdG9yRm9y
UmVjdDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX2V4ZWN1dGVDb3JlQ29tbWFuZEJ5
TmFtZTp2YWx1ZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgYWRkV2luZG93T2JzZXJ2
ZXJzRm9yV2luZG93Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyByZW1vdmVXaW5kb3dP
YnNlcnZlcnNdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX3VwZGF0ZUZvY3VzZWRBbmRB
Y3RpdmVTdGF0ZV0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBfdXBkYXRlRm9jdXNlZEFu
ZEFjdGl2ZVN0YXRlRm9yRnJhbWU6XSk6IFR1cm5lZCBpbnRvIGEgY2xhc3MgbWV0aG9kLgorICAg
ICAgICBBZGRlZCBjb2RlIHRvIGhhbmRsZSB0aGUgdmlld2xlc3MgY2FzZSB3aXRob3V0IGNhbGxp
bmcgZnJhbWVWaWV3LgorICAgICAgICAoLVtXZWJWaWV3IF93aW5kb3dEaWRCZWNvbWVLZXk6XSk6
IFVwZGF0ZWQgZm9yIG5hbWUgY2hhbmdlIGZyb20gdXNlRG9jdW1lbnRWaWV3cworICAgICAgICB0
byB1c2VzRG9jdW1lbnRWaWV3cy4KKyAgICAgICAgKC1bV2ViVmlldyBfd2luZG93RGlkUmVzaWdu
S2V5Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBfd2luZG93V2lsbE9yZGVyT25TY3Jl
ZW46XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IG1haW5GcmFtZV0pOiBUd2Vha2VkLgor
ICAgICAgICAoLVtXZWJWaWV3IHNlbGVjdGVkRnJhbWVdKTogQWRkZWQgYSBjb25kaXRpb25hbCB0
byBhdm9pZCB0cnlpbmcgdG8gZ2V0IGF0IHRoZQorICAgICAgICBmcmFtZSB2aWV3IGluIHZpZXds
ZXNzIGNhc2UuCisgICAgICAgICgtW1dlYlZpZXcgX3NldFpvb21NdWx0aXBsaWVyOmlzVGV4dE9u
bHk6XSk6IFVzZSBfbWFpbkNvcmVGcmFtZS4KKyAgICAgICAgKC1bV2ViVmlldyBzZXRDdXN0b21U
ZXh0RW5jb2RpbmdOYW1lOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyB3aW5kb3dTY3Jp
cHRPYmplY3RdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgc2V0SG9zdFdpbmRvdzpdKTog
RGl0dG8uIEFsc28gcHV0IHNvbWUgY29kZSB0aGF0J3MgbmVlZGVkIG9ubHkgZm9yCisgICAgICAg
IGRvY3VtZW50IHZpZXdzIGluc2lkZSBfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MuCisgICAg
ICAgICgtW1dlYlZpZXcgX2hpdFRlc3Q6ZHJhZ1R5cGVzOl0pOiBUd2Vha2VkLgorICAgICAgICAo
LVtXZWJWaWV3IGFjY2VwdHNGaXJzdFJlc3BvbmRlcl0pOiBBZGRlZCBjYXNlIGZvciB2aWV3bGVz
cyBtb2RlIGFsb25nIHdpdGggYQorICAgICAgICBGSVhNRSwgc2luY2UgaXQncyBub3QgY29tcGxl
dGUuCisgICAgICAgICgtW1dlYlZpZXcgYmVjb21lRmlyc3RSZXNwb25kZXJdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYlZpZXcgX3dlYmNvcmVfZWZmZWN0aXZlRmlyc3RSZXNwb25kZXJdKTogUHV0
IHRoZSBib2R5IG9mIHRoaXMgaW5zaWRlCisgICAgICAgIGEgdXNlc0RvY3VtZW50VmlldyBjaGVj
aywgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRoZSBmaXJzdCByZXNwb25kZXIgZm9yd2FyZGluZwor
ICAgICAgICBpbiB2aWV3bGVzcyBtb2RlLgorICAgICAgICAoLVtXZWJWaWV3IHNldE5leHRLZXlW
aWV3Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmlldyBtb3VzZURvd246XSk6IEFkZGVkLiBD
b3BpZWQgZnJvbSBXZWJIVE1MVmlldy4gRklYTUUgaW4gaGVyZSBzdWdnZXN0cworICAgICAgICB0
aGF0IHdlIG1ha2UgV2ViSFRNTFZpZXcgc2hhcmUgdGhpcyBvbmUgc29vbiwgd2hpY2ggSSB0aGlu
ayBpcyBwcmFjdGljYWwuCisgICAgICAgICgtW1dlYlZpZXcgbW91c2VVcDpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYlZpZXcgc2V0SG92ZXJGZWVkYmFja1N1c3BlbmRlZDpdKTogQWRkZWQgYSBj
b2RlIHBhdGggZm9yIHZpZXdsZXNzIG1vZGUuCisgICAgICAgICgtW1dlYlZpZXcgc2hvdWxkQ2xv
c2VdKTogVXNlIF9tYWluQ29yZUZyYW1lLgorICAgICAgICAoLVtXZWJWaWV3IGFlRGVzY0J5RXZh
bHVhdGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViVmll
dyBzZXRFZGl0YWJsZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcgX2ZyYW1lVmlld0F0
V2luZG93UG9pbnQ6XSk6IEFkZGVkIGFuIGFzc2VydGlvbiB0aGF0IHdlJ3JlIG5vdCBpbgorICAg
ICAgICB2aWV3bGVzcyBtb2RlIHNpbmNlIHRoaXMgbWV0aG9kIG1ha2VzIG5vIHNlbnNlIGluIHRo
YXQgbW9kZS4KKyAgICAgICAgKC1bV2ViVmlldyBfc2V0TW91c2VEb3duRXZlbnQ6XSk6IEFkZGVk
LiBDb3BpZWQgZnJvbSBXZWJIVE1MVmlldy4gSSBwbGFuIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0
aGUgb25lIGluIFdlYkhUTUxWaWV3IHNvb24uCisgICAgICAgICgtW1dlYlZpZXcgX2NhbmNlbFVw
ZGF0ZU1vdXNlb3ZlclRpbWVyXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9zdG9wQXV0
b3Njcm9sbFRpbWVyXSk6IERpdHRvLgorICAgICAgICAoK1tXZWJWaWV3IF91cGRhdGVNb3VzZW92
ZXJXaXRoRXZlbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF91cGRhdGVNb3VzZW92
ZXJXaXRoRmFrZUV2ZW50XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJWaWV3IF9zZXRUb29sVGlw
Ol0pOiBBZGRlZC4gQ2FsbHMgdGhyb3VnaCB0byB0aGUgV2ViSFRNTFZpZXcgdmVyc2lvbi4KKyAg
ICAgICAgKC1bV2ViVmlldyBfc2VsZWN0aW9uQ2hhbmdlZF0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViVmlldyBfbWFpbkNvcmVGcmFtZV0pOiBBZGRlZC4KKyAgICAgICAgKC1bV2ViVmlldyBfbmVl
ZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbl0pOiBNb3ZlZCBpbnRvIHRoZSBXZWJJbnRl
cm5hbAorICAgICAgICBjYXRlZ29yeS4KKyAgICAgICAgKC1bV2ViVmlldyBfc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbjpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYlZpZXcg
X3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6XSk6IERpdHRvLgorICAgICAg
ICAoLVtXZWJWaWV3IF9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOl0pOiBE
aXR0by4KKyAgICAgICAgKHZpZXdVcGRhdGVSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjayk6IERpdHRv
LgorICAgICAgICAoLVtXZWJWaWV3IF9zY2hlZHVsZVZpZXdVcGRhdGVdKTogRGl0dG8uCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oOiBNYWRlIG1vc3Qgb2YgdGhlIGZpbGUg
bm90IGNvbXBpbGUgYXQgYWxsIHdoZW4KKyAgICAgICAgaW5jbHVkZWQgZnJvbSBub24tQysrIHNv
dXJjZSBmaWxlcywgZWxtaW5hdGluZyBzb21lIGV4Y2VzcyBkZWNsYXJhdGlvbnMgYW5kCisgICAg
ICAgIHR5cGVkZWZzLiBNb3ZlZCBtb3JlIG1ldGhvZHMgaW50byB0aGUgcmVhbCBpbnRlcm5hbCBj
YXRlZ29yeS4gQWRkZWQgbmV3CisgICAgICAgIG1ldGhvZHMgX3NldE1vdXNlRG93bkV2ZW50LCBf
Y2FuY2VsVXBkYXRlTW91c2VvdmVyVGltZXIsIF9zdG9wQXV0b3Njcm9sbFRpbWVyLAorICAgICAg
ICBfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudCwgX3NlbGVjdGlvbkNoYW5nZWQsIGFuZCBf
c2V0VG9vbFRpcDouCisKIDIwMDktMDYtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgICogV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW06IEZp
eCBUaWdlciBidWlsZCBieSBhZGRpbmcgaW1wb3J0CkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkocmV2aXNpb24gNDQzMTMpCisrKyBXZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDc3LDE2ICs0NzcsMjAgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjcm9sbFJlY3RJbnRvVmll
dwogICAgIC8vIEZJWE1FOiBUaGlzIHNjcm9sbGluZyBiZWhhdmlvciBzaG91bGQgYmUgdW5kZXIg
dGhlIGNvbnRyb2wgb2YgdGhlIGVtYmVkZGluZyBjbGllbnQgKHJhdGhlciB0aGFuIHNvbWV0aGlu
ZwogICAgIC8vIHdlIGp1c3QgZG8gb3Vyc2VsdmVzKS4KICAgICAKLSAgICAvLyBXZSBoYXZlIHRv
IGNvbnZlcnQgYmFjayB0byBkb2N1bWVudCB2aWV3IGNvb3JkaW5hdGVzIGluIG9yZGVyIHRvIGxl
dCB0aGUgZmxpcHBpbmcgY29udmVyc2lvbiB0YWtlIHBsYWNlLiAgSXQganVzdAotICAgIC8vIGRv
ZXNuJ3QgbWFrZSBzZW5zZSBmb3IgdGhlIHNjcm9sbFJlY3RJbnRvVmlldyBBUEkgdG8gdGFrZSBk
b2N1bWVudCB2aWV3IGNvb3JkaW5hdGVzLgogICAgIEludFJlY3Qgc2Nyb2xsUmVjdCA9IHI7Ci0g
ICAgc2Nyb2xsUmVjdC5tb3ZlKHNjcm9sbFZpZXctPnNjcm9sbE9mZnNldCgpKTsKKyAgICBOU1Zp
ZXcgKnN0YXJ0VmlldyA9IG1fd2ViVmlldzsKKyAgICBpZiAoW21fd2ViVmlldyBfdXNlc0RvY3Vt
ZW50Vmlld3NdKSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY29udmVydCBiYWNrIHRvIGRvY3Vt
ZW50IHZpZXcgY29vcmRpbmF0ZXMuCisgICAgICAgIC8vIEl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBm
b3IgdGhlIHNjcm9sbFJlY3RJbnRvVmlldyBBUEkgdG8gdGFrZSBkb2N1bWVudCB2aWV3IGNvb3Jk
aW5hdGVzLgorICAgICAgICBzY3JvbGxSZWN0Lm1vdmUoc2Nyb2xsVmlldy0+c2Nyb2xsT2Zmc2V0
KCkpOworICAgICAgICBzdGFydFZpZXcgPSBbW1ttX3dlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZp
ZXddIGRvY3VtZW50Vmlld107CisgICAgfQogICAgIE5TUmVjdCByZWN0ID0gc2Nyb2xsUmVjdDsK
LSAgICBmb3IgKE5TVmlldyAqdmlldyA9IFtbW21fd2ViVmlldyBtYWluRnJhbWVdIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XTsgdmlldzsgdmlldyA9IFt2aWV3IHN1cGVydmlld10pIHsgCisgICAg
Zm9yIChOU1ZpZXcgKnZpZXcgPSBzdGFydFZpZXc7IHZpZXc7IHZpZXcgPSBbdmlldyBzdXBlcnZp
ZXddKSB7IAogICAgICAgICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbTlNDbGlwVmlldyBjbGFz
c11dKSB7IAogICAgICAgICAgICAgTlNDbGlwVmlldyAqY2xpcFZpZXcgPSAoTlNDbGlwVmlldyAq
KXZpZXc7IAogICAgICAgICAgICAgTlNWaWV3ICpkb2N1bWVudFZpZXcgPSBbY2xpcFZpZXcgZG9j
dW1lbnRWaWV3XTsgCi0gICAgICAgICAgICBbZG9jdW1lbnRWaWV3IHNjcm9sbFJlY3RUb1Zpc2li
bGU6W2RvY3VtZW50VmlldyBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3OltbW21fd2ViVmlldyBt
YWluRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XV1dOyAKKyAgICAgICAgICAgIFtkb2N1
bWVudFZpZXcgc2Nyb2xsUmVjdFRvVmlzaWJsZTpbZG9jdW1lbnRWaWV3IGNvbnZlcnRSZWN0OnJl
Y3QgZnJvbVZpZXc6c3RhcnRWaWV3XV07IAogICAgICAgICB9IAogICAgIH0KIH0KQEAgLTUwMiwx
MyArNTA2LDE2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVPdmVyRWwKIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwKQog
ewotICAgIFsoV2ViSFRNTFZpZXcgKilbW1ttX3dlYlZpZXcgbWFpbkZyYW1lXSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gX3NldFRvb2xUaXA6dG9vbFRpcF07CisgICAgW21fd2ViVmlldyBfc2V0
VG9vbFRpcDp0b29sVGlwXTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZyYW1l
KiBmcmFtZSkKIHsKLSAgICBXZWJGcmFtZVZpZXcqIGZyYW1lVmlldyA9IFtraXQoZnJhbWUpIGZy
YW1lVmlld107Ci0gICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmll
dzpwcmludEZyYW1lVmlldzopLCBmcmFtZVZpZXcpOworICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9
IGtpdChmcmFtZSk7CisgICAgaWYgKFtbbV93ZWJWaWV3IFVJRGVsZWdhdGVdIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3Iod2ViVmlldzpwcmludEZyYW1lOildKQorICAgICAgICBDYWxsVUlE
ZWxlZ2F0ZShtX3dlYlZpZXcsIEBzZWxlY3Rvcih3ZWJWaWV3OnByaW50RnJhbWU6KSwgd2ViRnJh
bWUpOworICAgIGVsc2UgaWYgKFttX3dlYlZpZXcgX3VzZXNEb2N1bWVudFZpZXdzXSkKKyAgICAg
ICAgQ2FsbFVJRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3Iod2ViVmlldzpwcmludEZyYW1l
VmlldzopLCBbd2ViRnJhbWUgZnJhbWVWaWV3XSk7CiB9CiAKICNpZiBFTkFCTEUoREFUQUJBU0Up
CkBAIC02NDksMTUgKzY1NiwxNiBAQCBTdHJpbmcgV2ViQ2hyb21lQ2xpZW50OjpnZW5lcmF0ZVJl
cGxhY2VtCiB9CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSogZnJhbWUsIEdyYXBo
aWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TOwogICAgIFdlYkZyYW1lVmlldyAqZnJhbWVWaWV3ID0gW2tpdChmcmFtZSkgZnJhbWVWaWV3
XTsKLSAgICBXZWJIVE1MVmlldyAqZG9jVmlldyA9IChXZWJIVE1MVmlldyAqKVtmcmFtZVZpZXcg
ZG9jdW1lbnRWaWV3XTsKKyAgICBXZWJIVE1MVmlldyAqZG9jdW1lbnRWaWV3ID0gKFdlYkhUTUxW
aWV3ICopW2ZyYW1lVmlldyBkb2N1bWVudFZpZXddOwogICAgIGlmIChncmFwaGljc0xheWVyKQot
ICAgICAgICBbZG9jVmlldyBhdHRhY2hSb290TGF5ZXI6Z3JhcGhpY3NMYXllci0+bmF0aXZlTGF5
ZXIoKV07CisgICAgICAgIFtkb2N1bWVudFZpZXcgYXR0YWNoUm9vdExheWVyOmdyYXBoaWNzTGF5
ZXItPm5hdGl2ZUxheWVyKCldOwogICAgIGVsc2UKLSAgICAgICAgW2RvY1ZpZXcgZGV0YWNoUm9v
dExheWVyXTsKKyAgICAgICAgW2RvY3VtZW50VmlldyBkZXRhY2hSb290TGF5ZXJdOwogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiB9CiAKQEAgLTY3NCw2ICs2ODIsNyBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6c2NoZWR1bGVWaWV3VXBkYXRlCiAgICAgW21fd2ViVmlldyBfc2NoZWR1
bGVWaWV3VXBkYXRlXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogfQorCiAjZW5k
aWYKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25G
b3JGcmFtZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKSW5kZXg6IFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA0
NDMxMykKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yODAsOSArMjgwLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnJl
c3BvbmRUb0NoYW5nZWRDbwogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6cmVzcG9uZFRvQ2hhbmdl
ZFNlbGVjdGlvbigpCiB7Ci0gICAgTlNWaWV3IDxXZWJEb2N1bWVudFZpZXc+ICp2aWV3ID0gW1tb
bV93ZWJWaWV3IHNlbGVjdGVkRnJhbWVdIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBp
ZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgWyhX
ZWJIVE1MVmlldyAqKXZpZXcgX3NlbGVjdGlvbkNoYW5nZWRdOworICAgIFttX3dlYlZpZXcgX3Nl
bGVjdGlvbkNoYW5nZWRdOwogCiAgICAgLy8gRklYTUU6IFRoaXMgcXVpcmsgaXMgbmVlZGVkIGR1
ZSB0byA8cmRhcjovL3Byb2JsZW0vNTAwOTYyNT4gLSBXZSBjYW4gcGhhc2UgaXQgb3V0IG9uY2Ug
QXBlcnR1cmUgY2FuIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igb24gdGhlaXIgZW5kCiAgICAgaWYg
KCFXZWJLaXRMaW5rZWRPbk9yQWZ0ZXIoV0VCS0lUX0ZJUlNUX1ZFUlNJT05fV0lUSE9VVF9BUEVS
VFVSRV9RVUlSSykgJiYgW1tbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0g
aXNFcXVhbFRvU3RyaW5nOkAiY29tLmFwcGxlLkFwZXJ0dXJlIl0pCkluZGV4OiBXZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0JKHJldmlzaW9u
IDQ0MzEzKQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVu
dC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAzNywyOCArMTAzNywzMCBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50Ojp0cmFuc2l0aW9uVG9DCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQogewotICAgIFdlYkZyYW1lVmlldyAq
diA9IG1fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFtZVZpZXc7Ci0gICAgV2ViRGF0YVNvdXJj
ZSAqZHMgPSBbbV93ZWJGcmFtZS5nZXQoKSBfZGF0YVNvdXJjZV07CisgICAgV2ViVmlldyAqd2Vi
VmlldyA9IGdldFdlYlZpZXcobV93ZWJGcmFtZS5nZXQoKSk7CisgICAgV2ViRGF0YVNvdXJjZSAq
ZGF0YVNvdXJjZSA9IFttX3dlYkZyYW1lLmdldCgpIF9kYXRhU291cmNlXTsKKyAgICBib29sIHVz
ZXNEb2N1bWVudFZpZXdzID0gW3dlYlZpZXcgX3VzZXNEb2N1bWVudFZpZXdzXTsKIAotICAgIGJv
b2wgd2lsbFByb2R1Y2VIVE1MVmlldyA9IFtbV2ViRnJhbWVWaWV3IGNsYXNzXSBfdmlld0NsYXNz
Rm9yTUlNRVR5cGU6W2RzIF9yZXNwb25zZU1JTUVUeXBlXV0gPT0gW1dlYkhUTUxWaWV3IGNsYXNz
XTsKLSAgICBib29sIGNhblNraXBDcmVhdGlvbiA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxv
YWRlcigpLT5jb21taXR0aW5nRmlyc3RSZWFsTG9hZCgpICYmIHdpbGxQcm9kdWNlSFRNTFZpZXc7
Ci0gICAgaWYgKGNhblNraXBDcmVhdGlvbikgewotICAgICAgICBbW3YgZG9jdW1lbnRWaWV3XSBz
ZXREYXRhU291cmNlOmRzXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAodXNlc0Rv
Y3VtZW50Vmlld3MpIHsKKyAgICAgICAgLy8gRklYTUUgKFZpZXdsZXNzKTogSSBhc3N1bWUgd2Ug
d2FudCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGltaXphdGlvbiBmb3Igdmlld2xlc3MgbW9k
ZSB0b28uCisgICAgICAgIGJvb2wgd2lsbFByb2R1Y2VIVE1MVmlldyA9IFtbV2ViRnJhbWVWaWV3
IGNsYXNzXSBfdmlld0NsYXNzRm9yTUlNRVR5cGU6W2RhdGFTb3VyY2UgX3Jlc3BvbnNlTUlNRVR5
cGVdXSA9PSBbV2ViSFRNTFZpZXcgY2xhc3NdOworICAgICAgICBib29sIGNhblNraXBDcmVhdGlv
biA9IGNvcmUobV93ZWJGcmFtZS5nZXQoKSktPmxvYWRlcigpLT5jb21taXR0aW5nRmlyc3RSZWFs
TG9hZCgpICYmIHdpbGxQcm9kdWNlSFRNTFZpZXc7CisgICAgICAgIGlmIChjYW5Ta2lwQ3JlYXRp
b24pIHsKKyAgICAgICAgICAgIFtbbV93ZWJGcmFtZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBk
b2N1bWVudFZpZXddIHNldERhdGFTb3VyY2U6ZGF0YVNvdXJjZV07CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KIAotICAgIC8vIERvbid0IHN1cHByZXNzIHNjcm9sbGJhcnMgYmVmb3Jl
IHRoZSB2aWV3IGNyZWF0aW9uIGlmIHdlJ3JlIG1ha2luZyB0aGUgdmlldyBmb3IgYSBub24tSFRN
TCB2aWV3LgotICAgIGlmICghd2lsbFByb2R1Y2VIVE1MVmlldykKLSAgICAgICAgW1t2IF9zY3Jv
bGxWaWV3XSBzZXRTY3JvbGxCYXJzU3VwcHJlc3NlZDpOTyByZXBhaW50T25VbnN1cHByZXNzOk5P
XTsKKyAgICAgICAgLy8gRG9uJ3Qgc3VwcHJlc3Mgc2Nyb2xsYmFycyBiZWZvcmUgdGhlIHZpZXcg
Y3JlYXRpb24gaWYgd2UncmUgbWFraW5nIHRoZSB2aWV3IGZvciBhIG5vbi1IVE1MIHZpZXcuCisg
ICAgICAgIGlmICghd2lsbFByb2R1Y2VIVE1MVmlldykKKyAgICAgICAgICAgIFtbbV93ZWJGcmFt
ZS0+X3ByaXZhdGUtPndlYkZyYW1lVmlldyBfc2Nyb2xsVmlld10gc2V0U2Nyb2xsQmFyc1N1cHBy
ZXNzZWQ6Tk8gcmVwYWludE9uVW5zdXBwcmVzczpOT107CisgICAgfQogICAgIAogICAgIC8vIGNs
ZWFuIHVwIHdlYmtpdCBwbHVnaW4gaW5zdGFuY2VzIGJlZm9yZSBXZWJIVE1MVmlldyBnZXRzIGZy
ZWVkLgotICAgIFdlYlZpZXcgKndlYlZpZXcgPSBnZXRXZWJWaWV3KG1fd2ViRnJhbWUuZ2V0KCkp
OwogICAgIFt3ZWJWaWV3IHJlbW92ZVBsdWdpbkluc3RhbmNlVmlld3NGb3I6KG1fd2ViRnJhbWUu
Z2V0KCkpXTsKICAgICAKLSAgICBCT09MIHVzZURvY3VtZW50Vmlld3MgPSBbd2ViVmlldyBfdXNl
c0RvY3VtZW50Vmlld3NdOwogICAgIE5TVmlldyA8V2ViRG9jdW1lbnRWaWV3PiAqZG9jdW1lbnRW
aWV3ID0gbmlsOwotICAgIGlmICh1c2VEb2N1bWVudFZpZXdzKSB7Ci0gICAgICAgIGRvY3VtZW50
VmlldyA9IFt2IF9tYWtlRG9jdW1lbnRWaWV3Rm9yRGF0YVNvdXJjZTpkc107CisgICAgaWYgKHVz
ZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAgIGRvY3VtZW50VmlldyA9IFttX3dlYkZyYW1lLT5f
cHJpdmF0ZS0+d2ViRnJhbWVWaWV3IF9tYWtlRG9jdW1lbnRWaWV3Rm9yRGF0YVNvdXJjZTpkYXRh
U291cmNlXTsKICAgICAgICAgaWYgKCFkb2N1bWVudFZpZXcpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTA3MiwyOCArMTA3NCwyOSBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
Ojp0cmFuc2l0aW9uVG9DCiAgICAgaWYgKGlzTWFpbkZyYW1lICYmIGNvcmVGcmFtZS0+dmlldygp
KQogICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+c2V0UGFyZW50VmlzaWJsZShmYWxzZSk7CiAg
ICAgY29yZUZyYW1lLT5zZXRWaWV3KDApOwotICAgIEZyYW1lVmlldyogY29yZVZpZXc7Ci0gICAg
aWYgKHVzZURvY3VtZW50Vmlld3MpCi0gICAgICAgIGNvcmVWaWV3ID0gbmV3IEZyYW1lVmlldyhj
b3JlRnJhbWUpOworICAgIFJlZlB0cjxGcmFtZVZpZXc+IGNvcmVWaWV3OworICAgIGlmICh1c2Vz
RG9jdW1lbnRWaWV3cykKKyAgICAgICAgY29yZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShjb3Jl
RnJhbWUpOwogICAgIGVsc2UKLSAgICAgICAgY29yZVZpZXcgPSBuZXcgRnJhbWVWaWV3KGNvcmVG
cmFtZSwgSW50U2l6ZShbd2ViVmlldyBib3VuZHNdLnNpemUpKTsKKyAgICAgICAgY29yZVZpZXcg
PSBGcmFtZVZpZXc6OmNyZWF0ZShjb3JlRnJhbWUsIEludFNpemUoW3dlYlZpZXcgYm91bmRzXS5z
aXplKSk7CiAgICAgY29yZUZyYW1lLT5zZXRWaWV3KGNvcmVWaWV3KTsKLSAgICBjb3JlVmlldy0+
ZGVyZWYoKTsgLy8gRklYTUU6IEVsaW1pbmF0ZSB0aGlzIGNyYXp5IHJlZmNvdW50aW5nIQogCiAg
ICAgW21fd2ViRnJhbWUuZ2V0KCkgX3VwZGF0ZUJhY2tncm91bmRBbmRVcGRhdGVzV2hpbGVPZmZz
Y3JlZW5dOwogCi0gICAgW3YgX2luc3RhbGxdOworICAgIGlmICh1c2VzRG9jdW1lbnRWaWV3cykK
KyAgICAgICAgW21fd2ViRnJhbWUtPl9wcml2YXRlLT53ZWJGcmFtZVZpZXcgX2luc3RhbGxdOwog
CiAgICAgaWYgKGlzTWFpbkZyYW1lKQogICAgICAgICBjb3JlVmlldy0+c2V0UGFyZW50VmlzaWJs
ZSh0cnVlKTsKIAotICAgIC8vIENhbGwgc2V0RGF0YVNvdXJjZSBvbiB0aGUgZG9jdW1lbnQgdmll
dyBhZnRlciBpdCBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIHZpZXcgaGllcmFyY2h5LgotICAgIC8v
IFRoaXMgd2hhdCB3ZSBmb3IgdGhlIHRvcC1sZXZlbCB2aWV3LCBzbyBzaG91bGQgZG8gdGhpcyBm
b3Igdmlld3MgaW4gc3ViZnJhbWVzIGFzIHdlbGwuCi0gICAgW2RvY3VtZW50VmlldyBzZXREYXRh
U291cmNlOmRzXTsKKyAgICBpZiAodXNlc0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgLy8gQ2Fs
bCBzZXREYXRhU291cmNlIG9uIHRoZSBkb2N1bWVudCB2aWV3IGFmdGVyIGl0IGhhcyBiZWVuIHBs
YWNlZCBpbiB0aGUgdmlldyBoaWVyYXJjaHkuCisgICAgICAgIC8vIFRoaXMgd2hhdCB3ZSBmb3Ig
dGhlIHRvcC1sZXZlbCB2aWV3LCBzbyBzaG91bGQgZG8gdGhpcyBmb3Igdmlld3MgaW4gc3ViZnJh
bWVzIGFzIHdlbGwuCisgICAgICAgIFtkb2N1bWVudFZpZXcgc2V0RGF0YVNvdXJjZTpkYXRhU291
cmNlXTsKKyAgICB9CiAgICAgCiAgICAgaWYgKEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIg
PSBjb3JlRnJhbWUtPm93bmVyRWxlbWVudCgpKQogICAgICAgICBjb3JlRnJhbWUtPnZpZXcoKS0+
c2V0Q2FuSGF2ZVNjcm9sbGJhcnMob3duZXItPnNjcm9sbGluZ01vZGUoKSAhPSBTY3JvbGxiYXJB
bHdheXNPZmYpOwotICAgIAogfQogCiBSZXRhaW5QdHI8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lcj4g
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNldFVwUG9saWN5TGlzdGVuZXIoRnJhbWVQb2xpY3lGdW5j
dGlvbiBmdW5jdGlvbikKSW5kZXg6IFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCShyZXZp
c2lvbiA0NDMxMykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9XZWJEYXRhU291cmNlLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjQsNyArMjI0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGFkZFR5cGVz
RnJvbUNsYXNzKE5TTQogICAgIFJldGFpblB0cjxXZWJEYXRhU291cmNlKj4gcHJvdGVjdChzZWxm
KTsKICAgICAKICAgICBbW3NlbGYgcmVwcmVzZW50YXRpb25dIHJlY2VpdmVkRGF0YTpkYXRhIHdp
dGhEYXRhU291cmNlOnNlbGZdOwotICAgIFtbW1tzZWxmIHdlYkZyYW1lXSBmcmFtZVZpZXddIGRv
Y3VtZW50Vmlld10gZGF0YVNvdXJjZVVwZGF0ZWQ6c2VsZl07CisKKyAgICBpZiAoW1tzZWxmIF93
ZWJWaWV3XSBfdXNlc0RvY3VtZW50Vmlld3NdKQorICAgICAgICBbW1tbc2VsZiB3ZWJGcmFtZV0g
ZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIGRhdGFTb3VyY2VVcGRhdGVkOnNlbGZdOwogfQogCiAt
ICh2b2lkKV9zZXRNYWluRG9jdW1lbnRFcnJvcjooTlNFcnJvciAqKWVycm9yCkluZGV4OiBXZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCShyZXZpc2lvbiA0NDMxMykKKysrIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE4LDIyICszMTgsMjQgQEAgV2ViVmlldyAq
Z2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpCiAKICAgICBGcmFtZSogY29yZUZyYW1lID0g
X3ByaXZhdGUtPmNvcmVGcmFtZTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpIHsK
LSAgICAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0ga2l0KGZyYW1lKTsKLSAgICAgICAgLy8gRG9u
J3QgY2FsbCBzZXREcmF3c0JhY2tncm91bmQ6WUVTIGhlcmUgYmVjYXVzZSBpdCBtYXkgYmUgTk8g
YmVjYXVzZSBvZiBhIGxvYWQKLSAgICAgICAgLy8gaW4gcHJvZ3Jlc3M7IFdlYkZyYW1lTG9hZGVy
Q2xpZW50IGtlZXBzIGl0IHNldCB0byBOTyBkdXJpbmcgdGhlIGxvYWQgcHJvY2Vzcy4KLSAgICAg
ICAgaWYgKCFkcmF3c0JhY2tncm91bmQpCi0gICAgICAgICAgICBbW1t3ZWJGcmFtZSBmcmFtZVZp
ZXddIF9zY3JvbGxWaWV3XSBzZXREcmF3c0JhY2tncm91bmQ6Tk9dOwotICAgICAgICBbW1t3ZWJG
cmFtZSBmcmFtZVZpZXddIF9zY3JvbGxWaWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6YmFja2dyb3Vu
ZENvbG9yXTsKLSAgICAgICAgaWQgZG9jdW1lbnRWaWV3ID0gW1t3ZWJGcmFtZSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld107Ci0gICAgICAgIGlmIChbZG9jdW1lbnRWaWV3IHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3Ioc2V0RHJhd3NCYWNrZ3JvdW5kOildKQotICAgICAgICAgICAgW2RvY3Vt
ZW50VmlldyBzZXREcmF3c0JhY2tncm91bmQ6ZHJhd3NCYWNrZ3JvdW5kXTsKLSAgICAgICAgaWYg
KFtkb2N1bWVudFZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihzZXRCYWNrZ3JvdW5k
Q29sb3I6KV0pCi0gICAgICAgICAgICBbZG9jdW1lbnRWaWV3IHNldEJhY2tncm91bmRDb2xvcjpi
YWNrZ3JvdW5kQ29sb3JdOwotICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnZpZXcoKSkgewot
ICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQoIWRyYXdzQmFja2dyb3Vu
ZCk7Ci0gICAgICAgICAgICBDb2xvciBjb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW2JhY2tncm91
bmRDb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSk7
Ci0gICAgICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRCYXNlQmFja2dyb3VuZENvbG9yKGNvbG9y
KTsKLSAgICAgICAgICAgIGZyYW1lLT52aWV3KCktPnNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2Ny
ZWVuKFt3ZWJWaWV3IHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuXSk7CisgICAgICAgIGlmIChb
d2ViVmlldyBfdXNlc0RvY3VtZW50Vmlld3NdKSB7CisgICAgICAgICAgICAvLyBEb24ndCBjYWxs
IHNldERyYXdzQmFja2dyb3VuZDpZRVMgaGVyZSBiZWNhdXNlIGl0IG1heSBiZSBOTyBiZWNhdXNl
IG9mIGEgbG9hZAorICAgICAgICAgICAgLy8gaW4gcHJvZ3Jlc3M7IFdlYkZyYW1lTG9hZGVyQ2xp
ZW50IGtlZXBzIGl0IHNldCB0byBOTyBkdXJpbmcgdGhlIGxvYWQgcHJvY2Vzcy4KKyAgICAgICAg
ICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IGtpdChmcmFtZSk7CisgICAgICAgICAgICBpZiAoIWRy
YXdzQmFja2dyb3VuZCkKKyAgICAgICAgICAgICAgICBbW1t3ZWJGcmFtZSBmcmFtZVZpZXddIF9z
Y3JvbGxWaWV3XSBzZXREcmF3c0JhY2tncm91bmQ6Tk9dOworICAgICAgICAgICAgW1tbd2ViRnJh
bWUgZnJhbWVWaWV3XSBfc2Nyb2xsVmlld10gc2V0QmFja2dyb3VuZENvbG9yOmJhY2tncm91bmRD
b2xvcl07CisgICAgICAgICAgICBpZCBkb2N1bWVudFZpZXcgPSBbW3dlYkZyYW1lIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgICAgIGlmIChbZG9jdW1lbnRWaWV3IHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0RHJhd3NCYWNrZ3JvdW5kOildKQorICAgICAgICAgICAg
ICAgIFtkb2N1bWVudFZpZXcgc2V0RHJhd3NCYWNrZ3JvdW5kOmRyYXdzQmFja2dyb3VuZF07Cisg
ICAgICAgICAgICBpZiAoW2RvY3VtZW50VmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHNldEJhY2tncm91bmRDb2xvcjopXSkKKyAgICAgICAgICAgICAgICBbZG9jdW1lbnRWaWV3IHNl
dEJhY2tncm91bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCkpIHsKKyAgICAgICAgICAgIHZpZXct
PnNldFRyYW5zcGFyZW50KCFkcmF3c0JhY2tncm91bmQpOworICAgICAgICAgICAgdmlldy0+c2V0
QmFzZUJhY2tncm91bmRDb2xvcihjb2xvckZyb21OU0NvbG9yKFtiYWNrZ3JvdW5kQ29sb3IgY29s
b3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV0pKTsKKyAgICAgICAg
ICAgIHZpZXctPnNldFNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuKFt3ZWJWaWV3IHNob3VsZFVw
ZGF0ZVdoaWxlT2Zmc2NyZWVuXSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNzAsMjEgKzM3
MiwyNyBAQCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSkKIAogLSAoQk9P
TClfaGFzU2VsZWN0aW9uCiB7Ci0gICAgaWQgZG9jdW1lbnRWaWV3ID0gW19wcml2YXRlLT53ZWJG
cmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsgICAgCisgICAgaWYgKFtnZXRXZWJWaWV3KHNlbGYpIF91
c2VzRG9jdW1lbnRWaWV3c10pIHsKKyAgICAgICAgaWQgZG9jdW1lbnRWaWV3ID0gW19wcml2YXRl
LT53ZWJGcmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsgICAgCiAKLSAgICAvLyBvcHRpbWl6YXRpb24g
Zm9yIGNvbW1vbiBjYXNlIHRvIGF2b2lkIGNyZWF0aW5nIHBvdGVudGlhbGx5IGxhcmdlIHNlbGVj
dGlvbiBzdHJpbmcKLSAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1M
VmlldyBjbGFzc11dKQotICAgICAgICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5j
b3JlRnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNS
YW5nZSgpOworICAgICAgICAvLyBvcHRpbWl6YXRpb24gZm9yIGNvbW1vbiBjYXNlIHRvIGF2b2lk
IGNyZWF0aW5nIHBvdGVudGlhbGx5IGxhcmdlIHNlbGVjdGlvbiBzdHJpbmcKKyAgICAgICAgaWYg
KFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZDbGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAg
ICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOwogCi0g
ICAgaWYgKFtkb2N1bWVudFZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJEb2N1
bWVudFRleHQpXSkKLSAgICAgICAgcmV0dXJuIFtbZG9jdW1lbnRWaWV3IHNlbGVjdGVkU3RyaW5n
XSBsZW5ndGhdID4gMDsKLSAgICAKLSAgICByZXR1cm4gTk87CisgICAgICAgIGlmIChbZG9jdW1l
bnRWaWV3IGNvbmZvcm1zVG9Qcm90b2NvbDpAcHJvdG9jb2woV2ViRG9jdW1lbnRUZXh0KV0pCisg
ICAgICAgICAgICByZXR1cm4gW1tkb2N1bWVudFZpZXcgc2VsZWN0ZWRTdHJpbmddIGxlbmd0aF0g
PiAwOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIE5POworICAgIH0KKworICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYg
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpOwogfQogCiAtICh2b2lkKV9jbGVhclNl
bGVjdGlvbgogeworICAgIEFTU0VSVChbZ2V0V2ViVmlldyhzZWxmKSBfdXNlc0RvY3VtZW50Vmll
d3NdKTsKICAgICBpZCBkb2N1bWVudFZpZXcgPSBbX3ByaXZhdGUtPndlYkZyYW1lVmlldyBkb2N1
bWVudFZpZXddOyAgICAKICAgICBpZiAoW2RvY3VtZW50VmlldyBjb25mb3Jtc1RvUHJvdG9jb2w6
QHByb3RvY29sKFdlYkRvY3VtZW50VGV4dCldKQogICAgICAgICBbZG9jdW1lbnRWaWV3IGRlc2Vs
ZWN0QWxsXTsKQEAgLTkxMCw2ICs5MTgsNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2Ug
KmRhdGFTb3VyY2UoCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
dmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChbZ2V0
V2ViVmlldyhzZWxmKSBfdXNlc0RvY3VtZW50Vmlld3NdKTsKICAgICAvLyBGSVhNRTogVGhlc2Ug
YXJlIGZha2UgbW9kaWZpZXIga2V5cyBoZXJlLCBidXQgdGhleSBzaG91bGQgYmUgcmVhbCBvbmVz
IGluc3RlYWQuCiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KEludFBvaW50KHdpbmRvd0xv
YyksIGdsb2JhbFBvaW50KHdpbmRvd0xvYywgW3ZpZXctPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93
XSksCiAgICAgICAgIExlZnRCdXR0b24sIE1vdXNlRXZlbnRNb3ZlZCwgMCwgZmFsc2UsIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIGN1cnJlbnRUaW1lKCkpOwpAQCAtOTIzLDYgKzkzMiw3IEBAIHN0YXRp
YyBpbmxpbmUgV2ViRGF0YVNvdXJjZSAqZGF0YVNvdXJjZSgKICAgICBGcmFtZVZpZXcqIHZpZXcg
PSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKFtnZXRXZWJWaWV3KHNlbGYpIF91c2VzRG9jdW1lbnRWaWV3c10p
OwogICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgZmFrZSBtb2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0
aGV5IHNob3VsZCBiZSByZWFsIG9uZXMgaW5zdGVhZC4KICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQg
ZXZlbnQoSW50UG9pbnQod2luZG93TG9jKSwgZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+
cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddKSwKICAgICAgICAgTGVmdEJ1dHRvbiwgTW91c2VFdmVu
dE1vdmVkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUoKSk7CkBA
IC0xMTc5LDYgKzExODksNyBAQCBzdGF0aWMgaW5saW5lIFdlYkRhdGFTb3VyY2UgKmRhdGFTb3Vy
Y2UoCiAKIC0gKFdlYkZyYW1lVmlldyAqKWZyYW1lVmlldwogeworICAgIEFTU0VSVCghZ2V0V2Vi
VmlldyhzZWxmKSB8fCBbZ2V0V2ViVmlldyhzZWxmKSBfdXNlc0RvY3VtZW50Vmlld3NdKTsKICAg
ICByZXR1cm4gX3ByaXZhdGUtPndlYkZyYW1lVmlldzsKIH0KIApJbmRleDogV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJIVE1MVmlldy5tbQkocmV2aXNpb24gNDQzMTMpCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNiBAQAogI2ltcG9ydCA8
V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg+Ci0jaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9TZWxlY3Rpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYXJl
ZEJ1ZmZlci5oPgpAQCAtMjM4LDcgKzIzNyw2IEBAIGV4dGVybiBOU1N0cmluZyAqTlNUZXh0SW5w
dXRSZXBsYWNlbWVudFIKIAogQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxz
KQogLSAoaWQpX25ld0ZpcnN0UmVzcG9uZGVyQWZ0ZXJSZXNpZ25pbmc7Ci0tICh2b2lkKV9zZXRG
b3JjZUFjdGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7CiBAZW5kCiAKIEBpbnRlcmZhY2UgTlNBdHRy
aWJ1dGVkU3RyaW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQpAQCAtMTQxNCw4ICsx
NDEyLDggQEAgc3RhdGljIHZvaWQgX3VwZGF0ZU1vdXNlb3ZlclRpbWVyQ2FsbGJhYwogICAgIC8v
ICAgICAgd2hlbiB0aGVyZSBpcyBIVE1MIG92ZXJsYXBwaW5nIHRoZSB2aWV3LCBzZWUgYnVnIDQz
NjE2MjYpCiAgICAgLy8gICA0KSBOU0FjY2Vzc2liaWxpdHlIaXRUZXN0IHJlbGllcyBvbiB0aGlz
IGZvciBjaGVja2luZyB0aGUgY3Vyc29yIHBvc2l0aW9uLgogICAgIC8vICAgICAgT3VyIGNoZWNr
IGZvciB0aGF0IGlzIHdoZXRoZXIgdGhlIGV2ZW50IGlzIE5TRmxhZ3NDaGFuZ2VkLiAgVGhpcyB3
b3JrcwotICAgIC8vICAgICAgZm9yIFZvaWNlT3ZlcidzIGNudGwtb3B0LWY1IGNvbW1hbmQgKG1v
dmUgZm9jdXMgdG8gaXRlbSB1bmRlciBjdXJzb3IpCi0gICAgLy8gICAgICBhbmQgRGljdGlvbmFy
eSdzIGNtZC1jbnRsLUQgKG9wZW4gZGljdGlvbmFyeSBwb3B1cCBmb3IgaXRlbSB1bmRlciBjdXJz
b3IpLgorICAgIC8vICAgICAgZm9yIFZvaWNlT3ZlcidzIENvbnRyb2wtT3B0aW9uLUY1IGNvbW1h
bmQgKG1vdmUgZm9jdXMgdG8gaXRlbSB1bmRlciBjdXJzb3IpCisgICAgLy8gICAgICBhbmQgRGlj
dGlvbmFyeSdzIENvbW1hbmQtQ29udHJvbC1EIChvcGVuIGRpY3Rpb25hcnkgcG9wdXAgZm9yIGl0
ZW0gdW5kZXIgY3Vyc29yKS4KICAgICAvLyAgICAgIFRoaXMgaXMgb2YgY291cnNlIGEgaGFjay4K
IAogICAgIEJPT0wgY2FwdHVyZUhpdHNPblN1YnZpZXdzOwpAQCAtMTU4NCwxOCArMTU4MiwxOCBA
QCBzdGF0aWMgdm9pZCBfdXBkYXRlTW91c2VvdmVyVGltZXJDYWxsYmFjCiAgICAgaWYgKGxhc3RI
aXRWaWV3ICE9IHZpZXcgJiYgbGFzdEhpdFZpZXcgJiYgW2xhc3RIaXRWaWV3IF9mcmFtZV0pIHsK
ICAgICAgICAgLy8gSWYgd2UgYXJlIG1vdmluZyBvdXQgb2YgYSB2aWV3IChvciBmcmFtZSksIGxl
dCdzIHByZXRlbmQgdGhlIG1vdXNlIG1vdmVkCiAgICAgICAgIC8vIGFsbCB0aGUgd2F5IG91dCBv
ZiB0aGF0IHZpZXcuIEJ1dCB3ZSBoYXZlIHRvIGFjY291bnQgZm9yIHNjcm9sbGluZywgYmVjYXVz
ZQotICAgICAgICAvLyBraHRtbCBkb2Vzbid0IHVuZGVyc3RhbmQgb3VyIGNsaXBwaW5nLgorICAg
ICAgICAvLyBXZWJDb3JlIGRvZXNuJ3QgdW5kZXJzdGFuZCBvdXIgY2xpcHBpbmcuCiAgICAgICAg
IE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtbW1tsYXN0SGl0VmlldyBfZnJhbWVdIGZyYW1lVmlld10g
X3Njcm9sbFZpZXddIGRvY3VtZW50VmlzaWJsZVJlY3RdOwogICAgICAgICBmbG9hdCB5U2Nyb2xs
ID0gdmlzaWJsZVJlY3Qub3JpZ2luLnk7CiAgICAgICAgIGZsb2F0IHhTY3JvbGwgPSB2aXNpYmxl
UmVjdC5vcmlnaW4ueDsKIAotICAgICAgICBldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRo
VHlwZTpOU01vdXNlTW92ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjpOU01h
a2VQb2ludCgtMSAtIHhTY3JvbGwsIC0xIC0geVNjcm9sbCApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9kaWZpZXJGbGFnc10K
LSAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVy
OltbdmlldyB3aW5kb3ddIHdpbmRvd051bWJlcl0KLSAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50XSBjb250ZXh0XQotICAgICAgICAgICAgICAgICAg
ICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAgICAgICBO
U0V2ZW50ICpldmVudCA9IFtOU0V2ZW50IG1vdXNlRXZlbnRXaXRoVHlwZTpOU01vdXNlTW92ZWQK
KyAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0xIC0geFNjcm9sbCwgLTEgLSB5U2Ny
b2xsKQorICAgICAgICAgICAgbW9kaWZpZXJGbGFnczpbW05TQXBwIGN1cnJlbnRFdmVudF0gbW9k
aWZpZXJGbGFnc10KKyAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJbnRlcnZhbFNp
bmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgIHdpbmRvd051bWJlcjpbW3ZpZXcgd2luZG93
XSB3aW5kb3dOdW1iZXJdCisgICAgICAgICAgICBjb250ZXh0OltbTlNBcHAgY3VycmVudEV2ZW50
XSBjb250ZXh0XQorICAgICAgICAgICAgZXZlbnROdW1iZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1
cmU6MF07CiAgICAgICAgIGlmIChGcmFtZSogbGFzdEhpdENvcmVGcmFtZSA9IGNvcmUoW2xhc3RI
aXRWaWV3IF9mcmFtZV0pKQogICAgICAgICAgICAgbGFzdEhpdENvcmVGcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwogICAgIH0KQEAgLTE3NjksNyArMTc2Nyw3IEBAIHN0
YXRpYyB2b2lkIF91cGRhdGVNb3VzZW92ZXJUaW1lckNhbGxiYWMKICAgICByZXR1cm4gW1tzZWxm
IF93ZWJWaWV3XSBzbWFydEluc2VydERlbGV0ZUVuYWJsZWRdICYmIFtbcGFzdGVib2FyZCB0eXBl
c10gY29udGFpbnNPYmplY3Q6V2ViU21hcnRQYXN0ZVBib2FyZFR5cGVdOwogfQogCi0tICh2b2lk
KV9zdGFydEF1dG9zY3JvbGxUaW1lcjogKE5TRXZlbnQgKil0cmlnZ2VyRXZlbnQKKy0gKHZvaWQp
X3N0YXJ0QXV0b3Njcm9sbFRpbWVyOihOU0V2ZW50ICopdHJpZ2dlckV2ZW50CiB7CiAgICAgaWYg
KF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXIgPT0gbmlsKSB7CiAgICAgICAgIF9wcml2YXRlLT5h
dXRvc2Nyb2xsVGltZXIgPSBbW05TVGltZXIgc2NoZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFs
OkFVVE9TQ1JPTExfSU5URVJWQUwKQEAgLTMwNzYsNyArMzA3NCw3IEBAIHN0YXRpYyB2b2lkIF91
cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUKICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURv
d25FdmVudCA9IFlFUzsKICAgICBwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJD
b250ZXh0TWVudSgpOwogICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRG93bihl
dmVudCk7Ci0gICAgQk9PTCBoYW5kbGVkRXZlbnQgPSBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAgICBC
T09MIGhhbmRsZWRFdmVudCA9IGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0
TWVudUV2ZW50KGV2ZW50KTsKICAgICBfcHJpdmF0ZS0+aGFuZGxpbmdNb3VzZURvd25FdmVudCA9
IE5POwogCiAgICAgaWYgKCFoYW5kbGVkRXZlbnQpCkBAIC0zMzY4LDEyICszMzY2LDEzIEBAIHN0
YXRpYyB2b2lkIF91cGRhdGVGb2N1c2VkQW5kQWN0aXZlU3RhdGUKICAgICBXZWJIVE1MVmlldyAq
aGl0SFRNTFZpZXcgPSBbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltzZWxmIGNsYXNzXV0gPyAoV2Vi
SFRNTFZpZXcgKiloaXRWaWV3IDogbmlsOwogICAgIGlmIChoaXRIVE1MVmlldykgewogICAgICAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgICAgICBpZiAoW2hpdEhUTUxWaWV3IF9pc1NlbGVj
dGlvbkV2ZW50OmV2ZW50XSkKKyAgICAgICAgaWYgKFtoaXRIVE1MVmlldyBfaXNTZWxlY3Rpb25F
dmVudDpldmVudF0pIHsKICAgICAgICAgICAgIGlmIChGcmFtZSogY29yZUZyYW1lID0gY29yZShb
aGl0SFRNTFZpZXcgX2ZyYW1lXSkpIHsKICAgICAgICAgICAgICAgICBbaGl0SFRNTFZpZXcgX3Nl
dE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JlRnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5ldmVudE1heVN0YXJ0RHJhZyhldmVudCk7CiAgICAgICAgICAg
ICAgICAgW2hpdEhUTUxWaWV3IF9zZXRNb3VzZURvd25FdmVudDpuaWxdOwogICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiBb
aGl0VmlldyBzaG91bGREZWxheVdpbmRvd09yZGVyaW5nRm9yRXZlbnQ6ZXZlbnRdOwpJbmRleDog
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlVJRGVsZWdhdGVQcml2YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlVJRGVsZWdhdGVQcml2YXRlLmgJKHJldmlzaW9uIDQ0MzEz
KQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlVJRGVsZWdhdGVQcml2YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNiw0ICsxMjYsMTMgQEAgZW51bSB7IAogCiAtIChCT09MKXdlYlZpZXc6KFdl
YlZpZXcgKilzZW5kZXIgZnJhbWU6KFdlYkZyYW1lICopZnJhbWUgcmVxdWVzdEdlb2xvY2F0aW9u
UGVybWlzc2lvbjooV2ViR2VvbG9jYXRpb24gKilnZW9sb2NhdGlvbiBzZWN1cml0eU9yaWdpbjoo
V2ViU2VjdXJpdHlPcmlnaW4gKilvcmlnaW47CiAKKy8qIQorICAgIEBtZXRob2Qgd2ViVmlldzpw
cmludEZyYW1lOgorICAgIEBhYnN0cmFjdCBJbmZvcm1zIHRoYXQgYSBXZWJGcmFtZSBuZWVkcyB0
byBiZSBwcmludGVkCisgICAgQHBhcmFtIHdlYlZpZXcgVGhlIFdlYlZpZXcgc2VuZGluZyB0aGUg
ZGVsZWdhdGUgbWV0aG9kCisgICAgQHBhcmFtIGZyYW1lVmlldyBUaGUgV2ViRnJhbWUgbmVlZGlu
ZyB0byBiZSBwcmludGVkCisgICAgQGRpc2N1c3Npb24gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdo
ZW4gYSBzY3JpcHQgb3IgdXNlciByZXF1ZXN0cyB0aGUgcGFnZSB0byBiZSBwcmludGVkLgorKi8K
Ky0gKHZvaWQpd2ViVmlldzooV2ViVmlldyAqKXNlbmRlciBwcmludEZyYW1lOihXZWJGcmFtZSAq
KWZyYW1lOworCiBAZW5kCkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkocmV2aXNpb24gNDQzMTMp
CisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtODcs
NiArODcsNyBAQAogI2ltcG9ydCAiV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgiCiAjaW1wb3J0ICJX
ZWJTY3JpcHREZWJ1Z0RlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJTeXN0ZW1JbnRlcmZhY2UuaCIK
KyNpbXBvcnQgIldlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViVGV4
dEl0ZXJhdG9yLmgiCiAjaW1wb3J0ICJXZWJVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJVSURl
bGVnYXRlUHJpdmF0ZS5oIgpAQCAtMTUzLDYgKzE1NCwyNiBAQAogI2ltcG9ydCA8V2ViS2l0L1dl
YkRhc2hib2FyZFJlZ2lvbi5oPgogI2VuZGlmCiAKK0BjbGFzcyBOU1RleHRJbnB1dENvbnRleHQ7
CisKK0BpbnRlcmZhY2UgTlNSZXNwb25kZXIgKFdlYk5TUmVzcG9uZGVyRGV0YWlscykKKy0gKE5T
VGV4dElucHV0Q29udGV4dCAqKWlucHV0Q29udGV4dDsKK0BlbmQKKworQGludGVyZmFjZSBOU1Nw
ZWxsQ2hlY2tlciAoV2ViTlNTcGVsbENoZWNrZXJEZXRhaWxzKQorLSAodm9pZClfcHJlZmxpZ2h0
Q2hvc2VuU3BlbGxTZXJ2ZXI7CitAZW5kCisKK0BpbnRlcmZhY2UgTlNWaWV3IChXZWJOU1ZpZXdE
ZXRhaWxzKQorLSAoTlNWaWV3ICopX2hpdFRlc3Q6KE5TUG9pbnQgKilhUG9pbnQgZHJhZ1R5cGVz
OihOU1NldCAqKXR5cGVzOworLSAodm9pZClfYXV0b3Njcm9sbEZvckRyYWdnaW5nSW5mbzooaWQp
ZHJhZ0luZm8gdGltZURlbHRhOihOU1RpbWVJbnRlcnZhbClyZXBlYXREZWx0YTsKKy0gKEJPT0wp
X3Nob3VsZEF1dG9zY3JvbGxGb3JEcmFnZ2luZ0luZm86KGlkKWRyYWdJbmZvOworQGVuZAorCitA
aW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpIAorLSAoaWQpX29sZEZpcnN0
UmVzcG9uZGVyQmVmb3JlQmVjb21pbmc7CitAZW5kCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMzAyLDMyICszMjMsMTkgQEAgbWFjcm8oeWFu
a0FuZFNlbGVjdCkgXAogI2RlZmluZSBVc2luZ0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdQcm9wZXJ0
eSBAIl9pc1VzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZyIKICNlbmRpZiAgICAgICAgICAgIAog
Ci0KIHN0YXRpYyBCT09MIHNfZGlkU2V0Q2FjaGVNb2RlbDsKIHN0YXRpYyBXZWJDYWNoZU1vZGVs
IHNfY2FjaGVNb2RlbCA9IFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjsKIAogc3RhdGljIEJP
T0wgYXBwbGljYXRpb25Jc1Rlcm1pbmF0aW5nOwogc3RhdGljIGludCBwbHVnaW5EYXRhYmFzZUNs
aWVudENvdW50ID0gMDsKIAorc3RhdGljIFdlYlZpZXcgKmxhc3RNb3VzZW92ZXJWaWV3OworCiAj
aWZuZGVmIE5ERUJVRwogc3RhdGljIGNvbnN0IGNoYXIgd2ViVmlld0lzT3BlbltdID0gIkF0IGxl
YXN0IG9uZSBXZWJWaWV3IGlzIHN0aWxsIG9wZW4uIjsKICNlbmRpZgogCi1AaW50ZXJmYWNlIE5T
U3BlbGxDaGVja2VyIChBcHBLaXRTZWNyZXRzSUtub3cpCi0tICh2b2lkKV9wcmVmbGlnaHRDaG9z
ZW5TcGVsbFNlcnZlcjsKLUBlbmQKLQotQGludGVyZmFjZSBOU1ZpZXcgKEFwcEtpdFNlY3JldHNJ
S25vdykKLS0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50ICopYVBvaW50IGRyYWdUeXBlczoo
TlNTZXQgKil0eXBlczsKLS0gKHZvaWQpX2F1dG9zY3JvbGxGb3JEcmFnZ2luZ0luZm86KGlkKWRy
YWdJbmZvIHRpbWVEZWx0YTooTlNUaW1lSW50ZXJ2YWwpcmVwZWF0RGVsdGE7Ci0tIChCT09MKV9z
aG91bGRBdXRvc2Nyb2xsRm9yRHJhZ2dpbmdJbmZvOihpZClkcmFnSW5mbzsKLUBlbmQKLQotQGlu
dGVyZmFjZSBOU1dpbmRvdyAoQXBwS2l0U2VjcmV0c0lLbm93KSAKLS0gKGlkKV9vbGRGaXJzdFJl
c3BvbmRlckJlZm9yZUJlY29taW5nOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TT2JqZWN0IChWYWxp
ZGF0ZVdpdGhvdXREZWxlZ2F0ZSkKK0BpbnRlcmZhY2UgTlNPYmplY3QgKFdlYlZhbGlkYXRlV2l0
aG91dERlbGVnYXRlKQogLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERl
bGVnYXRlOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50ZXJmYWNlSXRlbT4paXRlbTsKIEBlbmQKIApA
QCAtNDIxLDcgKzQyOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIHdlYlZpZXdJc09wZW5bXSA9ICJB
dCAKICAgICBCT09MIHNob3VsZFVwZGF0ZVdoaWxlT2Zmc2NyZWVuOwogICAgIAogICAgIC8vIFdo
ZW4gdGhpcyBmbGFnIGlzIHNldCwgd2Ugd2lsbCBub3QgbWFrZSBhbnkgc3Vidmlld3MgdW5kZXJu
ZWF0aCB0aGlzIFdlYlZpZXcuICBUaGlzIG1lYW5zIG5vIFdlYkZyYW1lVmlld3MgYW5kIG5vIFdl
YkhUTUxWaWV3cy4KLSAgICBCT09MIHVzZURvY3VtZW50Vmlld3M7CisgICAgQk9PTCB1c2VzRG9j
dW1lbnRWaWV3czsKICAgICAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAg
Ly8gV2hlbiB0aGlzIGZsYWcgaXMgc2V0LCBuZXh0IHRpbWUgYSBXZWJIVE1MVmlldyBkcmF3cywg
aXQgbmVlZHMgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZSBzY3JlZW4gdXBkYXRlcwpAQCAtNDM2LDYg
KzQ0NCwxOSBAQCBzdGF0aWMgY29uc3QgY2hhciB3ZWJWaWV3SXNPcGVuW10gPSAiQXQgCiAgICAg
TlNQYXN0ZWJvYXJkICppbnNlcnRpb25QYXN0ZWJvYXJkOwogICAgICAgICAgICAgCiAgICAgTlNT
aXplIGxhc3RMYXlvdXRTaXplOworCisgICAgQk9PTCBpZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50
czsKKworICAgIE5TRXZlbnQgKm1vdXNlRG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5n
IHRoZSBldmVudC4KKyAgICBCT09MIGhhbmRsaW5nTW91c2VEb3duRXZlbnQ7CisgICAgTlNFdmVu
dCAqa2V5RG93bkV2ZW50OyAvLyBLZXB0IGFmdGVyIGhhbmRsaW5nIHRoZSBldmVudC4KKworICAg
IFdlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlciAqY29tcGxldGlvbkNvbnRyb2xsZXI7CisKKyAg
ICBOU1RpbWVyICphdXRvc2Nyb2xsVGltZXI7CisgICAgTlNFdmVudCAqYXV0b3Njcm9sbFRyaWdn
ZXJFdmVudDsKKworICAgIENGUnVuTG9vcFRpbWVyUmVmIHVwZGF0ZU1vdXNlb3ZlclRpbWVyOwog
fQogQGVuZAogCkBAIC03NTMsNyArNzc0LDcgQEAgc3RhdGljIGJvb2wgcnVubmluZ1RpZ2VyTWFp
bCgpCiAKIC0gKEJPT0wpX3VzZXNEb2N1bWVudFZpZXdzCiB7Ci0gICAgcmV0dXJuIF9wcml2YXRl
LT51c2VEb2N1bWVudFZpZXdzOworICAgIHJldHVybiBfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmll
d3M7CiB9CiAKIC0gKHZvaWQpX2NvbW1vbkluaXRpYWxpemF0aW9uV2l0aEZyYW1lTmFtZTooTlNT
dHJpbmcgKilmcmFtZU5hbWUgZ3JvdXBOYW1lOihOU1N0cmluZyAqKWdyb3VwTmFtZSB1c2VzRG9j
dW1lbnRWaWV3czooQk9PTCl1c2VzRG9jdW1lbnRWaWV3cwpAQCAtNzcyLDEwICs3OTMsMTAgQEAg
c3RhdGljIGJvb2wgcnVubmluZ1RpZ2VyTWFpbCgpCiAgICAgX3ByaXZhdGUtPm1haW5GcmFtZURv
Y3VtZW50UmVhZHkgPSBOTzsKICAgICBfcHJpdmF0ZS0+ZHJhd3NCYWNrZ3JvdW5kID0gWUVTOwog
ICAgIF9wcml2YXRlLT5iYWNrZ3JvdW5kQ29sb3IgPSBbW05TQ29sb3IgY29sb3JXaXRoRGV2aWNl
V2hpdGU6MSBhbHBoYToxXSByZXRhaW5dOwotICAgIF9wcml2YXRlLT51c2VEb2N1bWVudFZpZXdz
ID0gdXNlc0RvY3VtZW50Vmlld3M7CisgICAgX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzID0g
dXNlc0RvY3VtZW50Vmlld3M7CiAKICAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IG5pbDsK
LSAgICBpZiAoX3ByaXZhdGUtPnVzZURvY3VtZW50Vmlld3MpIHsKKyAgICBpZiAoX3ByaXZhdGUt
PnVzZXNEb2N1bWVudFZpZXdzKSB7CiAgICAgICAgIE5TUmVjdCBmID0gW3NlbGYgZnJhbWVdOwog
ICAgICAgICBmcmFtZVZpZXcgPSBbW1dlYkZyYW1lVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTog
TlNNYWtlUmVjdCgwLDAsZi5zaXplLndpZHRoLGYuc2l6ZS5oZWlnaHQpXTsKICAgICAgICAgW2Zy
YW1lVmlldyBzZXRBdXRvcmVzaXppbmdNYXNrOk5TVmlld1dpZHRoU2l6YWJsZSB8IE5TVmlld0hl
aWdodFNpemFibGVdOwpAQCAtODk5LDcgKzkyMCw3IEBAIHN0YXRpYyBib29sIHJ1bm5pbmdUaWdl
ck1haWwoKQogCiAtICh2b2lkKWRyYXdTaW5nbGVSZWN0OihOU1JlY3QpcmVjdAogewotICAgIEFT
U0VSVCghX3ByaXZhdGUtPnVzZURvY3VtZW50Vmlld3MpOworICAgIEFTU0VSVCghX3ByaXZhdGUt
PnVzZXNEb2N1bWVudFZpZXdzKTsKICAgICAKICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdy
YXBoaWNzU3RhdGVdOwogICAgIE5TUmVjdENsaXAocmVjdCk7CkBAIC05MjMsMTggKzk0NCwxOCBA
QCBzdGF0aWMgYm9vbCBydW5uaW5nVGlnZXJNYWlsKCkKIAogLSAoQk9PTClpc0ZsaXBwZWQgCiB7
Ci0gICAgcmV0dXJuIF9wcml2YXRlICYmICFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3czsKKyAg
ICByZXR1cm4gX3ByaXZhdGUgJiYgIV9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3czsKIH0KIAog
LSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgaWYgKCFOU0VxdWFsU2l6
ZXMoX3ByaXZhdGUtPmxhc3RMYXlvdXRTaXplLCBzaXplKSkgewotICAgICAgICBGcmFtZSogZnJh
bWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOworICAgICAgICBGcmFtZSogZnJhbWUgPSBbc2Vs
ZiBfbWFpbkNvcmVGcmFtZV07CiAgICAgICAgIC8vIEZJWE1FOiBWaWV3bGVzcyBXZWJLaXQgaXMg
YnJva2VuIHdpdGggU2FmYXJpIGJhbm5lcnMgKGUuZy4sIHRoZSBGaW5kIGJhbm5lcikuICBXZSds
bCBoYXZlIHRvIGZpZ3VyZSBvdXQgYSB3YXkgZm9yCiAgICAgICAgIC8vIFNhZmFyaSB0byBjb21t
dW5pY2F0ZSB0aGF0IHRoaXMgc3BhY2UgaXMgYmVpbmcgY29uc3VtZWQuICBGb3IgV2ViS2l0IHdp
dGggZG9jdW1lbnQgdmlld3MsIHRoZXJlJ3Mgbm8KICAgICAgICAgLy8gbmVlZCB0byBkbyBhbiBl
eHBsaWNpdCByZXNpemUsIHNpbmNlIFdlYkZyYW1lVmlld3MgaGF2ZSBhdXRvIHJlc2l6aW5nIHR1
cm5lZCBvbiBhbmQgd2lsbCBoYW5kbGUgY2hhbmdpbmcKICAgICAgICAgLy8gdGhlaXIgYm91bmRz
IGF1dG9tYXRpY2FsbHkuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjgzNTU3Mz4gZm9yIGRldGFpbHMu
Ci0gICAgICAgIGlmICghX3ByaXZhdGUtPnVzZURvY3VtZW50Vmlld3MpCisgICAgICAgIGlmICgh
X3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKQogICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+
cmVzaXplKEludFNpemUoc2l6ZSkpOwogICAgICAgICBmcmFtZS0+dmlldygpLT5zZXROZWVkc0xh
eW91dCgpOwogICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKQEAgLTk0NSwxOSAr
OTY2LDIxIEBAIHN0YXRpYyBib29sIHJ1bm5pbmdUaWdlck1haWwoKQogfQogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKSB8fCAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikKKwog
LSAodm9pZClfdmlld1dpbGxEcmF3SW50ZXJuYWwKIHsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3Jl
KFtzZWxmIG1haW5GcmFtZV0pOworICAgIEZyYW1lKiBmcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZy
YW1lXTsKICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnZpZXcoKSkKICAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKTsKIH0KKwogI2VuZGlmCiAKICNpZm5kZWYg
QlVJTERJTkdfT05fVElHRVIKIAogLSAodm9pZCl2aWV3V2lsbERyYXcKIHsKLSAgICBpZiAoIV9w
cml2YXRlLT51c2VEb2N1bWVudFZpZXdzKQorICAgIGlmICghX3ByaXZhdGUtPnVzZXNEb2N1bWVu
dFZpZXdzKQogICAgICAgICBbc2VsZiBfdmlld1dpbGxEcmF3SW50ZXJuYWxdOwogICAgIFtzdXBl
ciB2aWV3V2lsbERyYXddOwogfQpAQCAtOTY3LDcgKzk5MCw3IEBAIHN0YXRpYyBib29sIHJ1bm5p
bmdUaWdlck1haWwoKQogCiAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogewotICAgIGlm
IChfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cykKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1
bWVudFZpZXdzKQogICAgICAgICByZXR1cm4gW3N1cGVyIGRyYXdSZWN0OnJlY3RdOwogICAgIAog
ICAgIEFTU0VSVF9NQUlOX1RIUkVBRCgpOwpAQCAtMTE1OSw2ICsxMTgyLDkgQEAgc3RhdGljIGJv
b2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKAogICAgIGlmICghX3ByaXZhdGUgfHwgX3By
aXZhdGUtPmNsb3NlZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKGxhc3RNb3VzZW92ZXJW
aWV3ID09IHNlbGYpCisgICAgICAgIGxhc3RNb3VzZW92ZXJWaWV3ID0gbmlsOworCiAjaWZuZGVm
IE5ERUJVRwogICAgIFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyOjpjYW5jZWxNZXNzYWdlU3Vw
cHJlc3Npb24od2ViVmlld0lzT3Blbik7CiAjZW5kaWYKQEAgLTExNzAsNyArMTE5Niw3IEBAIHN0
YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChGcmFtZSogbWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVd
KSkKKyAgICBpZiAoRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXSkKICAg
ICAgICAgbWFpbkZyYW1lLT5sb2FkZXIoKS0+ZGV0YWNoRnJvbVBhcmVudCgpOwogCiAgICAgW3Nl
bGYgX3JlbW92ZUZyb21BbGxXZWJWaWV3c1NldF07CkBAIC0xOTMwLDcgKzE5NTYsNyBAQCBXZWJT
Y3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoCiAtIChOU0RpY3Rpb25hcnkgKilf
ZGFzaGJvYXJkUmVnaW9ucwogewogICAgIC8vIE9ubHkgcmV0dXJuIHJlZ2lvbnMgZnJvbSBtYWlu
IGZyYW1lLgotICAgIEZyYW1lKiBtYWluRnJhbWUgPSBjb3JlKFtzZWxmIG1haW5GcmFtZV0pOwor
ICAgIEZyYW1lKiBtYWluRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CiAgICAgaWYgKCFt
YWluRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAq
cmVnaW9ucyA9IG1haW5GcmFtZS0+ZGFzaGJvYXJkUmVnaW9uc0RpY3Rpb25hcnkoKTsKQEAgLTIw
NTAsOCArMjA3Niw3IEBAIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gK
IAogLSAodm9pZClzZXRQcm9oaWJpdHNNYWluRnJhbWVTY3JvbGxpbmc6KEJPT0wpcHJvaGliaXRz
CiB7Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7Ci0gICAg
aWYgKG1haW5GcmFtZSkKKyAgICBpZiAoRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29y
ZUZyYW1lXSkKICAgICAgICAgbWFpbkZyYW1lLT52aWV3KCktPnNldFByb2hpYml0c1Njcm9sbGlu
Zyhwcm9oaWJpdHMpOwogfQogCkBAIC0yMDYzLDE0ICsyMDg4LDEzIEBAIFdlYlNjcmlwdERlYnVn
RGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gKIAogLSAodm9pZClfc2V0SW5WaWV3U291cmNlTW9k
ZTooQk9PTClmbGFnCiB7Ci0gICAgRnJhbWUqIG1haW5GcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZy
YW1lXSk7Ci0gICAgaWYgKG1haW5GcmFtZSkKKyAgICBpZiAoRnJhbWUqIG1haW5GcmFtZSA9IFtz
ZWxmIF9tYWluQ29yZUZyYW1lXSkKICAgICAgICAgbWFpbkZyYW1lLT5zZXRJblZpZXdTb3VyY2VN
b2RlKGZsYWcpOwogfQogCiAtIChCT09MKV9pblZpZXdTb3VyY2VNb2RlCiB7Ci0gICAgRnJhbWUq
IG1haW5GcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIG1haW5GcmFt
ZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICByZXR1cm4gbWFpbkZyYW1lICYmIG1haW5G
cmFtZS0+aW5WaWV3U291cmNlTW9kZSgpOwogfQogCkBAIC0yMTEzLDEzICsyMTM3LDEzIEBAIFdl
YlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gKIAogLSAodm9pZClfYXR0YWNo
U2NyaXB0RGVidWdnZXJUb0FsbEZyYW1lcwogewotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gY29y
ZShbc2VsZiBtYWluRnJhbWVdKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVy
c2VOZXh0KCkpCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKQogICAgICAgICBb
a2l0KGZyYW1lKSBfYXR0YWNoU2NyaXB0RGVidWdnZXJdOwogfQogCiAtICh2b2lkKV9kZXRhY2hT
Y3JpcHREZWJ1Z2dlckZyb21BbGxGcmFtZXMKIHsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNv
cmUoW3NlbGYgbWFpbkZyYW1lXSk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dCgpKQorICAgIGZvciAoRnJhbWUqIGZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVd
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkKICAgICAgICAg
W2tpdChmcmFtZSkgX2RldGFjaFNjcmlwdERlYnVnZ2VyXTsKIH0KIApAQCAtMjE4Miw3ICsyMjA2
LDcgQEAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaAogICAgIEludFBv
aW50IHJlY3RTdGFydChyZWN0Lm9yaWdpbi54LCByZWN0Lm9yaWdpbi55KTsKICAgICBJbnRQb2lu
dCByZWN0RW5kKHJlY3Qub3JpZ2luLnggKyByZWN0LnNpemUud2lkdGgsIHJlY3Qub3JpZ2luLnkg
KyByZWN0LnNpemUuaGVpZ2h0KTsKICAgICAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3Jl
RnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApA
QCAtMjIxNiw3ICsyMjQwLDcgQEAgV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9u
Q2FjaAogCiAtICh2b2lkKV9leGVjdXRlQ29yZUNvbW1hbmRCeU5hbWU6KE5TU3RyaW5nICopbmFt
ZSB2YWx1ZTooTlNTdHJpbmcgKil2YWx1ZQogewotICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIG1haW5GcmFtZV0pOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNv
cmVGcmFtZV07CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBjb3Jl
RnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKG5hbWUpLmV4ZWN1dGUodmFsdWUpOwpAQCAtMjI3Myw0
MiArMjI5Nyw2IEBAIFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2gKICAg
ICByZXR1cm4gaGFuZEN1cnNvcigpLmltcGwoKTsKIH0KIAotI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKLQotLSAoQk9PTClfbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlv
bgotewotICAgIHJldHVybiBfcHJpdmF0ZS0+bmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXph
dGlvbjsKLX0KLQotLSAodm9pZClfc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlv
bjooQk9PTCluZWVkc1N5bmNocm9uaXphdGlvbgotewotICAgIF9wcml2YXRlLT5uZWVkc09uZVNo
b3REcmF3aW5nU3luY2hyb25pemF0aW9uID0gbmVlZHNTeW5jaHJvbml6YXRpb247Ci19Ci0KLS0g
KHZvaWQpX3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1lKil3
ZWJGcmFtZQotewotICAgIEJPT0wgZW50ZXJpbmcgPSBfcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFt
ZXNDb3VudCA9PSAwOwotICAgIGlmIChlbnRlcmluZykKLSAgICAgICAgW3NlbGYgd2lsbENoYW5n
ZVZhbHVlRm9yS2V5OlVzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5XTsKLSAgICAr
K19wcml2YXRlLT5hY2NlbGVyYXRlZEZyYW1lc0NvdW50OwotICAgIGlmIChlbnRlcmluZykKLSAg
ICAgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUHJvcGVydHldOwotfQotCi0tICh2b2lkKV9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWUKLXsKLSAgICBCT09MIGxlYXZpbmcgPSBfcHJp
dmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA9PSAxOwotICAgIEFTU0VSVChfcHJpdmF0ZS0+
YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA+IDApOwotICAgIAotICAgIGlmIChsZWF2aW5nKQotICAg
ICAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUHJvcGVydHldOwotICAgIC0tX3ByaXZhdGUtPmFjY2VsZXJhdGVkRnJhbWVzQ291bnQ7Ci0g
ICAgaWYgKGxlYXZpbmcpCi0gICAgICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OlVzaW5n
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5XTsKLX0KLQotI2VuZGlmICAgIAotCiAtIChC
T09MKV9pc1VzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZwogewogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKQEAgLTI3MTMsNyArMjcwMSw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2Vi
Vmlld0luaXRUaHJlYWRXb3JrYXIKIAogLSAodm9pZClhZGRXaW5kb3dPYnNlcnZlcnNGb3JXaW5k
b3c6KE5TV2luZG93ICopd2luZG93CiB7Ci0gICAgaWYgKCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRW
aWV3cyAmJiB3aW5kb3cpIHsKKyAgICBpZiAoIV9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cyAm
JiB3aW5kb3cpIHsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfd2luZG93RGlkQmVjb21lS2V5
OikKICAgICAgICAgICAgIG5hbWU6TlNXaW5kb3dEaWRCZWNvbWVLZXlOb3RpZmljYXRpb24gb2Jq
ZWN0Om5pbF07CiAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX3dpbmRvd0RpZFJlc2lnbktleTop
CkBAIC0yNzI2LDcgKzI3MTQsNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFk
V29ya2FyCiAtICh2b2lkKXJlbW92ZVdpbmRvd09ic2VydmVycwogewogICAgIE5TV2luZG93ICp3
aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwotICAgIGlmICghX3ByaXZhdGUtPnVzZURvY3VtZW50Vmll
d3MgJiYgd2luZG93KSB7CisgICAgaWYgKCFfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MgJiYg
d2luZG93KSB7CiAgICAgICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
cmVtb3ZlT2JzZXJ2ZXI6c2VsZgogICAgICAgICAgICAgbmFtZTpOU1dpbmRvd0RpZEJlY29tZUtl
eU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmCkBAIC0yNzc5LDcgKzI3NjcsNyBA
QCBzdGF0aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAKIC0gKHZvaWQpX3Vw
ZGF0ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZQogewotICAgIEFTU0VSVCghX3ByaXZhdGUtPnVzZURv
Y3VtZW50Vmlld3MpOworICAgIEFTU0VSVCghX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKTsK
ICAgICBbc2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlRm9yRnJhbWU6W3NlbGYgbWFp
bkZyYW1lXV07CiB9CiAKQEAgLTI3ODksMzAgKzI3NzcsMzAgQEAgc3RhdGljIGJvb2wgbmVlZHNX
ZWJWaWV3SW5pdFRocmVhZFdvcmthcgogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIE5TV2luZG93ICp3aW5kb3cgPSBbc2VsZiB3aW5kb3ddOwog
ICAgIEJPT0wgd2luZG93SXNLZXkgPSBbd2luZG93IGlzS2V5V2luZG93XTsKLSAgICBCT09MIHdp
bmRvd09yU2hlZXRJc0tleSA9IHdpbmRvd0lzS2V5IHx8IFtbd2luZG93IGF0dGFjaGVkU2hlZXRd
IGlzS2V5V2luZG93XTsKIAotICAgIFdlYkZyYW1lVmlldyAqbWFpbkZyYW1lVmlldyA9IFtbc2Vs
ZiBtYWluRnJhbWVdIGZyYW1lVmlld107Ci0gICAgaWQgPFdlYkRvY3VtZW50Vmlldz4gZG9jdW1l
bnRWaWV3ID0gW21haW5GcmFtZVZpZXcgZG9jdW1lbnRWaWV3XTsKLSAgICBCT09MIGRvY3VtZW50
Vmlld0lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXIgPSBbZG9jdW1lbnRWaWV3IGlzS2luZE9mQ2xh
c3M6W1dlYkhUTUxWaWV3IGNsYXNzXV0gJiYgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBf
aXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcl07Ci0gICAgICAgIAorICAgIE5TVmlldyAqY29udGVu
dFZpZXcgPSBfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MgPyAoTlNWaWV3ICopW1tzZWxmIG1h
aW5GcmFtZV0gZnJhbWVWaWV3XSA6IHNlbGY7CiAgICAgTlNSZXNwb25kZXIgKmZpcnN0UmVzcG9u
ZGVyID0gW3dpbmRvdyBmaXJzdFJlc3BvbmRlcl07Ci0gICAgaWYgKFtmaXJzdFJlc3BvbmRlciBp
c0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSAKLSAgICAgICAgJiYgWyhOU1ZpZXcgKilmaXJz
dFJlc3BvbmRlciBpc0Rlc2NlbmRhbnRPZjptYWluRnJhbWVWaWV3XSkKLSAgICAgICAgcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZSh3aW5kb3dJc0tleSAmJiAhZG9jdW1lbnRWaWV3
SXNSZXNpZ25pbmdGaXJzdFJlc3BvbmRlcik7CisgICAgaWYgKFtmaXJzdFJlc3BvbmRlciBpc0tp
bmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSAmJiBbKE5TVmlldyAqKWZpcnN0UmVzcG9uZGVyIGlz
RGVzY2VuZGFudE9mOmNvbnRlbnRWaWV3XSkgeworICAgICAgICBCT09MIGRvY3VtZW50Vmlld0lz
UmVzaWduaW5nRmlyc3RSZXNwb25kZXI7CisgICAgICAgIGlmICghX3ByaXZhdGUtPnVzZXNEb2N1
bWVudFZpZXdzKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2ViVmlldyBwcm9iYWJseSBuZWVk
cyBhICJyZXNpZ25pbmcgZmlyc3QgcmVzcG9uZGVyIiBzdGF0ZSBqdXN0IGFzIFdlYkhUTUxWaWV3
IGhhcy4KKyAgICAgICAgICAgIGRvY3VtZW50Vmlld0lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXIg
PSBOTzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlkIDxXZWJEb2N1bWVudFZpZXc+
IGRvY3VtZW50VmlldyA9IFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGRvY3VtZW50Vmll
d107CisgICAgICAgICAgICBkb2N1bWVudFZpZXdJc1Jlc2lnbmluZ0ZpcnN0UmVzcG9uZGVyID0g
W2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dICYmIFsoV2Vi
SFRNTFZpZXcgKilkb2N1bWVudFZpZXcgX2lzUmVzaWduaW5nRmlyc3RSZXNwb25kZXJdOworICAg
ICAgICB9CisgICAgICAgIF9wcml2YXRlLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0
aXZlKHdpbmRvd0lzS2V5ICYmICFkb2N1bWVudFZpZXdJc1Jlc2lnbmluZ0ZpcnN0UmVzcG9uZGVy
KTsKKyAgICB9CiAKLSAgICBGcmFtZSogZm9jdXNlZEZyYW1lID0gcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0
Rm9jdXNlZChmcmFtZSA9PSBmb2N1c2VkRnJhbWUgJiYgd2luZG93T3JTaGVldElzS2V5KTsKKyAg
ICBCT09MIHdpbmRvd09yU2hlZXRJc0tleSA9IHdpbmRvd0lzS2V5IHx8IFtbd2luZG93IGF0dGFj
aGVkU2hlZXRdIGlzS2V5V2luZG93XTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldEZvY3Vz
ZWQoZnJhbWUgPT0gX3ByaXZhdGUtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKSAmJiB3aW5kb3dPclNoZWV0SXNLZXkpOwogfQogCiAtICh2b2lkKV93aW5kb3dE
aWRCZWNvbWVLZXk6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0gICAgQVNTRVJU
KCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyk7CisgICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNl
c0RvY3VtZW50Vmlld3MpOwogICAgIE5TV2luZG93ICprZXlXaW5kb3cgPSBbbm90aWZpY2F0aW9u
IG9iamVjdF07CiAgICAgaWYgKGtleVdpbmRvdyA9PSBbc2VsZiB3aW5kb3ddIHx8IGtleVdpbmRv
dyA9PSBbW3NlbGYgd2luZG93XSBhdHRhY2hlZFNoZWV0XSkKICAgICAgICAgW3NlbGYgX3VwZGF0
ZUZvY3VzZWRBbmRBY3RpdmVTdGF0ZV07CkBAIC0yODIwLDcgKzI4MDgsNyBAQCBzdGF0aWMgYm9v
bCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAKIC0gKHZvaWQpX3dpbmRvd0RpZFJlc2ln
bktleTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KIHsKLSAgICBBU1NFUlQoIV9wcml2
YXRlLT51c2VEb2N1bWVudFZpZXdzKTsKKyAgICBBU1NFUlQoIV9wcml2YXRlLT51c2VzRG9jdW1l
bnRWaWV3cyk7CiAgICAgTlNXaW5kb3cgKmZvcm1lcktleVdpbmRvdyA9IFtub3RpZmljYXRpb24g
b2JqZWN0XTsKICAgICBpZiAoZm9ybWVyS2V5V2luZG93ID09IFtzZWxmIHdpbmRvd10gfHwgZm9y
bWVyS2V5V2luZG93ID09IFtbc2VsZiB3aW5kb3ddIGF0dGFjaGVkU2hlZXRdKQogICAgICAgICBb
c2VsZiBfdXBkYXRlRm9jdXNlZEFuZEFjdGl2ZVN0YXRlXTsKQEAgLTI4MjgsNyArMjgxNiw3IEBA
IHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKIAogLSAodm9pZClfd2lu
ZG93V2lsbE9yZGVyT25TY3JlZW46KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCiB7Ci0g
ICAgQVNTRVJUKCFfcHJpdmF0ZS0+dXNlRG9jdW1lbnRWaWV3cyk7CisgICAgQVNTRVJUKCFfcHJp
dmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpOwogICAgIGlmICghW3NlbGYgc2hvdWxkVXBkYXRlV2hp
bGVPZmZzY3JlZW5dKQogICAgICAgICBbc2VsZiBzZXROZWVkc0Rpc3BsYXk6WUVTXTsKIH0KQEAg
LTI5NDksMjEgKzI5MzcsMjEgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdv
cmthcgogLSAoV2ViRnJhbWUgKiltYWluRnJhbWUKIHsKICAgICAvLyBUaGlzIGNhbiBiZSBjYWxs
ZWQgaW4gaW5pdGlhbGl6YXRpb24sIGJlZm9yZSBfcHJpdmF0ZSBoYXMgYmVlbiBzZXQgdXAgKDM0
NjU2MTMpCi0gICAgaWYgKCFfcHJpdmF0ZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBpZiAo
IV9wcml2YXRlLT5wYWdlKQorICAgIGlmICghX3ByaXZhdGUgfHwgIV9wcml2YXRlLT5wYWdlKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPm1haW5G
cmFtZSgpKTsKIH0KIAogLSAoV2ViRnJhbWUgKilzZWxlY3RlZEZyYW1lCiB7Ci0gICAgLy8gSWYg
dGhlIGZpcnN0IHJlc3BvbmRlciBpcyBhIHZpZXcgaW4gb3VyIHRyZWUsIHdlIGdldCB0aGUgZnJh
bWUgY29udGFpbmluZyB0aGUgZmlyc3QgcmVzcG9uZGVyLgotICAgIC8vIFRoaXMgaXMgZmFzdGVy
IHRoYW4gc2VhcmNoaW5nIHRoZSBmcmFtZSBoaWVyYXJjaHksIGFuZCB3aWxsIGdpdmUgdXMgYSBy
ZXN1bHQgZXZlbiBpbiB0aGUgY2FzZQotICAgIC8vIHdoZXJlIHRoZSBmb2N1c2VkIGZyYW1lIGRv
ZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBhIHNlbGVjdGlvbi4KLSAgICBXZWJGcmFtZSAqZm9jdXNl
ZEZyYW1lID0gW3NlbGYgX2ZvY3VzZWRGcmFtZV07Ci0gICAgaWYgKGZvY3VzZWRGcmFtZSkKLSAg
ICAgICAgcmV0dXJuIGZvY3VzZWRGcmFtZTsKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVu
dFZpZXdzKSB7CisgICAgICAgIC8vIElmIHRoZSBmaXJzdCByZXNwb25kZXIgaXMgYSB2aWV3IGlu
IG91ciB0cmVlLCB3ZSBnZXQgdGhlIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGZpcnN0IHJlc3BvbmRl
ci4KKyAgICAgICAgLy8gVGhpcyBpcyBmYXN0ZXIgdGhhbiBzZWFyY2hpbmcgdGhlIGZyYW1lIGhp
ZXJhcmNoeSwgYW5kIHdpbGwgZ2l2ZSB1cyBhIHJlc3VsdCBldmVuIGluIHRoZSBjYXNlCisgICAg
ICAgIC8vIHdoZXJlIHRoZSBmb2N1c2VkIGZyYW1lIGRvZXNuJ3QgYWN0dWFsbHkgY29udGFpbiBh
IHNlbGVjdGlvbi4KKyAgICAgICAgV2ViRnJhbWUgKmZvY3VzZWRGcmFtZSA9IFtzZWxmIF9mb2N1
c2VkRnJhbWVdOworICAgICAgICBpZiAoZm9jdXNlZEZyYW1lKQorICAgICAgICAgICAgcmV0dXJu
IGZvY3VzZWRGcmFtZTsKKyAgICB9CiAgICAgCiAgICAgLy8gSWYgdGhlIGZpcnN0IHJlc3BvbmRl
ciBpcyBvdXRzaWRlIG9mIG91ciB2aWV3IHRyZWUsIHdlIHNlYXJjaCBmb3IgYSBmcmFtZSBjb250
YWluaW5nIGEgc2VsZWN0aW9uLgogICAgIC8vIFRoZXJlIHNob3VsZCBiZSBhdCBtb3N0IG9ubHkg
b25lIG9mIHRoZXNlLgpAQCAtMjk3OSw3ICsyOTY3LDcgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJW
aWV3SW5pdFRocmVhZFdvcmthcgogICAgIHJldHVybiBraXQoX3ByaXZhdGUtPnBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpKTsKIH0KIAotLSAodm9pZClzZXRNYWludGFpbnNCYWNrRm9yd2FyZExpc3Q6
IChCT09MKWZsYWcKKy0gKHZvaWQpc2V0TWFpbnRhaW5zQmFja0ZvcndhcmRMaXN0OihCT09MKWZs
YWcKIHsKICAgICBpZiAoIV9wcml2YXRlLT5wYWdlKQogICAgICAgICByZXR1cm47CkBAIC0zMDMx
LDcgKzMwMTksNyBAQCBzdGF0aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0VGhyZWFkV29ya2FyCiAg
ICAgCiAgICAgLy8gRklYTUU6IGl0IHdvdWxkIGJlIG5pY2UgdG8gcmV3b3JrIHRoaXMgY29kZSBz
byB0aGF0IF9wcml2YXRlLT56b29tTXVsdGlwbGllciBkb2Vzbid0IGV4aXN0IGFuZCBjYWxsZXJz
CiAgICAgLy8gYWxsIGFjY2VzcyBfcHJpdmF0ZS0+cGFnZS0+c2V0dGluZ3MoKS4KLSAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogY29yZUZy
YW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmIChjb3JlRnJhbWUpCiAgICAgICAg
IGNvcmVGcmFtZS0+c2V0Wm9vbUZhY3RvcihtLCBpc1RleHRPbmx5KTsKIH0KQEAgLTMxNzgsNyAr
MzE2Niw3IEBAIHN0YXRpYyBib29sIG5lZWRzV2ViVmlld0luaXRUaHJlYWRXb3JrYXIKICAgICBO
U1N0cmluZyAqb2xkRW5jb2RpbmcgPSBbc2VsZiBjdXN0b21UZXh0RW5jb2RpbmdOYW1lXTsKICAg
ICBpZiAoZW5jb2RpbmcgPT0gb2xkRW5jb2RpbmcgfHwgW2VuY29kaW5nIGlzRXF1YWxUb1N0cmlu
ZzpvbGRFbmNvZGluZ10pCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoRnJhbWUqIG1haW5GcmFt
ZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSkpCisgICAgaWYgKEZyYW1lKiBtYWluRnJhbWUgPSBb
c2VsZiBfbWFpbkNvcmVGcmFtZV0pCiAgICAgICAgIG1haW5GcmFtZS0+bG9hZGVyKCktPnJlbG9h
ZFdpdGhPdmVycmlkZUVuY29kaW5nKGVuY29kaW5nKTsKIH0KIApAQCAtMzIxOSw3ICszMjA3LDcg
QEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcgogCiAtIChXZWJTY3Jp
cHRPYmplY3QgKil3aW5kb3dTY3JpcHRPYmplY3QKIHsKLSAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21h
aW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwog
ICAgIHJldHVybiBjb3JlRnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTY3JpcHRPYmplY3QoKTsKQEAg
LTMyMzgsMTcgKzMyMjYsMjEgQEAgc3RhdGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdv
cmthcgogICAgIGlmIChob3N0V2luZG93ID09IF9wcml2YXRlLT5ob3N0V2luZG93KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVd
KTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7IGZyYW1lID0gZnJh
bWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpCi0gICAgICAgIFtbW2tpdChmcmFt
ZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIHZpZXdXaWxsTW92ZVRvSG9zdFdpbmRvdzpob3N0
V2luZG93XTsKKyAgICBGcmFtZSogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwor
ICAgIGlmIChfcHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBjb3JlRnJhbWU7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZl
cnNlTmV4dChjb3JlRnJhbWUpKQorICAgICAgICAgICAgW1tba2l0KGZyYW1lKSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld10gdmlld1dpbGxNb3ZlVG9Ib3N0V2luZG93Omhvc3RXaW5kb3ddOworICAg
IH0KICAgICBpZiAoX3ByaXZhdGUtPmhvc3RXaW5kb3cgJiYgW3NlbGYgd2luZG93XSAhPSBfcHJp
dmF0ZS0+aG9zdFdpbmRvdykKICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0
Q2VudGVyXSByZW1vdmVPYnNlcnZlcjpzZWxmIG5hbWU6TlNXaW5kb3dXaWxsQ2xvc2VOb3RpZmlj
YXRpb24gb2JqZWN0Ol9wcml2YXRlLT5ob3N0V2luZG93XTsKICAgICBpZiAoaG9zdFdpbmRvdykK
ICAgICAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZl
cjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihfd2luZG93V2lsbENsb3NlOikgbmFtZTpOU1dpbmRv
d1dpbGxDbG9zZU5vdGlmaWNhdGlvbiBvYmplY3Q6aG9zdFdpbmRvd107CiAgICAgW19wcml2YXRl
LT5ob3N0V2luZG93IHJlbGVhc2VdOwogICAgIF9wcml2YXRlLT5ob3N0V2luZG93ID0gW2hvc3RX
aW5kb3cgcmV0YWluXTsKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGNvcmVGcmFtZTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJhdmVyc2VOZXh0KGNvcmVGcmFtZSkpCi0gICAgICAg
IFtbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIHZpZXdEaWRNb3ZlVG9Ib3N0
V2luZG93XTsKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gY29yZUZyYW1lOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoY29yZUZyYW1lKSkKKyAgICAgICAgICAgIFtbW2tpdChmcmFtZSkg
ZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIHZpZXdEaWRNb3ZlVG9Ib3N0V2luZG93XTsKKyAgICB9
CiB9CiAKIC0gKE5TV2luZG93ICopaG9zdFdpbmRvdwpAQCAtMzI4NCw3ICszMjc2LDcgQEAgc3Rh
dGljIGJvb2wgbmVlZHNXZWJWaWV3SW5pdFRocmVhZFdvcmthcgogICAgIHJldHVybiBbc2VsZiBf
ZWxlbWVudEF0V2luZG93UG9pbnQ6W3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxd
XTsKIH0KIAotLy8gVGhlIGZvbGxvd2luZyAyIGludGVybmFsIE5TVmlldyBtZXRob2RzIGFyZSBj
YWxsZWQgb24gdGhlIGRyYWcgZGVzdGluYXRpb24gYnkgbWFrZSBzY3JvbGxpbmcgd2hpbGUgZHJh
Z2dpbmcgd29yay4KKy8vIFRoZSBmb2xsb3dpbmcgMiBpbnRlcm5hbCBOU1ZpZXcgbWV0aG9kcyBh
cmUgY2FsbGVkIG9uIHRoZSBkcmFnIGRlc3RpbmF0aW9uIHRvIG1ha2Ugc2Nyb2xsaW5nIHdoaWxl
IGRyYWdnaW5nIHdvcmsuCiAvLyBTY3JvbGxpbmcgd2hpbGUgZHJhZ2dpbmcgd2lsbCBvbmx5IHdv
cmsgaWYgdGhlIGRyYWcgZGVzdGluYXRpb24gaXMgaW4gYSBzY3JvbGwgdmlldy4gVGhlIFdlYlZp
ZXcgaXMgdGhlIGRyYWcgZGVzdGluYXRpb24uIAogLy8gV2hlbiBkcmFnZ2luZyB0byBhIFdlYlZp
ZXcsIHRoZSBkb2N1bWVudCBzdWJ2aWV3IHNob3VsZCBzY3JvbGwsIGJ1dCBpdCBkb2Vzbid0IGJl
Y2F1c2UgaXQgaXMgbm90IHRoZSBkcmFnIGRlc3RpbmF0aW9uLiAKIC8vIEZvcndhcmQgdGhlc2Ug
Y2FsbHMgdG8gdGhlIGRvY3VtZW50IHN1YnZpZXcgdG8gbWFrZSBpdHMgc2Nyb2xsIHZpZXcgc2Ny
b2xsLgpAQCAtMzM1Myw4NyArMzM0NSw5OCBAQCBzdGF0aWMgYm9vbCBuZWVkc1dlYlZpZXdJbml0
VGhyZWFkV29ya2FyCiAgICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCktPnBl
cmZvcm1EcmFnKCZkcmFnRGF0YSk7CiB9CiAKLS0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50
ICopYVBvaW50IGRyYWdUeXBlczooTlNTZXQgKil0eXBlcworLSAoTlNWaWV3ICopX2hpdFRlc3Q6
KE5TUG9pbnQgKilwb2ludCBkcmFnVHlwZXM6KE5TU2V0ICopdHlwZXMKIHsKLSAgICBOU1ZpZXcg
KmhpdFZpZXcgPSBbc3VwZXIgX2hpdFRlc3Q6YVBvaW50IGRyYWdUeXBlczp0eXBlc107Ci0gICAg
aWYgKCFoaXRWaWV3ICYmIFtbc2VsZiBzdXBlcnZpZXddIG1vdXNlOiphUG9pbnQgaW5SZWN0Oltz
ZWxmIGZyYW1lXV0pIHsKKyAgICBOU1ZpZXcgKmhpdFZpZXcgPSBbc3VwZXIgX2hpdFRlc3Q6cG9p
bnQgZHJhZ1R5cGVzOnR5cGVzXTsKKyAgICBpZiAoIWhpdFZpZXcgJiYgW1tzZWxmIHN1cGVydmll
d10gbW91c2U6KnBvaW50IGluUmVjdDpbc2VsZiBmcmFtZV1dKQogICAgICAgICByZXR1cm4gc2Vs
ZjsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gaGl0VmlldzsKLSAgICB9CisgICAgcmV0
dXJuIGhpdFZpZXc7CiB9CiAKIC0gKEJPT0wpYWNjZXB0c0ZpcnN0UmVzcG9uZGVyCiB7Ci0gICAg
cmV0dXJuIFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGFjY2VwdHNGaXJzdFJlc3BvbmRl
cl07CisgICAgaWYgKF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykKKyAgICAgICAgcmV0dXJu
IFtbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddIGFjY2VwdHNGaXJzdFJlc3BvbmRlcl07CisK
KyAgICAvLyBGSVhNRSAoVmlld2xlc3MpOiBOZWVkIG1vcmUgY29kZSBmcm9tIFdlYkhUTUxWaWV3
IGhlcmUuCisgICAgcmV0dXJuIFlFUzsKIH0KIAogLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRl
cgogewotICAgIGlmIChfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlcikgewotICAgICAg
ICAvLyBGaXggZm9yIHVucmVwcm8gaW5maW5pdGUgcmVjdXJzaW9uIHJlcG9ydGVkIGluIHJhZGFy
IDQ0NDgxODEuIElmIHdlIGhpdCB0aGlzIGFzc2VydCBvbgotICAgICAgICAvLyBhIGRlYnVnIGJ1
aWxkLCB3ZSBzaG91bGQgZmlndXJlIG91dCB3aGF0IGNhdXNlcyB0aGUgcHJvYmxlbSBhbmQgZG8g
YSBiZXR0ZXIgZml4LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIE5POwotICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIHdvcmtzIHRvZ2V0aGVyIHdpdGggc2V0
TmV4dEtleVZpZXcgdG8gc3BsaWNlIHRoZSBXZWJWaWV3IGludG8KLSAgICAvLyB0aGUga2V5IGxv
b3Agc2ltaWxhciB0byB0aGUgd2F5IE5TU2Nyb2xsVmlldyBkb2VzIHRoaXMuIE5vdGUgdGhhdAot
ICAgIC8vIFdlYkZyYW1lVmlldyBoYXMgdmVyeSBzaW1pbGFyIGNvZGUuCi0gICAgTlNXaW5kb3cg
KndpbmRvdyA9IFtzZWxmIHdpbmRvd107Ci0gICAgV2ViRnJhbWVWaWV3ICptYWluRnJhbWVWaWV3
ID0gW1tzZWxmIG1haW5GcmFtZV0gZnJhbWVWaWV3XTsKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNE
b2N1bWVudFZpZXdzKSB7CisgICAgICAgIGlmIChfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3Bv
bmRlcikgeworICAgICAgICAgICAgLy8gRml4IGZvciB1bnJlcHJvIGluZmluaXRlIHJlY3Vyc2lv
biByZXBvcnRlZCBpbiBSYWRhciA0NDQ4MTgxLiBJZiB3ZSBoaXQgdGhpcyBhc3NlcnQgb24KKyAg
ICAgICAgICAgIC8vIGEgZGVidWcgYnVpbGQsIHdlIHNob3VsZCBmaWd1cmUgb3V0IHdoYXQgY2F1
c2VzIHRoZSBwcm9ibGVtIGFuZCBkbyBhIGJldHRlciBmaXguCisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBOTzsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gVGhpcyB3b3JrcyB0b2dldGhlciB3aXRoIHNldE5leHRLZXlWaWV3IHRv
IHNwbGljZSB0aGUgV2ViVmlldyBpbnRvCisgICAgICAgIC8vIHRoZSBrZXkgbG9vcCBzaW1pbGFy
IHRvIHRoZSB3YXkgTlNTY3JvbGxWaWV3IGRvZXMgdGhpcy4gTm90ZSB0aGF0CisgICAgICAgIC8v
IFdlYkZyYW1lVmlldyBoYXMgdmVyeSBzaW1pbGFyIGNvZGUuCisgICAgICAgIE5TV2luZG93ICp3
aW5kb3cgPSBbc2VsZiB3aW5kb3ddOworICAgICAgICBXZWJGcmFtZVZpZXcgKm1haW5GcmFtZVZp
ZXcgPSBbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddOworCisgICAgICAgIE5TUmVzcG9uZGVy
ICpwcmV2aW91c0ZpcnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX29sZEZpcnN0UmVzcG9u
ZGVyQmVmb3JlQmVjb21pbmddOworICAgICAgICBCT09MIGZyb21PdXRzaWRlID0gIVtwcmV2aW91
c0ZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dIHx8ICghWyhOU1Zp
ZXcgKilwcmV2aW91c0ZpcnN0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOnNlbGZdICYmIHByZXZp
b3VzRmlyc3RSZXNwb25kZXIgIT0gc2VsZik7CisKKyAgICAgICAgaWYgKFt3aW5kb3cga2V5Vmll
d1NlbGVjdGlvbkRpcmVjdGlvbl0gPT0gTlNTZWxlY3RpbmdQcmV2aW91cykgeworICAgICAgICAg
ICAgTlNWaWV3ICpwcmV2aW91c1ZhbGlkS2V5VmlldyA9IFtzZWxmIHByZXZpb3VzVmFsaWRLZXlW
aWV3XTsKKyAgICAgICAgICAgIGlmIChwcmV2aW91c1ZhbGlkS2V5VmlldyAhPSBzZWxmICYmIHBy
ZXZpb3VzVmFsaWRLZXlWaWV3ICE9IG1haW5GcmFtZVZpZXcpIHsKKyAgICAgICAgICAgICAgICBf
cHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKKyAgICAgICAgICAgICAgICBf
cHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlID0gZnJvbU91dHNpZGU7
CisgICAgICAgICAgICAgICAgW3dpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6cHJldmlvdXNWYWxp
ZEtleVZpZXddOworICAgICAgICAgICAgICAgIF9wcml2YXRlLT5iZWNvbWluZ0ZpcnN0UmVzcG9u
ZGVyRnJvbU91dHNpZGUgPSBOTzsKKyAgICAgICAgICAgICAgICBfcHJpdmF0ZS0+YmVjb21pbmdG
aXJzdFJlc3BvbmRlciA9IE5POworICAgICAgICAgICAgICAgIHJldHVybiBZRVM7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gTk87CisgICAgICAgIH0KIAotICAgIE5TUmVzcG9u
ZGVyICpwcmV2aW91c0ZpcnN0UmVzcG9uZGVyID0gW1tzZWxmIHdpbmRvd10gX29sZEZpcnN0UmVz
cG9uZGVyQmVmb3JlQmVjb21pbmddOwotICAgIEJPT0wgZnJvbU91dHNpZGUgPSAhW3ByZXZpb3Vz
Rmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0gfHwgKCFbKE5TVmll
dyAqKXByZXZpb3VzRmlyc3RSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6c2VsZl0gJiYgcHJldmlv
dXNGaXJzdFJlc3BvbmRlciAhPSBzZWxmKTsKLSAgICAKLSAgICBpZiAoW3dpbmRvdyBrZXlWaWV3
U2VsZWN0aW9uRGlyZWN0aW9uXSA9PSBOU1NlbGVjdGluZ1ByZXZpb3VzKSB7Ci0gICAgICAgIE5T
VmlldyAqcHJldmlvdXNWYWxpZEtleVZpZXcgPSBbc2VsZiBwcmV2aW91c1ZhbGlkS2V5Vmlld107
Ci0gICAgICAgIGlmICgocHJldmlvdXNWYWxpZEtleVZpZXcgIT0gc2VsZikgJiYgKHByZXZpb3Vz
VmFsaWRLZXlWaWV3ICE9IG1haW5GcmFtZVZpZXcpKSB7CisgICAgICAgIGlmIChbbWFpbkZyYW1l
VmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKSB7CiAgICAgICAgICAgICBfcHJpdmF0ZS0+YmVj
b21pbmdGaXJzdFJlc3BvbmRlciA9IFlFUzsKICAgICAgICAgICAgIF9wcml2YXRlLT5iZWNvbWlu
Z0ZpcnN0UmVzcG9uZGVyRnJvbU91dHNpZGUgPSBmcm9tT3V0c2lkZTsKLSAgICAgICAgICAgIFt3
aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnByZXZpb3VzVmFsaWRLZXlWaWV3XTsKKyAgICAgICAg
ICAgIFt3aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOm1haW5GcmFtZVZpZXddOwogICAgICAgICAg
ICAgX3ByaXZhdGUtPmJlY29taW5nRmlyc3RSZXNwb25kZXJGcm9tT3V0c2lkZSA9IE5POwogICAg
ICAgICAgICAgX3ByaXZhdGUtPmJlY29taW5nRmlyc3RSZXNwb25kZXIgPSBOTzsKICAgICAgICAg
ICAgIHJldHVybiBZRVM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gTk87
Ci0gICAgICAgIH0KKyAgICAgICAgfSAKKworICAgICAgICByZXR1cm4gTk87CiAgICAgfQotICAg
IAotICAgIGlmIChbbWFpbkZyYW1lVmlldyBhY2NlcHRzRmlyc3RSZXNwb25kZXJdKSB7Ci0gICAg
ICAgIF9wcml2YXRlLT5iZWNvbWluZ0ZpcnN0UmVzcG9uZGVyID0gWUVTOwotICAgICAgICBfcHJp
dmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlID0gZnJvbU91dHNpZGU7Ci0g
ICAgICAgIFt3aW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOm1haW5GcmFtZVZpZXddOwotICAgICAg
ICBfcHJpdmF0ZS0+YmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlID0gTk87Ci0gICAg
ICAgIF9wcml2YXRlLT5iZWNvbWluZ0ZpcnN0UmVzcG9uZGVyID0gTk87Ci0gICAgICAgIHJldHVy
biBZRVM7Ci0gICAgfSAKLSAgICAKLSAgICByZXR1cm4gTk87CisKKyAgICAvLyBGSVhNRSAoVmll
d2xlc3MpOiBOZWVkIG1vcmUgY29kZSBmcm9tIFdlYkhUTUxWaWV3IGhlcmUuCisgICAgcmV0dXJu
IFlFUzsKIH0KIAogLSAoTlNWaWV3ICopX3dlYmNvcmVfZWZmZWN0aXZlRmlyc3RSZXNwb25kZXIK
IHsKLSAgICBXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtbc2VsZiBtYWluRnJhbWVdIGZyYW1l
Vmlld107Ci0gICAgcmV0dXJuIGZyYW1lVmlldyA/IFtmcmFtZVZpZXcgX3dlYmNvcmVfZWZmZWN0
aXZlRmlyc3RSZXNwb25kZXJdIDogW3N1cGVyIF93ZWJjb3JlX2VmZmVjdGl2ZUZpcnN0UmVzcG9u
ZGVyXTsKKyAgICBpZiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7
CisgICAgICAgIGlmIChXZWJGcmFtZVZpZXcgKmZyYW1lVmlldyA9IFtbc2VsZiBtYWluRnJhbWVd
IGZyYW1lVmlld10pCisgICAgICAgICAgICByZXR1cm4gW2ZyYW1lVmlldyBfd2ViY29yZV9lZmZl
Y3RpdmVGaXJzdFJlc3BvbmRlcl07CisgICAgfQorICAgIHJldHVybiBbc3VwZXIgX3dlYmNvcmVf
ZWZmZWN0aXZlRmlyc3RSZXNwb25kZXJdOwogfQogCi0tICh2b2lkKXNldE5leHRLZXlWaWV3OihO
U1ZpZXcgKilhVmlldworLSAodm9pZClzZXROZXh0S2V5VmlldzooTlNWaWV3ICopdmlldwogewot
ICAgIC8vIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBiZWNvbWVGaXJzdFJlc3BvbmRlciB0byBz
cGxpY2UgdGhlIFdlYlZpZXcgaW50bwotICAgIC8vIHRoZSBrZXkgbG9vcCBzaW1pbGFyIHRvIHRo
ZSB3YXkgTlNTY3JvbGxWaWV3IGRvZXMgdGhpcy4gTm90ZSB0aGF0Ci0gICAgLy8gV2ViRnJhbWVW
aWV3IGhhcyB2ZXJ5IHNpbWlsYXIgY29kZS4KLSAgICBXZWJGcmFtZVZpZXcgKm1haW5GcmFtZVZp
ZXcgPSBbW3NlbGYgbWFpbkZyYW1lXSBmcmFtZVZpZXddOwotICAgIGlmIChtYWluRnJhbWVWaWV3
ICE9IG5pbCkgewotICAgICAgICBbbWFpbkZyYW1lVmlldyBzZXROZXh0S2V5VmlldzphVmlld107
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgW3N1cGVyIHNldE5leHRLZXlWaWV3OmFWaWV3XTsKKyAg
ICBpZiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAg
IC8vIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBiZWNvbWVGaXJzdFJlc3BvbmRlciB0byBzcGxp
Y2UgdGhlIFdlYlZpZXcgaW50bworICAgICAgICAvLyB0aGUga2V5IGxvb3Agc2ltaWxhciB0byB0
aGUgd2F5IE5TU2Nyb2xsVmlldyBkb2VzIHRoaXMuIE5vdGUgdGhhdAorICAgICAgICAvLyBXZWJG
cmFtZVZpZXcgaGFzIHNpbWlsYXIgY29kZS4KKyAgICAgICAgaWYgKFdlYkZyYW1lVmlldyAqbWFp
bkZyYW1lVmlldyA9IFtbc2VsZiBtYWluRnJhbWVdIGZyYW1lVmlld10pIHsKKyAgICAgICAgICAg
IFttYWluRnJhbWVWaWV3IHNldE5leHRLZXlWaWV3OnZpZXddOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgfQorCisgICAgW3N1cGVyIHNldE5leHRLZXlWaWV3OnZpZXddOwog
fQogCi1zdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdlYkZyYW1lICpjdXJyLCBCT09M
IGZvcndhcmQsIEJPT0wgd3JhcEZsYWcpCitzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1l
KFdlYkZyYW1lICpmcmFtZSwgQk9PTCBmb3J3YXJkLCBCT09MIHdyYXBGbGFnKQogewotICAgIEZy
YW1lKiBjb3JlRnJhbWUgPSBjb3JlKGN1cnIpOworICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3Jl
KGZyYW1lKTsKICAgICByZXR1cm4ga2l0KGZvcndhcmQKICAgICAgICAgPyBjb3JlRnJhbWUtPnRy
ZWUoKS0+dHJhdmVyc2VOZXh0V2l0aFdyYXAod3JhcEZsYWcpCiAgICAgICAgIDogY29yZUZyYW1l
LT50cmVlKCktPnRyYXZlcnNlUHJldmlvdXNXaXRoV3JhcCh3cmFwRmxhZykpOwpAQCAtMzQ3NCw3
ICszNDc3LDYgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogewog
ICAgIGlmICghX3ByaXZhdGUtPnBhZ2UpCiAgICAgICAgIHJldHVybiAwLjA7Ci0KICAgICByZXR1
cm4gX3ByaXZhdGUtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiB9CiAK
QEAgLTM2NDIsNiArMzY0NCw4NyBAQCBzdGF0aWMgV2ViRnJhbWUgKmluY3JlbWVudEZyYW1lKFdl
YkZyYW1lCiAgICAgcmV0dXJuIFtwcmV2aW91c1ZpZXcgcHJldmlvdXNWYWxpZEtleVZpZXddOwog
fQogCistICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gRklYTUUg
KFZpZXdsZXNzKTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIFdlYkhUTUxWaWV3
LCB3aGljaCBuZWVkcyB0bworICAgIC8vIGRvIHRoZSBzYW1lIHdvcmsgaW4gdGhlIHVzZXNEb2N1
bWVudFZpZXdzIGNhc2UuIFdlIGRvbid0IHdhbnQgdG8gbWFpbnRhaW4gdHdvCisgICAgLy8gZHVw
bGljYXRlIGNvcGllcyBvZiB0aGlzIG1ldGhvZC4KKworICAgIGlmIChfcHJpdmF0ZS0+dXNlc0Rv
Y3VtZW50Vmlld3MpIHsKKyAgICAgICAgW3N1cGVyIG1vdXNlRG93bjpldmVudF07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3Bv
bmRpbmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAg
ICAvLyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRh
aW5pbmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHBy
ZXZlbnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtp
dCBjb2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBSZXRhaW5Q
dHI8V2ViVmlldz4gcHJvdGVjdG9yID0gc2VsZjsKKyAgICBpZiAoW1tzZWxmIGlucHV0Q29udGV4
dF0gd2FudHNUb0hhbmRsZU1vdXNlRXZlbnRzXSAmJiBbW3NlbGYgaW5wdXRDb250ZXh0XSBoYW5k
bGVNb3VzZUV2ZW50OmV2ZW50XSkKKyAgICAgICAgcmV0dXJuOworCisgICAgX3ByaXZhdGUtPmhh
bmRsaW5nTW91c2VEb3duRXZlbnQgPSBZRVM7CisKKyAgICAvLyBSZWNvcmQgdGhlIG1vdXNlIGRv
d24gcG9zaXRpb24gc28gd2UgY2FuIGRldGVybWluZSBkcmFnIGh5c3RlcmVzaXMuCisgICAgW3Nl
bGYgX3NldE1vdXNlRG93bkV2ZW50OmV2ZW50XTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJy
ZW50SW5wdXRNYW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOwor
ICAgIGlmIChbY3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYm
IFtjdXJyZW50SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICBn
b3RvIGRvbmU7CisKKyAgICBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250cm9sbGVyIGVuZFJldmVy
dGluZ0NoYW5nZTpOTyBtb3ZlTGVmdDpOT107CisKKyAgICAvLyBJZiB0aGUgd2ViIHBhZ2UgaGFu
ZGxlcyB0aGUgY29udGV4dCBtZW51IGV2ZW50IGFuZCBtZW51Rm9yRXZlbnQ6IHJldHVybnMgbmls
LCB3ZSdsbCBnZXQgY29udHJvbCBjbGljayBldmVudHMgaGVyZS4KKyAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHBhc3MgdGhlbSBhbG9uZyB0byBLSFRNTCBhIHNlY29uZCB0aW1lLgorICAgIGlmICgh
KFtldmVudCBtb2RpZmllckZsYWdzXSAmIE5TQ29udHJvbEtleU1hc2spKSB7CisgICAgICAgIF9w
cml2YXRlLT5pZ25vcmluZ01vdXNlRHJhZ2dlZEV2ZW50cyA9IE5POworCisgICAgICAgIC8vIERv
bid0IGRvIGFueSBtb3VzZW92ZXIgd2hpbGUgdGhlIG1vdXNlIGlzIGRvd24uCisgICAgICAgIFtz
ZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07CisKKyAgICAgICAgLy8gTGV0IFdlYkNv
cmUgZ2V0IGEgY2hhbmNlIHRvIGRlYWwgd2l0aCB0aGUgZXZlbnQuIFRoaXMgd2lsbCBjYWxsIGJh
Y2sgdG8gdXMKKyAgICAgICAgLy8gdG8gc3RhcnQgdGhlIGF1dG9zY3JvbGwgdGltZXIgaWYgYXBw
cm9wcmlhdGUuCisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFt
ZV0pCisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlRG93bihldmVudCk7
CisgICAgfQorCitkb25lOgorICAgIF9wcml2YXRlLT5oYW5kbGluZ01vdXNlRG93bkV2ZW50ID0g
Tk87Cit9CisKKy0gKHZvaWQpbW91c2VVcDooTlNFdmVudCAqKWV2ZW50Cit7CisgICAgLy8gRklY
TUUgKFZpZXdsZXNzKTogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIFdlYkhUTUxW
aWV3LCB3aGljaCBuZWVkcyB0bworICAgIC8vIGRvIHRoZSBzYW1lIHdvcmsgaW4gdGhlIHVzZXNE
b2N1bWVudFZpZXdzIGNhc2UuIFdlIGRvbid0IHdhbnQgdG8gbWFpbnRhaW4gdHdvCisgICAgLy8g
ZHVwbGljYXRlIGNvcGllcyBvZiB0aGlzIG1ldGhvZC4KKworICAgIGlmIChfcHJpdmF0ZS0+dXNl
c0RvY3VtZW50Vmlld3MpIHsKKyAgICAgICAgW3N1cGVyIG1vdXNlVXA6ZXZlbnRdOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlcmUncyBhIGNoYW5jZSB0aGF0IHJlc3BvbmRp
bmcgdG8gdGhpcyBldmVudCB3aWxsIHJ1biBhIG5lc3RlZCBldmVudCBsb29wLCBhbmQKKyAgICAv
LyBmZXRjaGluZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5p
bmcgYW5kIHRoZW4gYXV0b3JlbGVhc2luZworICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZl
bnRzIHRoYXQgZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBj
b2RlLgorICAgIFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07CisKKyAgICBbc2VsZiBfc2V0
TW91c2VEb3duRXZlbnQ6bmlsXTsKKworICAgIE5TSW5wdXRNYW5hZ2VyICpjdXJyZW50SW5wdXRN
YW5hZ2VyID0gW05TSW5wdXRNYW5hZ2VyIGN1cnJlbnRJbnB1dE1hbmFnZXJdOworICAgIGlmIChb
Y3VycmVudElucHV0TWFuYWdlciB3YW50c1RvSGFuZGxlTW91c2VFdmVudHNdICYmIFtjdXJyZW50
SW5wdXRNYW5hZ2VyIGhhbmRsZU1vdXNlRXZlbnQ6ZXZlbnRdKQorICAgICAgICByZXR1cm47CisK
KyAgICBbc2VsZiByZXRhaW5dOworCisgICAgW3NlbGYgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwor
ICAgIGlmIChGcmFtZSogZnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV0pCisgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VVcChldmVudCk7CisgICAgW3NlbGYgX3VwZGF0ZU1v
dXNlb3ZlcldpdGhGYWtlRXZlbnRdOworCisgICAgW3NlbGYgcmVsZWFzZV07Cit9CisKIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdlYlZpZXcgKFdlYklCQWN0aW9ucykKQEAgLTM5MzYsMTUgKzQw
MTksMjEgQEAgc3RhdGljIFdlYkZyYW1lICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgX3ByaXZhdGUtPmhvdmVyRmVlZGJhY2tTdXNwZW5kZWQgPSBu
ZXdWYWx1ZTsKLSAgICBpZCA8V2ViRG9jdW1lbnRWaWV3PiBkb2N1bWVudFZpZXcgPSBbW1tzZWxm
IG1haW5GcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwotICAgIC8vIEZJWE1FOiBpbiBh
IHBlcmZlY3Qgd29ybGQgd2UnZCBkbyB0aGlzIGluIGEgZ2VuZXJhbCB3YXkgdGhhdCB3b3JrZWQg
d2l0aCBhbnkgZG9jdW1lbnQgdmlldywKLSAgICAvLyBzdWNoIGFzIGJ5IGNhbGxpbmcgYSBwcm90
b2NvbCBtZXRob2Qgb3IgdXNpbmcgcmVzcG9uZHNUb1NlbGVjdG9yIG9yIHNlbmRpbmcgYSBub3Rp
ZmljYXRpb24uCi0gICAgLy8gQnV0IHVudGlsIHRoZXJlIGlzIGFueSBuZWVkIGZvciB0aGVzZSBt
b3JlIGdlbmVyYWwgc29sdXRpb25zLCB3ZSdsbCBqdXN0IGhhcmR3aXJlIGl0IHRvIHdvcmsKLSAg
ICAvLyB3aXRoIFdlYkhUTUxWaWV3LgotICAgIC8vIE5vdGUgdGhhdCBfaG92ZXJGZWVkYmFja1N1
c3BlbmRlZENoYW5nZWQgbmVlZHMgdG8gYmUgY2FsbGVkIG9ubHkgb24gdGhlIG1haW4gV2ViSFRN
TFZpZXcsIG5vdAotICAgIC8vIG9uIGVhY2ggc3ViZnJhbWUgc2VwYXJhdGVseS4KLSAgICBpZiAo
W2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAg
ICBbKFdlYkhUTUxWaWV3ICopZG9jdW1lbnRWaWV3IF9ob3ZlckZlZWRiYWNrU3VzcGVuZGVkQ2hh
bmdlZF07CisKKyAgICBpZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAg
IGlkIDxXZWJEb2N1bWVudFZpZXc+IGRvY3VtZW50VmlldyA9IFtbW3NlbGYgbWFpbkZyYW1lXSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107CisgICAgICAgIC8vIEZJWE1FOiBpbiBhIHBlcmZlY3Qg
d29ybGQgd2UnZCBkbyB0aGlzIGluIGEgZ2VuZXJhbCB3YXkgdGhhdCB3b3JrZWQgd2l0aCBhbnkg
ZG9jdW1lbnQgdmlldywKKyAgICAgICAgLy8gc3VjaCBhcyBieSBjYWxsaW5nIGEgcHJvdG9jb2wg
bWV0aG9kIG9yIHVzaW5nIHJlc3BvbmRzVG9TZWxlY3RvciBvciBzZW5kaW5nIGEgbm90aWZpY2F0
aW9uLgorICAgICAgICAvLyBCdXQgdW50aWwgdGhlcmUgaXMgYW55IG5lZWQgZm9yIHRoZXNlIG1v
cmUgZ2VuZXJhbCBzb2x1dGlvbnMsIHdlJ2xsIGp1c3QgaGFyZHdpcmUgaXQgdG8gd29yaworICAg
ICAgICAvLyB3aXRoIFdlYkhUTUxWaWV3LgorICAgICAgICAvLyBOb3RlIHRoYXQgX2hvdmVyRmVl
ZGJhY2tTdXNwZW5kZWRDaGFuZ2VkIG5lZWRzIHRvIGJlIGNhbGxlZCBvbmx5IG9uIHRoZSBtYWlu
IFdlYkhUTUxWaWV3LCBub3QKKyAgICAgICAgLy8gb24gZWFjaCBzdWJmcmFtZSBzZXBhcmF0ZWx5
LgorICAgICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBj
bGFzc11dKQorICAgICAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3VtZW50VmlldyBfaG92ZXJG
ZWVkYmFja1N1c3BlbmRlZENoYW5nZWRdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
W3NlbGYgX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnRdOwogfQogCiAtIChCT09MKWlzSG92
ZXJGZWVkYmFja1N1c3BlbmRlZApAQCAtNDAwMiw3ICs0MDkxLDcgQEAgc3RhdGljIFdlYkZyYW1l
ICppbmNyZW1lbnRGcmFtZShXZWJGcmFtZQogCiAtIChCT09MKXNob3VsZENsb3NlCiB7Ci0gICAg
RnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGNv
cmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAg
ICAgICAgcmV0dXJuIFlFUzsKICAgICByZXR1cm4gY29yZUZyYW1lLT5zaG91bGRDbG9zZSgpOwpA
QCAtNDA2NSw3ICs0MTU0LDcgQEAgc3RhdGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVz
Y0ZybwogCiAtIChOU0FwcGxlRXZlbnREZXNjcmlwdG9yICopYWVEZXNjQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdEZyb21TdHJpbmc6KE5TU3RyaW5nICopc2NyaXB0CiB7Ci0gICAgRnJhbWUqIGNvcmVG
cmFtZSA9IGNvcmUoW3NlbGYgbWFpbkZyYW1lXSk7CisgICAgRnJhbWUqIGNvcmVGcmFtZSA9IFtz
ZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICBpZiAoIWNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKQEAgLTQ0NDAsNyArNDUyOSw3
IEBAIHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8KICAgICAgICAgX3By
aXZhdGUtPmVkaXRhYmxlID0gZmxhZzsKICAgICAgICAgaWYgKCFfcHJpdmF0ZS0+dGFiS2V5Q3lj
bGVzVGhyb3VnaEVsZW1lbnRzQ2hhbmdlZCAmJiBfcHJpdmF0ZS0+cGFnZSkKICAgICAgICAgICAg
IF9wcml2YXRlLT5wYWdlLT5zZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoIWZsYWcpOwot
ICAgICAgICBGcmFtZSogbWFpbkZyYW1lID0gY29yZShbc2VsZiBtYWluRnJhbWVdKTsKKyAgICAg
ICAgRnJhbWUqIG1haW5GcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICAgICAgaWYg
KG1haW5GcmFtZSkgewogICAgICAgICAgICAgaWYgKGZsYWcpIHsKICAgICAgICAgICAgICAgICBt
YWluRnJhbWUtPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwpAQCAtNTExNyw2ICs1
MjA2LDcgQEAgc3RhdGljIFdlYkZyYW1lVmlldyAqY29udGFpbmluZ0ZyYW1lVmlldwogewogICAg
IGlmIChfcHJpdmF0ZS0+Y2xvc2VkKQogICAgICAgICByZXR1cm4gbmlsOworICAgIEFTU0VSVChf
cHJpdmF0ZS0+dXNlc0RvY3VtZW50Vmlld3MpOwogICAgIE5TVmlldyAqdmlldyA9IFtzZWxmIGhp
dFRlc3Q6W1tzZWxmIHN1cGVydmlld10gY29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF1d
OwogICAgIGlmICghW3ZpZXcgaXNEZXNjZW5kYW50T2Y6W1tzZWxmIG1haW5GcmFtZV0gZnJhbWVW
aWV3XV0pCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC01MzYyLDYgKzU0NTIsMTg0IEBAIHN0YXRp
YyBXZWJGcmFtZVZpZXcgKmNvbnRhaW5pbmdGcmFtZVZpZXcKICAgICBfcHJpdmF0ZS0+aW5zZXJ0
aW9uUGFzdGVib2FyZCA9IHBhc3RlYm9hcmQ7CiB9CiAKKy0gKHZvaWQpX3NldE1vdXNlRG93bkV2
ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBBU1NFUlQoIWV2ZW50IHx8IFtldmVudCB0eXBl
XSA9PSBOU0xlZnRNb3VzZURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TUmlnaHRNb3VzZURvd24g
fHwgW2V2ZW50IHR5cGVdID09IE5TT3RoZXJNb3VzZURvd24pOworCisgICAgaWYgKGV2ZW50ID09
IF9wcml2YXRlLT5tb3VzZURvd25FdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgW2V2ZW50
IHJldGFpbl07CisgICAgW19wcml2YXRlLT5tb3VzZURvd25FdmVudCByZWxlYXNlXTsKKyAgICBf
cHJpdmF0ZS0+bW91c2VEb3duRXZlbnQgPSBldmVudDsKK30KKworLSAodm9pZClfY2FuY2VsVXBk
YXRlTW91c2VvdmVyVGltZXIKK3sKKyAgICBpZiAoX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRp
bWVyKSB7CisgICAgICAgIENGUnVuTG9vcFRpbWVySW52YWxpZGF0ZShfcHJpdmF0ZS0+dXBkYXRl
TW91c2VvdmVyVGltZXIpOworICAgICAgICBDRlJlbGVhc2UoX3ByaXZhdGUtPnVwZGF0ZU1vdXNl
b3ZlclRpbWVyKTsKKyAgICAgICAgX3ByaXZhdGUtPnVwZGF0ZU1vdXNlb3ZlclRpbWVyID0gTlVM
TDsKKyAgICB9Cit9CisKKy0gKHZvaWQpX3N0b3BBdXRvc2Nyb2xsVGltZXIKK3sKKyAgICBOU1Rp
bWVyICp0aW1lciA9IF9wcml2YXRlLT5hdXRvc2Nyb2xsVGltZXI7CisgICAgX3ByaXZhdGUtPmF1
dG9zY3JvbGxUaW1lciA9IG5pbDsKKyAgICBbX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZl
bnQgcmVsZWFzZV07CisgICAgX3ByaXZhdGUtPmF1dG9zY3JvbGxUcmlnZ2VyRXZlbnQgPSBuaWw7
CisgICAgW3RpbWVyIGludmFsaWRhdGVdOworICAgIFt0aW1lciByZWxlYXNlXTsKK30KKworKyAo
dm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEV2ZW50OihOU0V2ZW50ICopZXZlbnQKK3sKKyAgICBX
ZWJWaWV3ICpvbGRWaWV3ID0gbGFzdE1vdXNlb3ZlclZpZXc7CisKKyAgICBsYXN0TW91c2VvdmVy
VmlldyA9IG5pbDsKKworICAgIE5TVmlldyAqY29udGVudFZpZXcgPSBbW2V2ZW50IHdpbmRvd10g
Y29udGVudFZpZXddOworICAgIE5TUG9pbnQgbG9jYXRpb25Gb3JIaXRUZXN0ID0gW1tjb250ZW50
VmlldyBzdXBlcnZpZXddIGNvbnZlcnRQb2ludDpbZXZlbnQgbG9jYXRpb25JbldpbmRvd10gZnJv
bVZpZXc6bmlsXTsKKyAgICBmb3IgKE5TVmlldyAqaGl0VmlldyA9IFtjb250ZW50VmlldyBoaXRU
ZXN0OmxvY2F0aW9uRm9ySGl0VGVzdF07IGhpdFZpZXc7IGhpdFZpZXcgPSBbaGl0VmlldyBzdXBl
cnZpZXddKSB7CisgICAgICAgIGlmIChbaGl0VmlldyBpc0tpbmRPZkNsYXNzOltXZWJWaWV3IGNs
YXNzXV0pIHsKKyAgICAgICAgICAgIGxhc3RNb3VzZW92ZXJWaWV3ID0gc3RhdGljX2Nhc3Q8V2Vi
VmlldyAqPihoaXRWaWV3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGxhc3RNb3VzZW92ZXJWaWV3ICYmIGxhc3RNb3VzZW92ZXJWaWV3LT5fcHJpdmF0
ZS0+aG92ZXJGZWVkYmFja1N1c3BlbmRlZCkKKyAgICAgICAgbGFzdE1vdXNlb3ZlclZpZXcgPSBu
aWw7CisKKyAgICBpZiAobGFzdE1vdXNlb3ZlclZpZXcgIT0gb2xkVmlldykgeworICAgICAgICBp
ZiAoRnJhbWUqIG9sZENvcmVGcmFtZSA9IFtvbGRWaWV3IF9tYWluQ29yZUZyYW1lXSkgeworICAg
ICAgICAgICAgTlNFdmVudCAqb2xkVmlld0V2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhU
eXBlOk5TTW91c2VNb3ZlZAorICAgICAgICAgICAgICAgIGxvY2F0aW9uOk5TTWFrZVBvaW50KC0x
LCAtMSkKKyAgICAgICAgICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50
XSBtb2RpZmllckZsYWdzXQorICAgICAgICAgICAgICAgIHRpbWVzdGFtcDpbTlNEYXRlIHRpbWVJ
bnRlcnZhbFNpbmNlUmVmZXJlbmNlRGF0ZV0KKyAgICAgICAgICAgICAgICB3aW5kb3dOdW1iZXI6
W1tvbGRWaWV3IHdpbmRvd10gd2luZG93TnVtYmVyXQorICAgICAgICAgICAgICAgIGNvbnRleHQ6
W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRleHRdCisgICAgICAgICAgICAgICAgZXZlbnROdW1i
ZXI6MCBjbGlja0NvdW50OjAgcHJlc3N1cmU6MF07CisgICAgICAgICAgICBvbGRDb3JlRnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKG9sZFZpZXdFdmVudCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIWxhc3RNb3VzZW92ZXJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW2xhc3RNb3VzZW92ZXJWaWV3IG1haW5GcmFt
ZV0pKQorICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50
KTsKK30KKworLSAodm9pZClfdXBkYXRlTW91c2VvdmVyV2l0aEZha2VFdmVudAoreworICAgIFtz
ZWxmIF9jYW5jZWxVcGRhdGVNb3VzZW92ZXJUaW1lcl07CisgICAgCisgICAgTlNFdmVudCAqZmFr
ZUV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5TTW91c2VNb3ZlZAorICAgICAg
ICBsb2NhdGlvbjpbW3NlbGYgd2luZG93XSBjb252ZXJ0U2NyZWVuVG9CYXNlOltOU0V2ZW50IG1v
dXNlTG9jYXRpb25dXQorICAgICAgICBtb2RpZmllckZsYWdzOltbTlNBcHAgY3VycmVudEV2ZW50
XSBtb2RpZmllckZsYWdzXQorICAgICAgICB0aW1lc3RhbXA6W05TRGF0ZSB0aW1lSW50ZXJ2YWxT
aW5jZVJlZmVyZW5jZURhdGVdCisgICAgICAgIHdpbmRvd051bWJlcjpbW3NlbGYgd2luZG93XSB3
aW5kb3dOdW1iZXJdCisgICAgICAgIGNvbnRleHQ6W1tOU0FwcCBjdXJyZW50RXZlbnRdIGNvbnRl
eHRdCisgICAgICAgIGV2ZW50TnVtYmVyOjAgY2xpY2tDb3VudDowIHByZXNzdXJlOjBdOworICAg
IAorICAgIFtbc2VsZiBjbGFzc10gX3VwZGF0ZU1vdXNlb3ZlcldpdGhFdmVudDpmYWtlRXZlbnRd
OworfQorCistICh2b2lkKV9zZXRUb29sVGlwOihOU1N0cmluZyAqKXRvb2xUaXAKK3sKKyAgICBp
ZiAoX3ByaXZhdGUtPnVzZXNEb2N1bWVudFZpZXdzKSB7CisgICAgICAgIGlkIGRvY3VtZW50Vmll
dyA9IFtbW3NlbGYgc2VsZWN0ZWRGcmFtZV0gZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOworICAg
ICAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
KQorICAgICAgICAgICAgW2RvY3VtZW50VmlldyBfc2V0VG9vbFRpcDp0b29sVGlwXTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FIChWaWV3bGVzcyk6IENvZGUgdG8gaGFu
ZGxlIHRvb2x0aXBzIG5lZWRzIHRvIG1vdmUgaW50byBXZWJWaWV3LgorfQorCistICh2b2lkKV9z
ZWxlY3Rpb25DaGFuZ2VkCit7CisgICAgaWYgKF9wcml2YXRlLT51c2VzRG9jdW1lbnRWaWV3cykg
eworICAgICAgICBpZCBkb2N1bWVudFZpZXcgPSBbW1tzZWxmIHNlbGVjdGVkRnJhbWVdIGZyYW1l
Vmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICAgICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKKyAgICAgICAgICAgIFtkb2N1bWVudFZpZXcgX3Nl
bGVjdGlvbkNoYW5nZWRdOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUUg
KFZpZXdsZXNzKTogV2UnbGwgbmVlZCBjb2RlIGhlcmUuCit9CisKKy0gKEZyYW1lKilfbWFpbkNv
cmVGcmFtZQoreworICAgIHJldHVybiAoX3ByaXZhdGUgJiYgX3ByaXZhdGUtPnBhZ2UpID8gX3By
aXZhdGUtPnBhZ2UtPm1haW5GcmFtZSgpIDogMDsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworLSAoQk9PTClfbmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlv
bgoreworICAgIHJldHVybiBfcHJpdmF0ZS0+bmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXph
dGlvbjsKK30KKworLSAodm9pZClfc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlv
bjooQk9PTCluZWVkc1N5bmNocm9uaXphdGlvbgoreworICAgIF9wcml2YXRlLT5uZWVkc09uZVNo
b3REcmF3aW5nU3luY2hyb25pemF0aW9uID0gbmVlZHNTeW5jaHJvbml6YXRpb247Cit9CisKKy0g
KHZvaWQpX3N0YXJ0ZWRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yRnJhbWU6KFdlYkZyYW1lKil3
ZWJGcmFtZQoreworICAgIEJPT0wgZW50ZXJpbmcgPSBfcHJpdmF0ZS0+YWNjZWxlcmF0ZWRGcmFt
ZXNDb3VudCA9PSAwOworICAgIGlmIChlbnRlcmluZykKKyAgICAgICAgW3NlbGYgd2lsbENoYW5n
ZVZhbHVlRm9yS2V5OlVzaW5nQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5XTsKKyAgICAr
K19wcml2YXRlLT5hY2NlbGVyYXRlZEZyYW1lc0NvdW50OworICAgIGlmIChlbnRlcmluZykKKyAg
ICAgICAgW3NlbGYgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUHJvcGVydHldOworfQorCistICh2b2lkKV9zdG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWUKK3sKKyAgICBCT09MIGxlYXZpbmcgPSBfcHJp
dmF0ZS0+YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA9PSAxOworICAgIEFTU0VSVChfcHJpdmF0ZS0+
YWNjZWxlcmF0ZWRGcmFtZXNDb3VudCA+IDApOworICAgIAorICAgIGlmIChsZWF2aW5nKQorICAg
ICAgICBbc2VsZiB3aWxsQ2hhbmdlVmFsdWVGb3JLZXk6VXNpbmdBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUHJvcGVydHldOworICAgIC0tX3ByaXZhdGUtPmFjY2VsZXJhdGVkRnJhbWVzQ291bnQ7Cisg
ICAgaWYgKGxlYXZpbmcpCisgICAgICAgIFtzZWxmIGRpZENoYW5nZVZhbHVlRm9yS2V5OlVzaW5n
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ1Byb3BlcnR5XTsKK30KKworc3RhdGljIHZvaWQgdmlld1Vw
ZGF0ZVJ1bkxvb3BPYnNlcnZlckNhbGxCYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxv
b3BBY3Rpdml0eSwgdm9pZCogaW5mbykKK3sKKyAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVpbnRl
cnByZXRfY2FzdDxXZWJWaWV3Kj4oaW5mbyk7CisgICAgW3dlYlZpZXcgX3ZpZXdXaWxsRHJhd0lu
dGVybmFsXTsKKyAgICBbd2ViVmlldy0+X3ByaXZhdGUgX2NsZWFyVmlld1VwZGF0ZVJ1bkxvb3BP
YnNlcnZlcl07Cit9CisKKy0gKHZvaWQpX3NjaGVkdWxlVmlld1VwZGF0ZQoreworICAgIC8vIFRo
aXMgaXMgdGhlIGNvbXBvc2l0aW5nIGVxdWl2YWxlbnQgb2YgLXZpZXdXaWxsRHJhdy4gV2hlbiB3
ZSBrbm93IHRoYXQgY29tcG9zaXRpbmcgbGF5ZXJzCisgICAgLy8gaGF2ZSBiZWVuIHNldCBhcyBu
ZWVkaW5nIGRpc3BsYXksIHdlIGhhdmUgdG8gbWFrZSBhbiBlYWdlciBsYXlvdXQgaGFwcGVuIGJl
Zm9yZSB0aGUKKyAgICAvLyBsYXllcnMgZ2V0IGNvbW1pdHRlZCBieSBDb3JlQW5pbWF0aW9uLgor
CisgICAgaWYgKF9wcml2YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9ic2VydmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBSdW4gYmVmb3JlIEFwcEtpdCBkb2VzIGl0cyB3aW5kb3cgdXBkYXRl
LgorICAgIGNvbnN0IENGSW5kZXggcnVuTG9vcE9yZGVyID0gTlNEaXNwbGF5V2luZG93UnVuTG9v
cE9yZGVyaW5nIC0gMTsKKworICAgIC8vIFRoZSBXZWJWaWV3IGFsd2F5cyBvdXRsaXZlcyB0aGUg
b2JzZXJ2ZXIsIHNvIG5vIG5lZWQgdG8gcmV0YWluL3JlbGVhc2UuCisgICAgQ0ZSdW5Mb29wT2Jz
ZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIDAsIDAsIDAgfTsKKworICAgIF9wcml2
YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9ic2VydmVyID0gQ0ZSdW5Mb29wT2JzZXJ2ZXJDcmVhdGUo
TlVMTCwKKyAgICAgICAga0NGUnVuTG9vcEJlZm9yZVdhaXRpbmcgfCBrQ0ZSdW5Mb29wRXhpdCwg
RkFMU0UgLyogb25lIHNob3QgKi8sCisgICAgICAgIHJ1bkxvb3BPcmRlciwgdmlld1VwZGF0ZVJ1
bkxvb3BPYnNlcnZlckNhbGxCYWNrLCAmY29udGV4dCk7CisKKyAgICBDRlJ1bkxvb3BBZGRPYnNl
cnZlcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIF9wcml2YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9i
c2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOworfQorCisjZW5kaWYKKwogQGVuZAogCiAv
LyBXZSB1c2UgdGhlc2UgZnVuY3Rpb25zIHRvIGNhbGwgdGhlIGRlbGVnYXRlcyBhbmQgYmxvY2sg
ZXhjZXB0aW9ucy4gVGhlc2UgZnVuY3Rpb25zIGFyZQpAQCAtNTg5MywzNyArNjE2MSw2IEBAIEJP
T0wgQ2FsbEZvcm1EZWxlZ2F0ZVJldHVybmluZ0Jvb2xlYW4oQk8KICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotc3RhdGljIHZvaWQgdmll
d1VwZGF0ZVJ1bkxvb3BPYnNlcnZlckNhbGxCYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1
bkxvb3BBY3Rpdml0eSwgdm9pZCogaW5mbykKLXsKLSAgICBXZWJWaWV3KiB3ZWJWaWV3ID0gcmVp
bnRlcnByZXRfY2FzdDxXZWJWaWV3Kj4oaW5mbyk7Ci0gICAgW3dlYlZpZXcgX3ZpZXdXaWxsRHJh
d0ludGVybmFsXTsKLSAgICBbd2ViVmlldy0+X3ByaXZhdGUgX2NsZWFyVmlld1VwZGF0ZVJ1bkxv
b3BPYnNlcnZlcl07Ci19Ci0KLS0gKHZvaWQpX3NjaGVkdWxlVmlld1VwZGF0ZQotewotICAgIC8v
IFRoaXMgaXMgdGhlIGNvbXBvc2l0aW5nIGVxdWl2YWxlbnQgb2YgLXZpZXdXaWxsRHJhdy4gV2hl
biB3ZSBrbm93IHRoYXQgY29tcG9zaXRpbmcgbGF5ZXJzCi0gICAgLy8gaGF2ZSBiZWVuIHNldCBh
cyBuZWVkaW5nIGRpc3BsYXksIHdlIGhhdmUgdG8gbWFrZSBhbiBlYWdlciBsYXlvdXQgaGFwcGVu
IGJlZm9yZSB0aGUKLSAgICAvLyBsYXllcnMgZ2V0IGNvbW1pdHRlZCBieSBDQS4KLSAgICBpZiAo
IV9wcml2YXRlLT52aWV3VXBkYXRlUnVuTG9vcE9ic2VydmVyKSB7Ci0gICAgICAgIGNvbnN0IENG
SW5kZXggcnVuTG9vcE9yZGVyID0gTlNEaXNwbGF5V2luZG93UnVuTG9vcE9yZGVyaW5nLTE7IC8v
IFJ1biBiZWZvcmUgQXBwS2l0IGRvZXMgaXRzIHdpbmRvdyB1cGRhdGUKLSAgICAgICAgQ0ZSdW5M
b29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7Ci0gICAgICAgICAgICAwLAotICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc2VsZiksCi0gICAgICAgICAgICBOVUxMLCAgIC8v
IFRoZSBXZWJWaWV3IGFsd2F5cyBvdXRsaXZlcyB0aGUgb2JzZXJ2ZXIsIHNvIG5vIG5lZWQgdG8g
cmV0YWluL3JlbGVhc2UuCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTAotICAg
ICAgICB9OwotICAgICAgICBfcHJpdmF0ZS0+dmlld1VwZGF0ZVJ1bkxvb3BPYnNlcnZlciA9IENG
UnVuTG9vcE9ic2VydmVyQ3JlYXRlKE5VTEwsIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5nIHwga0NG
UnVuTG9vcEV4aXQsIGZhbHNlIC8qIG9uZSBzaG90ICovLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5Mb29wT3JkZXIsIHZpZXdVcGRh
dGVSdW5Mb29wT2JzZXJ2ZXJDYWxsQmFjaywgJmNvbnRleHQpOwotCi0gICAgICAgIENGUnVuTG9v
cEFkZE9ic2VydmVyKENGUnVuTG9vcEdldEN1cnJlbnQoKSwgX3ByaXZhdGUtPnZpZXdVcGRhdGVS
dW5Mb29wT2JzZXJ2ZXIsIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgfQotICAgIAotfQot
I2VuZGlmCi0KIEBlbmQKIAogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKSW5kZXg6IFdlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDQ0MzEzKQorKysgV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwyNCArMzgs
MjIgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xh
c3MgS2V5Ym9hcmRFdmVudDsKKyAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBLVVJMOworICAg
IGNsYXNzIEtleWJvYXJkRXZlbnQ7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBTdHJpbmc7
CiB9Ci10eXBlZGVmIFdlYkNvcmU6OktleWJvYXJkRXZlbnQgV2ViQ29yZUtleWJvYXJkRXZlbnQ7
Ci10eXBlZGVmIFdlYkNvcmU6OlBhZ2UgV2ViQ29yZVBhZ2U7Ci0jZWxzZQotQGNsYXNzIFdlYkNv
cmVLZXlib2FyZEV2ZW50OwotQGNsYXNzIFdlYkNvcmVQYWdlOwogI2VuZGlmCiAKIEBjbGFzcyBX
ZWJCYXNlUGx1Z2luUGFja2FnZTsKIEBjbGFzcyBXZWJEb3dubG9hZDsKIEBjbGFzcyBXZWJOb2Rl
SGlnaGxpZ2h0OwogCisjaWZkZWYgX19jcGx1c3BsdXMKKwogQGludGVyZmFjZSBXZWJWaWV3IChX
ZWJWaWV3RWRpdGluZ0V4dHJhcykKLS0gKEJPT0wpX2ludGVyY2VwdEVkaXRpbmdLZXlFdmVudDoo
V2ViQ29yZUtleWJvYXJkRXZlbnQgKilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91
bGRTYXZlOworLSAoQk9PTClfaW50ZXJjZXB0RWRpdGluZ0tleUV2ZW50OihXZWJDb3JlOjpLZXli
b2FyZEV2ZW50KilldmVudCBzaG91bGRTYXZlQ29tbWFuZDooQk9PTClzaG91bGRTYXZlOwogLSAo
Qk9PTClfc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKiljdXJyZW50UmFu
Z2UgdG9ET01SYW5nZTooRE9NUmFuZ2UgKilwcm9wb3NlZFJhbmdlIGFmZmluaXR5OihOU1NlbGVj
dGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5IHN0aWxsU2VsZWN0aW5nOihCT09MKWZsYWc7
CiBAZW5kCiAKQEAgLTY2LDE3ICs2NCw0NiBAQCB0eXBlZGVmIFdlYkNvcmU6OlBhZ2UgV2ViQ29y
ZVBhZ2U7CiBAZW5kCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAoV2ViVmlld0ludGVybmFsKQotI2lm
ZGVmIF9fY3BsdXNwbHVzCisKKy0gKFdlYkNvcmU6OkZyYW1lKilfbWFpbkNvcmVGcmFtZTsKKwog
LSAoV2ViQ29yZTo6U3RyaW5nKV91c2VyQWdlbnRGb3JVUkw6KGNvbnN0IFdlYkNvcmU6OktVUkwm
KXVybDsKIC0gKFdlYkNvcmU6OktleWJvYXJkVUlNb2RlKV9rZXlib2FyZFVJTW9kZTsKKworLSAo
Qk9PTClfYmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlOworCistICh2b2lkKV9yZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb246KEJPT0wpbGlzdGVuOworLSAodm9pZClfZGlzcGF0Y2hE
aWRSZWNlaXZlSWNvbkZyb21XZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZTsKKworLSAodm9p
ZClfc2V0TW91c2VEb3duRXZlbnQ6KE5TRXZlbnQgKilldmVudDsKKy0gKHZvaWQpX2NhbmNlbFVw
ZGF0ZU1vdXNlb3ZlclRpbWVyOworLSAodm9pZClfc3RvcEF1dG9zY3JvbGxUaW1lcjsKKy0gKHZv
aWQpX3VwZGF0ZU1vdXNlb3ZlcldpdGhGYWtlRXZlbnQ7CistICh2b2lkKV9zZWxlY3Rpb25DaGFu
Z2VkOworLSAodm9pZClfc2V0VG9vbFRpcDooTlNTdHJpbmcgKil0b29sVGlwOworCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorLSAoQk9PTClfbmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbjsKKy0gKHZvaWQpX3NldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb246KEJPT0wpbmVlZHNTeW5jaHJvbml6YXRpb247CistICh2b2lkKV9zdGFydGVkQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWU7CistICh2b2lkKV9z
dG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWU7
CistICh2b2lkKV9zY2hlZHVsZVZpZXdVcGRhdGU7CiAjZW5kaWYKKwogQGVuZAogCi1AaW50ZXJm
YWNlIFdlYlZpZXcgKFdlYlZpZXdNaXNjSW50ZXJuYWwpCisjZW5kaWYKKworLy8gRklYTUU6IFRl
bXBvcmFyeSB3YXkgdG8gZXhwb3NlIG1ldGhvZHMgdGhhdCBhcmUgaW4gdGhlIHdyb25nIGNhdGVn
b3J5IGluc2lkZSBXZWJWaWV3LgorQGludGVyZmFjZSBXZWJWaWV3IChXZWJWaWV3T3RoZXJJbnRl
cm5hbCkKIAogKyAodm9pZClfc2V0Q2FjaGVNb2RlbDooV2ViQ2FjaGVNb2RlbCljYWNoZU1vZGVs
OwogKyAoV2ViQ2FjaGVNb2RlbClfY2FjaGVNb2RlbDsKLS0gKFdlYkNvcmVQYWdlKilwYWdlOwor
CisjaWZkZWYgX19jcGx1c3BsdXMKKy0gKFdlYkNvcmU6OlBhZ2UqKXBhZ2U7CisjZW5kaWYKKwog
LSAoTlNNZW51ICopX21lbnVGb3JFbGVtZW50OihOU0RpY3Rpb25hcnkgKillbGVtZW50IGRlZmF1
bHRJdGVtczooTlNBcnJheSAqKWl0ZW1zOwogLSAoaWQpX1VJRGVsZWdhdGVGb3J3YXJkZXI7CiAt
IChpZClfZWRpdGluZ0RlbGVnYXRlRm9yd2FyZGVyOwpAQCAtMTIzLDEyICsxNTAsOCBAQCB0eXBl
ZGVmIFdlYkNvcmU6OlBhZ2UgV2ViQ29yZVBhZ2U7CiAtICh2b2lkKV9hZGRPYmplY3Q6KGlkKW9i
amVjdCBmb3JJZGVudGlmaWVyOih1bnNpZ25lZCBsb25nKWlkZW50aWZpZXI7CiAtIChpZClfb2Jq
ZWN0Rm9ySWRlbnRpZmllcjoodW5zaWduZWQgbG9uZylpZGVudGlmaWVyOwogLSAodm9pZClfcmVt
b3ZlT2JqZWN0Rm9ySWRlbnRpZmllcjoodW5zaWduZWQgbG9uZylpZGVudGlmaWVyOwotLSAoQk9P
TClfYmVjb21pbmdGaXJzdFJlc3BvbmRlckZyb21PdXRzaWRlOwogCi0tICh2b2lkKV9yZWdpc3Rl
ckZvckljb25Ob3RpZmljYXRpb246KEJPT0wpbGlzdGVuOwotLSAodm9pZClfZGlzcGF0Y2hEaWRS
ZWNlaXZlSWNvbkZyb21XZWJGcmFtZTooV2ViRnJhbWUgKil3ZWJGcmFtZTsKLQotLSAodm9pZClf
c2V0Wm9vbU11bHRpcGxpZXI6KGZsb2F0KW0gaXNUZXh0T25seTooQk9PTClpc1RleHRPbmx5Owor
LSAodm9pZClfc2V0Wm9vbU11bHRpcGxpZXI6KGZsb2F0KW11bHRpcGxpZXIgaXNUZXh0T25seToo
Qk9PTClpc1RleHRPbmx5OwogLSAoZmxvYXQpX3pvb21NdWx0aXBsaWVyOihCT09MKWlzVGV4dE9u
bHk7CiAtIChmbG9hdClfcmVhbFpvb21NdWx0aXBsaWVyOwogLSAoQk9PTClfcmVhbFpvb21NdWx0
aXBsaWVySXNUZXh0T25seTsKQEAgLTE0NCwxOSArMTY3LDEzIEBAIHR5cGVkZWYgV2ViQ29yZTo6
UGFnZSBXZWJDb3JlUGFnZTsKIAogKyAoQk9PTClfY2FuSGFuZGxlUmVxdWVzdDooTlNVUkxSZXF1
ZXN0ICopcmVxdWVzdCBmb3JNYWluRnJhbWU6KEJPT0wpZm9yTWFpbkZyYW1lOwogCi0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotLSAoQk9PTClfbmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbjsKLS0gKHZvaWQpX3NldE5lZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6
YXRpb246KEJPT0wpbmVlZHNTeW5jaHJvbml6YXRpb247Ci0tICh2b2lkKV9zdGFydGVkQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWU7Ci0tICh2b2lkKV9z
dG9wcGVkQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0ZvckZyYW1lOihXZWJGcmFtZSopd2ViRnJhbWU7
Ci0tICh2b2lkKV9zY2hlZHVsZVZpZXdVcGRhdGU7Ci0jZW5kaWYKLQogLSAodm9pZClfc2V0SW5z
ZXJ0aW9uUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKIAogQGVuZAogCi10
eXBlZGVmIHN0cnVjdCBfV2ViUmVzb3VyY2VEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUgewor
I2lmZGVmIF9fY3BsdXNwbHVzCisKK3N0cnVjdCBXZWJSZXNvdXJjZURlbGVnYXRlSW1wbGVtZW50
YXRpb25DYWNoZSB7CiAgICAgSU1QIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRnVu
YzsKICAgICBJTVAgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRnVuYzsKICAgICBJ
TVAgaWRlbnRpZmllckZvclJlcXVlc3RGdW5jOwpAQCAtMTY5LDkgKzE4Niw5IEBAIHR5cGVkZWYg
c3RydWN0IF9XZWJSZXNvdXJjZURlbGVnYXRlSW1wbGUKICAgICBJTVAgd2lsbENhY2hlUmVzcG9u
c2VGdW5jOwogICAgIElNUCBwbHVnSW5GYWlsZWRXaXRoRXJyb3JGdW5jOwogICAgIElNUCBzaG91
bGRVc2VDcmVkZW50aWFsU3RvcmFnZUZ1bmM7Ci19IFdlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1l
bnRhdGlvbkNhY2hlOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1dlYkZyYW1lTG9hZERlbGVnYXRl
SW1wbGVtZW50YXRpb25DYWNoZSB7CitzdHJ1Y3QgV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsZW1l
bnRhdGlvbkNhY2hlIHsKICAgICBJTVAgZGlkQ2xlYXJXaW5kb3dPYmplY3RGb3JGcmFtZUZ1bmM7
CiAgICAgSU1QIHdpbmRvd1NjcmlwdE9iamVjdEF2YWlsYWJsZUZ1bmM7CiAgICAgSU1QIGRpZEhh
bmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lRnVuYzsKQEAgLTE5MCw5ICsyMDcsOSBAQCB0eXBlZGVm
IHN0cnVjdCBfV2ViRnJhbWVMb2FkRGVsZWdhdGVJbXBsCiAgICAgSU1QIGRpZEZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dEluRnJhbWVGdW5jOwogICAgIElNUCBkaWRSZWNlaXZlSWNvbkZvckZy
YW1lRnVuYzsKICAgICBJTVAgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVGdW5jOwotfSBX
ZWJGcmFtZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGU7Cit9OwogCi10eXBlZGVmIHN0
cnVjdCBfV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUgeworc3RydWN0
IFdlYlNjcmlwdERlYnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbkNhY2hlIHsKICAgICBCT09MIGRp
ZFBhcnNlU291cmNlRXhwZWN0c0Jhc2VMaW5lTnVtYmVyOwogICAgIElNUCBkaWRQYXJzZVNvdXJj
ZUZ1bmM7CiAgICAgSU1QIGZhaWxlZFRvUGFyc2VTb3VyY2VGdW5jOwpAQCAtMjAwLDEzICsyMTcs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYlNjcmlwdERlYnVnRGVsZWdhdGVJbQogICAgIElNUCB3
aWxsRXhlY3V0ZVN0YXRlbWVudEZ1bmM7CiAgICAgSU1QIHdpbGxMZWF2ZUNhbGxGcmFtZUZ1bmM7
CiAgICAgSU1QIGV4Y2VwdGlvbldhc1JhaXNlZEZ1bmM7Ci19IFdlYlNjcmlwdERlYnVnRGVsZWdh
dGVJbXBsZW1lbnRhdGlvbkNhY2hlOworfTsKIAotV2ViUmVzb3VyY2VEZWxlZ2F0ZUltcGxlbWVu
dGF0aW9uQ2FjaGUqIFdlYlZpZXdHZXRSZXNvdXJjZUxvYWREZWxlZ2F0ZUltcGxlbWVudGF0aW9u
cyhXZWJWaWV3ICp3ZWJWaWV3KTsKLVdlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25D
YWNoZSogV2ViVmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKFdlYlZpZXcg
KndlYlZpZXcpOwotV2ViU2NyaXB0RGVidWdEZWxlZ2F0ZUltcGxlbWVudGF0aW9uQ2FjaGUqIFdl
YlZpZXdHZXRTY3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25zKFdlYlZpZXcgKndlYlZp
ZXcpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKK1dlYlJlc291cmNlRGVsZWdhdGVJbXBsZW1lbnRh
dGlvbkNhY2hlKiBXZWJWaWV3R2V0UmVzb3VyY2VMb2FkRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMo
V2ViVmlldyAqKTsKK1dlYkZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogV2Vi
Vmlld0dldEZyYW1lTG9hZERlbGVnYXRlSW1wbGVtZW50YXRpb25zKFdlYlZpZXcgKik7CitXZWJT
Y3JpcHREZWJ1Z0RlbGVnYXRlSW1wbGVtZW50YXRpb25DYWNoZSogV2ViVmlld0dldFNjcmlwdERl
YnVnRGVsZWdhdGVJbXBsZW1lbnRhdGlvbnMoV2ViVmlldyAqKTsKIAogaWQgQ2FsbEZvcm1EZWxl
Z2F0ZShXZWJWaWV3ICosIFNFTCwgaWQsIGlkKTsKIGlkIENhbGxGb3JtRGVsZWdhdGUoV2ViVmll
dyAqc2VsZiwgU0VMIHNlbGVjdG9yLCBpZCBvYmplY3QxLCBpZCBvYmplY3QyLCBpZCBvYmplY3Qz
LCBpZCBvYmplY3Q0LCBpZCBvYmplY3Q1KTsKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNDQzMTUpCisrKyBXZWJL
aXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDYt
MDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OnRyYW5z
aXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UpOiBVc2UgRnJhbWVWaWV3OjpjcmVhdGUKKyAgICAg
ICAgYW5kIFJlZlB0ciBpbnN0ZWFkIG9mIHRoZSBvbGQgImNyYXp5IiByZWZlcmVuY2UgY291bnRp
bmcuCisKIDIwMDktMDUtMjMgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBQYXJ0IDIgb2YgMjogQnVnIDI1NDk1OiBJbXBsZW1lbnQgUGFzc093blB0ciBhbmQg
cmVwbGFjZSB1c2VzIG9mIHN0ZDo6YXV0b19wdHIKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCShyZXZpc2lvbiA0NDMxMykKKysrIFdl
YktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OTAsMTUgKzg5MCwxNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OnRyYW5z
aXRpb25Ub0NvCiAKICAgICBtX2ZyYW1lLT5zZXRWaWV3KDApOwogCi0gICAgRnJhbWVWaWV3KiBm
cmFtZVZpZXc7CisgICAgUmVmUHRyPEZyYW1lVmlldz4gZnJhbWVWaWV3OwogICAgIGlmIChpc01h
aW5GcmFtZSkKLSAgICAgICAgZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhtX2ZyYW1lLCBJbnRS
ZWN0KG1fd2ViVmlldy0+R2V0UmVjdCgpKS5zaXplKCkpOworICAgICAgICBmcmFtZVZpZXcgPSBG
cmFtZVZpZXc6OmNyZWF0ZShtX2ZyYW1lLCBJbnRSZWN0KG1fd2ViVmlldy0+R2V0UmVjdCgpKS5z
aXplKCkpOwogICAgIGVsc2UKLSAgICAgICAgZnJhbWVWaWV3ID0gbmV3IEZyYW1lVmlldyhtX2Zy
YW1lKTsKKyAgICAgICAgZnJhbWVWaWV3ID0gRnJhbWVWaWV3OjpjcmVhdGUobV9mcmFtZSk7CiAK
ICAgICBBU1NFUlQoZnJhbWVWaWV3KTsKICAgICBtX2ZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7
Ci0gICAgZnJhbWVWaWV3LT5kZXJlZigpOyAvLyBGcmFtZVZpZXdzIGFyZSBjcmVhdGVkIHdpdGgg
YSByZWYgY291bnQgb2YgMS4gUmVsZWFzZSB0aGlzIHJlZiBzaW5jZSB3ZSd2ZSBhc3NpZ25lZCBp
dCB0byBmcmFtZS4KIAogICAgIGZyYW1lVmlldy0+c2V0UGxhdGZvcm1XaWRnZXQobV93ZWJWaWV3
KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>