<?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>122207</bug_id>
          
          <creation_ts>2013-10-02 01:13:08 -0700</creation_ts>
          <short_desc>Create CoordinatedDrawingArea / CoordinatedDrawingAreaProxy</short_desc>
          <delta_ts>2013-10-03 15:51:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Sergio Correia (qrwteyrutiyoup)">sergio</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>rtakacs</cc>
    
    <cc>sergio</cc>
    
    <cc>yoon</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>935361</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-10-02 01:13:08 -0700</bug_when>
    <thetext>Since Apple are moving away from DrawingAreaImpl, coordinated graphics should have its own drawing area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935388</commentid>
    <comment_count>1</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-10-02 04:55:51 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Since Apple are moving away from DrawingAreaImpl, coordinated graphics should have its own drawing area.

If anyone wants to take this, please assign the bug to yourself
First come first choose :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935998</commentid>
    <comment_count>2</comment_count>
      <attachid>213304</attachid>
    <who name="Sergio Correia (qrwteyrutiyoup)">sergio</who>
    <bug_when>2013-10-03 15:07:20 -0700</bug_when>
    <thetext>Created attachment 213304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936003</commentid>
    <comment_count>3</comment_count>
      <attachid>213304</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-03 15:16:04 -0700</bug_when>
    <thetext>Comment on attachment 213304
Patch

Looks great!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936004</commentid>
    <comment_count>4</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-10-03 15:17:34 -0700</bug_when>
    <thetext>Nice! Thanks Sergio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936013</commentid>
    <comment_count>5</comment_count>
      <attachid>213304</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-03 15:51:13 -0700</bug_when>
    <thetext>Comment on attachment 213304
Patch

Clearing flags on attachment: 213304

Committed r156861: &lt;http://trac.webkit.org/changeset/156861&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936014</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-03 15:51:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213304</attachid>
            <date>2013-10-03 15:07:20 -0700</date>
            <delta_ts>2013-10-03 15:51:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122207-20131003190708.patch</filename>
            <type>text/plain</type>
            <size>63644</size>
            <attacher name="Sergio Correia (qrwteyrutiyoup)">sergio</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2ODQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjkyMDI4YmQwYWQ0NWZi
