<?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>66542</bug_id>
          
          <creation_ts>2011-08-18 23:33:59 -0700</creation_ts>
          <short_desc>[EFL] Rename ewk_view_(single|tiled).c to ewk_view_(single|tiled).cpp</short_desc>
          <delta_ts>2011-09-04 21:17:17 -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 EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>453667</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-08-18 23:33:59 -0700</bug_when>
    <thetext>It&apos;s discussed in https://lists.webkit.org/pipermail/webkit-efl/2011-August/thread.html

In short,

ewk_view_single.c and ewk_view_tiled.c should include ewk_private.h to remove warning,
but they can&apos;t because their extension are &quot;.c&quot; and ewk_private.h contains WebCore namespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453671</commentid>
    <comment_count>1</comment_count>
      <attachid>104468</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-08-19 00:01:01 -0700</bug_when>
    <thetext>Created attachment 104468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453896</commentid>
    <comment_count>2</comment_count>
      <attachid>104468</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-08-19 10:11:49 -0700</bug_when>
    <thetext>Comment on attachment 104468
Patch

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

&gt; Source/WebKit/efl/ChangeLog:9
&gt; +        Rename c files to cpp and include ewk_private.h to remove warning in compile time.
&gt; +        It&apos;s because these files require ewk_repaint_add which is in ewk_private.h.
&gt; +        However these files can&apos;t include ewk_private.h because of some functions containing
&gt; +        namespace.

Informal r+ -- I&apos;d just change the above to something along the lines of &quot;Use a C++ compiler for these files, so that they can include the C++-using ewk_private.h.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454433</commentid>
    <comment_count>3</comment_count>
      <attachid>104635</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-08-21 18:16:17 -0700</bug_when>
    <thetext>Created attachment 104635
comment_changed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461998</commentid>
    <comment_count>4</comment_count>
      <attachid>106298</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-04 18:14:11 -0700</bug_when>
    <thetext>Created attachment 106298
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462007</commentid>
    <comment_count>5</comment_count>
      <attachid>106298</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-09-04 20:09:37 -0700</bug_when>
    <thetext>Comment on attachment 106298
rebased

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462009</commentid>
    <comment_count>6</comment_count>
      <attachid>106298</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-04 20:18:11 -0700</bug_when>
    <thetext>Comment on attachment 106298
rebased

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462015</commentid>
    <comment_count>7</comment_count>
      <attachid>106298</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-04 21:17:11 -0700</bug_when>
    <thetext>Comment on attachment 106298
rebased

Clearing flags on attachment: 106298

Committed r94509: &lt;http://trac.webkit.org/changeset/94509&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462016</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-04 21:17:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104468</attachid>
            <date>2011-08-19 00:01:01 -0700</date>
            <delta_ts>2011-08-21 18:16:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66542-20110819160059.patch</filename>
            <type>text/plain</type>
            <size>61772</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMzODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZDVhZTNmZWZiYmVkZmM5NDBjZTBlMzViMDliODU0Yjg5ZWNjYWU3ZS4uN2Q1NTZiMzYz
