<?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>154332</bug_id>
          
          <creation_ts>2016-02-16 23:10:19 -0800</creation_ts>
          <short_desc>[EFL] Move WebView from CoordinatedGraphics to efl</short_desc>
          <delta_ts>2016-02-18 03:31:26 -0800</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>Other</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>
          
          <blocked>152037</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165525</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2016-02-16 23:10:19 -0800</bug_when>
    <thetext>WebView is only used for EFL port nowadays so we&apos;d better to move it from UIProcess/CoordinatedGraphics.

After moved, I will merge WebView and WebViewEfl and rename it to PageClientEfl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165533</commentid>
    <comment_count>1</comment_count>
      <attachid>271542</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2016-02-16 23:34:25 -0800</bug_when>
    <thetext>Created attachment 271542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165986</commentid>
    <comment_count>2</comment_count>
      <attachid>271542</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-02-18 03:14:25 -0800</bug_when>
    <thetext>Comment on attachment 271542
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165988</commentid>
    <comment_count>3</comment_count>
      <attachid>271542</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-18 03:31:19 -0800</bug_when>
    <thetext>Comment on attachment 271542
Patch

Clearing flags on attachment: 271542

Committed r196754: &lt;http://trac.webkit.org/changeset/196754&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165989</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-18 03:31:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271542</attachid>
            <date>2016-02-16 23:34:25 -0800</date>
            <delta_ts>2016-02-18 03:31:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154332-20160217163404.patch</filename>
            <type>text/plain</type>
            <size>67497</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2Njg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjAxODllNWFkYzQ0Mzdl
OGU4MjI2NWMzNDc2Yzc4OGNiY2VlNzdjMC4uZDQ0MmU4ZGE1NzU3MDZkNjFhYzlhMDBmYjgzZjBh
ZDlmZjE5YzUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE2LTAyLTE2ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFtFRkxdIE1vdmUg
V2ViVmlldyBmcm9tIENvb3JkaW5hdGVkR3JhcGhpY3MgdG8gZWZsCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzMzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuaC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVudC5jcHAuCisgICAgICAgICog
VUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmguCisKIDIwMTYt
MDItMTYgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93IGRv
dWJsZSB0YXAgdG8gem9vbSBpbiBmYXN0LWNsaWNrIHBhZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCmluZGV4IDM5OGNiNTYzNTcxNTU2YmFmOTY1YTFlZDc2ZDM5ODM5ZTkyMDRmMDcuLjI1OTRk
MzExNDYxNDJmZDZjZTk4OGFlMTQzNjQxMzVlOGY5YjQ3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCkBAIC0xMjcsOCArMTI3LDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvUGFnZVZpZXdwb3J0
Q29udHJvbGxlci5jcHAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJQYWdl
UHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNwcAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYlZpZXcuY3BwCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Vmlld0NsaWVudC5jcHAKIAogICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvZWZsL0RhdGFiYXNlUHJv
Y2Vzc1Byb3h5RWZsLmNwcAogCkBAIC0xODQsNiArMTgyLDggQEAgbGlzdChBUFBFTkQgV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcm9jZXNzUG9vbEVmbC5jcHAKICAgICBV
SVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQcm94eUVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dl
YlVJUG9wdXBNZW51Q2xpZW50LmNwcAorICAgIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKKyAg
ICBVSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJW
aWV3RWZsLmNwcAogCiAgICAgVUlQcm9jZXNzL2dzdHJlYW1lci9JbnN0YWxsTWlzc2luZ01lZGlh
UGx1Z2luc1Blcm1pc3Npb25SZXF1ZXN0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWM4YWRlMTM2MGZjNWZhMTUxMzIyMWRjZTdhODQ1MTMyNGI4YjAx
ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDUyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVk
ZSAiV2ViVmlldy5oIgotCi0jaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKLSNpbmNs
dWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVmlld1N0YXRlLmgi
Ci0jaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCi0jaW5jbHVkZSAiV2ViQmFja0Zvcndh
cmRMaXN0SXRlbS5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKLSNpbmNsdWRl
ICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKLQotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKLSNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lmgi
Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1XZWJWaWV3OjpXZWJWaWV3KFdlYlByb2Nlc3NQb29sKiBjb250ZXh0LCBBUEk6OlBhZ2VD
b25maWd1cmF0aW9uJiBwYWdlQ29uZmlndXJhdGlvbikKLSAgICA6IG1fZm9jdXNlZChmYWxzZSkK
LSAgICAsIG1fdmlzaWJsZShmYWxzZSkKLSAgICAsIG1fb3BhY2l0eSgxLjApCi17Ci0gICAgLy8g
TmVlZCB0byBjYWxsIGNyZWF0ZVdlYlBhZ2UgYWZ0ZXIgb3RoZXIgZGF0YSBtZW1iZXJzLCBzcGVj
aWZpY2FsbHkgbV92aXNpYmxlLCBhcmUgaW5pdGlhbGl6ZWQuCi0gICAgbV9wYWdlID0gY29udGV4
dC0+Y3JlYXRlV2ViUGFnZSgqdGhpcywgcGFnZUNvbmZpZ3VyYXRpb24uY29weSgpKTsKLSAgICBt
X3BhZ2UtPmluaXRpYWxpemVXZWJQYWdlKCk7Ci0KLSAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLnBy
ZWZlcmVuY2VzKCkuc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAg
bV9wYWdlLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLnNldEZvcmNlQ29tcG9zaXRpbmdNb2Rl
KHRydWUpOwotCi0gICAgY2hhciogZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgPSBnZXRlbnYoIldF
QktJVF9TSE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKTsKLSAgICBib29sIHNob3dEZWJ1
Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFs
c0Vudmlyb25tZW50LCAiMSIpOwotICAgIG1fcGFnZS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMo
KS5zZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotICAgIG1f
cGFnZS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5zZXRDb21wb3NpdGluZ1JlcGFpbnRDb3Vu
dGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci19Ci0KLVdlYlZpZXc6On5XZWJWaWV3KCkK
LXsKLSAgICBpZiAobV9wYWdlLT5pc0Nsb3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3BhZ2UtPmNsb3NlKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0Q29udGVudFNjYWxlRmFjdG9y
KGZsb2F0IHNjYWxlRmFjdG9yKQotewotICAgIG1fcGFnZS0+c2NhbGVQYWdlKHNjYWxlRmFjdG9y
LCByb3VuZGVkSW50UG9pbnQoY29udGVudFBvc2l0aW9uKCkpKTsKLSAgICB1cGRhdGVWaWV3cG9y
dFNpemUoKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCi17Ci0g
ICAgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSgpOwotICAgIGlmICghc2NlbmUgfHwgc2NlbmUtPmlzQWN0aXZlKCkgPT0gYWN0aXZlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzY2VuZS0+c2V0QWN0aXZlKGFjdGl2ZSk7Ci0gICAgbV9w
YWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpXaW5kb3dJc0FjdGl2ZSk7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewot
ICAgIGlmIChtX3NpemUgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0g
c2l6ZTsKLQotICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OnNl
dEZvY3VzZWQoYm9vbCBmb2N1c2VkKQotewotICAgIGlmIChtX2ZvY3VzZWQgPT0gZm9jdXNlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9mb2N1c2VkID0gZm9jdXNlZDsKLSAgICBtX3BhZ2Ut
PnZpZXdTdGF0ZURpZENoYW5nZShWaWV3U3RhdGU6OklzRm9jdXNlZCB8IFZpZXdTdGF0ZTo6V2lu
ZG93SXNBY3RpdmUpOwotfQotCi12b2lkIFdlYlZpZXc6OnNldFZpc2libGUoYm9vbCB2aXNpYmxl
KQotewotICAgIGlmIChtX3Zpc2libGUgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV92aXNpYmxlID0gdmlzaWJsZTsKLSAgICBtX3BhZ2UtPnZpZXdTdGF0ZURpZENoYW5nZShW
aWV3U3RhdGU6OklzVmlzaWJsZSk7Ci0KLSAgICBpZiAoQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVBy
b3h5KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94
eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpCi0gICAgICAgIGRyYXdpbmdBcmVhLT52aXNpYmls
aXR5RGlkQ2hhbmdlKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6c2V0VXNlclZpZXdwb3J0VHJhbnNs
YXRpb24oZG91YmxlIHR4LCBkb3VibGUgdHkpCi17Ci0gICAgbV91c2VyVmlld3BvcnRUcmFuc2Zv
cm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLnRyYW5zbGF0ZSh0eCwgdHkpOwotfQotCi1JbnRQ
b2ludCBXZWJWaWV3Ojp1c2VyVmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJhbnNmb3JtRnJvbVNjZW5lKCkubWFwUG9pbnQocG9p
bnQpOwotfQotCi1JbnRQb2ludCBXZWJWaWV3Ojp1c2VyVmlld3BvcnRUb1NjZW5lKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV91c2VyVmlld3Bv
cnRUcmFuc2Zvcm0ubWFwUG9pbnQocG9pbnQpOwotfQotCi1JbnRQb2ludCBXZWJWaWV3Ojpjb250
ZW50c1RvVXNlclZpZXdwb3J0KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gdHJhbnNmb3JtVG9TY2VuZSgpLm1hcFBvaW50KHBvaW50KTsKLX0KLQotdm9pZCBXZWJW
aWV3OjpwYWludFRvQ3VycmVudEdMQ29udGV4dCgpCi17Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOwotICAgIGlmICghc2Nl
bmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IEZsb2F0UmVjdCYgdmlld3BvcnQgPSBt
X3VzZXJWaWV3cG9ydFRyYW5zZm9ybS5tYXBSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXpl
KSk7Ci0KLSAgICBzY2VuZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtVG9TY2Vu
ZSgpLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgbV9vcGFjaXR5LCB2aWV3cG9ydCwgbV9wYWdl
LT5wYWdlRXh0ZW5kZWRCYWNrZ3JvdW5kQ29sb3IoKSwgbV9wYWdlLT5kcmF3c0JhY2tncm91bmQo
KSwgbV9jb250ZW50UG9zaXRpb24pOwotfQotCi12b2lkIFdlYlZpZXc6OnNldERyYXdzQmFja2dy
b3VuZChib29sIGRyYXdzQmFja2dyb3VuZCkKLXsKLSAgICBtX3BhZ2UtPnNldERyYXdzQmFja2dy
b3VuZChkcmF3c0JhY2tncm91bmQpOwotfQotCi1ib29sIFdlYlZpZXc6OmRyYXdzQmFja2dyb3Vu
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCk7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6c2V0RHJhd3NUcmFuc3BhcmVudEJhY2tncm91bmQoYm9vbCB0cmFuc3Bh
cmVudEJhY2tncm91bmQpCi17Ci0gICAgbV9wYWdlLT5zZXREcmF3c0JhY2tncm91bmQoIXRyYW5z
cGFyZW50QmFja2dyb3VuZCk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6ZHJhd3NUcmFuc3BhcmVudEJh
Y2tncm91bmQoKSBjb25zdAotewotICAgIHJldHVybiAhbV9wYWdlLT5kcmF3c0JhY2tncm91bmQo
KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKQotewotICAgIG1fcGFnZS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25z
KCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKQotewotICAgIG1fcGFnZS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KTsKLX0KLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLVdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlDbGllbnQmIFdlYlZpZXc6OmZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKQotewot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotYm9vbCBXZWJWaWV3OjpyZXF1ZXN0RXhpdEZ1bGxTY3Jl
ZW4oKQotewotICAgIGlmICghaXNGdWxsU2NyZWVuKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVu
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJWaWV3Ojppbml0aWFs
aXplQ2xpZW50KGNvbnN0IFdLVmlld0NsaWVudEJhc2UqIGNsaWVudCkKLXsKLSAgICBtX2NsaWVu
dC5pbml0aWFsaXplKGNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkQ2hhbmdlQ29udGVu
dFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAobV9jb250ZW50
c1NpemUgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZW50c1NpemUgPSBz
aXplOwotICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSh0aGlzLCBzaXplKTsKLQot
ICAgIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwotfQotCi12b2lkIFdlYlZpZXc6OmRpZEZpbmRab29t
YWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRhcmdldCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgYXJlYSkKLXsKLSAgICBtX2NsaWVudC5kaWRGaW5kWm9vbWFibGVBcmVhKHRoaXMs
IHRhcmdldCwgYXJlYSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBXZWJWaWV3Ojp0cmFuc2Zvcm1G
cm9tU2NlbmUoKSBjb25zdAotewotICAgIHJldHVybiB0cmFuc2Zvcm1Ub1NjZW5lKCkuaW52ZXJz
ZSgpLnZhbHVlT3IoQWZmaW5lVHJhbnNmb3JtKCkpOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gV2Vi
Vmlldzo6dHJhbnNmb3JtVG9TY2VuZSgpIGNvbnN0Ci17Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlv
biA9IC1tX2NvbnRlbnRQb3NpdGlvbjsKLSAgICBmbG9hdCBlZmZlY3RpdmVTY2FsZSA9IG1fcGFn
ZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBpZiAobV9wYWdlLT51c2VGaXhlZExheW91dCgp
KQotICAgICAgICBlZmZlY3RpdmVTY2FsZSAqPSBjb250ZW50U2NhbGVGYWN0b3IoKTsKLSAgICBw
b3NpdGlvbi5zY2FsZShlZmZlY3RpdmVTY2FsZSwgZWZmZWN0aXZlU2NhbGUpOwotCi0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbV91c2VyVmlld3BvcnRUcmFuc2Zvcm07Ci0g
ICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7Ci0gICAg
dHJhbnNmb3JtLnNjYWxlKGVmZmVjdGl2ZVNjYWxlKTsKLQotICAgIHJldHVybiB0cmFuc2Zvcm0u
dG9BZmZpbmVUcmFuc2Zvcm0oKTsKLX0KLQotQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBXZWJW
aWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQotewotICAgIGlmIChDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5Kj4ocGFnZSgpLT5kcmF3aW5nQXJlYSgpKSkKLSAgICAgICAgcmV0dXJuIGRy
YXdpbmdBcmVhLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLmNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgV2ViVmlldzo6
dXBkYXRlVmlld3BvcnRTaXplKCkKLXsKLSAgICBpZiAoQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVBy
b3h5KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94
eSo+KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpIHsKLSAgICAgICAgLy8gV2ViIFByb2Nlc3MgZXhw
ZWN0cyBzaXplcyBpbiBVSSB1bml0cywgYW5kIG5vdCByYXcgZGV2aWNlIHVuaXRzLgotICAgICAg
ICBkcmF3aW5nQXJlYS0+c2V0U2l6ZShyb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpLCBJbnRTaXpl
KCksIEludFNpemUoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KGNv
bnRlbnRQb3NpdGlvbigpLCB2aXNpYmxlQ29udGVudHNTaXplKCkpOwotICAgICAgICB2aXNpYmxl
Q29udGVudHNSZWN0LmludGVyc2VjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBjb250ZW50c1Np
emUoKSkpOwotICAgICAgICBkcmF3aW5nQXJlYS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNp
YmxlQ29udGVudHNSZWN0LCBGbG9hdFBvaW50KCkpOwotICAgIH0KLX0KLQotaW5saW5lIFdlYkNv
cmU6OkZsb2F0U2l6ZSBXZWJWaWV3OjpkaXBTaXplKCkgY29uc3QKLXsKLSAgICBGbG9hdFNpemUg
ZGlwU2l6ZShzaXplKCkpOwotICAgIGRpcFNpemUuc2NhbGUoMSAvIG1fcGFnZS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7Ci0KLSAgICByZXR1cm4gZGlwU2l6ZTsKLX0KLQotV2ViQ29yZTo6RmxvYXRT
aXplIFdlYlZpZXc6OnZpc2libGVDb250ZW50c1NpemUoKSBjb25zdAotewotICAgIEZsb2F0U2l6
ZSB2aXNpYmxlQ29udGVudHNTaXplKGRpcFNpemUoKSk7Ci0gICAgaWYgKG1fcGFnZS0+dXNlRml4
ZWRMYXlvdXQoKSkKLSAgICAgICAgdmlzaWJsZUNvbnRlbnRzU2l6ZS5zY2FsZSgxIC8gY29udGVu
dFNjYWxlRmFjdG9yKCkpOwotCi0gICAgcmV0dXJuIHZpc2libGVDb250ZW50c1NpemU7Ci19Ci0K
LS8vIFBhZ2UgQ2xpZW50Ci0KLXN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBXZWJW
aWV3OjpjcmVhdGVEcmF3aW5nQXJlYVByb3h5KCkKLXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk+KCptX3BhZ2UpOwotfQotCi12b2lkIFdl
YlZpZXc6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgYXJlYSkK
LXsKLSAgICBtX2NsaWVudC52aWV3TmVlZHNEaXNwbGF5KHRoaXMsIGFyZWEpOwotfQotCi12b2lk
IFdlYlZpZXc6OmRpc3BsYXlWaWV3KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFdlYlZpZXc6OnNjcm9sbFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVj
dCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpCi17Ci0gICAgc2V0Vmlld05lZWRzRGlzcGxheShz
Y3JvbGxSZWN0KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpyZXF1ZXN0U2Nyb2xsKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBXZWJWaWV3Ojp2aWV3U2l6
ZSgpCi17Ci0gICAgcmV0dXJuIHJvdW5kZWRJbnRTaXplKGRpcFNpemUoKSk7Ci19Ci0KLWJvb2wg
V2ViVmlldzo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIGNvbnN0IENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSogc2NlbmUgPSBjb25zdF9jYXN0PFdlYlZpZXcqPih0aGlzKS0+Y29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKCk7Ci0gICAgaWYgKCFzY2VuZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIHNjZW5lLT5pc0FjdGl2ZSgpOwotfQotCi1ib29sIFdlYlZpZXc6OmlzVmll
d1dpbmRvd0FjdGl2ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBXZWJWaWV3Ojppc1ZpZXdGb2N1c2VkKCkKLXsKLSAgICByZXR1cm4gaXNG
b2N1c2VkKCk7Ci19Ci0KLWJvb2wgV2ViVmlldzo6aXNWaWV3VmlzaWJsZSgpCi17Ci0gICAgcmV0
dXJuIGlzVmlzaWJsZSgpOwotfQotCi1ib29sIFdlYlZpZXc6OmlzVmlld0luV2luZG93KCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYlZp
ZXc6OnByb2Nlc3NEaWRFeGl0KCkKLXsKLSAgICBtX2NsaWVudC53ZWJQcm9jZXNzQ3Jhc2hlZCh0
aGlzLCBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJlbnRJdGVtKCktPnVybCgpKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpkaWRSZWxhdW5jaFByb2Nlc3MoKQotewotICAgIG1fY2xpZW50Lndl
YlByb2Nlc3NEaWRSZWxhdW5jaCh0aGlzKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpwYWdlQ2xvc2Vk
KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZpZXc6OnByZWZlcmVu
Y2VzRGlkQ2hhbmdlKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYlZp
ZXc6OnRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbmV3VG9vbFRp
cCkKLXsKLSAgICBtX2NsaWVudC5kaWRDaGFuZ2VUb29sdGlwKHRoaXMsIG5ld1Rvb2xUaXApOwot
fQotCi12b2lkIFdlYlZpZXc6OmRpZENvbW1pdExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5n
JiwgYm9vbCkKLXsKLSAgICBzZXRDb250ZW50UG9zaXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCgp
KTsKLSAgICBtX2NvbnRlbnRzU2l6ZSA9IEludFNpemUoKTsKLX0KLQotdm9pZCBXZWJWaWV3Ojpz
ZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFdlYlZpZXc6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29s
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6cmVnaXN0ZXJF
ZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+IGNvbW1hbmQsIFdlYlBh
Z2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIG1fdW5kb0NvbnRyb2xsZXIu
cmVnaXN0ZXJFZGl0Q29tbWFuZChjb21tYW5kLCB1bmRvT3JSZWRvKTsKLX0KLQotdm9pZCBXZWJW
aWV3OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCi17Ci0gICAgbV91bmRvQ29udHJvbGxlci5jbGVh
ckFsbEVkaXRDb21tYW5kcygpOwotfQotCi1ib29sIFdlYlZpZXc6OmNhblVuZG9SZWRvKFdlYlBh
Z2VQcm94eTo6VW5kb09yUmVkbyB1bmRvT3JSZWRvKQotewotICAgIHJldHVybiBtX3VuZG9Db250
cm9sbGVyLmNhblVuZG9SZWRvKHVuZG9PclJlZG8pOwotfQotCi12b2lkIFdlYlZpZXc6OmV4ZWN1
dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8gdW5kb09yUmVkbykKLXsKLSAgICBt
X3VuZG9Db250cm9sbGVyLmV4ZWN1dGVVbmRvUmVkbyh1bmRvT3JSZWRvKTsKLX0KLQotSW50UG9p
bnQgV2ViVmlldzo6c2NyZWVuVG9Sb290Vmlldyhjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcG9pbnQ7Ci19Ci0KLUludFJlY3QgV2Vi
Vmlldzo6cm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBJbnRSZWN0KCk7Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZG9uZVdp
dGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLXZvaWQgV2Vi
Vmlldzo6ZG9uZVdpdGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmIGV2ZW50
LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKLXsKLSAgICBtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZl
bnQodGhpcywgZXZlbnQsIHdhc0V2ZW50SGFuZGxlZCk7Ci19Ci0jZW5kaWYKLQotUmVmUHRyPFdl
YlBvcHVwTWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVQb3B1cE1lbnVQcm94eShXZWJQYWdlUHJv
eHkmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxXZWJDb250ZXh0TWVudVByb3h5PiBXZWJWaWV3OjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IENvbnRleHRNZW51Q29udGV4dERhdGEm
LCBjb25zdCBVc2VyRGF0YSYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotUmVmUHRyPFdlYkNv
bG9yUGlja2VyPiBXZWJWaWV3OjpjcmVhdGVDb2xvclBpY2tlcihXZWJQYWdlUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpDb2xvciYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJW
aWV3OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRl
eHQmKQotewotICAgIHNldEFjdGl2ZSh0cnVlKTsKLX0KLQotdm9pZCBXZWJWaWV3OjpleGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKQotewotICAgIHNldEFjdGl2ZShmYWxzZSk7Ci19Ci0K
LXZvaWQgV2ViVmlldzo6dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBXZWJW
aWV3Ojp1cGRhdGVUZXh0SW5wdXRTdGF0ZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBXZWJWaWV3OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRmxvYXRSZWN0IFdlYlZpZXc6OmNvbnZlcnRU
b0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgdXNlclJlY3QpCi17Ci0gICAgaWYgKG1fcGFn
ZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICBGbG9hdFJlY3QgcmVzdWx0ID0gdXNlclJl
Y3Q7Ci0gICAgICAgIHJlc3VsdC5zY2FsZShtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAvLyBMZWdhY3kgbW9kZS4KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB1c2VyUmVjdDsKLX0KLQotRmxvYXRSZWN0IFdl
YlZpZXc6OmNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIGRldmljZVJlY3QpCi17
Ci0gICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkgewotICAgICAgICBGbG9hdFJlY3Qg
cmVzdWx0ID0gZGV2aWNlUmVjdDsKLSAgICAgICAgcmVzdWx0LnNjYWxlKDEgLyBtX3BhZ2UtPmRl
dmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAv
LyBMZWdhY3kgbW9kZS4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBkZXZpY2VS
ZWN0OwotfQotCi12b2lkIFdlYlZpZXc6OmRpZENoYW5nZVZpZXdwb3J0UHJvcGVydGllcyhjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0dHIpCi17Ci0gICAgbV9jbGllbnQuZGlk
Q2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKHRoaXMsIGF0dHIpOwotfQotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLXZvaWQgV2ViVmlldzo6cGFnZURpZFJlcXVl
c3RTY3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIEZsb2F0UG9pbnQgdWlQ
b3NpdGlvbihwb3NpdGlvbik7Ci0gICAgc2V0Q29udGVudFBvc2l0aW9uKHVpUG9zaXRpb24pOwot
Ci0gICAgbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbih0aGlzLCBwb3NpdGlvbik7
Ci19Ci0KLXZvaWQgV2ViVmlldzo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKLXsK
LSAgICBtX2NsaWVudC5kaWRSZW5kZXJGcmFtZSh0aGlzLCBjb250ZW50c1NpemUsIGNvdmVyZWRS
ZWN0KTsKLX0KLQotdm9pZCBXZWJWaWV3OjpwYWdlVHJhbnNpdGlvblZpZXdwb3J0UmVhZHkoKQot
ewotICAgIG1fY2xpZW50LmRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24odGhpcyk7Ci19Ci0KLXZv
aWQgV2ViVmlldzo6ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2lu
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3BhZ2UtPmZpbmRab29tYWJsZUFyZWFG
b3JQb2ludCh0cmFuc2Zvcm1Gcm9tU2NlbmUoKS5tYXBQb2ludChwb2ludCksIHRyYW5zZm9ybUZy
b21TY2VuZSgpLm1hcFNpemUoc2l6ZSkpOwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZGU2ZWZlNTc3M2U5MzFmZjBlMDViOGZm
NGIxOWNjNDQwYmJjNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmll
dy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgV2ViVmlld19oCi0jZGVmaW5lIFdlYlZpZXdfaAotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAi
RGVmYXVsdFVuZG9Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiUGFnZUNsaWVudC5oIgotI2luY2x1
ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYlByb2Nlc3NQb29s
LmgiCi0jaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBQYWdlQ29uZmlndXJh
dGlvbjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU7Ci0KLWNsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2Jq
ZWN0OjpUeXBlOjpWaWV3PiwgcHVibGljIFBhZ2VDbGllbnQKLSNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCi0gICAgLCBwdWJsaWMgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAotI2Vu
ZGlmCi0gICAgewotcHVibGljOgotICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKLQotICAgIHN0YXRp
YyBSZWY8V2ViVmlldz4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKiwgQVBJOjpQYWdlQ29uZmlndXJh
dGlvbiYpOwotCi0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAg
ICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
Ci0KLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7
Ci0KLSAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQotICAg
IHZvaWQgc2V0Rm9jdXNlZChib29sKTsKLQotICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV92aXNpYmxlOyB9Ci0gICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwotCi0gICAgdm9p
ZCBzZXRDb250ZW50U2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIGZsb2F0IGNvbnRlbnRTY2FsZUZh
Y3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7IH0KLQotICAg
IHZvaWQgc2V0Q29udGVudFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0
aW9uKSB7IG1fY29udGVudFBvc2l0aW9uID0gcG9zaXRpb247IH0KLSAgICBjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBjb250ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRQ
b3NpdGlvbjsgfQotCi0gICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUg
dHgsIGRvdWJsZSB0eSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgdXNlclZpZXdwb3J0VG9Db250
ZW50cyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OwotICAgIFdlYkNvcmU6OkludFBv
aW50IHVzZXJWaWV3cG9ydFRvU2NlbmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsK
LSAgICBXZWJDb3JlOjpJbnRQb2ludCBjb250ZW50c1RvVXNlclZpZXdwb3J0KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JikgY29uc3Q7Ci0KLSAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0
KCk7Ci0KLSAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fcGFn
ZS5nZXQoKSk7IH0KLQotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wpOwotICAgIGJv
b2wgZHJhd3NCYWNrZ3JvdW5kKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREcmF3c1RyYW5zcGFyZW50
QmFja2dyb3VuZChib29sKTsKLSAgICBib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygp
OwotICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKLQotI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBib29sIHJlcXVlc3RFeGl0RnVsbFNjcmVlbigp
OwotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQot
ICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotI2VuZGlmCi0KLSAgICAvLyBWaWV3IGNsaWVu
dC4KLSAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tWaWV3Q2xpZW50QmFzZSopOwot
Ci0gICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9Ci0KLSAg
ICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVy
cmlkZTsKLSAgICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aXNpYmxl
Q29udGVudHNTaXplKCkgY29uc3Q7Ci0gICAgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwot
Ci0gICAgLy8gRklYTUU6IFNob3VsZCBiZWNvbWUgcHJpdmF0ZSB3aGVuIFdlYiBFdmVudHMgY3Jl
YXRpb24gaXMgbW92ZWQgdG8gV2ViVmlldy4KLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtRnJvbVNjZW5lKCkgY29uc3Q7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybVRvU2NlbmUoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0T3BhY2l0eShkb3VibGUg
b3BhY2l0eSkgeyBtX29wYWNpdHkgPSBjbGFtcFRvKG9wYWNpdHksIDAuMCwgMS4wKTsgfQotICAg
IGRvdWJsZSBvcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9Ci0KLXByb3RlY3Rl
ZDoKLSAgICBXZWJWaWV3KFdlYlByb2Nlc3NQb29sKiwgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYp
OwotICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
KCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOwotICAgIFdlYkNvcmU6OkZsb2F0
U2l6ZSBkaXBTaXplKCkgY29uc3Q7Ci0gICAgLy8gUGFnZUNsaWVudAotICAgIHZpcnR1YWwgc3Rk
Ojp1bmlxdWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKSBv
dmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5Vmll
dygpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGNhblNjcm9sbFZpZXcoKSBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIFdl
YkNvcmU6OkludFNpemUgdmlld1NpemUoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBp
c1ZpZXdXaW5kb3dBY3RpdmUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9j
dXNlZCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZEV4aXQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVsYXVuY2hQcm9jZXNzKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9z
ZWQoKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBwcmVmZXJlbmNlc0RpZENoYW5nZSgp
IG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2b2lkIGRpZENvbW1p
dExvYWRGb3JNYWluRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21D
b250ZW50UHJvdmlkZXIpIG92ZXJyaWRlOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
X01VTFRJUFJPQ0VTUykKLSAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVu
ZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHBh
Z2VUcmFuc2l0aW9uVmlld3BvcnRSZWFkeSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5Piwg
V2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJBbGxFZGl0Q29tbWFuZHMoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kb1Jl
ZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0
UmVjdCBjb252ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRS
ZWN0IHJvb3RWaWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgb3ZlcnJpZGU7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBvdmVy
cmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmLCBib29sKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQotICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91
Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKLSNlbmRpZgotCi0gICAg
dmlydHVhbCBSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdl
YlBhZ2VQcm94eSYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
bnRleHRNZW51UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5JiwgY29u
c3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikgb3ZlcnJpZGU7Ci0j
aWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCi0gICAgdmlydHVhbCBSZWZQdHI8V2ViQ29sb3JQ
aWNrZXI+IGNyZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJiBpbml0aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKLSNl
bmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
Y29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGl0
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSgpIG92ZXJyaWRlIHsgfQotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAg
IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlD
bGllbnQoKSBvdmVycmlkZTsKLQotICAgIC8vIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGll
bnQKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpIG92ZXJyaWRlIHsg
fQotICAgIHZpcnR1YWwgYm9vbCBpc0Z1bGxTY3JlZW4oKSBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKSBvdmVycmlkZSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgYmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnYW5F
eGl0RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIG92ZXJyaWRlIHsgfQotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIG5hdmlnYXRpb25H
ZXN0dXJlRGlkQmVnaW4oKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGlv
bkdlc3R1cmVXaWxsRW5kKGJvb2wsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSBvdmVycmlkZSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCwgV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSYpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0
aW9uR2VzdHVyZURpZEVuZCgpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVj
b3JkTmF2aWdhdGlvblNuYXBzaG90KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSBvdmVycmlkZSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgp
IG92ZXJyaWRlIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUJhY2tncm91bmRDb2xv
cigpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZEZvck1haW5GcmFt
ZSgpIG92ZXJyaWRlIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3Np
dGlvbigpIG92ZXJyaWRlIHsgfQotCi0gICAgV2ViVmlld0NsaWVudCBtX2NsaWVudDsKLSAgICBS
ZWZQdHI8V2ViUGFnZVByb3h5PiBtX3BhZ2U7Ci0gICAgRGVmYXVsdFVuZG9Db250cm9sbGVyIG1f
dW5kb0NvbnRyb2xsZXI7Ci0gICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbV91c2Vy
Vmlld3BvcnRUcmFuc2Zvcm07Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7IC8vIFNpemUg
aW4gZGV2aWNlIHVuaXRzLgotICAgIGJvb2wgbV9mb2N1c2VkOwotICAgIGJvb2wgbV92aXNpYmxl
OwotICAgIGRvdWJsZSBtX29wYWNpdHk7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2NvbnRl
bnRQb3NpdGlvbjsgLy8gUG9zaXRpb24gaW4gVUkgdW5pdHMuCi0gICAgV2ViQ29yZTo6SW50U2l6
ZSBtX2NvbnRlbnRzU2l6ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jZW5kaWYgLy8gV2ViVmlld19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJW
aWV3Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL1dlYlZpZXdDbGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Zjhj
MTA3MWQ0ZGNhMTNiOTBmOTEwZWNlYmYxZmM1MGRhM2YzOGIwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIK
LQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiV0tBUElDYXN0LmgiCi0j
aW5jbHVkZSAiV0tCYXNlLmgiCi0jaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKLSNpbmNsdWRlICJX
ZWJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViVmlld3BvcnRBdHRyaWJ1dGVzLmgiCi0KLSNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotI2luY2x1ZGUgIk5hdGl2ZVdlYlRvdWNoRXZlbnQuaCIKLSNlbmRp
ZgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZv
aWQgV2ViVmlld0NsaWVudDo6dmlld05lZWRzRGlzcGxheShXZWJWaWV3KiB2aWV3LCBjb25zdCBJ
bnRSZWN0JiBhcmVhKQotewotICAgIGlmICghbV9jbGllbnQudmlld05lZWRzRGlzcGxheSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQudmlld05lZWRzRGlzcGxheSh0b0FQSSh2aWV3
KSwgdG9BUEkoYXJlYSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2Vi
Vmlld0NsaWVudDo6ZGlkQ2hhbmdlQ29udGVudHNTaXplKFdlYlZpZXcqIHZpZXcsIGNvbnN0IElu
dFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENoYW5nZUNvbnRlbnRzU2l6ZSh0
b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci19Ci0K
LXZvaWQgV2ViVmlld0NsaWVudDo6d2ViUHJvY2Vzc0NyYXNoZWQoV2ViVmlldyogdmlldywgY29u
c3QgU3RyaW5nJiB1cmwpCi17Ci0gICAgaWYgKCFtX2NsaWVudC53ZWJQcm9jZXNzQ3Jhc2hlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQodG9BUEko
dmlldyksIGFkb3B0V0sodG9Db3BpZWRVUkxBUEkodXJsKSkuZ2V0KCksIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgV2ViVmlld0NsaWVudDo6d2ViUHJvY2Vzc0RpZFJlbGF1
bmNoKFdlYlZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCFtX2NsaWVudC53ZWJQcm9jZXNzRGlkUmVs
YXVuY2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LndlYlByb2Nlc3NEaWRSZWxh
dW5jaCh0b0FQSSh2aWV3KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBX
ZWJWaWV3Q2xpZW50OjpkaWRDaGFuZ2VDb250ZW50c1Bvc2l0aW9uKFdlYlZpZXcqIHZpZXcsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZENo
YW5nZUNvbnRlbnRzUG9zaXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRp
ZENoYW5nZUNvbnRlbnRzUG9zaXRpb24odG9BUEkodmlldyksIHRvQVBJKHBvaW50KSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRSZW5kZXJG
cmFtZShXZWJWaWV3KiB2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZFJl
bmRlckZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC5kaWRSZW5kZXJGcmFt
ZSh0b0FQSSh2aWV3KSwgdG9BUEkoc2l6ZSksIHRvQVBJKGNvdmVyZWRSZWN0KSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRDb21wbGV0ZVBh
Z2VUcmFuc2l0aW9uKFdlYlZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRDb21w
bGV0ZVBhZ2VUcmFuc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NsaWVudC5kaWRD
b21wbGV0ZVBhZ2VUcmFuc2l0aW9uKHRvQVBJKHZpZXcpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOwotfQotCi12b2lkIFdlYlZpZXdDbGllbnQ6OmRpZENoYW5nZVZpZXdwb3J0QXR0cmlidXRl
cyhXZWJWaWV3KiB2aWV3LCBjb25zdCBWaWV3cG9ydEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMpCi17
Ci0gICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdLUmV0YWluUHRyPFdLVmlld3BvcnRBdHRyaWJ1dGVzUmVmPiB3a0F0
dHJpYnV0ZXMgPSBhZG9wdFdLKHRvQVBJKCZXZWJWaWV3cG9ydEF0dHJpYnV0ZXM6OmNyZWF0ZShh
dHRyaWJ1dGVzKS5sZWFrUmVmKCkpKTsKLSAgICBtX2NsaWVudC5kaWRDaGFuZ2VWaWV3cG9ydEF0
dHJpYnV0ZXModG9BUEkodmlldyksIHdrQXR0cmlidXRlcy5nZXQoKSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKLX0KLQotdm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRDaGFuZ2VUb29sdGlwKFdl
YlZpZXcqIHZpZXcsIGNvbnN0IFN0cmluZyYgdG9vbHRpcCkKLXsKLSAgICBpZiAoIW1fY2xpZW50
LmRpZENoYW5nZVRvb2x0aXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZENo
YW5nZVRvb2x0aXAodG9BUEkodmlldyksIGFkb3B0V0sodG9Db3BpZWRBUEkodG9vbHRpcCkpLmdl
dCgpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwotfQotCi12b2lkIFdlYlZpZXdDbGllbnQ6
OmRpZEZpbmRab29tYWJsZUFyZWEoV2ViVmlldyogdmlldywgY29uc3QgSW50UG9pbnQmIHRhcmdl
dCwgY29uc3QgSW50UmVjdCYgYXJlYSkKLXsKLSAgICBpZiAoIW1fY2xpZW50LmRpZEZpbmRab29t
YWJsZUFyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xpZW50LmRpZEZpbmRab29tYWJs
ZUFyZWEodG9BUEkodmlldyksIHRvQVBJKHRhcmdldCksIHRvQVBJKGFyZWEpLCBtX2NsaWVudC5i
YXNlLmNsaWVudEluZm8pOwotfQotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLXZvaWQgV2Vi
Vmlld0NsaWVudDo6ZG9uZVdpdGhUb3VjaEV2ZW50KFdlYlZpZXcqIHZpZXcsIGNvbnN0IE5hdGl2
ZVdlYlRvdWNoRXZlbnQmIGV2ZW50LCBib29sIHdhc0V2ZW50SGFuZGxlZCkKLXsKLSNpZiBQTEFU
Rk9STShFRkwpCi0gICAgaWYgKCFtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZlbnQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fY2xpZW50LmRvbmVXaXRoVG91Y2hFdmVudCh0b0FQSSh2aWV3KSwg
dG9BUEkoY29uc3RfY2FzdDxFd2tUb3VjaEV2ZW50Kj4oZXZlbnQubmF0aXZlRXZlbnQoKSkpLCB3
YXNFdmVudEhhbmRsZWQsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Ci0jZWxzZQotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgVU5VU0VEX1BBUkFNKHZpZXcpOwotICAgIFVOVVNFRF9QQVJB
TShldmVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdhc0V2ZW50SGFuZGxlZCk7Ci0jZW5kaWYKLX0K
LSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDY0ODZlYjg3YzY1MWMzNDA2NmRjYzQ1MGQyZjU1ODBhNmNlZjE3MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3Q2xpZW50LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlZp
ZXdDbGllbnRfaAotI2RlZmluZSBXZWJWaWV3Q2xpZW50X2gKLQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkFQSUNsaWVudC5oIgotI2luY2x1ZGUgIldLVmlldy5o
IgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotc3RydWN0
IFZpZXdwb3J0QXR0cmlidXRlczsKLX0KLQotbmFtZXNwYWNlIEFQSSB7Ci10ZW1wbGF0ZTw+IHN0
cnVjdCBDbGllbnRUcmFpdHM8V0tWaWV3Q2xpZW50QmFzZT4gewotICAgIHR5cGVkZWYgc3RkOjp0
dXBsZTxXS1ZpZXdDbGllbnRWMD4gVmVyc2lvbnM7Ci19OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgV2ViVmlldzsKLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFzcyBO
YXRpdmVXZWJUb3VjaEV2ZW50OwotI2VuZGlmCi0KLWNsYXNzIFdlYlZpZXdDbGllbnQ6IHB1Ymxp
YyBBUEk6OkNsaWVudDxXS1ZpZXdDbGllbnRCYXNlPiB7Ci1wdWJsaWM6Ci0gICAgdm9pZCB2aWV3
TmVlZHNEaXNwbGF5KFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9p
ZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KTsKLSAgICB2b2lkIHdlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqLCBjb25zdCBTdHJpbmcmIHVy
bCk7Ci0gICAgdm9pZCB3ZWJQcm9jZXNzRGlkUmVsYXVuY2goV2ViVmlldyopOwotICAgIHZvaWQg
ZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbihXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmKTsKLSAgICB2b2lkIGRpZFJlbmRlckZyYW1lKFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZvaWQgZGlkQ29tcGxldGVQ
YWdlVHJhbnNpdGlvbihXZWJWaWV3Kik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJp
YnV0ZXMoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOwotICAg
IHZvaWQgZGlkQ2hhbmdlVG9vbHRpcChXZWJWaWV3KiwgY29uc3QgU3RyaW5nJiB0b29sdGlwKTsK
LSAgICB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCi0gICAgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoV2ViVmlldyosIGNvbnN0IE5hdGl2ZVdl
YlRvdWNoRXZlbnQmLCBib29sKTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBXZWJW
aWV3Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmI3MzQ4YTVmZmI1NWFhMWQxN2EwMmIyYjgyZDU0NWMxMWJhN2JkZGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwCkBAIC0w
LDAgKzEsNTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2luY2x1ZGUgIkFQSVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlZpZXdTdGF0ZS5oIgorI2luY2x1ZGUgIldl
YkJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIK
KyNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3Vw
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2VuZGlmCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVmlldzo6
V2ViVmlldyhXZWJQcm9jZXNzUG9vbCogY29udGV4dCwgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYg
cGFnZUNvbmZpZ3VyYXRpb24pCisgICAgOiBtX2ZvY3VzZWQoZmFsc2UpCisgICAgLCBtX3Zpc2li
bGUoZmFsc2UpCisgICAgLCBtX29wYWNpdHkoMS4wKQoreworICAgIC8vIE5lZWQgdG8gY2FsbCBj
cmVhdGVXZWJQYWdlIGFmdGVyIG90aGVyIGRhdGEgbWVtYmVycywgc3BlY2lmaWNhbGx5IG1fdmlz
aWJsZSwgYXJlIGluaXRpYWxpemVkLgorICAgIG1fcGFnZSA9IGNvbnRleHQtPmNyZWF0ZVdlYlBh
Z2UoKnRoaXMsIHBhZ2VDb25maWd1cmF0aW9uLmNvcHkoKSk7CisgICAgbV9wYWdlLT5pbml0aWFs
aXplV2ViUGFnZSgpOworCisgICAgbV9wYWdlLT5wYWdlR3JvdXAoKS5wcmVmZXJlbmNlcygpLnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOworICAgIG1fcGFnZS0+cGFnZUdy
b3VwKCkucHJlZmVyZW5jZXMoKS5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKworICAg
IGNoYXIqIGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01Q
T1NJVElOR19ERUJVR19WSVNVQUxTIik7CisgICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVi
dWdWaXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwg
IjEiKTsKKyAgICBtX3BhZ2UtPnBhZ2VHcm91cCgpLnByZWZlcmVuY2VzKCkuc2V0Q29tcG9zaXRp
bmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKKyAgICBtX3BhZ2UtPnBhZ2VHcm91
cCgpLnByZWZlcmVuY2VzKCkuc2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKHNo
b3dEZWJ1Z1Zpc3VhbHMpOworfQorCitXZWJWaWV3Ojp+V2ViVmlldygpCit7CisgICAgaWYgKG1f
cGFnZS0+aXNDbG9zZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlLT5jbG9zZSgp
OworfQorCit2b2lkIFdlYlZpZXc6OnNldENvbnRlbnRTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZh
Y3RvcikKK3sKKyAgICBtX3BhZ2UtPnNjYWxlUGFnZShzY2FsZUZhY3Rvciwgcm91bmRlZEludFBv
aW50KGNvbnRlbnRQb3NpdGlvbigpKSk7CisgICAgdXBkYXRlVmlld3BvcnRTaXplKCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKKyAgICBp
ZiAoIXNjZW5lIHx8IHNjZW5lLT5pc0FjdGl2ZSgpID09IGFjdGl2ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc2NlbmUtPnNldEFjdGl2ZShhY3RpdmUpOworICAgIG1fcGFnZS0+dmlld1N0YXRl
RGlkQ2hhbmdlKFZpZXdTdGF0ZTo6V2luZG93SXNBY3RpdmUpOworfQorCit2b2lkIFdlYlZpZXc6
OnNldFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAobV9zaXpl
ID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2l6ZSA9IHNpemU7CisKKyAgICB1
cGRhdGVWaWV3cG9ydFNpemUoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRGb2N1c2VkKGJvb2wg
Zm9jdXNlZCkKK3sKKyAgICBpZiAobV9mb2N1c2VkID09IGZvY3VzZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZm9jdXNlZCA9IGZvY3VzZWQ7CisgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRD
aGFuZ2UoVmlld1N0YXRlOjpJc0ZvY3VzZWQgfCBWaWV3U3RhdGU6OldpbmRvd0lzQWN0aXZlKTsK
K30KKwordm9pZCBXZWJWaWV3OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAo
bV92aXNpYmxlID09IHZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdmlzaWJsZSA9
IHZpc2libGU7CisgICAgbV9wYWdlLT52aWV3U3RhdGVEaWRDaGFuZ2UoVmlld1N0YXRlOjpJc1Zp
c2libGUpOworCisgICAgaWYgKENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWEgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqPihwYWdlKCktPmRy
YXdpbmdBcmVhKCkpKQorICAgICAgICBkcmF3aW5nQXJlYS0+dmlzaWJpbGl0eURpZENoYW5nZSgp
OworfQorCit2b2lkIFdlYlZpZXc6OnNldFVzZXJWaWV3cG9ydFRyYW5zbGF0aW9uKGRvdWJsZSB0
eCwgZG91YmxlIHR5KQoreworICAgIG1fdXNlclZpZXdwb3J0VHJhbnNmb3JtID0gVHJhbnNmb3Jt
YXRpb25NYXRyaXgoKS50cmFuc2xhdGUodHgsIHR5KTsKK30KKworSW50UG9pbnQgV2ViVmlldzo6
dXNlclZpZXdwb3J0VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHRyYW5zZm9ybUZyb21TY2VuZSgpLm1hcFBvaW50KHBvaW50KTsKK30KKworSW50
UG9pbnQgV2ViVmlldzo6dXNlclZpZXdwb3J0VG9TY2VuZShjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXNlclZpZXdwb3J0VHJhbnNmb3JtLm1h
cFBvaW50KHBvaW50KTsKK30KKworSW50UG9pbnQgV2ViVmlldzo6Y29udGVudHNUb1VzZXJWaWV3
cG9ydChjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRyYW5zZm9y
bVRvU2NlbmUoKS5tYXBQb2ludChwb2ludCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQoKQoreworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUg
PSBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKKyAgICBpZiAoIXNjZW5lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBGbG9hdFJlY3QmIHZpZXdwb3J0ID0gbV91c2VyVmlld3BvcnRU
cmFuc2Zvcm0ubWFwUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkpOworCisgICAgc2Nl
bmUtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybVRvU2NlbmUoKS50b1RyYW5zZm9y
bWF0aW9uTWF0cml4KCksIG1fb3BhY2l0eSwgdmlld3BvcnQsIG1fcGFnZS0+cGFnZUV4dGVuZGVk
QmFja2dyb3VuZENvbG9yKCksIG1fcGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCksIG1fY29udGVudFBv
c2l0aW9uKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXREcmF3c0JhY2tncm91bmQoYm9vbCBkcmF3
c0JhY2tncm91bmQpCit7CisgICAgbV9wYWdlLT5zZXREcmF3c0JhY2tncm91bmQoZHJhd3NCYWNr
Z3JvdW5kKTsKK30KKworYm9vbCBXZWJWaWV3OjpkcmF3c0JhY2tncm91bmQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3BhZ2UtPmRyYXdzQmFja2dyb3VuZCgpOworfQorCit2b2lkIFdlYlZpZXc6
OnNldERyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKGJvb2wgdHJhbnNwYXJlbnRCYWNrZ3JvdW5k
KQoreworICAgIG1fcGFnZS0+c2V0RHJhd3NCYWNrZ3JvdW5kKCF0cmFuc3BhcmVudEJhY2tncm91
bmQpOworfQorCitib29sIFdlYlZpZXc6OmRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fcGFnZS0+ZHJhd3NCYWNrZ3JvdW5kKCk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBt
X3BhZ2UtPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit2b2lk
IFdlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBt
X3BhZ2UtPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCitXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBX
ZWJWaWV3OjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkKK3sKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK2Jvb2wgV2ViVmlldzo6cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBp
ZiAoIWlzRnVsbFNjcmVlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3BhZ2Ut
PmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworICAgIHJldHVy
biB0cnVlOworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZUNsaWVudChjb25z
dCBXS1ZpZXdDbGllbnRCYXNlKiBjbGllbnQpCit7CisgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShj
bGllbnQpOworfQorCit2b2lkIFdlYlZpZXc6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUpCit7CisgICAgaWYgKG1fY29udGVudHNTaXplID09IHNpemUp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGVudHNTaXplID0gc2l6ZTsKKyAgICBtX2Ns
aWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUodGhpcywgc2l6ZSk7CisKKyAgICB1cGRhdGVWaWV3
cG9ydFNpemUoKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGFyZWEp
Cit7CisgICAgbV9jbGllbnQuZGlkRmluZFpvb21hYmxlQXJlYSh0aGlzLCB0YXJnZXQsIGFyZWEp
OworfQorCitBZmZpbmVUcmFuc2Zvcm0gV2ViVmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJhbnNmb3JtVG9TY2VuZSgpLmludmVyc2UoKS52YWx1ZU9yKEFm
ZmluZVRyYW5zZm9ybSgpKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIFdlYlZpZXc6OnRyYW5zZm9y
bVRvU2NlbmUoKSBjb25zdAoreworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSAtbV9jb250ZW50
UG9zaXRpb247CisgICAgZmxvYXQgZWZmZWN0aXZlU2NhbGUgPSBtX3BhZ2UtPmRldmljZVNjYWxl
RmFjdG9yKCk7CisgICAgaWYgKG1fcGFnZS0+dXNlRml4ZWRMYXlvdXQoKSkKKyAgICAgICAgZWZm
ZWN0aXZlU2NhbGUgKj0gY29udGVudFNjYWxlRmFjdG9yKCk7CisgICAgcG9zaXRpb24uc2NhbGUo
ZWZmZWN0aXZlU2NhbGUsIGVmZmVjdGl2ZVNjYWxlKTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybSA9IG1fdXNlclZpZXdwb3J0VHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS50
cmFuc2xhdGUocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpOworICAgIHRyYW5zZm9ybS5zY2Fs
ZShlZmZlY3RpdmVTY2FsZSk7CisKKyAgICByZXR1cm4gdHJhbnNmb3JtLnRvQWZmaW5lVHJhbnNm
b3JtKCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogV2ViVmlldzo6Y29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKCkKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5
KiBkcmF3aW5nQXJlYSA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSo+
KHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKSkpCisgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Y29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsK
KworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIFdlYlZpZXc6OnVwZGF0ZVZpZXdwb3J0
U2l6ZSgpCit7CisgICAgaWYgKENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0Fy
ZWEgPSBzdGF0aWNfY2FzdDxDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkqPihwYWdlKCktPmRy
YXdpbmdBcmVhKCkpKSB7CisgICAgICAgIC8vIFdlYiBQcm9jZXNzIGV4cGVjdHMgc2l6ZXMgaW4g
VUkgdW5pdHMsIGFuZCBub3QgcmF3IGRldmljZSB1bml0cy4KKyAgICAgICAgZHJhd2luZ0FyZWEt
PnNldFNpemUocm91bmRlZEludFNpemUoZGlwU2l6ZSgpKSwgSW50U2l6ZSgpLCBJbnRTaXplKCkp
OworICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdChjb250ZW50UG9zaXRpb24o
KSwgdmlzaWJsZUNvbnRlbnRzU2l6ZSgpKTsKKyAgICAgICAgdmlzaWJsZUNvbnRlbnRzUmVjdC5p
bnRlcnNlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29udGVudHNTaXplKCkpKTsKKyAgICAg
ICAgZHJhd2luZ0FyZWEtPnNldFZpc2libGVDb250ZW50c1JlY3QodmlzaWJsZUNvbnRlbnRzUmVj
dCwgRmxvYXRQb2ludCgpKTsKKyAgICB9Cit9CisKK2lubGluZSBXZWJDb3JlOjpGbG9hdFNpemUg
V2ViVmlldzo6ZGlwU2l6ZSgpIGNvbnN0Cit7CisgICAgRmxvYXRTaXplIGRpcFNpemUoc2l6ZSgp
KTsKKyAgICBkaXBTaXplLnNjYWxlKDEgLyBtX3BhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwor
CisgICAgcmV0dXJuIGRpcFNpemU7Cit9CisKK1dlYkNvcmU6OkZsb2F0U2l6ZSBXZWJWaWV3Ojp2
aXNpYmxlQ29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICBGbG9hdFNpemUgdmlzaWJsZUNvbnRl
bnRzU2l6ZShkaXBTaXplKCkpOworICAgIGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5b3V0KCkpCisg
ICAgICAgIHZpc2libGVDb250ZW50c1NpemUuc2NhbGUoMSAvIGNvbnRlbnRTY2FsZUZhY3Rvcigp
KTsKKworICAgIHJldHVybiB2aXNpYmxlQ29udGVudHNTaXplOworfQorCisvLyBQYWdlIENsaWVu
dAorCitzdGQ6OnVuaXF1ZV9wdHI8RHJhd2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRlRHJh
d2luZ0FyZWFQcm94eSgpCit7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRpbmF0
ZWREcmF3aW5nQXJlYVByb3h5PigqbV9wYWdlKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRWaWV3
TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGFyZWEpCit7CisgICAgbV9jbGll
bnQudmlld05lZWRzRGlzcGxheSh0aGlzLCBhcmVhKTsKK30KKwordm9pZCBXZWJWaWV3OjpkaXNw
bGF5VmlldygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojpz
Y3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmKQoreworICAgIHNldFZpZXdOZWVkc0Rpc3BsYXkoc2Nyb2xsUmVjdCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6cmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK1dlYkNvcmU6OkludFNpemUgV2ViVmlldzo6dmlld1NpemUoKQoreworICAgIHJl
dHVybiByb3VuZGVkSW50U2l6ZShkaXBTaXplKCkpOworfQorCitib29sIFdlYlZpZXc6OmlzQWN0
aXZlKCkgY29uc3QKK3sKKyAgICBjb25zdCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5l
ID0gY29uc3RfY2FzdDxXZWJWaWV3Kj4odGhpcyktPmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgp
OworICAgIGlmICghc2NlbmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBz
Y2VuZS0+aXNBY3RpdmUoKTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdXaW5kb3dBY3RpdmUo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViVmlldzo6aXNWaWV3Rm9jdXNlZCgpCit7CisgICAgcmV0dXJuIGlzRm9jdXNlZCgpOworfQor
Citib29sIFdlYlZpZXc6OmlzVmlld1Zpc2libGUoKQoreworICAgIHJldHVybiBpc1Zpc2libGUo
KTsKK30KKworYm9vbCBXZWJWaWV3Ojppc1ZpZXdJbldpbmRvdygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJWaWV3Ojpwcm9jZXNzRGlk
RXhpdCgpCit7CisgICAgbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQodGhpcywgbV9wYWdlLT5i
YWNrRm9yd2FyZExpc3QoKS5jdXJyZW50SXRlbSgpLT51cmwoKSk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6ZGlkUmVsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICBtX2NsaWVudC53ZWJQcm9jZXNzRGlkUmVs
YXVuY2godGhpcyk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cGFnZUNsb3NlZCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3OjpwcmVmZXJlbmNlc0RpZENoYW5nZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXZWJWaWV3Ojp0b29sVGlwQ2hh
bmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG5ld1Rvb2xUaXApCit7CisgICAgbV9j
bGllbnQuZGlkQ2hhbmdlVG9vbHRpcCh0aGlzLCBuZXdUb29sVGlwKTsKK30KKwordm9pZCBXZWJW
aWV3OjpkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIGJvb2wpCit7Cisg
ICAgc2V0Q29udGVudFBvc2l0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQoKSk7CisgICAgbV9jb250
ZW50c1NpemUgPSBJbnRTaXplKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0
IFdlYkNvcmU6OkN1cnNvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnJlZ2lzdGVyRWRpdENvbW1hbmQoUGFz
c1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiBjb21tYW5kLCBXZWJQYWdlUHJveHk6OlVuZG9P
clJlZG8gdW5kb09yUmVkbykKK3sKKyAgICBtX3VuZG9Db250cm9sbGVyLnJlZ2lzdGVyRWRpdENv
bW1hbmQoY29tbWFuZCwgdW5kb09yUmVkbyk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Y2xlYXJBbGxF
ZGl0Q29tbWFuZHMoKQoreworICAgIG1fdW5kb0NvbnRyb2xsZXIuY2xlYXJBbGxFZGl0Q29tbWFu
ZHMoKTsKK30KKworYm9vbCBXZWJWaWV3OjpjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9P
clJlZG8gdW5kb09yUmVkbykKK3sKKyAgICByZXR1cm4gbV91bmRvQ29udHJvbGxlci5jYW5VbmRv
UmVkbyh1bmRvT3JSZWRvKTsKK30KKwordm9pZCBXZWJWaWV3OjpleGVjdXRlVW5kb1JlZG8oV2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvIHVuZG9PclJlZG8pCit7CisgICAgbV91bmRvQ29udHJvbGxl
ci5leGVjdXRlVW5kb1JlZG8odW5kb09yUmVkbyk7Cit9CisKK0ludFBvaW50IFdlYlZpZXc6OnNj
cmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIHBvaW50OworfQorCitJbnRSZWN0IFdlYlZpZXc6OnJvb3RWaWV3
VG9TY3JlZW4oY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gSW50UmVjdCgpOworfQorCit2b2lkIFdlYlZpZXc6OmRvbmVXaXRoS2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIFdlYlZpZXc6OmRvbmVXaXRo
VG91Y2hFdmVudChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwgYm9vbCB3YXNFdmVu
dEhhbmRsZWQpCit7CisgICAgbV9jbGllbnQuZG9uZVdpdGhUb3VjaEV2ZW50KHRoaXMsIGV2ZW50
LCB3YXNFdmVudEhhbmRsZWQpOworfQorI2VuZGlmCisKK1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94
eT4gV2ViVmlldzo6Y3JlYXRlUG9wdXBNZW51UHJveHkoV2ViUGFnZVByb3h5JikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8V2ViQ29udGV4dE1lbnVQcm94eT4gV2ViVmlldzo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShX
ZWJQYWdlUHJveHkmLCBjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRhJiwgY29uc3QgVXNlckRh
dGEmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
KyNpZiBFTkFCTEUoSU5QVVRfVFlQRV9DT0xPUikKK1JlZlB0cjxXZWJDb2xvclBpY2tlcj4gV2Vi
Vmlldzo6Y3JlYXRlQ29sb3JQaWNrZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6Q29s
b3ImLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorI2VuZGlmCisKK3ZvaWQgV2ViVmlldzo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JikKK3sKKyAgICBz
ZXRBY3RpdmUodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkKK3sKKyAgICBzZXRBY3RpdmUoZmFsc2UpOworfQorCit2b2lkIFdlYlZpZXc6
OnVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6dXBkYXRlVGV4
dElucHV0U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0VG9EZXZpY2VTcGFjZShj
b25zdCBGbG9hdFJlY3QmIHVzZXJSZWN0KQoreworICAgIGlmIChtX3BhZ2UtPnVzZUZpeGVkTGF5
b3V0KCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IHJlc3VsdCA9IHVzZXJSZWN0OworICAgICAgICBy
ZXN1bHQuc2NhbGUobV9wYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgLy8gTGVnYWN5IG1vZGUuCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gdXNlclJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojpjb252ZXJ0
VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiBkZXZpY2VSZWN0KQoreworICAgIGlmIChtX3Bh
Z2UtPnVzZUZpeGVkTGF5b3V0KCkpIHsKKyAgICAgICAgRmxvYXRSZWN0IHJlc3VsdCA9IGRldmlj
ZVJlY3Q7CisgICAgICAgIHJlc3VsdC5zY2FsZSgxIC8gbV9wYWdlLT5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgLy8gTGVnYWN5IG1vZGUu
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZGV2aWNlUmVjdDsKK30KKwordm9p
ZCBXZWJWaWV3OjpkaWRDaGFuZ2VWaWV3cG9ydFByb3BlcnRpZXMoY29uc3QgV2ViQ29yZTo6Vmll
d3BvcnRBdHRyaWJ1dGVzJiBhdHRyKQoreworICAgIG1fY2xpZW50LmRpZENoYW5nZVZpZXdwb3J0
QXR0cmlidXRlcyh0aGlzLCBhdHRyKTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
U19NVUxUSVBST0NFU1MpCit2b2lkIFdlYlZpZXc6OnBhZ2VEaWRSZXF1ZXN0U2Nyb2xsKGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBGbG9hdFBvaW50IHVpUG9zaXRpb24ocG9zaXRp
b24pOworICAgIHNldENvbnRlbnRQb3NpdGlvbih1aVBvc2l0aW9uKTsKKworICAgIG1fY2xpZW50
LmRpZENoYW5nZUNvbnRlbnRzUG9zaXRpb24odGhpcywgcG9zaXRpb24pOworfQorCit2b2lkIFdl
YlZpZXc6OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCit7CisgICAgbV9jbGllbnQu
ZGlkUmVuZGVyRnJhbWUodGhpcywgY29udGVudHNTaXplLCBjb3ZlcmVkUmVjdCk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6cGFnZVRyYW5zaXRpb25WaWV3cG9ydFJlYWR5KCkKK3sKKyAgICBtX2NsaWVu
dC5kaWRDb21wbGV0ZVBhZ2VUcmFuc2l0aW9uKHRoaXMpOworfQorCit2b2lkIFdlYlZpZXc6OmZp
bmRab29tYWJsZUFyZWFGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFNp
emUmIHNpemUpCit7CisgICAgbV9wYWdlLT5maW5kWm9vbWFibGVBcmVhRm9yUG9pbnQodHJhbnNm
b3JtRnJvbVNjZW5lKCkubWFwUG9pbnQocG9pbnQpLCB0cmFuc2Zvcm1Gcm9tU2NlbmUoKS5tYXBT
aXplKHNpemUpKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2RlNmVmZTU3NzNlOTMxZmYwZTA1YjhmZjRiMTljYzQ0
MGJiYzYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3LmgKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViVmlld19oCisjZGVmaW5lIFdlYlZpZXdfaAorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiRGVmYXVsdFVu
ZG9Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNs
dWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5j
bHVkZSAiV2ViVmlld0NsaWVudC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25N
YXRyaXguaD4KKworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBQYWdlQ29uZmlndXJhdGlvbjsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU7CisK
K2NsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpWaWV3PiwgcHVibGljIFBhZ2VDbGllbnQKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisg
ICAgLCBwdWJsaWMgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAorI2VuZGlmCisgICAg
eworcHVibGljOgorICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKKworICAgIHN0YXRpYyBSZWY8V2Vi
Vmlldz4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKiwgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwor
CisgICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKKyAgICBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICBi
b29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisKKyAgICBi
b29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZDsgfQorICAgIHZvaWQgc2V0
Rm9jdXNlZChib29sKTsKKworICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV92
aXNpYmxlOyB9CisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworCisgICAgdm9pZCBzZXRDb250
ZW50U2NhbGVGYWN0b3IoZmxvYXQpOworICAgIGZsb2F0IGNvbnRlbnRTY2FsZUZhY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7IH0KKworICAgIHZvaWQgc2V0
Q29udGVudFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKSB7IG1f
Y29udGVudFBvc2l0aW9uID0gcG9zaXRpb247IH0KKyAgICBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBjb250ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRQb3NpdGlvbjsg
fQorCisgICAgdm9pZCBzZXRVc2VyVmlld3BvcnRUcmFuc2xhdGlvbihkb3VibGUgdHgsIGRvdWJs
ZSB0eSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgdXNlclZpZXdwb3J0VG9Db250ZW50cyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0OworICAgIFdlYkNvcmU6OkludFBvaW50IHVzZXJW
aWV3cG9ydFRvU2NlbmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBjb250ZW50c1RvVXNlclZpZXdwb3J0KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JikgY29uc3Q7CisKKyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KCk7CisKKyAg
ICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fcGFnZS5nZXQoKSk7
IH0KKworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wpOworICAgIGJvb2wgZHJhd3NC
YWNrZ3JvdW5kKCkgY29uc3Q7CisgICAgdm9pZCBzZXREcmF3c1RyYW5zcGFyZW50QmFja2dyb3Vu
ZChib29sKTsKKyAgICBib29sIGRyYXdzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kKCkgY29uc3Q7CisK
KyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIHZv
aWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKworI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKKyAgICBib29sIHJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworI2VuZGlm
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQorICAgIHZvaWQg
ZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpOworI2VuZGlmCisKKyAgICAvLyBWaWV3IGNsaWVudC4KKyAgICB2
b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tWaWV3Q2xpZW50QmFzZSopOworCisgICAgV2Vi
UGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CisKKyAgICB2b2lkIGRp
ZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKKyAg
ICBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBt
X2NvbnRlbnRzU2l6ZTsgfQorICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSB2aXNpYmxlQ29udGVudHNT
aXplKCkgY29uc3Q7CisgICAgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworCisgICAgLy8g
RklYTUU6IFNob3VsZCBiZWNvbWUgcHJpdmF0ZSB3aGVuIFdlYiBFdmVudHMgY3JlYXRpb24gaXMg
bW92ZWQgdG8gV2ViVmlldy4KKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
RnJvbVNjZW5lKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bVRvU2NlbmUoKSBjb25zdDsKKworICAgIHZvaWQgc2V0T3BhY2l0eShkb3VibGUgb3BhY2l0eSkg
eyBtX29wYWNpdHkgPSBjbGFtcFRvKG9wYWNpdHksIDAuMCwgMS4wKTsgfQorICAgIGRvdWJsZSBv
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9vcGFjaXR5OyB9CisKK3Byb3RlY3RlZDoKKyAgICBX
ZWJWaWV3KFdlYlByb2Nlc3NQb29sKiwgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOworICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CisKKyAg
ICB2b2lkIHVwZGF0ZVZpZXdwb3J0U2l6ZSgpOworICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBkaXBT
aXplKCkgY29uc3Q7CisgICAgLy8gUGFnZUNsaWVudAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVf
cHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoKSBvdmVycmlkZTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwbGF5VmlldygpIG92ZXJy
aWRlOworCisgICAgdmlydHVhbCBib29sIGNhblNjcm9sbFZpZXcoKSBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxWaWV3KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgYm9vbCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6Oklu
dFNpemUgdmlld1NpemUoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdXaW5k
b3dBY3RpdmUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWaWV3Rm9jdXNlZCgpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBpc1ZpZXdWaXNpYmxlKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBib29sIGlzVmlld0luV2luZG93KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc0RpZEV4aXQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVsYXVu
Y2hQcm9jZXNzKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VDbG9zZWQoKSBvdmVy
cmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBwcmVmZXJlbmNlc0RpZENoYW5nZSgpIG92ZXJyaWRl
OworCisgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdExvYWRGb3JN
YWluRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCB1c2VDdXN0b21Db250ZW50UHJv
dmlkZXIpIG92ZXJyaWRlOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJP
Q0VTUykKKyAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZFJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVuZGVyRnJhbWUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBjb3ZlcmVkUmVjdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHBhZ2VUcmFuc2l0
aW9uVmlld3BvcnRSZWFkeSgpIG92ZXJyaWRlOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lz
dGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVBy
b3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0
Q29tbWFuZHMoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFn
ZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVu
ZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252
ZXJ0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHJvb3RW
aWV3VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOworCisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBib29sKSBvdmVycmlkZTsKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorICAgIHZp
cnR1YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYs
IGJvb2wgd2FzRXZlbnRIYW5kbGVkKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBS
ZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94
eSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvbnRleHRNZW51
UHJveHk+IGNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5JiwgY29uc3QgQ29udGV4
dE1lbnVDb250ZXh0RGF0YSYsIGNvbnN0IFVzZXJEYXRhJikgb3ZlcnJpZGU7CisjaWYgRU5BQkxF
KElOUFVUX1RZUEVfQ09MT1IpCisgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29sb3JQaWNrZXI+IGNy
ZWF0ZUNvbG9yUGlja2VyKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBpbml0
aWFsQ29sb3IsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyNlbmRpZgorCisg
ICAgdmlydHVhbCB2b2lkIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCB3aWxsRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgp
IG92ZXJyaWRlIHsgfQorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIFdlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBv
dmVycmlkZTsKKworICAgIC8vIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQKKyAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpIG92ZXJyaWRlIHsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc0Z1bGxTY3JlZW4oKSBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEZ1bGxTY3JlZW4oKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVn
YW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnYW5FeGl0RnVsbFNj
cmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92
ZXJyaWRlIHsgfQorI2VuZGlmCisgICAgdmlydHVhbCB2b2lkIG5hdmlnYXRpb25HZXN0dXJlRGlk
QmVnaW4oKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVX
aWxsRW5kKGJvb2wsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSBvdmVycmlkZSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCwgV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBuYXZpZ2F0aW9uR2VzdHVy
ZURpZEVuZCgpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSBvdmVycmlkZSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpIG92ZXJyaWRl
IHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUJhY2tncm91bmRDb2xvcigpIG92ZXJy
aWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsTG9hZEZvck1haW5GcmFtZSgpIG92ZXJy
aWRlIHsgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpIG92
ZXJyaWRlIHsgfQorCisgICAgV2ViVmlld0NsaWVudCBtX2NsaWVudDsKKyAgICBSZWZQdHI8V2Vi
UGFnZVByb3h5PiBtX3BhZ2U7CisgICAgRGVmYXVsdFVuZG9Db250cm9sbGVyIG1fdW5kb0NvbnRy
b2xsZXI7CisgICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggbV91c2VyVmlld3BvcnRU
cmFuc2Zvcm07CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7IC8vIFNpemUgaW4gZGV2aWNl
IHVuaXRzLgorICAgIGJvb2wgbV9mb2N1c2VkOworICAgIGJvb2wgbV92aXNpYmxlOworICAgIGRv
dWJsZSBtX29wYWNpdHk7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX2NvbnRlbnRQb3NpdGlv
bjsgLy8gUG9zaXRpb24gaW4gVUkgdW5pdHMuCisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX2NvbnRl
bnRzU2l6ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gV2ViVmlld19oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmYwYzc3
OTE5NDYxODU0ZGI0MzE1NzNlYmZiYTZlOGIxNDMyZDZkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3Q2xpZW50LmNwcApAQCAtMCwwICsxLDE0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYlZpZXdDbGllbnQuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUg
IldLQmFzZS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2ViVmlldy5o
IgorI2luY2x1ZGUgIldlYlZpZXdwb3J0QXR0cmlidXRlcy5oIgorCisjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKKyNpbmNsdWRlICJOYXRpdmVXZWJUb3VjaEV2ZW50LmgiCisjZW5kaWYKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlZp
ZXdDbGllbnQ6OnZpZXdOZWVkc0Rpc3BsYXkoV2ViVmlldyogdmlldywgY29uc3QgSW50UmVjdCYg
YXJlYSkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY2xpZW50LnZpZXdOZWVkc0Rpc3BsYXkodG9BUEkodmlldyksIHRvQVBJ
KGFyZWEpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlZpZXdDbGll
bnQ6OmRpZENoYW5nZUNvbnRlbnRzU2l6ZShXZWJWaWV3KiB2aWV3LCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIGlmICghbV9jbGllbnQuZGlkQ2hhbmdlQ29udGVudHNTaXplKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NsaWVudC5kaWRDaGFuZ2VDb250ZW50c1NpemUodG9BUEkodmll
dyksIHRvQVBJKHNpemUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworfQorCit2b2lkIFdl
YlZpZXdDbGllbnQ6OndlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqIHZpZXcsIGNvbnN0IFN0cmlu
ZyYgdXJsKQoreworICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0NyYXNoZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fY2xpZW50LndlYlByb2Nlc3NDcmFzaGVkKHRvQVBJKHZpZXcpLCBh
ZG9wdFdLKHRvQ29waWVkVVJMQVBJKHVybCkpLmdldCgpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pOworfQorCit2b2lkIFdlYlZpZXdDbGllbnQ6OndlYlByb2Nlc3NEaWRSZWxhdW5jaChXZWJW
aWV3KiB2aWV3KQoreworICAgIGlmICghbV9jbGllbnQud2ViUHJvY2Vzc0RpZFJlbGF1bmNoKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC53ZWJQcm9jZXNzRGlkUmVsYXVuY2godG9B
UEkodmlldyksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmlld0Ns
aWVudDo6ZGlkQ2hhbmdlQ29udGVudHNQb3NpdGlvbihXZWJWaWV3KiB2aWV3LCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VDb250
ZW50c1Bvc2l0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5kaWRDaGFuZ2VD
b250ZW50c1Bvc2l0aW9uKHRvQVBJKHZpZXcpLCB0b0FQSShwb2ludCksIG1fY2xpZW50LmJhc2Uu
Y2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6ZGlkUmVuZGVyRnJhbWUoV2Vi
VmlldyogdmlldywgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY292ZXJlZFJlY3QpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRSZW5kZXJGcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkUmVuZGVyRnJhbWUodG9BUEko
dmlldyksIHRvQVBJKHNpemUpLCB0b0FQSShjb3ZlcmVkUmVjdCksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ29tcGxldGVQYWdlVHJhbnNp
dGlvbihXZWJWaWV3KiB2aWV3KQoreworICAgIGlmICghbV9jbGllbnQuZGlkQ29tcGxldGVQYWdl
VHJhbnNpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jbGllbnQuZGlkQ29tcGxldGVQ
YWdlVHJhbnNpdGlvbih0b0FQSSh2aWV3KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKK30K
Kwordm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0ZXMoV2ViVmll
dyogdmlldywgY29uc3QgVmlld3BvcnRBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKQoreworICAgIGlm
ICghbV9jbGllbnQuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVzKQorICAgICAgICByZXR1cm47
CisKKyAgICBXS1JldGFpblB0cjxXS1ZpZXdwb3J0QXR0cmlidXRlc1JlZj4gd2tBdHRyaWJ1dGVz
ID0gYWRvcHRXSyh0b0FQSSgmV2ViVmlld3BvcnRBdHRyaWJ1dGVzOjpjcmVhdGUoYXR0cmlidXRl
cykubGVha1JlZigpKSk7CisgICAgbV9jbGllbnQuZGlkQ2hhbmdlVmlld3BvcnRBdHRyaWJ1dGVz
KHRvQVBJKHZpZXcpLCB3a0F0dHJpYnV0ZXMuZ2V0KCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7Cit9CisKK3ZvaWQgV2ViVmlld0NsaWVudDo6ZGlkQ2hhbmdlVG9vbHRpcChXZWJWaWV3KiB2
aWV3LCBjb25zdCBTdHJpbmcmIHRvb2x0aXApCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFu
Z2VUb29sdGlwKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5kaWRDaGFuZ2VUb29s
dGlwKHRvQVBJKHZpZXcpLCBhZG9wdFdLKHRvQ29waWVkQVBJKHRvb2x0aXApKS5nZXQoKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJWaWV3Q2xpZW50OjpkaWRGaW5k
Wm9vbWFibGVBcmVhKFdlYlZpZXcqIHZpZXcsIGNvbnN0IEludFBvaW50JiB0YXJnZXQsIGNvbnN0
IEludFJlY3QmIGFyZWEpCit7CisgICAgaWYgKCFtX2NsaWVudC5kaWRGaW5kWm9vbWFibGVBcmVh
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5kaWRGaW5kWm9vbWFibGVBcmVhKHRv
QVBJKHZpZXcpLCB0b0FQSSh0YXJnZXQpLCB0b0FQSShhcmVhKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKK30KKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCit2b2lkIFdlYlZpZXdDbGll
bnQ6OmRvbmVXaXRoVG91Y2hFdmVudChXZWJWaWV3KiB2aWV3LCBjb25zdCBOYXRpdmVXZWJUb3Vj
aEV2ZW50JiBldmVudCwgYm9vbCB3YXNFdmVudEhhbmRsZWQpCit7CisjaWYgUExBVEZPUk0oRUZM
KQorICAgIGlmICghbV9jbGllbnQuZG9uZVdpdGhUb3VjaEV2ZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2NsaWVudC5kb25lV2l0aFRvdWNoRXZlbnQodG9BUEkodmlldyksIHRvQVBJKGNv
bnN0X2Nhc3Q8RXdrVG91Y2hFdmVudCo+KGV2ZW50Lm5hdGl2ZUV2ZW50KCkpKSwgd2FzRXZlbnRI
YW5kbGVkLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworI2Vsc2UKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIFVOVVNFRF9QQVJBTSh2aWV3KTsKKyAgICBVTlVTRURfUEFSQU0oZXZlbnQp
OworICAgIFVOVVNFRF9QQVJBTSh3YXNFdmVudEhhbmRsZWQpOworI2VuZGlmCit9CisjZW5kaWYK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlld0NsaWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ2NDg2ZWI4N2M2NTFjMzQwNjZkY2M0NTBkMmY1NTgwYTZjZWYxNzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXdDbGllbnQu
aApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdD
bGllbnRfaAorI2RlZmluZSBXZWJWaWV3Q2xpZW50X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKworI2luY2x1ZGUgIkFQSUNsaWVudC5oIgorI2luY2x1ZGUgIldLVmlldy5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBJbnRQb2ludDsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOworc3RydWN0IFZp
ZXdwb3J0QXR0cmlidXRlczsKK30KKworbmFtZXNwYWNlIEFQSSB7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBDbGllbnRUcmFpdHM8V0tWaWV3Q2xpZW50QmFzZT4geworICAgIHR5cGVkZWYgc3RkOjp0dXBs
ZTxXS1ZpZXdDbGllbnRWMD4gVmVyc2lvbnM7Cit9OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViVmlldzsKKworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCitjbGFzcyBOYXRp
dmVXZWJUb3VjaEV2ZW50OworI2VuZGlmCisKK2NsYXNzIFdlYlZpZXdDbGllbnQ6IHB1YmxpYyBB
UEk6OkNsaWVudDxXS1ZpZXdDbGllbnRCYXNlPiB7CitwdWJsaWM6CisgICAgdm9pZCB2aWV3TmVl
ZHNEaXNwbGF5KFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdm9pZCBk
aWRDaGFuZ2VDb250ZW50c1NpemUoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
KyAgICB2b2lkIHdlYlByb2Nlc3NDcmFzaGVkKFdlYlZpZXcqLCBjb25zdCBTdHJpbmcmIHVybCk7
CisgICAgdm9pZCB3ZWJQcm9jZXNzRGlkUmVsYXVuY2goV2ViVmlldyopOworICAgIHZvaWQgZGlk
Q2hhbmdlQ29udGVudHNQb3NpdGlvbihXZWJWaWV3KiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKKyAgICB2b2lkIGRpZFJlbmRlckZyYW1lKFdlYlZpZXcqLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgZGlkQ29tcGxldGVQYWdl
VHJhbnNpdGlvbihXZWJWaWV3Kik7CisgICAgdm9pZCBkaWRDaGFuZ2VWaWV3cG9ydEF0dHJpYnV0
ZXMoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpOworICAgIHZv
aWQgZGlkQ2hhbmdlVG9vbHRpcChXZWJWaWV3KiwgY29uc3QgU3RyaW5nJiB0b29sdGlwKTsKKyAg
ICB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoV2ViVmlldyosIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CisgICAgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoV2ViVmlldyosIGNvbnN0IE5hdGl2ZVdlYlRv
dWNoRXZlbnQmLCBib29sKTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBXZWJWaWV3
Q2xpZW50X2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>