YTI5YmMyNjhjMmU4Y2E0NWNhNzMxYzE1MC4uZjBhZTFkNjAzNWE2N2QyY2Q3OWVlNTRkNjQ4YzIz
ZWNiMDhlYjkyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEzLTEwLTAzICBTZXJn
aW8gQ29ycmVpYSAgPHNlcmdpby5jb3JyZWlhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAgQ3Jl
YXRlIENvb3JkaW5hdGVkRHJhd2luZ0FyZWEgLyBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjIwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIEFw
cGxlIGFyZSBtb3ZpbmcgYXdheSBmcm9tIERyYXdpbmdBcmVhSW1wbCwgQ29vcmRpbmF0ZWQgR3Jh
cGhpY3MKKyAgICAgICAgc2hvdWxkIGhhdmUgaXRzIG93biBkcmF3aW5nIGFyZWEuCisKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDogVXNlIENvb3JkaW5hdGVkRHJhd2luZ0FyZWEgYW5kCisgICAg
ICAgIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSBpbnN0ZWFkIG9mIHRoZSBEcmF3aW5nQXJl
YUltcGwgLworICAgICAgICBEcmF3aW5nQXJlYVByb3h5SW1wbC4KKyAgICAgICAgKiBTaGFyZWQv
RHJhd2luZ0FyZWFJbmZvLmg6IEFkZCBEcmF3aW5nQXJlYVR5cGVDb29yZGluYXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVh
UHJveHkuY3BwOgorICAgICAgICBBZGRlZCwgY29waWVkIGZyb20gRHJhd2luZ0FyZWFQcm94eUlt
cGwuY3BwLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkRHJhd2luZ0FyZWFQcm94eS5oOiBBZGRlZCwKKyAgICAgICAgY29waWVkIGZyb20gRHJhd2lu
Z0FyZWFQcm94eUltcGwuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6Y3JlYXRlRHJhd2luZ0Fy
ZWFQcm94eSk6IFVzZSBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuCisgICAgICAgICogVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNwcDogUmVtb3ZlIENvb3JkaW5hdGVkIEdyYXBo
aWNzCisgICAgICAgIGJpdHMuCisgICAgICAgICogVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJ
bXBsLmg6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuY3BwOgorICAgICAgICBBZGRlZCwgY29waWVk
IGZyb20gRHJhd2luZ0FyZWFJbXBsLmNwcC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmg6CisgICAgICAgIEFk
ZGVkLCBjb3BpZWQgZnJvbSBEcmF3aW5nQXJlYUltcGwuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBlcmZvcm1TY2hl
ZHVsZWRMYXllckZsdXNoKTogVXNlCisgICAgICAgIENvb3JkaW5hdGVkRHJhd2luZ0FyZWEuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RHJhd2luZ0FyZWE6OmNyZWF0ZSk6IEhhbmRsZSB0aGUgRHJhd2luZ0FyZWFUeXBlQ29v
cmRpbmF0ZWQKKyAgICAgICAgaW4gdGhlIERyYXdpbmdBcmVhIGNyZWF0aW9uIGNvZGUuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHA6IFJlbW92ZSBDb29y
ZGluYXRlZCBHcmFwaGljcworICAgICAgICBiaXRzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYUltcGwuaDogRGl0dG8uCisKIDIwMTMtMTAtMDMgIEFuZGVycyBDYXJs
c3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIGxhc3QgcmVt
bmFudHMgb2YgUXQgZnJvbSBXZWJLaXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IDhmODdmYmUy
ZWFiYjE2YTE3M2NhZjA1OTIwMDg0NTk2ZmRmNTQ2ZWMuLjcxMWI0ODJhOGMxNzJmMjg3NDJjOWY4
MGI1NTJiNGJlZjQ4OWVjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0yNTksNyArMjU5LDYg
QEAgc2V0KFdlYktpdDJfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAK
ICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5jcHAKLSAgICBVSVByb2Nlc3MvRHJhd2lu
Z0FyZWFQcm94eUltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0ZpbmRJbmRpY2F0b3IuY3BwCiAgICAg
VUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwCiAg
ICAgVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5jcHAKQEAgLTM3
MCw2ICszNjksNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRp
Y2F0aW9uL1dlYkNyZWRlbnRpYWwuY3BwCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dl
YlByb3RlY3Rpb25TcGFjZS5jcHAKIAorICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKICAgICBVSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJQYWdlUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmNw
cAogCkBAIC01MDEsNyArNTAxLDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RlY29kZXJBZGFwdGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNw
cAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9FbmNvZGVyQWRhcHRlci5jcHAKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAKQEAgLTUxOCw2ICs1MTcsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VT
CiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAorICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlBhZ2VD
b29yZGluYXRlZEdyYXBoaWNzLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0RyYXdpbmdBcmVhSW5mby5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0RyYXdpbmdBcmVh
SW5mby5oCmluZGV4IGZlOWU4ODQ5MTM5ZDQ2NDgxMGUzZTMyMGUyYjQ0MWMxNjk1YjUwMTQuLmM2
YzA5ODY0MWI0YjQ3YjQyMmU4OWVjZDA3NGQ4NWQyMmZjNmRhNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9EcmF3aW5nQXJlYUluZm8uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRHJhd2luZ0FyZWFJbmZvLmgKQEAgLTMzLDggKzMzLDEyIEBAIGVudW0gRHJhd2luZ0Fy
ZWFUeXBlIHsKICAgICBEcmF3aW5nQXJlYVR5cGVUaWxlZENvcmVBbmltYXRpb24sCiAgICAgRHJh
d2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlLAogI2Vsc2UKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisgICAgRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQKKyNlbHNlCiAgICAgRHJh
d2luZ0FyZWFUeXBlSW1wbCwKICNlbmRpZgorI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBjMGUyYTY1NTJjMmM3NjZjOWVlY2ZiYTU5YWQ1YjBjMWQwYmZmMzcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkuY3BwCkBAIC0wLDAgKzEsNDA3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVh
UHJveHkuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCisj
aW5jbHVkZSAiRHJhd2luZ0FyZWFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKKyNpbmNsdWRlICJV
cGRhdGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0Nvb3JkaW5hdGVkRHJhd2luZ0Fy
ZWFQcm94eTo6Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KFdlYlBhZ2VQcm94eSogd2ViUGFn
ZVByb3h5KQorICAgIDogRHJhd2luZ0FyZWFQcm94eShEcmF3aW5nQXJlYVR5cGVDb29yZGluYXRl
ZCwgd2ViUGFnZVByb3h5KQorICAgICwgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJRCgwKQor
ICAgICwgbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCgwKQorICAgICwgbV9pc1dhaXRpbmdGb3JE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxzZSkKKyAgICAsIG1faGFzUmVjZWl2ZWRGaXJz
dFVwZGF0ZShmYWxzZSkKKyAgICAsIG1faXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSh0cnVlKQor
ICAgICwgbV9kaXNjYXJkQmFja2luZ1N0b3JlVGltZXIoUnVuTG9vcDo6Y3VycmVudCgpLCB0aGlz
LCAmQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaXNjYXJkQmFja2luZ1N0b3JlKQorewor
ICAgIC8vIENvbnN0cnVjdCB0aGUgcHJveHkgZWFybHkgdG8gYWxsb3cgbWVzc2FnZXMgdG8gYmUg
c2VudCB0byB0aGUgd2ViIHByb2Nlc3Mgd2hpbGUgQUMgaXMgZW50ZXJlZCB0aGVyZS4KKyAgICBp
ZiAod2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+Zm9yY2VDb21wb3Np
dGluZ01vZGUoKSkKKyAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGFk
b3B0UHRyKG5ldyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSh0aGlzKSk7Cit9CisKK0Nv
b3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6fkNvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eSgp
Cit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIE1ha2Ugc3VyZSB0
byBleGl0IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUuCisgICAgaWYgKGlzSW5BY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZSgpKQorICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKTsKKyNlbmRpZgorfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6
cGFpbnQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0LCBSZWdpb24mIHVucGFpbnRlZFJlZ2lvbikKK3sKKyAgICB1bnBhaW50
ZWRSZWdpb24gPSByZWN0OworCisgICAgaWYgKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9jdXJyZW50QmFja2luZ1N0b3Jl
U3RhdGVJRCA8PSBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKyAgICBpZiAobV9jdXJyZW50
QmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQpIHsKKyAgICAg
ICAgLy8gVGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gZG8gYSBmdWxsIGJhY2tpbmcgc3RvcmUgdXBk
YXRlIG5vdywgaW4gY2FzZSB3ZSBwcmV2aW91c2x5IHRvbGQKKyAgICAgICAgLy8gaXQgYWJvdXQg
b3VyIG5leHQgc3RhdGUgYnV0IGRpZG4ndCByZXF1ZXN0IGFuIGltbWVkaWF0ZSB1cGRhdGUuCisg
ICAgICAgIHNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShSZXNwb25kSW1tZWRpYXRlbHkpOwor
CisgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IHJlY2VpdmVkIG91ciBmaXJzdCBiaXRzIGZy
b20gdGhlIFdlYlByb2Nlc3MgdGhlbiBkb24ndCBwYWludCBhbnl0aGluZy4KKyAgICAgICAgaWYg
KCFtX2hhc1JlY2VpdmVkRmlyc3RVcGRhdGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpIHsKKyAgICAg
ICAgICAgIC8vIFdhaXQgZm9yIGEgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSB0
aGF0IGNvbnRhaW5zIHRoZSBuZXcgYml0cyBiZWZvcmUgd2UgcGFpbnQKKyAgICAgICAgICAgIC8v
IHdoYXQncyBjdXJyZW50bHkgaW4gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgICAgICAgICB3YWl0
Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRGlzcGF0Y2hpbmcgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgKGVpdGhl
ciBiZW5lYXRoIHNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBvcgorICAgICAgICAvLyBiZW5l
YXRoIHdhaXRGb3JBbmREaXNwYXRjaERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKSBjb3VsZCBk
ZXN0cm95IG91ciBiYWNraW5nIHN0b3JlIG9yCisgICAgICAgIC8vIGNoYW5nZSB0aGUgY29tcG9z
aXRpbmcgbW9kZS4KKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZSB8fCBpc0luQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQoIW1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUp
OworICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CisgICAgICAgICAgICAvLyBUaGUgdmll
dyBoYXMgYXNrZWQgdXMgdG8gcGFpbnQgYmVmb3JlIHRoZSB3ZWIgcHJvY2VzcyBoYXMgcGFpbnRl
ZCBhbnl0aGluZy4gVGhlcmUncworICAgICAgICAgICAgLy8gbm90aGluZyB3ZSBjYW4gZG8uCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2JhY2tpbmdTdG9y
ZS0+cGFpbnQoY29udGV4dCwgcmVjdCk7CisgICAgdW5wYWludGVkUmVnaW9uLnN1YnRyYWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgbV9iYWNraW5nU3RvcmUtPnNpemUoKSkpOworCisgICAgZGlzY2Fy
ZEJhY2tpbmdTdG9yZVNvb24oKTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJv
eHk6OnNpemVEaWRDaGFuZ2UoKQoreworICAgIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKFJl
c3BvbmRJbW1lZGlhdGVseSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5
OjpkZXZpY2VTY2FsZUZhY3RvckRpZENoYW5nZSgpCit7CisgICAgYmFja2luZ1N0b3JlU3RhdGVE
aWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0ZWx5KTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdp
bmdBcmVhUHJveHk6OmxheWVySG9zdGluZ01vZGVEaWRDaGFuZ2UoKQoreworICAgIG1fd2ViUGFn
ZVByb3h5LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpTZXRMYXllckhv
c3RpbmdNb2RlKG1fd2ViUGFnZVByb3h5LT5sYXllckhvc3RpbmdNb2RlKCkpLCBtX3dlYlBhZ2VQ
cm94eS0+cGFnZUlEKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6
dmlzaWJpbGl0eURpZENoYW5nZSgpCit7CisgICAgaWYgKCFtX3dlYlBhZ2VQcm94eS0+c3VwcHJl
c3NWaXNpYmlsaXR5VXBkYXRlcygpKSB7CisgICAgICAgIGlmICghbV93ZWJQYWdlUHJveHktPmlz
Vmlld1Zpc2libGUoKSkgeworICAgICAgICAgICAgLy8gU3VzcGVuZCBwYWludGluZy4KKyAgICAg
ICAgICAgIG1fd2ViUGFnZVByb3h5LT5wcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OkRyYXdpbmdB
cmVhOjpTdXNwZW5kUGFpbnRpbmcoKSwgbV93ZWJQYWdlUHJveHktPnBhZ2VJRCgpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlc3VtZSBwYWludGluZy4K
KyAgICAgICAgbV93ZWJQYWdlUHJveHktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6RHJhd2lu
Z0FyZWE6OlJlc3VtZVBhaW50aW5nKCksIG1fd2ViUGFnZVByb3h5LT5wYWdlSUQoKSk7CisgICAg
fQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIC8vIElmIHdlIGRvbid0
IGhhdmUgYSBiYWNraW5nIHN0b3JlLCBnbyBhaGVhZCBhbmQgbWFyayB0aGUgYmFja2luZyBzdG9y
ZSBhcyBiZWluZyBjaGFuZ2VkIHNvCisgICAgLy8gdGhhdCB3aGVuIHBhaW50IHdlJ2xsIGFjdHVh
bGx5IHdhaXQgZm9yIHNvbWV0aGluZyB0byBwYWludCBhbmQgbm90IGZsYXNoIHdoaXRlLgorICAg
IGlmICghbV9iYWNraW5nU3RvcmUgJiYgbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKSkKKyAg
ICAgICAgYmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoRG9Ob3RSZXNwb25kSW1tZWRpYXRlbHkp
OworI2VuZGlmCit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpzZXRCYWNr
aW5nU3RvcmVJc0Rpc2NhcmRhYmxlKGJvb2wgaXNCYWNraW5nU3RvcmVEaXNjYXJkYWJsZSkKK3sK
KyAgICBpZiAobV9pc0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlID09IGlzQmFja2luZ1N0b3JlRGlz
Y2FyZGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNCYWNraW5nU3RvcmVEaXNjYXJk
YWJsZSA9IGlzQmFja2luZ1N0b3JlRGlzY2FyZGFibGU7CisgICAgaWYgKG1faXNCYWNraW5nU3Rv
cmVEaXNjYXJkYWJsZSkKKyAgICAgICAgZGlzY2FyZEJhY2tpbmdTdG9yZVNvb24oKTsKKyAgICBl
bHNlCisgICAgICAgIG1fZGlzY2FyZEJhY2tpbmdTdG9yZVRpbWVyLnN0b3AoKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OndhaXRGb3JCYWNraW5nU3RvcmVVcGRhdGVP
bk5leHRQYWludCgpCit7CisgICAgbV9oYXNSZWNlaXZlZEZpcnN0VXBkYXRlID0gdHJ1ZTsKK30K
Kwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6OnVwZGF0ZSh1aW50NjRfdCBiYWNr
aW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIEFT
U0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1
cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8
IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCisgICAgICAgIHJldHVybjsKKworICAgIC8v
IEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHZpZXcgaXMgaGlkZGVuLgorCisgICAg
aW5jb3Jwb3JhdGVVcGRhdGUodXBkYXRlSW5mbyk7CisgICAgbV93ZWJQYWdlUHJveHktPnByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkRpZFVwZGF0ZSgpLCBtX3dlYlBhZ2VQ
cm94eS0+cGFnZUlEKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6
ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWludDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwg
Y29uc3QgVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5
ZXJUcmVlQ29udGV4dCkKK3sKKyAgICBBU1NFUlRfQVJHKGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJh
Y2tpbmdTdG9yZVN0YXRlSUQgPD0gbV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCk7CisgICAgQVNT
RVJUX0FSRyhiYWNraW5nU3RvcmVTdGF0ZUlELCBiYWNraW5nU3RvcmVTdGF0ZUlEID4gbV9jdXJy
ZW50QmFja2luZ1N0b3JlU3RhdGVJRCk7CisgICAgbV9jdXJyZW50QmFja2luZ1N0b3JlU3RhdGVJ
RCA9IGJhY2tpbmdTdG9yZVN0YXRlSUQ7CisKKyAgICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZUJh
Y2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7CisKKyAgICAvLyBTdG9wIHRoZSByZXNwb25zaXZlbmVz
cyB0aW1lciB0aGF0IHdhcyBzdGFydGVkIGluIHNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZS4K
KyAgICBtX3dlYlBhZ2VQcm94eS0+cHJvY2VzcygpLT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0
b3AoKTsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobGF5ZXJU
cmVlQ29udGV4dCAhPSBtX2xheWVyVHJlZUNvbnRleHQpIHsKKyAgICAgICAgaWYgKCFtX2xheWVy
VHJlZUNvbnRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBleGl0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2xheWVyVHJlZUNvbnRleHQuaXNF
bXB0eSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbGF5ZXJUcmVlQ29udGV4dC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUobGF5
ZXJUcmVlQ29udGV4dCk7CisgICAgICAgICAgICBBU1NFUlQobGF5ZXJUcmVlQ29udGV4dCA9PSBt
X2xheWVyVHJlZUNvbnRleHQpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAo
bV9uZXh0QmFja2luZ1N0b3JlU3RhdGVJRCAhPSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlE
KQorICAgICAgICBzZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5
KTsKKyAgICBlbHNlCisgICAgICAgIG1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZSA9IHRydWU7CisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKGlzSW5BY2NlbGVyYXRl
ZENvbXBvc2l0aW5nTW9kZSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGF5ZXJUcmVl
Q29udGV4dCk7CisjZW5kaWYKKworICAgIC8vIElmIHdlIGhhdmUgYSBiYWNraW5nIHN0b3JlIHRo
ZSByaWdodCBzaXplLCByZXVzZSBpdC4KKyAgICBpZiAobV9iYWNraW5nU3RvcmUgJiYgKG1fYmFj
a2luZ1N0b3JlLT5zaXplKCkgIT0gdXBkYXRlSW5mby52aWV3U2l6ZSB8fCBtX2JhY2tpbmdTdG9y
ZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSAhPSB1cGRhdGVJbmZvLmRldmljZVNjYWxlRmFjdG9yKSkK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOworICAgIGluY29ycG9yYXRlVXBkYXRl
KHVwZGF0ZUluZm8pOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlE
LCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQoreworICAgIEFTU0VS
VF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1cnJl
bnRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8IG1f
Y3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGxheWVyVHJlZUNvbnRleHQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obGF5ZXJUcmVl
Q29udGV4dCk7CisjZW5kaWYKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHk6
OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0
ZUlELCBjb25zdCBVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIEFTU0VSVF9BUkcoYmFj
a2luZ1N0b3JlU3RhdGVJRCwgYmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNraW5n
U3RvcmVTdGF0ZUlEKTsKKyAgICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fY3VycmVudEJh
Y2tpbmdTdG9yZVN0YXRlSUQpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKyAgICBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKKyNl
bmRpZgorCisgICAgaW5jb3Jwb3JhdGVVcGRhdGUodXBkYXRlSW5mbyk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBs
YXllclRyZWVDb250ZXh0KQoreworICAgIEFTU0VSVF9BUkcoYmFja2luZ1N0b3JlU3RhdGVJRCwg
YmFja2luZ1N0b3JlU3RhdGVJRCA8PSBtX2N1cnJlbnRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKyAg
ICBpZiAoYmFja2luZ1N0b3JlU3RhdGVJRCA8IG1fY3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQp
CisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGxheWVyVHJlZUNvbnRleHQpOworI2VuZGlmCit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjppbmNvcnBvcmF0ZVVwZGF0ZShjb25zdCBV
cGRhdGVJbmZvJiB1cGRhdGVJbmZvKQoreworICAgIEFTU0VSVCghaXNJbkFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKCkpOworCisgICAgaWYgKHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisg
ICAgICAgIG1fYmFja2luZ1N0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxCYWNraW5nU3RvcmU+KHVw
ZGF0ZUluZm8udmlld1NpemUsIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVGYWN0b3IsIG1fd2ViUGFn
ZVByb3h5KTsKKworICAgIG1fYmFja2luZ1N0b3JlLT5pbmNvcnBvcmF0ZVVwZGF0ZSh1cGRhdGVJ
bmZvKTsKKworICAgIGJvb2wgc2hvdWxkU2Nyb2xsID0gIXVwZGF0ZUluZm8uc2Nyb2xsUmVjdC5p
c0VtcHR5KCk7CisKKyAgICBpZiAoc2hvdWxkU2Nyb2xsKQorICAgICAgICBtX3dlYlBhZ2VQcm94
eS0+c2Nyb2xsVmlldyh1cGRhdGVJbmZvLnNjcm9sbFJlY3QsIHVwZGF0ZUluZm8uc2Nyb2xsT2Zm
c2V0KTsKKworICAgIGlmIChzaG91bGRTY3JvbGwgJiYgIW1fd2ViUGFnZVByb3h5LT5jYW5TY3Jv
bGxWaWV3KCkpCisgICAgICAgIG1fd2ViUGFnZVByb3h5LT5zZXRWaWV3TmVlZHNEaXNwbGF5KElu
dFJlY3QoSW50UG9pbnQoKSwgbV93ZWJQYWdlUHJveHktPnZpZXdTaXplKCkpKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cGRhdGVJbmZvLnVwZGF0ZVJlY3Rz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV93ZWJQYWdlUHJveHktPnNldFZpZXdOZWVkc0Rp
c3BsYXkodXBkYXRlSW5mby51cGRhdGVSZWN0c1tpXSk7CisgICAgfQorCisgICAgaWYgKFdlYlBh
Z2VQcm94eTo6ZGVidWdQYWludEZsYWdzKCkgJiBrV0tEZWJ1Z0ZsYXNoQmFja2luZ1N0b3JlVXBk
YXRlcykKKyAgICAgICAgbV93ZWJQYWdlUHJveHktPmZsYXNoQmFja2luZ1N0b3JlVXBkYXRlcyh1
cGRhdGVJbmZvLnVwZGF0ZVJlY3RzKTsKKworICAgIGlmIChzaG91bGRTY3JvbGwpCisgICAgICAg
IG1fd2ViUGFnZVByb3h5LT5kaXNwbGF5VmlldygpOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWFQcm94eTo6YmFja2luZ1N0b3JlU3RhdGVEaWRDaGFuZ2UoUmVzcG9uZEltbWVkaWF0
ZWx5T3JOb3QgcmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QpCit7CisgICAgKyttX25leHRCYWNraW5n
U3RvcmVTdGF0ZUlEOworICAgIHNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShyZXNwb25kSW1t
ZWRpYXRlbHlPck5vdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpz
ZW5kVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoUmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgcmVzcG9u
ZEltbWVkaWF0ZWx5T3JOb3QpCit7CisgICAgQVNTRVJUKG1fY3VycmVudEJhY2tpbmdTdG9yZVN0
YXRlSUQgPCBtX25leHRCYWNraW5nU3RvcmVTdGF0ZUlEKTsKKworICAgIGlmICghbV93ZWJQYWdl
UHJveHktPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faXNXYWl0aW5n
Rm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX3dlYlBhZ2VQcm94eS0+dmlld1NpemUoKS5pc0VtcHR5KCkgJiYgIW1fd2ViUGFnZVByb3h5
LT51c2VGaXhlZExheW91dCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzV2FpdGluZ0Zv
ckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gcmVzcG9uZEltbWVkaWF0ZWx5T3JOb3QgPT0g
UmVzcG9uZEltbWVkaWF0ZWx5OworCisgICAgbV93ZWJQYWdlUHJveHktPnByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OlVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKG1fbmV4dEJh
Y2tpbmdTdG9yZVN0YXRlSUQsIHJlc3BvbmRJbW1lZGlhdGVseU9yTm90ID09IFJlc3BvbmRJbW1l
ZGlhdGVseSwgbV93ZWJQYWdlUHJveHktPmRldmljZVNjYWxlRmFjdG9yKCksIG1fc2l6ZSwgbV9z
Y3JvbGxPZmZzZXQpLCBtX3dlYlBhZ2VQcm94eS0+cGFnZUlEKCkpOworICAgIG1fc2Nyb2xsT2Zm
c2V0ID0gSW50U2l6ZSgpOworCisgICAgaWYgKG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2lu
Z1N0b3JlU3RhdGUpIHsKKyAgICAgICAgLy8gU3RhcnQgdGhlIHJlc3BvbnNpdmVuZXNzIHRpbWVy
LiBXZSB3aWxsIHN0b3AgaXQgd2hlbiB3ZSBoZWFyIGJhY2sgZnJvbSB0aGUgV2ViUHJvY2Vzcwor
ICAgICAgICAvLyBpbiBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZS4KKyAgICAgICAgbV93ZWJQ
YWdlUHJveHktPnByb2Nlc3MoKS0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLT5zdGFydCgpOworICAg
IH0KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAobV9pc1dhaXRp
bmdGb3JEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSAmJiAhbV9sYXllclRyZWVDb250ZXh0Lmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBXYWl0IGZvciB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3Jl
U3RhdGUgbWVzc2FnZS4gTm9ybWFsbHkgd2UgZG8gdGhpcyBpbiBDb29yZGluYXRlZERyYXdpbmdB
cmVhUHJveHk6OnBhaW50LCBidXQgdGhhdAorICAgICAgICAvLyBmdW5jdGlvbiBpcyBuZXZlciBj
YWxsZWQgd2hlbiBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlLgorICAgICAgICB3YWl0
Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOworICAgIH0KKyNlbmRp
ZgorfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6d2FpdEZvckFuZERpc3Bh
dGNoRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKQoreworICAgIEFTU0VSVChtX2lzV2FpdGlu
Z0ZvckRpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKKworICAgIGlmICghbV93ZWJQYWdlUHJv
eHktPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtX3dlYlBhZ2VQcm94eS0+
cHJvY2VzcygpLT5pc0xhdW5jaGluZygpKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLy8gRklYTUU6IHdhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5IHdpbGwgYWx3YXlzIHJldHVybiB0aGUgb2xkZXN0IERpZFVwZGF0ZUJhY2tpbmdT
dG9yZVN0YXRlIG1lc3NhZ2UgdGhhdAorICAgIC8vIGhhc24ndCB5ZXQgYmVlbiBwcm9jZXNzZWQu
IEJ1dCBpdCBtaWdodCBiZSBiZXR0ZXIgdG8gc2tpcCBhaGVhZCB0byBzb21lIG90aGVyIERpZFVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlCisgICAgLy8gbWVzc2FnZSwgaWYgbXVsdGlwbGUgRGlkVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZXMgYXJlIHdhaXRpbmcgdG8gYmUgcHJvY2Vzc2Vk
LiBGb3IgaW5zdGFuY2UsIHdlIGNvdWxkCisgICAgLy8gY2hvb3NlIHRoZSBtb3N0IHJlY2VudCBv
bmUsIG9yIHRoZSBvbmUgdGhhdCBpcyBjbG9zZXN0IHRvIG91ciBjdXJyZW50IHNpemUuCisKKyAg
ICAvLyBUaGUgdGltZW91dCwgaW4gc2Vjb25kcywgd2UgdXNlIHdoZW4gd2FpdGluZyBmb3IgYSBE
aWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIHdoZW4gd2UncmUgYXNrZWQgdG8gcGFp
bnQuCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBkaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZVRp
bWVvdXQgPSAwLjU7CisgICAgbV93ZWJQYWdlUHJveHktPnByb2Nlc3MoKS0+Y29ubmVjdGlvbigp
LT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94
eTo6RGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU+KG1fd2ViUGFnZVByb3h5LT5wYWdlSUQoKSwg
ZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGVUaW1lb3V0KTsKKyNlbmRpZgorfQorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJv
eHk6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4
dCYgbGF5ZXJUcmVlQ29udGV4dCkKK3sKKyAgICBBU1NFUlQoIWlzSW5BY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpKTsKKworICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICBtX2xh
eWVyVHJlZUNvbnRleHQgPSBsYXllclRyZWVDb250ZXh0OworICAgIG1fd2ViUGFnZVByb3h5LT5l
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGxheWVyVHJlZUNvbnRleHQpOworICAgIGlm
ICghbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9jb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSA9IGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eSh0aGlzKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Ojpz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgdmlzaWJsZUNv
bnRlbnRzUmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikK
K3sKKyAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKKyAgICAgICAgbV9j
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCh2aXNp
YmxlQ29udGVudHNSZWN0LCB0cmFqZWN0b3J5VmVjdG9yKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZERyYXdpbmdBcmVhUHJveHk6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCit7Cisg
ICAgQVNTRVJUKGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKworICAgIG1fbGF5
ZXJUcmVlQ29udGV4dCA9IExheWVyVHJlZUNvbnRleHQoKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRE
cmF3aW5nQXJlYVByb3h5Ojp1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBM
YXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQoreworICAgIEFTU0VSVChpc0luQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CisKKyAgICBtX2xheWVyVHJlZUNvbnRleHQgPSBs
YXllclRyZWVDb250ZXh0OworICAgIG1fd2ViUGFnZVByb3h5LT51cGRhdGVBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKK30KKyNlbmRpZgorCit2b2lkIENvb3Jk
aW5hdGVkRHJhd2luZ0FyZWFQcm94eTo6ZGlzY2FyZEJhY2tpbmdTdG9yZVNvb24oKQoreworICAg
IGlmICghbV9pc0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlIHx8IG1fZGlzY2FyZEJhY2tpbmdTdG9y
ZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlJ2xsIHdhaXQg
dGhpcyBtYW55IHNlY29uZHMgYWZ0ZXIgdGhlIGxhc3QgcGFpbnQgYmVmb3JlIHRocm93aW5nIGF3
YXkgb3VyIGJhY2tpbmcgc3RvcmUgdG8gc2F2ZSBtZW1vcnkuCisgICAgLy8gRklYTUU6IEl0IHdv
dWxkIGJlIHNtYXJ0ZXIgdG8gbWFrZSB0aGlzIGRlbGF5IGJhc2VkIG9uIGhvdyBleHBlbnNpdmUg
cGFpbnRpbmcgaXMuIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcvYi81NTczMz4uCisgICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBkaXNjYXJkQmFja2luZ1N0b3JlRGVsYXkgPSAyOworCisgICAgbV9kaXNj
YXJkQmFja2luZ1N0b3JlVGltZXIuc3RhcnRPbmVTaG90KGRpc2NhcmRCYWNraW5nU3RvcmVEZWxh
eSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5OjpkaXNjYXJkQmFja2lu
Z1N0b3JlKCkKK3sKKyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CisgICAgYmFja2luZ1N0
b3JlU3RhdGVEaWRDaGFuZ2UoRG9Ob3RSZXNwb25kSW1tZWRpYXRlbHkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZERyYXdpbmdBcmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE0MjVhNGYxMzU2ODQwNGMxMjI1NGY4YTY0YTBkYjY0OTU2ZTFjZGIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZERyYXdpbmdBcmVhUHJveHkuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eV9oCisjZGVmaW5l
IENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJEcmF3aW5nQXJl
YVByb3h5LmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlQ29udGV4dC5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUnVuTG9vcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgUmVnaW9uOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk7CisKK2NsYXNzIENvb3JkaW5hdGVkRHJhd2luZ0Fy
ZWFQcm94eSA6IHB1YmxpYyBEcmF3aW5nQXJlYVByb3h5IHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBDb29yZGluYXRlZERyYXdpbmdBcmVhUHJveHkoV2ViUGFnZVByb3h5Kik7CisgICAgdmlydHVh
bCB+Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5KCk7CisKKyAgICB2b2lkIHBhaW50KEJhY2tp
bmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBXZWJDb3JlOjpSZWdpb24mIHVucGFpbnRlZFJlZ2lvbik7CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgYm9vbCBpc0luQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUo
KSBjb25zdCB7IHJldHVybiAhbV9sYXllclRyZWVDb250ZXh0LmlzRW1wdHkoKTsgfQorI2VuZGlm
CisKKyAgICBib29sIGhhc1JlY2VpdmVkRmlyc3RVcGRhdGUoKSBjb25zdCB7IHJldHVybiBtX2hh
c1JlY2VpdmVkRmlyc3RVcGRhdGU7IH0KKworcHJpdmF0ZToKKyAgICAvLyBEcmF3aW5nQXJlYVBy
b3h5CisgICAgdmlydHVhbCB2b2lkIHNpemVEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGV2aWNlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJIb3N0
aW5nTW9kZURpZENoYW5nZSgpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHZpc2liaWxp
dHlEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmFja2luZ1N0b3JlSXNEaXNjYXJk
YWJsZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvckJhY2tpbmdTdG9yZVVwZGF0ZU9u
TmV4dFBhaW50KCk7CisKKyAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGNvbnN0IFVwZGF0
ZUluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUodWlu
dDY0X3QgYmFja2luZ1N0b3JlU3RhdGVJRCwgY29uc3QgVXBkYXRlSW5mbyYsIGNvbnN0IExheWVy
VHJlZUNvbnRleHQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZSh1aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBMYXllclRyZWVDb250
ZXh0Jik7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSh1
aW50NjRfdCBiYWNraW5nU3RvcmVTdGF0ZUlELCBjb25zdCBVcGRhdGVJbmZvJik7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKHVpbnQ2NF90IGJhY2tp
bmdTdG9yZVN0YXRlSUQsIGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsKKworICAgIHZvaWQgaW5j
b3Jwb3JhdGVVcGRhdGUoY29uc3QgVXBkYXRlSW5mbyYpOworCisgICAgZW51bSBSZXNwb25kSW1t
ZWRpYXRlbHlPck5vdCB7IERvTm90UmVzcG9uZEltbWVkaWF0ZWx5LCBSZXNwb25kSW1tZWRpYXRl
bHkgfTsKKyAgICB2b2lkIGJhY2tpbmdTdG9yZVN0YXRlRGlkQ2hhbmdlKFJlc3BvbmRJbW1lZGlh
dGVseU9yTm90KTsKKyAgICB2b2lkIHNlbmRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShSZXNwb25k
SW1tZWRpYXRlbHlPck5vdCk7CisgICAgdm9pZCB3YWl0Rm9yQW5kRGlzcGF0Y2hEaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZSgpOworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVD
b250ZXh0Jik7CisgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKKyAg
ICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNv
bnRleHQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVDb250ZW50c1JlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmIHRyYWplY3RvcnkpIE9WRVJSSURFOworI2Vsc2UKKyAgICBib29sIGlzSW5BY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYK
KworICAgIHZvaWQgZGlzY2FyZEJhY2tpbmdTdG9yZVNvb24oKTsKKyAgICB2b2lkIGRpc2NhcmRC
YWNraW5nU3RvcmUoKTsKKworICAgIC8vIFRoZSBzdGF0ZSBJRCBjb3JyZXNwb25kaW5nIHRvIG91
ciBjdXJyZW50IGJhY2tpbmcgc3RvcmUuIFVwZGF0ZWQgd2hlbmV2ZXIgd2UgYWxsb2NhdGUKKyAg
ICAvLyBhIG5ldyBiYWNraW5nIHN0b3JlLiBBbnkgbWVzc2FnZXMgcmVjZWl2ZWQgdGhhdCBjb3Jy
ZXNwb25kIHRvIGFuIGVhcmxpZXIgc3RhdGUgYXJlIGlnbm9yZWQsCisgICAgLy8gYXMgdGhleSBk
b24ndCBhcHBseSB0byBvdXIgY3VycmVudCBiYWNraW5nIHN0b3JlLgorICAgIHVpbnQ2NF90IG1f
Y3VycmVudEJhY2tpbmdTdG9yZVN0YXRlSUQ7CisKKyAgICAvLyBUaGUgbmV4dCBiYWNraW5nIHN0
b3JlIHN0YXRlIElEIHdlIHdpbGwgcmVxdWVzdCB0aGUgd2ViIHByb2Nlc3MgdXBkYXRlIHRvLiBJ
bmNyZW1lbnRlZAorICAgIC8vIHdoZW5ldmVyIG91ciBzdGF0ZSBjaGFuZ2VzIGluIGEgd2F5IHRo
YXQgd2lsbCByZXF1aXJlIGEgbmV3IGJhY2tpbmcgc3RvcmUgdG8gYmUgYWxsb2NhdGVkLgorICAg
IHVpbnQ2NF90IG1fbmV4dEJhY2tpbmdTdG9yZVN0YXRlSUQ7CisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgLy8gVGhlIGN1cnJlbnQgbGF5ZXIgdHJlZSBjb250ZXh0Lgor
ICAgIExheWVyVHJlZUNvbnRleHQgbV9sYXllclRyZWVDb250ZXh0OworI2VuZGlmCisKKyAgICAv
LyBXaGV0aGVyIHdlJ3ZlIHNlbnQgYSBVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSBtZXNzYWdlIGFu
ZCBhcmUgbm93IHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2Fn
ZS4KKyAgICAvLyBVc2VkIHRvIHRocm90dGxlIFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3Nh
Z2VzIHNvIHdlIGRvbid0IHNlbmQgdGhlbSBmYXN0ZXIgdGhhbiB0aGUgV2ViIHByb2Nlc3MgY2Fu
IGhhbmRsZS4KKyAgICBib29sIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGU7CisKKyAgICAvLyBGb3IgYSBuZXcgRHJhd2luZyBBcmVhIGRvbid0IGRyYXcgYW55dGhpbmcg
dW50aWwgdGhlIFdlYlByb2Nlc3MgaGFzIHNlbnQgb3ZlciB0aGUgZmlyc3QgY29udGVudC4KKyAg
ICBib29sIG1faGFzUmVjZWl2ZWRGaXJzdFVwZGF0ZTsKKworICAgIGJvb2wgbV9pc0JhY2tpbmdT
dG9yZURpc2NhcmRhYmxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNraW5nU3RvcmU+IG1fYmFj
a2luZ1N0b3JlOworCisgICAgV2ViQ29yZTo6UnVuTG9vcDo6VGltZXI8Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYVByb3h5PiBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1lcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2Vu
ZGlmIC8vIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCmluZGV4
IGI1YmE2YTk4MTQ5YWJmYjcxMDg1NTY0OWVkMTljYTdjMDc4Mjk3MzguLmVkNGIwYjZiYTgxY2Jk
NzMzZTIxYTVmZDUwZTZiZTI2YTNjMzdiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCkBAIC0yOSw4ICsy
OSw4IEBACiAKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAKKyNpbmNsdWRlICJDb29yZGluYXRlZERy
YXdpbmdBcmVhUHJveHkuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oIgotI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCkBAIC0yODMsNyArMjgzLDcgQEAgV2ViQ29yZTo6RmxvYXRTaXplIFdl
YlZpZXc6OnZpc2libGVDb250ZW50c1NpemUoKSBjb25zdAogCiBzdGQ6OnVuaXF1ZV9wdHI8RHJh
d2luZ0FyZWFQcm94eT4gV2ViVmlldzo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eSgpCiB7Ci0gICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8RHJhd2luZ0FyZWFQcm94eUltcGw+KHBhZ2UoKSk7Cisg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29vcmRpbmF0ZWREcmF3aW5nQXJlYVByb3h5Pihw
YWdlKCkpOwogfQogCiB2b2lkIFdlYlZpZXc6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgYXJlYSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9EcmF3aW5nQXJlYVByb3h5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eUltcGwuY3BwCmluZGV4IGQ4OWJjYzVmYWY2NmYxNTNlZmY0NjNmM2RkMTJk
NmU3YTBlN2ZkMjYuLjNjMmYzYzA4MWFlODVlZjlmMmI4ZjFlNGM3M2U0MzE1MWRhNDVjZDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmNw
cApAQCAtMzYsMTAgKzM2LDYgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
I2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCi0jZW5kaWYKLQogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNTMsMTEgKzQ5
LDYgQEAgRHJhd2luZ0FyZWFQcm94eUltcGw6OkRyYXdpbmdBcmVhUHJveHlJbXBsKFdlYlBhZ2VQ
cm94eSogd2ViUGFnZVByb3h5KQogICAgICwgbV9pc0JhY2tpbmdTdG9yZURpc2NhcmRhYmxlKHRy
dWUpCiAgICAgLCBtX2Rpc2NhcmRCYWNraW5nU3RvcmVUaW1lcihSdW5Mb29wOjpjdXJyZW50KCks
IHRoaXMsICZEcmF3aW5nQXJlYVByb3h5SW1wbDo6ZGlzY2FyZEJhY2tpbmdTdG9yZSkKIHsKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgLy8gQ29uc3RydWN0IHRoZSBwcm94eSBl
YXJseSB0byBhbGxvdyBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoZSB3ZWIgcHJvY2VzcyB3aGls
ZSBBQyBpcyBlbnRlcmVkIHRoZXJlLgotICAgIGlmICh3ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5mb3JjZUNvbXBvc2l0aW5nTW9kZSgpKQotICAgICAgICBtX2Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gYWRvcHRQdHIobmV3IENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5KHRoaXMpKTsKLSNlbmRpZgogfQogCiBEcmF3aW5nQXJlYVByb3h5SW1wbDo6
fkRyYXdpbmdBcmVhUHJveHlJbXBsKCkKQEAgLTM2MCwyMCArMzUxLDggQEAgdm9pZCBEcmF3aW5n
QXJlYVByb3h5SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXgKICAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9sYXllclRy
ZWVDb250ZXh0ID0gbGF5ZXJUcmVlQ29udGV4dDsKICAgICBtX3dlYlBhZ2VQcm94eS0+ZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShsYXllclRyZWVDb250ZXh0KTsKLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKCFtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5KQotICAgICAgICBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gYWRvcHRQdHIo
bmV3IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KHRoaXMpKTsKLSNlbmRpZgogfQogCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBEcmF3aW5nQXJlYVByb3h5SW1wbDo6
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHZpc2libGVD
b250ZW50c1JlY3QsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3Ip
Ci17Ci0gICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1f
Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPnNldFZpc2libGVDb250ZW50c1JlY3Qodmlz
aWJsZUNvbnRlbnRzUmVjdCwgdHJhamVjdG9yeVZlY3Rvcik7Ci19Ci0jZW5kaWYKLQogdm9pZCBE
cmF3aW5nQXJlYVByb3h5SW1wbDo6ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKIHsK
ICAgICBBU1NFUlQoaXNJbkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eUltcGwuaAppbmRleCAwZThlMmFj
M2FmZTFhMmFjNWYwZTkxMzBiYzUwOTNhOWMyZmU0ODEwLi40N2JhMjQxMzMzMDc2Mzk2ZGFhMzAy
ZmUwMTRjMTI3NzM5YzI2NjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RHJhd2luZ0FyZWFQcm94eUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRHJh
d2luZ0FyZWFQcm94eUltcGwuaApAQCAtODEsOSArODEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jik7
CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKICAgICB2b2lkIHVw
ZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKTsK
LSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgdmlydHVhbCB2b2lkIHNldFZpc2li
bGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudHNS
ZWN0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5KSBPVkVSUklERTsKLSNl
bmRpZgogI2Vsc2UKICAgICBib29sIGlzSW5BY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2lu
Z0FyZWEuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjE4YjM1M2Zj
NTVlOWRhZThhZDNiNDdlOGUxMGU0NzljYjViMjU1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkRHJhd2luZ0FyZWEuY3BwCkBAIC0wLDAgKzEsNjM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMyBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyNpbmNsdWRlICJDb29yZGluYXRlZERyYXdpbmdBcmVhLmgiCisKKyNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJMYXllclRyZWVDb250ZXh0LmgiCisj
aW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiVXBkYXRlSW5mby5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKKyNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK0Nvb3JkaW5hdGVkRHJhd2luZ0FyZWE6On5Db29yZGluYXRlZERyYXdpbmdBcmVhKCkKK3sK
KyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmludmFs
aWRhdGUoKTsKK30KKworQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6Q29vcmRpbmF0ZWREcmF3aW5n
QXJlYShXZWJQYWdlKiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQorICAgIDogRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQs
IHdlYlBhZ2UpCisgICAgLCBtX2JhY2tpbmdTdG9yZVN0YXRlSUQoMCkKKyAgICAsIG1faXNQYWlu
dGluZ0VuYWJsZWQodHJ1ZSkKKyAgICAsIG1faW5VcGRhdGVCYWNraW5nU3RvcmVTdGF0ZShmYWxz
ZSkKKyAgICAsIG1fc2hvdWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKGZhbHNlKQor
ICAgICwgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUoZmFsc2UpCisgICAgLCBtX2NvbXBvc2l0aW5n
QWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzKGZhbHNlKQorICAgICwgbV9sYXllclRyZWVTdGF0ZUlz
RnJvemVuKGZhbHNlKQorICAgICwgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGZhbHNlKQorICAgICwgbV9pc1BhaW50aW5nU3VzcGVuZGVkKCFwYXJhbWV0ZXJzLmlzVmlz
aWJsZSkKKyAgICAsIG1fZGlzcGxheVRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkNvb3Jk
aW5hdGVkRHJhd2luZ0FyZWE6OmRpc3BsYXlUaW1lckZpcmVkKQorICAgICwgbV9leGl0Q29tcG9z
aXRpbmdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZDb29yZGluYXRlZERyYXdpbmdBcmVh
OjpleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpCit7CisgICAgLy8gQWx3YXlzIHVzZSBj
b21wb3NpdGluZyBpbiBDb29yZGluYXRlZEdyYXBoaWNzCisgICAgZW50ZXJBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSgwKTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRO
ZWVkc0Rpc3BsYXkoKQoreworICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICBBU1NFUlQobV9k
aXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldE5vbkNv
bXBvc2l0ZWRDb250ZW50c05lZWREaXNwbGF5KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QobV93ZWJQYWdlLT5ib3VuZHMoKSk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX2lzUGFpbnRpbmdFbmFibGVkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CisgICAgICAgIEFTU0VSVChtX2Rp
cnR5UmVnaW9uLmlzRW1wdHkoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Tm9uQ29t
cG9zaXRlZENvbnRlbnRzTmVlZERpc3BsYXlJblJlY3QocmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBJbnRSZWN0IGRpcnR5UmVjdCA9IHJlY3Q7CisgICAgZGlydHlSZWN0Lmlu
dGVyc2VjdChtX3dlYlBhZ2UtPmJvdW5kcygpKTsKKworICAgIGlmIChkaXJ0eVJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RpcnR5UmVnaW9uLnVuaXRlKGRpcnR5UmVj
dCk7CisgICAgc2NoZWR1bGVEaXNwbGF5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYTo6c2Nyb2xsKGNvbnN0IEludFJlY3QmIHNjcm9sbFJlY3QsIGNvbnN0IEludFNpemUmIHNj
cm9sbERlbHRhKQoreworICAgIGlmICghbV9pc1BhaW50aW5nRW5hYmxlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICBBU1NFUlQobV9zY3Jv
bGxSZWN0LmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChtX3Njcm9sbE9mZnNldC5pc0VtcHR5
KCkpOworICAgICAgICBBU1NFUlQobV9kaXJ0eVJlZ2lvbi5pc0VtcHR5KCkpOworCisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2Nyb2xsTm9uQ29tcG9zaXRlZENvbnRlbnRzKHNjcm9sbFJlY3Qp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNjcm9sbFJlY3QuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fc2Nyb2xsUmVjdC5pc0VtcHR5KCkgJiYg
c2Nyb2xsUmVjdCAhPSBtX3Njcm9sbFJlY3QpIHsKKyAgICAgICAgdW5zaWduZWQgc2Nyb2xsQXJl
YSA9IHNjcm9sbFJlY3Qud2lkdGgoKSAqIHNjcm9sbFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRTY3JvbGxBcmVhID0gbV9zY3JvbGxSZWN0LndpZHRoKCkgKiBtX3Njcm9s
bFJlY3QuaGVpZ2h0KCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRTY3JvbGxBcmVhID49IHNjcm9s
bEFyZWEpIHsKKyAgICAgICAgICAgIC8vIFRoZSByZWN0IGJlaW5nIHNjcm9sbGVkIGlzIGF0IGxl
YXN0IGFzIGxhcmdlIGFzIHRoZSByZWN0IHdlJ2QgbGlrZSB0byBzY3JvbGwuCisgICAgICAgICAg
ICAvLyBHbyBhaGVhZCBhbmQganVzdCBpbnZhbGlkYXRlIHRoZSBzY3JvbGwgcmVjdC4KKyAgICAg
ICAgICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChzY3JvbGxSZWN0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEp1c3QgcmVwYWludCB0aGUgZW50aXJlIGN1
cnJlbnQgc2Nyb2xsIHJlY3QsIHdlJ2xsIHNjcm9sbCB0aGUgbmV3IHJlY3QgaW5zdGVhZC4KKyAg
ICAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KG1fc2Nyb2xsUmVjdCk7CisgICAgICAgIG1fc2Ny
b2xsUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBJbnRTaXplKCk7
CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBwYXJ0IG9mIHRoZSBkaXJ0eSByZWdpb24gdGhhdCBp
cyBpbiB0aGUgc2Nyb2xsIHJlY3QuCisgICAgUmVnaW9uIGRpcnR5UmVnaW9uSW5TY3JvbGxSZWN0
ID0gaW50ZXJzZWN0KHNjcm9sbFJlY3QsIG1fZGlydHlSZWdpb24pOworICAgIGlmICghZGlydHlS
ZWdpb25JblNjcm9sbFJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIFRoZXJlIGFyZSBwYXJ0
cyBvZiB0aGUgZGlydHkgcmVnaW9uIHRoYXQgYXJlIGluc2lkZSB0aGUgc2Nyb2xsIHJlY3QuCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gc3VidHJhY3QgdGhlbSBmcm9tIHRoZSByZWdpb24sIG1vdmUg
dGhlbSBhbmQgcmUtYWRkIHRoZW0uCisgICAgICAgIG1fZGlydHlSZWdpb24uc3VidHJhY3Qoc2Ny
b2xsUmVjdCk7CisKKyAgICAgICAgLy8gTW92ZSB0aGUgZGlydHkgcGFydHMuCisgICAgICAgIFJl
Z2lvbiBtb3ZlZERpcnR5UmVnaW9uSW5TY3JvbGxSZWN0ID0gaW50ZXJzZWN0KHRyYW5zbGF0ZShk
aXJ0eVJlZ2lvbkluU2Nyb2xsUmVjdCwgc2Nyb2xsRGVsdGEpLCBzY3JvbGxSZWN0KTsKKworICAg
ICAgICAvLyBBbmQgYWRkIHRoZW0gYmFjay4KKyAgICAgICAgbV9kaXJ0eVJlZ2lvbi51bml0ZSht
b3ZlZERpcnR5UmVnaW9uSW5TY3JvbGxSZWN0KTsKKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRo
ZSBzY3JvbGwgcmVwYWludCByZWdpb24uCisgICAgUmVnaW9uIHNjcm9sbFJlcGFpbnRSZWdpb24g
PSBzdWJ0cmFjdChzY3JvbGxSZWN0LCB0cmFuc2xhdGUoc2Nyb2xsUmVjdCwgc2Nyb2xsRGVsdGEp
KTsKKworICAgIG1fZGlydHlSZWdpb24udW5pdGUoc2Nyb2xsUmVwYWludFJlZ2lvbik7CisgICAg
c2NoZWR1bGVEaXNwbGF5KCk7CisKKyAgICBtX3Njcm9sbFJlY3QgPSBzY3JvbGxSZWN0OworICAg
IG1fc2Nyb2xsT2Zmc2V0ICs9IHNjcm9sbERlbHRhOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJh
d2luZ0FyZWE6OnBhZ2VCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5Q2hhbmdlZCgpCit7CisgICAgaWYg
KG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wYWdlQmFja2dyb3Vu
ZFRyYW5zcGFyZW5jeUNoYW5nZWQoKTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVh
OjpzZXRMYXllclRyZWVTdGF0ZUlzRnJvemVuKGJvb2wgaXNGcm96ZW4pCit7CisgICAgaWYgKG1f
bGF5ZXJUcmVlU3RhdGVJc0Zyb3plbiA9PSBpc0Zyb3plbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuID0gaXNGcm96ZW47CisKKyAgICBpZiAobV9sYXll
clRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldExheWVyRmx1c2hTY2hlZHVs
aW5nRW5hYmxlZCghaXNGcm96ZW4pOworCisgICAgaWYgKGlzRnJvemVuKQorICAgICAgICBtX2V4
aXRDb21wb3NpdGluZ1RpbWVyLnN0b3AoKTsKKyAgICBlbHNlIGlmIChtX3dhbnRzVG9FeGl0QWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUpCisgICAgICAgIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nTW9kZVNvb24oKTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpmb3JjZVJl
cGFpbnQoKQoreworICAgIHNldE5lZWRzRGlzcGxheSgpOworCisgICAgbV93ZWJQYWdlLT5sYXlv
dXRJZk5lZWRlZCgpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICAvLyBG
SVhNRTogV2UgbmVlZCB0byBkbyB0aGUgc2FtZSB3b3JrIGFzIHRoZSBsYXllckhvc3REaWRGbHVz
aExheWVycyBmdW5jdGlvbiBoZXJlLAorICAgICAgICAvLyBidXQgY2xlYXJseSBpdCBkb2Vzbid0
IG1ha2Ugc2Vuc2UgdG8gY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGF0IG5hbWUuCisgICAgICAg
IC8vIENvbnNpZGVyIHJlZmFjdG9yaW5nIGFuZCByZW5hbWluZyBpdC4KKyAgICAgICAgaWYgKG1f
Y29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMpCisgICAgICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8v
IENhbGwgc2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSkg
aGVyZSB0bworICAgICAgICAgICAgLy8gcHJldmVudCBsYXllckhvc3REaWRGbHVzaExheWVycygp
IGZyb20gYmVpbmcgY2FsbGVkIGEgc2Vjb25kIHRpbWUuCisgICAgICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2goZmFsc2Up
OworICAgICAgICAgICAgbGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9pc1dhaXRpbmdGb3JEaWRVcGRhdGUgPSBmYWxz
ZTsKKyAgICBkaXNwbGF5KCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6Zm9y
Y2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCkKK3sKKyAgICByZXR1cm4gbV9sYXll
clRyZWVIb3N0ICYmIG1fbGF5ZXJUcmVlSG9zdC0+Zm9yY2VSZXBhaW50QXN5bmMoY2FsbGJhY2tJ
RCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlkSW5zdGFsbFBhZ2VPdmVy
bGF5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZEluc3RhbGxQYWdlT3ZlcmxheShwYWdlT3Zl
cmxheSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlkVW5pbnN0YWxsUGFn
ZU92ZXJsYXkoUGFnZU92ZXJsYXkqIHBhZ2VPdmVybGF5KQoreworICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkVW5pbnN0YWxsUGFnZU92ZXJsYXko
cGFnZU92ZXJsYXkpOworCisgICAgc2V0TmVlZHNEaXNwbGF5KCk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWREcmF3aW5nQXJlYTo6c2V0UGFnZU92ZXJsYXlOZWVkc0Rpc3BsYXkoUGFnZU92ZXJsYXkq
IHBhZ2VPdmVybGF5LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRQYWdlT3ZlcmxheU5lZWRzRGlz
cGxheShwYWdlT3ZlcmxheSwgcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
ZXROZWVkc0Rpc3BsYXlJblJlY3QocmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5n
QXJlYTo6c2V0UGFnZU92ZXJsYXlPcGFjaXR5KFBhZ2VPdmVybGF5KiBwYWdlT3ZlcmxheSwgZmxv
YXQgdmFsdWUpCit7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5zZXRQYWdlT3ZlcmxheU9wYWNpdHkocGFnZU92ZXJsYXksIHZhbHVlKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjpzZXRQYWludGluZ0VuYWJsZWQoYm9vbCBwYWlu
dGluZ0VuYWJsZWQpCit7CisgICAgbV9pc1BhaW50aW5nRW5hYmxlZCA9IHBhaW50aW5nRW5hYmxl
ZDsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVhOjp1cGRhdGVQcmVmZXJlbmNlcyhj
b25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKK3sKKyAgICBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPnNldHRpbmdzKCkuc2V0Rm9yY2VDb21wb3NpdGluZ01vZGUoc3RvcmUuZ2V0Qm9vbFZh
bHVlRm9yS2V5KFdlYlByZWZlcmVuY2VzS2V5Ojpmb3JjZUNvbXBvc2l0aW5nTW9kZUtleSgpKSAm
JiBMYXllclRyZWVIb3N0OjpzdXBwb3J0c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKQor
eworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3QpOworCisgICAgbV9sYXllclRyZWVIb3N0LT5m
b3JjZVJlcGFpbnQoKTsKKworICAgIGlmIChtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSAmJiAhZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlUGVuZGluZygpKSB7Cisg
ICAgICAgIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVybjsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBBU1NFUlQoIW1fY29tcG9zaXRp
bmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMpOworICAgIGlmICghZXhpdEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlUGVuZGluZygpKSB7CisgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6RHJhd2luZ0FyZWFQcm94eTo6RW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShtX2Jh
Y2tpbmdTdG9yZVN0YXRlSUQsIG1fbGF5ZXJUcmVlSG9zdC0+bGF5ZXJUcmVlQ29udGV4dCgpKSk7
CisgICAgICAgIG1fY29tcG9zaXRpbmdBY2NvcmRpbmdUb1Byb3h5TWVzc2FnZXMgPSB0cnVlOwor
ICAgIH0KKyNlbmRpZgorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorR3Jh
cGhpY3NMYXllckZhY3RvcnkqIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCkKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICByZXR1cm4gbV9s
YXllclRyZWVIb3N0LT5ncmFwaGljc0xheWVyRmFjdG9yeSgpOworCisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBv
ZiB1c2luZyBuZXN0ZWQgaWYgc3RhdGVtZW50cywgd2Ugc2hvdWxkIGtlZXAgYSBjb21wb3NpdGlu
ZyBzdGF0ZQorICAgIC8vIGVudW0gaW4gdGhlIENvb3JkaW5hdGVkRHJhd2luZ0FyZWEgb2JqZWN0
IGFuZCBoYXZlIGEgY2hhbmdlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ1N0YXRlIGZ1bmN0aW9uCisg
ICAgLy8gdGhhdCB0YWtlcyB0aGUgbmV3IHN0YXRlLgorCisgICAgaWYgKGdyYXBoaWNzTGF5ZXIp
IHsKKyAgICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgICAgIC8vIFdlJ3Jl
IGFjdHVhbGx5IGVudGVyaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUuCisgICAgICAg
ICAgICBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGdyYXBoaWNzTGF5ZXIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSBpbiBhY2NlbGVyYXRl
ZCBjb21wb3NpdGluZyBtb2RlLCBidXQgdGhlIHJvb3QgY29tcG9zaXRpbmcgbGF5ZXIgY2hhbmdl
ZC4KKworICAgICAgICAgICAgbV9leGl0Q29tcG9zaXRpbmdUaW1lci5zdG9wKCk7CisgICAgICAg
ICAgICBtX3dhbnRzVG9FeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUgPSBmYWxzZTsKKwor
ICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBzZW50IHRoZSBFbnRlckFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlIG1lc3NhZ2UsIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgICAgICAgICAgLy8g
bGF5ZXIgdHJlZSBob3N0IGNhbGxzIHVzIGJhY2sgYWZ0ZXIgdGhlIG5leHQgbGF5ZXIgZmx1c2gg
c28gd2UgY2FuIHNlbmQgaXQgdGhlbi4KKyAgICAgICAgICAgIGlmICghbV9jb21wb3NpdGluZ0Fj
Y29yZGluZ1RvUHJveHlNZXNzYWdlcykKKyAgICAgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldFNob3VsZE5vdGlmeUFmdGVyTmV4dFNjaGVkdWxlZExheWVyRmx1c2godHJ1ZSk7CisKKyAg
ICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoZ3JhcGhp
Y3NMYXllcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9sYXllclRy
ZWVIb3N0KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290Q29tcG9zaXRpbmdM
YXllcigwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6c2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQoreworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQor
ICAgICAgICByZXR1cm47CisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUxheWVyRmx1c2go
KTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnVwZGF0ZUJhY2tp
bmdTdG9yZVN0YXRlKHVpbnQ2NF90IHN0YXRlSUQsIGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgc2Nyb2xsT2Zmc2V0KQoreworICAgIEFTU0VSVCghbV9pblVw
ZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKTsKKyAgICBtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUg
PSB0cnVlOworCisgICAgQVNTRVJUX0FSRyhzdGF0ZUlELCBzdGF0ZUlEID49IG1fYmFja2luZ1N0
b3JlU3RhdGVJRCk7CisgICAgaWYgKHN0YXRlSUQgIT0gbV9iYWNraW5nU3RvcmVTdGF0ZUlEKSB7
CisgICAgICAgIG1fYmFja2luZ1N0b3JlU3RhdGVJRCA9IHN0YXRlSUQ7CisgICAgICAgIG1fc2hv
dWxkU2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gdHJ1ZTsKKworICAgICAgICBtX3dl
YlBhZ2UtPnNldERldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICAgICAg
bV93ZWJQYWdlLT5zZXRTaXplKHNpemUpOworICAgICAgICBtX3dlYlBhZ2UtPmxheW91dElmTmVl
ZGVkKCk7CisgICAgICAgIG1fd2ViUGFnZS0+c2Nyb2xsTWFpbkZyYW1lSWZOb3RBdE1heFNjcm9s
bFBvc2l0aW9uKHNjcm9sbE9mZnNldCk7CisKKyAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkg
eworICAgICAgICAgICAgLy8gQ29vcmRpbmF0ZWQgR3JhcGhpY3Mgc2V0cyB0aGUgc2l6ZSBvZiB0
aGUgcm9vdCBsYXllciB0byBjb250ZW50cyBzaXplLgorICAgICAgICAgICAgaWYgKCFtX3dlYlBh
Z2UtPnVzZUZpeGVkTGF5b3V0KCkpCisgICAgICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
aXplRGlkQ2hhbmdlKG1fd2ViUGFnZS0+c2l6ZSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2RpcnR5UmVnaW9uID0gbV93ZWJQYWdlLT5ib3VuZHMoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQoc2l6ZSA9PSBtX3dlYlBhZ2UtPnNpemUoKSk7CisgICAgICAgIGlmICgh
bV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUpIHsKKyAgICAgICAgICAgIC8v
IFdlJ3ZlIGFscmVhZHkgc2VudCBhIERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2Ug
Zm9yIHRoaXMgc3RhdGUuIFdlIGhhdmUgbm90aGluZyBtb3JlIHRvIGRvLgorICAgICAgICAgICAg
bV9pblVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGUgVUkgcHJvY2VzcyBoYXMgdXBkYXRlZCB0
byBhIG5ldyBiYWNraW5nIHN0b3JlIHN0YXRlLiBBbnkgVXBkYXRlIG1lc3NhZ2VzIHdlIHNlbnQg
YmVmb3JlCisgICAgLy8gdGhpcyBwb2ludCB3aWxsIGJlIGlnbm9yZWQuIFdlIHdhaXQgdG8gc2V0
IHRoaXMgdG8gZmFsc2UgdW50aWwgYWZ0ZXIgdXBkYXRpbmcgdGhlIHBhZ2UncworICAgIC8vIHNp
emUgc28gdGhhdCBhbnkgZGlzcGxheXMgdHJpZ2dlcmVkIGJ5IHRoZSByZWxheW91dCB3aWxsIGJl
IGlnbm9yZWQuIElmIHdlJ3JlIHN1cHBvc2VkIHRvCisgICAgLy8gcmVzcG9uZCB0byB0aGUgVXBk
YXRlQmFja2luZ1N0b3JlU3RhdGUgbWVzc2FnZSBpbW1lZGlhdGVseSwgd2UnbGwgZG8gYSBkaXNw
bGF5IGFueXdheSBpbgorICAgIC8vIHNlbmREaWRVcGRhdGVCYWNraW5nU3RvcmVTdGF0ZTsgb3Ro
ZXJ3aXNlIHdlIHNob3VsZG4ndCBkbyBvbmUgcmlnaHQgbm93LgorICAgIG1faXNXYWl0aW5nRm9y
RGlkVXBkYXRlID0gZmFsc2U7CisKKyAgICBpZiAocmVzcG9uZEltbWVkaWF0ZWx5KSB7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSB0byByZXN1bWUgcGFpbnRpbmcgaWYgd2UncmUgc3VwcG9zZWQgdG8g
cmVzcG9uZCBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlIHdlJ2xsIGp1c3QKKyAgICAgICAgLy8gc2Vu
ZCBiYWNrIGFuIGVtcHR5IFVwZGF0ZUluZm8gc3RydWN0LgorICAgICAgICBpZiAobV9pc1BhaW50
aW5nU3VzcGVuZGVkKQorICAgICAgICAgICAgcmVzdW1lUGFpbnRpbmcoKTsKKworICAgICAgICBz
ZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKTsKKyAgICB9CisKKyAgICBtX2luVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUgPSBmYWxzZTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdB
cmVhOjpzZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUoKQoreworICAgIEFTU0VSVCghbV9p
c1dhaXRpbmdGb3JEaWRVcGRhdGUpOworICAgIEFTU0VSVChtX3Nob3VsZFNlbmREaWRVcGRhdGVC
YWNraW5nU3RvcmVTdGF0ZSk7CisKKyAgICBtX3Nob3VsZFNlbmREaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZSA9IGZhbHNlOworCisgICAgVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworCisgICAgaWYg
KCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQgJiYgIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgZGlz
cGxheSh1cGRhdGVJbmZvKTsKKworICAgIExheWVyVHJlZUNvbnRleHQgbGF5ZXJUcmVlQ29udGV4
dDsKKworICAgIGlmIChtX2lzUGFpbnRpbmdTdXNwZW5kZWQgfHwgbV9sYXllclRyZWVIb3N0KSB7
CisgICAgICAgIHVwZGF0ZUluZm8udmlld1NpemUgPSBtX3dlYlBhZ2UtPnNpemUoKTsKKyAgICAg
ICAgdXBkYXRlSW5mby5kZXZpY2VTY2FsZUZhY3RvciA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7Cisg
ICAgICAgICAgICBsYXllclRyZWVDb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5sYXllclRyZWVD
b250ZXh0KCk7CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIGxheWVyIHRyZWUg
aG9zdCB0byBub3RpZnkgYWZ0ZXIgdGhlIG5leHQgc2NoZWR1bGVkCisgICAgICAgICAgICAvLyBs
YXllciBmbHVzaCBiZWNhdXNlIHRoYXQgbWlnaHQgZW5kIHVwIHNlbmRpbmcgYW4gRW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZQorICAgICAgICAgICAgLy8gbWVzc2FnZSBiYWNrIHRvIHRo
ZSBVSSBwcm9jZXNzLCBidXQgdGhlIHVwZGF0ZWQgbGF5ZXIgdHJlZSBjb250ZXh0CisgICAgICAg
ICAgICAvLyB3aWxsIGJlIHNlbnQgYmFjayBpbiB0aGUgRGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGUgbWVzc2FnZS4KKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5
QWZ0ZXJOZXh0U2NoZWR1bGVkTGF5ZXJGbHVzaChmYWxzZSk7CisgICAgICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmZvcmNlUmVwYWludCgpOworICAgICAgICB9CisgICAgfQorCisgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYVByb3h5OjpEaWRVcGRhdGVCYWNraW5nU3Rv
cmVTdGF0ZShtX2JhY2tpbmdTdG9yZVN0YXRlSUQsIHVwZGF0ZUluZm8sIGxheWVyVHJlZUNvbnRl
eHQpKTsKKyAgICBtX2NvbXBvc2l0aW5nQWNjb3JkaW5nVG9Qcm94eU1lc3NhZ2VzID0gIWxheWVy
VHJlZUNvbnRleHQuaXNFbXB0eSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6
OmRpZFVwZGF0ZSgpCit7CisgICAgLy8gV2UgbWlnaHQgZ2V0IGRpZFVwZGF0ZSBtZXNzYWdlcyBm
cm9tIHRoZSBVSSBwcm9jZXNzIGV2ZW4gYWZ0ZXIgd2UndmUKKyAgICAvLyBlbnRlcmVkIGFjY2Vs
ZXJhdGVkIGNvbXBvc2l0aW5nIG1vZGUuIElnbm9yZSB0aGVtLgorICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlID0g
ZmFsc2U7CisKKyAgICAvLyBEaXNwbGF5IGlmIG5lZWRlZC4gV2UgY2FsbCBkaXNwbGF5VGltZXJG
aXJlZCBoZXJlIHNpbmNlIGl0IHdpbGwgdGhyb3R0bGUgdXBkYXRlcyB0byA2MGZwcy4KKyAgICBk
aXNwbGF5VGltZXJGaXJlZCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnN1
c3BlbmRQYWludGluZygpCit7CisgICAgQVNTRVJUKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpOwor
CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wYXVz
ZVJlbmRlcmluZygpOworCisgICAgbV9pc1BhaW50aW5nU3VzcGVuZGVkID0gdHJ1ZTsKKyAgICBt
X2Rpc3BsYXlUaW1lci5zdG9wKCk7CisKKyAgICBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnN1c3Bl
bmRTY3JpcHRlZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdpbmdBcmVh
OjpyZXN1bWVQYWludGluZygpCit7CisgICAgaWYgKCFtX2lzUGFpbnRpbmdTdXNwZW5kZWQpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBnZXQgYSBjYWxsIHRvIHJlc3VtZVBhaW50aW5nIHdo
ZW4gcGFpbnRpbmcgaXMgbm90IHN1c3BlbmRlZC4KKyAgICAgICAgLy8gVGhpcyBoYXBwZW5zIHdo
ZW4gc2VuZGluZyBhIHN5bmNocm9ub3VzIG1lc3NhZ2UgdG8gY3JlYXRlIGEgbmV3IHBhZ2UuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vODk3NjUzMT4uCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJlc3VtZVJl
bmRlcmluZygpOworCisgICAgbV9pc1BhaW50aW5nU3VzcGVuZGVkID0gZmFsc2U7CisKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGFsd2F5cyByZXBhaW50IGV2ZXJ5dGhpbmcgaGVyZS4KKyAg
ICBzZXROZWVkc0Rpc3BsYXkoKTsKKworICAgIG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+cmVzdW1l
U2NyaXB0ZWRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShHcmFwaGljc0xheWVyKiBncmFwaGljc0xh
eWVyKQoreworICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIuc3RvcCgpOworICAgIG1fd2FudHNU
b0V4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSA9IGZhbHNlOworCisgICAgQVNTRVJUKCFt
X2xheWVyVHJlZUhvc3QpOworCisgICAgbV9sYXllclRyZWVIb3N0ID0gTGF5ZXJUcmVlSG9zdDo6
Y3JlYXRlKG1fd2ViUGFnZSk7CisgICAgaWYgKCFtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGUp
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0U2hvdWxkTm90aWZ5QWZ0ZXJOZXh0U2NoZWR1
bGVkTGF5ZXJGbHVzaCh0cnVlKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdENvbXBv
c2l0aW5nTGF5ZXIoZ3JhcGhpY3NMYXllcik7CisKKyAgICAvLyBOb24tY29tcG9zaXRlZCBjb250
ZW50IHdpbGwgbm93IGJlIGhhbmRsZWQgZXhjbHVzaXZlbHkgYnkgdGhlIGxheWVyIHRyZWUgaG9z
dC4KKyAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CisgICAgbV9zY3JvbGxSZWN0ID0gSW50
UmVjdCgpOworICAgIG1fc2Nyb2xsT2Zmc2V0ID0gSW50U2l6ZSgpOworICAgIG1fZGlzcGxheVRp
bWVyLnN0b3AoKTsKKyAgICBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSA9IGZhbHNlOworfQorCit2
b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9k
ZVNvb24oKQoreworICAgIGlmIChtX2xheWVyVHJlZVN0YXRlSXNGcm96ZW4pIHsKKyAgICAgICAg
bV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlID0gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZXhpdENvbXBvc2l0aW5nVGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OnNjaGVk
dWxlRGlzcGxheSgpCit7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOworCisgICAgaWYg
KG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9p
c1BhaW50aW5nU3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kaXJ0eVJl
Z2lvbi5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Rpc3BsYXlUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rpc3BsYXlUaW1lci5zdGFy
dE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWREcmF3aW5nQXJlYTo6ZGlzcGxheVRp
bWVyRmlyZWQoKQoreworICAgIGRpc3BsYXkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZERyYXdp
bmdBcmVhOjpkaXNwbGF5KCkKK3sKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdCk7CisgICAg
QVNTRVJUKCFtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZSk7CisgICAgQVNTRVJUKCFtX2luVXBkYXRl
QmFja2luZ1N0b3JlU3RhdGUpOworCisgICAgaWYgKG1faXNQYWludGluZ1N1c3BlbmRlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fZGlydHlSZWdpb24uaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGUpIHsKKyAgICAgICAgc2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBVcGRhdGVJbmZvIHVwZGF0ZUluZm87CisgICAgZGlzcGxh
eSh1cGRhdGVJbmZvKTsKKworICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgLy8g
VGhlIGNhbGwgdG8gdXBkYXRlIGNhdXNlZCBsYXlvdXQgd2hpY2ggdHVybmVkIG9uIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nLgorICAgICAgICAvLyBEb24ndCBzZW5kIGFuIFVwZGF0ZSBtZXNzYWdl
IGluIHRoaXMgY2FzZS4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWFQcm94eTo6VXBkYXRlKG1fYmFja2luZ1N0b3JlU3Rh
dGVJRCwgdXBkYXRlSW5mbykpOworICAgIG1faXNXYWl0aW5nRm9yRGlkVXBkYXRlID0gdHJ1ZTsK
K30KKworc3RhdGljIGJvb2wgc2hvdWxkUGFpbnRCb3VuZHNSZWN0KGNvbnN0IEludFJlY3QmIGJv
dW5kcywgY29uc3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cykKK3sKKyAgICBjb25zdCBzaXplX3Qg
cmVjdFRocmVzaG9sZCA9IDEwOworICAgIGNvbnN0IGRvdWJsZSB3YXN0ZWRTcGFjZVRocmVzaG9s
ZCA9IDAuNzU7CisKKyAgICBpZiAocmVjdHMuc2l6ZSgpIDw9IDEgfHwgcmVjdHMuc2l6ZSgpID4g
cmVjdFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBBdHRlbXB0IHRv
IGd1ZXNzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCB1c2UgdGhlIHJlZ2lvbiBib3VuZHMgcmVj
dCBvciB0aGUgaW5kaXZpZHVhbCByZWN0cy4KKyAgICAvLyBXZSBkbyB0aGlzIGJ5IGNvbXB1dGlu
ZyB0aGUgcGVyY2VudGFnZSBvZiAid2FzdGVkIHNwYWNlIiBpbiB0aGUgYm91bmRzLiBJZiB0aGF0
IHdhc3RlZCBzcGFjZQorICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxsIGRvIGluZGl2
aWR1YWwgcmVjdCBwYWludGluZyBpbnN0ZWFkLgorICAgIHVuc2lnbmVkIGJvdW5kc0FyZWEgPSBi
b3VuZHMud2lkdGgoKSAqIGJvdW5kcy5oZWlnaHQoKTsKKyAgICB1bnNpZ25lZCByZWN0c0FyZWEg
PSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIHJlY3RzQXJlYSArPSByZWN0c1tpXS53aWR0aCgpICogcmVjdHNbaV0uaGVpZ2h0KCk7CisK
KyAgICBkb3VibGUgd2FzdGVkU3BhY2UgPSAxIC0gKHN0YXRpY19jYXN0PGRvdWJsZT4ocmVjdHNB
cmVhKSAvIGJvdW5kc0FyZWEpOworCisgICAgcmV0dXJuIHdhc3RlZFNwYWNlIDw9IHdhc3RlZFNw
YWNlVGhyZXNob2xkOworfQorCit2b2lkIENvb3JkaW5hdGVkRHJhd2luZ0FyZWE6OmRpc3BsYXko
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3sKKyAgICBBU1NFUlQoIW1faXNQYWludGluZ1N1c3Bl
bmRlZCk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOworICAgIEFTU0VSVCghbV93ZWJQ
YWdlLT5zaXplKCkuaXNFbXB0eSgpKTsKKworICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQo
KTsKKworICAgIC8vIFRoZSBsYXlvdXQgbWF5IGhhdmUgcHV0IHRoZSBwYWdlIGludG8gYWNjZWxl
cmF0ZWQgY29tcG9zaXRpbmcgbW9kZS4gSWYgdGhlIExheWVyVHJlZUhvc3QgaXMKKyAgICAvLyBp
biBjaGFyZ2Ugb2YgZGlzcGxheWluZywgd2UgaGF2ZSBub3RoaW5nIG1vcmUgdG8gZG8uCisgICAg
aWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRlSW5mby52
aWV3U2l6ZSA9IG1fd2ViUGFnZS0+c2l6ZSgpOworICAgIHVwZGF0ZUluZm8uZGV2aWNlU2NhbGVG
YWN0b3IgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAg
ICBJbnRSZWN0IGJvdW5kcyA9IG1fZGlydHlSZWdpb24uYm91bmRzKCk7CisgICAgQVNTRVJUKG1f
d2ViUGFnZS0+Ym91bmRzKCkuY29udGFpbnMoYm91bmRzKSk7CisKKyAgICBJbnRTaXplIGJpdG1h
cFNpemUgPSBib3VuZHMuc2l6ZSgpOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gbV93
ZWJQYWdlLT5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGJpdG1hcFNpemUu
c2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJp
dG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGJpdG1hcFNpemUsIFNoYXJl
YWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghYml0bWFwLT5jcmVhdGVIYW5kbGUodXBkYXRlSW5mby5iaXRtYXBI
YW5kbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8SW50UmVjdD4gcmVjdHMgPSBt
X2RpcnR5UmVnaW9uLnJlY3RzKCk7CisKKyAgICBpZiAoc2hvdWxkUGFpbnRCb3VuZHNSZWN0KGJv
dW5kcywgcmVjdHMpKSB7CisgICAgICAgIHJlY3RzLmNsZWFyKCk7CisgICAgICAgIHJlY3RzLmFw
cGVuZChib3VuZHMpOworICAgIH0KKworICAgIHVwZGF0ZUluZm8uc2Nyb2xsUmVjdCA9IG1fc2Ny
b2xsUmVjdDsKKyAgICB1cGRhdGVJbmZvLnNjcm9sbE9mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0Owor
CisgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOworICAgIG1fc2Nyb2xsUmVjdCA9IEludFJl
Y3QoKTsKKyAgICBtX3Njcm9sbE9mZnNldCA9IEludFNpemUoKTsKKworICAgIGF1dG8gZ3JhcGhp
Y3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBncmFwaGlj
c0NvbnRleHQtPmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOworCisg
ICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzID0gYm91bmRzOworCisgICAgZ3JhcGhpY3ND
b250ZXh0LT50cmFuc2xhdGUoLWJvdW5kcy54KCksIC1ib3VuZHMueSgpKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV93ZWJQYWdl
LT5kcmF3UmVjdCgqZ3JhcGhpY3NDb250ZXh0LCByZWN0c1tpXSk7CisKKyAgICAgICAgaWYgKG1f
d2ViUGFnZS0+aGFzUGFnZU92ZXJsYXkoKSkgeworICAgICAgICAgICAgUGFnZU92ZXJsYXlMaXN0
JiBwYWdlT3ZlcmxheXMgPSBtX3dlYlBhZ2UtPnBhZ2VPdmVybGF5cygpOworICAgICAgICAgICAg
UGFnZU92ZXJsYXlMaXN0OjppdGVyYXRvciBlbmQgPSBwYWdlT3ZlcmxheXMuZW5kKCk7CisgICAg
ICAgICAgICBmb3IgKFBhZ2VPdmVybGF5TGlzdDo6aXRlcmF0b3IgaXQgPSBwYWdlT3ZlcmxheXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+ZHJh
d1BhZ2VPdmVybGF5KGl0LT5nZXQoKSwgKmdyYXBoaWNzQ29udGV4dCwgcmVjdHNbaV0pOworICAg
ICAgICB9CisKKyAgICAgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0cy5hcHBlbmQocmVjdHNbaV0p
OworICAgIH0KKworICAgIC8vIExheW91dCBjYW4gdHJpZ2dlciBtb3JlIGNhbGxzIHRvIHNldE5l
ZWRzRGlzcGxheSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIHRoZW0KKyAgICAvLyB1bnRp
bCB0aGUgVUkgcHJvY2VzcyBoYXMgcGFpbnRlZCB0aGUgdXBkYXRlLCBzbyB3ZSBzdG9wIHRoZSB0
aW1lciBoZXJlLgorICAgIG1fZGlzcGxheVRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZERyYXdpbmdBcmVhOjpkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2Fn
ZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZERyYXdpbmdBcmVh
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZERyYXdpbmdBcmVhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyZDlkYzIyNzMwMzZkMzk1
MjU5YzQwYmIzNjE0OTA4Yzg4ZGVkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkRHJhd2lu
Z0FyZWEuaApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIENvb3JkaW5hdGVkRHJhd2luZ0FyZWFfaAorI2RlZmluZSBDb29yZGluYXRlZERyYXdpbmdB
cmVhX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkRyYXdp
bmdBcmVhLmgiCisjaW5jbHVkZSAiTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UmVnaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBDb29yZGluYXRlZERyYXdpbmdBcmVhIDogcHVibGljIERyYXdpbmdBcmVh
IHsKK3B1YmxpYzoKKyAgICBDb29yZGluYXRlZERyYXdpbmdBcmVhKFdlYlBhZ2UqLCBjb25zdCBX
ZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWREcmF3
aW5nQXJlYSgpOworCisgICAgdm9pZCBsYXllckhvc3REaWRGbHVzaExheWVycygpOworCitwcml2
YXRlOgorICAgIC8vIERyYXdpbmdBcmVhCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxh
eSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc2Nyb2xsUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2Nyb2xsRGVsdGEpOworICAgIHZpcnR1YWwgdm9pZCBwYWdlQmFja2dyb3VuZFRyYW5zcGFy
ZW5jeUNoYW5nZWQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJUcmVlU3Rh
dGVJc0Zyb3plbihib29sKTsKKyAgICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3pl
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbjsgfQorICAgIHZpcnR1
YWwgTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFpbnQoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZm9yY2VSZXBhaW50QXN5bmModWludDY0X3QgY2FsbGJhY2tJRCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkSW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kik7CisgICAg
dmlydHVhbCB2b2lkIGRpZFVuaW5zdGFsbFBhZ2VPdmVybGF5KFBhZ2VPdmVybGF5Kik7CisgICAg
dmlydHVhbCB2b2lkIHNldFBhZ2VPdmVybGF5TmVlZHNEaXNwbGF5KFBhZ2VPdmVybGF5KiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRQYWdlT3ZlcmxheU9w
YWNpdHkoUGFnZU92ZXJsYXkqLCBmbG9hdCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UGFpbnRp
bmdFbmFibGVkKGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVQcmVmZXJlbmNlcyhjb25z
dCBXZWJQcmVmZXJlbmNlc1N0b3JlJikgT1ZFUlJJREU7CisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeSog
Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIE9WRVJSSURFOwor
I2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVy
Jik7CisKKyAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQsIGJv
b2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kUGFp
bnRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lUGFpbnRpbmcoKTsKKworICAgIHZvaWQg
c2VuZERpZFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKCk7CisKKyAgICB2b2lkIGVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ01vZGUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOworICAgIHZvaWQg
ZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlU29vbigpOworICAgIGJvb2wgZXhpdEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdENvbXBv
c2l0aW5nVGltZXIuaXNBY3RpdmUoKTsgfQorICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKCkgeyB9CisKKyAgICB2b2lkIHNjaGVkdWxlRGlzcGxheSgpOworICAgIHZvaWQg
ZGlzcGxheVRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIGRpc3BsYXkoKTsKKyAgICB2b2lkIGRpc3Bs
YXkoVXBkYXRlSW5mbyYpOworCisgICAgdWludDY0X3QgbV9iYWNraW5nU3RvcmVTdGF0ZUlEOwor
CisgICAgV2ViQ29yZTo6UmVnaW9uIG1fZGlydHlSZWdpb247CisgICAgV2ViQ29yZTo6SW50UmVj
dCBtX3Njcm9sbFJlY3Q7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3Njcm9sbE9mZnNldDsKKwor
ICAgIC8vIFdoZXRoZXIgcGFpbnRpbmcgaXMgZW5hYmxlZC4gSWYgcGFpbnRpbmcgaXMgZGlzYWJs
ZWQsIGFueSBjYWxscyB0byBzZXROZWVkc0Rpc3BsYXkgYW5kIHNjcm9sbCBhcmUgaWdub3JlZC4K
KyAgICBib29sIG1faXNQYWludGluZ0VuYWJsZWQ7CisKKyAgICAvLyBXaGV0aGVyIHdlJ3JlIGN1
cnJlbnRseSBwcm9jZXNzaW5nIGFuIFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UuCisg
ICAgYm9vbCBtX2luVXBkYXRlQmFja2luZ1N0b3JlU3RhdGU7CisKKyAgICAvLyBXaGVuIHRydWUs
IHdlIHNob3VsZCBzZW5kIGFuIFVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlIG1lc3NhZ2UgaW5zdGVh
ZCBvZiBhbnkgb3RoZXIgbWVzc2FnZXMKKyAgICAvLyB3ZSBub3JtYWxseSBzZW5kIHRvIHRoZSBV
SSBwcm9jZXNzLgorICAgIGJvb2wgbV9zaG91bGRTZW5kRGlkVXBkYXRlQmFja2luZ1N0b3JlU3Rh
dGU7CisKKyAgICAvLyBXaGV0aGVyIHdlJ3JlIHdhaXRpbmcgZm9yIGEgRGlkVXBkYXRlIG1lc3Nh
Z2UuIFVzZWQgZm9yIHRocm90dGxpbmcgcGFpbnRzIHNvIHRoYXQgdGhlCisgICAgLy8gd2ViIHBy
b2Nlc3Mgd29uJ3QgcGFpbnQgbW9yZSBmcmVxdWVudCB0aGFuIHRoZSBVSSBwcm9jZXNzIGNhbiBo
YW5kbGUuCisgICAgYm9vbCBtX2lzV2FpdGluZ0ZvckRpZFVwZGF0ZTsKKworICAgIC8vIFRydWUg
YmV0d2VlbiBzZW5kaW5nIHRoZSAnZW50ZXIgY29tcG9zaXRpbmcnIG1lc3NhZ2VzLCBhbmQgdGhl
ICdleGl0IGNvbXBvc2l0aW5nJyBtZXNzYWdlLgorICAgIGJvb2wgbV9jb21wb3NpdGluZ0FjY29y
ZGluZ1RvUHJveHlNZXNzYWdlczsKKworICAgIC8vIFdoZW4gdHJ1ZSwgd2UgbWFpbnRhaW4gdGhl
IGxheWVyIHRyZWUgaW4gaXRzIGN1cnJlbnQgc3RhdGUgYnkgbm90IGxlYXZpbmcgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgbW9kZQorICAgIC8vIGFuZCBub3Qgc2NoZWR1bGluZyBsYXllciBmbHVz
aGVzLgorICAgIGJvb2wgbV9sYXllclRyZWVTdGF0ZUlzRnJvemVuOworCisgICAgLy8gVHJ1ZSB3
aGVuIHdlIHdlcmUgYXNrZWQgdG8gZXhpdCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBtb2RlIGJ1
dCBjb3VsZG4ndCBiZWNhdXNlIGxheWVyIHRyZWUKKyAgICAvLyBzdGF0ZSB3YXMgZnJvemVuLgor
ICAgIGJvb2wgbV93YW50c1RvRXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlOworCisgICAg
Ly8gV2hldGhlciBwYWludGluZyBpcyBzdXNwZW5kZWQuIFdlJ2xsIHN0aWxsIGtlZXAgdHJhY2sg
b2YgdGhlIGRpcnR5IHJlZ2lvbiBidXQgd2UKKyAgICAvLyB3b24ndCBwYWludCB1bnRpbCBwYWlu
dGluZyBoYXMgcmVzdW1lZCBhZ2Fpbi4KKyAgICBib29sIG1faXNQYWludGluZ1N1c3BlbmRlZDsK
KworICAgIFdlYkNvcmU6OlJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkRHJhd2luZ0FyZWE+IG1f
ZGlzcGxheVRpbWVyOworICAgIFdlYkNvcmU6OlJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkRHJh
d2luZ0FyZWE+IG1fZXhpdENvbXBvc2l0aW5nVGltZXI7CisKKyAgICAvLyBUaGUgbGF5ZXIgdHJl
ZSBob3N0IHRoYXQgaGFuZGxlcyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZy4KKyAgICBSZWZQdHI8
TGF5ZXJUcmVlSG9zdD4gbV9sYXllclRyZWVIb3N0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBD
b29yZGluYXRlZERyYXdpbmdBcmVhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDYwMWY2ZmUyNjM5Y2ZkNzEz
MWQ1MGQzMjAwY2NmODJhNTBhZDA0OGEuLmI1NWM3NDhiMWRhYzRjYmUxNjU5ZTZhZThkZGZjZDg5
MDhmMThjNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMzAsOSArMzAsOSBAQAogI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3QuaCIKIAor
I2luY2x1ZGUgIkNvb3JkaW5hdGVkRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNl
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC0zMTgsNyArMzE4LDcg
QEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnBlcmZvcm1TY2hlZHVsZWRMYXllckZs
dXNoKCkKICAgICB9CiAKICAgICBpZiAobV9ub3RpZnlBZnRlclNjaGVkdWxlZExheWVyRmx1c2gg
JiYgZGlkU3luYykgewotICAgICAgICBzdGF0aWNfY2FzdDxEcmF3aW5nQXJlYUltcGwqPihtX3dl
YlBhZ2UtPmRyYXdpbmdBcmVhKCkpLT5sYXllckhvc3REaWRGbHVzaExheWVycygpOworICAgICAg
ICBzdGF0aWNfY2FzdDxDb29yZGluYXRlZERyYXdpbmdBcmVhKj4obV93ZWJQYWdlLT5kcmF3aW5n
QXJlYSgpKS0+bGF5ZXJIb3N0RGlkRmx1c2hMYXllcnMoKTsKICAgICAgICAgbV9ub3RpZnlBZnRl
clNjaGVkdWxlZExheWVyRmx1c2ggPSBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAppbmRleCA5Nzg4ZTEwOTJi
YzJkOWIwYWNhYjRiN2FjOTVhYTgwMTk2NjMwMzQ0Li40NGJkZWI0YmU0OWYxOGZiMTkxODc1ODg0
ZDUzYmQ2OTQzMzI1OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5jcHAKQEAgLTMxLDggKzMxLDEyIEBACiAjaW5jbHVkZSAiUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJUaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYS5oIgogI2Vsc2UKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWREcmF3aW5nQXJlYS5oIgorI2Vsc2UKICNpbmNsdWRlICJEcmF3aW5nQXJl
YUltcGwuaCIKICNlbmRpZgorI2VuZGlmCiAKICNpbmNsdWRlICJXZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAKQEAgLTQ3LDkgKzUxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJl
YT4gRHJhd2luZ0FyZWE6OmNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlLCBjb25zdCBXZWJQYWdlCiAg
ICAgY2FzZSBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRyZWU6CiAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhPih3ZWJQYWdlLCBwYXJh
bWV0ZXJzKTsKICNlbHNlCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGNhc2Ug
RHJhd2luZ0FyZWFUeXBlQ29vcmRpbmF0ZWQ6CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPENvb3JkaW5hdGVkRHJhd2luZ0FyZWE+KHdlYlBhZ2UsIHBhcmFtZXRlcnMpOworI2Vsc2UK
ICAgICBjYXNlIERyYXdpbmdBcmVhVHlwZUltcGw6CiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPERyYXdpbmdBcmVhSW1wbD4od2ViUGFnZSwgcGFyYW1ldGVycyk7CiAjZW5kaWYKKyNl
bmRpZgogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAppbmRleCA5NzIxODFi
OTQ4MzQyNWI3N2FhMmNiNmUwMzBiODVjY2UzNjEwZDE4Li43M2UzMDkxYTFkNzQyZjZjYzY2Nzdm
ZjVjYmZhNjU2NTA2NTdkMzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcApAQCAtNjUsMTAgKzY1LDYgQEAgRHJhd2lu
Z0FyZWFJbXBsOjpEcmF3aW5nQXJlYUltcGwoV2ViUGFnZSogd2ViUGFnZSwgY29uc3QgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGUKICAgICBpZiAod2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkgfHwgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0
dGluZ3MoKS5mb3JjZUNvbXBvc2l0aW5nTW9kZSgpKQogICAgICAgICBtX2Fsd2F5c1VzZUNvbXBv
c2l0aW5nID0gdHJ1ZTsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBtX2Fs
d2F5c1VzZUNvbXBvc2l0aW5nID0gdHJ1ZTsKLSNlbmRpZgotCiAgICAgaWYgKG1fYWx3YXlzVXNl
Q29tcG9zaXRpbmcpCiAgICAgICAgIGVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoMCk7
CiB9CkBAIC0zNTQsMTEgKzM1MCw3IEBAIHZvaWQgRHJhd2luZ0FyZWFJbXBsOjp1cGRhdGVCYWNr
aW5nU3RvcmVTdGF0ZSh1aW50NjRfdCBzdGF0ZUlELCBib29sIHJlc3BvbmRJbW1lCiAgICAgICAg
IG1fd2ViUGFnZS0+c2Nyb2xsTWFpbkZyYW1lSWZOb3RBdE1heFNjcm9sbFBvc2l0aW9uKHNjcm9s
bE9mZnNldCk7CiAKICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgewotI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLSAgICAgICAgICAgIC8vIENvb3JkaW5hdGVkIEdyYXBoaWNzIHNl
dHMgdGhlIHNpemUgb2YgdGhlIHJvb3QgbGF5ZXIgdG8gY29udGVudHMgc2l6ZS4KLSAgICAgICAg
ICAgIGlmICghbV93ZWJQYWdlLT51c2VGaXhlZExheW91dCgpKQotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5zaXplRGlkQ2hhbmdlKG1fd2ViUGFnZS0+c2l6ZSgpKTsK
KyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2l6ZURpZENoYW5nZShtX3dlYlBhZ2UtPnNp
emUoKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9kaXJ0eVJlZ2lvbiA9IG1fd2Vi
UGFnZS0+Ym91bmRzKCk7CiAgICAgfSBlbHNlIHsKQEAgLTY5MCwxMiArNjgyLDQgQEAgdm9pZCBE
cmF3aW5nQXJlYUltcGw6OmRpc3BsYXkoVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKICAgICBtX2Rp
c3BsYXlUaW1lci5zdG9wKCk7CiB9CiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12
b2lkIERyYXdpbmdBcmVhSW1wbDo6ZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZURl
Y29kZXImIGRlY29kZXIpCi17Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5kaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKTsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YUltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUlt
cGwuaAppbmRleCA3NThmMTFiZGZkZmFiNzAzMDlmMzcxOTJhYzJmNzQ1MjQ2YTY2YWEwLi4zZTVh
ODkwYWEwYmRlZWI0YzgzYTYzOTkwMTgwNjgwMDVmMTBiMDQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5oCkBAIC03MywxMCAr
NzMsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5
ZXJGbHVzaCgpIE9WRVJSSURFOwogI2VuZGlmCiAKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RN
ZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwot
I2VuZGlmCi0KICAgICAvLyBDb3JlSVBDIG1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZVN0YXRlKHVpbnQ2NF90IGJhY2tpbmdTdG9yZVN0YXRlSUQs
IGJvb2wgcmVzcG9uZEltbWVkaWF0ZWx5LCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNjcm9sbE9mZnNldCk7
CiAgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZSgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>