Yjg1Y2Q2YjM5MjM5ODc1NjcxYWM5MGI4NTAwYzFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc3LDggKzc3LDggQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAg
ICBlZmwvZXdrL2V3a192aWV3LmNwcAotICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKLSAg
ICBlZmwvZXdrL2V3a192aWV3X3RpbGVkLmMKKyAgICBlZmwvZXdrL2V3a192aWV3X3NpbmdsZS5j
cHAKKyAgICBlZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcAogICAgIGVmbC9ld2svZXdrX3dpbmRv
d19mZWF0dXJlcy5jcHAKICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDAyNmNhMjUwZDFkMDgxN2M2
NzJlYjM0NTFmZmFlMTI3YTE4MWQ5OTQuLmMxMjU3Y2Y2MDEyY2ZjZWI0NjM0NWRjMjU5YTBhNDQ2
NTUzYzUyYTMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsNSArMSw2MiBAQAogMjAxMS0wOC0xOCAg
Unl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKKyAgICAgICAgW0VGTF0gUmVu
YW1lIGV3a192aWV3XyhzaW5nbGV8dGlsZWQpLmMgdG8gZXdrX3ZpZXdfKHNpbmdsZXx0aWxlZCku
Y3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjU0
MgorCisgICAgICAgIFJlbmFtZSBjIGZpbGVzIHRvIGNwcCBhbmQgaW5jbHVkZSBld2tfcHJpdmF0
ZS5oIHRvIHJlbW92ZSB3YXJuaW5nIGluIGNvbXBpbGUgdGltZS4KKyAgICAgICAgSXQncyBiZWNh
dXNlIHRoZXNlIGZpbGVzIHJlcXVpcmUgZXdrX3JlcGFpbnRfYWRkIHdoaWNoIGlzIGluIGV3a19w
cml2YXRlLmguCisgICAgICAgIEhvd2V2ZXIgdGhlc2UgZmlsZXMgY2FuJ3QgaW5jbHVkZSBld2tf
cHJpdmF0ZS5oIGJlY2F1c2Ugb2Ygc29tZSBmdW5jdGlvbnMgY29udGFpbmluZworICAgICAgICBu
YW1lc3BhY2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiBld2sv
ZXdrX3ZpZXdfc2luZ2xlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlld19zaW5nbGUuYy4KKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfb25fZGVsKToKKyAg
ICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfYWRkKToKKyAgICAgICAgKF9ld2tfdmlld19z
aW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQpOgorICAgICAgICAoX2V3a192aWV3X3Npbmds
ZV9zbWFydF9yZXNpemUpOgorICAgICAgICAoX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3VwKToK
KyAgICAgICAgKF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9kb3duKToKKyAgICAgICAgKF9ld2tf
dmlld180Yl9tb3ZlX2xpbmVfbGVmdCk6CisgICAgICAgIChfZXdrX3ZpZXdfNGJfbW92ZV9saW5l
X3JpZ2h0KToKKyAgICAgICAgKF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0KToKKyAgICAg
ICAgKF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9yaWdodCk6CisgICAgICAgIChfZXdrX3ZpZXdf
NGJfbW92ZV9yZWdpb24pOgorICAgICAgICAoX2V3a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vz
c19zaW5nbGUpOgorICAgICAgICAoX2V3a192aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nl
c3MpOgorICAgICAgICAoX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKToK
KyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3NldCk6CisgICAgICAg
IChfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KToKKyAg
ICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmdfY29sb3Jfc2V0KToKKyAgICAgICAgKGV3
a192aWV3X3NpbmdsZV9zbWFydF9zZXQpOgorICAgICAgICAoX2V3a192aWV3X3NpbmdsZV9zbWFy
dF9jbGFzc19uZXcpOgorICAgICAgICAoZXdrX3ZpZXdfc2luZ2xlX2FkZCk6CisgICAgICAgICog
ZXdrL2V3a192aWV3X3RpbGVkLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdmlld190aWxlZC5jLgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYik6
CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSk6CisgICAgICAg
IChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQpOgorICAgICAgICAoX2V3
a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYik6CisgICAgICAgIChfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfYWRkKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9zY3Jv
bGxzX3Byb2Nlc3MpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3By
b2Nlc3MpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZSk6
CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQpOgorICAgICAgICAoX2V3
a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zZXQpOgorICAgICAgICAoX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KToKKyAgICAgICAgKF9ld2tfdmll
d190aWxlZF9zbWFydF9mbHVzaCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJl
X3JlbmRlcl9yZWdpb24pOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5k
ZXJfcmVsYXRpdmVfcmFkaXVzKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVf
cmVuZGVyX2NhbmNlbCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9y
ZW5kZXIpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXIpOgor
ICAgICAgICAoZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KToKKyAgICAgICAgKF9ld2tfdmlld190
aWxlZF9zbWFydF9jbGFzc19uZXcpOgorICAgICAgICAoZXdrX3ZpZXdfdGlsZWRfYWRkKToKKyAg
ICAgICAgKGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQpOgorICAgICAgICAoZXdrX3Zp
ZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldCk6CisgICAgICAgIChld2tfdmlld190aWxlZF9wcm9j
ZXNzX2VudGlyZV9xdWV1ZV9zZXQpOgorCisyMDExLTA4LTE4ICBSeXVhbiBDaG9pICA8cnl1YW4u
Y2hvaUBzYW1zdW5nLmNvbT4KKwogICAgICAgICBbRUZMXSBCcm9rZW4gcmVuZGVyaW5nIG9jY3Vy
ZWQgd2hlbiByZXNpemVkIGluIGV3a192aWV3X3NpbmdsZS4KICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MjcxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlld19zaW5nbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkYTk0NjU5
MzRkMjFhM2M5MDIzZjJjMTMzMzUyN2VkODQ5Yjk0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2lu
Z2xlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NjggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQg
KEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
ICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiZXdrX3ZpZXcuaCIKLQotI2luY2x1ZGUgImV3a19mcmFtZS5oIgotI2luY2x1
ZGUgImV3a19sb2dnaW5nLmgiCi0KLSNpbmNsdWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8ZWluYV9z
YWZldHlfY2hlY2tzLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXN0YXRpYyBFd2tfVmlld19T
bWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwot
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCh2b2lkICpkYXRhLCBFdmFzICpl
LCBFdmFzX09iamVjdCAqbywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICBFdmFzX09iamVjdCAq
Y2xpcCA9IChFdmFzX09iamVjdCopZGF0YTsKLSAgICBldmFzX29iamVjdF9kZWwoY2xpcCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpv
KQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkOwotCi0gICAgX3BhcmVudF9zYy5zYy5h
ZGQobyk7Ci0KLSAgICBzZCA9IChFd2tfVmlld19TbWFydF9EYXRhICopZXZhc19vYmplY3Rfc21h
cnRfZGF0YV9nZXQobyk7Ci0gICAgaWYgKCFzZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXZh
c19PYmplY3QgKmNsaXAgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMp
OwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBjbGlwKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGNsaXAsIG8pOwotICAgIGV2YXNfb2JqZWN0
X3Nob3coY2xpcCk7Ci0KLSAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQKLSAgICAg
ICAgKHNkLT5iYWNraW5nX3N0b3JlLCBFVkFTX0NBTExCQUNLX0RFTCwgX2V3a192aWV3X3Npbmds
ZV9vbl9kZWwsIGNsaXApOwotfQotCi1zdGF0aWMgRXZhc19PYmplY3QgKl9ld2tfdmlld19zaW5n
bGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0g
ICAgRXZhc19PYmplY3QgKmJzID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKHNkLT5iYXNlLmV2YXMp
OwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChicywgRUlOQV9GQUxTRSk7Ci0gICAg
ZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChicywgc2QtPnpvb21fd2Vha19zbW9v
dGhfc2NhbGUpOwotCi0gICAgcmV0dXJuIGJzOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSAoRXdrX1ZpZXdfU21hcnRf
RGF0YSopZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobyk7Ci0gICAgX3BhcmVudF9zYy5zYy5y
ZXNpemUobywgdywgaCk7Ci0KLSAgICBpZiAoIXNkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyB0aGVzZSBzaG91bGQgYmUgcXVldWVkIGFuZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdl
bGwhCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHcs
IGgpOwotICAgIGlmIChzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7
Ci0gICAgICAgIEV2YXNfT2JqZWN0ICpjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJh
Y2tpbmdfc3RvcmUpOwotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIGN3LCBjaDsKLSAgICAgICAg
ZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHcsIGgp
OwotICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUsICZ4
LCAmeSwgMCwgMCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgeCwgeSk7Ci0gICAg
ICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gp
OwotICAgICAgICBpZiAodyA+IGN3KQotICAgICAgICAgICAgdyA9IGN3OwotICAgICAgICBpZiAo
aCA+IGNoKQotICAgICAgICAgICAgaCA9IGNoOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUo
Y2xpcCwgdywgaCk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRi
X21vdmVfcmVnaW9uX3VwKHVpbnQzMl90ICppbWFnZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBz
aXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKLXsKLSAgICB1aW50
MzJfdCAqc3JjOwotICAgIHVpbnQzMl90ICpkc3Q7Ci0KLSAgICBkc3QgPSBpbWFnZSArIHggKyB5
ICogcm93c2l6ZTsKLSAgICBzcmMgPSBkc3QgKyByb3dzICogcm93c2l6ZTsKLSAgICBoIC09IHJv
d3M7Ci0KLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dz
aXplKQotICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHcgKiA0KTsKLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9kb3duKHVpbnQzMl90ICppbWFnZSwgc2l6
ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qg
cm93c2l6ZSkKLXsKLSAgICB1aW50MzJfdCAqc3JjOwotICAgIHVpbnQzMl90ICpkc3Q7Ci0KLSAg
ICBoIC09IHJvd3M7Ci0gICAgc3JjID0gaW1hZ2UgKyB4ICsgKHkgKyBoIC0gMSkgKiByb3dzaXpl
OwotICAgIGRzdCA9IHNyYyArIHJvd3MgKiByb3dzaXplOwotCi0gICAgZm9yICg7IGggPiAwOyBo
LS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwg
c3JjLCB3ICogNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9s
aW5lX2xlZnQodWludDMyX3QgKmRzdCwgY29uc3QgdWludDMyX3QgKnNyYywgc2l6ZV90IGNvdW50
KQotewotICAgIHVpbnQzMl90ICpkc3RfZW5kID0gZHN0ICsgY291bnQ7Ci0gICAgLyogbm8gbWVt
Y3B5KCkgYXMgaXQgZG9lcyBub3QgYWxsb3cgb3ZlcmxhcHBpbmcgcmVnaW9ucyAqLwotICAgIC8q
IG5vIG1lbW1vdmUoKSBhcyBpdCB3aWxsIGNvcHkgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyICovCi0g
ICAgLyogVE9ETzogbG9vcCB1bnJvbGxpbmcsIGNvcHlpbmcgdXAgdG8gcXVhZC13b3JkcyB3b3Vs
ZCBoZWxwICovCi0gICAgZm9yICg7IGRzdCA8IGRzdF9lbmQ7IGRzdCsrLCBzcmMrKykKLSAgICAg
ICAgKmRzdCA9ICpzcmM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92
ZV9saW5lX3JpZ2h0KHVpbnQzMl90ICpkc3QsIHVpbnQzMl90ICpzcmMsIHNpemVfdCBjb3VudCkK
LXsKLSAgICB1aW50MzJfdCAqZHN0X2VuZCA9IGRzdCAtIGNvdW50OwotICAgIC8qIG5vIG1lbWNw
eSgpIGFzIGl0IGRvZXMgbm90IGFsbG93IG92ZXJsYXBwaW5nIHJlZ2lvbnMgKi8KLSAgICAvKiBu
byBtZW1tb3ZlKCkgYXMgaXQgd2lsbCBjb3B5IHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAg
IC8qIFRPRE86IGxvb3AgdW5yb2xsaW5nLCBjb3B5aW5nIHVwIHRvIHF1YWQtd29yZHMgd291bGQg
aGVscCAqLwotICAgIGZvciAoOyBkc3QgPiBkc3RfZW5kOyBkc3QtLSwgc3JjLS0pCi0gICAgICAg
ICpkc3QgPSAqc3JjOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVf
cmVnaW9uX2xlZnQodWludDMyX3QgKmltYWdlLCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNpemVf
dCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQotewotICAgIHVpbnQzMl90
ICpzcmM7Ci0gICAgdWludDMyX3QgKmRzdDsKLQotICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiBy
b3dzaXplOwotICAgIHNyYyA9IGRzdCArIGNvbHM7Ci0gICAgdyAtPSBjb2xzOwotCi0gICAgZm9y
ICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAg
X2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3KTsKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9yaWdodCh1aW50MzJfdCAqaW1hZ2Us
IHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6
ZV90IHJvd3NpemUpCi17Ci0gICAgdWludDMyX3QgKnNyYzsKLSAgICB1aW50MzJfdCAqZHN0Owot
Ci0gICAgdyAtPSBjb2xzOwotICAgIHNyYyA9IGltYWdlICsgKHggKyB3IC0gMSkgKyB5ICogcm93
c2l6ZTsKLSAgICBkc3QgPSBzcmMgKyBjb2xzOwotCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRz
dCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAgX2V3a192aWV3XzRiX21vdmVf
bGluZV9yaWdodChkc3QsIHNyYywgdyk7Ci19Ci0KLS8qIGNhdGNoLWFsbCBmdW5jdGlvbiwgbm90
IGFzIG9wdGltaXplZCBhcyB0aGUgb3RoZXJzLCBidXQgZG9lcyB0aGUgd29yay4gKi8KLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb24odWludDMyX3QgKmltYWdlLCBp
bnQgZHgsIGludCBkeSwgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNp
emVfdCByb3dzaXplKQotewotICAgIHVpbnQzMl90ICpzcmM7Ci0gICAgdWludDMyX3QgKmRzdDsK
LQotICAgIGlmIChkeSA8IDApIHsKLSAgICAgICAgaCArPSBkeTsKLSAgICAgICAgZHN0ID0gaW1h
Z2UgKyB4ICsgeSAqIHJvd3NpemU7Ci0gICAgICAgIHNyYyA9IGRzdCAtIGR5ICogcm93c2l6ZTsK
LSAgICAgICAgaWYgKGR4IDw9IDApIHsKLSAgICAgICAgICAgIHcgKz0gZHg7Ci0gICAgICAgICAg
ICBzcmMgLT0gZHg7Ci0gICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3Np
emUsIHNyYyArPSByb3dzaXplKQotICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xp
bmVfbGVmdChkc3QsIHNyYywgdyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3IC09
IGR4OwotICAgICAgICAgICAgc3JjICs9IHcgLSAxOwotICAgICAgICAgICAgZHN0ICs9IHcgKyBk
eCAtMTsKLSAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3Jj
ICs9IHJvd3NpemUpCi0gICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdo
dChkc3QsIHNyYywgdyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBoIC09IGR5
OwotICAgICAgICBzcmMgPSBpbWFnZSArIHggKyAoeSArIGggLSAxKSAqIHJvd3NpemU7Ci0gICAg
ICAgIGRzdCA9IHNyYyArIGR5ICogcm93c2l6ZTsKLSAgICAgICAgaWYgKGR4IDw9IDApIHsKLSAg
ICAgICAgICAgIHcgKz0gZHg7Ci0gICAgICAgICAgICBzcmMgLT0gZHg7Ci0gICAgICAgICAgICBm
b3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09IHJvd3NpemUsIHNyYyAtPSByb3dzaXplKQotICAgICAg
ICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgdyk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3IC09IGR4OwotICAgICAgICAgICAgc3JjICs9IHcg
LSAxOwotICAgICAgICAgICAgZHN0ICs9IHcgKyBkeCAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsg
aCA+IDA7IGgtLSwgZHN0IC09IHJvd3NpemUsIHNyYyAtPSByb3dzaXplKQotICAgICAgICAgICAg
ICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zY3JvbGxf
cHJvY2Vzc19zaW5nbGUoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHZvaWQgKnBpeGVscywgRXZh
c19Db29yZCBvdywgRXZhc19Db29yZCBvaCwgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0ICpzcikK
LXsKLSAgICBFdmFzX0Nvb3JkIHN4LCBzeSwgc3csIHNoOwotCi0gICAgREJHKCIlZCwlZCArICVk
LCVkICUrMDNkLCUrMDNkLCBzdG9yZTogJXAgJWR4JWQiLAotICAgICAgICBzci0+eCwgc3ItPnks
IHNyLT53LCBzci0+aCwgc3ItPmR4LCBzci0+ZHksIHBpeGVscywgb3csIG9oKTsKLQotICAgIHN4
ID0gc3ItPng7Ci0gICAgc3kgPSBzci0+eTsKLSAgICBzdyA9IHNyLT53OwotICAgIHNoID0gc3It
Pmg7Ci0KLSAgICBpZiAoYWJzKHNyLT5keCkgPj0gc3cgfHwgYWJzKHNyLT5keSkgPj0gc2gpIHsK
LSAgICAgICAgLyogZG91YnQgd2Via2l0IHdvdWxkIGJlIHNvIHN0dXBpZC4uLiAqLwotICAgICAg
ICBEQkcoImZ1bGwgcGFnZSBzY3JvbGwgJSswM2QsJSswM2QuIGNvbnZlcnQgdG8gcmVwYWludCAl
ZCwlZCArICVkeCVkIiwKLSAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBz
aCk7Ci0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywg
c2gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHN4IDwgMCkgewotICAgICAg
ICBzdyArPSBzeDsKLSAgICAgICAgc3ggPSAwOwotICAgIH0KLSAgICBpZiAoc3kgPCAwKSB7Ci0g
ICAgICAgIHNoICs9IHN5OwotICAgICAgICBzeSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHN4ICsg
c3cgPiBvdykKLSAgICAgICAgc3cgPSBvdyAtIHN4OwotICAgIGlmIChzeSArIHNoID4gb2gpCi0g
ICAgICAgIHNoID0gb2ggLSBzeTsKLQotICAgIGlmIChzdyA8IDApCi0gICAgICAgIHN3ID0gMDsK
LSAgICBpZiAoc2ggPCAwKQotICAgICAgICBzaCA9IDA7Ci0KLSAgICBFSU5BX1NBRkVUWV9PTl9U
UlVFX1JFVFVSTighc3cgfHwgIXNoKTsKLSAgICBpZiAoIXNyLT5keCkgewotICAgICAgICBpZiAo
c3ItPmR5IDwgMCkgewotICAgICAgICAgICAgREJHKCJzY3JvbGwgdXA6ICUrMDNkLCUrMDNkIHVw
ZGF0ZT0lZCwlZCslZHglZCwgIgotICAgICAgICAgICAgICAgICJyZXBhaW50PSVkLCVkKyVkeCVk
IiwKLSAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywgc2ggKyBzci0+
ZHksCi0gICAgICAgICAgICAgICAgc3gsIHN5ICsgc2ggKyBzci0+ZHksIHN3LCAtc3ItPmR5KTsK
LQotICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3VwCi0gICAgICAgICAgICAg
ICAgKCh1aW50MzJfdCopcGl4ZWxzLCAtc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCwgb3cpOwotICAg
ICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCi0gICAgICAgICAgICAg
ICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzeCwgc3ksIHN3LCBzaCArIHNyLT5keSk7Ci0KLSAgICAg
ICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5ICsgc2ggKyBzci0+
ZHksIHN3LCAtc3ItPmR5KTsKLSAgICAgICAgfSBlbHNlIGlmIChzci0+ZHkgPiAwKSB7Ci0gICAg
ICAgICAgICBEQkcoInNjcm9sbCBkb3duOiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQs
ICIKLSAgICAgICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHglZCIsCi0gICAgICAgICAgICAg
ICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSArIHNyLT5keSwgc3csIHNoIC0gc3ItPmR5LAotICAg
ICAgICAgICAgICAgIHN4LCBzeSwgc3csIHNyLT5keSk7Ci0KLSAgICAgICAgICAgIF9ld2tfdmll
d180Yl9tb3ZlX3JlZ2lvbl9kb3duCi0gICAgICAgICAgICAgICAgKCh1aW50MzJfdCopcGl4ZWxz
LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoLCBvdyk7Ci0gICAgICAgICAgICBldmFzX29iamVjdF9p
bWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUs
IHN4LCBzeSArIHNyLT5keSwgc3csIHNoIC0gc3ItPmR5KTsKLQotICAgICAgICAgICAgZXdrX3Zp
ZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzci0+ZHkpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmICghc3ItPmR5KSB7Ci0gICAgICAgIGlmIChzci0+ZHggPCAwKSB7Ci0g
ICAgICAgICAgICBEQkcoInNjcm9sbCBsZWZ0OiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4
JWQsICIKLSAgICAgICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHglZCIsCi0gICAgICAgICAg
ICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3cgKyBzci0+ZHgsIHNoLAotICAgICAgICAg
ICAgICAgIHN4ICsgc3cgKyBzci0+ZHgsIHN5LCAtc3ItPmR4LCBzaCk7Ci0KLSAgICAgICAgICAg
IF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0Ci0gICAgICAgICAgICAgICAgKCh1aW50MzJf
dCopcGl4ZWxzLCAtc3ItPmR4LCBzeCwgc3ksIHN3LCBzaCwgb3cpOwotICAgICAgICAgICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCi0gICAgICAgICAgICAgICAgKHNkLT5iYWNr
aW5nX3N0b3JlLCBzeCwgc3ksIHN3ICsgc3ItPmR4LCBzaCk7Ci0KLSAgICAgICAgICAgIGV3a192
aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3ggKyBzdyArIHNyLT5keCwgc3ksIC1zci0+ZHgs
IHNoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzci0+ZHggPiAwKSB7Ci0gICAgICAgICAgICBEQkco
InNjcm9sbCB1cDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCi0gICAgICAgICAg
ICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4JWQiLAotICAgICAgICAgICAgICAgIHNyLT5keCwgc3It
PmR5LCBzeCArIHNyLT5keCwgc3ksIHN3IC0gc3ItPmR4LCBzaCwKLSAgICAgICAgICAgICAgICBz
eCwgc3ksIHNyLT5keCwgc2gpOwotCi0gICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdp
b25fcmlnaHQKLSAgICAgICAgICAgICAgICAoKHVpbnQzMl90KilwaXhlbHMsIHNyLT5keCwgc3gs
IHN5LCBzdywgc2gsIG93KTsKLSAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBk
YXRlX2FkZAotICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3ggKyBzci0+ZHgs
IHN5LCBzdyAtIHNyLT5keCwgc2gpOwotCi0gICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2Fk
ZChzZC0+X3ByaXYsIHN4LCBzeSwgc3ItPmR4LCBzaCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBFdmFzX0Nvb3JkIG14LCBteSwgbXcsIG1oLCBheCwgYXksIGF3LCBhaCwgYngs
IGJ5LCBidywgYmg7Ci0KLSAgICAgICAgaWYgKHNyLT5keCA8IDApIHsKLSAgICAgICAgICAgIG14
ID0gc3g7Ci0gICAgICAgICAgICBtdyA9IHN3ICsgc3ItPmR4OwotICAgICAgICAgICAgYXggPSBt
eCArIG13OwotICAgICAgICAgICAgYXcgPSAtc3ItPmR4OwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgYXggPSBzeDsKLSAgICAgICAgICAgIGF3ID0gc3ItPmR4OwotICAgICAgICAgICAg
bXggPSBheCArIGF3OwotICAgICAgICAgICAgbXcgPSBzdyAtIHNyLT5keDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChzci0+ZHkgPCAwKSB7Ci0gICAgICAgICAgICBteSA9IHN5OwotICAgICAg
ICAgICAgbWggPSBzaCArIHNyLT5keTsKLSAgICAgICAgICAgIGJ5ID0gbXkgKyBtaDsKLSAgICAg
ICAgICAgIGJoID0gLXNyLT5keTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ5ID0g
c3k7Ci0gICAgICAgICAgICBiaCA9IHNyLT5keTsKLSAgICAgICAgICAgIG15ID0gYnkgKyBiaDsK
LSAgICAgICAgICAgIG1oID0gc2ggLSBzci0+ZHk7Ci0gICAgICAgIH0KLQotICAgICAgICBheSA9
IG15OwotICAgICAgICBhaCA9IG1oOwotICAgICAgICBieCA9IHN4OwotICAgICAgICBidyA9IHN3
OwotCi0gICAgICAgIERCRygic2Nyb2xsIGRpYWdvbmFsOiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQs
JWQrJWR4JWQsICIKLSAgICAgICAgICAgICJyZXBhaW50czogaD0lZCwlZCslZHglZCB2PSVkLCVk
KyVkeCVkIiwKLSAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBteCwgbXksIG13LCBtaCwgYXgs
IGF5LCBhdywgYWgsIGJ4LCBieSwgYncsIGJoKTsKLQotICAgICAgICBfZXdrX3ZpZXdfNGJfbW92
ZV9yZWdpb24KLSAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVscywgc3ItPmR4LCBzci0+ZHks
IHN4LCBzeSwgc3csIHNoLCBvdyk7Ci0KLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91
cGRhdGVfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBteCwgbXksIG13LCBtaCk7Ci0gICAgICAgIGV3
a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgYXgsIGF5LCBhdywgYWgpOwotICAgICAgICBl
d2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIGJ4LCBieSwgYncsIGJoKTsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nl
c3MoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgY29uc3QgRXdrX1Njcm9sbF9SZXF1
ZXN0ICpzcjsKLSAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QgKnNyX2VuZDsKLSAgICBFdmFz
X0Nvb3JkIG93LCBvaDsKLSAgICBzaXplX3QgY291bnQ7Ci0gICAgdm9pZCAqcGl4ZWxzID0gZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUsIDEpOwotICAgIGV2YXNf
b2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAmb3csICZvaCk7Ci0KLSAg
ICBzciA9IGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoc2QtPl9wcml2LCAmY291bnQpOwot
ICAgIHNyX2VuZCA9IHNyICsgY291bnQ7Ci0gICAgZm9yICg7IHNyIDwgc3JfZW5kOyBzcisrKQot
ICAgICAgICBfZXdrX3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNzX3NpbmdsZShzZCwgcGl4ZWxz
LCBvdywgb2gsIHNyKTsKLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfc2V0KHNkLT5iYWNr
aW5nX3N0b3JlLCBwaXhlbHMpOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dDsK
LSAgICBFdmFzX0Nvb3JkIG93LCBvaDsKLSAgICB2b2lkICpwaXhlbHM7Ci0gICAgRWluYV9SZWN0
YW5nbGUgKnI7Ci0gICAgY29uc3QgRWluYV9SZWN0YW5nbGUgKnByOwotICAgIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICpwcl9lbmQ7Ci0gICAgRWluYV9UaWxlciAqdGlsZXI7Ci0gICAgRWluYV9JdGVy
YXRvciAqaXRyOwotICAgIGNhaXJvX3N0YXR1c190IHN0YXR1czsKLSAgICBjYWlyb19zdXJmYWNl
X3QgKnN1cmZhY2U7Ci0gICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OwotICAgIGNhaXJvX3QgKmNh
aXJvOwotICAgIHNpemVfdCBjb3VudDsKLSAgICBFaW5hX0Jvb2wgcmV0ID0gRUlOQV9UUlVFOwot
Ci0gICAgaWYgKHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKLSAg
ICAgICAgRXZhc19PYmplY3QgKmNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzZC0+YmFja2lu
Z19zdG9yZSk7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaCwgY3csIGNoOwotICAgICAgICAvLyBy
ZXNldCBlZmZlY3RzIG9mIHpvb21fd2Vha19zZXQoKQotICAgICAgICBldmFzX29iamVjdF9pbWFn
ZV9maWxsX3NldAotICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCAwLCAwLCBzZC0+dmll
dy53LCBzZC0+dmlldy5oKTsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzZC0+dmll
dy54LCBzZC0+dmlldy55KTsKLQotICAgICAgICB3ID0gc2QtPnZpZXcudzsKLSAgICAgICAgaCA9
IHNkLT52aWV3Lmg7Ci0KLSAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5t
YWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAgICAgIGlmICh3ID4gY3cpCi0gICAgICAgICAgICB3
ID0gY3c7Ci0gICAgICAgIGlmIChoID4gY2gpCi0gICAgICAgICAgICBoID0gY2g7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBoKTsKLSAgICB9Ci0KLSAgICBwaXhlbHMgPSBl
dmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChzZC0+YmFja2luZ19zdG9yZSwgMSk7Ci0gICAgZXZh
c19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUsICZvdywgJm9oKTsKLSAg
ICBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwotCi0gICAgc3VyZmFjZSA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhCi0gICAgICAgICgodW5zaWduZWQgY2hhciopcGl4
ZWxzLCBmb3JtYXQsIG93LCBvaCwgb3cgKiA0KTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNT
KSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzdXJmYWNlIGZyb20gZGF0YSAlZHgl
ZDogJXMiLAotICAgICAgICAgICAgb3csIG9oLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1
cykpOwotICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOwotICAgICAgICBnb3RvIGVycm9yX2NhaXJv
X3N1cmZhY2U7Ci0gICAgfQotICAgIGNhaXJvID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwotICAg
IHN0YXR1cyA9IGNhaXJvX3N0YXR1cyhjYWlybyk7Ci0gICAgaWYgKHN0YXR1cyAhPSBDQUlST19T
VEFUVVNfU1VDQ0VTUykgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgY2Fpcm8gZnJv
bSBzdXJmYWNlICVkeCVkOiAlcyIsCi0gICAgICAgICAgICBvdywgb2gsIGNhaXJvX3N0YXR1c190
b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIHJldCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGdv
dG8gZXJyb3JfY2Fpcm87Ci0gICAgfQotCi0gICAgY3R4dCA9IGV3a192aWV3X3BhaW50X2NvbnRl
eHRfbmV3KHNkLT5fcHJpdiwgY2Fpcm8pOwotICAgIGlmICghY3R4dCkgewotICAgICAgICBFUlIo
ImNvdWxkIG5vdCBjcmVhdGUgcGFpbnQgY29udGV4dCIpOwotICAgICAgICByZXQgPSBFSU5BX0ZB
TFNFOwotICAgICAgICBnb3RvIGVycm9yX3BhaW50X2NvbnRleHQ7Ci0gICAgfQotCi0gICAgdGls
ZXIgPSBlaW5hX3RpbGVyX25ldyhvdywgb2gpOwotICAgIGlmICghdGlsZXIpIHsKLSAgICAgICAg
RVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyICVkeCVkIiwgb3csIG9oKTsKLSAgICAgICAgcmV0
ID0gRUlOQV9GQUxTRTsKLSAgICAgICAgZ290byBlcnJvcl90aWxlcjsKLSAgICB9Ci0KLSAgICBw
ciA9IGV3a192aWV3X3JlcGFpbnRzX2dldChzZC0+X3ByaXYsICZjb3VudCk7Ci0gICAgcHJfZW5k
ID0gcHIgKyBjb3VudDsKLSAgICBmb3IgKDsgcHIgPCBwcl9lbmQ7IHByKyspCi0gICAgICAgIGVp
bmFfdGlsZXJfcmVjdF9hZGQodGlsZXIsIHByKTsKLQotICAgIGl0ciA9IGVpbmFfdGlsZXJfaXRl
cmF0b3JfbmV3KHRpbGVyKTsKLSAgICBpZiAoIWl0cikgewotICAgICAgICBFUlIoImNvdWxkIG5v
dCBnZXQgaXRlcmF0b3IgZm9yIHRpbGVyIik7Ci0gICAgICAgIHJldCA9IEVJTkFfRkFMU0U7Ci0g
ICAgICAgIGdvdG8gZXJyb3JfaXRlcmF0b3I7Ci0gICAgfQotCi0gICAgZXdrX3ZpZXdfbGF5b3V0
X2lmX25lZWRlZF9yZWN1cnNpdmUoc2QtPl9wcml2KTsKLQotICAgIGludCBzeCwgc3k7Ci0gICAg
ZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmc3gsICZzeSk7Ci0KLSAg
ICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRyLCByKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xl
IHNjcm9sbGVkX3JlY3QgPSB7Ci0gICAgICAgICAgICByLT54ICsgc3gsIHItPnkgKyBzeSwKLSAg
ICAgICAgICAgIHItPncsIHItPmgKLSAgICAgICAgfTsKLQotICAgICAgICBld2tfdmlld19wYWlu
dF9jb250ZXh0X3NhdmUoY3R4dCk7Ci0KLSAgICAgICAgaWYgKChzeCkgfHwgKHN5KSkKLSAgICAg
ICAgICAgIGV3a192aWV3X3BhaW50X2NvbnRleHRfdHJhbnNsYXRlKGN0eHQsIC1zeCwgLXN5KTsK
LQotICAgICAgICBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoY3R4dCwgJnNjcm9sbGVkX3Jl
Y3QpOwotICAgICAgICBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKGN0eHQs
ICZzY3JvbGxlZF9yZWN0KTsKLQotICAgICAgICBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3Rv
cmUoY3R4dCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAotICAg
ICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCByLT54LCByLT55LCByLT53LCByLT5oKTsKLSAg
ICB9Ci0gICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0cik7Ci0KLWVycm9yX2l0ZXJhdG9yOgotICAg
IGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7Ci1lcnJvcl90aWxlcjoKLSAgICBld2tfdmlld19wYWlu
dF9jb250ZXh0X2ZyZWUoY3R4dCk7Ci1lcnJvcl9wYWludF9jb250ZXh0OgotICAgIGNhaXJvX2Rl
c3Ryb3koY2Fpcm8pOwotZXJyb3JfY2Fpcm86Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1
cmZhY2UpOwotZXJyb3JfY2Fpcm9fc3VyZmFjZToKLSAgICBldmFzX29iamVjdF9pbWFnZV9kYXRh
X3NldChzZC0+YmFja2luZ19zdG9yZSwgcGl4ZWxzKTsgLyogZGVjIHJlZmNvdW50ICovCi0KLSAg
ICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21h
cnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZh
c19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKLXsKLSAgICAvLyBUT0RPOiByZXZpZXcKLSAgICBm
bG9hdCBzY2FsZSA9IHpvb20gLyBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIEV2
YXNfQ29vcmQgdyA9IHNkLT52aWV3LncgKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIGggPSBzZC0+
dmlldy5oICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBkeCwgZHksIGN3LCBjaDsKLSAgICBFdmFz
X09iamVjdCAqY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsK
LQotICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAm
Y2gpOwotICAgIGlmIChzZC0+dmlldy53ID4gMCAmJiBzZC0+dmlldy5oID4gMCkgewotICAgICAg
ICBkeCA9ICh3ICogKHNkLT52aWV3LncgLSBjeCkpIC8gc2QtPnZpZXcudzsKLSAgICAgICAgZHkg
PSAoaCAqIChzZC0+dmlldy5oIC0gY3kpKSAvIHNkLT52aWV3Lmg7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZHggPSAwOwotICAgICAgICBkeSA9IDA7Ci0gICAgfQotCi0gICAgZXZhc19vYmplY3Rf
aW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGN4ICsgZHgsIGN5ICsgZHksIHcsIGgp
OwotCi0gICAgaWYgKHNkLT52aWV3LncgPiAwICYmIHNkLT52aWV3LmggPiAwKSB7Ci0gICAgICAg
IGR4ID0gKChzZC0+dmlldy53IC0gdykgKiBjeCkgLyBzZC0+dmlldy53OwotICAgICAgICBkeSA9
ICgoc2QtPnZpZXcuaCAtIGgpICogY3kpIC8gc2QtPnZpZXcuaDsKLSAgICB9IGVsc2UgewotICAg
ICAgICBkeCA9IDA7Ci0gICAgICAgIGR5ID0gMDsKLSAgICB9Ci0gICAgZXZhc19vYmplY3RfbW92
ZShjbGlwLCBzZC0+dmlldy54ICsgZHgsIHNkLT52aWV3LnkgKyBkeSk7Ci0KLSAgICBpZiAoY3cg
PCBzZC0+dmlldy53KQotICAgICAgICB3ID0gY3cgKiBzY2FsZTsKLSAgICBpZiAoY2ggPCBzZC0+
dmlldy5oKQotICAgICAgICBoID0gY2ggKiBzY2FsZTsKLSAgICBldmFzX29iamVjdF9yZXNpemUo
Y2xpcCwgdywgaCk7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmlld19T
bWFydF9EYXRhICpzZCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBldmFzX29iamVj
dF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUp
OwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldChF
d2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5zaWduZWQgY2hhciByLCB1bnNpZ25lZCBjaGFyIGcs
IHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgY2hhciBhKQotewotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2FscGhhX3NldChzZC0+YmFja2luZ19zdG9yZSwgYSA8IDI1NSk7Ci19Ci0KLUVpbmFfQm9v
bCBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGkpCi17
Ci0gICAgaWYgKCFld2tfdmlld19iYXNlX3NtYXJ0X3NldChhcGkpKQotICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFfcGFyZW50X3NjLnNjLmFkZCkp
Ci0gICAgICAgIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCZfcGFyZW50X3NjKTsKLQotICAgIGFw
aS0+c2MuYWRkID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9hZGQ7Ci0gICAgYXBpLT5zYy5yZXNp
emUgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Jlc2l6ZTsKLQotICAgIGFwaS0+YmFja2luZ19z
dG9yZV9hZGQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkOwotICAg
IGFwaS0+c2Nyb2xsc19wcm9jZXNzID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3By
b2Nlc3M7Ci0gICAgYXBpLT5yZXBhaW50c19wcm9jZXNzID0gX2V3a192aWV3X3NpbmdsZV9zbWFy
dF9yZXBhaW50c19wcm9jZXNzOwotICAgIGFwaS0+em9vbV93ZWFrX3NldCA9IF9ld2tfdmlld19z
aW5nbGVfc21hcnRfem9vbV93ZWFrX3NldDsKLSAgICBhcGktPnpvb21fd2Vha19zbW9vdGhfc2Nh
bGVfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3Nl
dDsKLSAgICBhcGktPmJnX2NvbG9yX3NldCA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmdfY29s
b3Jfc2V0OwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBFdmFz
X1NtYXJ0ICpfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQotewotICAgIHN0
YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklU
X05BTUVfVkVSU0lPTigiRXdrX1ZpZXdfU2luZ2xlIik7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQg
KnNtYXJ0ID0gMDsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFydCkpIHsKLSAgICAgICAg
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldCgmYXBpKTsKLSAgICAgICAgc21hcnQgPSBldmFzX3Nt
YXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc21hcnQ7Ci19Ci0K
LUV2YXNfT2JqZWN0ICpld2tfdmlld19zaW5nbGVfYWRkKEV2YXMgKmUpCi17Ci0gICAgcmV0dXJu
IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25l
dygpKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5n
bGUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOGJhZjgwNTYwNWZlMjg0ZDU0NzRmNmIzMDIxMmI5YTJkNTBhOGE5MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCkBAIC0w
LDAgKzEsNTY5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVj
dHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdmlldy5oIgor
CisjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCisjaW5jbHVkZSAiZXdrX2xvZ2dpbmcuaCIKKyNpbmNs
dWRlICJld2tfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPGVpbmFf
c2FmZXR5X2NoZWNrcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgRXdrX1ZpZXdf
U21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsK
Kworc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwodm9pZCAqZGF0YSwgRXZhcyAq
ZSwgRXZhc19PYmplY3QgKm8sIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICAgRXZhc19PYmplY3Qg
KmNsaXAgPSAoRXZhc19PYmplY3QqKWRhdGE7CisgICAgZXZhc19vYmplY3RfZGVsKGNsaXApOwor
fQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZChFdmFzX09iamVjdCAq
bykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZDsKKworICAgIF9wYXJlbnRfc2Muc2Mu
YWRkKG8pOworCisgICAgc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSAqKWV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfZ2V0KG8pOworICAgIGlmICghc2QpCisgICAgICAgIHJldHVybjsKKworICAgIEV2
YXNfT2JqZWN0ICpjbGlwID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFz
KTsKKyAgICBldmFzX29iamVjdF9jbGlwX3NldChzZC0+YmFja2luZ19zdG9yZSwgY2xpcCk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChjbGlwLCBvKTsKKyAgICBldmFzX29iamVj
dF9zaG93KGNsaXApOworCisgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkCisgICAg
ICAgIChzZC0+YmFja2luZ19zdG9yZSwgRVZBU19DQUxMQkFDS19ERUwsIF9ld2tfdmlld19zaW5n
bGVfb25fZGVsLCBjbGlwKTsKK30KKworc3RhdGljIEV2YXNfT2JqZWN0ICpfZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQorewor
ICAgIEV2YXNfT2JqZWN0ICpicyA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzZC0+YmFzZS5ldmFz
KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoYnMsIEVJTkFfRkFMU0UpOworICAg
IGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoYnMsIHNkLT56b29tX3dlYWtfc21v
b3RoX3NjYWxlKTsKKworICAgIHJldHVybiBiczsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3
X3NpbmdsZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkID0gKEV3a19WaWV3X1NtYXJ0
X0RhdGEqKWV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAgIF9wYXJlbnRfc2Muc2Mu
cmVzaXplKG8sIHcsIGgpOworCisgICAgaWYgKCFzZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3
ZWxsIQorICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB3
LCBoKTsKKyAgICBpZiAoc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkg
eworICAgICAgICBFdmFzX09iamVjdCAqY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNkLT5i
YWNraW5nX3N0b3JlKTsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCBjdywgY2g7CisgICAgICAg
IGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCAwLCAwLCB3LCBo
KTsKKyAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAm
eCwgJnksIDAsIDApOworICAgICAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHgsIHkpOworICAg
ICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNo
KTsKKyAgICAgICAgaWYgKHcgPiBjdykKKyAgICAgICAgICAgIHcgPSBjdzsKKyAgICAgICAgaWYg
KGggPiBjaCkKKyAgICAgICAgICAgIGggPSBjaDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXpl
KGNsaXAsIHcsIGgpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCAqaW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwg
c2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCit7CisgICAgdWlu
dDMyX3QgKnNyYzsKKyAgICB1aW50MzJfdCAqZHN0OworCisgICAgZHN0ID0gaW1hZ2UgKyB4ICsg
eSAqIHJvd3NpemU7CisgICAgc3JjID0gZHN0ICsgcm93cyAqIHJvd3NpemU7CisgICAgaCAtPSBy
b3dzOworCisgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93
c2l6ZSkKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3ICogNCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fZG93bih1aW50MzJfdCAqaW1hZ2UsIHNp
emVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90
IHJvd3NpemUpCit7CisgICAgdWludDMyX3QgKnNyYzsKKyAgICB1aW50MzJfdCAqZHN0OworCisg
ICAgaCAtPSByb3dzOworICAgIHNyYyA9IGltYWdlICsgeCArICh5ICsgaCAtIDEpICogcm93c2l6
ZTsKKyAgICBkc3QgPSBzcmMgKyByb3dzICogcm93c2l6ZTsKKworICAgIGZvciAoOyBoID4gMDsg
aC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCisgICAgICAgIG1lbWNweShkc3Qs
IHNyYywgdyAqIDQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVf
bGluZV9sZWZ0KHVpbnQzMl90ICpkc3QsIGNvbnN0IHVpbnQzMl90ICpzcmMsIHNpemVfdCBjb3Vu
dCkKK3sKKyAgICB1aW50MzJfdCAqZHN0X2VuZCA9IGRzdCArIGNvdW50OworICAgIC8qIG5vIG1l
bWNweSgpIGFzIGl0IGRvZXMgbm90IGFsbG93IG92ZXJsYXBwaW5nIHJlZ2lvbnMgKi8KKyAgICAv
KiBubyBtZW1tb3ZlKCkgYXMgaXQgd2lsbCBjb3B5IHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLwor
ICAgIC8qIFRPRE86IGxvb3AgdW5yb2xsaW5nLCBjb3B5aW5nIHVwIHRvIHF1YWQtd29yZHMgd291
bGQgaGVscCAqLworICAgIGZvciAoOyBkc3QgPCBkc3RfZW5kOyBkc3QrKywgc3JjKyspCisgICAg
ICAgICpkc3QgPSAqc3JjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21v
dmVfbGluZV9yaWdodCh1aW50MzJfdCAqZHN0LCB1aW50MzJfdCAqc3JjLCBzaXplX3QgY291bnQp
Cit7CisgICAgdWludDMyX3QgKmRzdF9lbmQgPSBkc3QgLSBjb3VudDsKKyAgICAvKiBubyBtZW1j
cHkoKSBhcyBpdCBkb2VzIG5vdCBhbGxvdyBvdmVybGFwcGluZyByZWdpb25zICovCisgICAgLyog
bm8gbWVtbW92ZSgpIGFzIGl0IHdpbGwgY29weSB0byBhIHRlbXBvcmFyeSBidWZmZXIgKi8KKyAg
ICAvKiBUT0RPOiBsb29wIHVucm9sbGluZywgY29weWluZyB1cCB0byBxdWFkLXdvcmRzIHdvdWxk
IGhlbHAgKi8KKyAgICBmb3IgKDsgZHN0ID4gZHN0X2VuZDsgZHN0LS0sIHNyYy0tKQorICAgICAg
ICAqZHN0ID0gKnNyYzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3Zl
X3JlZ2lvbl9sZWZ0KHVpbnQzMl90ICppbWFnZSwgc2l6ZV90IGNvbHMsIHNpemVfdCB4LCBzaXpl
X3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3sKKyAgICB1aW50MzJf
dCAqc3JjOworICAgIHVpbnQzMl90ICpkc3Q7CisKKyAgICBkc3QgPSBpbWFnZSArIHggKyB5ICog
cm93c2l6ZTsKKyAgICBzcmMgPSBkc3QgKyBjb2xzOworICAgIHcgLT0gY29sczsKKworICAgIGZv
ciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAgICAg
IF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgdyk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fcmlnaHQodWludDMyX3QgKmltYWdl
LCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNp
emVfdCByb3dzaXplKQoreworICAgIHVpbnQzMl90ICpzcmM7CisgICAgdWludDMyX3QgKmRzdDsK
KworICAgIHcgLT0gY29sczsKKyAgICBzcmMgPSBpbWFnZSArICh4ICsgdyAtIDEpICsgeSAqIHJv
d3NpemU7CisgICAgZHN0ID0gc3JjICsgY29sczsKKworICAgIGZvciAoOyBoID4gMDsgaC0tLCBk
c3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAgICAgIF9ld2tfdmlld180Yl9tb3Zl
X2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOworfQorCisvKiBjYXRjaC1hbGwgZnVuY3Rpb24sIG5v
dCBhcyBvcHRpbWl6ZWQgYXMgdGhlIG90aGVycywgYnV0IGRvZXMgdGhlIHdvcmsuICovCitzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uKHVpbnQzMl90ICppbWFnZSwg
aW50IGR4LCBpbnQgZHksIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBz
aXplX3Qgcm93c2l6ZSkKK3sKKyAgICB1aW50MzJfdCAqc3JjOworICAgIHVpbnQzMl90ICpkc3Q7
CisKKyAgICBpZiAoZHkgPCAwKSB7CisgICAgICAgIGggKz0gZHk7CisgICAgICAgIGRzdCA9IGlt
YWdlICsgeCArIHkgKiByb3dzaXplOworICAgICAgICBzcmMgPSBkc3QgLSBkeSAqIHJvd3NpemU7
CisgICAgICAgIGlmIChkeCA8PSAwKSB7CisgICAgICAgICAgICB3ICs9IGR4OworICAgICAgICAg
ICAgc3JjIC09IGR4OworICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dz
aXplLCBzcmMgKz0gcm93c2l6ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9s
aW5lX2xlZnQoZHN0LCBzcmMsIHcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdyAt
PSBkeDsKKyAgICAgICAgICAgIHNyYyArPSB3IC0gMTsKKyAgICAgICAgICAgIGRzdCArPSB3ICsg
ZHggLTE7CisgICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNy
YyArPSByb3dzaXplKQorICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmln
aHQoZHN0LCBzcmMsIHcpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaCAtPSBk
eTsKKyAgICAgICAgc3JjID0gaW1hZ2UgKyB4ICsgKHkgKyBoIC0gMSkgKiByb3dzaXplOworICAg
ICAgICBkc3QgPSBzcmMgKyBkeSAqIHJvd3NpemU7CisgICAgICAgIGlmIChkeCA8PSAwKSB7Cisg
ICAgICAgICAgICB3ICs9IGR4OworICAgICAgICAgICAgc3JjIC09IGR4OworICAgICAgICAgICAg
Zm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKKyAgICAg
ICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdyAtPSBkeDsKKyAgICAgICAgICAgIHNyYyArPSB3
IC0gMTsKKyAgICAgICAgICAgIGRzdCArPSB3ICsgZHggLSAxOworICAgICAgICAgICAgZm9yICg7
IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKKyAgICAgICAgICAg
ICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAg
fQorICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xs
X3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB2b2lkICpwaXhlbHMsIEV2
YXNfQ29vcmQgb3csIEV2YXNfQ29vcmQgb2gsIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqc3Ip
Cit7CisgICAgRXZhc19Db29yZCBzeCwgc3ksIHN3LCBzaDsKKworICAgIERCRygiJWQsJWQgKyAl
ZCwlZCAlKzAzZCwlKzAzZCwgc3RvcmU6ICVwICVkeCVkIiwKKyAgICAgICAgc3ItPngsIHNyLT55
LCBzci0+dywgc3ItPmgsIHNyLT5keCwgc3ItPmR5LCBwaXhlbHMsIG93LCBvaCk7CisKKyAgICBz
eCA9IHNyLT54OworICAgIHN5ID0gc3ItPnk7CisgICAgc3cgPSBzci0+dzsKKyAgICBzaCA9IHNy
LT5oOworCisgICAgaWYgKGFicyhzci0+ZHgpID49IHN3IHx8IGFicyhzci0+ZHkpID49IHNoKSB7
CisgICAgICAgIC8qIGRvdWJ0IHdlYmtpdCB3b3VsZCBiZSBzbyBzdHVwaWQuLi4gKi8KKyAgICAg
ICAgREJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUrMDNkLCUrMDNkLiBjb252ZXJ0IHRvIHJlcGFpbnQg
JWQsJWQgKyAlZHglZCIsCisgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywg
c2gpOworICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3cs
IHNoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzeCA8IDApIHsKKyAgICAg
ICAgc3cgKz0gc3g7CisgICAgICAgIHN4ID0gMDsKKyAgICB9CisgICAgaWYgKHN5IDwgMCkgewor
ICAgICAgICBzaCArPSBzeTsKKyAgICAgICAgc3kgPSAwOworICAgIH0KKworICAgIGlmIChzeCAr
IHN3ID4gb3cpCisgICAgICAgIHN3ID0gb3cgLSBzeDsKKyAgICBpZiAoc3kgKyBzaCA+IG9oKQor
ICAgICAgICBzaCA9IG9oIC0gc3k7CisKKyAgICBpZiAoc3cgPCAwKQorICAgICAgICBzdyA9IDA7
CisgICAgaWYgKHNoIDwgMCkKKyAgICAgICAgc2ggPSAwOworCisgICAgRUlOQV9TQUZFVFlfT05f
VFJVRV9SRVRVUk4oIXN3IHx8ICFzaCk7CisgICAgaWYgKCFzci0+ZHgpIHsKKyAgICAgICAgaWYg
KHNyLT5keSA8IDApIHsKKyAgICAgICAgICAgIERCRygic2Nyb2xsIHVwOiAlKzAzZCwlKzAzZCB1
cGRhdGU9JWQsJWQrJWR4JWQsICIKKyAgICAgICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHgl
ZCIsCisgICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoICsgc3It
PmR5LAorICAgICAgICAgICAgICAgIHN4LCBzeSArIHNoICsgc3ItPmR5LCBzdywgLXNyLT5keSk7
CisKKyAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl91cAorICAgICAgICAgICAg
ICAgICgodWludDMyX3QqKXBpeGVscywgLXNyLT5keSwgc3gsIHN5LCBzdywgc2gsIG93KTsKKyAg
ICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAorICAgICAgICAgICAg
ICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gsIHN5LCBzdywgc2ggKyBzci0+ZHkpOworCisgICAg
ICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSArIHNoICsgc3It
PmR5LCBzdywgLXNyLT5keSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3ItPmR5ID4gMCkgeworICAg
ICAgICAgICAgREJHKCJzY3JvbGwgZG93bjogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVk
LCAiCisgICAgICAgICAgICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4JWQiLAorICAgICAgICAgICAg
ICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3kgKyBzci0+ZHksIHN3LCBzaCAtIHNyLT5keSwKKyAg
ICAgICAgICAgICAgICBzeCwgc3ksIHN3LCBzci0+ZHkpOworCisgICAgICAgICAgICBfZXdrX3Zp
ZXdfNGJfbW92ZV9yZWdpb25fZG93bgorICAgICAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVs
cywgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCwgb3cpOworICAgICAgICAgICAgZXZhc19vYmplY3Rf
aW1hZ2VfZGF0YV91cGRhdGVfYWRkCisgICAgICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3Jl
LCBzeCwgc3kgKyBzci0+ZHksIHN3LCBzaCAtIHNyLT5keSk7CisKKyAgICAgICAgICAgIGV3a192
aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc3ItPmR5KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoIXNyLT5keSkgeworICAgICAgICBpZiAoc3ItPmR4IDwgMCkgewor
ICAgICAgICAgICAgREJHKCJzY3JvbGwgbGVmdDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVk
eCVkLCAiCisgICAgICAgICAgICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4JWQiLAorICAgICAgICAg
ICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3ICsgc3ItPmR4LCBzaCwKKyAgICAgICAg
ICAgICAgICBzeCArIHN3ICsgc3ItPmR4LCBzeSwgLXNyLT5keCwgc2gpOworCisgICAgICAgICAg
ICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fbGVmdAorICAgICAgICAgICAgICAgICgodWludDMy
X3QqKXBpeGVscywgLXNyLT5keCwgc3gsIHN5LCBzdywgc2gsIG93KTsKKyAgICAgICAgICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAorICAgICAgICAgICAgICAgIChzZC0+YmFj
a2luZ19zdG9yZSwgc3gsIHN5LCBzdyArIHNyLT5keCwgc2gpOworCisgICAgICAgICAgICBld2tf
dmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4ICsgc3cgKyBzci0+ZHgsIHN5LCAtc3ItPmR4
LCBzaCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3ItPmR4ID4gMCkgeworICAgICAgICAgICAgREJH
KCJzY3JvbGwgdXA6ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgorICAgICAgICAg
ICAgICAgICJyZXBhaW50PSVkLCVkKyVkeCVkIiwKKyAgICAgICAgICAgICAgICBzci0+ZHgsIHNy
LT5keSwgc3ggKyBzci0+ZHgsIHN5LCBzdyAtIHNyLT5keCwgc2gsCisgICAgICAgICAgICAgICAg
c3gsIHN5LCBzci0+ZHgsIHNoKTsKKworICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVn
aW9uX3JpZ2h0CisgICAgICAgICAgICAgICAgKCh1aW50MzJfdCopcGl4ZWxzLCBzci0+ZHgsIHN4
LCBzeSwgc3csIHNoLCBvdyk7CisgICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3Vw
ZGF0ZV9hZGQKKyAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHN4ICsgc3ItPmR4
LCBzeSwgc3cgLSBzci0+ZHgsIHNoKTsKKworICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9h
ZGQoc2QtPl9wcml2LCBzeCwgc3ksIHNyLT5keCwgc2gpOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgRXZhc19Db29yZCBteCwgbXksIG13LCBtaCwgYXgsIGF5LCBhdywgYWgsIGJ4
LCBieSwgYncsIGJoOworCisgICAgICAgIGlmIChzci0+ZHggPCAwKSB7CisgICAgICAgICAgICBt
eCA9IHN4OworICAgICAgICAgICAgbXcgPSBzdyArIHNyLT5keDsKKyAgICAgICAgICAgIGF4ID0g
bXggKyBtdzsKKyAgICAgICAgICAgIGF3ID0gLXNyLT5keDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGF4ID0gc3g7CisgICAgICAgICAgICBhdyA9IHNyLT5keDsKKyAgICAgICAgICAg
IG14ID0gYXggKyBhdzsKKyAgICAgICAgICAgIG13ID0gc3cgLSBzci0+ZHg7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3ItPmR5IDwgMCkgeworICAgICAgICAgICAgbXkgPSBzeTsKKyAgICAg
ICAgICAgIG1oID0gc2ggKyBzci0+ZHk7CisgICAgICAgICAgICBieSA9IG15ICsgbWg7CisgICAg
ICAgICAgICBiaCA9IC1zci0+ZHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBieSA9
IHN5OworICAgICAgICAgICAgYmggPSBzci0+ZHk7CisgICAgICAgICAgICBteSA9IGJ5ICsgYmg7
CisgICAgICAgICAgICBtaCA9IHNoIC0gc3ItPmR5OworICAgICAgICB9CisKKyAgICAgICAgYXkg
PSBteTsKKyAgICAgICAgYWggPSBtaDsKKyAgICAgICAgYnggPSBzeDsKKyAgICAgICAgYncgPSBz
dzsKKworICAgICAgICBEQkcoInNjcm9sbCBkaWFnb25hbDogJSswM2QsJSswM2QgdXBkYXRlPSVk
LCVkKyVkeCVkLCAiCisgICAgICAgICAgICAicmVwYWludHM6IGg9JWQsJWQrJWR4JWQgdj0lZCwl
ZCslZHglZCIsCisgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgbXgsIG15LCBtdywgbWgsIGF4
LCBheSwgYXcsIGFoLCBieCwgYnksIGJ3LCBiaCk7CisKKyAgICAgICAgX2V3a192aWV3XzRiX21v
dmVfcmVnaW9uCisgICAgICAgICAgICAoKHVpbnQzMl90KilwaXhlbHMsIHNyLT5keCwgc3ItPmR5
LCBzeCwgc3ksIHN3LCBzaCwgb3cpOworCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFf
dXBkYXRlX2FkZChzZC0+YmFja2luZ19zdG9yZSwgbXgsIG15LCBtdywgbWgpOworICAgICAgICBl
d2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIGF4LCBheSwgYXcsIGFoKTsKKyAgICAgICAg
ZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBieCwgYnksIGJ3LCBiaCk7CisgICAgfQor
fQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9j
ZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIGNvbnN0IEV3a19TY3JvbGxfUmVx
dWVzdCAqc3I7CisgICAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0ICpzcl9lbmQ7CisgICAgRXZh
c19Db29yZCBvdywgb2g7CisgICAgc2l6ZV90IGNvdW50OworICAgIHZvaWQgKnBpeGVscyA9IGV2
YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAxKTsKKyAgICBldmFz
X29iamVjdF9pbWFnZV9zaXplX2dldChzZC0+YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOworCisg
ICAgc3IgPSBld2tfdmlld19zY3JvbGxfcmVxdWVzdHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsK
KyAgICBzcl9lbmQgPSBzciArIGNvdW50OworICAgIGZvciAoOyBzciA8IHNyX2VuZDsgc3IrKykK
KyAgICAgICAgX2V3a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vzc19zaW5nbGUoc2QsIHBpeGVs
cywgb3csIG9oLCBzcik7CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3NldChzZC0+YmFj
a2luZ19zdG9yZSwgcGl4ZWxzKTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19W
aWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQ7
CisgICAgRXZhc19Db29yZCBvdywgb2g7CisgICAgdm9pZCAqcGl4ZWxzOworICAgIEVpbmFfUmVj
dGFuZ2xlICpyOworICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpwcjsKKyAgICBjb25zdCBFaW5h
X1JlY3RhbmdsZSAqcHJfZW5kOworICAgIEVpbmFfVGlsZXIgKnRpbGVyOworICAgIEVpbmFfSXRl
cmF0b3IgKml0cjsKKyAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXM7CisgICAgY2Fpcm9fc3VyZmFj
ZV90ICpzdXJmYWNlOworICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdDsKKyAgICBjYWlyb190ICpj
YWlybzsKKyAgICBzaXplX3QgY291bnQ7CisgICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsK
KworICAgIGlmIChzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7Cisg
ICAgICAgIEV2YXNfT2JqZWN0ICpjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJhY2tp
bmdfc3RvcmUpOworICAgICAgICBFdmFzX0Nvb3JkIHcsIGgsIGN3LCBjaDsKKyAgICAgICAgLy8g
cmVzZXQgZWZmZWN0cyBvZiB6b29tX3dlYWtfc2V0KCkKKyAgICAgICAgZXZhc19vYmplY3RfaW1h
Z2VfZmlsbF9zZXQKKyAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgc2QtPnZp
ZXcudywgc2QtPnZpZXcuaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc2QtPnZp
ZXcueCwgc2QtPnZpZXcueSk7CisKKyAgICAgICAgdyA9IHNkLT52aWV3Lnc7CisgICAgICAgIGgg
PSBzZC0+dmlldy5oOworCisgICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+
bWFpbl9mcmFtZSwgJmN3LCAmY2gpOworICAgICAgICBpZiAodyA+IGN3KQorICAgICAgICAgICAg
dyA9IGN3OworICAgICAgICBpZiAoaCA+IGNoKQorICAgICAgICAgICAgaCA9IGNoOworICAgICAg
ICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7CisgICAgfQorCisgICAgcGl4ZWxzID0g
ZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUsIDEpOworICAgIGV2
YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAmb3csICZvaCk7Cisg
ICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsKKworICAgIHN1cmZhY2UgPSBjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YQorICAgICAgICAoKHVuc2lnbmVkIGNoYXIqKXBp
eGVscywgZm9ybWF0LCBvdywgb2gsIG93ICogNCk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZSk7CisgICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VT
UykgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgc3VyZmFjZSBmcm9tIGRhdGEgJWR4
JWQ6ICVzIiwKKyAgICAgICAgICAgIG93LCBvaCwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0
dXMpKTsKKyAgICAgICAgcmV0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgZ290byBlcnJvcl9jYWly
b19zdXJmYWNlOworICAgIH0KKyAgICBjYWlybyA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKyAg
ICBzdGF0dXMgPSBjYWlyb19zdGF0dXMoY2Fpcm8pOworICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIGNhaXJvIGZy
b20gc3VyZmFjZSAlZHglZDogJXMiLAorICAgICAgICAgICAgb3csIG9oLCBjYWlyb19zdGF0dXNf
dG9fc3RyaW5nKHN0YXR1cykpOworICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBn
b3RvIGVycm9yX2NhaXJvOworICAgIH0KKworICAgIGN0eHQgPSBld2tfdmlld19wYWludF9jb250
ZXh0X25ldyhzZC0+X3ByaXYsIGNhaXJvKTsKKyAgICBpZiAoIWN0eHQpIHsKKyAgICAgICAgRVJS
KCJjb3VsZCBub3QgY3JlYXRlIHBhaW50IGNvbnRleHQiKTsKKyAgICAgICAgcmV0ID0gRUlOQV9G
QUxTRTsKKyAgICAgICAgZ290byBlcnJvcl9wYWludF9jb250ZXh0OworICAgIH0KKworICAgIHRp
bGVyID0gZWluYV90aWxlcl9uZXcob3csIG9oKTsKKyAgICBpZiAoIXRpbGVyKSB7CisgICAgICAg
IEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlciAlZHglZCIsIG93LCBvaCk7CisgICAgICAgIHJl
dCA9IEVJTkFfRkFMU0U7CisgICAgICAgIGdvdG8gZXJyb3JfdGlsZXI7CisgICAgfQorCisgICAg
cHIgPSBld2tfdmlld19yZXBhaW50c19nZXQoc2QtPl9wcml2LCAmY291bnQpOworICAgIHByX2Vu
ZCA9IHByICsgY291bnQ7CisgICAgZm9yICg7IHByIDwgcHJfZW5kOyBwcisrKQorICAgICAgICBl
aW5hX3RpbGVyX3JlY3RfYWRkKHRpbGVyLCBwcik7CisKKyAgICBpdHIgPSBlaW5hX3RpbGVyX2l0
ZXJhdG9yX25ldyh0aWxlcik7CisgICAgaWYgKCFpdHIpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBu
b3QgZ2V0IGl0ZXJhdG9yIGZvciB0aWxlciIpOworICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOwor
ICAgICAgICBnb3RvIGVycm9yX2l0ZXJhdG9yOworICAgIH0KKworICAgIGV3a192aWV3X2xheW91
dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNkLT5fcHJpdik7CisKKyAgICBpbnQgc3gsIHN5OworICAg
IGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzZC0+bWFpbl9mcmFtZSwgJnN4LCAmc3kpOworCisg
ICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ciwgcikgeworICAgICAgICBFaW5hX1JlY3Rhbmds
ZSBzY3JvbGxlZF9yZWN0ID0geworICAgICAgICAgICAgci0+eCArIHN4LCByLT55ICsgc3ksCisg
ICAgICAgICAgICByLT53LCByLT5oCisgICAgICAgIH07CisKKyAgICAgICAgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9zYXZlKGN0eHQpOworCisgICAgICAgIGlmICgoc3gpIHx8IChzeSkpCisgICAg
ICAgICAgICBld2tfdmlld19wYWludF9jb250ZXh0X3RyYW5zbGF0ZShjdHh0LCAtc3gsIC1zeSk7
CisKKyAgICAgICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9jbGlwKGN0eHQsICZzY3JvbGxlZF9y
ZWN0KTsKKyAgICAgICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludF9jb250ZW50cyhjdHh0
LCAmc2Nyb2xsZWRfcmVjdCk7CisKKyAgICAgICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0
b3JlKGN0eHQpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKKyAg
ICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgci0+eCwgci0+eSwgci0+dywgci0+aCk7Cisg
ICAgfQorICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdHIpOworCitlcnJvcl9pdGVyYXRvcjoKKyAg
ICBlaW5hX3RpbGVyX2ZyZWUodGlsZXIpOworZXJyb3JfdGlsZXI6CisgICAgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9mcmVlKGN0eHQpOworZXJyb3JfcGFpbnRfY29udGV4dDoKKyAgICBjYWlyb19k
ZXN0cm95KGNhaXJvKTsKK2Vycm9yX2NhaXJvOgorICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShz
dXJmYWNlKTsKK2Vycm9yX2NhaXJvX3N1cmZhY2U6CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0
YV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHBpeGVscyk7IC8qIGRlYyByZWZjb3VudCAqLworCisg
ICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2
YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCit7CisgICAgLy8gVE9ETzogcmV2aWV3CisgICAg
ZmxvYXQgc2NhbGUgPSB6b29tIC8gc2QtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydDsKKyAgICBF
dmFzX0Nvb3JkIHcgPSBzZC0+dmlldy53ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBoID0gc2Qt
PnZpZXcuaCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgZHgsIGR5LCBjdywgY2g7CisgICAgRXZh
c19PYmplY3QgKmNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzZC0+YmFja2luZ19zdG9yZSk7
CisKKyAgICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywg
JmNoKTsKKyAgICBpZiAoc2QtPnZpZXcudyA+IDAgJiYgc2QtPnZpZXcuaCA+IDApIHsKKyAgICAg
ICAgZHggPSAodyAqIChzZC0+dmlldy53IC0gY3gpKSAvIHNkLT52aWV3Lnc7CisgICAgICAgIGR5
ID0gKGggKiAoc2QtPnZpZXcuaCAtIGN5KSkgLyBzZC0+dmlldy5oOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGR4ID0gMDsKKyAgICAgICAgZHkgPSAwOworICAgIH0KKworICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBjeCArIGR4LCBjeSArIGR5LCB3LCBo
KTsKKworICAgIGlmIChzZC0+dmlldy53ID4gMCAmJiBzZC0+dmlldy5oID4gMCkgeworICAgICAg
ICBkeCA9ICgoc2QtPnZpZXcudyAtIHcpICogY3gpIC8gc2QtPnZpZXcudzsKKyAgICAgICAgZHkg
PSAoKHNkLT52aWV3LmggLSBoKSAqIGN5KSAvIHNkLT52aWV3Lmg7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZHggPSAwOworICAgICAgICBkeSA9IDA7CisgICAgfQorICAgIGV2YXNfb2JqZWN0X21v
dmUoY2xpcCwgc2QtPnZpZXcueCArIGR4LCBzZC0+dmlldy55ICsgZHkpOworCisgICAgaWYgKGN3
IDwgc2QtPnZpZXcudykKKyAgICAgICAgdyA9IGN3ICogc2NhbGU7CisgICAgaWYgKGNoIDwgc2Qt
PnZpZXcuaCkKKyAgICAgICAgaCA9IGNoICogc2NhbGU7CisgICAgZXZhc19vYmplY3RfcmVzaXpl
KGNsaXAsIHcsIGgpOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9l
d2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit7CisgICAgZXZhc19vYmpl
Y3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxl
KTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQo
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBn
LCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGNoYXIgYSkKK3sKKyAgICBldmFzX29iamVjdF9p
bWFnZV9hbHBoYV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGEgPCAyNTUpOworfQorCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyAqYXBpKQor
eworICAgIGlmICghZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoYXBpKSkKKyAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CisKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3BhcmVudF9zYy5zYy5hZGQp
KQorICAgICAgICBld2tfdmlld19iYXNlX3NtYXJ0X3NldCgmX3BhcmVudF9zYyk7CisKKyAgICBh
cGktPnNjLmFkZCA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfYWRkOworICAgIGFwaS0+c2MucmVz
aXplID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemU7CisKKyAgICBhcGktPmJhY2tpbmdf
c3RvcmVfYWRkID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZDsKKyAg
ICBhcGktPnNjcm9sbHNfcHJvY2VzcyA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19w
cm9jZXNzOworICAgIGFwaS0+cmVwYWludHNfcHJvY2VzcyA9IF9ld2tfdmlld19zaW5nbGVfc21h
cnRfcmVwYWludHNfcHJvY2VzczsKKyAgICBhcGktPnpvb21fd2Vha19zZXQgPSBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQ7CisgICAgYXBpLT56b29tX3dlYWtfc21vb3RoX3Nj
YWxlX3NldCA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9z
ZXQ7CisgICAgYXBpLT5iZ19jb2xvcl9zZXQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2Nv
bG9yX3NldDsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXZh
c19TbWFydCAqX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcodm9pZCkKK3sKKyAgICBz
dGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5J
VF9OQU1FX1ZFUlNJT04oIkV3a19WaWV3X1NpbmdsZSIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0
ICpzbWFydCA9IDA7CisKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnQpKSB7CisgICAgICAg
IGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQoJmFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19z
bWFydF9jbGFzc19uZXcoJmFwaS5zYyk7CisgICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OworfQor
CitFdmFzX09iamVjdCAqZXdrX3ZpZXdfc2luZ2xlX2FkZChFdmFzICplKQoreworICAgIHJldHVy
biBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19u
ZXcoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGls
ZWQuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2M2ViMTY4ZmFiY2IxMTNjOTI1ZmRjNTkwYTY1NjAzZjM2MzY2
ZmQyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk0
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJv
bmljcwotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0
ZW1zCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImV3a192aWV3LmgiCi0KLSNp
bmNsdWRlICJld2tfbG9nZ2luZy5oIgotCi0jaW5jbHVkZSA8RXZhcy5oPgotI2luY2x1ZGUgPGVp
bmFfc2FmZXR5X2NoZWNrcy5oPgotI2luY2x1ZGUgPGV3a190aWxlZF9iYWNraW5nX3N0b3JlLmg+
Ci0KLXN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfSU5JVF9OVUxMOwotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9y
ZW5kZXJfY2Iodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICph
cmVhKQotewotICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHJpdiA9IChFd2tfVmlld19Qcml2
YXRlX0RhdGEqKWRhdGE7Ci0gICAgRWluYV9SZWN0YW5nbGUgciA9IHthcmVhLT54ICsgdC0+eCwg
YXJlYS0+eSArIHQtPnksIGFyZWEtPncsIGFyZWEtPmh9OwotCi0gICAgcmV0dXJuIGV3a192aWV3
X3BhaW50X2NvbnRlbnRzKHByaXYsIHQtPmNhaXJvLCAmcik7Ci19Ci0KLXN0YXRpYyB2b2lkICpf
ZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSh2b2lkICpkYXRhLCBFdmFzX09iamVj
dCAqbykKLXsKLSAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYgPSAoRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKilkYXRhOwotICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZl
KHByaXYpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgRXZhc19PYmplY3QgKl9ld2tfdmll
d190aWxlZF9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChFd2tfVmlld19TbWFydF9EYXRhICpzZCkK
LXsKLSAgICBFdmFzX09iamVjdCAqYnMgPSBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoc2Qt
PmJhc2UuZXZhcyk7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldAot
ICAgICAgICAoYnMsIF9ld2tfdmlld190aWxlZF9yZW5kZXJfY2IsIHNkLT5fcHJpdik7Ci0gICAg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQKLSAgICAgICAg
KGJzLCBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSwgc2QtPl9wcml2KTsKLSAg
ICByZXR1cm4gYnM7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZXdrX3ZpZXdfdGlsZWRfY29udGVudHNf
c2l6ZV9jaGFuZ2VkX2NiKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvLCB2b2lkICpldmVudF9p
bmZvKQotewotICAgIEV2YXNfQ29vcmQgKnNpemUgPSAoRXZhc19Db29yZCopZXZlbnRfaW5mbzsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IChFd2tfVmlld19TbWFydF9EYXRhKilkYXRh
OwotCi0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplCi0gICAgICAg
IChzZC0+YmFja2luZ19zdG9yZSwgc2l6ZVswXSwgc2l6ZVsxXSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqc2Q7Ci0KLSAgICBfcGFyZW50X3NjLnNjLmFkZChvKTsKLQotICAgIHNk
ID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pOwot
ICAgIGlmICghc2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCgKLSAgICAgICAgc2QtPm1haW5fZnJhbWUsICJjb250ZW50cyxzaXplLGNoYW5n
ZWQiLAotICAgICAgICBfZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiLCBz
ZCk7Ci0gICAgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfc2V0KHNkLT5tYWluX2ZyYW1lLCBFSU5BX1RS
VUUpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxz
X3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgY29uc3QgRXdrX1Njcm9s
bF9SZXF1ZXN0ICpzcjsKLSAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QgKnNyX2VuZDsKLSAg
ICBzaXplX3QgY291bnQ7Ci0gICAgRXZhc19Db29yZCB2dywgdmg7Ci0KLSAgICBld2tfZnJhbWVf
Y29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZ2dywgJnZoKTsKLQotICAgIHNyID0g
ZXdrX3ZpZXdfc2Nyb2xsX3JlcXVlc3RzX2dldChzZC0+X3ByaXYsICZjb3VudCk7Ci0gICAgc3Jf
ZW5kID0gc3IgKyBjb3VudDsKLSAgICBmb3IgKDsgc3IgPCBzcl9lbmQ7IHNyKyspIHsKLSAgICAg
ICAgaWYgKHNyLT5tYWluX3Njcm9sbCkKLSAgICAgICAgICAgIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQKLSAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdf
c3RvcmUsIHNyLT5keCwgc3ItPmR5KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBFdmFz
X0Nvb3JkIHN4LCBzeSwgc3csIHNoOwotCi0gICAgICAgICAgICBzeCA9IHNyLT54OwotICAgICAg
ICAgICAgc3kgPSBzci0+eTsKLSAgICAgICAgICAgIHN3ID0gc3ItPnc7Ci0gICAgICAgICAgICBz
aCA9IHNyLT5oOwotCi0gICAgICAgICAgICBpZiAoYWJzKHNyLT5keCkgPj0gc3cgfHwgYWJzKHNy
LT5keSkgPj0gc2gpIHsKLSAgICAgICAgICAgICAgICAvKiBkb3VidCB3ZWJraXQgd291bGQgYmUg
c28gICAgIHN0dXBpZC4uLiAqLwotICAgICAgICAgICAgICAgIERCRygiZnVsbCBwYWdlIHNjcm9s
bCAlKzAzZCwlKzAzZC4gY29udmVydCB0byByZXBhaW50ICVkLCVkICsgJWR4JWQiLAotICAgICAg
ICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywgc2gpOwotICAgICAgICAg
ICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoc3ggKyBzdyA+IHZ3KQotICAgICAgICAgICAgICAgIHN3ID0gdncgLSBzeDsKLSAgICAgICAg
ICAgIGlmIChzeSArIHNoID4gdmgpCi0gICAgICAgICAgICAgICAgc2ggPSB2aCAtIHN5OwotCi0g
ICAgICAgICAgICBpZiAoc3cgPCAwKQotICAgICAgICAgICAgICAgIHN3ID0gMDsKLSAgICAgICAg
ICAgIGlmIChzaCA8IDApCi0gICAgICAgICAgICAgICAgc2ggPSAwOwotCi0gICAgICAgICAgICBp
ZiAoIXN3IHx8ICFzaCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
c3ggLT0gYWJzKHNyLT5keCk7Ci0gICAgICAgICAgICBzeSAtPSBhYnMoc3ItPmR5KTsKLSAgICAg
ICAgICAgIHN3ICs9IGFicyhzci0+ZHgpOwotICAgICAgICAgICAgc2ggKz0gYWJzKHNyLT5keSk7
Ci0gICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3cs
IHNoKTsKLSAgICAgICAgICAgIElORigidXNpbmcgcmVwYWludCBmb3IgaW5uZXIgZnJhbWUgc2Nv
bGxpbmchIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNz
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQotewotICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpw
ciwgKnByX2VuZDsKLSAgICBzaXplX3QgY291bnQ7Ci0gICAgaW50IHN4LCBzeTsKLQotICAgIGV3
a19mcmFtZV9zY3JvbGxfcG9zX2dldChzZC0+bWFpbl9mcmFtZSwgJnN4LCAmc3kpOwotCi0gICAg
cHIgPSBld2tfdmlld19yZXBhaW50c19nZXQoc2QtPl9wcml2LCAmY291bnQpOwotICAgIHByX2Vu
ZCA9IHByICsgY291bnQ7Ci0gICAgZm9yICg7IHByIDwgcHJfZW5kOyBwcisrKSB7Ci0gICAgICAg
IEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAgICAgIHIueCA9IHByLT54ICsgc3g7Ci0gICAgICAgIHIu
eSA9IHByLT55ICsgc3k7Ci0gICAgICAgIHIudyA9IHByLT53OwotICAgICAgICByLmggPSBwci0+
aDsKLSAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKHNkLT5iYWNraW5nX3N0
b3JlLCAmcik7Ci0gICAgfQotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2VzcyhzZC0+YmFja2luZ19zdG9yZSk7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1z
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9jb250ZW50c19yZXNpemUoRXdr
X1ZpZXdfU21hcnRfRGF0YSAqc2QsIGludCB3LCBpbnQgaCkKLXsKLSAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoc2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOwotICAg
IHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVk
X3NtYXJ0X3pvb21fc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29tLCBFdmFz
X0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQotewotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsK
LSAgICBFaW5hX0Jvb2wgcjsKLSAgICByID0gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9z
ZXQoc2QtPmJhY2tpbmdfc3RvcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZ6b29tLCBjeCwgY3ksICZ4LCAmeSk7Ci0gICAgaWYgKCFyKQotICAgICAgICByZXR1
cm4gcjsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KHNk
LT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOwotICAgIHIgPSBfcGFyZW50X3NjLnpvb21fc2V0
KHNkLCB6b29tLCBjeCwgY3kpOwotICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0KHNkLT5tYWluX2Zy
YW1lLCAteCwgLXkpOwotICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc2QtPm1haW5fZnJh
bWUsICZ3LCAmaCk7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoc2Qt
PmJhY2tpbmdfc3RvcmUsIHcsIGgpOwotICAgIGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhzZCk7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3VsYXRlKHNkLT5iYWNraW5nX3N0b3JlKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxjdWxhdGUoc2QtPnNlbGYpOwotICAgIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiByOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190
aWxlZF9zbWFydF96b29tX3dlYWtfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6
b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQotewotICAgIHJldHVybiBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB6b29tLCBj
eCwgY3kpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFr
X3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBzbW9v
dGhfc2NhbGUpCi17Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290
aF9zY2FsZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHNtb290aF9zY2FsZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9mbHVzaChFd2tfVmlld19TbWFydF9EYXRhICpz
ZCkKLXsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChzZC0+YmFja2luZ19zdG9y
ZSk7Ci0gICAgX3BhcmVudF9zYy5mbHVzaChzZCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9uKEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3Jk
IGgsIGZsb2F0IHpvb20pCi17Ci0gICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVnaW9uCi0gICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgeCwgeSwgdywgaCwg
em9vbSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9y
ZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25lZCBp
bnQgbiwgZmxvYXQgem9vbSkKLXsKLSAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMKLSAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBu
LCB6b29tKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5k
ZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQotewotICAgIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKHNkLT5iYWNraW5nX3N0b3JlKTsKLX0KLQotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2Rpc2FibGVfcmVuZGVyKHNkLT5iYWNraW5nX3N0b3JlKTsKLX0KLQotc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRh
ICpzZCkKLXsKLSAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRl
cihzZC0+YmFja2luZ19zdG9yZSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdmlld190aWxlZF9zbWFy
dF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSkKLXsKLSAgICBpZiAoIWV3a192aWV3X2Jh
c2Vfc21hcnRfc2V0KGFwaSkpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgaWYg
KEVJTkFfVU5MSUtFTFkoIV9wYXJlbnRfc2Muc2MuYWRkKSkKLSAgICAgICAgZXdrX3ZpZXdfYmFz
ZV9zbWFydF9zZXQoJl9wYXJlbnRfc2MpOwotCi0gICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfYWRkOwotCi0gICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmll
d190aWxlZF9zbWFydF9iYWNraW5nX3N0b3JlX2FkZDsKLSAgICBhcGktPnNjcm9sbHNfcHJvY2Vz
cyA9IF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3M7Ci0gICAgYXBpLT5yZXBh
aW50c19wcm9jZXNzID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7Ci0g
ICAgYXBpLT5jb250ZW50c19yZXNpemUgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNf
cmVzaXplOwotICAgIGFwaS0+em9vbV9zZXQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9z
ZXQ7Ci0gICAgYXBpLT56b29tX3dlYWtfc2V0ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21f
d2Vha19zZXQ7Ci0gICAgYXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCA9IF9ld2tfdmll
d190aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldDsKLSAgICBhcGktPmZsdXNo
ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2ZsdXNoOwotICAgIGFwaS0+cHJlX3JlbmRlcl9yZWdp
b24gPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWdpb247Ci0gICAgYXBpLT5w
cmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyA9IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVu
ZGVyX3JlbGF0aXZlX3JhZGl1czsKLSAgICBhcGktPnByZV9yZW5kZXJfY2FuY2VsID0gX2V3a192
aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsOwotICAgIGFwaS0+ZGlzYWJsZV9yZW5k
ZXIgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXI7Ci0gICAgYXBpLT5lbmFi
bGVfcmVuZGVyID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXI7Ci0gICAgcmV0
dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0ICpfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfY2xhc3NfbmV3KHZvaWQpCi17Ci0gICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0
X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFV0tf
Vmlld19UaWxlZCIpOwotICAgIHN0YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IDA7Ci0KLSAgICBp
ZiAoRUlOQV9VTkxJS0VMWSghc21hcnQpKSB7Ci0gICAgICAgIGV3a192aWV3X3RpbGVkX3NtYXJ0
X3NldCgmYXBpKTsKLSAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNj
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc21hcnQ7Ci19Ci0KLUV2YXNfT2JqZWN0ICpld2tfdmll
d190aWxlZF9hZGQoRXZhcyAqZSkKLXsKLSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRk
KGUsIF9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcoKSk7Ci19Ci0KLUV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09i
amVjdCAqbykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0
X2RhdGFfZ2V0KG8pOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZCwgMCk7
Ci0gICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dl
dChzZC0+YmFja2luZ19zdG9yZSk7Ci19Ci0KLXZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2Nh
Y2hlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpjYWNoZSkKLXsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8p
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKLSAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNhY2hl
KTsKLX0KLQotdm9pZCBld2tfdmlld190aWxlZF9wcm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQoRXZh
c19PYmplY3QgKm8sIEVpbmFfQm9vbCBmbGFnKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQobyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QpOwotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Byb2Nlc3NfZW50aXJl
X3F1ZXVlX3NldChzZC0+YmFja2luZ19zdG9yZSwgZmxhZyk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3X3RpbGVkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDUxMjk3ZTE1MGI4MWI0MDJjMDNl
YjJkNmIzY2FiYmVkNTMxYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3X3RpbGVkLmNwcApAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKworI2luY2x1ZGUgImV3a19sb2dnaW5nLmgiCisj
aW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxl
aW5hX3NhZmV0eV9jaGVja3MuaD4KKyNpbmNsdWRlIDxld2tfdGlsZWRfYmFja2luZ19zdG9yZS5o
PgorCitzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVXS19WSUVXX1NN
QVJUX0NMQVNTX0lOSVRfTlVMTDsKKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRf
cmVuZGVyX2NiKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAq
YXJlYSkKK3sKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYgPSAoRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKilkYXRhOworICAgIEVpbmFfUmVjdGFuZ2xlIHIgPSB7YXJlYS0+eCArIHQtPngs
IGFyZWEtPnkgKyB0LT55LCBhcmVhLT53LCBhcmVhLT5ofTsKKworICAgIHJldHVybiBld2tfdmll
d19wYWludF9jb250ZW50cyhwcml2LCB0LT5jYWlybywgJnIpOworfQorCitzdGF0aWMgdm9pZCAq
X2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUodm9pZCAqZGF0YSwgRXZhc19PYmpl
Y3QgKm8pCit7CisgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwcml2ID0gKEV3a19WaWV3X1By
aXZhdGVfRGF0YSopZGF0YTsKKyAgICBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2
ZShwcml2KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIEV2YXNfT2JqZWN0ICpfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Qp
Cit7CisgICAgRXZhc19PYmplY3QgKmJzID0gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKHNk
LT5iYXNlLmV2YXMpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQK
KyAgICAgICAgKGJzLCBfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiLCBzZC0+X3ByaXYpOworICAg
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0CisgICAgICAg
IChicywgX2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUsIHNkLT5fcHJpdik7Cisg
ICAgcmV0dXJuIGJzOworfQorCitzdGF0aWMgdm9pZAorX2V3a192aWV3X3RpbGVkX2NvbnRlbnRz
X3NpemVfY2hhbmdlZF9jYih2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbywgdm9pZCAqZXZlbnRf
aW5mbykKK3sKKyAgICBFdmFzX0Nvb3JkICpzaXplID0gKEV2YXNfQ29vcmQqKWV2ZW50X2luZm87
CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZGF0
YTsKKworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZQorICAgICAg
ICAoc2QtPmJhY2tpbmdfc3RvcmUsIHNpemVbMF0sIHNpemVbMV0pOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEgKnNkOworCisgICAgX3BhcmVudF9zYy5zYy5hZGQobyk7CisKKyAgICBz
ZCA9IChFd2tfVmlld19TbWFydF9EYXRhKilldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKTsK
KyAgICBpZiAoIXNkKQorICAgICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19hZGQoCisgICAgICAgIHNkLT5tYWluX2ZyYW1lLCAiY29udGVudHMsc2l6ZSxjaGFu
Z2VkIiwKKyAgICAgICAgX2V3a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYiwg
c2QpOworICAgIGV3a19mcmFtZV9wYWludF9mdWxsX3NldChzZC0+bWFpbl9mcmFtZSwgRUlOQV9U
UlVFKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xs
c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIGNvbnN0IEV3a19TY3Jv
bGxfUmVxdWVzdCAqc3I7CisgICAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0ICpzcl9lbmQ7Cisg
ICAgc2l6ZV90IGNvdW50OworICAgIEV2YXNfQ29vcmQgdncsIHZoOworCisgICAgZXdrX2ZyYW1l
X2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmdncsICZ2aCk7CisKKyAgICBzciA9
IGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoc2QtPl9wcml2LCAmY291bnQpOworICAgIHNy
X2VuZCA9IHNyICsgY291bnQ7CisgICAgZm9yICg7IHNyIDwgc3JfZW5kOyBzcisrKSB7CisgICAg
ICAgIGlmIChzci0+bWFpbl9zY3JvbGwpCisgICAgICAgICAgICBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkCisgICAgICAgICAgICAgICAgKHNkLT5iYWNraW5n
X3N0b3JlLCBzci0+ZHgsIHNyLT5keSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRXZh
c19Db29yZCBzeCwgc3ksIHN3LCBzaDsKKworICAgICAgICAgICAgc3ggPSBzci0+eDsKKyAgICAg
ICAgICAgIHN5ID0gc3ItPnk7CisgICAgICAgICAgICBzdyA9IHNyLT53OworICAgICAgICAgICAg
c2ggPSBzci0+aDsKKworICAgICAgICAgICAgaWYgKGFicyhzci0+ZHgpID49IHN3IHx8IGFicyhz
ci0+ZHkpID49IHNoKSB7CisgICAgICAgICAgICAgICAgLyogZG91YnQgd2Via2l0IHdvdWxkIGJl
IHNvICAgICBzdHVwaWQuLi4gKi8KKyAgICAgICAgICAgICAgICBEQkcoImZ1bGwgcGFnZSBzY3Jv
bGwgJSswM2QsJSswM2QuIGNvbnZlcnQgdG8gcmVwYWludCAlZCwlZCArICVkeCVkIiwKKyAgICAg
ICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoKTsKKyAgICAgICAg
ICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHN4ICsgc3cgPiB2dykKKyAgICAgICAgICAgICAgICBzdyA9IHZ3IC0gc3g7CisgICAgICAg
ICAgICBpZiAoc3kgKyBzaCA+IHZoKQorICAgICAgICAgICAgICAgIHNoID0gdmggLSBzeTsKKwor
ICAgICAgICAgICAgaWYgKHN3IDwgMCkKKyAgICAgICAgICAgICAgICBzdyA9IDA7CisgICAgICAg
ICAgICBpZiAoc2ggPCAwKQorICAgICAgICAgICAgICAgIHNoID0gMDsKKworICAgICAgICAgICAg
aWYgKCFzdyB8fCAhc2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IHN4IC09IGFicyhzci0+ZHgpOworICAgICAgICAgICAgc3kgLT0gYWJzKHNyLT5keSk7CisgICAg
ICAgICAgICBzdyArPSBhYnMoc3ItPmR4KTsKKyAgICAgICAgICAgIHNoICs9IGFicyhzci0+ZHkp
OworICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3
LCBzaCk7CisgICAgICAgICAgICBJTkYoInVzaW5nIHJlcGFpbnQgZm9yIGlubmVyIGZyYW1lIHNj
b2xsaW5nISIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30K
Kworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcmVwYWludHNfcHJvY2Vz
cyhFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSAq
cHIsICpwcl9lbmQ7CisgICAgc2l6ZV90IGNvdW50OworICAgIGludCBzeCwgc3k7CisKKyAgICBl
d2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZzeCwgJnN5KTsKKworICAg
IHByID0gZXdrX3ZpZXdfcmVwYWludHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBwcl9l
bmQgPSBwciArIGNvdW50OworICAgIGZvciAoOyBwciA8IHByX2VuZDsgcHIrKykgeworICAgICAg
ICBFaW5hX1JlY3RhbmdsZSByOworICAgICAgICByLnggPSBwci0+eCArIHN4OworICAgICAgICBy
LnkgPSBwci0+eSArIHN5OworICAgICAgICByLncgPSBwci0+dzsKKyAgICAgICAgci5oID0gcHIt
Pmg7CisgICAgICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShzZC0+YmFja2luZ19z
dG9yZSwgJnIpOworICAgIH0KKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3By
b2Nlc3Moc2QtPmJhY2tpbmdfc3RvcmUpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVzaXplKEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBpbnQgdywgaW50IGgpCit7CisgICAgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAg
ICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxl
ZF9zbWFydF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZh
c19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK3sKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7
CisgICAgRWluYV9Cb29sIHI7CisgICAgciA9IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21f
c2V0KHNkLT5iYWNraW5nX3N0b3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmem9vbSwgY3gsIGN5LCAmeCwgJnkpOworICAgIGlmICghcikKKyAgICAgICAgcmV0
dXJuIHI7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChz
ZC0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsKKyAgICByID0gX3BhcmVudF9zYy56b29tX3Nl
dChzZCwgem9vbSwgY3gsIGN5KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NldChzZC0+bWFpbl9m
cmFtZSwgLXgsIC15KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNkLT5tYWluX2Zy
YW1lLCAmdywgJmgpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKHNk
LT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3Moc2Qp
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGN1bGF0ZShzZC0+YmFja2luZ19zdG9yZSk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3VsYXRlKHNkLT5zZWxmKTsKKyAgICBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gcjsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK3sKKyAgICByZXR1cm4gZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChzZC0+YmFja2luZ19zdG9yZSwgem9vbSwg
Y3gsIGN5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vh
a19zbW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFaW5hX0Jvb2wgc21v
b3RoX3NjYWxlKQoreworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9v
dGhfc2NhbGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOworfQorCitzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QpCit7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goc2QtPmJhY2tpbmdfc3Rv
cmUpOworICAgIF9wYXJlbnRfc2MuZmx1c2goc2QpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFydF9EYXRh
ICpzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29y
ZCBoLCBmbG9hdCB6b29tKQoreworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlZ2lvbgorICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHgsIHksIHcsIGgs
IHpvb20pOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFd2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5zaWduZWQg
aW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzCisgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwg
biwgem9vbSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVu
ZGVyX2NhbmNlbChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChzZC0+YmFja2luZ19zdG9yZSk7Cit9CisKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2FibGVfcmVuZGVyKEV3a19W
aWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9kaXNhYmxlX3JlbmRlcihzZC0+YmFja2luZ19zdG9yZSk7Cit9CisKK3N0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc2QpCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5k
ZXIoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfdGlsZWRfc21h
cnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGkpCit7CisgICAgaWYgKCFld2tfdmlld19i
YXNlX3NtYXJ0X3NldChhcGkpKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIGlm
IChFSU5BX1VOTElLRUxZKCFfcGFyZW50X3NjLnNjLmFkZCkpCisgICAgICAgIGV3a192aWV3X2Jh
c2Vfc21hcnRfc2V0KCZfcGFyZW50X3NjKTsKKworICAgIGFwaS0+c2MuYWRkID0gX2V3a192aWV3
X3RpbGVkX3NtYXJ0X2FkZDsKKworICAgIGFwaS0+YmFja2luZ19zdG9yZV9hZGQgPSBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQ7CisgICAgYXBpLT5zY3JvbGxzX3Byb2Nl
c3MgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19wcm9jZXNzOworICAgIGFwaS0+cmVw
YWludHNfcHJvY2VzcyA9IF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzOwor
ICAgIGFwaS0+Y29udGVudHNfcmVzaXplID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NvbnRlbnRz
X3Jlc2l6ZTsKKyAgICBhcGktPnpvb21fc2V0ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21f
c2V0OworICAgIGFwaS0+em9vbV93ZWFrX3NldCA9IF9ld2tfdmlld190aWxlZF9zbWFydF96b29t
X3dlYWtfc2V0OworICAgIGFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQ7CisgICAgYXBpLT5mbHVz
aCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9mbHVzaDsKKyAgICBhcGktPnByZV9yZW5kZXJfcmVn
aW9uID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9uOworICAgIGFwaS0+
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3Jl
bmRlcl9yZWxhdGl2ZV9yYWRpdXM7CisgICAgYXBpLT5wcmVfcmVuZGVyX2NhbmNlbCA9IF9ld2tf
dmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNlbDsKKyAgICBhcGktPmRpc2FibGVfcmVu
ZGVyID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2FibGVfcmVuZGVyOworICAgIGFwaS0+ZW5h
YmxlX3JlbmRlciA9IF9ld2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVyOworICAgIHJl
dHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXZhc19TbWFydCAqX2V3a192aWV3
X3RpbGVkX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQoreworICAgIHN0YXRpYyBFd2tfVmlld19TbWFy
dF9DbGFzcyBhcGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRVdL
X1ZpZXdfVGlsZWQiKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSAwOworCisgICAg
aWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0KSkgeworICAgICAgICBld2tfdmlld190aWxlZF9zbWFy
dF9zZXQoJmFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5z
Yyk7CisgICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OworfQorCitFdmFzX09iamVjdCAqZXdrX3Zp
ZXdfdGlsZWRfYWRkKEV2YXMgKmUpCit7CisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChlLCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY2xhc3NfbmV3KCkpOworfQorCitFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKmV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19P
YmplY3QgKm8pCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFy
dF9kYXRhX2dldChvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QsIDAp
OworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9n
ZXQoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCit2b2lkIGV3a192aWV3X3RpbGVkX3VudXNlZF9j
YWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqY2FjaGUpCit7
CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChv
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZCk7CisgICAgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBjYWNo
ZSk7Cit9CisKK3ZvaWQgZXdrX3ZpZXdfdGlsZWRfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0KEV2
YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZmxhZykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRh
ICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNkKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcm9jZXNzX2VudGly
ZV9xdWV1ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGZsYWcpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104635</attachid>
            <date>2011-08-21 18:16:17 -0700</date>
            <delta_ts>2011-09-04 18:14:03 -0700</delta_ts>
            <desc>comment_changed</desc>
            <filename>bug-66542-20110822101614.patch</filename>
            <type>text/plain</type>
            <size>61575</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM0OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZDVhZTNmZWZiYmVkZmM5NDBjZTBlMzViMDliODU0Yjg5ZWNjYWU3ZS4uN2Q1NTZiMzYz
Yjg1Y2Q2YjM5MjM5ODc1NjcxYWM5MGI4NTAwYzFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc3LDggKzc3LDggQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAg
ICBlZmwvZXdrL2V3a192aWV3LmNwcAotICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKLSAg
ICBlZmwvZXdrL2V3a192aWV3X3RpbGVkLmMKKyAgICBlZmwvZXdrL2V3a192aWV3X3NpbmdsZS5j
cHAKKyAgICBlZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcAogICAgIGVmbC9ld2svZXdrX3dpbmRv
d19mZWF0dXJlcy5jcHAKICkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDIxZWYxMWQzOTY5Nzc4OGVi
OTAwMzI2ZTk4MGY5OGE3NmVhNTYxMzUuLjA5YWU0M2QyODRiNjkyMWY4ZGI4OTI3NzJlZGM0N2Q1
NjA2M2Q1OGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAxMS0wOC0yMSAg
Unl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVu
YW1lIGV3a192aWV3XyhzaW5nbGV8dGlsZWQpLmMgdG8gZXdrX3ZpZXdfKHNpbmdsZXx0aWxlZCku
Y3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjU0
MgorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2UgZmlsZXMsIHNvIHRoYXQg
dGhleSBjYW4gaW5jbHVkZSB0aGUgQysrLXVzaW5nCisgICAgICAgIGV3a19wcml2YXRlLmguCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzRWZsLnR4dDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXdfc2luZ2xlLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYy4KKyAgICAgICAgKF9l
d2tfdmlld19zaW5nbGVfb25fZGVsKToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRf
YWRkKToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQp
OgorICAgICAgICAoX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemUpOgorICAgICAgICAoX2V3
a192aWV3XzRiX21vdmVfcmVnaW9uX3VwKToKKyAgICAgICAgKF9ld2tfdmlld180Yl9tb3ZlX3Jl
Z2lvbl9kb3duKToKKyAgICAgICAgKF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdCk6CisgICAg
ICAgIChfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KToKKyAgICAgICAgKF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl9sZWZ0KToKKyAgICAgICAgKF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9y
aWdodCk6CisgICAgICAgIChfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb24pOgorICAgICAgICAoX2V3
a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vzc19zaW5nbGUpOgorICAgICAgICAoX2V3a192aWV3
X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nlc3MpOgorICAgICAgICAoX2V3a192aWV3X3Npbmds
ZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21h
cnRfem9vbV93ZWFrX3NldCk6CisgICAgICAgIChfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0KToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRf
YmdfY29sb3Jfc2V0KToKKyAgICAgICAgKGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQpOgorICAg
ICAgICAoX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcpOgorICAgICAgICAoZXdrX3Zp
ZXdfc2luZ2xlX2FkZCk6CisgICAgICAgICogZXdrL2V3a192aWV3X3RpbGVkLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jLgorICAgICAgICAo
X2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYik6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfdXBk
YXRlc19wcm9jZXNzX3ByZSk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2lu
Z19zdG9yZV9hZGQpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hh
bmdlZF9jYik6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYWRkKToKKyAgICAgICAg
KF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3MpOgorICAgICAgICAoX2V3a192
aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MpOgorICAgICAgICAoX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZSk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21h
cnRfem9vbV9zZXQpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19z
ZXQpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2Nh
bGVfc2V0KToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9mbHVzaCk6CisgICAgICAg
IChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWdpb24pOgorICAgICAgICAoX2V3
a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKToKKyAgICAgICAg
KF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNlbCk6CisgICAgICAgIChfZXdr
X3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXIpOgorICAgICAgICAoX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXIpOgorICAgICAgICAoZXdrX3ZpZXdfdGlsZWRfc21hcnRf
c2V0KToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcpOgorICAgICAg
ICAoZXdrX3ZpZXdfdGlsZWRfYWRkKToKKyAgICAgICAgKGV3a192aWV3X3RpbGVkX3VudXNlZF9j
YWNoZV9nZXQpOgorICAgICAgICAoZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldCk6Cisg
ICAgICAgIChld2tfdmlld190aWxlZF9wcm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQpOgorCiAyMDEx
LTA4LTIwICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFtFRkxdIEZpeCBhbmQgdXBkYXRlIGRveHlnZW4gZG9jdW1lbnRhdGlvbiBmb3Ig
ZXdrX3ZpZXcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2lu
Z2xlLmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZGE5NDY1OTM0ZDIxYTNjOTAyM2YyYzEzMzM1MjdlZDg0
OWI5NGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jCisrKyAvZGV2L251bGwKQEAgLTEs
NTY4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVt
YmVkZGVkIHN5c3RlbXMKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0
cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImV3a192aWV3LmgiCi0K
LSNpbmNsdWRlICJld2tfZnJhbWUuaCIKLSNpbmNsdWRlICJld2tfbG9nZ2luZy5oIgotCi0jaW5j
bHVkZSA8RXZhcy5oPgotI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotCi1zdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVX
S19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3Np
bmdsZV9vbl9kZWwodm9pZCAqZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKm8sIHZvaWQgKmV2
ZW50X2luZm8pCi17Ci0gICAgRXZhc19PYmplY3QgKmNsaXAgPSAoRXZhc19PYmplY3QqKWRhdGE7
Ci0gICAgZXZhc19vYmplY3RfZGVsKGNsaXApOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X2FkZChFdmFzX09iamVjdCAqbykKLXsKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhICpzZDsKLQotICAgIF9wYXJlbnRfc2Muc2MuYWRkKG8pOwotCi0gICAgc2QgPSAoRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqKWV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pOwotICAgIGlmICgh
c2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV2YXNfT2JqZWN0ICpjbGlwID0gZXZhc19vYmpl
Y3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFzKTsKLSAgICBldmFzX29iamVjdF9jbGlwX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgY2xpcCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2FkZChjbGlwLCBvKTsKLSAgICBldmFzX29iamVjdF9zaG93KGNsaXApOwotCi0gICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkCi0gICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgRVZB
U19DQUxMQkFDS19ERUwsIF9ld2tfdmlld19zaW5nbGVfb25fZGVsLCBjbGlwKTsKLX0KLQotc3Rh
dGljIEV2YXNfT2JqZWN0ICpfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRk
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQotewotICAgIEV2YXNfT2JqZWN0ICpicyA9IGV2YXNf
b2JqZWN0X2ltYWdlX2FkZChzZC0+YmFzZS5ldmFzKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9h
bHBoYV9zZXQoYnMsIEVJTkFfRkFMU0UpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9z
Y2FsZV9zZXQoYnMsIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlKTsKLQotICAgIHJldHVybiBi
czsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemUoRXZhc19P
YmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQotewotICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2YXNfb2JqZWN0X3NtYXJ0X2Rh
dGFfZ2V0KG8pOwotICAgIF9wYXJlbnRfc2Muc2MucmVzaXplKG8sIHcsIGgpOwotCi0gICAgaWYg
KCFzZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBh
bmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQotICAgIGV2YXNfb2JqZWN0X2ltYWdl
X3NpemVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKLSAgICBpZiAoc2QtPmFuaW1hdGVk
X3pvb20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkgewotICAgICAgICBFdmFzX09iamVjdCAqY2xp
cCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKLSAgICAgICAgRXZh
c19Db29yZCB4LCB5LCBjdywgY2g7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0
KHNkLT5iYWNraW5nX3N0b3JlLCAwLCAwLCB3LCBoKTsKLSAgICAgICAgZXZhc19vYmplY3RfZ2Vv
bWV0cnlfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAmeCwgJnksIDAsIDApOwotICAgICAgICBldmFz
X29iamVjdF9tb3ZlKGNsaXAsIHgsIHkpOwotICAgICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6
ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICAgICAgaWYgKHcgPiBjdykKLSAg
ICAgICAgICAgIHcgPSBjdzsKLSAgICAgICAgaWYgKGggPiBjaCkKLSAgICAgICAgICAgIGggPSBj
aDsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOwotICAgIH0KLX0KLQot
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCAq
aW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3Qg
aCwgc2l6ZV90IHJvd3NpemUpCi17Ci0gICAgdWludDMyX3QgKnNyYzsKLSAgICB1aW50MzJfdCAq
ZHN0OwotCi0gICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7Ci0gICAgc3JjID0gZHN0
ICsgcm93cyAqIHJvd3NpemU7Ci0gICAgaCAtPSByb3dzOwotCi0gICAgZm9yICg7IGggPiAwOyBo
LS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwg
c3JjLCB3ICogNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9y
ZWdpb25fZG93bih1aW50MzJfdCAqaW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90
IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCi17Ci0gICAgdWludDMyX3Qg
KnNyYzsKLSAgICB1aW50MzJfdCAqZHN0OwotCi0gICAgaCAtPSByb3dzOwotICAgIHNyYyA9IGlt
YWdlICsgeCArICh5ICsgaCAtIDEpICogcm93c2l6ZTsKLSAgICBkc3QgPSBzcmMgKyByb3dzICog
cm93c2l6ZTsKLQotICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09
IHJvd3NpemUpCi0gICAgICAgIG1lbWNweShkc3QsIHNyYywgdyAqIDQpOwotfQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KHVpbnQzMl90ICpkc3QsIGNv
bnN0IHVpbnQzMl90ICpzcmMsIHNpemVfdCBjb3VudCkKLXsKLSAgICB1aW50MzJfdCAqZHN0X2Vu
ZCA9IGRzdCArIGNvdW50OwotICAgIC8qIG5vIG1lbWNweSgpIGFzIGl0IGRvZXMgbm90IGFsbG93
IG92ZXJsYXBwaW5nIHJlZ2lvbnMgKi8KLSAgICAvKiBubyBtZW1tb3ZlKCkgYXMgaXQgd2lsbCBj
b3B5IHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgIC8qIFRPRE86IGxvb3AgdW5yb2xsaW5n
LCBjb3B5aW5nIHVwIHRvIHF1YWQtd29yZHMgd291bGQgaGVscCAqLwotICAgIGZvciAoOyBkc3Qg
PCBkc3RfZW5kOyBkc3QrKywgc3JjKyspCi0gICAgICAgICpkc3QgPSAqc3JjOwotfQotCi1zdGF0
aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodCh1aW50MzJfdCAqZHN0
LCB1aW50MzJfdCAqc3JjLCBzaXplX3QgY291bnQpCi17Ci0gICAgdWludDMyX3QgKmRzdF9lbmQg
PSBkc3QgLSBjb3VudDsKLSAgICAvKiBubyBtZW1jcHkoKSBhcyBpdCBkb2VzIG5vdCBhbGxvdyBv
dmVybGFwcGluZyByZWdpb25zICovCi0gICAgLyogbm8gbWVtbW92ZSgpIGFzIGl0IHdpbGwgY29w
eSB0byBhIHRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICAvKiBUT0RPOiBsb29wIHVucm9sbGluZywg
Y29weWluZyB1cCB0byBxdWFkLXdvcmRzIHdvdWxkIGhlbHAgKi8KLSAgICBmb3IgKDsgZHN0ID4g
ZHN0X2VuZDsgZHN0LS0sIHNyYy0tKQotICAgICAgICAqZHN0ID0gKnNyYzsKLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0KHVpbnQzMl90ICppbWFn
ZSwgc2l6ZV90IGNvbHMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBz
aXplX3Qgcm93c2l6ZSkKLXsKLSAgICB1aW50MzJfdCAqc3JjOwotICAgIHVpbnQzMl90ICpkc3Q7
Ci0KLSAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKLSAgICBzcmMgPSBkc3QgKyBj
b2xzOwotICAgIHcgLT0gY29sczsKLQotICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93
c2l6ZSwgc3JjICs9IHJvd3NpemUpCi0gICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVm
dChkc3QsIHNyYywgdyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92
ZV9yZWdpb25fcmlnaHQodWludDMyX3QgKmltYWdlLCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNp
emVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQotewotICAgIHVpbnQz
Ml90ICpzcmM7Ci0gICAgdWludDMyX3QgKmRzdDsKLQotICAgIHcgLT0gY29sczsKLSAgICBzcmMg
PSBpbWFnZSArICh4ICsgdyAtIDEpICsgeSAqIHJvd3NpemU7Ci0gICAgZHN0ID0gc3JjICsgY29s
czsKLQotICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3Np
emUpCi0gICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOwot
fQotCi0vKiBjYXRjaC1hbGwgZnVuY3Rpb24sIG5vdCBhcyBvcHRpbWl6ZWQgYXMgdGhlIG90aGVy
cywgYnV0IGRvZXMgdGhlIHdvcmsuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRi
X21vdmVfcmVnaW9uKHVpbnQzMl90ICppbWFnZSwgaW50IGR4LCBpbnQgZHksIHNpemVfdCB4LCBz
aXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKLXsKLSAgICB1aW50
MzJfdCAqc3JjOwotICAgIHVpbnQzMl90ICpkc3Q7Ci0KLSAgICBpZiAoZHkgPCAwKSB7Ci0gICAg
ICAgIGggKz0gZHk7Ci0gICAgICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiByb3dzaXplOwotICAg
ICAgICBzcmMgPSBkc3QgLSBkeSAqIHJvd3NpemU7Ci0gICAgICAgIGlmIChkeCA8PSAwKSB7Ci0g
ICAgICAgICAgICB3ICs9IGR4OwotICAgICAgICAgICAgc3JjIC09IGR4OwotICAgICAgICAgICAg
Zm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAg
ICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdyAtPSBkeDsKLSAgICAgICAgICAgIHNyYyArPSB3
IC0gMTsKLSAgICAgICAgICAgIGRzdCArPSB3ICsgZHggLTE7Ci0gICAgICAgICAgICBmb3IgKDsg
aCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAgICAgICAgICAg
ICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaCAtPSBkeTsKLSAgICAgICAgc3JjID0gaW1hZ2UgKyB4
ICsgKHkgKyBoIC0gMSkgKiByb3dzaXplOwotICAgICAgICBkc3QgPSBzcmMgKyBkeSAqIHJvd3Np
emU7Ci0gICAgICAgIGlmIChkeCA8PSAwKSB7Ci0gICAgICAgICAgICB3ICs9IGR4OwotICAgICAg
ICAgICAgc3JjIC09IGR4OwotICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSBy
b3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKLSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92
ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
dyAtPSBkeDsKLSAgICAgICAgICAgIHNyYyArPSB3IC0gMTsKLSAgICAgICAgICAgIGRzdCArPSB3
ICsgZHggLSAxOwotICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXpl
LCBzcmMgLT0gcm93c2l6ZSkKLSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5l
X3JpZ2h0KGRzdCwgc3JjLCB3KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkLCB2b2lkICpwaXhlbHMsIEV2YXNfQ29vcmQgb3csIEV2YXNfQ29vcmQgb2gs
IGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqc3IpCi17Ci0gICAgRXZhc19Db29yZCBzeCwgc3ks
IHN3LCBzaDsKLQotICAgIERCRygiJWQsJWQgKyAlZCwlZCAlKzAzZCwlKzAzZCwgc3RvcmU6ICVw
ICVkeCVkIiwKLSAgICAgICAgc3ItPngsIHNyLT55LCBzci0+dywgc3ItPmgsIHNyLT5keCwgc3It
PmR5LCBwaXhlbHMsIG93LCBvaCk7Ci0KLSAgICBzeCA9IHNyLT54OwotICAgIHN5ID0gc3ItPnk7
Ci0gICAgc3cgPSBzci0+dzsKLSAgICBzaCA9IHNyLT5oOwotCi0gICAgaWYgKGFicyhzci0+ZHgp
ID49IHN3IHx8IGFicyhzci0+ZHkpID49IHNoKSB7Ci0gICAgICAgIC8qIGRvdWJ0IHdlYmtpdCB3
b3VsZCBiZSBzbyBzdHVwaWQuLi4gKi8KLSAgICAgICAgREJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUr
MDNkLCUrMDNkLiBjb252ZXJ0IHRvIHJlcGFpbnQgJWQsJWQgKyAlZHglZCIsCi0gICAgICAgICAg
ICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywgc2gpOwotICAgICAgICBld2tfdmlld19yZXBh
aW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChzeCA8IDApIHsKLSAgICAgICAgc3cgKz0gc3g7Ci0gICAgICAgIHN4ID0g
MDsKLSAgICB9Ci0gICAgaWYgKHN5IDwgMCkgewotICAgICAgICBzaCArPSBzeTsKLSAgICAgICAg
c3kgPSAwOwotICAgIH0KLQotICAgIGlmIChzeCArIHN3ID4gb3cpCi0gICAgICAgIHN3ID0gb3cg
LSBzeDsKLSAgICBpZiAoc3kgKyBzaCA+IG9oKQotICAgICAgICBzaCA9IG9oIC0gc3k7Ci0KLSAg
ICBpZiAoc3cgPCAwKQotICAgICAgICBzdyA9IDA7Ci0gICAgaWYgKHNoIDwgMCkKLSAgICAgICAg
c2ggPSAwOwotCi0gICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk4oIXN3IHx8ICFzaCk7Ci0g
ICAgaWYgKCFzci0+ZHgpIHsKLSAgICAgICAgaWYgKHNyLT5keSA8IDApIHsKLSAgICAgICAgICAg
IERCRygic2Nyb2xsIHVwOiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKLSAgICAg
ICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHglZCIsCi0gICAgICAgICAgICAgICAgc3ItPmR4
LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoICsgc3ItPmR5LAotICAgICAgICAgICAgICAgIHN4LCBz
eSArIHNoICsgc3ItPmR5LCBzdywgLXNyLT5keSk7Ci0KLSAgICAgICAgICAgIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl91cAotICAgICAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVscywgLXNy
LT5keSwgc3gsIHN5LCBzdywgc2gsIG93KTsKLSAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2RhdGFfdXBkYXRlX2FkZAotICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gs
IHN5LCBzdywgc2ggKyBzci0+ZHkpOwotCi0gICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2Fk
ZChzZC0+X3ByaXYsIHN4LCBzeSArIHNoICsgc3ItPmR5LCBzdywgLXNyLT5keSk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoc3ItPmR5ID4gMCkgewotICAgICAgICAgICAgREJHKCJzY3JvbGwgZG93bjog
JSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCi0gICAgICAgICAgICAgICAgInJlcGFp
bnQ9JWQsJWQrJWR4JWQiLAotICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3kg
KyBzci0+ZHksIHN3LCBzaCAtIHNyLT5keSwKLSAgICAgICAgICAgICAgICBzeCwgc3ksIHN3LCBz
ci0+ZHkpOwotCi0gICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fZG93bgotICAg
ICAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVscywgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCwg
b3cpOwotICAgICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCi0gICAg
ICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzeCwgc3kgKyBzci0+ZHksIHN3LCBzaCAt
IHNyLT5keSk7Ci0KLSAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwg
c3gsIHN5LCBzdywgc3ItPmR5KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXNyLT5keSkg
ewotICAgICAgICBpZiAoc3ItPmR4IDwgMCkgewotICAgICAgICAgICAgREJHKCJzY3JvbGwgbGVm
dDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCi0gICAgICAgICAgICAgICAgInJl
cGFpbnQ9JWQsJWQrJWR4JWQiLAotICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwg
c3ksIHN3ICsgc3ItPmR4LCBzaCwKLSAgICAgICAgICAgICAgICBzeCArIHN3ICsgc3ItPmR4LCBz
eSwgLXNyLT5keCwgc2gpOwotCi0gICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25f
bGVmdAotICAgICAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVscywgLXNyLT5keCwgc3gsIHN5
LCBzdywgc2gsIG93KTsKLSAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRl
X2FkZAotICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gsIHN5LCBzdyArIHNy
LT5keCwgc2gpOwotCi0gICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYs
IHN4ICsgc3cgKyBzci0+ZHgsIHN5LCAtc3ItPmR4LCBzaCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
c3ItPmR4ID4gMCkgewotICAgICAgICAgICAgREJHKCJzY3JvbGwgdXA6ICUrMDNkLCUrMDNkIHVw
ZGF0ZT0lZCwlZCslZHglZCwgIgotICAgICAgICAgICAgICAgICJyZXBhaW50PSVkLCVkKyVkeCVk
IiwKLSAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3ggKyBzci0+ZHgsIHN5LCBzdyAt
IHNyLT5keCwgc2gsCi0gICAgICAgICAgICAgICAgc3gsIHN5LCBzci0+ZHgsIHNoKTsKLQotICAg
ICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3JpZ2h0Ci0gICAgICAgICAgICAgICAg
KCh1aW50MzJfdCopcGl4ZWxzLCBzci0+ZHgsIHN4LCBzeSwgc3csIHNoLCBvdyk7Ci0gICAgICAg
ICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAgICAgICAgICAgICAgICAo
c2QtPmJhY2tpbmdfc3RvcmUsIHN4ICsgc3ItPmR4LCBzeSwgc3cgLSBzci0+ZHgsIHNoKTsKLQot
ICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHNyLT5k
eCwgc2gpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgRXZhc19Db29yZCBteCwg
bXksIG13LCBtaCwgYXgsIGF5LCBhdywgYWgsIGJ4LCBieSwgYncsIGJoOwotCi0gICAgICAgIGlm
IChzci0+ZHggPCAwKSB7Ci0gICAgICAgICAgICBteCA9IHN4OwotICAgICAgICAgICAgbXcgPSBz
dyArIHNyLT5keDsKLSAgICAgICAgICAgIGF4ID0gbXggKyBtdzsKLSAgICAgICAgICAgIGF3ID0g
LXNyLT5keDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF4ID0gc3g7Ci0gICAgICAg
ICAgICBhdyA9IHNyLT5keDsKLSAgICAgICAgICAgIG14ID0gYXggKyBhdzsKLSAgICAgICAgICAg
IG13ID0gc3cgLSBzci0+ZHg7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3ItPmR5IDwgMCkg
ewotICAgICAgICAgICAgbXkgPSBzeTsKLSAgICAgICAgICAgIG1oID0gc2ggKyBzci0+ZHk7Ci0g
ICAgICAgICAgICBieSA9IG15ICsgbWg7Ci0gICAgICAgICAgICBiaCA9IC1zci0+ZHk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBieSA9IHN5OwotICAgICAgICAgICAgYmggPSBzci0+
ZHk7Ci0gICAgICAgICAgICBteSA9IGJ5ICsgYmg7Ci0gICAgICAgICAgICBtaCA9IHNoIC0gc3It
PmR5OwotICAgICAgICB9Ci0KLSAgICAgICAgYXkgPSBteTsKLSAgICAgICAgYWggPSBtaDsKLSAg
ICAgICAgYnggPSBzeDsKLSAgICAgICAgYncgPSBzdzsKLQotICAgICAgICBEQkcoInNjcm9sbCBk
aWFnb25hbDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCi0gICAgICAgICAgICAi
cmVwYWludHM6IGg9JWQsJWQrJWR4JWQgdj0lZCwlZCslZHglZCIsCi0gICAgICAgICAgICBzci0+
ZHgsIHNyLT5keSwgbXgsIG15LCBtdywgbWgsIGF4LCBheSwgYXcsIGFoLCBieCwgYnksIGJ3LCBi
aCk7Ci0KLSAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uCi0gICAgICAgICAgICAoKHVp
bnQzMl90KilwaXhlbHMsIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCwgb3cpOwotCi0g
ICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzZC0+YmFja2luZ19zdG9y
ZSwgbXgsIG15LCBtdywgbWgpOwotICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3By
aXYsIGF4LCBheSwgYXcsIGFoKTsKLSAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9w
cml2LCBieCwgYnksIGJ3LCBiaCk7Ci0gICAgfQotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
KQotewotICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqc3I7Ci0gICAgY29uc3QgRXdrX1Nj
cm9sbF9SZXF1ZXN0ICpzcl9lbmQ7Ci0gICAgRXZhc19Db29yZCBvdywgb2g7Ci0gICAgc2l6ZV90
IGNvdW50OwotICAgIHZvaWQgKnBpeGVscyA9IGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNk
LT5iYWNraW5nX3N0b3JlLCAxKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChzZC0+
YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOwotCi0gICAgc3IgPSBld2tfdmlld19zY3JvbGxfcmVx
dWVzdHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKLSAgICBzcl9lbmQgPSBzciArIGNvdW50Owot
ICAgIGZvciAoOyBzciA8IHNyX2VuZDsgc3IrKykKLSAgICAgICAgX2V3a192aWV3X3NpbmdsZV9z
Y3JvbGxfcHJvY2Vzc19zaW5nbGUoc2QsIHBpeGVscywgb3csIG9oLCBzcik7Ci0KLSAgICBldmFz
X29iamVjdF9pbWFnZV9kYXRhX3NldChzZC0+YmFja2luZ19zdG9yZSwgcGl4ZWxzKTsKLQotICAg
IHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Npbmds
ZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQotewotICAg
IEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQ7Ci0gICAgRXZhc19Db29yZCBvdywgb2g7Ci0g
ICAgdm9pZCAqcGl4ZWxzOwotICAgIEVpbmFfUmVjdGFuZ2xlICpyOwotICAgIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICpwcjsKLSAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSAqcHJfZW5kOwotICAgIEVp
bmFfVGlsZXIgKnRpbGVyOwotICAgIEVpbmFfSXRlcmF0b3IgKml0cjsKLSAgICBjYWlyb19zdGF0
dXNfdCBzdGF0dXM7Ci0gICAgY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOwotICAgIGNhaXJvX2Zv
cm1hdF90IGZvcm1hdDsKLSAgICBjYWlyb190ICpjYWlybzsKLSAgICBzaXplX3QgY291bnQ7Ci0g
ICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsKLQotICAgIGlmIChzZC0+YW5pbWF0ZWRfem9v
bS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7Ci0gICAgICAgIEV2YXNfT2JqZWN0ICpjbGlwID0g
ZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOwotICAgICAgICBFdmFzX0Nv
b3JkIHcsIGgsIGN3LCBjaDsKLSAgICAgICAgLy8gcmVzZXQgZWZmZWN0cyBvZiB6b29tX3dlYWtf
c2V0KCkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQKLSAgICAgICAgICAgIChz
ZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc2QtPnZpZXcueCwgc2QtPnZpZXcueSk7Ci0KLSAgICAg
ICAgdyA9IHNkLT52aWV3Lnc7Ci0gICAgICAgIGggPSBzZC0+dmlldy5oOwotCi0gICAgICAgIGV3
a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpOwotICAg
ICAgICBpZiAodyA+IGN3KQotICAgICAgICAgICAgdyA9IGN3OwotICAgICAgICBpZiAoaCA+IGNo
KQotICAgICAgICAgICAgaCA9IGNoOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwg
dywgaCk7Ci0gICAgfQotCi0gICAgcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQo
c2QtPmJhY2tpbmdfc3RvcmUsIDEpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNk
LT5iYWNraW5nX3N0b3JlLCAmb3csICZvaCk7Ci0gICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FS
R0IzMjsKLQotICAgIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YQotICAgICAgICAoKHVuc2lnbmVkIGNoYXIqKXBpeGVscywgZm9ybWF0LCBvdywgb2gsIG93ICog
NCk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSk7Ci0gICAgaWYg
KHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewotICAgICAgICBFUlIoImNvdWxkIG5v
dCBjcmVhdGUgc3VyZmFjZSBmcm9tIGRhdGEgJWR4JWQ6ICVzIiwKLSAgICAgICAgICAgIG93LCBv
aCwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKLSAgICAgICAgcmV0ID0gRUlOQV9G
QUxTRTsKLSAgICAgICAgZ290byBlcnJvcl9jYWlyb19zdXJmYWNlOwotICAgIH0KLSAgICBjYWly
byA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXMoY2Fp
cm8pOwotICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAg
RVJSKCJjb3VsZCBub3QgY3JlYXRlIGNhaXJvIGZyb20gc3VyZmFjZSAlZHglZDogJXMiLAotICAg
ICAgICAgICAgb3csIG9oLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAg
ICByZXQgPSBFSU5BX0ZBTFNFOwotICAgICAgICBnb3RvIGVycm9yX2NhaXJvOwotICAgIH0KLQot
ICAgIGN0eHQgPSBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhzZC0+X3ByaXYsIGNhaXJvKTsK
LSAgICBpZiAoIWN0eHQpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHBhaW50IGNv
bnRleHQiKTsKLSAgICAgICAgcmV0ID0gRUlOQV9GQUxTRTsKLSAgICAgICAgZ290byBlcnJvcl9w
YWludF9jb250ZXh0OwotICAgIH0KLQotICAgIHRpbGVyID0gZWluYV90aWxlcl9uZXcob3csIG9o
KTsKLSAgICBpZiAoIXRpbGVyKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxl
ciAlZHglZCIsIG93LCBvaCk7Ci0gICAgICAgIHJldCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGdv
dG8gZXJyb3JfdGlsZXI7Ci0gICAgfQotCi0gICAgcHIgPSBld2tfdmlld19yZXBhaW50c19nZXQo
c2QtPl9wcml2LCAmY291bnQpOwotICAgIHByX2VuZCA9IHByICsgY291bnQ7Ci0gICAgZm9yICg7
IHByIDwgcHJfZW5kOyBwcisrKQotICAgICAgICBlaW5hX3RpbGVyX3JlY3RfYWRkKHRpbGVyLCBw
cik7Ci0KLSAgICBpdHIgPSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0aWxlcik7Ci0gICAgaWYg
KCFpdHIpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yIGZvciB0aWxlciIp
OwotICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOwotICAgICAgICBnb3RvIGVycm9yX2l0ZXJhdG9y
OwotICAgIH0KLQotICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNkLT5f
cHJpdik7Ci0KLSAgICBpbnQgc3gsIHN5OwotICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChz
ZC0+bWFpbl9mcmFtZSwgJnN4LCAmc3kpOwotCi0gICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0
ciwgcikgewotICAgICAgICBFaW5hX1JlY3RhbmdsZSBzY3JvbGxlZF9yZWN0ID0gewotICAgICAg
ICAgICAgci0+eCArIHN4LCByLT55ICsgc3ksCi0gICAgICAgICAgICByLT53LCByLT5oCi0gICAg
ICAgIH07Ci0KLSAgICAgICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKGN0eHQpOwotCi0g
ICAgICAgIGlmICgoc3gpIHx8IChzeSkpCi0gICAgICAgICAgICBld2tfdmlld19wYWludF9jb250
ZXh0X3RyYW5zbGF0ZShjdHh0LCAtc3gsIC1zeSk7Ci0KLSAgICAgICAgZXdrX3ZpZXdfcGFpbnRf
Y29udGV4dF9jbGlwKGN0eHQsICZzY3JvbGxlZF9yZWN0KTsKLSAgICAgICAgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9wYWludF9jb250ZW50cyhjdHh0LCAmc2Nyb2xsZWRfcmVjdCk7Ci0KLSAgICAg
ICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKGN0eHQpOwotICAgICAgICBldmFzX29i
amVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9y
ZSwgci0+eCwgci0+eSwgci0+dywgci0+aCk7Ci0gICAgfQotICAgIGVpbmFfaXRlcmF0b3JfZnJl
ZShpdHIpOwotCi1lcnJvcl9pdGVyYXRvcjoKLSAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZXIpOwot
ZXJyb3JfdGlsZXI6Ci0gICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9mcmVlKGN0eHQpOwotZXJy
b3JfcGFpbnRfY29udGV4dDoKLSAgICBjYWlyb19kZXN0cm95KGNhaXJvKTsKLWVycm9yX2NhaXJv
OgotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKLWVycm9yX2NhaXJvX3N1cmZh
Y2U6Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHBp
eGVscyk7IC8qIGRlYyByZWZjb3VudCAqLwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kp
Ci17Ci0gICAgLy8gVE9ETzogcmV2aWV3Ci0gICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gc2QtPmFu
aW1hdGVkX3pvb20uem9vbS5zdGFydDsKLSAgICBFdmFzX0Nvb3JkIHcgPSBzZC0+dmlldy53ICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBoID0gc2QtPnZpZXcuaCAqIHNjYWxlOwotICAgIEV2YXNf
Q29vcmQgZHgsIGR5LCBjdywgY2g7Ci0gICAgRXZhc19PYmplY3QgKmNsaXAgPSBldmFzX29iamVj
dF9jbGlwX2dldChzZC0+YmFja2luZ19zdG9yZSk7Ci0KLSAgICBld2tfZnJhbWVfY29udGVudHNf
c2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICBpZiAoc2QtPnZpZXcudyA+
IDAgJiYgc2QtPnZpZXcuaCA+IDApIHsKLSAgICAgICAgZHggPSAodyAqIChzZC0+dmlldy53IC0g
Y3gpKSAvIHNkLT52aWV3Lnc7Ci0gICAgICAgIGR5ID0gKGggKiAoc2QtPnZpZXcuaCAtIGN5KSkg
LyBzZC0+dmlldy5oOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGR4ID0gMDsKLSAgICAgICAgZHkg
PSAwOwotICAgIH0KLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5n
X3N0b3JlLCBjeCArIGR4LCBjeSArIGR5LCB3LCBoKTsKLQotICAgIGlmIChzZC0+dmlldy53ID4g
MCAmJiBzZC0+dmlldy5oID4gMCkgewotICAgICAgICBkeCA9ICgoc2QtPnZpZXcudyAtIHcpICog
Y3gpIC8gc2QtPnZpZXcudzsKLSAgICAgICAgZHkgPSAoKHNkLT52aWV3LmggLSBoKSAqIGN5KSAv
IHNkLT52aWV3Lmg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHggPSAwOwotICAgICAgICBkeSA9
IDA7Ci0gICAgfQotICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc2QtPnZpZXcueCArIGR4LCBz
ZC0+dmlldy55ICsgZHkpOwotCi0gICAgaWYgKGN3IDwgc2QtPnZpZXcudykKLSAgICAgICAgdyA9
IGN3ICogc2NhbGU7Ci0gICAgaWYgKGNoIDwgc2QtPnZpZXcuaCkKLSAgICAgICAgaCA9IGNoICog
c2NhbGU7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOwotICAgIHJldHVybiBF
SU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93
ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBz
bW9vdGhfc2NhbGUpCi17Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChz
ZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192
aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVu
c2lnbmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVk
IGNoYXIgYSkKLXsKLSAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc2QtPmJhY2tpbmdf
c3RvcmUsIGEgPCAyNTUpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Nl
dChFd2tfVmlld19TbWFydF9DbGFzcyAqYXBpKQotewotICAgIGlmICghZXdrX3ZpZXdfYmFzZV9z
bWFydF9zZXQoYXBpKSkKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBpZiAoRUlO
QV9VTkxJS0VMWSghX3BhcmVudF9zYy5zYy5hZGQpKQotICAgICAgICBld2tfdmlld19iYXNlX3Nt
YXJ0X3NldCgmX3BhcmVudF9zYyk7Ci0KLSAgICBhcGktPnNjLmFkZCA9IF9ld2tfdmlld19zaW5n
bGVfc21hcnRfYWRkOwotICAgIGFwaS0+c2MucmVzaXplID0gX2V3a192aWV3X3NpbmdsZV9zbWFy
dF9yZXNpemU7Ci0KLSAgICBhcGktPmJhY2tpbmdfc3RvcmVfYWRkID0gX2V3a192aWV3X3Npbmds
ZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZDsKLSAgICBhcGktPnNjcm9sbHNfcHJvY2VzcyA9IF9l
d2tfdmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9jZXNzOwotICAgIGFwaS0+cmVwYWludHNf
cHJvY2VzcyA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzczsKLSAgICBh
cGktPnpvb21fd2Vha19zZXQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQ7
Ci0gICAgYXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCA9IF9ld2tfdmlld19zaW5nbGVf
c21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQ7Ci0gICAgYXBpLT5iZ19jb2xvcl9zZXQg
PSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldDsKLQotICAgIHJldHVybiBFSU5B
X1RSVUU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCAqX2V3a192aWV3X3NpbmdsZV9z
bWFydF9jbGFzc19uZXcodm9pZCkKLXsKLSAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
YXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19WaWV3X1Np
bmdsZSIpOwotICAgIHN0YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IDA7Ci0KLSAgICBpZiAoRUlO
QV9VTkxJS0VMWSghc21hcnQpKSB7Ci0gICAgICAgIGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQo
JmFwaSk7Ci0gICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHNtYXJ0OwotfQotCi1FdmFzX09iamVjdCAqZXdrX3ZpZXdfc2lu
Z2xlX2FkZChFdmFzICplKQotewotICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwg
X2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7Ci19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiYWY4MDU2MDVmZTI4NGQ1NDc0
ZjZiMzAyMTJiOWEyZDUwYThhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApAQCAtMCwwICsxLDU2OSBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKKworI2luY2x1ZGUgImV3a19mcmFtZS5oIgor
I2luY2x1ZGUgImV3a19sb2dnaW5nLmgiCisjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKKworI2lu
Y2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KKyNpbmNsdWRl
IDxzdHJpbmcuaD4KKworc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBF
V0tfVklFV19TTUFSVF9DTEFTU19JTklUX05VTEw7CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19z
aW5nbGVfb25fZGVsKHZvaWQgKmRhdGEsIEV2YXMgKmUsIEV2YXNfT2JqZWN0ICpvLCB2b2lkICpl
dmVudF9pbmZvKQoreworICAgIEV2YXNfT2JqZWN0ICpjbGlwID0gKEV2YXNfT2JqZWN0KilkYXRh
OworICAgIGV2YXNfb2JqZWN0X2RlbChjbGlwKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3
X3NpbmdsZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCit7CisgICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2Q7CisKKyAgICBfcGFyZW50X3NjLnNjLmFkZChvKTsKKworICAgIHNkID0gKEV3a19W
aWV3X1NtYXJ0X0RhdGEgKilldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKTsKKyAgICBpZiAo
IXNkKQorICAgICAgICByZXR1cm47CisKKyAgICBFdmFzX09iamVjdCAqY2xpcCA9IGV2YXNfb2Jq
ZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfY2xpcF9z
ZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNsaXApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9hZGQoY2xpcCwgbyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhjbGlwKTsKKworICAgIGV2YXNf
b2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZAorICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIEVW
QVNfQ0FMTEJBQ0tfREVMLCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCwgY2xpcCk7Cit9CisKK3N0
YXRpYyBFdmFzX09iamVjdCAqX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2Fk
ZChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAgICBFdmFzX09iamVjdCAqYnMgPSBldmFz
X29iamVjdF9pbWFnZV9hZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vf
YWxwaGFfc2V0KGJzLCBFSU5BX0ZBTFNFKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhf
c2NhbGVfc2V0KGJzLCBzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSk7CisKKyAgICByZXR1cm4g
YnM7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVzaXplKEV2YXNf
T2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3sKKyAgICBFd2tfVmlld19T
bWFydF9EYXRhICpzZCA9IChFd2tfVmlld19TbWFydF9EYXRhKilldmFzX29iamVjdF9zbWFydF9k
YXRhX2dldChvKTsKKyAgICBfcGFyZW50X3NjLnNjLnJlc2l6ZShvLCB3LCBoKTsKKworICAgIGlm
ICghc2QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQg
YW5kIHByb2Nlc3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKKyAgICBldmFzX29iamVjdF9pbWFn
ZV9zaXplX3NldChzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAgaWYgKHNkLT5hbmltYXRl
ZF96b29tLnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKKyAgICAgICAgRXZhc19PYmplY3QgKmNs
aXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzZC0+YmFja2luZ19zdG9yZSk7CisgICAgICAgIEV2
YXNfQ29vcmQgeCwgeSwgY3csIGNoOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgdywgaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2dl
b21ldHJ5X2dldChzZC0+YmFja2luZ19zdG9yZSwgJngsICZ5LCAwLCAwKTsKKyAgICAgICAgZXZh
c19vYmplY3RfbW92ZShjbGlwLCB4LCB5KTsKKyAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3Np
emVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7CisgICAgICAgIGlmICh3ID4gY3cpCisg
ICAgICAgICAgICB3ID0gY3c7CisgICAgICAgIGlmIChoID4gY2gpCisgICAgICAgICAgICBoID0g
Y2g7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBoKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fdXAodWludDMyX3Qg
KmltYWdlLCBzaXplX3Qgcm93cywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90
IGgsIHNpemVfdCByb3dzaXplKQoreworICAgIHVpbnQzMl90ICpzcmM7CisgICAgdWludDMyX3Qg
KmRzdDsKKworICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiByb3dzaXplOworICAgIHNyYyA9IGRz
dCArIHJvd3MgKiByb3dzaXplOworICAgIGggLT0gcm93czsKKworICAgIGZvciAoOyBoID4gMDsg
aC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAgICAgIG1lbWNweShkc3Qs
IHNyYywgdyAqIDQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVf
cmVnaW9uX2Rvd24odWludDMyX3QgKmltYWdlLCBzaXplX3Qgcm93cywgc2l6ZV90IHgsIHNpemVf
dCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQoreworICAgIHVpbnQzMl90
ICpzcmM7CisgICAgdWludDMyX3QgKmRzdDsKKworICAgIGggLT0gcm93czsKKyAgICBzcmMgPSBp
bWFnZSArIHggKyAoeSArIGggLSAxKSAqIHJvd3NpemU7CisgICAgZHN0ID0gc3JjICsgcm93cyAq
IHJvd3NpemU7CisKKyAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09IHJvd3NpemUsIHNyYyAt
PSByb3dzaXplKQorICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHcgKiA0KTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdCh1aW50MzJfdCAqZHN0LCBj
b25zdCB1aW50MzJfdCAqc3JjLCBzaXplX3QgY291bnQpCit7CisgICAgdWludDMyX3QgKmRzdF9l
bmQgPSBkc3QgKyBjb3VudDsKKyAgICAvKiBubyBtZW1jcHkoKSBhcyBpdCBkb2VzIG5vdCBhbGxv
dyBvdmVybGFwcGluZyByZWdpb25zICovCisgICAgLyogbm8gbWVtbW92ZSgpIGFzIGl0IHdpbGwg
Y29weSB0byBhIHRlbXBvcmFyeSBidWZmZXIgKi8KKyAgICAvKiBUT0RPOiBsb29wIHVucm9sbGlu
ZywgY29weWluZyB1cCB0byBxdWFkLXdvcmRzIHdvdWxkIGhlbHAgKi8KKyAgICBmb3IgKDsgZHN0
IDwgZHN0X2VuZDsgZHN0KyssIHNyYysrKQorICAgICAgICAqZHN0ID0gKnNyYzsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQodWludDMyX3QgKmRz
dCwgdWludDMyX3QgKnNyYywgc2l6ZV90IGNvdW50KQoreworICAgIHVpbnQzMl90ICpkc3RfZW5k
ID0gZHN0IC0gY291bnQ7CisgICAgLyogbm8gbWVtY3B5KCkgYXMgaXQgZG9lcyBub3QgYWxsb3cg
b3ZlcmxhcHBpbmcgcmVnaW9ucyAqLworICAgIC8qIG5vIG1lbW1vdmUoKSBhcyBpdCB3aWxsIGNv
cHkgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyICovCisgICAgLyogVE9ETzogbG9vcCB1bnJvbGxpbmcs
IGNvcHlpbmcgdXAgdG8gcXVhZC13b3JkcyB3b3VsZCBoZWxwICovCisgICAgZm9yICg7IGRzdCA+
IGRzdF9lbmQ7IGRzdC0tLCBzcmMtLSkKKyAgICAgICAgKmRzdCA9ICpzcmM7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fbGVmdCh1aW50MzJfdCAqaW1h
Z2UsIHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwg
c2l6ZV90IHJvd3NpemUpCit7CisgICAgdWludDMyX3QgKnNyYzsKKyAgICB1aW50MzJfdCAqZHN0
OworCisgICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7CisgICAgc3JjID0gZHN0ICsg
Y29sczsKKyAgICB3IC09IGNvbHM7CisKKyAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJv
d3NpemUsIHNyYyArPSByb3dzaXplKQorICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xl
ZnQoZHN0LCBzcmMsIHcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21v
dmVfcmVnaW9uX3JpZ2h0KHVpbnQzMl90ICppbWFnZSwgc2l6ZV90IGNvbHMsIHNpemVfdCB4LCBz
aXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3sKKyAgICB1aW50
MzJfdCAqc3JjOworICAgIHVpbnQzMl90ICpkc3Q7CisKKyAgICB3IC09IGNvbHM7CisgICAgc3Jj
ID0gaW1hZ2UgKyAoeCArIHcgLSAxKSArIHkgKiByb3dzaXplOworICAgIGRzdCA9IHNyYyArIGNv
bHM7CisKKyAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dz
aXplKQorICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsK
K30KKworLyogY2F0Y2gtYWxsIGZ1bmN0aW9uLCBub3QgYXMgb3B0aW1pemVkIGFzIHRoZSBvdGhl
cnMsIGJ1dCBkb2VzIHRoZSB3b3JrLiAqLworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbih1aW50MzJfdCAqaW1hZ2UsIGludCBkeCwgaW50IGR5LCBzaXplX3QgeCwg
c2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCit7CisgICAgdWlu
dDMyX3QgKnNyYzsKKyAgICB1aW50MzJfdCAqZHN0OworCisgICAgaWYgKGR5IDwgMCkgeworICAg
ICAgICBoICs9IGR5OworICAgICAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKKyAg
ICAgICAgc3JjID0gZHN0IC0gZHkgKiByb3dzaXplOworICAgICAgICBpZiAoZHggPD0gMCkgewor
ICAgICAgICAgICAgdyArPSBkeDsKKyAgICAgICAgICAgIHNyYyAtPSBkeDsKKyAgICAgICAgICAg
IGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAg
ICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHcgLT0gZHg7CisgICAgICAgICAgICBzcmMgKz0g
dyAtIDE7CisgICAgICAgICAgICBkc3QgKz0gdyArIGR4IC0xOworICAgICAgICAgICAgZm9yICg7
IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKKyAgICAgICAgICAg
ICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGggLT0gZHk7CisgICAgICAgIHNyYyA9IGltYWdlICsg
eCArICh5ICsgaCAtIDEpICogcm93c2l6ZTsKKyAgICAgICAgZHN0ID0gc3JjICsgZHkgKiByb3dz
aXplOworICAgICAgICBpZiAoZHggPD0gMCkgeworICAgICAgICAgICAgdyArPSBkeDsKKyAgICAg
ICAgICAgIHNyYyAtPSBkeDsKKyAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgLT0g
cm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21v
dmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHcgLT0gZHg7CisgICAgICAgICAgICBzcmMgKz0gdyAtIDE7CisgICAgICAgICAgICBkc3QgKz0g
dyArIGR4IC0gMTsKKyAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6
ZSwgc3JjIC09IHJvd3NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGlu
ZV9yaWdodChkc3QsIHNyYywgdyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNzX3NpbmdsZShFd2tfVmlld19T
bWFydF9EYXRhICpzZCwgdm9pZCAqcGl4ZWxzLCBFdmFzX0Nvb3JkIG93LCBFdmFzX0Nvb3JkIG9o
LCBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QgKnNyKQoreworICAgIEV2YXNfQ29vcmQgc3gsIHN5
LCBzdywgc2g7CisKKyAgICBEQkcoIiVkLCVkICsgJWQsJWQgJSswM2QsJSswM2QsIHN0b3JlOiAl
cCAlZHglZCIsCisgICAgICAgIHNyLT54LCBzci0+eSwgc3ItPncsIHNyLT5oLCBzci0+ZHgsIHNy
LT5keSwgcGl4ZWxzLCBvdywgb2gpOworCisgICAgc3ggPSBzci0+eDsKKyAgICBzeSA9IHNyLT55
OworICAgIHN3ID0gc3ItPnc7CisgICAgc2ggPSBzci0+aDsKKworICAgIGlmIChhYnMoc3ItPmR4
KSA+PSBzdyB8fCBhYnMoc3ItPmR5KSA+PSBzaCkgeworICAgICAgICAvKiBkb3VidCB3ZWJraXQg
d291bGQgYmUgc28gc3R1cGlkLi4uICovCisgICAgICAgIERCRygiZnVsbCBwYWdlIHNjcm9sbCAl
KzAzZCwlKzAzZC4gY29udmVydCB0byByZXBhaW50ICVkLCVkICsgJWR4JWQiLAorICAgICAgICAg
ICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoKTsKKyAgICAgICAgZXdrX3ZpZXdfcmVw
YWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoc3ggPCAwKSB7CisgICAgICAgIHN3ICs9IHN4OworICAgICAgICBzeCA9
IDA7CisgICAgfQorICAgIGlmIChzeSA8IDApIHsKKyAgICAgICAgc2ggKz0gc3k7CisgICAgICAg
IHN5ID0gMDsKKyAgICB9CisKKyAgICBpZiAoc3ggKyBzdyA+IG93KQorICAgICAgICBzdyA9IG93
IC0gc3g7CisgICAgaWYgKHN5ICsgc2ggPiBvaCkKKyAgICAgICAgc2ggPSBvaCAtIHN5OworCisg
ICAgaWYgKHN3IDwgMCkKKyAgICAgICAgc3cgPSAwOworICAgIGlmIChzaCA8IDApCisgICAgICAg
IHNoID0gMDsKKworICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJOKCFzdyB8fCAhc2gpOwor
ICAgIGlmICghc3ItPmR4KSB7CisgICAgICAgIGlmIChzci0+ZHkgPCAwKSB7CisgICAgICAgICAg
ICBEQkcoInNjcm9sbCB1cDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCisgICAg
ICAgICAgICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4JWQiLAorICAgICAgICAgICAgICAgIHNyLT5k
eCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCArIHNyLT5keSwKKyAgICAgICAgICAgICAgICBzeCwg
c3kgKyBzaCArIHNyLT5keSwgc3csIC1zci0+ZHkpOworCisgICAgICAgICAgICBfZXdrX3ZpZXdf
NGJfbW92ZV9yZWdpb25fdXAKKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KilwaXhlbHMsIC1z
ci0+ZHksIHN4LCBzeSwgc3csIHNoLCBvdyk7CisgICAgICAgICAgICBldmFzX29iamVjdF9pbWFn
ZV9kYXRhX3VwZGF0ZV9hZGQKKyAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHN4
LCBzeSwgc3csIHNoICsgc3ItPmR5KTsKKworICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9h
ZGQoc2QtPl9wcml2LCBzeCwgc3kgKyBzaCArIHNyLT5keSwgc3csIC1zci0+ZHkpOworICAgICAg
ICB9IGVsc2UgaWYgKHNyLT5keSA+IDApIHsKKyAgICAgICAgICAgIERCRygic2Nyb2xsIGRvd246
ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgorICAgICAgICAgICAgICAgICJyZXBh
aW50PSVkLCVkKyVkeCVkIiwKKyAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5
ICsgc3ItPmR5LCBzdywgc2ggLSBzci0+ZHksCisgICAgICAgICAgICAgICAgc3gsIHN5LCBzdywg
c3ItPmR5KTsKKworICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX2Rvd24KKyAg
ICAgICAgICAgICAgICAoKHVpbnQzMl90KilwaXhlbHMsIHNyLT5keSwgc3gsIHN5LCBzdywgc2gs
IG93KTsKKyAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAorICAg
ICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gsIHN5ICsgc3ItPmR5LCBzdywgc2gg
LSBzci0+ZHkpOworCisgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYs
IHN4LCBzeSwgc3csIHNyLT5keSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFzci0+ZHkp
IHsKKyAgICAgICAgaWYgKHNyLT5keCA8IDApIHsKKyAgICAgICAgICAgIERCRygic2Nyb2xsIGxl
ZnQ6ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgorICAgICAgICAgICAgICAgICJy
ZXBhaW50PSVkLCVkKyVkeCVkIiwKKyAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gs
IHN5LCBzdyArIHNyLT5keCwgc2gsCisgICAgICAgICAgICAgICAgc3ggKyBzdyArIHNyLT5keCwg
c3ksIC1zci0+ZHgsIHNoKTsKKworICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9u
X2xlZnQKKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KilwaXhlbHMsIC1zci0+ZHgsIHN4LCBz
eSwgc3csIHNoLCBvdyk7CisgICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0
ZV9hZGQKKyAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHN4LCBzeSwgc3cgKyBz
ci0+ZHgsIHNoKTsKKworICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2
LCBzeCArIHN3ICsgc3ItPmR4LCBzeSwgLXNyLT5keCwgc2gpOworICAgICAgICB9IGVsc2UgaWYg
KHNyLT5keCA+IDApIHsKKyAgICAgICAgICAgIERCRygic2Nyb2xsIHVwOiAlKzAzZCwlKzAzZCB1
cGRhdGU9JWQsJWQrJWR4JWQsICIKKyAgICAgICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHgl
ZCIsCisgICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4ICsgc3ItPmR4LCBzeSwgc3cg
LSBzci0+ZHgsIHNoLAorICAgICAgICAgICAgICAgIHN4LCBzeSwgc3ItPmR4LCBzaCk7CisKKyAg
ICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9yaWdodAorICAgICAgICAgICAgICAg
ICgodWludDMyX3QqKXBpeGVscywgc3ItPmR4LCBzeCwgc3ksIHN3LCBzaCwgb3cpOworICAgICAg
ICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCisgICAgICAgICAgICAgICAg
KHNkLT5iYWNraW5nX3N0b3JlLCBzeCArIHNyLT5keCwgc3ksIHN3IC0gc3ItPmR4LCBzaCk7CisK
KyAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzci0+
ZHgsIHNoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEV2YXNfQ29vcmQgbXgs
IG15LCBtdywgbWgsIGF4LCBheSwgYXcsIGFoLCBieCwgYnksIGJ3LCBiaDsKKworICAgICAgICBp
ZiAoc3ItPmR4IDwgMCkgeworICAgICAgICAgICAgbXggPSBzeDsKKyAgICAgICAgICAgIG13ID0g
c3cgKyBzci0+ZHg7CisgICAgICAgICAgICBheCA9IG14ICsgbXc7CisgICAgICAgICAgICBhdyA9
IC1zci0+ZHg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBheCA9IHN4OworICAgICAg
ICAgICAgYXcgPSBzci0+ZHg7CisgICAgICAgICAgICBteCA9IGF4ICsgYXc7CisgICAgICAgICAg
ICBtdyA9IHN3IC0gc3ItPmR4OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNyLT5keSA8IDAp
IHsKKyAgICAgICAgICAgIG15ID0gc3k7CisgICAgICAgICAgICBtaCA9IHNoICsgc3ItPmR5Owor
ICAgICAgICAgICAgYnkgPSBteSArIG1oOworICAgICAgICAgICAgYmggPSAtc3ItPmR5OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnkgPSBzeTsKKyAgICAgICAgICAgIGJoID0gc3It
PmR5OworICAgICAgICAgICAgbXkgPSBieSArIGJoOworICAgICAgICAgICAgbWggPSBzaCAtIHNy
LT5keTsKKyAgICAgICAgfQorCisgICAgICAgIGF5ID0gbXk7CisgICAgICAgIGFoID0gbWg7Cisg
ICAgICAgIGJ4ID0gc3g7CisgICAgICAgIGJ3ID0gc3c7CisKKyAgICAgICAgREJHKCJzY3JvbGwg
ZGlhZ29uYWw6ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgorICAgICAgICAgICAg
InJlcGFpbnRzOiBoPSVkLCVkKyVkeCVkIHY9JWQsJWQrJWR4JWQiLAorICAgICAgICAgICAgc3It
PmR4LCBzci0+ZHksIG14LCBteSwgbXcsIG1oLCBheCwgYXksIGF3LCBhaCwgYngsIGJ5LCBidywg
YmgpOworCisgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbgorICAgICAgICAgICAgKCh1
aW50MzJfdCopcGl4ZWxzLCBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywgc2gsIG93KTsKKwor
ICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2QtPmJhY2tpbmdfc3Rv
cmUsIG14LCBteSwgbXcsIG1oKTsKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9w
cml2LCBheCwgYXksIGF3LCBhaCk7CisgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5f
cHJpdiwgYngsIGJ5LCBidywgYmgpOworICAgIH0KK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc2luZ2xlX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpz
ZCkKK3sKKyAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QgKnNyOworICAgIGNvbnN0IEV3a19T
Y3JvbGxfUmVxdWVzdCAqc3JfZW5kOworICAgIEV2YXNfQ29vcmQgb3csIG9oOworICAgIHNpemVf
dCBjb3VudDsKKyAgICB2b2lkICpwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChz
ZC0+YmFja2luZ19zdG9yZSwgMSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc2Qt
PmJhY2tpbmdfc3RvcmUsICZvdywgJm9oKTsKKworICAgIHNyID0gZXdrX3ZpZXdfc2Nyb2xsX3Jl
cXVlc3RzX2dldChzZC0+X3ByaXYsICZjb3VudCk7CisgICAgc3JfZW5kID0gc3IgKyBjb3VudDsK
KyAgICBmb3IgKDsgc3IgPCBzcl9lbmQ7IHNyKyspCisgICAgICAgIF9ld2tfdmlld19zaW5nbGVf
c2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKHNkLCBwaXhlbHMsIG93LCBvaCwgc3IpOworCisgICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHBpeGVscyk7CisKKyAg
ICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5n
bGVfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAg
ICBFd2tfVmlld19QYWludF9Db250ZXh0ICpjdHh0OworICAgIEV2YXNfQ29vcmQgb3csIG9oOwor
ICAgIHZvaWQgKnBpeGVsczsKKyAgICBFaW5hX1JlY3RhbmdsZSAqcjsKKyAgICBjb25zdCBFaW5h
X1JlY3RhbmdsZSAqcHI7CisgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgKnByX2VuZDsKKyAgICBF
aW5hX1RpbGVyICp0aWxlcjsKKyAgICBFaW5hX0l0ZXJhdG9yICppdHI7CisgICAgY2Fpcm9fc3Rh
dHVzX3Qgc3RhdHVzOworICAgIGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZTsKKyAgICBjYWlyb19m
b3JtYXRfdCBmb3JtYXQ7CisgICAgY2Fpcm9fdCAqY2Fpcm87CisgICAgc2l6ZV90IGNvdW50Owor
ICAgIEVpbmFfQm9vbCByZXQgPSBFSU5BX1RSVUU7CisKKyAgICBpZiAoc2QtPmFuaW1hdGVkX3pv
b20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkgeworICAgICAgICBFdmFzX09iamVjdCAqY2xpcCA9
IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICAgICAgRXZhc19D
b29yZCB3LCBoLCBjdywgY2g7CisgICAgICAgIC8vIHJlc2V0IGVmZmVjdHMgb2Ygem9vbV93ZWFr
X3NldCgpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0CisgICAgICAgICAgICAo
c2QtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHNkLT52aWV3LncsIHNkLT52aWV3LmgpOworICAgICAg
ICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNkLT52aWV3LngsIHNkLT52aWV3LnkpOworCisgICAg
ICAgIHcgPSBzZC0+dmlldy53OworICAgICAgICBoID0gc2QtPnZpZXcuaDsKKworICAgICAgICBl
d2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKKyAg
ICAgICAgaWYgKHcgPiBjdykKKyAgICAgICAgICAgIHcgPSBjdzsKKyAgICAgICAgaWYgKGggPiBj
aCkKKyAgICAgICAgICAgIGggPSBjaDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAs
IHcsIGgpOworICAgIH0KKworICAgIHBpeGVscyA9IGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0
KHNkLT5iYWNraW5nX3N0b3JlLCAxKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChz
ZC0+YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOworICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9B
UkdCMzI7CisKKyAgICBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyKilwaXhlbHMsIGZvcm1hdCwgb3csIG9oLCBvdyAq
IDQpOworICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpOworICAgIGlm
IChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBu
b3QgY3JlYXRlIHN1cmZhY2UgZnJvbSBkYXRhICVkeCVkOiAlcyIsCisgICAgICAgICAgICBvdywg
b2gsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAgIHJldCA9IEVJTkFf
RkFMU0U7CisgICAgICAgIGdvdG8gZXJyb3JfY2Fpcm9fc3VyZmFjZTsKKyAgICB9CisgICAgY2Fp
cm8gPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3RhdHVzKGNh
aXJvKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAg
IEVSUigiY291bGQgbm90IGNyZWF0ZSBjYWlybyBmcm9tIHN1cmZhY2UgJWR4JWQ6ICVzIiwKKyAg
ICAgICAgICAgIG93LCBvaCwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAg
ICAgcmV0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgZ290byBlcnJvcl9jYWlybzsKKyAgICB9CisK
KyAgICBjdHh0ID0gZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoc2QtPl9wcml2LCBjYWlybyk7
CisgICAgaWYgKCFjdHh0KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBwYWludCBj
b250ZXh0Iik7CisgICAgICAgIHJldCA9IEVJTkFfRkFMU0U7CisgICAgICAgIGdvdG8gZXJyb3Jf
cGFpbnRfY29udGV4dDsKKyAgICB9CisKKyAgICB0aWxlciA9IGVpbmFfdGlsZXJfbmV3KG93LCBv
aCk7CisgICAgaWYgKCF0aWxlcikgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGls
ZXIgJWR4JWQiLCBvdywgb2gpOworICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBn
b3RvIGVycm9yX3RpbGVyOworICAgIH0KKworICAgIHByID0gZXdrX3ZpZXdfcmVwYWludHNfZ2V0
KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBwcl9lbmQgPSBwciArIGNvdW50OworICAgIGZvciAo
OyBwciA8IHByX2VuZDsgcHIrKykKKyAgICAgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0aWxlciwg
cHIpOworCisgICAgaXRyID0gZWluYV90aWxlcl9pdGVyYXRvcl9uZXcodGlsZXIpOworICAgIGlm
ICghaXRyKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3IgdGlsZXIi
KTsKKyAgICAgICAgcmV0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgZ290byBlcnJvcl9pdGVyYXRv
cjsKKyAgICB9CisKKyAgICBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShzZC0+
X3ByaXYpOworCisgICAgaW50IHN4LCBzeTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQo
c2QtPm1haW5fZnJhbWUsICZzeCwgJnN5KTsKKworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChp
dHIsIHIpIHsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgc2Nyb2xsZWRfcmVjdCA9IHsKKyAgICAg
ICAgICAgIHItPnggKyBzeCwgci0+eSArIHN5LAorICAgICAgICAgICAgci0+dywgci0+aAorICAg
ICAgICB9OworCisgICAgICAgIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2F2ZShjdHh0KTsKKwor
ICAgICAgICBpZiAoKHN4KSB8fCAoc3kpKQorICAgICAgICAgICAgZXdrX3ZpZXdfcGFpbnRfY29u
dGV4dF90cmFuc2xhdGUoY3R4dCwgLXN4LCAtc3kpOworCisgICAgICAgIGV3a192aWV3X3BhaW50
X2NvbnRleHRfY2xpcChjdHh0LCAmc2Nyb2xsZWRfcmVjdCk7CisgICAgICAgIGV3a192aWV3X3Bh
aW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoY3R4dCwgJnNjcm9sbGVkX3JlY3QpOworCisgICAg
ICAgIGV3a192aWV3X3BhaW50X2NvbnRleHRfcmVzdG9yZShjdHh0KTsKKyAgICAgICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCisgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3Rv
cmUsIHItPngsIHItPnksIHItPncsIHItPmgpOworICAgIH0KKyAgICBlaW5hX2l0ZXJhdG9yX2Zy
ZWUoaXRyKTsKKworZXJyb3JfaXRlcmF0b3I6CisgICAgZWluYV90aWxlcl9mcmVlKHRpbGVyKTsK
K2Vycm9yX3RpbGVyOgorICAgIGV3a192aWV3X3BhaW50X2NvbnRleHRfZnJlZShjdHh0KTsKK2Vy
cm9yX3BhaW50X2NvbnRleHQ6CisgICAgY2Fpcm9fZGVzdHJveShjYWlybyk7CitlcnJvcl9jYWly
bzoKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CitlcnJvcl9jYWlyb19zdXJm
YWNlOgorICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBw
aXhlbHMpOyAvKiBkZWMgcmVmY291bnQgKi8KKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc2V0KEV3a19WaWV3
X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5
KQoreworICAgIC8vIFRPRE86IHJldmlldworICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHNkLT5h
bmltYXRlZF96b29tLnpvb20uc3RhcnQ7CisgICAgRXZhc19Db29yZCB3ID0gc2QtPnZpZXcudyAq
IHNjYWxlOworICAgIEV2YXNfQ29vcmQgaCA9IHNkLT52aWV3LmggKiBzY2FsZTsKKyAgICBFdmFz
X0Nvb3JkIGR4LCBkeSwgY3csIGNoOworICAgIEV2YXNfT2JqZWN0ICpjbGlwID0gZXZhc19vYmpl
Y3RfY2xpcF9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOworCisgICAgZXdrX2ZyYW1lX2NvbnRlbnRz
X3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7CisgICAgaWYgKHNkLT52aWV3Lncg
PiAwICYmIHNkLT52aWV3LmggPiAwKSB7CisgICAgICAgIGR4ID0gKHcgKiAoc2QtPnZpZXcudyAt
IGN4KSkgLyBzZC0+dmlldy53OworICAgICAgICBkeSA9IChoICogKHNkLT52aWV3LmggLSBjeSkp
IC8gc2QtPnZpZXcuaDsKKyAgICB9IGVsc2UgeworICAgICAgICBkeCA9IDA7CisgICAgICAgIGR5
ID0gMDsKKyAgICB9CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzZC0+YmFja2lu
Z19zdG9yZSwgY3ggKyBkeCwgY3kgKyBkeSwgdywgaCk7CisKKyAgICBpZiAoc2QtPnZpZXcudyA+
IDAgJiYgc2QtPnZpZXcuaCA+IDApIHsKKyAgICAgICAgZHggPSAoKHNkLT52aWV3LncgLSB3KSAq
IGN4KSAvIHNkLT52aWV3Lnc7CisgICAgICAgIGR5ID0gKChzZC0+dmlldy5oIC0gaCkgKiBjeSkg
LyBzZC0+dmlldy5oOworICAgIH0gZWxzZSB7CisgICAgICAgIGR4ID0gMDsKKyAgICAgICAgZHkg
PSAwOworICAgIH0KKyAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNkLT52aWV3LnggKyBkeCwg
c2QtPnZpZXcueSArIGR5KTsKKworICAgIGlmIChjdyA8IHNkLT52aWV3LncpCisgICAgICAgIHcg
PSBjdyAqIHNjYWxlOworICAgIGlmIChjaCA8IHNkLT52aWV3LmgpCisgICAgICAgIGggPSBjaCAq
IHNjYWxlOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBoKTsKKyAgICByZXR1cm4g
RUlOQV9UUlVFOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFaW5hX0Jvb2wg
c21vb3RoX3NjYWxlKQoreworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQo
c2QtPmJhY2tpbmdfc3RvcmUsIHNtb290aF9zY2FsZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tf
dmlld19zaW5nbGVfc21hcnRfYmdfY29sb3Jfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1
bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hhciBiLCB1bnNpZ25l
ZCBjaGFyIGEpCit7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNkLT5iYWNraW5n
X3N0b3JlLCBhIDwgMjU1KTsKK30KKworRWluYV9Cb29sIGV3a192aWV3X3NpbmdsZV9zbWFydF9z
ZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSkKK3sKKyAgICBpZiAoIWV3a192aWV3X2Jhc2Vf
c21hcnRfc2V0KGFwaSkpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgaWYgKEVJ
TkFfVU5MSUtFTFkoIV9wYXJlbnRfc2Muc2MuYWRkKSkKKyAgICAgICAgZXdrX3ZpZXdfYmFzZV9z
bWFydF9zZXQoJl9wYXJlbnRfc2MpOworCisgICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X2FkZDsKKyAgICBhcGktPnNjLnJlc2l6ZSA9IF9ld2tfdmlld19zaW5nbGVfc21h
cnRfcmVzaXplOworCisgICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmlld19zaW5n
bGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQ7CisgICAgYXBpLT5zY3JvbGxzX3Byb2Nlc3MgPSBf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Njcm9sbHNfcHJvY2VzczsKKyAgICBhcGktPnJlcGFpbnRz
X3Byb2Nlc3MgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7CisgICAg
YXBpLT56b29tX3dlYWtfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc2V0
OworICAgIGFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3ZpZXdfc2luZ2xl
X3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0OworICAgIGFwaS0+YmdfY29sb3Jfc2V0
ID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQ7CisKKyAgICByZXR1cm4gRUlO
QV9UUlVFOworfQorCitzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQgKl9ld2tfdmlld19zaW5nbGVf
c21hcnRfY2xhc3NfbmV3KHZvaWQpCit7CisgICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNz
IGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFd2tfVmlld19T
aW5nbGUiKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSAwOworCisgICAgaWYgKEVJ
TkFfVU5MSUtFTFkoIXNtYXJ0KSkgeworICAgICAgICBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0
KCZhcGkpOworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpOwor
ICAgIH0KKworICAgIHJldHVybiBzbWFydDsKK30KKworRXZhc19PYmplY3QgKmV3a192aWV3X3Np
bmdsZV9hZGQoRXZhcyAqZSkKK3sKKyAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUs
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KCkpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXdfdGlsZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNlYjE2
OGZhYmNiMTEzYzkyNWZkYzU5MGE2NTYwM2YzNjM2NmZkMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdf
dGlsZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NCArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJld2tfdmlldy5oIgotCi0jaW5jbHVkZSAiZXdrX2xvZ2dpbmcuaCIKLQot
I2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KLSNpbmNs
dWRlIDxld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oPgotCi1zdGF0aWMgRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgX3BhcmVudF9zYyA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLQotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiKHZvaWQgKmRhdGEsIEV3a19U
aWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKLXsKLSAgICBFd2tfVmlld19Qcml2
YXRlX0RhdGEgKnByaXYgPSAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKilkYXRhOwotICAgIEVpbmFf
UmVjdGFuZ2xlIHIgPSB7YXJlYS0+eCArIHQtPngsIGFyZWEtPnkgKyB0LT55LCBhcmVhLT53LCBh
cmVhLT5ofTsKLQotICAgIHJldHVybiBld2tfdmlld19wYWludF9jb250ZW50cyhwcml2LCB0LT5j
YWlybywgJnIpOwotfQotCi1zdGF0aWMgdm9pZCAqX2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJv
Y2Vzc19wcmUodm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm8pCi17Ci0gICAgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhICpwcml2ID0gKEV3a19WaWV3X1ByaXZhdGVfRGF0YSopZGF0YTsKLSAgICBld2tf
dmlld19sYXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShwcml2KTsKLSAgICByZXR1cm4gMDsKLX0K
LQotc3RhdGljIEV2YXNfT2JqZWN0ICpfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9y
ZV9hZGQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgRXZhc19PYmplY3QgKmJzID0g
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKHNkLT5iYXNlLmV2YXMpOwotICAgIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQKLSAgICAgICAgKGJzLCBfZXdrX3ZpZXdfdGls
ZWRfcmVuZGVyX2NiLCBzZC0+X3ByaXYpOwotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZXNfcHJvY2Vzc19wcmVfc2V0Ci0gICAgICAgIChicywgX2V3a192aWV3X3RpbGVkX3VwZGF0
ZXNfcHJvY2Vzc19wcmUsIHNkLT5fcHJpdik7Ci0gICAgcmV0dXJuIGJzOwotfQotCi1zdGF0aWMg
dm9pZAotX2V3a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYih2b2lkICpkYXRh
LCBFdmFzX09iamVjdCAqbywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICBFdmFzX0Nvb3JkICpz
aXplID0gKEV2YXNfQ29vcmQqKWV2ZW50X2luZm87Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZGF0YTsKLQotICAgIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZQotICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHNpemVb
MF0sIHNpemVbMV0pOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYWRk
KEV2YXNfT2JqZWN0ICpvKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkOwotCi0gICAg
X3BhcmVudF9zYy5zYy5hZGQobyk7Ci0KLSAgICBzZCA9IChFd2tfVmlld19TbWFydF9EYXRhKill
dmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKTsKLSAgICBpZiAoIXNkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoCi0gICAgICAgIHNkLT5t
YWluX2ZyYW1lLCAiY29udGVudHMsc2l6ZSxjaGFuZ2VkIiwKLSAgICAgICAgX2V3a192aWV3X3Rp
bGVkX2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYiwgc2QpOwotICAgIGV3a19mcmFtZV9wYWludF9m
dWxsX3NldChzZC0+bWFpbl9mcmFtZSwgRUlOQV9UUlVFKTsKLX0KLQotc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0Rh
dGEgKnNkKQotewotICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqc3I7Ci0gICAgY29uc3Qg
RXdrX1Njcm9sbF9SZXF1ZXN0ICpzcl9lbmQ7Ci0gICAgc2l6ZV90IGNvdW50OwotICAgIEV2YXNf
Q29vcmQgdncsIHZoOwotCi0gICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWlu
X2ZyYW1lLCAmdncsICZ2aCk7Ci0KLSAgICBzciA9IGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19n
ZXQoc2QtPl9wcml2LCAmY291bnQpOwotICAgIHNyX2VuZCA9IHNyICsgY291bnQ7Ci0gICAgZm9y
ICg7IHNyIDwgc3JfZW5kOyBzcisrKSB7Ci0gICAgICAgIGlmIChzci0+bWFpbl9zY3JvbGwpCi0g
ICAgICAgICAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRk
Ci0gICAgICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzci0+ZHgsIHNyLT5keSk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgRXZhc19Db29yZCBzeCwgc3ksIHN3LCBzaDsKLQot
ICAgICAgICAgICAgc3ggPSBzci0+eDsKLSAgICAgICAgICAgIHN5ID0gc3ItPnk7Ci0gICAgICAg
ICAgICBzdyA9IHNyLT53OwotICAgICAgICAgICAgc2ggPSBzci0+aDsKLQotICAgICAgICAgICAg
aWYgKGFicyhzci0+ZHgpID49IHN3IHx8IGFicyhzci0+ZHkpID49IHNoKSB7Ci0gICAgICAgICAg
ICAgICAgLyogZG91YnQgd2Via2l0IHdvdWxkIGJlIHNvICAgICBzdHVwaWQuLi4gKi8KLSAgICAg
ICAgICAgICAgICBEQkcoImZ1bGwgcGFnZSBzY3JvbGwgJSswM2QsJSswM2QuIGNvbnZlcnQgdG8g
cmVwYWludCAlZCwlZCArICVkeCVkIiwKLSAgICAgICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+
ZHksIHN4LCBzeSwgc3csIHNoKTsKLSAgICAgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2Fk
ZChzZC0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHN4ICsgc3cgPiB2dykKLSAgICAgICAg
ICAgICAgICBzdyA9IHZ3IC0gc3g7Ci0gICAgICAgICAgICBpZiAoc3kgKyBzaCA+IHZoKQotICAg
ICAgICAgICAgICAgIHNoID0gdmggLSBzeTsKLQotICAgICAgICAgICAgaWYgKHN3IDwgMCkKLSAg
ICAgICAgICAgICAgICBzdyA9IDA7Ci0gICAgICAgICAgICBpZiAoc2ggPCAwKQotICAgICAgICAg
ICAgICAgIHNoID0gMDsKLQotICAgICAgICAgICAgaWYgKCFzdyB8fCAhc2gpCi0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHN4IC09IGFicyhzci0+ZHgpOwotICAgICAg
ICAgICAgc3kgLT0gYWJzKHNyLT5keSk7Ci0gICAgICAgICAgICBzdyArPSBhYnMoc3ItPmR4KTsK
LSAgICAgICAgICAgIHNoICs9IGFicyhzci0+ZHkpOwotICAgICAgICAgICAgZXdrX3ZpZXdfcmVw
YWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7Ci0gICAgICAgICAgICBJTkYoInVz
aW5nIHJlcGFpbnQgZm9yIGlubmVyIGZyYW1lIHNjb2xsaW5nISIpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhICpzZCkK
LXsKLSAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSAqcHIsICpwcl9lbmQ7Ci0gICAgc2l6ZV90IGNv
dW50OwotICAgIGludCBzeCwgc3k7Ci0KLSAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc2Qt
Pm1haW5fZnJhbWUsICZzeCwgJnN5KTsKLQotICAgIHByID0gZXdrX3ZpZXdfcmVwYWludHNfZ2V0
KHNkLT5fcHJpdiwgJmNvdW50KTsKLSAgICBwcl9lbmQgPSBwciArIGNvdW50OwotICAgIGZvciAo
OyBwciA8IHByX2VuZDsgcHIrKykgewotICAgICAgICBFaW5hX1JlY3RhbmdsZSByOwotICAgICAg
ICByLnggPSBwci0+eCArIHN4OwotICAgICAgICByLnkgPSBwci0+eSArIHN5OwotICAgICAgICBy
LncgPSBwci0+dzsKLSAgICAgICAgci5oID0gcHItPmg7Ci0gICAgICAgIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3VwZGF0ZShzZC0+YmFja2luZ19zdG9yZSwgJnIpOwotICAgIH0KLSAgICBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Moc2QtPmJhY2tpbmdfc3RvcmUpOwot
Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBpbnQg
dywgaW50IGgpCi17Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXpl
KHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1z
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3NldChFd2tfVmlld19T
bWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkK
LXsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgRWluYV9Cb29sIHI7Ci0gICAgciA9
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0KHNkLT5iYWNraW5nX3N0b3JlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmem9vbSwgY3gsIGN5LCAmeCwg
JnkpOwotICAgIGlmICghcikKLSAgICAgICAgcmV0dXJuIHI7Ci0gICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChzZC0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVF
KTsKLSAgICByID0gX3BhcmVudF9zYy56b29tX3NldChzZCwgem9vbSwgY3gsIGN5KTsKLSAgICBl
d2tfZnJhbWVfc2Nyb2xsX3NldChzZC0+bWFpbl9mcmFtZSwgLXgsIC15KTsKLSAgICBld2tfZnJh
bWVfc2Nyb2xsX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmdywgJmgpOwotICAgIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKLSAg
ICBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3Moc2QpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGN1bGF0ZShzZC0+YmFja2luZ19zdG9yZSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3Vs
YXRlKHNkLT5zZWxmKTsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRh
dGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcjsKLX0K
LQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3NldChF
d2tfVmlld19TbWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19D
b29yZCBjeSkKLXsKLSAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFr
X3NldChzZC0+YmFja2luZ19zdG9yZSwgem9vbSwgY3gsIGN5KTsKLX0KLQotc3RhdGljIHZvaWQg
X2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3
X1NtYXJ0X0RhdGEgKnNkLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQotewotICAgIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KHNkLT5iYWNraW5nX3N0
b3JlLCBzbW9vdGhfc2NhbGUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21h
cnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2goc2QtPmJhY2tpbmdfc3RvcmUpOwotICAgIF9wYXJlbnRfc2MuZmx1c2go
c2QpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVu
ZGVyX3JlZ2lvbihFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nv
b3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQotewotICAgIHJl
dHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbgotICAgICAgICAo
c2QtPmJhY2tpbmdfc3RvcmUsIHgsIHksIHcsIGgsIHpvb20pOwotfQotCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFd2tf
Vmlld19TbWFydF9EYXRhICpzZCwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCi17Ci0gICAg
cmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVz
Ci0gICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgbiwgem9vbSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNlbChFd2tfVmlld19TbWFydF9E
YXRhICpzZCkKLXsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNl
bChzZC0+YmFja2luZ19zdG9yZSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X2Rpc2FibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQotewotICAg
IHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihzZC0+YmFja2lu
Z19zdG9yZSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Vu
YWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgcmV0dXJuIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoc2QtPmJhY2tpbmdfc3RvcmUpOwotfQot
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNz
ICphcGkpCi17Ci0gICAgaWYgKCFld2tfdmlld19iYXNlX3NtYXJ0X3NldChhcGkpKQotICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZKCFfcGFyZW50X3Nj
LnNjLmFkZCkpCi0gICAgICAgIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCZfcGFyZW50X3NjKTsK
LQotICAgIGFwaS0+c2MuYWRkID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2FkZDsKLQotICAgIGFw
aS0+YmFja2luZ19zdG9yZV9hZGQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9y
ZV9hZGQ7Ci0gICAgYXBpLT5zY3JvbGxzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
c2Nyb2xsc19wcm9jZXNzOwotICAgIGFwaS0+cmVwYWludHNfcHJvY2VzcyA9IF9ld2tfdmlld190
aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzOwotICAgIGFwaS0+Y29udGVudHNfcmVzaXplID0g
X2V3a192aWV3X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZTsKLSAgICBhcGktPnpvb21fc2V0
ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0OwotICAgIGFwaS0+em9vbV93ZWFrX3Nl
dCA9IF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc2V0OwotICAgIGFwaS0+em9vbV93
ZWFrX3Ntb290aF9zY2FsZV9zZXQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3Nt
b290aF9zY2FsZV9zZXQ7Ci0gICAgYXBpLT5mbHVzaCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9m
bHVzaDsKLSAgICBhcGktPnByZV9yZW5kZXJfcmVnaW9uID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0
X3ByZV9yZW5kZXJfcmVnaW9uOwotICAgIGFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMg
PSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXM7Ci0gICAg
YXBpLT5wcmVfcmVuZGVyX2NhbmNlbCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVy
X2NhbmNlbDsKLSAgICBhcGktPmRpc2FibGVfcmVuZGVyID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0
X2Rpc2FibGVfcmVuZGVyOwotICAgIGFwaS0+ZW5hYmxlX3JlbmRlciA9IF9ld2tfdmlld190aWxl
ZF9zbWFydF9lbmFibGVfcmVuZGVyOwotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgRXZhc19TbWFydCAqX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25ldyh2b2lk
KQotewotICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBhcGkgPSBFV0tfVklFV19TTUFS
VF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRVdLX1ZpZXdfVGlsZWQiKTsKLSAgICBzdGF0aWMg
RXZhc19TbWFydCAqc21hcnQgPSAwOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0KSkg
ewotICAgICAgICBld2tfdmlld190aWxlZF9zbWFydF9zZXQoJmFwaSk7Ci0gICAgICAgIHNtYXJ0
ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNt
YXJ0OwotfQotCi1FdmFzX09iamVjdCAqZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMgKmUpCi17Ci0g
ICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
Y2xhc3NfbmV3KCkpOwotfQotCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a192aWV3X3RpbGVk
X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCi17Ci0gICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QsIDApOwotICAgIHJldHVybiBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOwotfQot
Ci12b2lkIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqY2FjaGUpCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAq
c2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZCk7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2Fj
aGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBjYWNoZSk7Ci19Ci0KLXZvaWQgZXdrX3ZpZXdfdGls
ZWRfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgZmxh
ZykKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFf
Z2V0KG8pOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKLSAgICBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcm9jZXNzX2VudGlyZV9xdWV1ZV9zZXQoc2QtPmJhY2tpbmdfc3Rv
cmUsIGZsYWcpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3
X3RpbGVkLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDA1MTI5N2UxNTBiODFiNDAyYzAzZWIyZDZiM2NhYmJlZDUzMWM1OQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKQEAg
LTAsMCArMSwyOTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBF
bGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRl
ZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a192aWV3Lmgi
CisKKyNpbmNsdWRlICJld2tfbG9nZ2luZy5oIgorI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCisK
KyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+CisjaW5j
bHVkZSA8ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaD4KKworc3RhdGljIEV3a19WaWV3X1NtYXJ0
X0NsYXNzIF9wYXJlbnRfc2MgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05VTEw7CisKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYih2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCit7CisgICAgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhICpwcml2ID0gKEV3a19WaWV3X1ByaXZhdGVfRGF0YSopZGF0YTsKKyAgICBFaW5h
X1JlY3RhbmdsZSByID0ge2FyZWEtPnggKyB0LT54LCBhcmVhLT55ICsgdC0+eSwgYXJlYS0+dywg
YXJlYS0+aH07CisKKyAgICByZXR1cm4gZXdrX3ZpZXdfcGFpbnRfY29udGVudHMocHJpdiwgdC0+
Y2Fpcm8sICZyKTsKK30KKworc3RhdGljIHZvaWQgKl9ld2tfdmlld190aWxlZF91cGRhdGVzX3By
b2Nlc3NfcHJlKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV3a19WaWV3X1By
aXZhdGVfRGF0YSAqcHJpdiA9IChFd2tfVmlld19Qcml2YXRlX0RhdGEqKWRhdGE7CisgICAgZXdr
X3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUocHJpdik7CisgICAgcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBFdmFzX09iamVjdCAqX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JhY2tpbmdfc3Rv
cmVfYWRkKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIEV2YXNfT2JqZWN0ICpicyA9
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChzZC0+YmFzZS5ldmFzKTsKKyAgICBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0CisgICAgICAgIChicywgX2V3a192aWV3X3Rp
bGVkX3JlbmRlcl9jYiwgc2QtPl9wcml2KTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGVzX3Byb2Nlc3NfcHJlX3NldAorICAgICAgICAoYnMsIF9ld2tfdmlld190aWxlZF91cGRh
dGVzX3Byb2Nlc3NfcHJlLCBzZC0+X3ByaXYpOworICAgIHJldHVybiBiczsKK30KKworc3RhdGlj
IHZvaWQKK19ld2tfdmlld190aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2Iodm9pZCAqZGF0
YSwgRXZhc19PYmplY3QgKm8sIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICAgRXZhc19Db29yZCAq
c2l6ZSA9IChFdmFzX0Nvb3JkKilldmVudF9pbmZvOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWRhdGE7CisKKyAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9jb250ZW50c19yZXNpemUKKyAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzaXpl
WzBdLCBzaXplWzFdKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZDsKKworICAg
IF9wYXJlbnRfc2Muc2MuYWRkKG8pOworCisgICAgc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSop
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobyk7CisgICAgaWYgKCFzZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKAorICAgICAgICBzZC0+
bWFpbl9mcmFtZSwgImNvbnRlbnRzLHNpemUsY2hhbmdlZCIsCisgICAgICAgIF9ld2tfdmlld190
aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2IsIHNkKTsKKyAgICBld2tfZnJhbWVfcGFpbnRf
ZnVsbF9zZXQoc2QtPm1haW5fZnJhbWUsIEVJTkFfVFJVRSk7Cit9CisKK3N0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9E
YXRhICpzZCkKK3sKKyAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QgKnNyOworICAgIGNvbnN0
IEV3a19TY3JvbGxfUmVxdWVzdCAqc3JfZW5kOworICAgIHNpemVfdCBjb3VudDsKKyAgICBFdmFz
X0Nvb3JkIHZ3LCB2aDsKKworICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFp
bl9mcmFtZSwgJnZ3LCAmdmgpOworCisgICAgc3IgPSBld2tfdmlld19zY3JvbGxfcmVxdWVzdHNf
Z2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBzcl9lbmQgPSBzciArIGNvdW50OworICAgIGZv
ciAoOyBzciA8IHNyX2VuZDsgc3IrKykgeworICAgICAgICBpZiAoc3ItPm1haW5fc2Nyb2xsKQor
ICAgICAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2Fk
ZAorICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3ItPmR4LCBzci0+ZHkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEV2YXNfQ29vcmQgc3gsIHN5LCBzdywgc2g7CisK
KyAgICAgICAgICAgIHN4ID0gc3ItPng7CisgICAgICAgICAgICBzeSA9IHNyLT55OworICAgICAg
ICAgICAgc3cgPSBzci0+dzsKKyAgICAgICAgICAgIHNoID0gc3ItPmg7CisKKyAgICAgICAgICAg
IGlmIChhYnMoc3ItPmR4KSA+PSBzdyB8fCBhYnMoc3ItPmR5KSA+PSBzaCkgeworICAgICAgICAg
ICAgICAgIC8qIGRvdWJ0IHdlYmtpdCB3b3VsZCBiZSBzbyAgICAgc3R1cGlkLi4uICovCisgICAg
ICAgICAgICAgICAgREJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUrMDNkLCUrMDNkLiBjb252ZXJ0IHRv
IHJlcGFpbnQgJWQsJWQgKyAlZHglZCIsCisgICAgICAgICAgICAgICAgICAgIHNyLT5keCwgc3It
PmR5LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9h
ZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzeCArIHN3ID4gdncpCisgICAgICAg
ICAgICAgICAgc3cgPSB2dyAtIHN4OworICAgICAgICAgICAgaWYgKHN5ICsgc2ggPiB2aCkKKyAg
ICAgICAgICAgICAgICBzaCA9IHZoIC0gc3k7CisKKyAgICAgICAgICAgIGlmIChzdyA8IDApCisg
ICAgICAgICAgICAgICAgc3cgPSAwOworICAgICAgICAgICAgaWYgKHNoIDwgMCkKKyAgICAgICAg
ICAgICAgICBzaCA9IDA7CisKKyAgICAgICAgICAgIGlmICghc3cgfHwgIXNoKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzeCAtPSBhYnMoc3ItPmR4KTsKKyAgICAg
ICAgICAgIHN5IC09IGFicyhzci0+ZHkpOworICAgICAgICAgICAgc3cgKz0gYWJzKHNyLT5keCk7
CisgICAgICAgICAgICBzaCArPSBhYnMoc3ItPmR5KTsKKyAgICAgICAgICAgIGV3a192aWV3X3Jl
cGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOworICAgICAgICAgICAgSU5GKCJ1
c2luZyByZXBhaW50IGZvciBpbm5lciBmcmFtZSBzY29sbGluZyEiKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Qp
Cit7CisgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgKnByLCAqcHJfZW5kOworICAgIHNpemVfdCBj
b3VudDsKKyAgICBpbnQgc3gsIHN5OworCisgICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNk
LT5tYWluX2ZyYW1lLCAmc3gsICZzeSk7CisKKyAgICBwciA9IGV3a192aWV3X3JlcGFpbnRzX2dl
dChzZC0+X3ByaXYsICZjb3VudCk7CisgICAgcHJfZW5kID0gcHIgKyBjb3VudDsKKyAgICBmb3Ig
KDsgcHIgPCBwcl9lbmQ7IHByKyspIHsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgcjsKKyAgICAg
ICAgci54ID0gcHItPnggKyBzeDsKKyAgICAgICAgci55ID0gcHItPnkgKyBzeTsKKyAgICAgICAg
ci53ID0gcHItPnc7CisgICAgICAgIHIuaCA9IHByLT5oOworICAgICAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV91cGRhdGUoc2QtPmJhY2tpbmdfc3RvcmUsICZyKTsKKyAgICB9CisgICAgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHNkLT5iYWNraW5nX3N0b3JlKTsK
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tfVmlld19TbWFydF9EYXRhICpzZCwgaW50
IHcsIGludCBoKQoreworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6
ZShzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kp
Cit7CisgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgIEVpbmFfQm9vbCByOworICAgIHIg
PSBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChzZC0+YmFja2luZ19zdG9yZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnpvb20sIGN4LCBjeSwgJngs
ICZ5KTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiByOworICAgIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJV
RSk7CisgICAgciA9IF9wYXJlbnRfc2Muem9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7CisgICAg
ZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc2QtPm1haW5fZnJhbWUsIC14LCAteSk7CisgICAgZXdrX2Zy
YW1lX3Njcm9sbF9zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZoKTsKKyAgICBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7Cisg
ICAgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxjdWxhdGUoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGN1
bGF0ZShzZC0+c2VsZik7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBk
YXRlX3NldChzZC0+YmFja2luZ19zdG9yZSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHI7Cit9
CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zZXQo
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNf
Q29vcmQgY3kpCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vh
a19zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHpvb20sIGN4LCBjeSk7Cit9CisKK3N0YXRpYyB2b2lk
IF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmll
d19TbWFydF9EYXRhICpzZCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChzZC0+YmFja2luZ19z
dG9yZSwgc21vb3RoX3NjYWxlKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3Nt
YXJ0X2ZsdXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2ZsdXNoKHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBfcGFyZW50X3NjLmZsdXNo
KHNkKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3Jl
bmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3sKKyAgICBy
ZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24KKyAgICAgICAg
KHNkLT5iYWNraW5nX3N0b3JlLCB4LCB5LCB3LCBoLCB6b29tKTsKK30KKworc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdr
X1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQoreworICAg
IHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1
cworICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIG4sIHpvb20pOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9jYW5jZWwoRXdrX1ZpZXdfU21hcnRf
RGF0YSAqc2QpCit7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5j
ZWwoc2QtPmJhY2tpbmdfc3RvcmUpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190
aWxlZF9zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sKKyAg
ICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoc2QtPmJhY2tp
bmdfc3RvcmUpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9l
bmFibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIHJldHVybiBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKHNkLT5iYWNraW5nX3N0b3JlKTsKK30K
KworRWluYV9Cb29sIGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFz
cyAqYXBpKQoreworICAgIGlmICghZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoYXBpKSkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3BhcmVudF9z
Yy5zYy5hZGQpKQorICAgICAgICBld2tfdmlld19iYXNlX3NtYXJ0X3NldCgmX3BhcmVudF9zYyk7
CisKKyAgICBhcGktPnNjLmFkZCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQ7CisKKyAgICBh
cGktPmJhY2tpbmdfc3RvcmVfYWRkID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JhY2tpbmdfc3Rv
cmVfYWRkOworICAgIGFwaS0+c2Nyb2xsc19wcm9jZXNzID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0
X3Njcm9sbHNfcHJvY2VzczsKKyAgICBhcGktPnJlcGFpbnRzX3Byb2Nlc3MgPSBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfcmVwYWludHNfcHJvY2VzczsKKyAgICBhcGktPmNvbnRlbnRzX3Jlc2l6ZSA9
IF9ld2tfdmlld190aWxlZF9zbWFydF9jb250ZW50c19yZXNpemU7CisgICAgYXBpLT56b29tX3Nl
dCA9IF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3NldDsKKyAgICBhcGktPnpvb21fd2Vha19z
ZXQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3NldDsKKyAgICBhcGktPnpvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19z
bW9vdGhfc2NhbGVfc2V0OworICAgIGFwaS0+Zmx1c2ggPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
Zmx1c2g7CisgICAgYXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiA9IF9ld2tfdmlld190aWxlZF9zbWFy
dF9wcmVfcmVuZGVyX3JlZ2lvbjsKKyAgICBhcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVz
ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzOworICAg
IGFwaS0+cHJlX3JlbmRlcl9jYW5jZWwgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRl
cl9jYW5jZWw7CisgICAgYXBpLT5kaXNhYmxlX3JlbmRlciA9IF9ld2tfdmlld190aWxlZF9zbWFy
dF9kaXNhYmxlX3JlbmRlcjsKKyAgICBhcGktPmVuYWJsZV9yZW5kZXIgPSBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfZW5hYmxlX3JlbmRlcjsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0
aWMgaW5saW5lIEV2YXNfU21hcnQgKl9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcodm9p
ZCkKK3sKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01B
UlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkVXS19WaWV3X1RpbGVkIik7CisgICAgc3RhdGlj
IEV2YXNfU21hcnQgKnNtYXJ0ID0gMDsKKworICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFydCkp
IHsKKyAgICAgICAgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KCZhcGkpOworICAgICAgICBzbWFy
dCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGkuc2MpOworICAgIH0KKworICAgIHJldHVybiBz
bWFydDsKK30KKworRXZhc19PYmplY3QgKmV3a192aWV3X3RpbGVkX2FkZChFdmFzICplKQorewor
ICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgX2V3a192aWV3X3RpbGVkX3NtYXJ0
X2NsYXNzX25ldygpKTsKK30KKworRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdmlld190aWxl
ZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEgKnNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQobyk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLCAwKTsKKyAgICByZXR1cm4gZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKK30K
Kwordm9pZCBld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmNhY2hlKQoreworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEg
KnNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQobyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2Nh
Y2hlX3NldChzZC0+YmFja2luZ19zdG9yZSwgY2FjaGUpOworfQorCit2b2lkIGV3a192aWV3X3Rp
bGVkX3Byb2Nlc3NfZW50aXJlX3F1ZXVlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIGZs
YWcpCit7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QgPSBld2tfdmlld19zbWFydF9kYXRh
X2dldChvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZCk7CisgICAgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJvY2Vzc19lbnRpcmVfcXVldWVfc2V0KHNkLT5iYWNraW5nX3N0
b3JlLCBmbGFnKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106298</attachid>
            <date>2011-09-04 18:14:11 -0700</date>
            <delta_ts>2011-09-04 21:17:11 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>bug-66542-20110905101408.patch</filename>
            <type>text/plain</type>
            <size>60993</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ1MDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggMjZlZjBhMDkxNzJmYjRlZmM3MDNiMTVmY2QzNjIyMmY0MWEyNzg1Ny4uY2FkNTQ2MDQ4
YWFiMzQ3MzllZGVlZDU3MzE5OGNkMDJiMTM1OGZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc4LDggKzc4LDggQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAg
ICBlZmwvZXdrL2V3a192aWV3LmNwcAotICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKLSAg
ICBlZmwvZXdrL2V3a192aWV3X3RpbGVkLmMKKyAgICBlZmwvZXdrL2V3a192aWV3X3NpbmdsZS5j
cHAKKyAgICBlZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcAogICAgIGVmbC9ld2svZXdrX3dpbmRv
d19mZWF0dXJlcy5jcHAKICAgICBlZmwvZXdrL2V3a19qcy5jcHAKICkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpp
bmRleCA4OTFjZjg1NWNhYmM4N2JlODFhYjk1YjAyZTk1ZGU1NWQ3ZTM0MTEzLi4xNmI0Y2UyYjFi
MzJjYzVjNzk2ZTJmMGY4ZWE2MGU1NWE0MTI4ZjE0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTkgQEAKKzIwMTEtMDktMDQgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29t
PgorCisgICAgICAgIFtFRkxdIFJlbmFtZSBld2tfdmlld18oc2luZ2xlfHRpbGVkKS5jIHRvIGV3
a192aWV3XyhzaW5nbGV8dGlsZWQpLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjY1NDIKKworICAgICAgICBVc2UgYSBDKysgY29tcGlsZXIgZm9y
IHRoZXNlIGZpbGVzLCBzbyB0aGF0IHRoZXkgY2FuIGluY2x1ZGUgdGhlIEMrKy11c2luZworICAg
ICAgICBld2tfcHJpdmF0ZS5oLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogZXdrL2V3a192aWV3
X3NpbmdsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdf
c2luZ2xlLmMuCisgICAgICAgIChfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCk6CisgICAgICAgIChf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZCk6CisgICAgICAgIChfZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X2JhY2tpbmdfc3RvcmVfYWRkKToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRf
cmVzaXplKToKKyAgICAgICAgKF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl91cCk6CisgICAgICAg
IChfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fZG93bik6CisgICAgICAgIChfZXdrX3ZpZXdfNGJf
bW92ZV9saW5lX2xlZnQpOgorICAgICAgICAoX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodCk6
CisgICAgICAgIChfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fbGVmdCk6CisgICAgICAgIChfZXdr
X3ZpZXdfNGJfbW92ZV9yZWdpb25fcmlnaHQpOgorICAgICAgICAoX2V3a192aWV3XzRiX21vdmVf
cmVnaW9uKToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xl
KToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9jZXNzKToKKyAg
ICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2Vzcyk6CisgICAgICAg
IChfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQpOgorICAgICAgICAoX2V3a192
aWV3X3NpbmdsZV9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk6CisgICAgICAgIChf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldCk6CisgICAgICAgIChld2tfdmlld19z
aW5nbGVfc21hcnRfc2V0KToKKyAgICAgICAgKF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3Nf
bmV3KToKKyAgICAgICAgKGV3a192aWV3X3NpbmdsZV9hZGQpOgorICAgICAgICAqIGV3ay9ld2tf
dmlld190aWxlZC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXdfdGlsZWQuYy4KKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9yZW5kZXJfY2IpOgorICAgICAg
ICAoX2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUpOgorICAgICAgICAoX2V3a192
aWV3X3RpbGVkX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKToKKyAgICAgICAgKF9ld2tfdmlld190
aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2IpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVk
X3NtYXJ0X2FkZCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19wcm9j
ZXNzKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzKToK
KyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9jb250ZW50c19yZXNpemUpOgorICAgICAg
ICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0KToKKyAgICAgICAgKF9ld2tfdmlld190
aWxlZF9zbWFydF96b29tX3dlYWtfc2V0KToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFy
dF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRf
c21hcnRfZmx1c2gpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJf
cmVnaW9uKToKKyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlbGF0
aXZlX3JhZGl1cyk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9j
YW5jZWwpOgorICAgICAgICAoX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2FibGVfcmVuZGVyKToK
KyAgICAgICAgKF9ld2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVyKToKKyAgICAgICAg
KGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldCk6CisgICAgICAgIChfZXdrX3ZpZXdfdGlsZWRfc21h
cnRfY2xhc3NfbmV3KToKKyAgICAgICAgKGV3a192aWV3X3RpbGVkX2FkZCk6CisgICAgICAgIChl
d2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfZ2V0KToKKyAgICAgICAgKGV3a192aWV3X3RpbGVk
X3VudXNlZF9jYWNoZV9zZXQpOgorCiAyMDExLTA5LTAyICBMZWFuZHJvIFBlcmVpcmEgIDxsZWFu
ZHJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVy
IHI2NzExMC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5n
bGUuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZjVkYTk0NjU5MzRkMjFhM2M5MDIzZjJjMTMzMzUyN2VkODQ5
Yjk0Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1
NjggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1i
ZWRkZWQgc3lzdGVtcwotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ry
b25pY3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZXdrX3ZpZXcuaCIKLQot
I2luY2x1ZGUgImV3a19mcmFtZS5oIgotI2luY2x1ZGUgImV3a19sb2dnaW5nLmgiCi0KLSNpbmNs
dWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+Ci0jaW5jbHVkZSA8
c3RyaW5nLmg+Ci0KLXN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdL
X1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2lu
Z2xlX29uX2RlbCh2b2lkICpkYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqbywgdm9pZCAqZXZl
bnRfaW5mbykKLXsKLSAgICBFdmFzX09iamVjdCAqY2xpcCA9IChFdmFzX09iamVjdCopZGF0YTsK
LSAgICBldmFzX29iamVjdF9kZWwoY2xpcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
aW5nbGVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQotewotICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEgKnNkOwotCi0gICAgX3BhcmVudF9zYy5zYy5hZGQobyk7Ci0KLSAgICBzZCA9IChFd2tfVmll
d19TbWFydF9EYXRhICopZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobyk7Ci0gICAgaWYgKCFz
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXZhc19PYmplY3QgKmNsaXAgPSBldmFzX29iamVj
dF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMpOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0
KHNkLT5iYWNraW5nX3N0b3JlLCBjbGlwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJf
YWRkKGNsaXAsIG8pOwotICAgIGV2YXNfb2JqZWN0X3Nob3coY2xpcCk7Ci0KLSAgICBldmFzX29i
amVjdF9ldmVudF9jYWxsYmFja19hZGQKLSAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBFVkFT
X0NBTExCQUNLX0RFTCwgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwsIGNsaXApOwotfQotCi1zdGF0
aWMgRXZhc19PYmplY3QgKl9ld2tfdmlld19zaW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQo
RXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAgRXZhc19PYmplY3QgKmJzID0gZXZhc19v
YmplY3RfaW1hZ2VfYWRkKHNkLT5iYXNlLmV2YXMpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2Fs
cGhhX3NldChicywgRUlOQV9GQUxTRSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3Nj
YWxlX3NldChicywgc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUpOwotCi0gICAgcmV0dXJuIGJz
OwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Jlc2l6ZShFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCi17Ci0gICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QgPSAoRXdrX1ZpZXdfU21hcnRfRGF0YSopZXZhc19vYmplY3Rfc21hcnRfZGF0
YV9nZXQobyk7Ci0gICAgX3BhcmVudF9zYy5zYy5yZXNpemUobywgdywgaCk7Ci0KLSAgICBpZiAo
IXNkKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyB0aGVzZSBzaG91bGQgYmUgcXVldWVkIGFu
ZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdlbGwhCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
c2l6ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOwotICAgIGlmIChzZC0+YW5pbWF0ZWRf
em9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7Ci0gICAgICAgIEV2YXNfT2JqZWN0ICpjbGlw
ID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOwotICAgICAgICBFdmFz
X0Nvb3JkIHgsIHksIGN3LCBjaDsKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQo
c2QtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHcsIGgpOwotICAgICAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUsICZ4LCAmeSwgMCwgMCk7Ci0gICAgICAgIGV2YXNf
b2JqZWN0X21vdmUoY2xpcCwgeCwgeSk7Ci0gICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXpl
X2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpOwotICAgICAgICBpZiAodyA+IGN3KQotICAg
ICAgICAgICAgdyA9IGN3OwotICAgICAgICBpZiAoaCA+IGNoKQotICAgICAgICAgICAgaCA9IGNo
OwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7Ci0gICAgfQotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3VwKHVpbnQzMl90ICpp
bWFnZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBo
LCBzaXplX3Qgcm93c2l6ZSkKLXsKLSAgICB1aW50MzJfdCAqc3JjOwotICAgIHVpbnQzMl90ICpk
c3Q7Ci0KLSAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKLSAgICBzcmMgPSBkc3Qg
KyByb3dzICogcm93c2l6ZTsKLSAgICBoIC09IHJvd3M7Ci0KLSAgICBmb3IgKDsgaCA+IDA7IGgt
LSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAgICAgICBtZW1jcHkoZHN0LCBz
cmMsIHcgKiA0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3Jl
Z2lvbl9kb3duKHVpbnQzMl90ICppbWFnZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3Qg
eSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKLXsKLSAgICB1aW50MzJfdCAq
c3JjOwotICAgIHVpbnQzMl90ICpkc3Q7Ci0KLSAgICBoIC09IHJvd3M7Ci0gICAgc3JjID0gaW1h
Z2UgKyB4ICsgKHkgKyBoIC0gMSkgKiByb3dzaXplOwotICAgIGRzdCA9IHNyYyArIHJvd3MgKiBy
b3dzaXplOwotCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0g
cm93c2l6ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3ICogNCk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQodWludDMyX3QgKmRzdCwgY29u
c3QgdWludDMyX3QgKnNyYywgc2l6ZV90IGNvdW50KQotewotICAgIHVpbnQzMl90ICpkc3RfZW5k
ID0gZHN0ICsgY291bnQ7Ci0gICAgLyogbm8gbWVtY3B5KCkgYXMgaXQgZG9lcyBub3QgYWxsb3cg
b3ZlcmxhcHBpbmcgcmVnaW9ucyAqLwotICAgIC8qIG5vIG1lbW1vdmUoKSBhcyBpdCB3aWxsIGNv
cHkgdG8gYSB0ZW1wb3JhcnkgYnVmZmVyICovCi0gICAgLyogVE9ETzogbG9vcCB1bnJvbGxpbmcs
IGNvcHlpbmcgdXAgdG8gcXVhZC13b3JkcyB3b3VsZCBoZWxwICovCi0gICAgZm9yICg7IGRzdCA8
IGRzdF9lbmQ7IGRzdCsrLCBzcmMrKykKLSAgICAgICAgKmRzdCA9ICpzcmM7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KHVpbnQzMl90ICpkc3Qs
IHVpbnQzMl90ICpzcmMsIHNpemVfdCBjb3VudCkKLXsKLSAgICB1aW50MzJfdCAqZHN0X2VuZCA9
IGRzdCAtIGNvdW50OwotICAgIC8qIG5vIG1lbWNweSgpIGFzIGl0IGRvZXMgbm90IGFsbG93IG92
ZXJsYXBwaW5nIHJlZ2lvbnMgKi8KLSAgICAvKiBubyBtZW1tb3ZlKCkgYXMgaXQgd2lsbCBjb3B5
IHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgIC8qIFRPRE86IGxvb3AgdW5yb2xsaW5nLCBj
b3B5aW5nIHVwIHRvIHF1YWQtd29yZHMgd291bGQgaGVscCAqLwotICAgIGZvciAoOyBkc3QgPiBk
c3RfZW5kOyBkc3QtLSwgc3JjLS0pCi0gICAgICAgICpkc3QgPSAqc3JjOwotfQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX2xlZnQodWludDMyX3QgKmltYWdl
LCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNp
emVfdCByb3dzaXplKQotewotICAgIHVpbnQzMl90ICpzcmM7Ci0gICAgdWludDMyX3QgKmRzdDsK
LQotICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiByb3dzaXplOwotICAgIHNyYyA9IGRzdCArIGNv
bHM7Ci0gICAgdyAtPSBjb2xzOwotCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dz
aXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0
KGRzdCwgc3JjLCB3KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3Zl
X3JlZ2lvbl9yaWdodCh1aW50MzJfdCAqaW1hZ2UsIHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6
ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCi17Ci0gICAgdWludDMy
X3QgKnNyYzsKLSAgICB1aW50MzJfdCAqZHN0OwotCi0gICAgdyAtPSBjb2xzOwotICAgIHNyYyA9
IGltYWdlICsgKHggKyB3IC0gMSkgKyB5ICogcm93c2l6ZTsKLSAgICBkc3QgPSBzcmMgKyBjb2xz
OwotCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6
ZSkKLSAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNyYywgdyk7Ci19
Ci0KLS8qIGNhdGNoLWFsbCBmdW5jdGlvbiwgbm90IGFzIG9wdGltaXplZCBhcyB0aGUgb3RoZXJz
LCBidXQgZG9lcyB0aGUgd29yay4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJf
bW92ZV9yZWdpb24odWludDMyX3QgKmltYWdlLCBpbnQgZHgsIGludCBkeSwgc2l6ZV90IHgsIHNp
emVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQotewotICAgIHVpbnQz
Ml90ICpzcmM7Ci0gICAgdWludDMyX3QgKmRzdDsKLQotICAgIGlmIChkeSA8IDApIHsKLSAgICAg
ICAgaCArPSBkeTsKLSAgICAgICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7Ci0gICAg
ICAgIHNyYyA9IGRzdCAtIGR5ICogcm93c2l6ZTsKLSAgICAgICAgaWYgKGR4IDw9IDApIHsKLSAg
ICAgICAgICAgIHcgKz0gZHg7Ci0gICAgICAgICAgICBzcmMgLT0gZHg7Ci0gICAgICAgICAgICBm
b3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAgICAg
ICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgdyk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3IC09IGR4OwotICAgICAgICAgICAgc3JjICs9IHcg
LSAxOwotICAgICAgICAgICAgZHN0ICs9IHcgKyBkeCAtMTsKLSAgICAgICAgICAgIGZvciAoOyBo
ID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCi0gICAgICAgICAgICAg
ICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNyYywgdyk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBoIC09IGR5OwotICAgICAgICBzcmMgPSBpbWFnZSArIHgg
KyAoeSArIGggLSAxKSAqIHJvd3NpemU7Ci0gICAgICAgIGRzdCA9IHNyYyArIGR5ICogcm93c2l6
ZTsKLSAgICAgICAgaWYgKGR4IDw9IDApIHsKLSAgICAgICAgICAgIHcgKz0gZHg7Ci0gICAgICAg
ICAgICBzcmMgLT0gZHg7Ci0gICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09IHJv
d3NpemUsIHNyYyAtPSByb3dzaXplKQotICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3Zl
X2xpbmVfbGVmdChkc3QsIHNyYywgdyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3
IC09IGR4OwotICAgICAgICAgICAgc3JjICs9IHcgLSAxOwotICAgICAgICAgICAgZHN0ICs9IHcg
KyBkeCAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09IHJvd3NpemUs
IHNyYyAtPSByb3dzaXplKQotICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVf
cmlnaHQoZHN0LCBzcmMsIHcpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgX2V3a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vzc19zaW5nbGUoRXdrX1ZpZXdfU21h
cnRfRGF0YSAqc2QsIHZvaWQgKnBpeGVscywgRXZhc19Db29yZCBvdywgRXZhc19Db29yZCBvaCwg
Y29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0ICpzcikKLXsKLSAgICBFdmFzX0Nvb3JkIHN4LCBzeSwg
c3csIHNoOwotCi0gICAgREJHKCIlZCwlZCArICVkLCVkICUrMDNkLCUrMDNkLCBzdG9yZTogJXAg
JWR4JWQiLAotICAgICAgICBzci0+eCwgc3ItPnksIHNyLT53LCBzci0+aCwgc3ItPmR4LCBzci0+
ZHksIHBpeGVscywgb3csIG9oKTsKLQotICAgIHN4ID0gc3ItPng7Ci0gICAgc3kgPSBzci0+eTsK
LSAgICBzdyA9IHNyLT53OwotICAgIHNoID0gc3ItPmg7Ci0KLSAgICBpZiAoYWJzKHNyLT5keCkg
Pj0gc3cgfHwgYWJzKHNyLT5keSkgPj0gc2gpIHsKLSAgICAgICAgLyogZG91YnQgd2Via2l0IHdv
dWxkIGJlIHNvIHN0dXBpZC4uLiAqLwotICAgICAgICBEQkcoImZ1bGwgcGFnZSBzY3JvbGwgJSsw
M2QsJSswM2QuIGNvbnZlcnQgdG8gcmVwYWludCAlZCwlZCArICVkeCVkIiwKLSAgICAgICAgICAg
IHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCk7Ci0gICAgICAgIGV3a192aWV3X3JlcGFp
bnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKHN4IDwgMCkgewotICAgICAgICBzdyArPSBzeDsKLSAgICAgICAgc3ggPSAw
OwotICAgIH0KLSAgICBpZiAoc3kgPCAwKSB7Ci0gICAgICAgIHNoICs9IHN5OwotICAgICAgICBz
eSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHN4ICsgc3cgPiBvdykKLSAgICAgICAgc3cgPSBvdyAt
IHN4OwotICAgIGlmIChzeSArIHNoID4gb2gpCi0gICAgICAgIHNoID0gb2ggLSBzeTsKLQotICAg
IGlmIChzdyA8IDApCi0gICAgICAgIHN3ID0gMDsKLSAgICBpZiAoc2ggPCAwKQotICAgICAgICBz
aCA9IDA7Ci0KLSAgICBFSU5BX1NBRkVUWV9PTl9UUlVFX1JFVFVSTighc3cgfHwgIXNoKTsKLSAg
ICBpZiAoIXNyLT5keCkgewotICAgICAgICBpZiAoc3ItPmR5IDwgMCkgewotICAgICAgICAgICAg
REJHKCJzY3JvbGwgdXA6ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgotICAgICAg
ICAgICAgICAgICJyZXBhaW50PSVkLCVkKyVkeCVkIiwKLSAgICAgICAgICAgICAgICBzci0+ZHgs
IHNyLT5keSwgc3gsIHN5LCBzdywgc2ggKyBzci0+ZHksCi0gICAgICAgICAgICAgICAgc3gsIHN5
ICsgc2ggKyBzci0+ZHksIHN3LCAtc3ItPmR5KTsKLQotICAgICAgICAgICAgX2V3a192aWV3XzRi
X21vdmVfcmVnaW9uX3VwCi0gICAgICAgICAgICAgICAgKCh1aW50MzJfdCopcGl4ZWxzLCAtc3It
PmR5LCBzeCwgc3ksIHN3LCBzaCwgb3cpOwotICAgICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZGF0YV91cGRhdGVfYWRkCi0gICAgICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzeCwg
c3ksIHN3LCBzaCArIHNyLT5keSk7Ci0KLSAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRk
KHNkLT5fcHJpdiwgc3gsIHN5ICsgc2ggKyBzci0+ZHksIHN3LCAtc3ItPmR5KTsKLSAgICAgICAg
fSBlbHNlIGlmIChzci0+ZHkgPiAwKSB7Ci0gICAgICAgICAgICBEQkcoInNjcm9sbCBkb3duOiAl
KzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKLSAgICAgICAgICAgICAgICAicmVwYWlu
dD0lZCwlZCslZHglZCIsCi0gICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSAr
IHNyLT5keSwgc3csIHNoIC0gc3ItPmR5LAotICAgICAgICAgICAgICAgIHN4LCBzeSwgc3csIHNy
LT5keSk7Ci0KLSAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9kb3duCi0gICAg
ICAgICAgICAgICAgKCh1aW50MzJfdCopcGl4ZWxzLCBzci0+ZHksIHN4LCBzeSwgc3csIHNoLCBv
dyk7Ci0gICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAgICAg
ICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHN4LCBzeSArIHNyLT5keSwgc3csIHNoIC0g
c3ItPmR5KTsKLQotICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBz
eCwgc3ksIHN3LCBzci0+ZHkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3ItPmR5KSB7
Ci0gICAgICAgIGlmIChzci0+ZHggPCAwKSB7Ci0gICAgICAgICAgICBEQkcoInNjcm9sbCBsZWZ0
OiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKLSAgICAgICAgICAgICAgICAicmVw
YWludD0lZCwlZCslZHglZCIsCi0gICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBz
eSwgc3cgKyBzci0+ZHgsIHNoLAotICAgICAgICAgICAgICAgIHN4ICsgc3cgKyBzci0+ZHgsIHN5
LCAtc3ItPmR4LCBzaCk7Ci0KLSAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9s
ZWZ0Ci0gICAgICAgICAgICAgICAgKCh1aW50MzJfdCopcGl4ZWxzLCAtc3ItPmR4LCBzeCwgc3ks
IHN3LCBzaCwgb3cpOwotICAgICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVf
YWRkCi0gICAgICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzeCwgc3ksIHN3ICsgc3It
PmR4LCBzaCk7Ci0KLSAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwg
c3ggKyBzdyArIHNyLT5keCwgc3ksIC1zci0+ZHgsIHNoKTsKLSAgICAgICAgfSBlbHNlIGlmIChz
ci0+ZHggPiAwKSB7Ci0gICAgICAgICAgICBEQkcoInNjcm9sbCB1cDogJSswM2QsJSswM2QgdXBk
YXRlPSVkLCVkKyVkeCVkLCAiCi0gICAgICAgICAgICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4JWQi
LAotICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCArIHNyLT5keCwgc3ksIHN3IC0g
c3ItPmR4LCBzaCwKLSAgICAgICAgICAgICAgICBzeCwgc3ksIHNyLT5keCwgc2gpOwotCi0gICAg
ICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fcmlnaHQKLSAgICAgICAgICAgICAgICAo
KHVpbnQzMl90KilwaXhlbHMsIHNyLT5keCwgc3gsIHN5LCBzdywgc2gsIG93KTsKLSAgICAgICAg
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAotICAgICAgICAgICAgICAgIChz
ZC0+YmFja2luZ19zdG9yZSwgc3ggKyBzci0+ZHgsIHN5LCBzdyAtIHNyLT5keCwgc2gpOwotCi0g
ICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3ItPmR4
LCBzaCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBFdmFzX0Nvb3JkIG14LCBt
eSwgbXcsIG1oLCBheCwgYXksIGF3LCBhaCwgYngsIGJ5LCBidywgYmg7Ci0KLSAgICAgICAgaWYg
KHNyLT5keCA8IDApIHsKLSAgICAgICAgICAgIG14ID0gc3g7Ci0gICAgICAgICAgICBtdyA9IHN3
ICsgc3ItPmR4OwotICAgICAgICAgICAgYXggPSBteCArIG13OwotICAgICAgICAgICAgYXcgPSAt
c3ItPmR4OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXggPSBzeDsKLSAgICAgICAg
ICAgIGF3ID0gc3ItPmR4OwotICAgICAgICAgICAgbXggPSBheCArIGF3OwotICAgICAgICAgICAg
bXcgPSBzdyAtIHNyLT5keDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzci0+ZHkgPCAwKSB7
Ci0gICAgICAgICAgICBteSA9IHN5OwotICAgICAgICAgICAgbWggPSBzaCArIHNyLT5keTsKLSAg
ICAgICAgICAgIGJ5ID0gbXkgKyBtaDsKLSAgICAgICAgICAgIGJoID0gLXNyLT5keTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ5ID0gc3k7Ci0gICAgICAgICAgICBiaCA9IHNyLT5k
eTsKLSAgICAgICAgICAgIG15ID0gYnkgKyBiaDsKLSAgICAgICAgICAgIG1oID0gc2ggLSBzci0+
ZHk7Ci0gICAgICAgIH0KLQotICAgICAgICBheSA9IG15OwotICAgICAgICBhaCA9IG1oOwotICAg
ICAgICBieCA9IHN4OwotICAgICAgICBidyA9IHN3OwotCi0gICAgICAgIERCRygic2Nyb2xsIGRp
YWdvbmFsOiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKLSAgICAgICAgICAgICJy
ZXBhaW50czogaD0lZCwlZCslZHglZCB2PSVkLCVkKyVkeCVkIiwKLSAgICAgICAgICAgIHNyLT5k
eCwgc3ItPmR5LCBteCwgbXksIG13LCBtaCwgYXgsIGF5LCBhdywgYWgsIGJ4LCBieSwgYncsIGJo
KTsKLQotICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb24KLSAgICAgICAgICAgICgodWlu
dDMyX3QqKXBpeGVscywgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoLCBvdyk7Ci0KLSAg
ICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNkLT5iYWNraW5nX3N0b3Jl
LCBteCwgbXksIG13LCBtaCk7Ci0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJp
diwgYXgsIGF5LCBhdywgYWgpOwotICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3By
aXYsIGJ4LCBieSwgYncsIGJoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Qp
Ci17Ci0gICAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0ICpzcjsKLSAgICBjb25zdCBFd2tfU2Ny
b2xsX1JlcXVlc3QgKnNyX2VuZDsKLSAgICBFdmFzX0Nvb3JkIG93LCBvaDsKLSAgICBzaXplX3Qg
Y291bnQ7Ci0gICAgdm9pZCAqcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc2Qt
PmJhY2tpbmdfc3RvcmUsIDEpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNkLT5i
YWNraW5nX3N0b3JlLCAmb3csICZvaCk7Ci0KLSAgICBzciA9IGV3a192aWV3X3Njcm9sbF9yZXF1
ZXN0c19nZXQoc2QtPl9wcml2LCAmY291bnQpOwotICAgIHNyX2VuZCA9IHNyICsgY291bnQ7Ci0g
ICAgZm9yICg7IHNyIDwgc3JfZW5kOyBzcisrKQotICAgICAgICBfZXdrX3ZpZXdfc2luZ2xlX3Nj
cm9sbF9wcm9jZXNzX3NpbmdsZShzZCwgcGl4ZWxzLCBvdywgb2gsIHNyKTsKLQotICAgIGV2YXNf
b2JqZWN0X2ltYWdlX2RhdGFfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOwotCi0gICAg
cmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xl
X3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAg
RXdrX1ZpZXdfUGFpbnRfQ29udGV4dCAqY3R4dDsKLSAgICBFdmFzX0Nvb3JkIG93LCBvaDsKLSAg
ICB2b2lkICpwaXhlbHM7Ci0gICAgRWluYV9SZWN0YW5nbGUgKnI7Ci0gICAgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnByOwotICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpwcl9lbmQ7Ci0gICAgRWlu
YV9UaWxlciAqdGlsZXI7Ci0gICAgRWluYV9JdGVyYXRvciAqaXRyOwotICAgIGNhaXJvX3N0YXR1
c190IHN0YXR1czsKLSAgICBjYWlyb19zdXJmYWNlX3QgKnN1cmZhY2U7Ci0gICAgY2Fpcm9fZm9y
bWF0X3QgZm9ybWF0OwotICAgIGNhaXJvX3QgKmNhaXJvOwotICAgIHNpemVfdCBjb3VudDsKLSAg
ICBFaW5hX0Jvb2wgcmV0ID0gRUlOQV9UUlVFOwotCi0gICAgaWYgKHNkLT5hbmltYXRlZF96b29t
Lnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKLSAgICAgICAgRXZhc19PYmplY3QgKmNsaXAgPSBl
dmFzX29iamVjdF9jbGlwX2dldChzZC0+YmFja2luZ19zdG9yZSk7Ci0gICAgICAgIEV2YXNfQ29v
cmQgdywgaCwgY3csIGNoOwotICAgICAgICAvLyByZXNldCBlZmZlY3RzIG9mIHpvb21fd2Vha19z
ZXQoKQotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldAotICAgICAgICAgICAgKHNk
LT5iYWNraW5nX3N0b3JlLCAwLCAwLCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKLSAgICAgICAg
ZXZhc19vYmplY3RfbW92ZShjbGlwLCBzZC0+dmlldy54LCBzZC0+dmlldy55KTsKLQotICAgICAg
ICB3ID0gc2QtPnZpZXcudzsKLSAgICAgICAgaCA9IHNkLT52aWV3Lmg7Ci0KLSAgICAgICAgZXdr
X2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAg
ICAgIGlmICh3ID4gY3cpCi0gICAgICAgICAgICB3ID0gY3c7Ci0gICAgICAgIGlmIChoID4gY2gp
Ci0gICAgICAgICAgICBoID0gY2g7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3
LCBoKTsKLSAgICB9Ci0KLSAgICBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChz
ZC0+YmFja2luZ19zdG9yZSwgMSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc2Qt
PmJhY2tpbmdfc3RvcmUsICZvdywgJm9oKTsKLSAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJH
QjMyOwotCi0gICAgc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
Ci0gICAgICAgICgodW5zaWduZWQgY2hhciopcGl4ZWxzLCBmb3JtYXQsIG93LCBvaCwgb3cgKiA0
KTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKTsKLSAgICBpZiAo
c3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90
IGNyZWF0ZSBzdXJmYWNlIGZyb20gZGF0YSAlZHglZDogJXMiLAotICAgICAgICAgICAgb3csIG9o
LCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAgICByZXQgPSBFSU5BX0ZB
TFNFOwotICAgICAgICBnb3RvIGVycm9yX2NhaXJvX3N1cmZhY2U7Ci0gICAgfQotICAgIGNhaXJv
ID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOwotICAgIHN0YXR1cyA9IGNhaXJvX3N0YXR1cyhjYWly
byk7Ci0gICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewotICAgICAgICBF
UlIoImNvdWxkIG5vdCBjcmVhdGUgY2Fpcm8gZnJvbSBzdXJmYWNlICVkeCVkOiAlcyIsCi0gICAg
ICAgICAgICBvdywgb2gsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAg
IHJldCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGdvdG8gZXJyb3JfY2Fpcm87Ci0gICAgfQotCi0g
ICAgY3R4dCA9IGV3a192aWV3X3BhaW50X2NvbnRleHRfbmV3KHNkLT5fcHJpdiwgY2Fpcm8pOwot
ICAgIGlmICghY3R4dCkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgcGFpbnQgY29u
dGV4dCIpOwotICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOwotICAgICAgICBnb3RvIGVycm9yX3Bh
aW50X2NvbnRleHQ7Ci0gICAgfQotCi0gICAgdGlsZXIgPSBlaW5hX3RpbGVyX25ldyhvdywgb2gp
OwotICAgIGlmICghdGlsZXIpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVy
ICVkeCVkIiwgb3csIG9oKTsKLSAgICAgICAgcmV0ID0gRUlOQV9GQUxTRTsKLSAgICAgICAgZ290
byBlcnJvcl90aWxlcjsKLSAgICB9Ci0KLSAgICBwciA9IGV3a192aWV3X3JlcGFpbnRzX2dldChz
ZC0+X3ByaXYsICZjb3VudCk7Ci0gICAgcHJfZW5kID0gcHIgKyBjb3VudDsKLSAgICBmb3IgKDsg
cHIgPCBwcl9lbmQ7IHByKyspCi0gICAgICAgIGVpbmFfdGlsZXJfcmVjdF9hZGQodGlsZXIsIHBy
KTsKLQotICAgIGl0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHRpbGVyKTsKLSAgICBpZiAo
IWl0cikgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIHRpbGVyIik7
Ci0gICAgICAgIHJldCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGdvdG8gZXJyb3JfaXRlcmF0b3I7
Ci0gICAgfQotCi0gICAgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUoc2QtPl9w
cml2KTsKLQotICAgIGludCBzeCwgc3k7Ci0gICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNk
LT5tYWluX2ZyYW1lLCAmc3gsICZzeSk7Ci0KLSAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRy
LCByKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHNjcm9sbGVkX3JlY3QgPSB7Ci0gICAgICAg
ICAgICByLT54ICsgc3gsIHItPnkgKyBzeSwKLSAgICAgICAgICAgIHItPncsIHItPmgKLSAgICAg
ICAgfTsKLQotICAgICAgICBld2tfdmlld19wYWludF9jb250ZXh0X3NhdmUoY3R4dCk7Ci0KLSAg
ICAgICAgaWYgKChzeCkgfHwgKHN5KSkKLSAgICAgICAgICAgIGV3a192aWV3X3BhaW50X2NvbnRl
eHRfdHJhbnNsYXRlKGN0eHQsIC1zeCwgLXN5KTsKLQotICAgICAgICBld2tfdmlld19wYWludF9j
b250ZXh0X2NsaXAoY3R4dCwgJnNjcm9sbGVkX3JlY3QpOwotICAgICAgICBld2tfdmlld19wYWlu
dF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKGN0eHQsICZzY3JvbGxlZF9yZWN0KTsKLQotICAgICAg
ICBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoY3R4dCk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAotICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3Jl
LCByLT54LCByLT55LCByLT53LCByLT5oKTsKLSAgICB9Ci0gICAgZWluYV9pdGVyYXRvcl9mcmVl
KGl0cik7Ci0KLWVycm9yX2l0ZXJhdG9yOgotICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlcik7Ci1l
cnJvcl90aWxlcjoKLSAgICBld2tfdmlld19wYWludF9jb250ZXh0X2ZyZWUoY3R4dCk7Ci1lcnJv
cl9wYWludF9jb250ZXh0OgotICAgIGNhaXJvX2Rlc3Ryb3koY2Fpcm8pOwotZXJyb3JfY2Fpcm86
Ci0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwotZXJyb3JfY2Fpcm9fc3VyZmFj
ZToKLSAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3NldChzZC0+YmFja2luZ19zdG9yZSwgcGl4
ZWxzKTsgLyogZGVjIHJlZmNvdW50ICovCi0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19T
bWFydF9EYXRhICpzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkK
LXsKLSAgICAvLyBUT0RPOiByZXZpZXcKLSAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBzZC0+YW5p
bWF0ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIEV2YXNfQ29vcmQgdyA9IHNkLT52aWV3LncgKiBz
Y2FsZTsKLSAgICBFdmFzX0Nvb3JkIGggPSBzZC0+dmlldy5oICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBkeCwgZHksIGN3LCBjaDsKLSAgICBFdmFzX09iamVjdCAqY2xpcCA9IGV2YXNfb2JqZWN0
X2NsaXBfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKLQotICAgIGV3a19mcmFtZV9jb250ZW50c19z
aXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpOwotICAgIGlmIChzZC0+dmlldy53ID4g
MCAmJiBzZC0+dmlldy5oID4gMCkgewotICAgICAgICBkeCA9ICh3ICogKHNkLT52aWV3LncgLSBj
eCkpIC8gc2QtPnZpZXcudzsKLSAgICAgICAgZHkgPSAoaCAqIChzZC0+dmlldy5oIC0gY3kpKSAv
IHNkLT52aWV3Lmg7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHggPSAwOwotICAgICAgICBkeSA9
IDA7Ci0gICAgfQotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tpbmdf
c3RvcmUsIGN4ICsgZHgsIGN5ICsgZHksIHcsIGgpOwotCi0gICAgaWYgKHNkLT52aWV3LncgPiAw
ICYmIHNkLT52aWV3LmggPiAwKSB7Ci0gICAgICAgIGR4ID0gKChzZC0+dmlldy53IC0gdykgKiBj
eCkgLyBzZC0+dmlldy53OwotICAgICAgICBkeSA9ICgoc2QtPnZpZXcuaCAtIGgpICogY3kpIC8g
c2QtPnZpZXcuaDsKLSAgICB9IGVsc2UgewotICAgICAgICBkeCA9IDA7Ci0gICAgICAgIGR5ID0g
MDsKLSAgICB9Ci0gICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzZC0+dmlldy54ICsgZHgsIHNk
LT52aWV3LnkgKyBkeSk7Ci0KLSAgICBpZiAoY3cgPCBzZC0+dmlldy53KQotICAgICAgICB3ID0g
Y3cgKiBzY2FsZTsKLSAgICBpZiAoY2ggPCBzZC0+dmlldy5oKQotICAgICAgICBoID0gY2ggKiBz
Y2FsZTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7Ci0gICAgcmV0dXJuIEVJ
TkFfVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF96b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwgRWluYV9Cb29sIHNt
b290aF9zY2FsZSkKLXsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KHNk
LT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldChFd2tfVmlld19TbWFydF9EYXRhICpzZCwgdW5z
aWduZWQgY2hhciByLCB1bnNpZ25lZCBjaGFyIGcsIHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQg
Y2hhciBhKQotewotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzZC0+YmFja2luZ19z
dG9yZSwgYSA8IDI1NSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0
KEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGkpCi17Ci0gICAgaWYgKCFld2tfdmlld19iYXNlX3Nt
YXJ0X3NldChhcGkpKQotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLQotICAgIGlmIChFSU5B
X1VOTElLRUxZKCFfcGFyZW50X3NjLnNjLmFkZCkpCi0gICAgICAgIGV3a192aWV3X2Jhc2Vfc21h
cnRfc2V0KCZfcGFyZW50X3NjKTsKLQotICAgIGFwaS0+c2MuYWRkID0gX2V3a192aWV3X3Npbmds
ZV9zbWFydF9hZGQ7Ci0gICAgYXBpLT5zYy5yZXNpemUgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0
X3Jlc2l6ZTsKLQotICAgIGFwaS0+YmFja2luZ19zdG9yZV9hZGQgPSBfZXdrX3ZpZXdfc2luZ2xl
X3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkOwotICAgIGFwaS0+c2Nyb2xsc19wcm9jZXNzID0gX2V3
a192aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nlc3M7Ci0gICAgYXBpLT5yZXBhaW50c19w
cm9jZXNzID0gX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzOwotICAgIGFw
aS0+em9vbV93ZWFrX3NldCA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3NldDsK
LSAgICBhcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0ID0gX2V3a192aWV3X3NpbmdsZV9z
bWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldDsKLSAgICBhcGktPmJnX2NvbG9yX3NldCA9
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmdfY29sb3Jfc2V0OwotCi0gICAgcmV0dXJuIEVJTkFf
VFJVRTsKLX0KLQotc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0ICpfZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X2NsYXNzX25ldyh2b2lkKQotewotICAgIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBh
cGkgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRXdrX1ZpZXdfU2lu
Z2xlIik7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQgKnNtYXJ0ID0gMDsKLQotICAgIGlmIChFSU5B
X1VOTElLRUxZKCFzbWFydCkpIHsKLSAgICAgICAgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3NldCgm
YXBpKTsKLSAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gc21hcnQ7Ci19Ci0KLUV2YXNfT2JqZWN0ICpld2tfdmlld19zaW5n
bGVfYWRkKEV2YXMgKmUpCi17Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldygpKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3X3NpbmdsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGJhZjgwNTYwNWZlMjg0ZDU0NzRm
NmIzMDIxMmI5YTJkNTBhOGE5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCkBAIC0wLDAgKzEsNTY5IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisgICAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJld2tfdmlldy5oIgorCisjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCisj
aW5jbHVkZSAiZXdrX2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorCisjaW5j
bHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgorI2luY2x1ZGUg
PHN0cmluZy5oPgorCitzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVX
S19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKKworc3RhdGljIHZvaWQgX2V3a192aWV3X3Np
bmdsZV9vbl9kZWwodm9pZCAqZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKm8sIHZvaWQgKmV2
ZW50X2luZm8pCit7CisgICAgRXZhc19PYmplY3QgKmNsaXAgPSAoRXZhc19PYmplY3QqKWRhdGE7
CisgICAgZXZhc19vYmplY3RfZGVsKGNsaXApOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X2FkZChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9E
YXRhICpzZDsKKworICAgIF9wYXJlbnRfc2Muc2MuYWRkKG8pOworCisgICAgc2QgPSAoRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqKWV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAgIGlmICgh
c2QpCisgICAgICAgIHJldHVybjsKKworICAgIEV2YXNfT2JqZWN0ICpjbGlwID0gZXZhc19vYmpl
Y3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFzKTsKKyAgICBldmFzX29iamVjdF9jbGlwX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgY2xpcCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2FkZChjbGlwLCBvKTsKKyAgICBldmFzX29iamVjdF9zaG93KGNsaXApOworCisgICAgZXZhc19v
YmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkCisgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgRVZB
U19DQUxMQkFDS19ERUwsIF9ld2tfdmlld19zaW5nbGVfb25fZGVsLCBjbGlwKTsKK30KKworc3Rh
dGljIEV2YXNfT2JqZWN0ICpfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRk
KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIEV2YXNfT2JqZWN0ICpicyA9IGV2YXNf
b2JqZWN0X2ltYWdlX2FkZChzZC0+YmFzZS5ldmFzKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9h
bHBoYV9zZXQoYnMsIEVJTkFfRkFMU0UpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9z
Y2FsZV9zZXQoYnMsIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlKTsKKworICAgIHJldHVybiBi
czsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemUoRXZhc19P
YmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2YXNfb2JqZWN0X3NtYXJ0X2Rh
dGFfZ2V0KG8pOworICAgIF9wYXJlbnRfc2Muc2MucmVzaXplKG8sIHcsIGgpOworCisgICAgaWYg
KCFzZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBh
bmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQorICAgIGV2YXNfb2JqZWN0X2ltYWdl
X3NpemVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBpZiAoc2QtPmFuaW1hdGVk
X3pvb20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkgeworICAgICAgICBFdmFzX09iamVjdCAqY2xp
cCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICAgICAgRXZh
c19Db29yZCB4LCB5LCBjdywgY2g7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0
KHNkLT5iYWNraW5nX3N0b3JlLCAwLCAwLCB3LCBoKTsKKyAgICAgICAgZXZhc19vYmplY3RfZ2Vv
bWV0cnlfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAmeCwgJnksIDAsIDApOworICAgICAgICBldmFz
X29iamVjdF9tb3ZlKGNsaXAsIHgsIHkpOworICAgICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6
ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKKyAgICAgICAgaWYgKHcgPiBjdykKKyAg
ICAgICAgICAgIHcgPSBjdzsKKyAgICAgICAgaWYgKGggPiBjaCkKKyAgICAgICAgICAgIGggPSBj
aDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOworICAgIH0KK30KKwor
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCAq
aW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3Qg
aCwgc2l6ZV90IHJvd3NpemUpCit7CisgICAgdWludDMyX3QgKnNyYzsKKyAgICB1aW50MzJfdCAq
ZHN0OworCisgICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7CisgICAgc3JjID0gZHN0
ICsgcm93cyAqIHJvd3NpemU7CisgICAgaCAtPSByb3dzOworCisgICAgZm9yICg7IGggPiAwOyBo
LS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKKyAgICAgICAgbWVtY3B5KGRzdCwg
c3JjLCB3ICogNCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9y
ZWdpb25fZG93bih1aW50MzJfdCAqaW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90
IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCit7CisgICAgdWludDMyX3Qg
KnNyYzsKKyAgICB1aW50MzJfdCAqZHN0OworCisgICAgaCAtPSByb3dzOworICAgIHNyYyA9IGlt
YWdlICsgeCArICh5ICsgaCAtIDEpICogcm93c2l6ZTsKKyAgICBkc3QgPSBzcmMgKyByb3dzICog
cm93c2l6ZTsKKworICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09
IHJvd3NpemUpCisgICAgICAgIG1lbWNweShkc3QsIHNyYywgdyAqIDQpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KHVpbnQzMl90ICpkc3QsIGNv
bnN0IHVpbnQzMl90ICpzcmMsIHNpemVfdCBjb3VudCkKK3sKKyAgICB1aW50MzJfdCAqZHN0X2Vu
ZCA9IGRzdCArIGNvdW50OworICAgIC8qIG5vIG1lbWNweSgpIGFzIGl0IGRvZXMgbm90IGFsbG93
IG92ZXJsYXBwaW5nIHJlZ2lvbnMgKi8KKyAgICAvKiBubyBtZW1tb3ZlKCkgYXMgaXQgd2lsbCBj
b3B5IHRvIGEgdGVtcG9yYXJ5IGJ1ZmZlciAqLworICAgIC8qIFRPRE86IGxvb3AgdW5yb2xsaW5n
LCBjb3B5aW5nIHVwIHRvIHF1YWQtd29yZHMgd291bGQgaGVscCAqLworICAgIGZvciAoOyBkc3Qg
PCBkc3RfZW5kOyBkc3QrKywgc3JjKyspCisgICAgICAgICpkc3QgPSAqc3JjOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodCh1aW50MzJfdCAqZHN0
LCB1aW50MzJfdCAqc3JjLCBzaXplX3QgY291bnQpCit7CisgICAgdWludDMyX3QgKmRzdF9lbmQg
PSBkc3QgLSBjb3VudDsKKyAgICAvKiBubyBtZW1jcHkoKSBhcyBpdCBkb2VzIG5vdCBhbGxvdyBv
dmVybGFwcGluZyByZWdpb25zICovCisgICAgLyogbm8gbWVtbW92ZSgpIGFzIGl0IHdpbGwgY29w
eSB0byBhIHRlbXBvcmFyeSBidWZmZXIgKi8KKyAgICAvKiBUT0RPOiBsb29wIHVucm9sbGluZywg
Y29weWluZyB1cCB0byBxdWFkLXdvcmRzIHdvdWxkIGhlbHAgKi8KKyAgICBmb3IgKDsgZHN0ID4g
ZHN0X2VuZDsgZHN0LS0sIHNyYy0tKQorICAgICAgICAqZHN0ID0gKnNyYzsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0KHVpbnQzMl90ICppbWFn
ZSwgc2l6ZV90IGNvbHMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBz
aXplX3Qgcm93c2l6ZSkKK3sKKyAgICB1aW50MzJfdCAqc3JjOworICAgIHVpbnQzMl90ICpkc3Q7
CisKKyAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKKyAgICBzcmMgPSBkc3QgKyBj
b2xzOworICAgIHcgLT0gY29sczsKKworICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93
c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVm
dChkc3QsIHNyYywgdyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92
ZV9yZWdpb25fcmlnaHQodWludDMyX3QgKmltYWdlLCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNp
emVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQoreworICAgIHVpbnQz
Ml90ICpzcmM7CisgICAgdWludDMyX3QgKmRzdDsKKworICAgIHcgLT0gY29sczsKKyAgICBzcmMg
PSBpbWFnZSArICh4ICsgdyAtIDEpICsgeSAqIHJvd3NpemU7CisgICAgZHN0ID0gc3JjICsgY29s
czsKKworICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3Np
emUpCisgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOwor
fQorCisvKiBjYXRjaC1hbGwgZnVuY3Rpb24sIG5vdCBhcyBvcHRpbWl6ZWQgYXMgdGhlIG90aGVy
cywgYnV0IGRvZXMgdGhlIHdvcmsuICovCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRi
X21vdmVfcmVnaW9uKHVpbnQzMl90ICppbWFnZSwgaW50IGR4LCBpbnQgZHksIHNpemVfdCB4LCBz
aXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3sKKyAgICB1aW50
MzJfdCAqc3JjOworICAgIHVpbnQzMl90ICpkc3Q7CisKKyAgICBpZiAoZHkgPCAwKSB7CisgICAg
ICAgIGggKz0gZHk7CisgICAgICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiByb3dzaXplOworICAg
ICAgICBzcmMgPSBkc3QgLSBkeSAqIHJvd3NpemU7CisgICAgICAgIGlmIChkeCA8PSAwKSB7Cisg
ICAgICAgICAgICB3ICs9IGR4OworICAgICAgICAgICAgc3JjIC09IGR4OworICAgICAgICAgICAg
Zm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKKyAgICAg
ICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdyAtPSBkeDsKKyAgICAgICAgICAgIHNyYyArPSB3
IC0gMTsKKyAgICAgICAgICAgIGRzdCArPSB3ICsgZHggLTE7CisgICAgICAgICAgICBmb3IgKDsg
aCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQorICAgICAgICAgICAg
ICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaCAtPSBkeTsKKyAgICAgICAgc3JjID0gaW1hZ2UgKyB4
ICsgKHkgKyBoIC0gMSkgKiByb3dzaXplOworICAgICAgICBkc3QgPSBzcmMgKyBkeSAqIHJvd3Np
emU7CisgICAgICAgIGlmIChkeCA8PSAwKSB7CisgICAgICAgICAgICB3ICs9IGR4OworICAgICAg
ICAgICAgc3JjIC09IGR4OworICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSBy
b3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92
ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dyAtPSBkeDsKKyAgICAgICAgICAgIHNyYyArPSB3IC0gMTsKKyAgICAgICAgICAgIGRzdCArPSB3
ICsgZHggLSAxOworICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXpl
LCBzcmMgLT0gcm93c2l6ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5l
X3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkLCB2b2lkICpwaXhlbHMsIEV2YXNfQ29vcmQgb3csIEV2YXNfQ29vcmQgb2gs
IGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqc3IpCit7CisgICAgRXZhc19Db29yZCBzeCwgc3ks
IHN3LCBzaDsKKworICAgIERCRygiJWQsJWQgKyAlZCwlZCAlKzAzZCwlKzAzZCwgc3RvcmU6ICVw
ICVkeCVkIiwKKyAgICAgICAgc3ItPngsIHNyLT55LCBzci0+dywgc3ItPmgsIHNyLT5keCwgc3It
PmR5LCBwaXhlbHMsIG93LCBvaCk7CisKKyAgICBzeCA9IHNyLT54OworICAgIHN5ID0gc3ItPnk7
CisgICAgc3cgPSBzci0+dzsKKyAgICBzaCA9IHNyLT5oOworCisgICAgaWYgKGFicyhzci0+ZHgp
ID49IHN3IHx8IGFicyhzci0+ZHkpID49IHNoKSB7CisgICAgICAgIC8qIGRvdWJ0IHdlYmtpdCB3
b3VsZCBiZSBzbyBzdHVwaWQuLi4gKi8KKyAgICAgICAgREJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUr
MDNkLCUrMDNkLiBjb252ZXJ0IHRvIHJlcGFpbnQgJWQsJWQgKyAlZHglZCIsCisgICAgICAgICAg
ICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywgc2gpOworICAgICAgICBld2tfdmlld19yZXBh
aW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChzeCA8IDApIHsKKyAgICAgICAgc3cgKz0gc3g7CisgICAgICAgIHN4ID0g
MDsKKyAgICB9CisgICAgaWYgKHN5IDwgMCkgeworICAgICAgICBzaCArPSBzeTsKKyAgICAgICAg
c3kgPSAwOworICAgIH0KKworICAgIGlmIChzeCArIHN3ID4gb3cpCisgICAgICAgIHN3ID0gb3cg
LSBzeDsKKyAgICBpZiAoc3kgKyBzaCA+IG9oKQorICAgICAgICBzaCA9IG9oIC0gc3k7CisKKyAg
ICBpZiAoc3cgPCAwKQorICAgICAgICBzdyA9IDA7CisgICAgaWYgKHNoIDwgMCkKKyAgICAgICAg
c2ggPSAwOworCisgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk4oIXN3IHx8ICFzaCk7Cisg
ICAgaWYgKCFzci0+ZHgpIHsKKyAgICAgICAgaWYgKHNyLT5keSA8IDApIHsKKyAgICAgICAgICAg
IERCRygic2Nyb2xsIHVwOiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKKyAgICAg
ICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHglZCIsCisgICAgICAgICAgICAgICAgc3ItPmR4
LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoICsgc3ItPmR5LAorICAgICAgICAgICAgICAgIHN4LCBz
eSArIHNoICsgc3ItPmR5LCBzdywgLXNyLT5keSk7CisKKyAgICAgICAgICAgIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl91cAorICAgICAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVscywgLXNy
LT5keSwgc3gsIHN5LCBzdywgc2gsIG93KTsKKyAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2RhdGFfdXBkYXRlX2FkZAorICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gs
IHN5LCBzdywgc2ggKyBzci0+ZHkpOworCisgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2Fk
ZChzZC0+X3ByaXYsIHN4LCBzeSArIHNoICsgc3ItPmR5LCBzdywgLXNyLT5keSk7CisgICAgICAg
IH0gZWxzZSBpZiAoc3ItPmR5ID4gMCkgeworICAgICAgICAgICAgREJHKCJzY3JvbGwgZG93bjog
JSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCisgICAgICAgICAgICAgICAgInJlcGFp
bnQ9JWQsJWQrJWR4JWQiLAorICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3kg
KyBzci0+ZHksIHN3LCBzaCAtIHNyLT5keSwKKyAgICAgICAgICAgICAgICBzeCwgc3ksIHN3LCBz
ci0+ZHkpOworCisgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fZG93bgorICAg
ICAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVscywgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCwg
b3cpOworICAgICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCisgICAg
ICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzeCwgc3kgKyBzci0+ZHksIHN3LCBzaCAt
IHNyLT5keSk7CisKKyAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwg
c3gsIHN5LCBzdywgc3ItPmR5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXNyLT5keSkg
eworICAgICAgICBpZiAoc3ItPmR4IDwgMCkgeworICAgICAgICAgICAgREJHKCJzY3JvbGwgbGVm
dDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCisgICAgICAgICAgICAgICAgInJl
cGFpbnQ9JWQsJWQrJWR4JWQiLAorICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwg
c3ksIHN3ICsgc3ItPmR4LCBzaCwKKyAgICAgICAgICAgICAgICBzeCArIHN3ICsgc3ItPmR4LCBz
eSwgLXNyLT5keCwgc2gpOworCisgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25f
bGVmdAorICAgICAgICAgICAgICAgICgodWludDMyX3QqKXBpeGVscywgLXNyLT5keCwgc3gsIHN5
LCBzdywgc2gsIG93KTsKKyAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRl
X2FkZAorICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gsIHN5LCBzdyArIHNy
LT5keCwgc2gpOworCisgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYs
IHN4ICsgc3cgKyBzci0+ZHgsIHN5LCAtc3ItPmR4LCBzaCk7CisgICAgICAgIH0gZWxzZSBpZiAo
c3ItPmR4ID4gMCkgeworICAgICAgICAgICAgREJHKCJzY3JvbGwgdXA6ICUrMDNkLCUrMDNkIHVw
ZGF0ZT0lZCwlZCslZHglZCwgIgorICAgICAgICAgICAgICAgICJyZXBhaW50PSVkLCVkKyVkeCVk
IiwKKyAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3ggKyBzci0+ZHgsIHN5LCBzdyAt
IHNyLT5keCwgc2gsCisgICAgICAgICAgICAgICAgc3gsIHN5LCBzci0+ZHgsIHNoKTsKKworICAg
ICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3JpZ2h0CisgICAgICAgICAgICAgICAg
KCh1aW50MzJfdCopcGl4ZWxzLCBzci0+ZHgsIHN4LCBzeSwgc3csIHNoLCBvdyk7CisgICAgICAg
ICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKKyAgICAgICAgICAgICAgICAo
c2QtPmJhY2tpbmdfc3RvcmUsIHN4ICsgc3ItPmR4LCBzeSwgc3cgLSBzci0+ZHgsIHNoKTsKKwor
ICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHNyLT5k
eCwgc2gpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRXZhc19Db29yZCBteCwg
bXksIG13LCBtaCwgYXgsIGF5LCBhdywgYWgsIGJ4LCBieSwgYncsIGJoOworCisgICAgICAgIGlm
IChzci0+ZHggPCAwKSB7CisgICAgICAgICAgICBteCA9IHN4OworICAgICAgICAgICAgbXcgPSBz
dyArIHNyLT5keDsKKyAgICAgICAgICAgIGF4ID0gbXggKyBtdzsKKyAgICAgICAgICAgIGF3ID0g
LXNyLT5keDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF4ID0gc3g7CisgICAgICAg
ICAgICBhdyA9IHNyLT5keDsKKyAgICAgICAgICAgIG14ID0gYXggKyBhdzsKKyAgICAgICAgICAg
IG13ID0gc3cgLSBzci0+ZHg7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3ItPmR5IDwgMCkg
eworICAgICAgICAgICAgbXkgPSBzeTsKKyAgICAgICAgICAgIG1oID0gc2ggKyBzci0+ZHk7Cisg
ICAgICAgICAgICBieSA9IG15ICsgbWg7CisgICAgICAgICAgICBiaCA9IC1zci0+ZHk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBieSA9IHN5OworICAgICAgICAgICAgYmggPSBzci0+
ZHk7CisgICAgICAgICAgICBteSA9IGJ5ICsgYmg7CisgICAgICAgICAgICBtaCA9IHNoIC0gc3It
PmR5OworICAgICAgICB9CisKKyAgICAgICAgYXkgPSBteTsKKyAgICAgICAgYWggPSBtaDsKKyAg
ICAgICAgYnggPSBzeDsKKyAgICAgICAgYncgPSBzdzsKKworICAgICAgICBEQkcoInNjcm9sbCBk
aWFnb25hbDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCisgICAgICAgICAgICAi
cmVwYWludHM6IGg9JWQsJWQrJWR4JWQgdj0lZCwlZCslZHglZCIsCisgICAgICAgICAgICBzci0+
ZHgsIHNyLT5keSwgbXgsIG15LCBtdywgbWgsIGF4LCBheSwgYXcsIGFoLCBieCwgYnksIGJ3LCBi
aCk7CisKKyAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uCisgICAgICAgICAgICAoKHVp
bnQzMl90KilwaXhlbHMsIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCwgb3cpOworCisg
ICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzZC0+YmFja2luZ19zdG9y
ZSwgbXgsIG15LCBtdywgbWgpOworICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3By
aXYsIGF4LCBheSwgYXcsIGFoKTsKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9w
cml2LCBieCwgYnksIGJ3LCBiaCk7CisgICAgfQorfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
KQoreworICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCAqc3I7CisgICAgY29uc3QgRXdrX1Nj
cm9sbF9SZXF1ZXN0ICpzcl9lbmQ7CisgICAgRXZhc19Db29yZCBvdywgb2g7CisgICAgc2l6ZV90
IGNvdW50OworICAgIHZvaWQgKnBpeGVscyA9IGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNk
LT5iYWNraW5nX3N0b3JlLCAxKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChzZC0+
YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOworCisgICAgc3IgPSBld2tfdmlld19zY3JvbGxfcmVx
dWVzdHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBzcl9lbmQgPSBzciArIGNvdW50Owor
ICAgIGZvciAoOyBzciA8IHNyX2VuZDsgc3IrKykKKyAgICAgICAgX2V3a192aWV3X3NpbmdsZV9z
Y3JvbGxfcHJvY2Vzc19zaW5nbGUoc2QsIHBpeGVscywgb3csIG9oLCBzcik7CisKKyAgICBldmFz
X29iamVjdF9pbWFnZV9kYXRhX3NldChzZC0+YmFja2luZ19zdG9yZSwgcGl4ZWxzKTsKKworICAg
IHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Npbmds
ZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAg
IEV3a19WaWV3X1BhaW50X0NvbnRleHQgKmN0eHQ7CisgICAgRXZhc19Db29yZCBvdywgb2g7Cisg
ICAgdm9pZCAqcGl4ZWxzOworICAgIEVpbmFfUmVjdGFuZ2xlICpyOworICAgIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICpwcjsKKyAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSAqcHJfZW5kOworICAgIEVp
bmFfVGlsZXIgKnRpbGVyOworICAgIEVpbmFfSXRlcmF0b3IgKml0cjsKKyAgICBjYWlyb19zdGF0
dXNfdCBzdGF0dXM7CisgICAgY2Fpcm9fc3VyZmFjZV90ICpzdXJmYWNlOworICAgIGNhaXJvX2Zv
cm1hdF90IGZvcm1hdDsKKyAgICBjYWlyb190ICpjYWlybzsKKyAgICBzaXplX3QgY291bnQ7Cisg
ICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsKKworICAgIGlmIChzZC0+YW5pbWF0ZWRfem9v
bS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7CisgICAgICAgIEV2YXNfT2JqZWN0ICpjbGlwID0g
ZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgICAgICBFdmFzX0Nv
b3JkIHcsIGgsIGN3LCBjaDsKKyAgICAgICAgLy8gcmVzZXQgZWZmZWN0cyBvZiB6b29tX3dlYWtf
c2V0KCkKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQKKyAgICAgICAgICAgIChz
ZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7CisgICAgICAg
IGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc2QtPnZpZXcueCwgc2QtPnZpZXcueSk7CisKKyAgICAg
ICAgdyA9IHNkLT52aWV3Lnc7CisgICAgICAgIGggPSBzZC0+dmlldy5oOworCisgICAgICAgIGV3
a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpOworICAg
ICAgICBpZiAodyA+IGN3KQorICAgICAgICAgICAgdyA9IGN3OworICAgICAgICBpZiAoaCA+IGNo
KQorICAgICAgICAgICAgaCA9IGNoOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwg
dywgaCk7CisgICAgfQorCisgICAgcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQo
c2QtPmJhY2tpbmdfc3RvcmUsIDEpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNk
LT5iYWNraW5nX3N0b3JlLCAmb3csICZvaCk7CisgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FS
R0IzMjsKKworICAgIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YQorICAgICAgICAoKHVuc2lnbmVkIGNoYXIqKXBpeGVscywgZm9ybWF0LCBvdywgb2gsIG93ICog
NCk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSk7CisgICAgaWYg
KHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgeworICAgICAgICBFUlIoImNvdWxkIG5v
dCBjcmVhdGUgc3VyZmFjZSBmcm9tIGRhdGEgJWR4JWQ6ICVzIiwKKyAgICAgICAgICAgIG93LCBv
aCwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgcmV0ID0gRUlOQV9G
QUxTRTsKKyAgICAgICAgZ290byBlcnJvcl9jYWlyb19zdXJmYWNlOworICAgIH0KKyAgICBjYWly
byA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXMoY2Fp
cm8pOworICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAg
RVJSKCJjb3VsZCBub3QgY3JlYXRlIGNhaXJvIGZyb20gc3VyZmFjZSAlZHglZDogJXMiLAorICAg
ICAgICAgICAgb3csIG9oLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOworICAgICAg
ICByZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBnb3RvIGVycm9yX2NhaXJvOworICAgIH0KKwor
ICAgIGN0eHQgPSBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhzZC0+X3ByaXYsIGNhaXJvKTsK
KyAgICBpZiAoIWN0eHQpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHBhaW50IGNv
bnRleHQiKTsKKyAgICAgICAgcmV0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgZ290byBlcnJvcl9w
YWludF9jb250ZXh0OworICAgIH0KKworICAgIHRpbGVyID0gZWluYV90aWxlcl9uZXcob3csIG9o
KTsKKyAgICBpZiAoIXRpbGVyKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxl
ciAlZHglZCIsIG93LCBvaCk7CisgICAgICAgIHJldCA9IEVJTkFfRkFMU0U7CisgICAgICAgIGdv
dG8gZXJyb3JfdGlsZXI7CisgICAgfQorCisgICAgcHIgPSBld2tfdmlld19yZXBhaW50c19nZXQo
c2QtPl9wcml2LCAmY291bnQpOworICAgIHByX2VuZCA9IHByICsgY291bnQ7CisgICAgZm9yICg7
IHByIDwgcHJfZW5kOyBwcisrKQorICAgICAgICBlaW5hX3RpbGVyX3JlY3RfYWRkKHRpbGVyLCBw
cik7CisKKyAgICBpdHIgPSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0aWxlcik7CisgICAgaWYg
KCFpdHIpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yIGZvciB0aWxlciIp
OworICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBnb3RvIGVycm9yX2l0ZXJhdG9y
OworICAgIH0KKworICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNkLT5f
cHJpdik7CisKKyAgICBpbnQgc3gsIHN5OworICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChz
ZC0+bWFpbl9mcmFtZSwgJnN4LCAmc3kpOworCisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0
ciwgcikgeworICAgICAgICBFaW5hX1JlY3RhbmdsZSBzY3JvbGxlZF9yZWN0ID0geworICAgICAg
ICAgICAgci0+eCArIHN4LCByLT55ICsgc3ksCisgICAgICAgICAgICByLT53LCByLT5oCisgICAg
ICAgIH07CisKKyAgICAgICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKGN0eHQpOworCisg
ICAgICAgIGlmICgoc3gpIHx8IChzeSkpCisgICAgICAgICAgICBld2tfdmlld19wYWludF9jb250
ZXh0X3RyYW5zbGF0ZShjdHh0LCAtc3gsIC1zeSk7CisKKyAgICAgICAgZXdrX3ZpZXdfcGFpbnRf
Y29udGV4dF9jbGlwKGN0eHQsICZzY3JvbGxlZF9yZWN0KTsKKyAgICAgICAgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9wYWludF9jb250ZW50cyhjdHh0LCAmc2Nyb2xsZWRfcmVjdCk7CisKKyAgICAg
ICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKGN0eHQpOworICAgICAgICBldmFzX29i
amVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKKyAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9y
ZSwgci0+eCwgci0+eSwgci0+dywgci0+aCk7CisgICAgfQorICAgIGVpbmFfaXRlcmF0b3JfZnJl
ZShpdHIpOworCitlcnJvcl9pdGVyYXRvcjoKKyAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZXIpOwor
ZXJyb3JfdGlsZXI6CisgICAgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9mcmVlKGN0eHQpOworZXJy
b3JfcGFpbnRfY29udGV4dDoKKyAgICBjYWlyb19kZXN0cm95KGNhaXJvKTsKK2Vycm9yX2NhaXJv
OgorICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKK2Vycm9yX2NhaXJvX3N1cmZh
Y2U6CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHBp
eGVscyk7IC8qIGRlYyByZWZjb3VudCAqLworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kp
Cit7CisgICAgLy8gVE9ETzogcmV2aWV3CisgICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gc2QtPmFu
aW1hdGVkX3pvb20uem9vbS5zdGFydDsKKyAgICBFdmFzX0Nvb3JkIHcgPSBzZC0+dmlldy53ICog
c2NhbGU7CisgICAgRXZhc19Db29yZCBoID0gc2QtPnZpZXcuaCAqIHNjYWxlOworICAgIEV2YXNf
Q29vcmQgZHgsIGR5LCBjdywgY2g7CisgICAgRXZhc19PYmplY3QgKmNsaXAgPSBldmFzX29iamVj
dF9jbGlwX2dldChzZC0+YmFja2luZ19zdG9yZSk7CisKKyAgICBld2tfZnJhbWVfY29udGVudHNf
c2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKKyAgICBpZiAoc2QtPnZpZXcudyA+
IDAgJiYgc2QtPnZpZXcuaCA+IDApIHsKKyAgICAgICAgZHggPSAodyAqIChzZC0+dmlldy53IC0g
Y3gpKSAvIHNkLT52aWV3Lnc7CisgICAgICAgIGR5ID0gKGggKiAoc2QtPnZpZXcuaCAtIGN5KSkg
LyBzZC0+dmlldy5oOworICAgIH0gZWxzZSB7CisgICAgICAgIGR4ID0gMDsKKyAgICAgICAgZHkg
PSAwOworICAgIH0KKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5n
X3N0b3JlLCBjeCArIGR4LCBjeSArIGR5LCB3LCBoKTsKKworICAgIGlmIChzZC0+dmlldy53ID4g
MCAmJiBzZC0+dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICgoc2QtPnZpZXcudyAtIHcpICog
Y3gpIC8gc2QtPnZpZXcudzsKKyAgICAgICAgZHkgPSAoKHNkLT52aWV3LmggLSBoKSAqIGN5KSAv
IHNkLT52aWV3Lmg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHggPSAwOworICAgICAgICBkeSA9
IDA7CisgICAgfQorICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc2QtPnZpZXcueCArIGR4LCBz
ZC0+dmlldy55ICsgZHkpOworCisgICAgaWYgKGN3IDwgc2QtPnZpZXcudykKKyAgICAgICAgdyA9
IGN3ICogc2NhbGU7CisgICAgaWYgKGNoIDwgc2QtPnZpZXcuaCkKKyAgICAgICAgaCA9IGNoICog
c2NhbGU7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOworICAgIHJldHVybiBF
SU5BX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93
ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBz
bW9vdGhfc2NhbGUpCit7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChz
ZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192
aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIHVu
c2lnbmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVk
IGNoYXIgYSkKK3sKKyAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc2QtPmJhY2tpbmdf
c3RvcmUsIGEgPCAyNTUpOworfQorCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Nl
dChFd2tfVmlld19TbWFydF9DbGFzcyAqYXBpKQoreworICAgIGlmICghZXdrX3ZpZXdfYmFzZV9z
bWFydF9zZXQoYXBpKSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBpZiAoRUlO
QV9VTkxJS0VMWSghX3BhcmVudF9zYy5zYy5hZGQpKQorICAgICAgICBld2tfdmlld19iYXNlX3Nt
YXJ0X3NldCgmX3BhcmVudF9zYyk7CisKKyAgICBhcGktPnNjLmFkZCA9IF9ld2tfdmlld19zaW5n
bGVfc21hcnRfYWRkOworICAgIGFwaS0+c2MucmVzaXplID0gX2V3a192aWV3X3NpbmdsZV9zbWFy
dF9yZXNpemU7CisKKyAgICBhcGktPmJhY2tpbmdfc3RvcmVfYWRkID0gX2V3a192aWV3X3Npbmds
ZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZDsKKyAgICBhcGktPnNjcm9sbHNfcHJvY2VzcyA9IF9l
d2tfdmlld19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9jZXNzOworICAgIGFwaS0+cmVwYWludHNf
cHJvY2VzcyA9IF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzczsKKyAgICBh
cGktPnpvb21fd2Vha19zZXQgPSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQ7
CisgICAgYXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCA9IF9ld2tfdmlld19zaW5nbGVf
c21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQ7CisgICAgYXBpLT5iZ19jb2xvcl9zZXQg
PSBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldDsKKworICAgIHJldHVybiBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXZhc19TbWFydCAqX2V3a192aWV3X3NpbmdsZV9z
bWFydF9jbGFzc19uZXcodm9pZCkKK3sKKyAgICBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
YXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19WaWV3X1Np
bmdsZSIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IDA7CisKKyAgICBpZiAoRUlO
QV9VTkxJS0VMWSghc21hcnQpKSB7CisgICAgICAgIGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQo
JmFwaSk7CisgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJmFwaS5zYyk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHNtYXJ0OworfQorCitFdmFzX09iamVjdCAqZXdrX3ZpZXdfc2lu
Z2xlX2FkZChFdmFzICplKQoreworICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwg
X2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdmlld190aWxlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDU3MjA0
NzdiNjI1NGQwYmFkMTkxZTBhOTU1NDc5MWZhYmQxMjNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190
aWxlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAoQykgMjAw
OS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgImV3a192aWV3LmgiCi0KLSNpbmNsdWRlICJld2tfbG9nZ2luZy5oIgotCi0j
aW5jbHVkZSA8RXZhcy5oPgotI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgotI2luY2x1
ZGUgPGV3a190aWxlZF9iYWNraW5nX3N0b3JlLmg+Ci0KLXN0YXRpYyBFd2tfVmlld19TbWFydF9D
bGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotCi1zdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9yZW5kZXJfY2Iodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQotewotICAgIEV3a19WaWV3X1ByaXZh
dGVfRGF0YSAqcHJpdiA9IChFd2tfVmlld19Qcml2YXRlX0RhdGEqKWRhdGE7Ci0gICAgRWluYV9S
ZWN0YW5nbGUgciA9IHthcmVhLT54ICsgdC0+eCwgYXJlYS0+eSArIHQtPnksIGFyZWEtPncsIGFy
ZWEtPmh9OwotCi0gICAgcmV0dXJuIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKHByaXYsIHQtPmNh
aXJvLCAmcik7Ci19Ci0KLXN0YXRpYyB2b2lkICpfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9j
ZXNzX3ByZSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbykKLXsKLSAgICBFd2tfVmlld19Qcml2
YXRlX0RhdGEgKnByaXYgPSAoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKilkYXRhOwotICAgIGV3a192
aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHByaXYpOwotICAgIHJldHVybiAwOwotfQot
Ci1zdGF0aWMgRXZhc19PYmplY3QgKl9ld2tfdmlld190aWxlZF9zbWFydF9iYWNraW5nX3N0b3Jl
X2FkZChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKLXsKLSAgICBFdmFzX09iamVjdCAqYnMgPSBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldAotICAgICAgICAoYnMsIF9ld2tfdmlld190aWxl
ZF9yZW5kZXJfY2IsIHNkLT5fcHJpdik7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzX3ByZV9zZXQKLSAgICAgICAgKGJzLCBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRl
c19wcm9jZXNzX3ByZSwgc2QtPl9wcml2KTsKLSAgICByZXR1cm4gYnM7Ci19Ci0KLXN0YXRpYyB2
b2lkCi1fZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiKHZvaWQgKmRhdGEs
IEV2YXNfT2JqZWN0ICpvLCB2b2lkICpldmVudF9pbmZvKQotewotICAgIEV2YXNfQ29vcmQgKnNp
emUgPSAoRXZhc19Db29yZCopZXZlbnRfaW5mbzsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhICpz
ZCA9IChFd2tfVmlld19TbWFydF9EYXRhKilkYXRhOwotCi0gICAgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY29udGVudHNfcmVzaXplCi0gICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc2l6ZVsw
XSwgc2l6ZVsxXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQo
RXZhc19PYmplY3QgKm8pCi17Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2Q7Ci0KLSAgICBf
cGFyZW50X3NjLnNjLmFkZChvKTsKLQotICAgIHNkID0gKEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2
YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pOwotICAgIGlmICghc2QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCgKLSAgICAgICAgc2QtPm1h
aW5fZnJhbWUsICJjb250ZW50cyxzaXplLGNoYW5nZWQiLAotICAgICAgICBfZXdrX3ZpZXdfdGls
ZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiLCBzZCk7Ci0gICAgZXdrX2ZyYW1lX3BhaW50X2Z1
bGxfc2V0KHNkLT5tYWluX2ZyYW1lLCBFSU5BX1RSVUUpOwotfQotCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0
YSAqc2QpCi17Ci0gICAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0ICpzcjsKLSAgICBjb25zdCBF
d2tfU2Nyb2xsX1JlcXVlc3QgKnNyX2VuZDsKLSAgICBzaXplX3QgY291bnQ7Ci0gICAgRXZhc19D
b29yZCB2dywgdmg7Ci0KLSAgICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5f
ZnJhbWUsICZ2dywgJnZoKTsKLQotICAgIHNyID0gZXdrX3ZpZXdfc2Nyb2xsX3JlcXVlc3RzX2dl
dChzZC0+X3ByaXYsICZjb3VudCk7Ci0gICAgc3JfZW5kID0gc3IgKyBjb3VudDsKLSAgICBmb3Ig
KDsgc3IgPCBzcl9lbmQ7IHNyKyspIHsKLSAgICAgICAgaWYgKHNyLT5tYWluX3Njcm9sbCkKLSAg
ICAgICAgICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQK
LSAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHNyLT5keCwgc3ItPmR5KTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBFdmFzX0Nvb3JkIHN4LCBzeSwgc3csIHNoOwotCi0g
ICAgICAgICAgICBzeCA9IHNyLT54OwotICAgICAgICAgICAgc3kgPSBzci0+eTsKLSAgICAgICAg
ICAgIHN3ID0gc3ItPnc7Ci0gICAgICAgICAgICBzaCA9IHNyLT5oOwotCi0gICAgICAgICAgICBp
ZiAoYWJzKHNyLT5keCkgPj0gc3cgfHwgYWJzKHNyLT5keSkgPj0gc2gpIHsKLSAgICAgICAgICAg
ICAgICAvKiBkb3VidCB3ZWJraXQgd291bGQgYmUgc28gICAgIHN0dXBpZC4uLiAqLwotICAgICAg
ICAgICAgICAgIERCRygiZnVsbCBwYWdlIHNjcm9sbCAlKzAzZCwlKzAzZC4gY29udmVydCB0byBy
ZXBhaW50ICVkLCVkICsgJWR4JWQiLAotICAgICAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5k
eSwgc3gsIHN5LCBzdywgc2gpOwotICAgICAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRk
KHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3ggKyBzdyA+IHZ3KQotICAgICAgICAg
ICAgICAgIHN3ID0gdncgLSBzeDsKLSAgICAgICAgICAgIGlmIChzeSArIHNoID4gdmgpCi0gICAg
ICAgICAgICAgICAgc2ggPSB2aCAtIHN5OwotCi0gICAgICAgICAgICBpZiAoc3cgPCAwKQotICAg
ICAgICAgICAgICAgIHN3ID0gMDsKLSAgICAgICAgICAgIGlmIChzaCA8IDApCi0gICAgICAgICAg
ICAgICAgc2ggPSAwOwotCi0gICAgICAgICAgICBpZiAoIXN3IHx8ICFzaCkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgc3ggLT0gYWJzKHNyLT5keCk7Ci0gICAgICAg
ICAgICBzeSAtPSBhYnMoc3ItPmR5KTsKLSAgICAgICAgICAgIHN3ICs9IGFicyhzci0+ZHgpOwot
ICAgICAgICAgICAgc2ggKz0gYWJzKHNyLT5keSk7Ci0gICAgICAgICAgICBld2tfdmlld19yZXBh
aW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKLSAgICAgICAgICAgIElORigidXNp
bmcgcmVwYWludCBmb3IgaW5uZXIgZnJhbWUgc2NvbGxpbmchIik7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQot
ewotICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpwciwgKnByX2VuZDsKLSAgICBzaXplX3QgY291
bnQ7Ci0gICAgaW50IHN4LCBzeTsKLQotICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzZC0+
bWFpbl9mcmFtZSwgJnN4LCAmc3kpOwotCi0gICAgcHIgPSBld2tfdmlld19yZXBhaW50c19nZXQo
c2QtPl9wcml2LCAmY291bnQpOwotICAgIHByX2VuZCA9IHByICsgY291bnQ7Ci0gICAgZm9yICg7
IHByIDwgcHJfZW5kOyBwcisrKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAgICAg
IHIueCA9IHByLT54ICsgc3g7Ci0gICAgICAgIHIueSA9IHByLT55ICsgc3k7Ci0gICAgICAgIHIu
dyA9IHByLT53OwotICAgICAgICByLmggPSBwci0+aDsKLSAgICAgICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlKHNkLT5iYWNraW5nX3N0b3JlLCAmcik7Ci0gICAgfQotICAgIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhzZC0+YmFja2luZ19zdG9yZSk7Ci0K
LSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190
aWxlZF9zbWFydF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIGludCB3
LCBpbnQgaCkKLXsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUo
c2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOwotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0KEV3a19WaWV3X1Nt
YXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQot
ewotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKLSAgICBFaW5hX0Jvb2wgcjsKLSAgICByID0g
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ6b29tLCBjeCwgY3ksICZ4LCAm
eSk7Ci0gICAgaWYgKCFyKQotICAgICAgICByZXR1cm4gcjsKLSAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUp
OwotICAgIHIgPSBfcGFyZW50X3NjLnpvb21fc2V0KHNkLCB6b29tLCBjeCwgY3kpOwotICAgIGV3
a19mcmFtZV9zY3JvbGxfc2V0KHNkLT5tYWluX2ZyYW1lLCAteCwgLXkpOwotICAgIGV3a19mcmFt
ZV9zY3JvbGxfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZ3LCAmaCk7Ci0gICAgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoc2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOwotICAg
IGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhzZCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
Y3VsYXRlKHNkLT5iYWNraW5nX3N0b3JlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxjdWxh
dGUoc2QtPnNlbGYpOwotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0
ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiByOwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc2V0KEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nv
b3JkIGN5KQotewotICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtf
c2V0KHNkLT5iYWNraW5nX3N0b3JlLCB6b29tLCBjeCwgY3kpOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCi17Ci0gICAgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc2QtPmJhY2tpbmdfc3Rv
cmUsIHNtb290aF9zY2FsZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFy
dF9mbHVzaChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKLXsKLSAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9mbHVzaChzZC0+YmFja2luZ19zdG9yZSk7Ci0gICAgX3BhcmVudF9zYy5mbHVzaChz
ZCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5k
ZXJfcmVnaW9uKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCi17Ci0gICAgcmV0
dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uCi0gICAgICAgIChz
ZC0+YmFja2luZ19zdG9yZSwgeCwgeSwgdywgaCwgem9vbSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV3a19W
aWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSkKLXsKLSAgICBy
ZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMK
LSAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBuLCB6b29tKTsKLX0KLQotc3RhdGljIHZvaWQg
X2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0Rh
dGEgKnNkKQotewotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2Vs
KHNkLT5iYWNraW5nX3N0b3JlKTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCi17Ci0gICAg
cmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHNkLT5iYWNraW5n
X3N0b3JlKTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZW5h
YmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpzZCkKLXsKLSAgICByZXR1cm4gZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihzZC0+YmFja2luZ19zdG9yZSk7Ci19Ci0K
LUVpbmFfQm9vbCBld2tfdmlld190aWxlZF9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3Mg
KmFwaSkKLXsKLSAgICBpZiAoIWV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KGFwaSkpCi0gICAgICAg
IHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoIV9wYXJlbnRfc2Mu
c2MuYWRkKSkKLSAgICAgICAgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoJl9wYXJlbnRfc2MpOwot
Ci0gICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYWRkOwotCi0gICAgYXBp
LT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmlld190aWxlZF9zbWFydF9iYWNraW5nX3N0b3Jl
X2FkZDsKLSAgICBhcGktPnNjcm9sbHNfcHJvY2VzcyA9IF9ld2tfdmlld190aWxlZF9zbWFydF9z
Y3JvbGxzX3Byb2Nlc3M7Ci0gICAgYXBpLT5yZXBhaW50c19wcm9jZXNzID0gX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7Ci0gICAgYXBpLT5jb250ZW50c19yZXNpemUgPSBf
ZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVzaXplOwotICAgIGFwaS0+em9vbV9zZXQg
PSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQ7Ci0gICAgYXBpLT56b29tX3dlYWtfc2V0
ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zZXQ7Ci0gICAgYXBpLT56b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldCA9IF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc21v
b3RoX3NjYWxlX3NldDsKLSAgICBhcGktPmZsdXNoID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Zs
dXNoOwotICAgIGFwaS0+cHJlX3JlbmRlcl9yZWdpb24gPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
cHJlX3JlbmRlcl9yZWdpb247Ci0gICAgYXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyA9
IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1czsKLSAgICBh
cGktPnByZV9yZW5kZXJfY2FuY2VsID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJf
Y2FuY2VsOwotICAgIGFwaS0+ZGlzYWJsZV9yZW5kZXIgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
ZGlzYWJsZV9yZW5kZXI7Ci0gICAgYXBpLT5lbmFibGVfcmVuZGVyID0gX2V3a192aWV3X3RpbGVk
X3NtYXJ0X2VuYWJsZV9yZW5kZXI7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGlj
IGlubGluZSBFdmFzX1NtYXJ0ICpfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY2xhc3NfbmV3KHZvaWQp
Ci17Ci0gICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJU
X0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFV0tfVmlld19UaWxlZCIpOwotICAgIHN0YXRpYyBF
dmFzX1NtYXJ0ICpzbWFydCA9IDA7Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnQpKSB7
Ci0gICAgICAgIGV3a192aWV3X3RpbGVkX3NtYXJ0X3NldCgmYXBpKTsKLSAgICAgICAgc21hcnQg
PSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc21h
cnQ7Ci19Ci0KLUV2YXNfT2JqZWN0ICpld2tfdmlld190aWxlZF9hZGQoRXZhcyAqZSkKLXsKLSAg
ICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIF9ld2tfdmlld190aWxlZF9zbWFydF9j
bGFzc19uZXcoKSk7Ci19Ci0KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3ZpZXdfdGlsZWRf
dW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKLXsKLSAgICBFd2tfVmlld19T
bWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZCwgMCk7Ci0gICAgcmV0dXJuIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChzZC0+YmFja2luZ19zdG9yZSk7Ci19Ci0K
LXZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpjYWNoZSkKLXsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhICpz
ZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkKTsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNo
ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNhY2hlKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXdfdGlsZWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjODQ1ZjcyMDIwZWIxODM2NTA2MTU0NDcy
MzUzY2NkNzI3NTI2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXdfdGlsZWQuY3BwCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJld2tfdmlldy5oIgorCisjaW5jbHVkZSAiZXdrX2xvZ2dpbmcuaCIKKyNpbmNs
dWRlICJld2tfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPGVpbmFf
c2FmZXR5X2NoZWNrcy5oPgorI2luY2x1ZGUgPGV3a190aWxlZF9iYWNraW5nX3N0b3JlLmg+CisK
K3N0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01BUlRf
Q0xBU1NfSU5JVF9OVUxMOworCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9yZW5k
ZXJfY2Iodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVh
KQoreworICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHJpdiA9IChFd2tfVmlld19Qcml2YXRl
X0RhdGEqKWRhdGE7CisgICAgRWluYV9SZWN0YW5nbGUgciA9IHthcmVhLT54ICsgdC0+eCwgYXJl
YS0+eSArIHQtPnksIGFyZWEtPncsIGFyZWEtPmh9OworCisgICAgcmV0dXJuIGV3a192aWV3X3Bh
aW50X2NvbnRlbnRzKHByaXYsIHQtPmNhaXJvLCAmcik7Cit9CisKK3N0YXRpYyB2b2lkICpfZXdr
X3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAq
bykKK3sKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEgKnByaXYgPSAoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKilkYXRhOworICAgIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHBy
aXYpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgRXZhc19PYmplY3QgKl9ld2tfdmlld190
aWxlZF9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChFd2tfVmlld19TbWFydF9EYXRhICpzZCkKK3sK
KyAgICBFdmFzX09iamVjdCAqYnMgPSBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoc2QtPmJh
c2UuZXZhcyk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldAorICAg
ICAgICAoYnMsIF9ld2tfdmlld190aWxlZF9yZW5kZXJfY2IsIHNkLT5fcHJpdik7CisgICAgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQKKyAgICAgICAgKGJz
LCBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSwgc2QtPl9wcml2KTsKKyAgICBy
ZXR1cm4gYnM7Cit9CisKK3N0YXRpYyB2b2lkCitfZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6
ZV9jaGFuZ2VkX2NiKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvLCB2b2lkICpldmVudF9pbmZv
KQoreworICAgIEV2YXNfQ29vcmQgKnNpemUgPSAoRXZhc19Db29yZCopZXZlbnRfaW5mbzsKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IChFd2tfVmlld19TbWFydF9EYXRhKilkYXRhOwor
CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplCisgICAgICAgIChz
ZC0+YmFja2luZ19zdG9yZSwgc2l6ZVswXSwgc2l6ZVsxXSk7Cit9CisKK3N0YXRpYyB2b2lkIF9l
d2tfdmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCit7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2Q7CisKKyAgICBfcGFyZW50X3NjLnNjLmFkZChvKTsKKworICAgIHNkID0g
KEV3a19WaWV3X1NtYXJ0X0RhdGEqKWV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAg
IGlmICghc2QpCisgICAgICAgIHJldHVybjsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZCgKKyAgICAgICAgc2QtPm1haW5fZnJhbWUsICJjb250ZW50cyxzaXplLGNoYW5nZWQi
LAorICAgICAgICBfZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiLCBzZCk7
CisgICAgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfc2V0KHNkLT5tYWluX2ZyYW1lLCBFSU5BX1RSVUUp
OworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxzX3By
b2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QpCit7CisgICAgY29uc3QgRXdrX1Njcm9sbF9S
ZXF1ZXN0ICpzcjsKKyAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QgKnNyX2VuZDsKKyAgICBz
aXplX3QgY291bnQ7CisgICAgRXZhc19Db29yZCB2dywgdmg7CisKKyAgICBld2tfZnJhbWVfY29u
dGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZ2dywgJnZoKTsKKworICAgIHNyID0gZXdr
X3ZpZXdfc2Nyb2xsX3JlcXVlc3RzX2dldChzZC0+X3ByaXYsICZjb3VudCk7CisgICAgc3JfZW5k
ID0gc3IgKyBjb3VudDsKKyAgICBmb3IgKDsgc3IgPCBzcl9lbmQ7IHNyKyspIHsKKyAgICAgICAg
aWYgKHNyLT5tYWluX3Njcm9sbCkKKyAgICAgICAgICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3Njcm9sbF9mdWxsX29mZnNldF9hZGQKKyAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3Rv
cmUsIHNyLT5keCwgc3ItPmR5KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBFdmFzX0Nv
b3JkIHN4LCBzeSwgc3csIHNoOworCisgICAgICAgICAgICBzeCA9IHNyLT54OworICAgICAgICAg
ICAgc3kgPSBzci0+eTsKKyAgICAgICAgICAgIHN3ID0gc3ItPnc7CisgICAgICAgICAgICBzaCA9
IHNyLT5oOworCisgICAgICAgICAgICBpZiAoYWJzKHNyLT5keCkgPj0gc3cgfHwgYWJzKHNyLT5k
eSkgPj0gc2gpIHsKKyAgICAgICAgICAgICAgICAvKiBkb3VidCB3ZWJraXQgd291bGQgYmUgc28g
ICAgIHN0dXBpZC4uLiAqLworICAgICAgICAgICAgICAgIERCRygiZnVsbCBwYWdlIHNjcm9sbCAl
KzAzZCwlKzAzZC4gY29udmVydCB0byByZXBhaW50ICVkLCVkICsgJWR4JWQiLAorICAgICAgICAg
ICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywgc2gpOworICAgICAgICAgICAg
ICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
c3ggKyBzdyA+IHZ3KQorICAgICAgICAgICAgICAgIHN3ID0gdncgLSBzeDsKKyAgICAgICAgICAg
IGlmIChzeSArIHNoID4gdmgpCisgICAgICAgICAgICAgICAgc2ggPSB2aCAtIHN5OworCisgICAg
ICAgICAgICBpZiAoc3cgPCAwKQorICAgICAgICAgICAgICAgIHN3ID0gMDsKKyAgICAgICAgICAg
IGlmIChzaCA8IDApCisgICAgICAgICAgICAgICAgc2ggPSAwOworCisgICAgICAgICAgICBpZiAo
IXN3IHx8ICFzaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgc3gg
LT0gYWJzKHNyLT5keCk7CisgICAgICAgICAgICBzeSAtPSBhYnMoc3ItPmR5KTsKKyAgICAgICAg
ICAgIHN3ICs9IGFicyhzci0+ZHgpOworICAgICAgICAgICAgc2ggKz0gYWJzKHNyLT5keSk7Cisg
ICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3csIHNo
KTsKKyAgICAgICAgICAgIElORigidXNpbmcgcmVwYWludCBmb3IgaW5uZXIgZnJhbWUgc2NvbGxp
bmchIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3
a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpwciwg
KnByX2VuZDsKKyAgICBzaXplX3QgY291bnQ7CisgICAgaW50IHN4LCBzeTsKKworICAgIGV3a19m
cmFtZV9zY3JvbGxfcG9zX2dldChzZC0+bWFpbl9mcmFtZSwgJnN4LCAmc3kpOworCisgICAgcHIg
PSBld2tfdmlld19yZXBhaW50c19nZXQoc2QtPl9wcml2LCAmY291bnQpOworICAgIHByX2VuZCA9
IHByICsgY291bnQ7CisgICAgZm9yICg7IHByIDwgcHJfZW5kOyBwcisrKSB7CisgICAgICAgIEVp
bmFfUmVjdGFuZ2xlIHI7CisgICAgICAgIHIueCA9IHByLT54ICsgc3g7CisgICAgICAgIHIueSA9
IHByLT55ICsgc3k7CisgICAgICAgIHIudyA9IHByLT53OworICAgICAgICByLmggPSBwci0+aDsK
KyAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKHNkLT5iYWNraW5nX3N0b3Jl
LCAmcik7CisgICAgfQorICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vz
cyhzZC0+YmFja2luZ19zdG9yZSk7CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9jb250ZW50c19yZXNpemUoRXdrX1Zp
ZXdfU21hcnRfRGF0YSAqc2QsIGludCB3LCBpbnQgaCkKK3sKKyAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9jb250ZW50c19yZXNpemUoc2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOworICAgIHJl
dHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3Nt
YXJ0X3pvb21fc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQoreworICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAg
ICBFaW5hX0Jvb2wgcjsKKyAgICByID0gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQo
c2QtPmJhY2tpbmdfc3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZ6b29tLCBjeCwgY3ksICZ4LCAmeSk7CisgICAgaWYgKCFyKQorICAgICAgICByZXR1cm4g
cjsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KHNkLT5i
YWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOworICAgIHIgPSBfcGFyZW50X3NjLnpvb21fc2V0KHNk
LCB6b29tLCBjeCwgY3kpOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0KHNkLT5tYWluX2ZyYW1l
LCAteCwgLXkpOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUs
ICZ3LCAmaCk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoc2QtPmJh
Y2tpbmdfc3RvcmUsIHcsIGgpOworICAgIGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhzZCk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3VsYXRlKHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxjdWxhdGUoc2QtPnNlbGYpOworICAgIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiByOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxl
ZF9zbWFydF96b29tX3dlYWtfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCBmbG9hdCB6b29t
LCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQoreworICAgIHJldHVybiBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB6b29tLCBjeCwg
Y3kpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3Nt
b290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSAqc2QsIEVpbmFfQm9vbCBzbW9vdGhf
c2NhbGUpCit7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9z
Y2FsZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHNtb290aF9zY2FsZSk7Cit9CisKK3N0YXRpYyB2
b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9mbHVzaChFd2tfVmlld19TbWFydF9EYXRhICpzZCkK
K3sKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChzZC0+YmFja2luZ19zdG9yZSk7
CisgICAgX3BhcmVudF9zYy5mbHVzaChzZCk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9uKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNk
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgs
IGZsb2F0IHpvb20pCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVnaW9uCisgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgeCwgeSwgdywgaCwgem9v
bSk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5k
ZXJfcmVsYXRpdmVfcmFkaXVzKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkLCB1bnNpZ25lZCBpbnQg
biwgZmxvYXQgem9vbSkKK3sKKyAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMKKyAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBuLCB6
b29tKTsKK30KKworc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJf
Y2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEgKnNkKQoreworICAgIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKHNkLT5iYWNraW5nX3N0b3JlKTsKK30KKworc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdf
U21hcnRfRGF0YSAqc2QpCit7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rp
c2FibGVfcmVuZGVyKHNkLT5iYWNraW5nX3N0b3JlKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfdGlsZWRfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhICpz
ZCkKK3sKKyAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihz
ZC0+YmFja2luZ19zdG9yZSk7Cit9CisKK0VpbmFfQm9vbCBld2tfdmlld190aWxlZF9zbWFydF9z
ZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSkKK3sKKyAgICBpZiAoIWV3a192aWV3X2Jhc2Vf
c21hcnRfc2V0KGFwaSkpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgaWYgKEVJ
TkFfVU5MSUtFTFkoIV9wYXJlbnRfc2Muc2MuYWRkKSkKKyAgICAgICAgZXdrX3ZpZXdfYmFzZV9z
bWFydF9zZXQoJl9wYXJlbnRfc2MpOworCisgICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfYWRkOworCisgICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmlld190
aWxlZF9zbWFydF9iYWNraW5nX3N0b3JlX2FkZDsKKyAgICBhcGktPnNjcm9sbHNfcHJvY2VzcyA9
IF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3M7CisgICAgYXBpLT5yZXBhaW50
c19wcm9jZXNzID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7CisgICAg
YXBpLT5jb250ZW50c19yZXNpemUgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVz
aXplOworICAgIGFwaS0+em9vbV9zZXQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQ7
CisgICAgYXBpLT56b29tX3dlYWtfc2V0ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vh
a19zZXQ7CisgICAgYXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCA9IF9ld2tfdmlld190
aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldDsKKyAgICBhcGktPmZsdXNoID0g
X2V3a192aWV3X3RpbGVkX3NtYXJ0X2ZsdXNoOworICAgIGFwaS0+cHJlX3JlbmRlcl9yZWdpb24g
PSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWdpb247CisgICAgYXBpLT5wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyA9IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVy
X3JlbGF0aXZlX3JhZGl1czsKKyAgICBhcGktPnByZV9yZW5kZXJfY2FuY2VsID0gX2V3a192aWV3
X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsOworICAgIGFwaS0+ZGlzYWJsZV9yZW5kZXIg
PSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXI7CisgICAgYXBpLT5lbmFibGVf
cmVuZGVyID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXI7CisgICAgcmV0dXJu
IEVJTkFfVFJVRTsKK30KKworc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0ICpfZXdrX3ZpZXdfdGls
ZWRfc21hcnRfY2xhc3NfbmV3KHZvaWQpCit7CisgICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0Ns
YXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFV0tfVmll
d19UaWxlZCIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IDA7CisKKyAgICBpZiAo
RUlOQV9VTkxJS0VMWSghc21hcnQpKSB7CisgICAgICAgIGV3a192aWV3X3RpbGVkX3NtYXJ0X3Nl
dCgmYXBpKTsKKyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmYXBpLnNjKTsK
KyAgICB9CisKKyAgICByZXR1cm4gc21hcnQ7Cit9CisKK0V2YXNfT2JqZWN0ICpld2tfdmlld190
aWxlZF9hZGQoRXZhcyAqZSkKK3sKKyAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUs
IF9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcoKSk7Cit9CisKK0V3a19UaWxlX1VudXNl
ZF9DYWNoZSAqZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVj
dCAqbykKK3sKKyAgICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2Rh
dGFfZ2V0KG8pOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZCwgMCk7Cisg
ICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChz
ZC0+YmFja2luZ19zdG9yZSk7Cit9CisKK3ZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpjYWNoZSkKK3sKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhICpzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKKyAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNhY2hlKTsK
K30K
</data>

          </attachment>
      

    </bug>

</bugzilla>