<?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>110719</bug_id>
          
          <creation_ts>2013-02-24 20:26:19 -0800</creation_ts>
          <short_desc>Rollout r143556</short_desc>
          <delta_ts>2013-02-25 10:51:43 -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>CSS</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>
          
          <blocked>109909</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>rniwa</cc>
    
    <cc>tasak</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>840691</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-24 20:26:19 -0800</bug_when>
    <thetext>It regress perf. See Bug 109909.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840692</commentid>
    <comment_count>1</comment_count>
      <attachid>189995</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-24 20:30:49 -0800</bug_when>
    <thetext>Created attachment 189995
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840693</commentid>
    <comment_count>2</comment_count>
      <attachid>189995</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-24 20:33:12 -0800</bug_when>
    <thetext>Comment on attachment 189995
Patch for landing

Rejecting attachment 189995 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--non-interactive&apos;, 189995, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

/mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/16731891</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840694</commentid>
    <comment_count>3</comment_count>
      <attachid>189996</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-24 20:36:29 -0800</bug_when>
    <thetext>Created attachment 189996
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840695</commentid>
    <comment_count>4</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-24 21:01:04 -0800</bug_when>
    <thetext>Ryosuke pointed out the regression might be just a flake. 
I&apos;d pend this until this is locally reproduced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840701</commentid>
    <comment_count>5</comment_count>
      <attachid>189996</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-24 22:06:43 -0800</bug_when>
    <thetext>Comment on attachment 189996
Patch for landing

https://perf.webkit.org/#mode=charts&amp;chartList=%5B%5B%22EFL%22%2C%22Parser%2Fhtml5-full-render%3ATime%22%5D%2C%5B%22Chromium%20Mac%22%2C%22Parser%2Fhtml5-full-render%3ATime%22%5D%2C%5B%22Chromium%20Win%22%2C%22Parser%2Fhtml5-full-render%3ATime%22%5D%2C%5B%22Mac%20Lion%22%2C%22Parser%2Fhtml5-full-render%3ATime%22%5D%5D&amp;zoom=%5B1361317463017.8784%2C1361469076065.2822%5D

Cosidering the trend is clear and the author will be unavailable for a while, it&apos;d be better off roll it out then investigate one locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840707</commentid>
    <comment_count>6</comment_count>
      <attachid>189996</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-24 23:02:05 -0800</bug_when>
    <thetext>Comment on attachment 189996
Patch for landing

Clearing flags on attachment: 189996

Committed r143885: &lt;http://trac.webkit.org/changeset/143885&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840708</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-24 23:02:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841106</commentid>
    <comment_count>8</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-02-25 10:51:43 -0800</bug_when>
    <thetext>I noticed the same regression at the EFL perf bot.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189995</attachid>
            <date>2013-02-24 20:30:49 -0800</date>
            <delta_ts>2013-02-24 20:36:26 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-110719-20130225132705.patch</filename>
            <type>text/plain</type>
            <size>239091</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIxMWFhMWEyNjNhYWNi
ZDgyNDIyODJlZDYxZjRiYWMyZjZhZWFmZC4uYTQ3MzEyNGI5ZWZmMDQ2MGJkYjU3YmI1OTBjZjAx
ZDUwZjhjZWZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwOSBAQAorMjAxMy0wMi0yNCAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUm9sbG91dCByMTQz
NTU2LCBpdCByZWdyZXNzZWQgaHRtbDUtZnVsbC1yZW5kZXIgcGVyZi4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDcxOQorCisgICAgICAgICogY3Nz
L0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvTGVu
Z3RoKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hhcGVGb3JWYWx1ZSk6CisgICAgICAgICog
Y3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50
VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKToKKyAgICAgICAgKiBjc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5oOgorICAgICAgICAoQ1NTR3JhZGllbnRWYWx1ZSk6CisgICAgICAgICogY3Nz
L0NTU1RvU3R5bGVNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6c3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZSk6CisgICAgICAgICogY3Nz
L0NTU1RvU3R5bGVNYXAuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcCk6CisgICAgICAgIChDU1NUb1N0eWxlTWFwKToK
KyAgICAgICAgKiBjc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KToKKyAgICAgICAgKiBjc3MvU3R5bGVC
dWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRpbmc6OmFw
cGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRp
bmc6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlF
eHBhbmRpbmc6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURl
ZmF1bHRCYXNlOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5RGVmYXVsdEJhc2U6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVByb3BlcnR5RGVmYXVsdDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5TnVtYmVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlTdHlsZUltYWdlOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlBdXRvOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5QXV0bzo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUF1dG86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNsaXA6OmNvbnZlcnRUb0xlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5Q2xpcDo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eUNsaXA6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlDbGlwOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlD
b2xvcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUNvbG9yOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5Q29sb3I6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNv
bG9yOjphcHBseUNvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURp
cmVjdGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGVu
Z3RoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlTdHJpbmc6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1
czo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVy
OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rmls
bExheWVyOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5RmlsbExheWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlDb21wdXRlTGVuZ3RoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlGb250OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Rm9udDo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQ
cm9wZXJ0eUZvbnQ6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eUZvbnRTaXplOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVBy
b3BlcnR5Rm9udFNpemU6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlGb250U2l6ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Rm9udFdlaWdodDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlJbml0
aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGln
YXR1cmVzOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3Jk
ZXJJbWFnZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9y
ZGVySW1hZ2VNb2RpZmllcjo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTo6
YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6ZW1w
dHlGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBw
bHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6
OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBw
bHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6
YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNv
cjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEFsaWdu
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RGVjb3Jh
dGlvbjo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhl
aWdodDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNp
emU6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQ
YWdlU2l6ZTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eVBhZ2VTaXplOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlUZXh0RW1waGFzaXNTdHlsZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXBwbHlQcm9wZXJ0eVRleHRFbXBoYXNpc1N0eWxlOjphcHBseUluaXRpYWxWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6bWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5oZXJpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5pdGlh
bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBw
bHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVT
dHlsZTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eU91dGxpbmVTdHlsZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5UmVzaXplOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlW
ZXJ0aWNhbEFsaWduOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVy
dHlBc3BlY3RSYXRpbzo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUFzcGVjdFJhdGlvOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVByb3BlcnR5QXNwZWN0UmF0aW86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OnJlc2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVByb3BlcnR5Wm9vbTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVpvb206OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlab29tOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5Ojppc1ZhbGlkRGlzcGxheVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEaXNwbGF5OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGlzcGxheTo6YXBwbHlJbml0aWFsVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeGNsdXNpb25TaGFwZTo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaGVy
aXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9u
OjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1h
Z2VSZXNvbHV0aW9uOjphcHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmg6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFByb3BlcnR5SGFuZGxlcik6CisgICAgICAg
IChXZWJDb3JlOjpQcm9wZXJ0eUhhbmRsZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlByb3BlcnR5SGFuZGxlcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6UHJvcGVydHlIYW5kbGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5
bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVB
ZmZlY3RpbmdBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpmaW5kU2libGluZ0ZvclN0eWxlU2hhcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpsb2NhdGVTaGFyZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjprZXlm
cmFtZVN0eWxlc0ZvckFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
Ojpwc2V1ZG9TdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1
bHRTdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRq
dXN0UmVuZGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRl
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVz
Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6Z2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAq
IGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJlbnRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aGFzUGFyZW50Tm9kZSk6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmlzUmlnaHRQYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAoU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVNYXAp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnREZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpzZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnNldFRleHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnNldFdyaXRpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNldFRleHRPcmllbnRhdGlvbik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0Rm9udCk6CisKIDIwMTMtMDItMjQgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2Fy
bHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gY2xlYW51cCBNZWRpYVBsYXllclByaXZh
dGVBVkZvdW5kYXRpb24gYW5kIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcAppbmRleCBhYTZiNzRmMjliYWZhMjNkYTIw
MWNlZTYwZDg4OTBkMDNlMDVjZmQzLi4zYThmNzk1M2I2Zjk2YjAxMmY4NDMyMzdhMmUxMmEwZmRm
NGNiMTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9u
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQ1NTQmFzaWNTaGFwZXMuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5
LDEyICsxMDAsMTIgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNv
bnN0IEJhc2ljU2hhcGUqIGJhc2ljU2hhcGUpCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlPFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gPihiYXNpY1NoYXBlVmFsdWUucmVs
ZWFzZSgpKTsKIH0KIAotc3RhdGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoY29uc3QgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCitzdGF0aWMg
TGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0
VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IEZpeGVkRmxvYXRDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdGF0ZS5z
dHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSk7CisgICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IEZpeGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBW
aWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSk7CiB9CiAKLVBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZv
clZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgY29uc3QgQ1NTQmFzaWNT
aGFwZSogYmFzaWNTaGFwZVZhbHVlKQorUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBl
Rm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTQmFz
aWNTaGFwZSogYmFzaWNTaGFwZVZhbHVlKQogewogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBiYXNp
Y1NoYXBlOwogCkBAIC0xMTMsMTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJh
c2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIGNvbgog
ICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0VmFsdWUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBDU1NCYXNpY1NoYXBlUmVjdGFuZ2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAg
ICAgICAgIFJlZlB0cjxCYXNpY1NoYXBlUmVjdGFuZ2xlPiByZWN0ID0gQmFzaWNTaGFwZVJlY3Rh
bmdsZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5ndGgoc3Rh
dGUsIHJlY3RWYWx1ZS0+eCgpKSk7Ci0gICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3Ro
KHN0YXRlLCByZWN0VmFsdWUtPnkoKSkpOwotICAgICAgICByZWN0LT5zZXRXaWR0aChjb252ZXJ0
VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+d2lkdGgoKSkpOwotICAgICAgICByZWN0LT5zZXRI
ZWlnaHQoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPmhlaWdodCgpKSk7CisgICAg
ICAgIHJlY3QtPnNldFgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+
eCgpKSk7CisgICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIs
IHJlY3RWYWx1ZS0+eSgpKSk7CisgICAgICAgIHJlY3QtPnNldFdpZHRoKGNvbnZlcnRUb0xlbmd0
aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPndpZHRoKCkpKTsKKyAgICAgICAgcmVjdC0+c2V0
SGVpZ2h0KGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPmhlaWdodCgp
KSk7CiAgICAgICAgIGlmIChyZWN0VmFsdWUtPnJhZGl1c1goKSkgewotICAgICAgICAgICAgcmVj
dC0+c2V0Q29ybmVyUmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+cmFk
aXVzWCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xl
bmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOwogICAgICAgICAgICAg
aWYgKHJlY3RWYWx1ZS0+cmFkaXVzWSgpKQotICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5l
clJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOwor
ICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+cmFkaXVzWSgpKSk7CiAgICAgICAgIH0KICAgICAgICAg
YmFzaWNTaGFwZSA9IHJlY3QucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTEyOSw5ICsx
MzAsOSBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIGNvbgogICAgICAgICBjb25zdCBDU1NCYXNpY1No
YXBlQ2lyY2xlKiBjaXJjbGVWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVD
aXJjbGUgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVDaXJj
bGU+IGNpcmNsZSA9IEJhc2ljU2hhcGVDaXJjbGU6OmNyZWF0ZSgpOwogCi0gICAgICAgIGNpcmNs
ZS0+c2V0Q2VudGVyWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJY
KCkpKTsKLSAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwg
Y2lyY2xlVmFsdWUtPmNlbnRlclkoKSkpOwotICAgICAgICBjaXJjbGUtPnNldFJhZGl1cyhjb252
ZXJ0VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5yYWRpdXMoKSkpOworICAgICAgICBjaXJj
bGUtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVl
LT5jZW50ZXJYKCkpKTsKKyAgICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0
aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7CisgICAgICAgIGNpcmNs
ZS0+c2V0UmFkaXVzKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+
cmFkaXVzKCkpKTsKIAogICAgICAgICBiYXNpY1NoYXBlID0gY2lyY2xlLnJlbGVhc2UoKTsKICAg
ICAgICAgYnJlYWs7CkBAIC0xNDAsMTAgKzE0MSwxMCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+
IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIGNv
bgogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgQ1NTQmFzaWNTaGFwZUVsbGlwc2UgKj4oYmFzaWNTaGFwZVZhbHVlKTsK
ICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVFbGxpcHNlPiBlbGxpcHNlID0gQmFzaWNTaGFwZUVs
bGlwc2U6OmNyZWF0ZSgpOwogCi0gICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVydFRv
TGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgoKSkpOwotICAgICAgICBlbGxpcHNl
LT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJZ
KCkpKTsKLSAgICAgICAgZWxsaXBzZS0+c2V0UmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IGVsbGlwc2VWYWx1ZS0+cmFkaXVzWCgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1ko
Y29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOworICAgICAg
ICBlbGxpcHNlLT5zZXRDZW50ZXJYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxp
cHNlVmFsdWUtPmNlbnRlclgoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZl
cnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclkoKSkpOworICAg
ICAgICBlbGxpcHNlLT5zZXRSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBl
bGxpcHNlVmFsdWUtPnJhZGl1c1goKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNv
bnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOwog
CiAgICAgICAgIGJhc2ljU2hhcGUgPSBlbGxpcHNlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7
CkBAIC0xNTUsNyArMTU2LDcgQEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9y
VmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBjb24KICAgICAgICAgcG9s
eWdvbi0+c2V0V2luZFJ1bGUocG9seWdvblZhbHVlLT53aW5kUnVsZSgpKTsKICAgICAgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gPiYgdmFsdWVzID0gcG9seWdvblZh
bHVlLT52YWx1ZXMoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7IGkgKz0gMikKLSAgICAgICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZlcnRU
b0xlbmd0aChzdGF0ZSwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0YXRl
LCB2YWx1ZXMuYXQoaSArIDEpLmdldCgpKSk7CisgICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQ
b2ludChjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkpLmdldCgpKSwg
Y29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsK
IAogICAgICAgICBiYXNpY1NoYXBlID0gcG9seWdvbi5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKaW5kZXggZTU2MzIwNjg3
NjhhNjcwMWY4MDNmYjJhZmVmNTQ4OTg1MzFkMTFkMS4uZDM2MDdlOTA5OTI5YzM0MWIwYzA2OWQz
ZTVjZWI2MWYxM2YxMTcxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hh
cGVGdW5jdGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9u
cy5oCkBAIC0zMCw3ICszMCw2IEBACiAjaWZuZGVmIEJhc2ljU2hhcGVGdW5jdGlvbnNfaAogI2Rl
ZmluZSBCYXNpY1NoYXBlRnVuY3Rpb25zX2gKIAotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCw5ICszNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCYXNpY1NoYXBlOwogY2xh
c3MgQ1NTQmFzaWNTaGFwZTsKIGNsYXNzIENTU1ZhbHVlOworY2xhc3MgU3R5bGVSZXNvbHZlcjsK
IAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hh
cGUqKTsKLVBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiwgY29uc3QgQ1NTQmFzaWNTaGFwZSopOworUGFzc1JlZlB0cjxC
YXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciosIGNvbnN0
IENTU0Jhc2ljU2hhcGUqKTsKIAogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5jcHAKaW5kZXggZTU2NWVmZjVhZTQxODgzNmY1ZGVkMjE0Nzc5YTA0OGNlZWRiOThk
Yi4uOGYxNjhhYjcyY2UzMDc1NmRlMDM0MTc4NGRmODAwZmQzNzYwYmYyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IkludFNpemVIYXNoLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIldl
YkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1
bWVudGF0aW9uVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpA
QCAtMTE0LDExICsxMTUsMTEgQEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgeyB9CiB9Owog
Ci1QYXNzUmVmUHRyPENTU0dyYWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50
V2l0aFN0eWxlc1Jlc29sdmVkKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKK1Bhc3NSZWZQ
dHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVz
UmVzb2x2ZWQoU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKIHsKICAgICBib29sIGRlcml2
ZWQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7
IGkrKykKLSAgICAgICAgaWYgKFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
SXNEZXJpdmVkRnJvbUVsZW1lbnQobV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgeworICAgICAg
ICBpZiAoc3R5bGVSZXNvbHZlci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9t
RWxlbWVudChtX3N0b3BzW2ldLm1fY29sb3IuZ2V0KCkpKSB7CiAgICAgICAgICAgICBtX3N0b3Bz
W2ldLm1fY29sb3JJc0Rlcml2ZWRGcm9tRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICBkZXJp
dmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3LDcgKzEzOCw3IEBAIFBhc3NS
ZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5
bGVzUmVzb2x2ZWQoU3R5bGVSCiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlc3VsdC0+bV9zdG9wcy5zaXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0LT5tX3N0b3BzW2ld
Lm1fcmVzb2x2ZWRDb2xvciA9IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHN0YXRlLCByZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CisgICAgICAgIHJlc3Vs
dC0+bV9zdG9wc1tpXS5tX3Jlc29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVyLT5jb2xvckZyb21Q
cmltaXRpdmVWYWx1ZShyZXN1bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CiAKICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1
ZS5oCmluZGV4IDQ1OTgxZTJlNTZhZmUzMWMxZjg3NmY4MDE0YTBlMmE4Y2Q4OGQxYTQuLjhlMWM3
N2I2NDExMGQ5OTY3ZDM3MjFiMWNhZmMwNWYyOWY4MTE1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYWRpZW50VmFsdWUuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKQEAgLTkwLDcgKzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wga25vd25U
b0JlT3BhcXVlKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogCiAgICAgdm9pZCBsb2FkU3Vi
aW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyKikgeyB9Ci0gICAgUGFzc1JlZlB0cjxDU1NHcmFk
aWVudFZhbHVlPiBncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyOjpTdGF0
ZSYpOworICAgIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVz
UmVzb2x2ZWQoU3R5bGVSZXNvbHZlciopOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRW
YWx1ZShDbGFzc1R5cGUgY2xhc3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dy
YWRpZW50VHlwZSBncmFkaWVudFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVG9TdHlsZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAK
aW5kZXggZmRjMDRjYWZkMzA2ZGE5NjgwMGUwYWUzNmFlODc2NjI3N2MxZmJmOS4uNzIxZmQ4ZTkw
MWI1ZWJiZjFjZjZjZDc0OWZhOGY1M2YxY2ZiYTQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0
eWxlTWFwLmNwcApAQCAtNDMsMjIgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVu
ZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6OnN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9z
dGF0ZS5zdHlsZSgpOworICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZSgpOwogfQogICAgIAog
UmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKTsKKyAgICByZXR1cm4gbV9yZXNv
bHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpOwogfQogCiBib29sIENTU1RvU3R5bGVNYXA6OnVzZVNW
R1pvb21SdWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3RhdGUudXNlU1ZHWm9vbVJ1bGVz
KCk7CisgICAgcmV0dXJuIG1fcmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpOwogfQogICAgIAog
UGFzc1JlZlB0cjxTdHlsZUltYWdlPiBDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJZCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIHJldHVybiBTdHlsZVJl
c29sdmVyOjpzdHlsZUltYWdlKG1fc3RhdGUsIHByb3BlcnR5SWQsIHZhbHVlKTsKKyAgICByZXR1
cm4gbV9yZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVy
KiBsYXllciwgQ1NTVmFsdWUqIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1RvU3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5k
ZXggN2Y4NzIwYTQ4NmM5MmNhNGMzMGFmNjQzNGRlOGY5OGRiN2UyZGJkMy4uM2NiMTIxNTBhODQz
ZThhNDhlMzlhNWI1NDEzNTc1OTI5NGM0MTY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1RvU3R5bGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1h
cC5oCkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAj
aW5jbHVkZSAiTGVuZ3RoQm94LmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIiAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMyw2ICszMiw3IEBAIGNsYXNzIENTU1ZhbHVlOwogY2xh
c3MgQW5pbWF0aW9uOwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHlsZUltYWdlOworY2xh
c3MgU3R5bGVSZXNvbHZlcjsKIGNsYXNzIE5pbmVQaWVjZUltYWdlOwogCiBjbGFzcyBDU1NUb1N0
eWxlTWFwIHsKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgQ1NTVG9TdHlsZU1hcCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBDU1NUb1N0eWxlTWFwKFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgOiBtX3N0YXRlKHN0YXRlKSB7IH0KKyAgICBDU1NUb1N0
eWxlTWFwKFN0eWxlUmVzb2x2ZXIqIHJlc29sdmVyKSA6IG1fcmVzb2x2ZXIocmVzb2x2ZXIpIHsg
fQogCiAgICAgdm9pZCBtYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIq
LCBDU1NWYWx1ZSopOwogICAgIHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExh
eWVyKiwgQ1NTVmFsdWUqKTsKQEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBkdXJp
bmcgdGhlIHJlc29sdmUuCiAgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENT
U1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKLSAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgbV9z
dGF0ZTsKKyAgICBTdHlsZVJlc29sdmVyKiBtX3Jlc29sdmVyOwogfTsKIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwCmluZGV4IDkyNmM2OTFhOGJmNDY4NmRh
MThjOTVhNDhjNjEzYjIxZTY2Y2I2NmYuLmQxZTljNjBkM2I5ZGVkN2UyMGZjNzY1ZTljNzdhNDMx
NmUzYjZkMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVj
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAK
QEAgLTEwMiwxMyArMTAyLDE0IEBAIHN0YXRpYyBDb2xvciBjb2xvckZyb21TVkdDb2xvckNTU1Zh
bHVlKFNWR0NvbG9yKiBzdmdDb2xvciwgY29uc3QgQ29sb3ImIGZnQ29sb3IpCiAgICAgcmV0dXJu
IGNvbG9yOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoY29uc3Qg
U3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUq
IHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gMDsKICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAg
ICAgICAgcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKIAorICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgU1ZHUmVuZGVy
U3R5bGUqIHN2Z3N0eWxlID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKIAogICAg
IGJvb2wgaXNJbmhlcml0ID0gc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRl
ZFZhbHVlKCk7CkBAIC0yMzAsMTYgKzIzMSwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkoY29uc3QgU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYQog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICAgICAg
Y29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUo
KS0+c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2
Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRD
b2xvcigpLCBzdmdQYXJlbnRTdHlsZS0+ZmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5
bGUtPmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2
Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAg
ICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3Io
KSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKSk7CisgICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxs
UGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBz
dmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21T
VkdDb2xvckNTU1ZhbHVlKHN2Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFp
bnQtPnVyaSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHls
ZS0+c2V0RmlsbFBhaW50KHN2Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JD
U1NWYWx1ZShzdmdQYWludCwgc3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmko
KSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMjQ3LDE2ICsyNDgsMTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3Bl
cnR5KGNvbnN0IFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmEKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKGlzSW5oZXJpdCkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdmdQYXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0
eWxlKCk7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhcmVu
dFN0eWxlLT5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50Q29s
b3IoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRT
dHlsZS0+c3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9y
KCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFs
KSB7Ci0gICAgICAgICAgICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0
eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ry
b2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCks
IHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJv
a2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5k
ZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxTdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAg
ICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4o
dmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWlu
dC0+cGFpbnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRl
LnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFp
bnRUeXBlKCksIGNvbG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxl
KCktPmNvbG9yKCkpLCBzdmdQYWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpLCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU2OSw3ICs1NzAsNyBAQCB2b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoY29uc3QgU3RhdGUmIHN0YXRlLCBDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYQogICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRl
bS0+Ymx1ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSkgOiAwOwogICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBp
ZiAoaXRlbS0+Y29sb3IpCi0gICAgICAgICAgICAgICAgY29sb3IgPSBTdHlsZVJlc29sdmVyOjpj
b2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0
KCkpOwogCiAgICAgICAgICAgICAvLyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBzaG91bGQgbm90
IGhhdmUgYSBzcHJlYWQgb3Igc3R5bGUKICAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3ByZWFk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKaW5kZXggMWJiNjEwNGVmOWUyYTY4ZTM3
YWFlMmQxY2M4MGRkMjFiYjQyMjgxZi4uNGQ4NzhiMmU5YjMyNWUyNWVlMzZhZDhjYmYyYjIwMGYy
ZjM4MjEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAg
LTYwLDcgKzYxLDcgQEAgY2xhc3MgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZyB7CiBwdWJsaWM6CiAK
ICAgICB0ZW1wbGF0ZSA8Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikK
ICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC02OCwyMCArNjksMjAgQEAgcHVibGljOgogICAgICAgICBjb25zdCBTdHls
ZUJ1aWxkZXImIHRhYmxlID0gU3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKTsKICAg
ICAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJvcGVydHlIYW5k
bGVyKGlkKTsKICAgICAgICAgaWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgaGFu
ZGxlci5hcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgICAgICBo
YW5kbGVyLmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciog
c3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJv
cGVydHlJRCwgc3RhdGUpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5
SUQsIHN0YXRlKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQs
IHN0YXRlKTsKLSAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3Rh
dGUpOwotICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSk7
CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZl
cik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZpdmU+KHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlE
IGlkPgotICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMg
aW5saW5lIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKICAgICAgICAgaWYgKGlkID09IENT
U1Byb3BlcnR5SW52YWxpZCkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTg5LDIwICs5MCwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxk
ZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXIm
IGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxl
ci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKHByb3Bl
cnR5SUQsIHN0YXRlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJv
cGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAg
ICAgYXBwbHlJbml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIGFw
cGx5SW5pdGlhbFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUpOwotICAgICAgICBhcHBseUlu
aXRpYWxWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUpOwotICAgICAgICBhcHBseUluaXRp
YWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZh
bHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8
b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFs
dWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFs
VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUlu
aXRpYWxWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBw
bHlJbml0aWFsVmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CiAgICAgfQog
CiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0
eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTAsMTkgKzExMSwxOSBAQCBwdWJs
aWM6CiAgICAgICAgIGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNo
YXJlZFN0eWxlQnVpbGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRs
ZXIgPSB0YWJsZS5wcm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxlci5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUs
IHZhbHVlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NT
VmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIWV4cGFuZFZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIGFwcGx5VmFsdWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICBhcHBseVZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAg
YXBwbHlWYWx1ZTx0aHJlZT4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgYXBw
bHlWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBhcHBseVZh
bHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8
b25lPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFs
dWU8dHdvPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5
VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAg
YXBwbHlWYWx1ZTxmb3VyPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAg
ICAgIGFwcGx5VmFsdWU8Zml2ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwog
ICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVy
biBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUs
ICZhcHBseVZhbHVlKTsgfQogfTsKQEAgLTEzMyw5ICsxMzQsOSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7
IChzdHlsZS0+KnNldHRlckZ1bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgR2V0dGVyVHlw
ZSB2YWx1ZShSZW5kZXJTdHlsZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0
aW9uKSgpOyB9CiAgICAgc3RhdGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmlu
aXRpYWxGdW5jdGlvbikoKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCB2YWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7IH0KLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpIHsgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgaW5pdGlhbCgpKTsgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmLCBD
U1NWYWx1ZSopIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgdmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBp
bml0aWFsKCkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKSB7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVy
IGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZh
bHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIApAQCAtMTQzLDEw
ICsxNDQsMTAgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJl
bmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlE
ZWZhdWx0IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSog
c3R5bGUsIFNldHRlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVl
KTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksICpzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOwog
ICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsK
QEAgLTE1OSwxNiArMTYwLDE2IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOdW1iZXJUeXBlLCBOdW1i
ZXJUeXBlIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBs
eVByb3BlcnR5TnVtYmVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5k
ZXJTdHlsZSogc3R5bGUsIE51bWJlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rp
b24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNU
b01pbnVzT25lKQotICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgLTEpOworICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+
Z2V0VmFsdWU8TnVtYmVyVHlwZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVl
LT5nZXRWYWx1ZTxOdW1iZXJUeXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwog
ICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsK
QEAgLTE4MCw3ICsxODEsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRl
clN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyRnVuY3Rpb24pKFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRp
YWxGdW5jdGlvbikoKSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVy
dHlTdHlsZUltYWdlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7
IChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1h
Z2Uoc3RhdGUsIHByb3BlcnR5LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVS
ZXNvbHZlci0+c3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRs
ZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVy
RnVuY3Rpb24sIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUlt
YWdlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTk3LDI4ICsxOTgs
MjggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGhhc0F1dG8oUmVuZGVyU3R5bGUqIHN0eWxl
KSB7IHJldHVybiAoc3R5bGUtPipoYXNBdXRvRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9p
ZCBzZXRBdXRvKFJlbmRlclN0eWxlKiBzdHlsZSkgeyAoc3R5bGUtPipzZXRBdXRvRnVuY3Rpb24p
KCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAg
IHsKLSAgICAgICAgaWYgKGhhc0F1dG8oc3RhdGUucGFyZW50U3R5bGUoKSkpCi0gICAgICAgICAg
ICBzZXRBdXRvKHN0YXRlLnN0eWxlKCkpOworICAgICAgICBpZiAoaGFzQXV0byhzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpKSkKKyAgICAgICAgICAgIHNldEF1dG8oc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxl
KCksIHZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCksIHZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIHsgc2V0QXV0byhzdGF0ZS5zdHlsZSgp
KTsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHls
ZSgpKTsgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZl
VmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVl
KTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IGF1dG9JZGVudGl0
eSkKLSAgICAgICAgICAgIHNldEF1dG8oc3RhdGUuc3R5bGUoKSk7CisgICAgICAgICAgICBzZXRB
dXRvKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCkpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUg
PT0gTnVtYmVyKQotICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnByaW1pdGl2
ZVZhbHVlKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpw
cmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBDb21wdXRlTGVu
Z3RoKQotICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUt
PmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgp
LCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUo
KSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVy
dHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlW
YWx1ZSk7IH0KQEAgLTIyNiwyNyArMjI3LDI3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9w
ZXJ0eUNsaXAgewogcHJpdmF0ZToKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFs
dWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZl
cnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpOworICAgICAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBBdXRv
Q29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwog
ICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpOworICAgICAgICBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpOwogICAgICAgICBpZiAoIXBh
cmVudFN0eWxlLT5oYXNDbGlwKCkpCi0gICAgICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsVmFs
dWUocHJvcGVydHlJRCwgc3RhdGUpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHBh
cmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5
bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOwotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5p
dGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxl
LT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNs
aXBMZWZ0KCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRy
dWUpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQogICAgIHsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3Ro
KCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0Ns
aXAoZmFsc2UpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0
aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTI1NCwxNSArMjU1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFs
dWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZSk7CiAKICAgICAgICAgaWYgKFJlY3QqIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UmVjdFZh
bHVlKCkpIHsKLSAgICAgICAgICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IHJlY3QtPnRvcCgpKTsKLSAgICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0
aChzdGF0ZSwgcmVjdC0+cmlnaHQoKSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29u
dmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0LT5ib3R0b20oKSk7Ci0gICAgICAgICAgICBMZW5ndGgg
bGVmdCA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+bGVmdCgpKTsKLSAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBMZW5n
dGggdG9wID0gY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKKyAg
ICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBy
ZWN0LT5yaWdodCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5n
dGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+Ym90dG9tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxl
ZnQgPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKKyAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9t
LCBsZWZ0KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAo
dHJ1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0g
Q1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0
aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKLSAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Cisg
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMjgwLDQwICsyODEsNDAgQEAgdGVtcGxhdGUgPENvbG9ySW5o
ZXJpdCBpbmhlcml0Q29sb3JGcm9tUGFyZW50LAogICAgICAgICAgIENvbG9yICgqaW5pdGlhbEZ1
bmN0aW9uKSgpID0gJmRlZmF1bHRJbml0aWFsQ29sb3I+CiBjbGFzcyBBcHBseVByb3BlcnR5Q29s
b3IgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQogICAgIHsKICAgICAgICAgLy8gVmlzaXRlZCBsaW5rIHN0eWxlIGNhbiBuZXZlciBleHBsaWNp
dGx5IGluaGVyaXQgZnJvbSBwYXJlbnQgdmlzaXRlZCBsaW5rIHN0eWxlIHNvIG5vIHNlcGFyYXRl
IGdldHRlcnMgYXJlIG5lZWRlZC4KLSAgICAgICAgQ29sb3IgY29sb3IgPSAoc3RhdGUucGFyZW50
U3R5bGUoKS0+KmdldHRlckZ1bmN0aW9uKSgpOwotICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3Rh
dGUsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogKHN0YXRlLnBhcmVudFN0eWxlKCktPipkZWZh
dWx0RnVuY3Rpb24pKCkpOworICAgICAgICBDb2xvciBjb2xvciA9IChzdHlsZVJlc29sdmVyLT5w
YXJlbnRTdHlsZSgpLT4qZ2V0dGVyRnVuY3Rpb24pKCk7CisgICAgICAgIGFwcGx5Q29sb3JWYWx1
ZShzdHlsZVJlc29sdmVyLCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IChzdHlsZVJlc29sdmVy
LT5wYXJlbnRTdHlsZSgpLT4qZGVmYXVsdEZ1bmN0aW9uKSgpKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIGFwcGx5
Q29sb3JWYWx1ZShzdGF0ZSwgaW5pdGlhbEZ1bmN0aW9uKCkpOworICAgICAgICBhcHBseUNvbG9y
VmFsdWUoc3R5bGVSZXNvbHZlciwgaW5pdGlhbEZ1bmN0aW9uKCkpOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwogICAgICAgICBpZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVudCAmJiBwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKLSAgICAgICAgICAgIGFw
cGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGx5SW5o
ZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAgICAg
ICAgICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVy
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUpKTsKLSAgICAg
ICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAg
ICAgICAgICAgICAgKHN0YXRlLnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShT
dHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFs
dWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZVJl
c29sdmVyLT5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5j
b2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgaWYg
KHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAg
ICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVu
Y3Rpb24pKHN0eWxlUmVzb2x2ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZh
bHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
LCBjb25zdCBDb2xvciYgY29sb3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlDb2xvclZhbHVlKFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICB7Ci0g
ICAgICAgIGlmIChzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAgICAgICAg
ICAgIChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKLSAgICAgICAgaWYg
KHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgIChz
dGF0ZS5zdHlsZSgpLT4qdmlzaXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOworICAgICAg
ICBpZiAoc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAg
ICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7
CisgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkpCisgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5r
U2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5k
bGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJp
dFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMzIyLDExICsz
MjMsMTEgQEAgcHVibGljOgogdGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRlclN0eWxlOjoq
Z2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rp
b24pKFRleHREaXJlY3Rpb24pLCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgog
Y2xhc3MgQXBwbHlQcm9wZXJ0eURpcmVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGly
ZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRl
eHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUsIHZhbHVlKTsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsK
LSAgICAgICAgaWYgKGVsZW1lbnQgJiYgc3RhdGUuZWxlbWVudCgpID09IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQorICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxU
ZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rp
b24sIFRleHREaXJlY3Rpb24sIGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJ
RCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3R5
bGVSZXNvbHZlci0+ZWxlbWVudCgpOworICAgICAgICBpZiAoZWxlbWVudCAmJiBzdHlsZVJlc29s
dmVyLT5lbGVtZW50KCkgPT0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkp
CiAgICAgICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3Vt
ZW50RWxlbWVudCh0cnVlKTsKICAgICB9CiAKQEAgLTM1Myw3ICszNTQsNyBAQCB0ZW1wbGF0ZSA8
TGVuZ3RoIChSZW5kZXJTdHlsZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LAogY2xhc3MgQXBw
bHlQcm9wZXJ0eUxlbmd0aCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBMZW5ndGggdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24p
KHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjEsMzkgKzM2MiwzOSBAQCBwdWJs
aWM6CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAobm9uZUVuYWJsZWQg
JiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAg
ICAgICBpZiAobm9uZVVuZGVmaW5lZCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBMZW5ndGgoVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5
bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKKyAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7
CiAgICAgICAgIH0KICAgICAgICAgaWYgKGxlZ2FjeUludHJpbnNpY0VuYWJsZWQpIHsKICAgICAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludHJpbnNp
YykKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoSW50cmlu
c2ljKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
TGVuZ3RoKEludHJpbnNpYykpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVNaW5JbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOworICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29u
dGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWlu
Q29udGVudCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIExlbmd0aChNaW5Db250ZW50KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCi0gICAgICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKKyAgICAg
ICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWF4Q29u
dGVudCkpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkg
PT0gQ1NTVmFsdWVXZWJraXRGaWxsQXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIExlbmd0aChGaWxsQXZhaWxhYmxlKSk7CisgICAgICAgICAgICAgICAg
c2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1Zh
bHVlV2Via2l0Rml0Q29udGVudCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHls
ZSgpLCBMZW5ndGgoRml0Q29udGVudCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChGaXRDb250ZW50KSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpZiAoYXV0b0VuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVBdXRvKQotICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkp
OworICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkp
OwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAg
ICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2
ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOwogICAgICAgICAgICAgbGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZh
bHVlLT5pc1F1aXJrVmFsdWUoKSk7Ci0gICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgp
LCBsZW5ndGgpOworICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
bGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdl
KCkpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZl
VmFsdWUtPmdldERvdWJsZVZhbHVlKCksIFBlcmNlbnQpKTsKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKSwgUGVyY2VudCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXND
YWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0
YXRlLnN0eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2Fs
Y1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9D
YWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAg
ICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0
aCgpKQotICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUt
PnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5n
dGgoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKQEAgLTQwOCwxNiArNDA5LDE2IEBAIHRlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlk
ZW50QmVoYXZpb3IsIGNvbnN0IEF0b21pY1N0cmluZyYgKFJlbmRlclN0eWxlOjoqCiBjbGFzcyBB
cHBseVByb3BlcnR5U3RyaW5nIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgKHN0eWxlLT4q
c2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBpZiAoKGlkZW50QmVoYXZpb3IgPT0gTWFwTm9uZVRv
TnVsbCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAg
ICAgICAgICB8fCAoaWRlbnRCZWhhdmlvciA9PSBNYXBBdXRvVG9OdWxsICYmIHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0bykpCi0gICAgICAgICAgICBzZXRWYWx1ZShz
dGF0ZS5zdHlsZSgpLCBudWxsQXRvbSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLCBudWxsQXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZh
bHVlKHN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVl
LT5nZXRTdHJpbmdWYWx1ZSgpKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC00MzAsNyArNDMxLDcgQEAgdGVtcGxhdGUgPExlbmd0
aFNpemUgKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoKIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJSYWRpdXMgewogcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoU2l6ZSB2YWx1
ZSkgeyAoc3R5bGUtPipzZXR0ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTQ0NywxNyArNDQ4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgZWxzZSBpZiAocGFpci0+
Zmlyc3QoKS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgIHJhZGl1
c1dpZHRoID0gcGFpci0+Zmlyc3QoKS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAg
ICAgIGVsc2UgaWYgKHBhaXItPmZpcnN0KCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVu
Z3RoKCkpCi0gICAgICAgICAgICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+
Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVt
ZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICAg
ICAgcmFkaXVzV2lkdGggPSBMZW5ndGgoKHBhaXItPmZpcnN0KCktPmNzc0NhbGNWYWx1ZSgpLT50
b0NhbGNWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJzdCgpLT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHls
ZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgcmFkaXVz
V2lkdGggPSBwYWlyLT5maXJzdCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBpZiAocGFpci0+c2Vjb25k
KCktPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gTGVuZ3RoKHBh
aXItPnNlY29uZCgpLT5nZXREb3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgZWxzZSBp
ZiAocGFpci0+c2Vjb25kKCktPmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAg
ICAgICByYWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+dmlld3BvcnRQZXJjZW50YWdlTGVu
Z3RoKCk7CiAgICAgICAgIGVsc2UgaWYgKHBhaXItPnNlY29uZCgpLT5pc0NhbGN1bGF0ZWRQZXJj
ZW50YWdlV2l0aExlbmd0aCgpKQotICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gTGVuZ3RoKChw
YWlyLT5zZWNvbmQoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCks
IHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KSkpOworICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gTGVuZ3RoKChwYWlyLT5zZWNvbmQoKS0+
Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZm
ZWN0aXZlWm9vbSgpKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByYWRpdXNIZWlnaHQg
PSBwYWlyLT5zZWNvbmQoKS0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsK
KyAgICAgICAgICAgIHJhZGl1c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3Ro
PExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAg
ICAgICBpbnQgd2lkdGggPSByYWRpdXNXaWR0aC52YWx1ZSgpOwogICAgICAgICBpbnQgaGVpZ2h0
ID0gcmFkaXVzSGVpZ2h0LnZhbHVlKCk7CiAgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkKQEAgLTQ2OCw3ICs0NjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByYWRpdXNXaWR0
aCA9IHJhZGl1c0hlaWdodDsgLy8gTnVsbCBvdXQgdGhlIG90aGVyIHZhbHVlLgogCiAgICAgICAg
IExlbmd0aFNpemUgc2l6ZShyYWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KTsKLSAgICAgICAgc2V0
VmFsdWUoc3RhdGUuc3R5bGUoKSwgc2l6ZSk7CisgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCksIHNpemUpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTUwMiwxMSArNTAzLDExIEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBULAogICAgICAgICAgIHZvaWQgKENTU1RvU3R5bGVNYXA6OiptYXBGaWxsRnVuY3Rpb24p
KENTU1Byb3BlcnR5SUQsIEZpbGxMYXllciosIENTU1ZhbHVlKik+CiBjbGFzcyBBcHBseVByb3Bl
cnR5RmlsbExheWVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRl
LnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVyKiBj
dXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9u
KSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7Ci0gICAgICAgIGNvbnN0IEZp
bGxMYXllciogY3VyclBhcmVudCA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rp
b24pKCk7CisgICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIHdoaWxlIChj
dXJyUGFyZW50ICYmIChjdXJyUGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7CiAgICAgICAgICAg
ICBpZiAoIWN1cnJDaGlsZCkgewogICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5l
dyBsYXllci4qLwpAQCAtNTI2LDE5ICs1MjcsMTggQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewot
ICAgICAgICBGaWxsTGF5ZXIqIGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5
ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgKGN1cnJD
aGlsZC0+KnNldEZ1bmN0aW9uKSgoKmluaXRpYWxGdW5jdGlvbikoZmlsbExheWVyVHlwZSkpOwog
ICAgICAgICBmb3IgKGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBjdXJyQ2hpbGQ7IGN1
cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpKQogICAgICAgICAgICAgKGN1cnJDaGlsZC0+KmNs
ZWFyRnVuY3Rpb24pKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXll
ciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsK
KyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9
IDA7Ci0gICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOwogICAgICAgICBpZiAo
dmFsdWUtPmlzVmFsdWVMaXN0KCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAgICAg
JiYgIXZhbHVlLT5pc0ltYWdlU2V0VmFsdWUoKQpAQCAtNTUyLDEyICs1NTIsMTIgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgRmlsbExheWVyKGZpbGxMYXll
clR5cGUpOwogICAgICAgICAgICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxk
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxs
RnVuY3Rpb24pKHByb3BlcnR5SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpKTsKKyAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAo
KS0+Km1hcEZpbGxGdW5jdGlvbikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0
ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwogICAgICAgICAgICAgICAgIHByZXZDaGlsZCA9IGN1
cnJDaGlsZDsKICAgICAgICAgICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIChzdHlsZU1hcC4q
bWFwRmlsbEZ1bmN0aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKKyAgICAgICAg
ICAgIChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0aW9uKShwcm9wZXJ0
eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKICAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGls
ZC0+bmV4dCgpOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsKQEAgLTU4
Myw3ICs1ODMsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKIGNsYXNzIEFwcGx5UHJvcGVydHlD
b21wdXRlTGVuZ3RoIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJT
dHlsZSogc3R5bGUsIFQgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsg
fQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICAvLyBub3RlOiBDU1NQcm9wZXJ0eUxldHRlci9Xb3Jk
U3BhY2luZyByaWdodCBub3cgc2V0cyB0byB6ZXJvIGlmIGl0J3Mgbm90IGEgcHJpbWl0aXZlIHZh
bHVlIGZvciBzb21lIHJlYXNvbi4uLgogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCkBAIC02MDIsMTMgKzYwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZSBpZiAo
dGhpY2tuZXNzRW5hYmxlZCAmJiBpZGVudCA9PSBDU1NWYWx1ZVRoaWNrKSB7CiAgICAgICAgICAg
ICBsZW5ndGggPSA1OwogICAgICAgICB9IGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlSW52YWxp
ZCkgewotICAgICAgICAgICAgZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdGF0ZS51
c2VTVkdab29tUnVsZXMoKSkgPyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
OworICAgICAgICAgICAgZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdHlsZVJlc29s
dmVyLT51c2VTVkdab29tUnVsZXMoKSkgPyAxLjBmIDogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpOwogCiAgICAgICAgICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRo
YXQgd2FzID49IDEgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAg
ICAgICAgIC8vIFRoaXMga2VlcHMgYm9yZGVyIGxpbmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAg
ICAgICAgbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5
bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAgICAgICAgICAgIGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAgICAgICAgICAg
ICBpZiAoem9vbSA8IDEuMGYgJiYgbGVuZ3RoIDwgMS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBv
cmlnaW5hbExlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0
eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgMS4wKTsKKyAgICAgICAgICAgICAgICBU
IG9yaWdpbmFsTGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAp
OwogICAgICAgICAgICAgICAgIGlmIChvcmlnaW5hbExlbmd0aCA+PSAxLjApCiAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCA9IDEuMDsKICAgICAgICAgICAgIH0KQEAgLTYxOCw3ICs2MTgsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBsZW5ndGggPSAwOwogICAgICAgICB9CiAKLSAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgbGVuZ3RoKTsKKyAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFu
ZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC02MzAsMjggKzYzMCwyOCBAQCBwdWJsaWM6
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVCAoRm9udERlc2NyaXB0aW9uOjoqZ2V0dGVyRnVuY3Rp
b24pKCkgY29uc3QsIHZvaWQgKEZvbnREZXNjcmlwdGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwg
VCBpbml0aWFsVmFsdWU+CiBjbGFzcyBBcHBseVByb3BlcnR5Rm9udCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBG
b250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
Ci0gICAgICAgIChmb250RGVzY3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKSgoc3RhdGUucGFyZW50
Rm9udERlc2NyaXB0aW9uKCkuKmdldHRlckZ1bmN0aW9uKSgpKTsKLSAgICAgICAgc3RhdGUuc2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdHlsZVJlc29sdmVyLT5w
YXJlbnRGb250RGVzY3JpcHRpb24oKS4qZ2V0dGVyRnVuY3Rpb24pKCkpOworICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAg
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRp
b24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0
ZXJGdW5jdGlvbikoaW5pdGlhbFZhbHVlKTsKLSAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0
aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERl
c2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsK
ICAgICAgICAgKGZvbnREZXNjcmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1
ZSk7Ci0gICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7
IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFs
VmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtNjc2LDUwICs2NzYsNTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHNpemUgLyAxLjJmOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIGZsb2F0IHNpemUg
PSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7
CisgICAgICAgIGZsb2F0IHNpemUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CiAKICAgICAgICAgaWYgKHNpemUgPCAwKQog
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpLmtleXdvcmRTaXplKCkpOwotICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6
ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3RhdGUuc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsK
KyAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKHN0eWxlUmVzb2x2ZXItPnBh
cmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOworICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmbG9hdCBzaXpl
ID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3JkKHN0YXRlLmRvY3VtZW50KCksIENT
U1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgICAgICBmbG9hdCBzaXplID0gc3R5bGVSZXNv
bHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCksIENTU1Zh
bHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKIAogICAg
ICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxs
ICsgMSk7Ci0gICAgICAgIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVz
Y3JpcHRpb24sIHNpemUpOwotICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2Ny
aXB0aW9uLCBzaXplKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgICAgIEZvbnREZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24o
KTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0S2V5d29yZFNpemUoMCk7CiAgICAgICAgIGZsb2F0IHBhcmVudFNpemUgPSAwOwogICAgICAg
ICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gZmFsc2U7CiAgICAgICAgIGZsb2F0IHNpemUg
PSAwOwogCi0gICAgICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgICAgICBw
YXJlbnRTaXplID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lm
aWVkU2l6ZSgpOwotICAgICAgICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdGF0ZS5wYXJl
bnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOworICAgICAgICBp
ZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkgeworICAgICAgICAgICAgcGFyZW50U2l6
ZSA9IHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNp
ZmllZFNpemUoKTsKKyAgICAgICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSkgewpAQCAtNzMzLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVYTGFyZ2U6CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICBzaXpl
ID0gU3R5bGVSZXNvbHZlcjo6Zm9udFNpemVGb3JLZXl3b3JkKHN0YXRlLmRvY3VtZW50KCksIGlk
ZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICBzaXplID0gc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2
ZXItPmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpKTsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoaWRl
bnQgLSBDU1NWYWx1ZVh4U21hbGwgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZXI6CkBAIC03NTEsMTMgKzc1MSwxMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNB
YnNvbHV0ZVNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCAhKHByaW1pdGl2ZVZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+
aXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0xlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLCAxLjAsIHRydWUpOworICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1
ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5
bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOwogICAgICAgICAgICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAg
IHNpemUgPSAocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8g
MTAwLjBmOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRl
ZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2
ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CisgICAgICAg
ICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFs
dWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1l
bnRTdHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAg
ICAgICBzaXplID0gdmFsdWVGb3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2Vu
dGFnZUxlbmd0aCgpLCAwLCBzdGF0ZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOworICAgICAg
ICAgICAgICAgIHNpemUgPSB2YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQ
ZXJjZW50YWdlTGVuZ3RoKCksIDAsIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnJlbmRlclZp
ZXcoKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC03NjksOCArNzY5LDggQEAgcHVibGljOgogICAgICAgICAvLyBDYXAgZm9udCBzaXpl
IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uCiAgICAgICAgIHNpemUgPSBt
aW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSk7CiAKLSAgICAgICAgU3R5bGVSZXNvbHZl
cjo6c2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0
YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdHlsZVJl
c29sdmVyLT5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdHls
ZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtNzc5LDEyICs3NzksMTIgQEAgcHVibGljOgogCiBjbGFzcyBB
cHBseVByb3BlcnR5Rm9udFdlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwog
ICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgIGNh
c2UgQ1NTVmFsdWVJbnZhbGlkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC03OTgsNyArNzk4LDcgQEAgcHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9Ci0g
ICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAg
ICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBA
IC04MDksMzAgKzgwOSwzMCBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250VmFy
aWFudExpZ2F0dXJlcyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVu
dEZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOwotICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci0+cGFyZW50Rm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnRE
ZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRp
b24oKTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUo
cGFyZW50Rm9udERlc2NyaXB0aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpOwogICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnRE
ZXNjcmlwdGlvbi5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKSk7CiAgICAgICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0
aW9uLmhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSgpKTsKIAotICAgICAgICBzdGF0ZS5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBGb250RGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAg
IEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVz
Y3JpcHRpb24oKTsKIAogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVz
U3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZv
bnREZXNjcmlwdGlvbi5zZXREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRI
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNT
dGF0ZSk7CiAKLSAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb246
OkxpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpO
b3JtYWxMaWdhdHVyZXNTdGF0ZTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNT
dGF0ZSBkaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1h
bExpZ2F0dXJlc1N0YXRlOwpAQCAtODc4LDExICs4NzgsMTEgQEAgcHVibGljOgogICAgICAgICB9
CiAjZW5kaWYKIAotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3Rh
dGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbW1vbkxpZ2F0dXJlc1N0YXRlKGNvbW1vbkxpZ2F0dXJlc1N0YXRlKTsK
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShk
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
SGlzdG9yaWNhbExpZ2F0dXJlc1N0YXRlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAg
ICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBz
dHlsZVJlc29sdmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9
CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtODk4LDE0
ICs4OTgsMTMgQEAgdGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSBib3JkZXJJbWFnZVR5cGUsCiAg
ICAgICAgICAgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoY29uc3QgTmluZVBp
ZWNlSW1hZ2UmKT4KIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlOwogICAgICAgICBpZiAo
Ym9yZGVySW1hZ2VUeXBlID09IEJvcmRlck1hc2spCiAgICAgICAgICAgICBpbWFnZS5zZXRNYXNr
RGVmYXVsdHMoKTsKLSAgICAgICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7Ci0gICAg
ICAgIHN0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2YWx1ZSwgaW1hZ2UpOwot
ICAgICAgICAoc3RhdGUuc3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShpbWFnZSk7CisgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2
YWx1ZSwgaW1hZ2UpOworICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1
bmN0aW9uKShpbWFnZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVh
dGVIYW5kbGVyKCkKQEAgLTkyMiwyOSArOTIxLDI5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGlu
bGluZSBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7
IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPmJvcmRlckltYWdlKCkgOiBzdHls
ZS0+bWFza0JveEltYWdlKCk7IH0KICAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0VmFsdWUoUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgdmFsdWUpIHsgcmV0dXJuIHR5
cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS0+c2V0Qm9yZGVySW1hZ2UodmFsdWUpIDogc3R5bGUt
PnNldE1hc2tCb3hJbWFnZSh2YWx1ZSk7IH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGlt
YWdlKGdldFZhbHVlKHN0YXRlLnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1h
Z2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1v
ZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2UuY29weU91
dHNldEZyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1h
Z2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAg
aW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOworICAg
ICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFy
ZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0g
ICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVu
dFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNsaWNlc0Zyb20oZ2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJv
bShnZXRWYWx1ZShzdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5
Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdGF0ZS5z
dHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IGltYWdlKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRl
LnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAg
IGNhc2UgT3V0c2V0OgogICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExlbmd0aEJveCgwKSk7
CkBAIC05NjMsMjggKzk2MiwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbWFnZS5zZXRCb3Jk
ZXJTbGljZXModHlwZSA9PSBCb3JkZXJJbWFnZSA/IExlbmd0aEJveChMZW5ndGgoMSwgUmVsYXRp
dmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwg
UmVsYXRpdmUpKSA6IExlbmd0aEJveCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFs
dWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7
Ci0gICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOworICAgICAgICBOaW5lUGll
Y2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7CiAgICAgICAg
IHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBp
bWFnZS5zZXRPdXRzZXQoc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7Cisg
ICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFw
TmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVJlcGVh
dCh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+
bWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQodmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgc3R5bGVNYXAubWFwTmluZVBpZWNl
SW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBpbWFnZS5zZXRCb3Jk
ZXJTbGljZXMoc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAgICAg
ICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFw
TmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIo
JmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpA
QCAtOTkzLDcgKzk5MSw3IEBAIHB1YmxpYzoKIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkLCBT
dHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiksIFN0
eWxlSW1hZ2UqICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRl
ckltYWdlU291cmNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7
IChzdGF0ZS5zdHlsZSgpLT4qc2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1h
Z2Uoc3RhdGUsIGlkLCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
IHsgKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZl
ci0+c3R5bGVJbWFnZShpZCwgdmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIg
Y3JlYXRlSGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9
IEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVyRnVuY3Rpb24sIFBh
c3NSZWZQdHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUltYWdlKiwgaW5pdGlh
bEZ1bmN0aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTAwNSwxMSArMTAwMywxMSBAQCBlbnVt
IENvdW50ZXJCZWhhdmlvciB7SW5jcmVtZW50ID0gMCwgUmVzZXR9OwogdGVtcGxhdGUgPENvdW50
ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+CiBjbGFzcyBBcHBseVByb3BlcnR5Q291bnRlciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgZW1wdHlGdW5jdGlvbihDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYpIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0
aWMgdm9pZCBlbXB0eUZ1bmN0aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0K
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1h
cCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICAg
ICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgcGFyZW50TWFwID0gc3RhdGUucGFyZW50U3R5bGUoKS0+
YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYg
bWFwID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsK
KyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgcGFyZW50TWFwID0gc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKIAogICAgICAgICB0eXBl
ZGVmIENvdW50ZXJEaXJlY3RpdmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgICAgICBJdGVy
YXRvciBlbmQgPSBwYXJlbnRNYXAuZW5kKCk7CkBAIC0xMDIyLDE0ICsxMDIwLDE0IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCF2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1
ZSk7CiAKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+
YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYg
bWFwID0gc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsK
ICAgICAgICAgdHlwZWRlZiBDb3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsK
IAogICAgICAgICBJdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CkBAIC0xMDY1LDQyICsxMDYzLDQy
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOwot
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0YXRlLnBhcmVudFN0eWxlKCkt
PmN1cnNvcnMoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihz
dHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7CisgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+Y3Vyc29ycygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlz
dCgpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRp
YWxDdXJzb3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29y
TGlzdCgpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVy
U3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IHN0YXRlLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVl
TGlzdCgpKSB7CiAgICAgICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAgICAgICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3Ro
KCk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09SX0FVVE8pOwor
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRP
KTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAg
ICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7
CiAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIENTU0N1cnNvckltYWdlVmFsdWUqIGltYWdlID0gc3RhdGljX2Nhc3Q8
Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1h
Z2UtPnVwZGF0ZUlmU1ZHQ3Vyc29ySXNVc2VkKHN0YXRlLmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRz
IHdpdGggU1ZHIGN1cnNvcnMgYXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgotICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmFkZEN1cnNvcihTdHlsZVJlc29sdmVyOjpzdHlsZUlt
YWdlKHN0YXRlLCBDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChz
dHlsZVJlc29sdmVyLT5lbGVtZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFy
ZSBub3QgYWxsb3dlZCB0byBzaGFyZSBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFn
ZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJp
bWl0aXZlVmFsdWUtPmlzSWRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwot
ICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3RhdGUuc3R5bGUo
KS0+Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
Y3Vyc29yKCkgIT0gRUN1cnNvcigqcHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0xMTA5LDcgKzExMDcsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5
UHJvcGVydHlUZXh0QWxpZ24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTE3
LDEzICsxMTE1LDEzIEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlV2Via2l0TWF0
Y2hQYXJlbnQpCi0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oKnByaW1p
dGl2ZVZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFs
aWduKCkgPT0gVEFTVEFSVCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGln
bihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDog
UklHSFQpOwotICAgICAgICBlbHNlIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24o
KSA9PSBUQUVORCkKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0
ZS5wYXJlbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBSSUdIVCA6IExFRlQp
OworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmlt
aXRpdmVWYWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxl
KCktPnRleHRBbGlnbigpID09IFRBU1RBUlQpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gTEVGVCA6IFJJR0hUKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCisgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0
YXRlLnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50
ZXh0QWxpZ24oKSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFu
ZGxlcigpCiAgICAgewpAQCAtMTEzNCw3ICsxMTMyLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBs
eVByb3BlcnR5VGV4dERlY29yYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1
ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAg
ICBFVGV4dERlY29yYXRpb24gdCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24o
KTsKICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3Jl
KCk7IGkuYWR2YW5jZSgpKSB7CkBAIC0xMTQyLDcgKzExNDAsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpdGVtLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpOwogICAgICAgICAgICAgdCB8PSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpdGVtKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RGVjb3Jh
dGlvbih0KTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRp
b24odCk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigp
CiAgICAgewpAQCAtMTE1Myw3ICsxMTUxLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3Bl
cnR5TGluZUhlaWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNjQsMTUg
KzExNjIsMTUgQEAgcHVibGljOgogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50
KCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT50
ZXh0U2l6ZUFkanVzdCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0
YXRlLmRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGlm
IChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPmZyYW1l
KCkpCiAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFj
dG9yKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIG11bHRpcGxpZXIpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1p
dGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
c3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKICAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRl
Z2VyIGhlcmUuCi0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdGF0ZS5zdHlsZSgp
LT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhl
ZCk7CisgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5mb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBG
aXhlZCk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBudW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIHNob3Vs
ZCBwcm9kdWNlIHRoZSBzYW1lIHR5cGUgb2YgTGVuZ3RoIChpZS4gRml4ZWQgb3IgUGVyY2VudCku
CiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3Vi
bGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQpOwpAQCAtMTE4MCw3ICsxMTc4LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNl
bnRhZ2VMZW5ndGgoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgICAgICBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwogICAgIH0KICAg
ICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTEyNjcs
MTEgKzEyNjUsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmKSB7IH0KLSAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0
ZSwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5yZXNl
dFBhZ2VTaXplVHlwZSgpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5yZXNldFBh
Z2VTaXplVHlwZSgpOwogICAgICAgICBMZW5ndGggd2lkdGg7CiAgICAgICAgIExlbmd0aCBoZWln
aHQ7CiAgICAgICAgIFBhZ2VTaXplVHlwZSBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsK
QEAgLTEyODcsOCArMTI4NSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3Ro
PnsyfQogICAgICAgICAgICAgICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0
ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7
Ci0gICAgICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICB3aWR0aCA9IGZpcnN0LT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICBoZWlnaHQgPSBzZWNvbmQtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQ
YXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlci4KQEAgLTEzMDYsNyArMTMwNCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewogICAgICAgICAg
ICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9T
SVpFX1JFU09MVkVEOwotICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCkpOworICAgICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZl
VmFsdWUtPmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSAwOgpAQCAtMTMzMiwyOSArMTMzMCwyOSBAQCBwdWJsaWM6CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldFBhZ2VTaXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOworICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRQYWdlU2l6ZVR5cGUocGFnZVNpemVUeXBlKTsK
KyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpIHsgcmV0dXJuIFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZh
cHBseUluaXRpYWxWYWx1ZSwgJmFwcGx5VmFsdWUpOyB9CiB9OwogCiBjbGFzcyBBcHBseVByb3Bl
cnR5VGV4dEVtcGhhc2lzU3R5bGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzRmlsbChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkpOwot
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0YXRlLnBhcmVudFN0
eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzQ3Vz
dG9tTWFyaygpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzRmlsbChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkp
OworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0
eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3R5bGVS
ZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0g
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKLSAg
ICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0
RW1waGFzaXNGaWxsKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0
RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhS
ZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAg
ICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFs
dWUpOwpAQCAtMTM2OCwxMSArMTM2NiwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogdmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KGl0ZW0pOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZUZpbGxlZCB8fCB2YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU9wZW4pCi0gICAgICAgICAg
ICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
RmlsbCgqdmFsdWUpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1
ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEzODEsMjAgKzEzNzksMjAgQEAgcHVibGljOgogICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlz
U3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0Zp
bGwoVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcmtDdXN0b20pOwotICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS0+
Z2V0U3RyaW5nVmFsdWUoKSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNN
YXJrQ3VzdG9tKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOwogCiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU9wZW4pIHsKLSAgICAgICAgICAgIHN0
YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFy
a0F1dG8pOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzRmlsbCgqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQXV0byk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOwotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzTWFyaygqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVk
KTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01h
cmsoKnByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQxNywxOCArMTQx
NSwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdGVzdChjb25zdCBBbmltYXRpb24qIGFu
aW1hdGlvbikgeyByZXR1cm4gKGFuaW1hdGlvbi0+KnRlc3RGdW5jdGlvbikoKTsgfQogICAgIHN0
YXRpYyB2b2lkIGNsZWFyKEFuaW1hdGlvbiogYW5pbWF0aW9uKSB7IChhbmltYXRpb24tPipjbGVh
ckZ1bmN0aW9uKSgpOyB9CiAgICAgc3RhdGljIFQgaW5pdGlhbCgpIHsgcmV0dXJuICgqaW5pdGlh
bEZ1bmN0aW9uKSgpOyB9Ci0gICAgc3RhdGljIHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSwgQW5pbWF0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgCi0gICAgewot
ICAgICAgICBDU1NUb1N0eWxlTWFwIHN0eWxlTWFwKHN0YXRlKTsKLSAgICAgICAgKHN0eWxlTWFw
LiptYXBGdW5jdGlvbikoYW5pbWF0aW9uLCB2YWx1ZSk7Ci0gICAgfQorICAgIHN0YXRpYyB2b2lk
IG1hcChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwg
Q1NTVmFsdWUqIHZhbHVlKSB7IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rp
b24pKGFuaW1hdGlvbiwgdmFsdWUpOyB9CiAgICAgc3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vz
c0FuaW1hdGlvbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRp
b25HZXR0ZXJGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBh
bmltYXRpb25zKFJlbmRlclN0eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxl
QW5pbWF0aW9uR2V0dGVyRnVuY3Rpb24pKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9
IGFjY2Vzc0FuaW1hdGlvbnMoc3RhdGUuc3R5bGUoKSk7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlv
bkxpc3QqIHBhcmVudExpc3QgPSBhbmltYXRpb25zKHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAg
ICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVy
LT5zdHlsZSgpKTsKKyAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9IGFu
aW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSk7CiAgICAgICAgIHNpemVfdCBp
ID0gMCwgcGFyZW50U2l6ZSA9IHBhcmVudExpc3QgPyBwYXJlbnRMaXN0LT5zaXplKCkgOiAwOwog
ICAgICAgICBmb3IgKCA7IGkgPCBwYXJlbnRTaXplICYmIHRlc3QocGFyZW50TGlzdC0+YW5pbWF0
aW9uKGkpKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkpCkBAIC0x
NDQyLDkgKzE0MzYsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRp
b24oaSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3Qq
IGxpc3QgPSBhY2Nlc3NBbmltYXRpb25zKHN0YXRlLnN0eWxlKCkpOworICAgICAgICBBbmltYXRp
b25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsK
ICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChB
bmltYXRpb246OmNyZWF0ZSgpKTsKICAgICAgICAgc2V0VmFsdWUobGlzdC0+YW5pbWF0aW9uKDAp
LCBpbml0aWFsKCkpOwpAQCAtMTQ1NCwyMiArMTQ0OCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NW
YWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAg
ICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgp
KTsKKyAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSk7CiAgICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0gMDsKICAgICAg
ICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAgICAgICAvKiBXYWxrIGVhY2gg
dmFsdWUgYW5kIHB1dCBpdCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlv
bnMgYXMgbmVlZGVkLiAqLwogICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBp
ID0gdmFsdWU7IGkuaGFzTW9yZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgICAgIGlm
IChjaGlsZEluZGV4IDw9IGxpc3QtPnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+
YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwg
bGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAg
IG1hcChzdHlsZVJlc29sdmVyLCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUo
KSk7CiAgICAgICAgICAgICAgICAgKytjaGlsZEluZGV4OwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKICAgICAgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBtYXAo
c3RhdGUsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAg
bWFwKHN0eWxlUmVzb2x2ZXIsIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOwog
ICAgICAgICAgICAgY2hpbGRJbmRleCA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZm9yICggOyBj
aGlsZEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKQEAgLTE0ODMsMjIgKzE0
NzcsMjIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8
T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJ
c0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRv
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaGVyaXRW
YWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFz
ZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUs
ICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJT
dHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0
eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFs
Qm9yZGVyU3R5bGU+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91
dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5l
SXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUlu
aXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVy
U3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJ
RCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0
bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0
eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVC
b3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJl
bmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpp
bml0aWFsQm9yZGVyU3R5bGU+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJl
c29sdmVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0g
ICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0PE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
b3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGlu
ZVN0eWxlSXNBdXRvPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwotICAg
ICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0
bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBF
Qm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVs
dDxPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGlu
ZUlzQXV0bywgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1
dG8sICZSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUo
cHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVy
U3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHls
ZVJlc29sdmVyLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBj
cmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1
ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTE1MDYsNyArMTUwMCw3
IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eVJlc2l6ZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTE1MTgsMTMgKzE1MTIsMTMgQEAgcHVibGljOgogICAgICAgICBj
YXNlIDA6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgot
ICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3VtZW50KCktPnNl
dHRpbmdzKCkpCisgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNv
bHZlci0+ZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkKICAgICAgICAgICAgICAgICByID0gc2V0dGlu
Z3MtPnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgciA9ICpw
cmltaXRpdmVWYWx1ZTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRSZXNp
emUocik7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShyKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTUz
Niw3ICsxNTMwLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5VmVydGljYWxBbGln
biB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0
aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NDQsOSArMTUzOCw5IEBAIHB1
YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNl
dFZlcnRpY2FsQWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CiAK
LSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVW
YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29u
dmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVy
c2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZp
eGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252
ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5
bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTU1OCwzMiArMTU1MiwzMiBAQCBwdWJsaWM6CiAK
IGNsYXNzIEFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBpZiAoIXN0YXRl
LnBhcmVudFN0eWxlKCktPmhhc0FzcGVjdFJhdGlvKCkpCisgICAgICAgIGlmICghc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKS0+aGFzQXNwZWN0UmF0aW8oKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAg
ICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Ioc3RhdGUucGFyZW50
U3R5bGUoKS0+YXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0
aW9OdW1lcmF0b3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0Fz
cGVjdFJhdGlvKHRydWUpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJh
dGlvRGVub21pbmF0b3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFz
cGVjdFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJh
dGlvTnVtZXJhdG9yKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZh
bHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0
UmF0aW8oUmVuZGVyU3R5bGU6OmluaXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKLSAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlh
bEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFz
cGVjdFJhdGlvTnVtZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0
b3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlv
KFJlbmRlclN0eWxlOjppbml0aWFsSGFzQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVj
dFJhdGlvTnVtZXJhdG9yKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAo
IXZhbHVlLT5pc0FzcGVjdFJhdGlvVmFsdWUoKSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlKj4odmFsdWUpOwotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRIYXNBc3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRv
clZhbHVlKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRv
cihhc3BlY3RSYXRpb1ZhbHVlLT5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7CisgICAgICAgIHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1
ZS0+ZGVub21pbmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+bnVtZXJhdG9yVmFsdWUo
KSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkK
QEAgLTE1OTQsNDggKzE1ODgsNDggQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Wm9v
bSB7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29t
KFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICAvLyBSZXNldCB0
aGUgem9vbSBpbiBlZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBzZXRab29tIG1ldGhvZCB0byBhY2N1
cmF0ZWx5IGNvbXB1dGUgYSBuZXcgem9vbSBpbiBlZmZlY3QuCi0gICAgICAgIHN0YXRlLnNldEVm
ZmVjdGl2ZVpvb20oc3RhdGUucGFyZW50U3R5bGUoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgc3R5
bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
ID8gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVy
U3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0KIAogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgcmVzZXRFZmZlY3Rp
dmVab29tKHN0YXRlKTsKLSAgICAgICAgc3RhdGUuc2V0Wm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgp
LT56b29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+em9vbSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKICAgICB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7Ci0gICAg
ICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICBy
ZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgIHN0eWxlUmVzb2x2ZXIt
PnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKTsKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAg
ICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3RhdGUpOwotICAgICAgICAgICAgc3RhdGUuc2V0
Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICByZXNldEVmZmVj
dGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRa
b29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmlt
aXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0gICAgICAgICAgICBz
dGF0ZS5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAg
ICAgICAgIHN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKSk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxl
Ojppbml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZURvY3VtZW50KSB7Ci0gICAgICAgICAgICBmbG9hdCBkb2Nab29t
ID0gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpID8gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT56
b29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsKLSAgICAgICAgICAgIHN0YXRlLnNl
dEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRab29tKGRvY1pv
b20pOworICAgICAgICAgICAgZmxvYXQgZG9jWm9vbSA9IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVt
ZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDog
UmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0
Wm9vbShkb2Nab29tKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJj
ZW50YWdlKCkpIHsKLSAgICAgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CisgICAg
ICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CiAgICAgICAgICAgICBp
ZiAoZmxvYXQgcGVyY2VudCA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKKyAgICAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOwogICAgICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICByZXNl
dEVmZmVjdGl2ZVpvb20oc3RhdGUpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0
eWxlUmVzb2x2ZXIpOwogICAgICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9IHByaW1pdGl2ZVZh
bHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShudW1i
ZXIpOworICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVyKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTY0Nyw0MiArMTY0MSw0MiBAQCBwdWJsaWM6CiAKIGNsYXNz
IEFwcGx5UHJvcGVydHlEaXNwbGF5IHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIGlubGluZSBib29s
IGlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBFRGlzcGxh
eSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERp
c3BsYXlWYWx1ZShTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBFRGlzcGxheSBkaXNwbGF5
UHJvcGVydHlWYWx1ZSkKICAgICB7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgaWYgKHN0YXRl
LmVsZW1lbnQoKSAmJiBzdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRlLnN0
eWxlKCktPnN0eWxlVHlwZSgpID09IE5PUFNFVURPKQorICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci0+ZWxlbWVudCgpICYmIHN0eWxlUmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkg
JiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAg
ICAgICAgICByZXR1cm4gKGRpc3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8fCBkaXNwbGF5
UHJvcGVydHlWYWx1ZSA9PSBCTE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBOT05FKTsK
ICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShzdHlsZVJlc29sdmVyKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQcm9wZXJ0eVZh
bHVlKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
cjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBF
RGlzcGxheSBkaXNwbGF5ID0gc3RhdGUucGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOwotICAgICAg
ICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQorICAgICAgICBFRGlz
cGxheSBkaXNwbGF5ID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOwor
ICAgICAgICBpZiAoIWlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwgZGlzcGxheSkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXko
ZGlzcGxheSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoZGlz
cGxheSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCiAgICAgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRlclN0eWxl
Ojppbml0aWFsRGlzcGxheSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
RGlzcGxheShSZW5kZXJTdHlsZTo6aW5pdGlhbERpc3BsYXkoKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gKnN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlW
YWx1ZShzdGF0ZSwgZGlzcGxheSkpCisgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShz
dHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9w
ZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCkBAIC0xNjk1LDIxICsxNjg5LDIxIEBAIHRlbXBs
YXRlIDxDbGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlCiBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcFBhdGggewogcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0
cjxDbGlwUGF0aE9wZXJhdGlvbj4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZh
bHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUtPmlzU2hhcGUoKSkgewotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0
eWxlKCksIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUo
c3RhdGUsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CisgICAgICAgICAgICAg
ICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlv
bjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1
ZS0+Z2V0U2hhcGVWYWx1ZSgpKSkpOwogICAgICAgICAgICAgfQogI2lmIEVOQUJMRShTVkcpCiAg
ICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VS
TFZhbHVlID0gcHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgS1VSTCB1cmwgPSBzdGF0ZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7
CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IGRv
ZXNuJ3Qgd29yayB3aXRoIGZvcndhcmQgb3IgZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUpCi0gICAgICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb246
OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7CisgICAgICAg
ICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBh
dGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigp
KSk7CiAgICAgICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgfQpAQCAtMTcyNiwxOCArMTcyMCwx
OCBAQCB0ZW1wbGF0ZSA8RXhjbHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVy
RnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbgogY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lv
blNoYXBlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSog
c3R5bGUsIFBhc3NSZWZQdHI8RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4q
c2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVB
dXRvKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOworICAgICAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOwogICAgICAgICAg
ICAgLy8gRklYTUUgQnVnIDEwMjU3MTogTGF5b3V0IGZvciB0aGUgdmFsdWUgJ291dHNpZGUtc2hh
cGUnIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlT3V0c2lkZVNoYXBlKQotICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91
dHNpZGVWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLCBFeGNsdXNpb25TaGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CiAgICAg
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEV4Y2x1c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVW
YWx1ZTo6Y3JlYXRlU2hhcGVWYWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHByaW1pdGl2
ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0
ZS5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNs
dXNpb25TaGFwZVZhbHVlPiBzaGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBl
VmFsdWUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlLT5n
ZXRTaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLCBzaGFwZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMTc1MiwyMSArMTc0NiwyMSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19JTUFH
RV9SRVNPTFVUSU9OKQogY2xhc3MgQXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPElt
YWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2Us
IEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25T
b3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwot
ICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJl
bmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZS
ZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1
ZShwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxm
bG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6
OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVz
b2x1dGlvbj46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAg
QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0
eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRl
clN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwg
JlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbmhlcml0
VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlE
ZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1
dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNv
bHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1h
Z2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVz
b2x2ZXIpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJT
dHlsZTo6aW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29s
dXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBs
eUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0
aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNv
bHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1h
Z2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25T
b3VyY2U+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIEFw
cGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6
OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6
c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxl
Ojppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5
SUQsIHN0YXRlKTsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVu
ZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VS
ZXNvbHV0aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6
YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3Bl
cnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdl
UmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNl
dEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRpYWxWYWx1ZShwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNl
PEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwg
SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFw
LCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRp
b25TbmFwPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Cisg
ICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFn
ZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxv
YXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5pdGlhbFZh
bHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIXZhbHVlLT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTc4Niw5ICsxNzgwLDkgQEAgcHVibGljOgogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIHJlc29sdXRpb24gPSBwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19EUFBYKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKKyAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOwog
ICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCdWlsZGVyLmgKaW5kZXggYjJjYzRlZTM1ZmVlZGFlYWQ3NWU3Y2E0MDU1OGU0
NDBkZjcxODA4OC4uNGZmZTg1MjM0YzEzZDBmYmIxNDQ2ZTA2ODgxYzlmN2ZlZmM3MDY3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBTdHls
ZUJ1aWxkZXJfaAogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlN0
eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAKQEAgLTM0LDE3ICszMywxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgU3R5bGVCdWlsZGVyOworY2xhc3MgU3R5bGVSZXNv
bHZlcjsKIAogY2xhc3MgUHJvcGVydHlIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZv
aWQgKCpJbmhlcml0RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
Jik7Ci0gICAgdHlwZWRlZiB2b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYpOwotICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24p
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiwgQ1NTVmFsdWUqKTsKKyAgICB0
eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpJbml0aWFsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiwgQ1NTVmFsdWUqKTsKICAgICBQcm9wZXJ0eUhhbmRs
ZXIoKSA6IG1faW5oZXJpdCgwKSwgbV9pbml0aWFsKDApLCBtX2FwcGx5KDApIHsgfQogICAgIFBy
b3BlcnR5SGFuZGxlcihJbmhlcml0RnVuY3Rpb24gaW5oZXJpdCwgSW5pdGlhbEZ1bmN0aW9uIGlu
aXRpYWwsIEFwcGx5RnVuY3Rpb24gYXBwbHkpIDogbV9pbmhlcml0KGluaGVyaXQpLCBtX2luaXRp
YWwoaW5pdGlhbCksIG1fYXBwbHkoYXBwbHkpIHsgfQotICAgIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUp
IGNvbnN0IHsgQVNTRVJUKG1faW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBzdGF0
ZSk7IH0KLSAgICB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVChtX2luaXRpYWwp
OyAoKm1faW5pdGlhbCkocHJvcGVydHlJRCwgc3RhdGUpOyB9Ci0gICAgdm9pZCBhcHBseVZhbHVl
KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpIGNvbnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHByb3Bl
cnR5SUQsIHN0YXRlLCB2YWx1ZSk7IH0KKyAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3Qg
eyBBU1NFUlQobV9pbmhlcml0KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2
ZXIpOyB9CisgICAgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlh
bCk7ICgqbV9pbml0aWFsKShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQorICAgIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9h
cHBseSkocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOyB9CiAgICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gbV9pbmhlcml0ICYmIG1faW5pdGlhbCAmJiBtX2FwcGx5OyB9
CiAgICAgSW5oZXJpdEZ1bmN0aW9uIGluaGVyaXRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW5oZXJpdDsgfQogICAgIEluaXRpYWxGdW5jdGlvbiBpbml0aWFsRnVuY3Rpb24oKSB7IHJldHVy
biBtX2luaXRpYWw7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxZTg1
MzkwOTY4YjUzOWZiNjVmMWMyZDBlM2ExNGI2Y2U3NWY1MDgxLi5hNmI2YjEzZDIxNDgyZGE0MDlh
ODY2NzEzYTI5YjRjZTc0MzBhYWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAi
Q1NTU3VwcG9ydHNSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgot
I2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNp
ZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICNpbmNsdWRlICJDU1NWYXJpYWJsZVZhbHVlLmgiCkBA
IC0xOTYsMTQgKzE5NSwxNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAjZGVmaW5l
IEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAotICAgIHN0
YXRlLnN0eWxlKCktPnNldCMjUHJvcChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyAgXAor
ICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKG1fc3RhdGUucGFyZW50U3R5bGUoKS0+cHJv
cCgpKTsgXAogICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9J
TklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChp
c0luaXRpYWwpIHsgXAotICAgIHN0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6
aW5pdGlhbCMjUHJvcCgpKTsgXAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKFJlbmRl
clN0eWxlOjppbml0aWFsIyNQcm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTIyNSw2
ICsyMjQsNyBAQCBzdGF0aWMgU3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlv
bigpCiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAorCiBpbmxpbmUgU3Rh
dGljQ1NTUnVsZUxpc3QqIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjplbnN1cmVSdWxlTGlzdCgpCiB7
CiAgICAgaWYgKCFtX3J1bGVMaXN0KQpAQCAtMjcwLDYgKzI3MCw3IEBAIFN0eWxlUmVzb2x2ZXI6
OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcykKICAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNv
bHZlcjo6Y3JlYXRlKGRvY3VtZW50KSkKICNlbmRpZgogICAgICwgbV9zdHlsZUJ1aWxkZXIoU3R5
bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKSkKKyAgICAsIG1fc3R5bGVNYXAodGhpcykK
IHsKICAgICBFbGVtZW50KiByb290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogCkBA
IC00NTMsMjIgKzQ1NCwyMyBAQCBpbmxpbmUgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNN
YXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5n
VUFSdWxlcyA9IGZhbHNlOwogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVS
YW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2Up
CiB7CiAgICAgQVNTRVJUKG1hdGNoUmVxdWVzdC5ydWxlU2V0KTsKLSAgICBBU1NFUlQoc3RhdGUu
ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQobV9zdGF0ZS5lbGVtZW50KCkpOwogCisgICAgU3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgp
OwogICAgIGNvbnN0IFN0eWxlZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0ZS5zdHlsZWRF
bGVtZW50KCk7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNo
YWRvd1BzZXVkb0lkKCk7CiAgICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKICAgICAgICAg
QVNTRVJUKHN0eWxlZEVsZW1lbnQpOwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMo
cHNldWRvSWQuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAgICBjb2xs
ZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnNoYWRvd1BzZXVk
b0VsZW1lbnRSdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7
CiAgICAgfQogCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChlbGVtZW50LT5pc1dl
YlZUVEVsZW1lbnQoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRl
LCBtYXRjaFJlcXVlc3QucnVsZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBy
dWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1
ZXN0LnJ1bGVTZXQtPmN1ZVBzZXVkb1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
ICNlbmRpZgogICAgIC8vIENoZWNrIHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFw
cGxpY2FibGUgaW4gdGhlIGN1cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CiAg
ICAgLy8gYSkgaXQncyBhIFVBIHJ1bGUKQEAgLTQ4NCw0MyArNDg2LDQ0IEBAIHZvaWQgU3R5bGVS
ZXNvbHZlcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJl
cXVlc3QmIG1hdGNoCiAgICAgLy8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQs
IGNsYXNzLCB0YWcsIGFuZCBldmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAv
LyB0aGVuIHNvcnQgdGhlIGJ1ZmZlci4KICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKLSAgICAg
ICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNl
dC0+aWRSdWxlcyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5pZFJ1bGVzKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0
aW9uKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGlmIChzdHlsZWRF
bGVtZW50ICYmIHN0eWxlZEVsZW1lbnQtPmhhc0NsYXNzKCkpIHsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdHlsZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVz
dC5ydWxlU2V0LT5jbGFzc1J1bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBs
KCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmNsYXNzUnVsZXMoc3R5bGVkRWxl
bWVudC0+Y2xhc3NOYW1lcygpW2ldLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsK
ICAgICB9CiAKICAgICBpZiAoZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9D
bGFzc1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NS
dWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgaWYgKFNlbGVjdG9yQ2hlY2tl
cjo6bWF0Y2hlc0ZvY3VzUHNldWRvQ2xhc3MoZWxlbWVudCkpCi0gICAgICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRv
Q2xhc3NSdWxlcygpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxl
bWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAg
IGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQt
PnVuaXZlcnNhbFJ1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29s
bGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5mb2N1c1BzZXVk
b0NsYXNzUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRj
aGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+
bG9jYWxOYW1lKCkuaW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVyc2FsUnVs
ZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hS
ZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJl
c29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3Qm
IG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7Ci0gICAgaWYgKCFzdGF0ZS5y
ZWdpb25Gb3JTdHlsaW5nKCkpCisgICAgaWYgKCFtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5ydWxl
U2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiBy
ZWdpb25TZWxlY3RvciA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0Fu
ZFJ1bGVTZXRzLmF0KGkpLnNlbGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3Rv
cihyZWdpb25TZWxlY3Rvciwgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHN0YXRlLnJlZ2lvbkZvclN0
eWxpbmcoKS0+bm9kZSgpKSkpIHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVn
aW9uU2VsZWN0b3IsIHN0YXRpY19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxp
bmcoKS0+bm9kZSgpKSkpIHsKICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gbWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVs
ZVNldC5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7Ci0gICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBt
YXRjaFJlcXVlc3QuaW5jbHVkZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVS
YW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocmVn
aW9uUnVsZXMsIG1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNj
b3BlKSwgcnVsZVJhbmdlKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29s
dmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3Vs
dCYgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCkKIHsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwog
ICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVzID0gc3RhdGUubWF0
Y2hlZFJ1bGVzKCk7CiAgICAgaWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHNvcnRNYXRjaGVkUnVsZXMoc3RhdGUpOworICAgIHNvcnRNYXRjaGVkUnVs
ZXMoKTsKIAogICAgIGlmIChzdGF0ZS5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0
aW5nUnVsZXMpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRSdWxl
cy5zaXplKCk7ICsraSkKQEAgLTUzNiwxOSArNTM5LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJl
c3VsCiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVs
ZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1
bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAjaWYgRU5BQkxFKFNUWUxF
X1NDT1BFRCkgfHwgRU5BQkxFKFNIQURPV19ET00pCiAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkg
dHJhdmVyc2luZyB0aGUgc2NvcGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290
IGluY29uc2lzdGVudCkuCi0gICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVz
KCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KHN0YXRlLmVsZW1l
bnQoKSkpIHsKLSAgICAgICAgYm9vbCBhcHBseUF1dGhvclN0eWxlcyA9IHN0YXRlLmVsZW1lbnQo
KS0+dHJlZVNjb3BlKCktPmFwcGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1fc2NvcGVSZXNv
bHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0Nv
bnNpc3RlbmN5KG1fc3RhdGUuZWxlbWVudCgpKSkgeworICAgICAgICBib29sIGFwcGx5QXV0aG9y
U3R5bGVzID0gbV9zdGF0ZS5lbGVtZW50KCktPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxl
cygpOwogICAgICAgICBib29sIGRvY3VtZW50U2NvcGUgPSB0cnVlOwogICAgICAgICB1bnNpZ25l
ZCBzY29wZVNpemUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrU2l6ZSgpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHN0YXRl
Lm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxl
cygpLmNsZWFyKCk7CiAgICAgICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0g
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0
IFN0eWxlU2NvcGVSZXNvbHZlcjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXIt
PnN0YWNrRnJhbWVBdChpKTsKQEAgLTU2MywxMTIgKzU2NiwxMTAgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJl
c3VsdCwgYm8KIAogICAgICAgICAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChmcmFtZS5t
X3J1bGVTZXQsIGluY2x1ZGVFbXB0eVJ1bGVzLCBmcmFtZS5tX3Njb3BlKTsKICAgICAgICAgICAg
IFJ1bGVSYW5nZSBydWxlUmFuZ2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwot
ICAgICAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVs
ZVJhbmdlKTsKLSAgICAgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRl
LCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlc0ZvclJlZ2lvbihtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIG1hdGNoSG9zdFJ1bGVzKHN0YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAg
ICBtYXRjaEhvc3RSdWxlcyhyZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVT
RURfUEFSQU0oaW5jbHVkZUVtcHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFN0
eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoU3RhdGUm
IHN0YXRlKQoraW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRl
TWF0Y2hlc0hvc3RSdWxlcygpCiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAgcmV0dXJu
IG1fc2NvcGVSZXNvbHZlciAmJiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUuZWxlbWVudCgpKTsKKyAgICByZXR1cm4gbV9zY29wZVJl
c29sdmVyICYmIG1fc2NvcGVSZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hv
c3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQoKSk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKLSAg
ICBVTlVTRURfUEFSQU0oc3RhdGUpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hIb3N0UnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRj
aFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShT
SEFET1dfRE9NKQogICAgIEFTU0VSVChtX3Njb3BlUmVzb2x2ZXIpOwogCi0gICAgc3RhdGUubWF0
Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7
CiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcy5zaXplKCkgLSAxOwogCiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7Ci0g
ICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCksIG1hdGNo
ZWRSdWxlcyk7CisgICAgbV9zY29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX3N0YXRlLmVs
ZW1lbnQoKSwgbWF0Y2hlZFJ1bGVzKTsKICAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNp
emUoKTsgaSA+IDA7IC0taSkgewogICAgICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0
LnJhbmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMo
c3RhdGUsIE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVs
ZXMsIHN0YXRlLmVsZW1lbnQoKSksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKE1hdGNoUmVxdWVzdChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVs
ZXMsIG1fc3RhdGUuZWxlbWVudCgpKSwgcnVsZVJhbmdlKTsKICAgICB9Ci0gICAgc29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1h
dGNoZWRSdWxlcyhyZXN1bHQpOwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTShyZXN1bHQpOwogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxl
cyk7CiAjZW5kaWYKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKFN0
YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewotICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNs
ZWFyKCk7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5y
YW5nZXMubGFzdEF1dGhvclJ1bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0g
MTsKIAotICAgIGlmICghc3RhdGUuZWxlbWVudCgpKQorICAgIGlmICghbV9zdGF0ZS5lbGVtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMu
CiAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCks
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJh
bmdlcy5hdXRob3JSdWxlUmFuZ2UoKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwg
bWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVn
aW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXMobWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVz
Rm9yUmVnaW9uKG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICNpZiBFTkFCTEUoU0hBRE9XX0RP
TSkKICAgICBWZWN0b3I8TWF0Y2hSZXF1ZXN0PiBtYXRjaFJlcXVlc3RzOwogICAgIG1fcnVsZVNl
dHMuc2hhZG93RGlzdHJpYnV0ZWRSdWxlcygpLmNvbGxlY3RNYXRjaFJlcXVlc3RzKGluY2x1ZGVF
bXB0eVJ1bGVzLCBtYXRjaFJlcXVlc3RzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1h
dGNoUmVxdWVzdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0
YXRlLCBtYXRjaFJlcXVlc3RzW2ldLCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hp
bmdSdWxlcyhtYXRjaFJlcXVlc3RzW2ldLCBydWxlUmFuZ2UpOwogI2VuZGlmCiAKLSAgICBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUsIHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5z
ZmVyTWF0Y2hlZFJ1bGVzKHJlc3VsdCk7CiAKLSAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHN0
YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFNjb3BlZEF1dGhvclJ1
bGVzKHJlc3VsdCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
Om1hdGNoVXNlclJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0
Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBpZiAoIW1f
cnVsZVNldHMudXNlclN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBzdGF0ZS5t
YXRjaGVkUnVsZXMoKS5jbGVhcigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIo
KTsKIAogICAgIHJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3J1bGVT
ZXRzLnVzZXJTdHlsZSgpLCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1bGVS
YW5nZSA9IHJlc3VsdC5yYW5nZXMudXNlclJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24oc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBj
b2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXNGb3JSZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogCi0gICAg
c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOworICAgIHNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoVUFSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1
bGVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3Vs
dCwgUnVsZVNldCogcnVsZXMpCiB7Ci0gICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsK
KyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0LnJh
bmdlcy5sYXN0VUFSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAg
ICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsKLSAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJh
bmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZXMpLCBydWxl
UmFuZ2UpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQp
OworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYgc3RhdGUsIGNv
bnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVx
dWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3Qg
TWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAg
IGlmICghcnVsZXMpCiAgICAgICAgIHJldHVybjsKIAorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUg
Zm9yIHJhbmRvbSBlbGVtZW50cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVz
b2x2ZS4KICAgICAvLyBBbmNlc3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1k
YXRlIGluIHRoYXQgY2FzZSBhbmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCiAgICAgYm9v
bCBjYW5Vc2VGYXN0UmVqZWN0ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lz
dGVudChzdGF0ZS5wYXJlbnROb2RlKCkpICYmIG1hdGNoUmVxdWVzdC5iZWhhdmlvckF0Qm91bmRh
cnkgPT0gU2VsZWN0b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeTsKQEAgLTY4Miw3ICs2
ODMsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChT
dGF0ZSYgc3RhdGUsIGNvbnN0IFZlY3RvcjxSdWxlRAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUg
PSBydWxlRGF0YS5ydWxlKCk7CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tp
ZSBjb29raWUgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1l
bnQoKSwgcnVsZSwgdGhpcyk7CiAgICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BT
RVVETzsKLSAgICAgICAgaWYgKHJ1bGVNYXRjaGVzKHN0YXRlLCBydWxlRGF0YSwgbWF0Y2hSZXF1
ZXN0LnNjb3BlLCBkeW5hbWljUHNldWRvLCBtYXRjaFJlcXVlc3QuYmVoYXZpb3JBdEJvdW5kYXJ5
KSkgeworICAgICAgICBpZiAocnVsZU1hdGNoZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29w
ZSwgZHluYW1pY1BzZXVkbywgbWF0Y2hSZXF1ZXN0LmJlaGF2aW9yQXRCb3VuZGFyeSkpIHsKICAg
ICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVu
IGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwogICAgICAgICAg
ICAgaWYgKCFwcm9wZXJ0aWVzIHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW1hdGNoUmVx
dWVzdC5pbmNsdWRlRW1wdHlSdWxlcykpIHsKQEAgLTcxMCw3ICs3MTEsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYgc3RhdGUsIGNvbnN0
IFZlY3RvcjxSdWxlRAogICAgICAgICAgICAgICAgICAgICBydWxlUmFuZ2UuZmlyc3RSdWxlSW5k
ZXggPSBydWxlUmFuZ2UubGFzdFJ1bGVJbmRleDsKIAogICAgICAgICAgICAgICAgIC8vIEFkZCB0
aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICAgICAgICAgICAgICBz
dGF0ZS5hZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOworICAgICAgICAgICAgICAgIG1fc3RhdGUu
YWRkTWF0Y2hlZFJ1bGUoJnJ1bGVEYXRhKTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246OmRpZE1hdGNoUnVsZShjb29raWUsIHRydWUpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQpAQCAtNzI2LDMxICs3MjcsMzEgQEAgc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRh
KiByMikKICAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBv
c2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKFN0YXRlJiBzdGF0ZSkK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydE1hdGNoZWRSdWxlcygpCiB7Ci0gICAgc3RkOjpzb3J0
KHN0YXRlLm1hdGNoZWRSdWxlcygpLmJlZ2luKCksIHN0YXRlLm1hdGNoZWRSdWxlcygpLmVuZCgp
LCBjb21wYXJlUnVsZXMpOworICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmJl
Z2luKCksIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuZW5kKCksIGNvbXBhcmVSdWxlcyk7CiB9CiAK
LXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVz
dWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQordm9pZCBTdHlsZVJlc29s
dmVyOjptYXRjaEFsbFJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQ
cm9wZXJ0aWVzKQogewotICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKKyAgICBtYXRj
aFVBUnVsZXMocmVzdWx0KTsKIAogICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVz
LgogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hVc2Vy
UnVsZXMoc3RhdGUsIHJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1
bHQsIGZhbHNlKTsKIAogICAgIC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBm
aXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KLSAg
ICBpZiAoc3RhdGUuc3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVBy
b3BlcnRpZXMocmVzdWx0LCBzdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkpOworICAgIGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAg
ICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50
KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCiAgICAgICAgIC8vIE5vdyB3ZSBj
aGVjayBhZGRpdGlvbmFsIG1hcHBlZCBkZWNsYXJhdGlvbnMuCiAgICAgICAgIC8vIFRhYmxlcyBh
bmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3Qg
YmUgYXBwbGllZAogICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIg
bWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVz
LgotICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVk
RWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAg
ICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1l
bnQoKS0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCi0gICAgICAg
IGlmIChzdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBp
ZiAobV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAg
ICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24g
PSB0b0hUTUxFbGVtZW50KHN0YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZo
YXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRl
eHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+ZGly
ZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKICAgICAgICAgICAgIGlm
IChpc0F1dG8pCiAgICAgICAgICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCB0
ZXh0RGlyZWN0aW9uID09IExUUiA/IGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9M
ZWZ0RGVjbGFyYXRpb24oKSk7CiAgICAgICAgIH0KQEAgLTc1OCwyMSArNzU5LDIxIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6bWF0Y2hBbGxSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiBy
ZXN1bHQsIGJvb2wgaW5jbHVkCiAgICAgCiAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhv
ciBzaGVldHMgbmV4dC4KICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAg
ICAgIG1hdGNoQXV0aG9yUnVsZXMoc3RhdGUsIHJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRj
aEF1dGhvclJ1bGVzKHJlc3VsdCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxp
bmUgc3R5bGUgYXR0cmlidXRlLgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAm
JiBzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVT
dHlsZSgpKSB7CisgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUu
c3R5bGVkRWxlbWVudCgpICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgp
KSB7CiAgICAgICAgIC8vIElubGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVy
ZSBpcyBubyBDU1NPTSB3cmFwcGVyLgogICAgICAgICAvLyBGSVhNRTogTWVkaWEgY29udHJvbCBz
aGFkb3cgdHJlZXMgc2VlbSB0byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4KLSAgICAgICAg
Ym9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5s
aW5lU3R5bGUoKS0+aXNNdXRhYmxlKCkgJiYgIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNJblNo
YWRvd1RyZWUoKTsKKyAgICAgICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3Rh
dGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCktPmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBD
b25zdGlmeS4KLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRl
LnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7
CisgICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxl
ZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CiAgICAg
fQogCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmltYXRpb24gb3Zl
cnJpZGUgc3R5bGUuCi0gICAgaWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcyAmJiBzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVk
RWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVy
dGllcyhyZXN1bHQsIHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50
KCkpLT5hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUg
Ki8pOworICAgIGlmIChpbmNsdWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVt
ZW50KCktPmlzU1ZHRWxlbWVudCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVz
KHJlc3VsdCwgc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgp
KS0+YW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICov
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CiAjZW5k
aWYKQEAgLTc5NCwxMiArNzk1LDE0IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
Ojppbml0RWxlbWVudChFbGVtZW50KiBlKQogICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBl
LT5kb2N1bWVudCgpLT52aXNpdGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6
IE5vdEluc2lkZUxpbms7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVt
ZW50KFN0YXRlJiBzdGF0ZSwgRWxlbWVudCogZSkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiB7Ci0gICAgc3RhdGUuaW5pdEVsZW1lbnQoZSk7Ci0g
ICAgaWYgKGUgJiYgZSA9PSBlLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAg
ICAgICBlLT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxz
ZSk7Ci0gICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVs
ZW1lbnQoZmFsc2UpOworICAgIGlmIChtX3N0YXRlLmVsZW1lbnQoKSAhPSBlKSB7CisgICAgICAg
IG1fc3RhdGUuaW5pdEVsZW1lbnQoZSk7CisgICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNl
dERpcmVjdGlvblNldE9uRG9jdW1lbnRFbGVtZW50KGZhbHNlKTsKKyAgICAgICAgICAgIGUtPmRv
Y3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAg
ICAgICB9CiAgICAgfQogfQogCkBAIC04ODcsMjIgKzg5MCwyNiBAQCBOb2RlKiBTdHlsZVJlc29s
dmVyOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWRO
b2RlQ291bgogICAgIHJldHVybiAwOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hh
cmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KEVsZW1lbnQqIGUsIFJ1bGVTZXQqIHJ1bGVTZXQp
Citib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0
KFJ1bGVTZXQqIHJ1bGVTZXQpCiB7CiAgICAgaWYgKCFydWxlU2V0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgbV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogCi0gICAgU3RhdGUg
c3RhdGUoZG9jdW1lbnQoKSk7Ci0gICAgc3RhdGUuaW5pdEVsZW1lbnQoZSk7Ci0gICAgc3RhdGUu
c2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlNoYXJpbmdSdWxlcyk7CisgICAgbV9zdGF0ZS5zZXRN
b2RlKFNlbGVjdG9yQ2hlY2tlcjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RSdWxlSW5k
ZXggPSAtMSwgbGFzdFJ1bGVJbmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UoZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0
YXRlLCBNYXRjaFJlcXVlc3QocnVsZVNldCksIHJ1bGVSYW5nZSk7Ci0gICAgcmV0dXJuICFzdGF0
ZS5tYXRjaGVkUnVsZXMoKS5pc0VtcHR5KCk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0
Y2hSZXF1ZXN0KHJ1bGVTZXQpLCBydWxlUmFuZ2UpOworICAgIG1fc3RhdGUuc2V0TW9kZShTZWxl
Y3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKKyAgICBpZiAobV9zdGF0ZS5tYXRjaGVkUnVs
ZXMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3N0YXRlLm1hdGNo
ZWRSdWxlcygpLmNsZWFyKCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU3R5bGVSZXNv
bHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVk
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHls
ZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CisgICAgY29uc3Qg
U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRF
bGVtZW50ID0gZWxlbWVudC0+dG9JbnB1dEVsZW1lbnQoKTsKICAgICBIVE1MSW5wdXRFbGVtZW50
KiBvdGhlcklucHV0RWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsK
IApAQCAtOTU2LDggKzk2Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0
aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LT5pc0hUTUxFbGVt
ZW50KCkgJiYgdG9IVE1MRWxlbWVudChlbGVtZW50KS0+aGFzRGlyZWN0aW9uQXV0bygpOwogfQog
Ci1ib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFm
ZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBzaGFy
aW5nQ2FuZGlkYXRlKSBjb25zdAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRl
SGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJp
bmdDYW5kaWRhdGUpIGNvbnN0CiB7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
ICAgICBpZiAoc3RhdGUuZWxlbWVudCgpLT5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdDYW5kaWRh
dGUtPmVsZW1lbnREYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChzdGF0ZS5l
bGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5n
Q2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCkBAIC05OTcs
OSArMTAwNSwxMCBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVu
dGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgUwogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChjb25zdCBT
dGF0ZSYgc3RhdGUsIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVz
b2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBj
b25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIGlmICghc3R5bGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMjksNyArMTAzOCw3IEBAIGJvb2wgU3R5bGVSZXNv
bHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVk
RWxlbWVudCoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50ID09IGVsZW1l
bnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVz
KHN0YXRlLCBlbGVtZW50KSkKKyAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxT
dHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoZWxlbWVudC0+YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkg
IT0gc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA1MCw3ICsxMDU5LDcgQEAgYm9v
bCBTdHlsZVJlc29sdmVyOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgU3RhdGUmIHN0
YXRlLCBTdHlsZWRFbGVtZW50KgogICAgIGlmIChpc0NvbnRyb2wgIT0gc3RhdGUuZWxlbWVudCgp
LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAoaXNDb250cm9sICYmICFjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woc3RhdGUsIGVsZW1lbnQp
KQorICAgIGlmIChpc0NvbnRyb2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygp
IHx8IHN0eWxlLT5hbmltYXRpb25zKCkpCkBAIC0xMDkwLDEyICsxMDk5LDEyIEBAIGJvb2wgU3R5
bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KGNvbnN0IFN0YXRlJiBzdGF0ZSwg
U3R5bGVkRWxlbWVudCoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxlZEVsZW1l
bnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0IFN0YXRl
JiBzdGF0ZSwgTm9kZSogbm9kZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAoraW5saW5lIFN0eWxl
ZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUq
IG5vZGUsIHVuc2lnbmVkJiBjb3VudCkgY29uc3QKIHsKICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9
IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRF
bGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudChzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkK
KyAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRF
bGVtZW50Kj4obm9kZSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChjb3VudCsr
ID09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTEw
Myw4ICsxMTEyLDkgQEAgaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRT
aWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0IFN0YXRlJiBzdGEKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwogfQogCi1SZW5kZXJTdHlsZSogU3R5bGVSZXNv
bHZlcjo6bG9jYXRlU2hhcmVkU3R5bGUoU3RhdGUmIHN0YXRlKQorUmVuZGVyU3R5bGUqIFN0eWxl
UmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKIHsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0
YXRlOwogICAgIGlmICghc3RhdGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5wYXJlbnRTdHls
ZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTEzNyw3ICsxMTQ3LDcgQEAgUmVuZGVyU3R5
bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxlKFN0YXRlJiBzdGF0ZSkKICAgICBT
dHlsZWRFbGVtZW50KiBzaGFyZUVsZW1lbnQgPSAwOwogICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBz
dGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChjb3Vz
aW5MaXN0KSB7Ci0gICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFy
aW5nKHN0YXRlLCBjb3VzaW5MaXN0LCBjb3VudCk7CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZp
bmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvdXNpbkxpc3QsIGNvdW50KTsKICAgICAgICAgaWYg
KHNoYXJlRWxlbWVudCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjb3VzaW5MaXN0ID0g
bG9jYXRlQ291c2luTGlzdChjb3VzaW5MaXN0LT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2Rl
Q291bnQpOwpAQCAtMTE0OCwxMyArMTE1OCwxMyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZl
cjo6bG9jYXRlU2hhcmVkU3R5bGUoU3RhdGUmIHN0YXRlKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIC8vIENhbid0IHNoYXJlIGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tl
ZCBhdCB0aGUgZW5kIGFzIGl0IHNob3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAoc3R5bGVTaGFy
aW5nQ2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoc3RhdGUuZWxlbWVudCgpLCBtX3J1bGVTZXRzLnNp
YmxpbmcoKSkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1f
cnVsZVNldHMuc2libGluZygpKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hh
cmUgaWYgYXR0cmlidXRlIHJ1bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRh
dGVNYXRjaGVzUnVsZVNldChzdGF0ZS5lbGVtZW50KCksIG1fcnVsZVNldHMudW5jb21tb25BdHRy
aWJ1dGUoKSkpCisgICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1f
cnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8v
IENhbid0IHNoYXJlIGlmIEBob3N0IEAtcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoc3RhdGUpKQorICAgIGlmIChzdHlsZVNoYXJpbmdD
YW5kaWRhdGVNYXRjaGVzSG9zdFJ1bGVzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIFRy
YWNraW5nIGNoaWxkIGluZGV4IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBU
aGlzIG1heSBnZXQgc2V0IGJ5IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYg
KHBhcmVudEVsZW1lbnRQcmV2ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVt
ZW50KCkpKQpAQCAtMTE2Miw3ICsxMTcyLDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKFN0YXRlJiBzdGF0ZSkKICAgICByZXR1cm4gc2hhcmVFbGVtZW50
LT5yZW5kZXJTdHlsZSgpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhT
dGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1h
dGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQogewogICAgIE1hdGNoaW5nVUFSdWxlc1Nj
b3BlIHNjb3BlOwogCkBAIC0xMTcxLDE1ICsxMTgxLDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
bWF0Y2hVQVJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAgICAg
cmVzdWx0LmlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgUnVsZVNldCogdXNlckFnZW50U3R5bGVT
aGVldCA9IG1fbWVkaXVtLT5tZWRpYVR5cGVNYXRjaFNwZWNpZmljKCJwcmludCIpCiAgICAgICAg
ID8gQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjpkZWZhdWx0UHJpbnRTdHlsZSA6IENTU0RlZmF1bHRT
dHlsZVNoZWV0czo6ZGVmYXVsdFN0eWxlOwotICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0
LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKKyAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCB1c2VyQWdl
bnRTdHlsZVNoZWV0KTsKIAogICAgIC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBtYXRjaCBydWxlcyBm
cm9tIHRoZSBxdWlya3MgdXNlciBhZ2VudCBzaGVldC4KICAgICBpZiAoZG9jdW1lbnQoKS0+aW5R
dWlya3NNb2RlKCkpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0LCBDU1NEZWZh
dWx0U3R5bGVTaGVldHM6OmRlZmF1bHRRdWlya3NTdHlsZSk7CisgICAgICAgIG1hdGNoVUFSdWxl
cyhyZXN1bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFF1aXJrc1N0eWxlKTsKIAog
ICAgIC8vIElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJj
ZSBtb2RlIG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0
aGUgdmlldyBzb3VyY2Ugc3R5bGUgc2hlZXQuCiAgICAgaWYgKGRvY3VtZW50KCktPmlzVmlld1Nv
dXJjZSgpKQotICAgICAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgQ1NTRGVmYXVsdFN0
eWxlU2hlZXRzOjp2aWV3U291cmNlU3R5bGUoKSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1
bHQsIENTU0RlZmF1bHRTdHlsZVNoZWV0czo6dmlld1NvdXJjZVN0eWxlKCkpOwogfQogCiBzdGF0
aWMgdm9pZCBzZXRTdHlsZXNGb3JQYWdpbmF0aW9uTW9kZShQYWdpbmF0aW9uOjpNb2RlIHBhZ2lu
YXRpb25Nb2RlLCBSZW5kZXJTdHlsZSogc3R5bGUpCkBAIC0xMzc3LDI4ICsxMzg3LDI1IEBAIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVt
ZW50KiBlbGVtZW50LCBSZW5kZXJTCiAgICAgICAgIHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxh
YmxlOwogICAgIH0KIAotICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOwotICAgIGluaXRFbGVt
ZW50KHN0YXRlLCBlbGVtZW50KTsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGlu
aXRFbGVtZW50KGVsZW1lbnQpOwogICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1l
bnQoKSwgZWxlbWVudCwgZGVmYXVsdFBhcmVudCwgTk9QU0VVRE8sIHJlZ2lvbkZvclN0eWxpbmcp
OwogICAgIGlmIChzaGFyaW5nQmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRl
LmRpc3RyaWJ1dGVkVG9JbnNlcnRpb25Qb2ludCgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBz
aGFyZWRTdHlsZSA9IGxvY2F0ZVNoYXJlZFN0eWxlKHN0YXRlKTsKKyAgICAgICAgUmVuZGVyU3R5
bGUqIHNoYXJlZFN0eWxlID0gbG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYgKHNoYXJl
ZFN0eWxlKQogICAgICAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KIAogICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gY2xvbmVGb3JQYXJlbnQ7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxl
PiBzdHlsZTsKIAogICAgIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgIHN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20oc3Rh
dGUucGFyZW50U3R5bGUoKSwgaXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5
bGU6OkF0U2hhZG93Qm91bmRhcnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7
CisgICAgICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CisgICAgICAg
IHN0YXRlLnN0eWxlKCktPmluaGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCksIGlzQXRTaGFk
b3dCb3VuZGFyeShlbGVtZW50KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVu
ZGVyU3R5bGU6Ok5vdEF0U2hhZG93Qm91bmRhcnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0
eWxlID0gZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpOwotICAgICAgICBjbG9uZUZvclBhcmVudCA9
IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZS5nZXQoKSk7CisgICAgICAgIHN0YXRlLnNldFN0eWxl
KGRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKSk7CisgICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVu
ZGVyU3R5bGU6OmNsb25lKHN0YXRlLnN0eWxlKCkpOwogICAgICAgICBzdGF0ZS5zZXRQYXJlbnRT
dHlsZShjbG9uZUZvclBhcmVudC5nZXQoKSk7CiAgICAgfQotICAgIHN0YXRlLnNldFN0eWxlKHN0
eWxlKTsKLQogICAgIC8vIGNvbnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGltcGxlbWVudGVkIGJ5
IC13ZWJraXQtdXNlci1tb2RpZnkpIHNob3VsZAogICAgIC8vIGJlIHByb3BhZ2F0ZWQgZnJvbSBz
aGFkb3cgaG9zdCB0byBkaXN0cmlidXRlZCBub2RlLgogICAgIGlmIChzdGF0ZS5kaXN0cmlidXRl
ZFRvSW5zZXJ0aW9uUG9pbnQoKSkgewpAQCAtMTQyNiwxNCArMTQzMywxNiBAQCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCwgUmVuZGVyUwogCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgaWYgKG1h
dGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCi0gICAgICAgIG1hdGNo
VUFSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQpOworICAgICAgICBtYXRjaFVBUnVsZXMobWF0Y2hS
ZXN1bHQpOwogICAgIGVsc2UKLSAgICAgICAgbWF0Y2hBbGxSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1
bHQsIG1hdGNoaW5nQmVoYXZpb3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOworICAg
ICAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0LCBtYXRjaGluZ0JlaGF2aW9yICE9IE1hdGNo
QWxsUnVsZXNFeGNsdWRpbmdTTUlMKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3Rh
dGUsIG1hdGNoUmVzdWx0LCBlbGVtZW50KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1h
dGNoUmVzdWx0LCBlbGVtZW50KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3Qn
cyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAg
IGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLCBzdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUo
KSwgZWxlbWVudCk7CisgICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUu
cGFyZW50U3R5bGUoKSwgZWxlbWVudCk7CisKKyAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBv
dXQgZm9yIHRoZSBuZXh0IHJlc29sdmUuCiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHls
ZVJlc29sdmVyKCk7CiAKQEAgLTE0NDEsNDAgKzE0NTAsNDMgQEAgUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJl
bmRlclMKICAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoU3RhdGUmIHN0YXRlLCBj
b25zdCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlm
cmFtZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVs
ZW1lbnRTdHlsZSwgY29uc3QgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUm
IGtleWZyYW1lVmFsdWUpCiB7CiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwogICAgIGlmIChrZXlm
cmFtZS0+cHJvcGVydGllcygpKQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQs
IGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpOwogCisgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkp
OworCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKKwogICAgIC8vIENyZWF0ZSB0aGUgc3R5
bGUKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVs
ZW1lbnRTdHlsZSk7Ci0gICAgc3RhdGUuc2V0U3R5bGUoc3R5bGUpOworICAgIHN0YXRlLnNldFN0
eWxlKFJlbmRlclN0eWxlOjpjbG9uZShlbGVtZW50U3R5bGUpKTsKICAgICBzdGF0ZS5zZXRMaW5l
SGVpZ2h0VmFsdWUoMCk7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFp
bXBvcnRhbnQuIFNpbmNlIHRoZXJlIGlzIG9ubHkgZXZlciBvbmUKICAgICAvLyBkZWNsLCB0aGVy
ZSdzIG5vdGhpbmcgdG8gb3ZlcnJpZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVz
LgogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogICAgIGlmIChrZXlmcmFtZS0+cHJv
cGVydGllcygpKQotICAgICAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVBy
b3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1h
dGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gSWYg
b3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVw
ZGF0ZUZvbnQoc3RhdGUpOworICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0
IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQogICAg
IGlmIChzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0
ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CisgICAg
ICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0
VmFsdWUoKSk7CiAKICAgICAvLyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KICAgICBp
ZiAoa2V5ZnJhbWUtPnByb3BlcnRpZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNl
LCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7
CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3Nl
bnRpYWwgZm9udCBwcm9wcywKICAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25k
IHRpbWUuCi0gICAgdXBkYXRlRm9udChzdGF0ZSk7CisgICAgdXBkYXRlRm9udCgpOwogCiAgICAg
Ly8gU3RhcnQgbG9hZGluZyByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAg
IGxvYWRQZW5kaW5nUmVzb3VyY2VzKHN0YXRlKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygp
OwogICAgIAogICAgIC8vIEFkZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBr
ZXlmcmFtZS4KICAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlv
biA9IGtleWZyYW1lLT5wcm9wZXJ0aWVzKCkpIHsKQEAgLTE1MTEsMTUgKzE1MjMsMTUgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBj
b25zdCBSZW5kZXJTdHlsZSogZWwKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhl
IHN0eWxlIGZvciBlYWNoIGtleWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtl
eWZyYW1lPiA+JiBrZXlmcmFtZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKLSAgICBT
dGF0ZSBzdGF0ZShkb2N1bWVudCgpKTsKLSAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7Ci0gICAg
c3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIEFwcGx5
IHRoZSBkZWNsYXJhdGlvbiB0byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNp
b24gb2YgdGhlIGxvZ2ljIGluIHN0eWxlRm9yRWxlbWVudAorICAgICAgICBpbml0RWxlbWVudChl
KTsKKyAgICAgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOwor
CiAgICAgICAgIGNvbnN0IFN0eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdl
dCgpOwogCiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAg
ICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50
U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUu
c2V0U3R5bGUoc3R5bGVGb3JLZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFt
ZVZhbHVlKSk7CiAKICAgICAgICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRo
ZSBpbmRpY2F0ZWQga2V5IHRpbWVzCiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsKQEAgLTE1
MzksNyArMTU1MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmlt
YXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICB6ZXJv
UGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIwJSIpOwogICAgICAgICB9CiAgICAgICAgIEtl
eWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5z
ZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50
S2V5ZnJhbWUsIGtleWZyYW1lVmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHls
ZShzdHlsZUZvcktleWZyYW1lKGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5
ZnJhbWVWYWx1ZSkpOwogICAgICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKICAgICB9
CiAKQEAgLTE1NTEsNyArMTU2Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHls
ZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAg
ICAgICBodW5kcmVkUGVyY2VudEtleWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7CiAgICAgICAg
IH0KICAgICAgICAgS2V5ZnJhbWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDEsIDApOwotICAgICAgICBr
ZXlmcmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHls
ZSwgaHVuZHJlZFBlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlm
cmFtZVZhbHVlLnNldFN0eWxlKHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVk
UGVyY2VudEtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KGtl
eWZyYW1lVmFsdWUpOwogICAgIH0KIH0KQEAgLTE1NjIsMjIgKzE1NzQsMjQgQEAgUGFzc1JlZlB0
cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KEVsZW1l
bnQqIGUsIGNvbnN0IFAKICAgICBpZiAoIWUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgU3Rh
dGUgc3RhdGUoZG9jdW1lbnQoKSk7Ci0gICAgaW5pdEVsZW1lbnQoc3RhdGUsIGUpOworICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisKKyAgICBpbml0RWxlbWVudChlKTsKKwogICAgIHN0YXRl
LmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZSwgcGFyZW50U3R5bGUsIHBzZXVkb1N0
eWxlUmVxdWVzdCk7CiAgICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsK
LSAgICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAg
ICBzdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogCiAg
ICAgLy8gU2luY2Ugd2UgZG9uJ3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1
aXJrL3ByaW50IHVzZXIgYWdlbnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwogICAg
IC8vIHRob3NlIHJ1bGVzLgogCiAgICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxl
cy4KICAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKLSAgICBtYXRjaFVBUnVsZXMoc3RhdGUs
IG1hdGNoUmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOwogCiAgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0
YXRlLCBtYXRjaFJlc3VsdCwgZmFsc2UpOwotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRl
LCBtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhtYXRjaFJlc3Vs
dCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7
CiAgICAgfQogCiAgICAgaWYgKG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHko
KSkKQEAgLTE1ODUsMTMgKzE1OTksMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVS
ZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0IFAKIAogICAg
IHN0YXRlLnN0eWxlKCktPnNldFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQp
OwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGUpOwor
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMobWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xl
YW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFt
b25nIG90aGVyIGZpeHVwcykuCi0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUsIHN0YXRlLnN0
eWxlKCksIHN0YXRlLnBhcmVudFN0eWxlKCksIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0
YXRlLnN0eWxlKCksIG1fc3RhdGUucGFyZW50U3R5bGUoKSwgMCk7CiAKICAgICAvLyBTdGFydCBs
b2FkaW5nIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRp
bmdSZXNvdXJjZXMoc3RhdGUpOworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CiAKICAgICBk
b2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKQEAgLTE2MDEsMTMgKzE2MTUs
MTIgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVG
b3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0IFAKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7Ci0gICAgU3RhdGUg
c3RhdGUoZG9jdW1lbnQoKSk7Ci0gICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVu
dCgpLCBkb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHls
ZSB3aWxsIGJlIHNldCB0byB0aGUgZG9jdW1lbnQgc3R5bGUuCisgICAgbV9zdGF0ZS5pbml0Rm9y
U3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsg
Ly8gbV9yb290RWxlbWVudFN0eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4K
IAotICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7Ci0gICAgc3RhdGUu
c3R5bGUoKS0+aW5oZXJpdEZyb20oc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICBtX3N0
YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CisgICAgbV9zdGF0ZS5zdHlsZSgp
LT5pbmhlcml0RnJvbShtX3N0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CiAKLSAgICBjb25zdCBi
b29sIGlzTGVmdCA9IGlzTGVmdFBhZ2Uoc3RhdGUsIHBhZ2VJbmRleCk7CisgICAgY29uc3QgYm9v
bCBpc0xlZnQgPSBpc0xlZnRQYWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0
ID0gaXNGaXJzdFBhZ2UocGFnZUluZGV4KTsKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VO
YW1lKHBhZ2VJbmRleCk7CiAgICAgCkBAIC0xNjE2LDQzICsxNjI5LDQyIEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQog
ICAgIG1hdGNoUGFnZVJ1bGVzKHJlc3VsdCwgbV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaXNMZWZ0
LCBpc0ZpcnN0LCBwYWdlKTsKICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9y
IFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0
Y2hQYWdlUnVsZXMocmVzdWx0LCBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNG
aXJzdCwgcGFnZSk7Ci0gICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOworICAgIG1fc3Rh
dGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNl
OwogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8
VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRj
aGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKICNlbmRpZgot
ICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUs
IHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBp
bmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVBy
b3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVk
LCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAg
ICB1cGRhdGVGb250KCk7CiAKICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUg
c3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUuCi0gICAgaWYgKHN0YXRlLmxpbmVIZWln
aHRWYWx1ZSgpKQotICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKTsKKyAgICBpZiAobV9zdGF0ZS5saW5lSGVp
Z2h0VmFsdWUoKSkKKyAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IG1fc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGll
czxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQu
bWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlN
YXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAog
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4K
LSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJj
ZXMoKTsKIAogICAgIGRvY3VtZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAg
IC8vIE5vdyByZXR1cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsK
KyAgICByZXR1cm4gbV9zdGF0ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJT
dHlsZT4gU3R5bGVSZXNvbHZlcjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgU3Rh
dGUgc3RhdGUoZG9jdW1lbnQoKSk7Ci0gICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpKTsKKyAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAg
ICAgLy8gTWFrZSBzdXJlIG91ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5o
ZXJpdCB0aGVtIGZyb20gb3VyIHBhcmVudCBzdHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRp
bmdzID0gZG9jdW1lbnRTZXR0aW5ncygpKSB7Ci0gICAgICAgIGluaXRpYWxpemVGb250U3R5bGUo
c3RhdGUsIHNldHRpbmdzKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShm
b250U2VsZWN0b3IoKSk7CisgICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOwor
ICAgICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwog
ICAgIH0gZWxzZQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworICAg
ICAgICBtX3N0YXRlLnN0eWxlKCktPmZvbnQoKS51cGRhdGUoMCk7CiAKLSAgICByZXR1cm4gc3Rh
dGUudGFrZVN0eWxlKCk7CisgICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yVGV4dChUZXh0KiB0
ZXh0Tm9kZSkKQEAgLTE3NDcsNyArMTc1OSw3IEBAIHN0YXRpYyBib29sIGlzRGlzcGxheUZsZXhp
YmxlQm94KEVEaXNwbGF5IGRpc3BsYXkpCiAgICAgcmV0dXJuIGRpc3BsYXkgPT0gRkxFWCB8fCBk
aXNwbGF5ID09IElOTElORV9GTEVYOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJl
bmRlclN0eWxlKFN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUsIEVsZW1lbnQgKmUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRl
clN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVt
ZW50ICplKQogewogICAgIEFTU0VSVChwYXJlbnRTdHlsZSk7CiAKQEAgLTE5NDAsNyArMTk1Miw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoU3RhdGUmIHN0YXRlLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28g
aGF2ZSBhIGNyYWNrIGF0IGFkanVzdGluZyB0aGUgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNB
cHBlYXJhbmNlKCkpCi0gICAgICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0
U3R5bGUodGhpcywgc3R5bGUsIGUsIHN0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBzdGF0ZS5ib3Jk
ZXJEYXRhKCksIHN0YXRlLmJhY2tncm91bmREYXRhKCksIHN0YXRlLmJhY2tncm91bmRDb2xvcigp
KTsKKyAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlz
LCBzdHlsZSwgZSwgbV9zdGF0ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRh
KCksIG1fc3RhdGUuYmFja2dyb3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7
CiAKICAgICAvLyBJZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBz
aGFyZSB0aGlzIHN0eWxlLgogICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVU
VEVSKSkKQEAgLTIwMjEsMTggKzIwMzMsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRh
dGlvbkNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUpCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlw
dGlvbihuZXdGb250RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0
ZUZvbnQoU3RhdGUmIHN0YXRlKQordm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKIHsK
LSAgICBpZiAoIXN0YXRlLmZvbnREaXJ0eSgpKQorICAgIGlmICghbV9zdGF0ZS5mb250RGlydHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChzdGF0ZSk7
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKLSAgICBjaGVja0Zvckdl
bmVyaWNGYW1pbHlDaGFuZ2Uoc3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKLSAg
ICBjaGVja0Zvclpvb21DaGFuZ2Uoc3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsK
KyAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0KCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
bV9zdGF0ZS5zdHlsZSgpOworICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwg
bV9zdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1f
c3RhdGUucGFyZW50U3R5bGUoKSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHls
ZSk7CiAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIHN0YXRl
LnNldEZvbnREaXJ0eShmYWxzZSk7CisgICAgbV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwog
fQogCiBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9y
RWxlbWVudChFbGVtZW50KiBlLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIwNDUsMzQg
KzIwNTcsMzkgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRv
U3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwgUHMKICAgICBpZiAoIWUgfHwgIWUtPmRv
Y3VtZW50KCktPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOwotICAgIHN0YXRlLnNldE1vZGUoU2VsZWN0b3JD
aGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpOworICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNo
ZWNrZXI6OkNvbGxlY3RpbmdSdWxlcyk7CiAKLSAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7Ci0g
ICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCAwLCBwc2V1ZG9JZCk7
CisgICAgaW5pdEVsZW1lbnQoZSk7CisgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRv
Y3VtZW50KCksIGUsIDAsIHBzZXVkb0lkKTsKIAogICAgIE1hdGNoUmVzdWx0IGR1bW15OwogICAg
IGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7CiAgICAgICAgIC8vIEZp
cnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAgIG1h
dGNoVUFSdWxlcyhzdGF0ZSwgZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOwog
CiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgICAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhz
dGF0ZSwgZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgICAg
ICBtYXRjaFVzZXJSdWxlcyhkdW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsK
ICAgICB9CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9J
bmNsdWRlICYgQXV0aG9yQ1NTUnVsZXMpKSB7Ci0gICAgICAgIHN0YXRlLnNldFNhbWVPcmlnaW5P
bmx5KCEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKSk7CisgICAgICAgIG1f
c3RhdGUuc2V0U2FtZU9yaWdpbk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NT
UnVsZXMpKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4K
LSAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhzdGF0ZSwgZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYg
RW1wdHlDU1NSdWxlcyk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9J
bmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisKKyAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3JpZ2lu
T25seShmYWxzZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0YXRlLnRha2VSdWxlTGlzdCgpOwor
ICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKKwor
ICAgIHJldHVybiBtX3N0YXRlLnRha2VSdWxlTGlzdCgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHls
ZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRv
LCBTZWxlY3RvckNoZWNrZXI6OkJlaGF2aW9yQXRCb3VuZGFyeSBiZWhhdmlvckF0Qm91bmRhcnkp
CitpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYg
cnVsZURhdGEsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1Bz
ZXVkbywgU2VsZWN0b3JDaGVja2VyOjpCZWhhdmlvckF0Qm91bmRhcnkgYmVoYXZpb3JBdEJvdW5k
YXJ5KQogeworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CisKICAgICBpZiAocnVsZURhdGEu
aGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNl
bGVjdG9yIGRvZXMgbm90IGluY2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgaWYg
KHN0YXRlLnBzZXVkb1N0eWxlUmVxdWVzdCgpLnBzZXVkb0lkICE9IE5PUFNFVURPKQpAQCAtMjEx
NCw3ICsyMTMxLDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKGNv
bnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWUKICAgICBpZiAoIXJlZ2lvblNl
bGVjdG9yIHx8ICFyZWdpb25FbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBT
ZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIFNlbGVjdG9yQ2hlY2tl
cjo6UXVlcnlpbmdSdWxlcyk7CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihk
b2N1bWVudCgpLCBtX3N0YXRlLm1vZGUoKSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3Rvciog
cyA9IHJlZ2lvblNlbGVjdG9yOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7CiAg
ICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JD
aGVja2luZ0NvbnRleHQocywgcmVnaW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVk
TWF0Y2hEaXNhYmxlZCk7CiAgICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBO
T1BTRVVETzsKQEAgLTIxMzksOSArMjE1Niw5IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252
ZXJ0VG9GbG9hdExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlCiB9
CiAKIHRlbXBsYXRlIDxTdHlsZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgot
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBv
cnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5
V2hpdGVsaXN0VHlwZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0lt
cG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKQogewotICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9
IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOwor
ICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVn
aW9uKSB8fCBtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIGNvb2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFBy
b2Nlc3NSdWxlKGRvY3VtZW50KCksIHJ1bGUsIHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVy
dHlDb3VudCA9IHByb3BlcnRpZXMtPnByb3BlcnR5Q291bnQoKTsKQEAgLTIxNjksNyArMjE4Niw3
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVyCiAgICAgICAgIGNhc2UgVmFyaWFibGVEZWZpbml0
aW9uczoKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5VmFyaWFibGUgPCBm
aXJzdENTU1Byb3BlcnR5LCBDU1NfdmFyaWFibGVfaXNfYmVmb3JlX2ZpcnN0X3Byb3BlcnR5KTsK
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKQotICAgICAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVu
dC52YWx1ZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIGNhc2UgSGln
aFByaW9yaXR5UHJvcGVydGllczoKQEAgLTIxODIsMjUgKzIxOTksMjYgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBTdHlsZVByb3BlcnR5
U2V0KiBwcm9wZXIKICNlbmRpZgogICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5
IHRvIGZvbnQteHh4LCBjb2xvciBwcm9wZXJ0aWVzLCBldGMKICAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eSA8IENTU1Byb3BlcnR5TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KHN0YXRlLCBjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgYXBwbHlQcm9wZXJ0eShjdXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAg
ICAgICAvLyB3ZSBhcHBseSBsaW5lLWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBpZiAo
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIHN0YXRl
LnNldExpbmVIZWlnaHRWYWx1ZShjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1f
c3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBMb3dQcmlvcml0eVByb3BlcnRpZXM6CiAgICAgICAgICAgICBp
ZiAocHJvcGVydHkgPiBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgYXBw
bHlQcm9wZXJ0eShzdGF0ZSwgY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwog
ICAgICAgICB9CiAgICAgfQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vz
c1J1bGUoY29va2llKTsKIH0KIAogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGlj
YXRpb25QYXNzIHBhc3M+Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wgaXNJ
bXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25s
eSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBp
bnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKIHsKICAgICBpZiAoc3RhcnRJbmRleCA9
PSAtMSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAg
ICBpZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKICAg
ICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAg
ICAgICAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0
Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07CkBAIC0yMjA5LDcgKzIyMjcsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25z
dCBNYXRjaFJlc3VsdCYgbWF0YwogICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7
CiAgICAgICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGxp
bmtNYXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CiAKLSAgICAgICAg
ICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVy
dGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5o
ZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJv
cGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFz
cz4obWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hl
ZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVy
dHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAg
ICAgIH0KICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUp
OwogICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNl
KTsKQEAgLTIyMTcsNyArMjIzNSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVk
UHJvcGVydGllcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjCiAgICAgfQog
ICAgIGZvciAoaW50IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAg
ICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1
bHQubWF0Y2hlZFByb3BlcnRpZXNbaV07Ci0gICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihz
dGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0
Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJv
cGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7Cisg
ICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVz
LmdldCgpLCBtYXRjaFJlc3VsdC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0
ZWRPbmx5LCBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0
aWVzLndoaXRlbGlzdFR5cGUpKTsKICAgICB9CiB9CiAKQEAgLTIzMTcsOSArMjMzNSwxMCBAQCBz
dGF0aWMgYm9vbCBpc0NhY2hlYWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBSZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNo
UmVzdWx0LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsK
KyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1h
dGNoUmVzdWx0LmlzQ2FjaGVhYmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRj
aFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSkgOiAwOwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7
CiAgICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBA
IC0yMzQzLDEwICsyMzYyLDEwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJv
cGVydGllcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjCiAKICNpZiBFTkFC
TEUoQ1NTX1ZBUklBQkxFUykKICAgICAvLyBGaXJzdCBhcHBseSBhbGwgdmFyaWFibGUgZGVmaW5p
dGlvbnMsIGFzIHRoZXkgbWF5IGJlIHVzZWQgZHVyaW5nIGFwcGxpY2F0aW9uIG9mIGxhdGVyIHBy
b3BlcnRpZXMuCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25z
PihzdGF0ZSwgbWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVy
dGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBt
YXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFz
dEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVy
dGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJS
dWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFy
aWFibGVEZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5y
YW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUlu
aGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0
aW9ucz4obWF0Y2hSZXN1bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlh
YmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmly
c3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+
KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogI2VuZGlmCiAK
ICAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFwcHJv
cHJpYXRlIG9yZGVyLiBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKQEAgLTIzNTQsMTAgKzIzNzMs
MTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiBz
dGF0ZSwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGMKICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhp
Z2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAo
Mykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQu
CiAgICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOwotICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwg
MCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0
ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRp
ZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0
aG9yUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGll
cz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2Vy
UnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5
KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0
YXRlLCBtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0
LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBw
bHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0
eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RB
dXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0
aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7Cisg
ICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJl
c3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5y
YW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKIAogICAgIGlmIChjYWNoZUl0
ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgewogICAgICAgICBzdGF0ZS5zZXRGb250RGlydHkodHJ1
ZSk7CkBAIC0yMzY1LDMwICsyMzg0LDMwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRj
aGVkUHJvcGVydGllcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjCiAgICAg
fQogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUg
aXQgbm93LgotICAgIHVwZGF0ZUZvbnQoc3RhdGUpOworICAgIHVwZGF0ZUZvbnQoKTsKIAogICAg
IC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhl
IGZvbnQtc2l6ZS4KICAgICBpZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCi0gICAgICAgIGFw
cGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdo
dFZhbHVlKCkpOworICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwg
c3RhdGUubGluZUhlaWdodFZhbHVlKCkpOwogCiAgICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVu
ZCBvbiB0aGUgZm9udC4gSWYgaXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVz
LgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIGFw
cGx5SW5oZXJpdGVkT25seSA9IGZhbHNlOwogCiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJp
b3JpdHkgVUEgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9y
aXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFu
Z2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVy
dGllcz4obWF0Y2hSZXN1bHQsIGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAg
IAogICAgIC8vIENhY2hlIG91ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4g
ZXhhbWluZSB0aGVtIGxhdGVyLgogICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgp
OwogICAgIAogICAgIC8vIE5vdyBkbyB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0
eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KLSAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVz
dWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3Vs
dC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0
Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNo
UmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNo
UmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1h
dGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0
LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVz
dWx0LnJhbmdlcy5sYXN0VUFSdWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0
LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVs
ZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1By
aW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5m
aXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVy
aXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0
aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgIAog
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4K
LSAgICBsb2FkUGVuZGluZ1Jlc291cmNlcyhzdGF0ZSk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJj
ZXMoKTsKICAgICAKICAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKICAgICAKQEAgLTI0
NTgsMTAgKzI0NzcsMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxp
c3QoVmVjdG9yPFN0eWxlUnVsZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAogICAgIH0KIH0KIAotYm9v
bCBTdHlsZVJlc29sdmVyOjppc0xlZnRQYWdlKFN0YXRlJiBzdGF0ZSwgaW50IHBhZ2VJbmRleCkg
Y29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25z
dAogewogICAgIGJvb2wgaXNGaXJzdFBhZ2VMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKCFzdGF0ZS5y
b290RWxlbWVudFN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICBpZiAoIW1f
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAg
ICAgIGlzRmlyc3RQYWdlTGVmdCA9IHRydWU7CiAKICAgICByZXR1cm4gKHBhZ2VJbmRleCArIChp
c0ZpcnN0UGFnZUxlZnQgPyAxIDogMCkpICUgMjsKQEAgLTI0NzksMzEgKzI0OTgsMTggQEAgU3Ry
aW5nIFN0eWxlUmVzb2x2ZXI6OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0CiAg
ICAgcmV0dXJuICIiOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlXaXRo
TnVsbENoZWNrKFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVl
KQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBpZiAoIXZh
bHVlKQotICAgICAgICByZXR1cm47Ci0gICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVl
KTsKKyAgICBpbml0RWxlbWVudCgwKTsKKyAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUo
ZG9jdW1lbnQoKSwgMCwgc3R5bGUpOworICAgIG1fc3RhdGUuc2V0U3R5bGUoc3R5bGUpOworICAg
IGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShpZCwgdmFsdWUpOwogfQogCi12b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IFN0eWxlUHJvcGVydHlTZXQqIHBhcnNlZFN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHVlKQogewotICAgIFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOwotICAgIHN0YXRlLmluaXRGb3JT
dHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgMCwgc3R5bGUpOwotICAgIHN0YXRlLnNldFN0eWxlKHN0
eWxlKTsKLQotICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0
eUZvbnRGYW1pbHksIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
Rm9udEZhbWlseSkuZ2V0KCkpOwotICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRl
LCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpKTsKLSAgICBhcHBseVByb3BlcnR5V2l0aE51bGxD
aGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlGb250VmFyaWFudCwgcGFyc2VkU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudCkuZ2V0KCkpOwotICAgIGFwcGx5UHJv
cGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOwot
Ci0gICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBhbmQg
bGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZUxlbmd0aERvdWJsZSBjYWxsLAotICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRy
aWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFz
aCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCi0g
ICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRyaWNz
IGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWln
aHQuCi0gICAgdXBkYXRlRm9udChzdGF0ZSk7Ci0gICAgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hl
Y2soc3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNpemUpLmdldCgpKTsKLSAgICB1cGRhdGVGb250KHN0YXRl
KTsKLSAgICBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQpLmdldCgpKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQs
IHZhbHVlKTsKIH0KIAogaW5saW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCkKQEAgLTI2MDYsNiArMjYxMiwxMCBAQCBpbmxpbmUgYm9vbCBTdHlsZVJl
c29sdmVyOjppc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogLy8gd2lk
dGgvaGVpZ2h0L2JvcmRlci9wYWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3Ig
U1ZHIHRoZXNlIHZhbHVlcyB3b3VsZCBuZXZlciBzY2FsZSwKIC8vIGlmIHdlJ2QgcGFzcyBhIDEu
MCB6b29tIGZhY3RvciBldmVyeWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBv
ZiAxLjAgZm9yIHNwZWNpZmljCiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRv
IHNjYWxlIHdpdGhpbiBhIHpvb21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcv
Zm9udC1zaXplKS4KK2Jvb2wgU3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKK3sKKyAg
ICByZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCkgJiYgbV9zdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxl
bWVudCgpOworfQogCiBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1p
dGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBMZW5ndGgmIHdvcmtpbmdMZW5ndGgpCiB7CkBAIC0yNzIzLDkgKzI3MzMsOSBAQCBzdGF0
aWMgYm9vbCBoYXNWYXJpYWJsZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoU3RhdGUm
IHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBh
aXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQordm9pZCBTdHls
ZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1ZSwgVmVjdG9yPHN0ZDo6cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhw
cmVzc2lvbnMpCiB7Ci0gICAgc3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVz
c2lvbihpZCwgdmFsdWUtPnNlcmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3RhdGUuc3R5bGUo
KS0+dmFyaWFibGVzKCkpKTsKKyAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBl
eHByZXNzaW9uKGlkLCB2YWx1ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCptX3N0YXRl
LnN0eWxlKCktPnZhcmlhYmxlcygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250
YWlucyhleHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KQEAg
LTI3NDAsMjMgKzI3NTAsMjQgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVz
KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHYKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0U2V0LT5wcm9wZXJ0eUNvdW50KCk7IGkrKykgewogICAg
ICAgICBTdHlsZVByb3BlcnR5U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHJlc3Vs
dFNldC0+cHJvcGVydHlBdChpKTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgIT0gQ1NTUHJv
cGVydHlWYXJpYWJsZSAmJiBoYXNWYXJpYWJsZVJlZmVyZW5jZShwcm9wZXJ0eS52YWx1ZSgpKSkK
LSAgICAgICAgICAgIHJlc29sdmVWYXJpYWJsZXMoc3RhdGUsIHByb3BlcnR5LmlkKCksIHByb3Bl
cnR5LnZhbHVlKCksIGtub3duRXhwcmVzc2lvbnMpOworICAgICAgICAgICAgcmVzb2x2ZVZhcmlh
Ymxlcyhwcm9wZXJ0eS5pZCgpLCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25zKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHku
aWQoKSwgcHJvcGVydHkudmFsdWUoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3Bl
cnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCkpOwogICAgIH0KIH0KICNlbmRpZgogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlk
LCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogI2lmIEVOQUJMRShDU1NfVkFSSUFC
TEVTKQogICAgIGlmIChpZCAhPSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVm
ZXJlbmNlKHZhbHVlKSkgewogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQs
IFN0cmluZz4gPiBrbm93bkV4cHJlc3Npb25zOwotICAgICAgICByZXNvbHZlVmFyaWFibGVzKHN0
YXRlLCBpZCwgdmFsdWUsIGtub3duRXhwcmVzc2lvbnMpOworICAgICAgICByZXNvbHZlVmFyaWFi
bGVzKGlkLCB2YWx1ZSwga25vd25FeHByZXNzaW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYKIAorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgYm9vbCBpc0luaGVy
aXQgPSBzdGF0ZS5wYXJlbnROb2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKICAg
ICBib29sIGlzSW5pdGlhbCA9IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFy
ZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCkBAIC0yNzg2LDExICsy
Nzk3LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUs
IENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgY29uc3QgUHJvcGVydHlIYW5k
bGVyJiBoYW5kbGVyID0gbV9zdHlsZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICBp
ZiAoaGFuZGxlci5pc1ZhbGlkKCkpIHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAg
ICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHN0YXRlKTsKKyAgICAgICAgICAgIGhh
bmRsZXIuYXBwbHlJbmhlcml0VmFsdWUoaWQsIHRoaXMpOwogICAgICAgICBlbHNlIGlmIChpc0lu
aXRpYWwpCi0gICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCBzdGF0ZSk7
CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCB0aGlzKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCBzdGF0ZSwgdmFsdWUp
OworICAgICAgICAgICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCB0aGlzLCB2YWx1ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI4MjIsMTkgKzI4MzMsMTkgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHUKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVu
dFdpdGhTdHlsZXNSZXNvbHZlZChzdGF0ZSkuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdl
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRl
bnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJh
dG9yVmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChpdGVtLT5pc0ltYWdlU2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJv
cGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9y
UGVuZGluZ0Zyb21WYWx1ZShDU1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdl
U2V0VmFsdWUqPihpdGVtKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9
IHRydWU7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAo
aXRlbS0+aXNJbWFnZVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5
Q29udGVudCwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVl
Kj4oaXRlbSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTM2
LDcgKzI5NDcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0
YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdQogICAgICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNG
YW1pbHkoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZv
bnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9u
dCgpKTsKLSAgICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOworICAgICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjk0NiwxMSArMjk1NywxMSBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdQogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3Qg
dGhlIHNpemUgdG8gYWNjb3VudCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1v
bm9zcGFjZQogICAgICAgICAgICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlm
IChmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpKQotICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250
RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21h
bGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CisgICAgICAg
ICAgICAgICAgc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQo
ZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXpl
KCkgLSAxLCBmYWxzZSkpOwogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNG
YW1pbHkoaW5pdGlhbERlc2MuZ2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgICAgIGlmICghaW5p
dGlhbERlc2MuZmlyc3RGYW1pbHkoKS5mYW1pbHlJc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEZhbWlseShpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKLSAg
ICAgICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAg
ICAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzAyNSw5ICszMDM2LDkgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHUKICAgICAgICAgLy8gSWYgY3VyckZhbWlseSBpcyBub24temVybyB0aGVuIHdl
IHNldCBhdCBsZWFzdCBvbmUgZmFtaWx5IG9uIHRoaXMgZGVzY3JpcHRpb24uCiAgICAgICAgIGlm
IChjdXJyRmFtaWx5KSB7CiAgICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRT
aXplKCkgJiYgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1p
bHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShzdGF0
ZSwgZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFs
dWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5
VXNlZEZpeGVkRGVmYXVsdFNpemUpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250
RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21h
bGwgKyBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4
ZWREZWZhdWx0U2l6ZSkpOwogCi0gICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDUyLDEz
ICszMDYzLDEzIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3Rh
dGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KHN0YXRl
LnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBzdGF0
ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAg
ICAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwogICAgICAgICAg
ICAgQVNTRVJUKHNldHRpbmdzKTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwg
dGhpcyBkb2N1bWVudCBzaG91bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBz
ZXR0aW5ncwogICAgICAgICAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHN0YXRlLCBzZXR0aW5ncyk7Cisg
ICAgICAgICAgICBpbml0aWFsaXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZSkgewogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlu
ZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBz
dGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CkBAIC0zMDc3LDI3ICszMDg4LDI3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVz
ZVByaW50ZXJGb250KGRvY3VtZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5G
b250U3Vic3RpdHV0aW9uRW5hYmxlZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0
aGUgem9vbSBmYWN0b3IuCi0gICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBzdGF0
ZS5zdHlsZSgpLCBmb250RGVzY3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0
aW9uLnNwZWNpZmllZFNpemUoKSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLSAgICAgICAg
ICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6
ZUZyb21TcGVjaWZpZWRTaXplKGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlw
dGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1
c2VTVkdab29tUnVsZXMoKSkpOworICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVl
LT5pc0ZvbnRWYWx1ZSgpKSB7CiAgICAgICAgICAgICBGb250VmFsdWUqIGZvbnQgPSBzdGF0aWNf
Y2FzdDxGb250VmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8
ICFmb250LT52YXJpYW50IHx8ICFmb250LT53ZWlnaHQKICAgICAgICAgICAgICAgICB8fCAhZm9u
dC0+c2l6ZSB8fCAhZm9udC0+bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3Bl
cnR5Rm9udFN0eWxlLCBmb250LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3Bl
cnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsK
LSAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
Zm9udC0+d2VpZ2h0LmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlGb250U3R5bGUsIGZvbnQtPnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7CisgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0Lmdl
dCgpKTsKICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBwcm9wZXJ0aWVzIGNhbiBkaXJ0eSBv
dXIgZm9udCBidXQgdGhleSBkb24ndCB0cnkgdG8gcmVhZCB0aGUgZm9udCdzCiAgICAgICAgICAg
ICAvLyBwcm9wZXJ0aWVzIGJhY2ssIHdoaWNoIGlzIHNhZmUuIEhvd2V2ZXIgaWYgZm9udC1zaXpl
IGlzIHVzaW5nIHRoZSAnZXgnIHVuaXQsIGl0IHdpbGwKICAgICAgICAgICAgIC8vIG5lZWQgcXVl
cnkgdGhlIGRpcnRpZWQgZm9udCdzIHgtaGVpZ2h0IHRvIGdldCB0aGUgY29tcHV0ZWQgc2l6ZS4g
VG8gYmUgc2FmZSBpbiB0aGlzCiAgICAgICAgICAgICAvLyBjYXNlLCBsZXQncyBqdXN0IHVwZGF0
ZSB0aGUgZm9udCBub3cuCi0gICAgICAgICAgICB1cGRhdGVGb250KHN0YXRlKTsKLSAgICAgICAg
ICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUu
Z2V0KCkpOworICAgICAgICAgICAgdXBkYXRlRm9udCgpOworICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAogICAgICAgICAg
ICAgc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkpOwogCi0g
ICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZv
bnQtPmZhbWlseS5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Rm9udEZhbWlseSwgZm9udC0+ZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAKQEAgLTMxMjgsNyArMzEzOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9w
ZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAg
ICAgICAgICBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0
eWxlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAg
ICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAg
ICAgICAgICAgIGNvbG9yID0gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNv
bG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKGl0ZW0tPmNvbG9yLmdldCgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxl
KCkpCiAgICAgICAgICAgICAgICAgY29sb3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogCkBA
IC0zMTU3LDggKzMxNjgsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3Rh
dGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdQogICAgICAgICAgICAg
cmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxh
dGVkQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6
b29tRmFjdG9yKSk7CiAgICAgICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7CiAgICAgICAgIG1hc2su
c2V0TWFza0RlZmF1bHRzKCk7Ci0gICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUp
OwotICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5t
YXNrKCksIG1hc2spOworICAgICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCBy
ZWZsZWN0VmFsdWUtPm1hc2soKSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2so
bWFzayk7CiAKICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9u
LnJlbGVhc2UoKSk7CkBAIC0zMjUwLDE0ICszMjYwLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6
YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2
YWx1CiAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUt
PmdldFN0cmluZ1ZhbHVlKCkpOwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTY3JpcHQobG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0
ZS5zdHlsZSgpLT5sb2NhbGUoKSkpOwotICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlw
dGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRleHRTaXplQWRqdXN0OiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRl
eHRTaXplQWRqdXN0LCBUZXh0U2l6ZUFkanVzdCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1
ZSB8fCAhcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHN0YXRlLnNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlQXV0byk7CisgICAgICAgIHNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtMzM4NCw3ICszMzk0LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKHN0YXRlLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgc3RhdGUuc3R5bGUoKS0+
c2V0VGFwSGlnaGxpZ2h0Q29sb3IoY29sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0
MzksNyArMzQ0OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYg
c3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgewogICAgICAgICBD
U1NQcm9wZXJ0eUlEIG5ld0lkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVBy
b3BlcnR5KGlkLCBzdGF0ZS5zdHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3Jp
dGluZ01vZGUoKSk7CiAgICAgICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVy
biBhcHBseVByb3BlcnR5KHN0YXRlLCBuZXdJZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gYXBw
bHlQcm9wZXJ0eShuZXdJZCwgdmFsdWUpOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFN0cmV0Y2g6CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2U6CkBAIC0zNDY5LDcgKzM0NzksNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5J
VElBTCh3cml0aW5nTW9kZSwgV3JpdGluZ01vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlKQotICAgICAgICAgICAgc3RhdGUuc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2
ZVZhbHVlKTsKKyAgICAgICAgICAgIHNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CiAK
ICAgICAgICAgLy8gRklYTUU6IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUg
d2hpbGUgYXBwbHlpbmcgc3R5bGUuCiAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYgc3Rh
dGUuZWxlbWVudCgpID09IHN0YXRlLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQpAQCAt
MzQ4MSw3ICszNDkxLDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KFN0YXRl
JiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICAgICAgSEFORExF
X0lOSEVSSVRfQU5EX0lOSVRJQUwodGV4dE9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24pOwog
CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHN0YXRlLnNldFRleHRP
cmllbnRhdGlvbigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc2V0VGV4dE9yaWVudGF0
aW9uKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1MDQs
NyArMzUxNCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3Rh
dGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgLy8gQ1NTIEZvbnRzIE1v
ZHVsZSBMZXZlbCAzCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGlu
Z3M6IHsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJ
ZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVz
Y3JpcHRpb24oc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1
cmVTZXR0aW5ncygpKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM1MjMsNyArMzUzMyw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0
dXJlKGZlYXR1cmUtPnRhZygpLCBmZWF0dXJlLT52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEZlYXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkp
OwotICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAg
ICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTM1MzEsNyArMzU0MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5I
RVJJVF9BTkRfSU5JVElBTChmaWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKLSAgICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoc3RhdGUs
IHZhbHVlLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlv
bnMpKQorICAgICAgICBpZiAoY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5
bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkKICAgICAgICAgICAg
IHN0YXRlLnN0eWxlKCktPnNldEZpbHRlcihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTM4NTIsNzIgKzM4NjIsNzIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVBy
b3BlcnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAg
ICBkZWZhdWx0OgogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3Bl
cnRpZXMKLSAgICAgICAgYXBwbHlTVkdQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVlKTsKKyAgICAg
ICAgYXBwbHlTVkdQcm9wZXJ0eShpZCwgdmFsdWUpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJ
bWFnZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1
ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5p
c0ltYWdlVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShz
dGF0ZSwgcHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2Fz
dDxDU1NJbWFnZVZhbHVlKj4odmFsdWUpKTsKIAogICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVy
YXRvclZhbHVlKCkpIHsKICAgICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3Bl
cnR5LCBzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZChzdGF0ZSkuZ2V0KCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQ
ZW5kaW5nRnJvbVZhbHVlKHN0YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSo+KHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5k
aW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4odmFs
dWUpLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSk7CisgICAgICAgIHJl
dHVybiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENT
U0ltYWdlR2VuZXJhdG9yVmFsdWUqPih2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1Nf
SU1BR0VfU0VUKQogICAgIGlmICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJl
dHVybiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NJbWFnZVNldFZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zy
b21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7
CiAjZW5kaWYKIAogICAgIGlmICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAg
IHJldHVybiBjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNf
Y2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGN1cnNv
ck9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VW
YWx1ZSo+KHZhbHVlKSk7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0YXRl
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQogewogICAgIFJlZlB0
cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAg
IGlmIChpbWFnZSAmJiBpbWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgc3RhdGUucGVu
ZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0
YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICBy
ZXR1cm4gaW1hZ2UucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OmdlbmVyYXRlZE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1By
b3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQorUGFzc1Jl
ZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUp
CiB7CiAgICAgaWYgKHZhbHVlLT5pc1BlbmRpbmcoKSkgewotICAgICAgICBzdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUu
cGVuZGluZ0ltYWdlUHJvcGVydGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICBy
ZXR1cm4gU3R5bGVQZW5kaW5nSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVy
biBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUodmFsdWUpOwogfQogCiAjaWYgRU5BQkxFKENT
U19JTUFHRV9TRVQpCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9y
UGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENT
U0ltYWdlU2V0VmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29s
dmVyOjpzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1h
Z2VTZXRWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFs
dWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlU2V0KHN0YXRlLmRvY3VtZW50KCkpOworICAgIFJlZlB0
cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNldChkb2N1
bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAg
ICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsK
KyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2
YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVm
UHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShT
dGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0N1cnNvckltYWdlVmFsdWUq
IHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBl
bmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSogdmFsdWUpCiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hl
ZE9yUGVuZGluZ0ltYWdlKHN0YXRlLmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdl
PiBpbWFnZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgpKTsKICAgICBp
ZiAoaW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIHN0YXRlLnBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0
ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0
dXJuIGltYWdlLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRl
eHRTaXplQWRqdXN0KFN0YXRlJiBzdGF0ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JU
ZXh0U2l6ZUFkanVzdCgpCiB7Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUo
KTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CiAKICAgICBpZiAo
c3R5bGUtPnRleHRTaXplQWRqdXN0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM5MjcsMTggKzM5
MzcsMTggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRl
JiBzdGF0ZSkKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlv
bik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFN0YXRlJiBz
dGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KSA9PSBwYXJlbnRTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKICAgICBGb250RGVzY3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7
Ci0gICAgc2V0Rm9udFNpemUoc3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNw
ZWNpZmllZFNpemUoKSk7CisgICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGls
ZEZvbnQuc3BlY2lmaWVkU2l6ZSgpKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5l
d0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5l
cmljRmFtaWx5Q2hhbmdlKFN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJT
dHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkK
IHsKICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKTsKIApAQCAtMzk3MiwxMSArMzk4MiwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBz
dHlsZQogICAgIH0KIAogICAgIEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hp
bGRGb250KTsKLSAgICBzZXRGb250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBzaXpl
KTsKKyAgICBzZXRGb250U2l6ZShuZXdGb250RGVzY3JpcHRpb24sIHNpemUpOwogICAgIHN0eWxl
LT5zZXRGb250RGVzY3JpcHRpb24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHls
ZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFN0YXRlJiBzdGF0ZSwgU2V0dGluZ3MqIHNl
dHRpbmdzKQordm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdz
KiBzZXR0aW5ncykKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRh
cmRGYW1pbHkpOwpAQCAtMzk4OCwxNiArMzk5OCwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Omlu
aXRpYWxpemVGb250U3R5bGUoU3RhdGUmIHN0YXRlLCBTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKICAgICB9
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NT
VmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlv
biwgZm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkp
OwotICAgIHN0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxM
aW5lSGVpZ2h0KCkpOwotICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICBzdGF0
ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICBzZXRGb250U2l6ZShm
b250RGVzY3JpcHRpb24sIGZvbnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1l
ZGl1bSwgZmFsc2UpKTsKKyAgICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVy
U3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZh
bHVlKDApOworICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKFN0YXRlJiBzdGF0ZSwgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNl
dEZvbnRTaXplKEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQog
ewogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNp
emUoc3RhdGUuZG9jdW1lbnQoKSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJz
b2x1dGVTaXplKCksIHNpemUsIHN0YXRlLnVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6
ZShkb2N1bWVudCgpLCBtX3N0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRl
U2l6ZSgpLCBzaXplLCB1c2VTVkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29s
dmVyOjpnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQs
IFJlbmRlclN0eWxlKiBzdHlsZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVk
U2l6ZSwgYm9vbCB1c2VTVkdab29tUnVsZXMpCkBAIC00MTk1LDExICs0MjA1LDEyIEBAIGJvb2wg
U3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVu
dChDU1NQcmltaXRpdmVWYWx1CiAgICAgfQogfQogCi1Db2xvciBTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENT
U1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKK0NvbG9yIFN0eWxl
UmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKIHsKICAgICBpZiAodmFsdWUtPmlzUkdCQ29s
b3IoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKIAor
ICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaW50IGlkZW50ID0gdmFsdWUt
PmdldElkZW50KCk7CiAgICAgc3dpdGNoIChpZGVudCkgewogICAgIGNhc2UgMDoKQEAgLTQ1NDUs
OCArNDU1Niw5IEBAIHN0YXRpYyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVy
T3BlcmF0aW9uRm9yVHlwZShXZWJLaXRDU1NGaWx0ZXJWYWx1CiB9CiAKICNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
U1ZHRG9jdW1lbnRzKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdTVkdEb2N1bWVudHMoKQogeworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYg
KCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRz
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ1NzMsMjkgKzQ1ODUsMjkgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyhTdGF0ZSYgc3RhdGUp
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLVN0eWxlU2hhZGVyKiBTdHlsZVJl
c29sdmVyOjpzdHlsZVNoYWRlcihTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKK1N0eWxl
U2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRlcihDU1NWYWx1ZSogdmFsdWUpCiB7CiAg
ICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBj
YWNoZWRPclBlbmRpbmdTdHlsZVNoYWRlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGljX2Nhc3Q8V2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5k
aW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUq
Pih2YWx1ZSkpOwogICAgIHJldHVybiAwOwogfQogCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZl
cjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoU3RhdGUmIHN0YXRlLCBXZWJL
aXRDU1NTaGFkZXJWYWx1ZSogdmFsdWUpCitTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2Fj
aGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZh
bHVlKQogewogICAgIFN0eWxlU2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5n
U2hhZGVyKCk7CiAgICAgaWYgKHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQot
ICAgICAgICBzdGF0ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKKyAgICAgICAgbV9zdGF0
ZS5zZXRIYXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycyhTdGF0ZSYgc3RhdGUpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFzdGF0ZS5z
dHlsZSgpLT5oYXNGaWx0ZXIoKSB8fCAhc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMoKSkKKyAgICBp
ZiAoIW1fc3RhdGUuc3R5bGUoKS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUuaGFzUGVuZGluZ1No
YWRlcnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBt
X3N0YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKLSAgICBWZWN0b3I8
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxl
KCktPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJPcGVyYXRpb24+ID4mIGZpbHRlck9wZXJhdGlvbnMgPSBtX3N0YXRlLnN0eWxlKCktPm11dGFi
bGVGaWx0ZXIoKS5vcGVyYXRpb25zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZp
bHRlck9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gZmlsdGVyT3BlcmF0aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsKICAgICAgICAg
aWYgKGZpbHRlck9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlv
bjo6Q1VTVE9NKSB7CkBAIC00NjEyLDcgKzQ2MjQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nU2hhZGVycyhTdGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgc3RhdGUuc2V0SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOworICAgIG1fc3Rh
dGUuc2V0SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFy
YW1ldGVyc0J5TmFtZUNvbXBhcmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRl
cj4mIGEsIGNvbnN0IFJlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDY1MCwx
NiArNDY2MiwxNiBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNv
bHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZQogICAgIHJldHVybiBudW1iZXJQ
YXJhbWV0ZXIucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRl
cj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoU3Rh
dGUmIHN0YXRlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQorUGFz
c1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0
KiB2YWx1ZXMpCiB7CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4g
dHJhbnNmb3JtUGFyYW1ldGVyID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVh
dGUobmFtZSk7CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0
ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIG9wZXJhdGlvbnMpOworICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMo
dmFsdWVzLCBtX3N0YXRlLnN0eWxlKCksIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVy
YXRpb25zKTsKICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9u
cyk7CiAgICAgcmV0dXJuIHRyYW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZp
bHRlclBhcmFtZXRlcihTdGF0ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUq
IHBhcmFtZXRlclZhbHVlKQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxl
UmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwg
Q1NTVmFsdWUqIHBhcmFtZXRlclZhbHVlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3Ro
ZXIgcGFyYW1ldGVycyB0eXBlcyBwYXJzaW5nLgogICAgIC8vIGJvb2xlYW5zOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzY0MzgKQEAgLTQ2ODIsNyArNDY5NCw3IEBA
IFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1
c3RvbUZpbHRlclBhcmFtZXRlcihTdGF0CiAgICAgLy8gYXJlIHRyYW5zZm9ybXMuIHBhcnNlQ3Vz
dG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyIHdpbGwKICAgICAvLyByZXR1cm4gMCBpZiB0aGF0
IGFzc3VtcHRpb24gaXMgaW5jb3JyZWN0LgogICAgIGlmICh2YWx1ZXMtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMCktPmlzV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgcmV0dXJu
IHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKHN0YXRlLCBuYW1lLCB2YWx1ZXMp
OworICAgICAgICByZXR1cm4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIobmFt
ZSwgdmFsdWVzKTsKIAogICAgIC8vIFdlIGNhbiBoYXZlIG9ubHkgYXJyYXlzIG9mIGJvb2xlYW5z
IG9yIG51bWJlcnMsIHNvIHVzZSB0aGUgZmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhv
c2UgdHdvLgogICAgIC8vIFdlIG5lZWQgdXAgdG8gNCB2YWx1ZXMgKGFsbCBib29sZWFucyBvciBh
bGwgbnVtYmVycykuCkBAIC00Njk5LDcgKzQ3MTEsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
clBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoU3Rh
dAogICAgIHJldHVybiAwOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdChTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUs
IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCitib29sIFN0eWxlUmVz
b2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVy
c1ZhbHVlLCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQogewogICAg
IEhhc2hTZXQ8U3RyaW5nPiBrbm93blBhcmFtZXRlck5hbWVzOwogICAgIENTU1ZhbHVlTGlzdEl0
ZXJhdG9yIHBhcmFtZXRlckl0ZXJhdG9yKHBhcmFtZXRlcnNWYWx1ZSk7CkBAIC00NzI0LDcgKzQ3
MzYsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dChTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBwYXJhbQogICAgICAgICBpZiAoIWl0ZXJhdG9yLmhh
c01vcmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyKHN0YXRlLCBuYW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgUmVmUHRy
PEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJh
bWV0ZXIobmFtZSwgaXRlcmF0b3IudmFsdWUoKSk7CiAgICAgICAgIGlmICghcGFyYW1ldGVyKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVuZChw
YXJhbWV0ZXIucmVsZWFzZSgpKTsKQEAgLTQ3NDMsNyArNDc1NSw3IEBAIFBhc3NSZWZQdHI8Q3Vz
dG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVy
YXRpb25XaXRoCiAgICAgcmV0dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3Bl
cmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5s
aW5lU3ludGF4KFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVl
KQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGhJbmxpbmVTeW50YXgoV2ViS2l0Q1NTRmlsdGVyVmFs
dWUqIGZpbHRlclZhbHVlKQogewogICAgIENTU1ZhbHVlKiBzaGFkZXJzVmFsdWUgPSBmaWx0ZXJW
YWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihzaGFkZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkpOwpAQCAtNDc1Miw3ICs0
NzY0LDcgQEAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6
OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbldpdGgKICAgICB1bnNpZ25lZCBzaGFkZXJzTGlz
dExlbmd0aCA9IHNoYWRlcnNMaXN0LT5sZW5ndGgoKTsKICAgICBBU1NFUlQoc2hhZGVyc0xpc3RM
ZW5ndGgpOwogCi0gICAgUmVmUHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNo
YWRlcihzdGF0ZSwgc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAg
IFJlZlB0cjxTdHlsZVNoYWRlcj4gdmVydGV4U2hhZGVyID0gc3R5bGVTaGFkZXIoc2hhZGVyc0xp
c3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOwogICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4g
ZnJhZ21lbnRTaGFkZXI7CiAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUg
PSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRTsKICAgICBDdXN0b21GaWx0ZXJQ
cm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3M7CkBAIC00NzY1LDcgKzQ3NzcsNyBAQCBQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uV2l0aAogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRl
cmF0b3IobWl4RnVuY3Rpb24pOwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxl
bmd0aCgpKTsKLSAgICAgICAgICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUs
IGl0ZXJhdG9yLnZhbHVlKCkpOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNo
YWRlcihpdGVyYXRvci52YWx1ZSgpKTsKICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsK
IAogICAgICAgICAgICAgQVNTRVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSA8PSAzKTsKQEAgLTQ3
ODEsNyArNDc5Myw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJl
c29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9O
T19FTEVNRU5UX1RFWFRVUkU7Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hh
ZGVyKHN0YXRlLCBmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOworICAgICAgICAgICAgZnJh
Z21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwog
ICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNDgzNywyMyArNDg0OSwyMyBAQCBQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uV2l0aAogICAgICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygyKTsKICAgICAKICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0IHBhcmFtZXRlckxpc3Q7Ci0gICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0KHN0YXRlLCBwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxp
c3QpKQorICAgIGlmIChwYXJhbWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdChwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQogICAgICAgICByZXR1cm4g
MDsKICAgICAKICAgICBSZWZQdHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0g
U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJlbGVhc2UoKSwg
ZnJhZ21lbnRTaGFkZXIucmVsZWFzZSgpLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hU
eXBlKTsKICAgICByZXR1cm4gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUocHJvZ3JhbS5y
ZWxlYXNlKCksIHBhcmFtZXRlckxpc3QsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUp
OwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6
Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVy
VmFsdWUqIGZpbHRlclZhbHVlKQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJW
YWx1ZSogZmlsdGVyVmFsdWUpCiB7CiAgICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7
CiAgICAgYm9vbCBpc0F0UnVsZVJlZmVyZW5jZVN5bnRheCA9IGZpbHRlclZhbHVlLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDApLT5pc1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgcmV0dXJuIGlzQXRS
dWxlUmVmZXJlbmNlU3ludGF4ID8gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVs
ZVJlZmVyZW5jZVN5bnRheChmaWx0ZXJWYWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRp
b25XaXRoSW5saW5lU3ludGF4KHN0YXRlLCBmaWx0ZXJWYWx1ZSk7CisgICAgcmV0dXJuIGlzQXRS
dWxlUmVmZXJlbmNlU3ludGF4ID8gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVs
ZVJlZmVyZW5jZVN5bnRheChmaWx0ZXJWYWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRp
b25XaXRoSW5saW5lU3ludGF4KGZpbHRlclZhbHVlKTsKIH0KIAogI2VuZGlmCiAKLWJvb2wgU3R5
bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiBpblZhbHVlLCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZp
bHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCitib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUZpbHRlck9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwg
UmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykK
IHsKICAgICBBU1NFUlQob3V0T3BlcmF0aW9ucy5pc0VtcHR5KCkpOwogICAgIApAQCAtNDg4Niw3
ICs0ODk4LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0
YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmQKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlv
bjo6Q1VTVE9NKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBv
cGVyYXRpb24gPSBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb24oc3RhdGUsIGZpbHRlclZhbHVl
KTsKKyAgICAgICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9
IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBp
ZiAoIW9wZXJhdGlvbikKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAKQEAgLTQ5MDQsMTIgKzQ5MTYsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKFN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmQKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRW
YWx1ZSogc3ZnRG9jdW1lbnRWYWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1NWR0RvY3VtZW50
VmFsdWUqPihhcmd1bWVudCk7Ci0gICAgICAgICAgICBLVVJMIHVybCA9IHN0YXRlLmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtV
UkwgdXJsID0gbV9zdGF0ZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVl
LT51cmwoKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+
IG9wZXJhdGlvbiA9IFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN2Z0RvY3VtZW50
VmFsdWUtPnVybCgpLCB1cmwuZnJhZ21lbnRJZGVudGlmaWVyKCksIG9wZXJhdGlvblR5cGUpOwot
ICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShz
dmdEb2N1bWVudFZhbHVlLT51cmwoKSwgc3RhdGUuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAg
IGlmIChTVkdVUklSZWZlcmVuY2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRW
YWx1ZS0+dXJsKCksIG1fc3RhdGUuZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAo
IXN2Z0RvY3VtZW50VmFsdWUtPmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
c3RhdGUucGVuZGluZ1NWR0RvY3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3Vt
ZW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVu
dHMoKS5zZXQob3BlcmF0aW9uLmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
KGFkb3B0UHRyKG5ldyBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVl
LT5jYWNoZWRTVkdEb2N1bWVudCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNDk5Myw3ICs1MDA1
LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0YXRlJiBz
dGF0ZSwgQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmQKICAgICAgICAgICAgIGludCBibHVyID0gaXRl
bS0+Ymx1ciA/IGl0ZW0tPmJsdXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxl
LCB6b29tRmFjdG9yKSA6IDA7CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAg
IGlmIChpdGVtLT5jb2xvcikKLSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHN0YXRlLCBpdGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29s
b3IgPSBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAg
ICAgICAgIG9wZXJhdGlvbnMub3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3Bl
cmF0aW9uOjpjcmVhdGUobG9jYXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDog
Q29sb3I6OnRyYW5zcGFyZW50LCBvcGVyYXRpb25UeXBlKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTUwMTEsOSArNTAyMyw5IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3Bl
cmF0aW9ucyhTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kCiAKICNlbmRpZgog
Ci1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2Uo
U3RhdGUmIHN0YXRlLCBTdHlsZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQorUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGlu
Z0ltYWdlKiBwZW5kaW5nSW1hZ2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hl
ZFJlc291cmNlTG9hZGVyID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIo
KTsKKyAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0
YXRlLmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGlu
Z0ltYWdlLT5jc3NJbWFnZVZhbHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VW
YWx1ZSA9IHBlbmRpbmdJbWFnZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTA0MSwyOSArNTA1Mywy
OSBAQCBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1h
Z2UoU3RhdGUmIHN0YXRlLCBTdHlsZVBlbmRpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFN0
eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgU3R5bGVS
ZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMoKQogewotICAgIGlmIChzdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQorICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRpbmdJbWFn
ZVByb3BlcnR5TWFwOjpjb25zdF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBzdGF0ZS5wZW5kaW5nSW1h
Z2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVy
dHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVy
dGllcygpLmJlZ2luKCkua2V5cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBQZW5kaW5nSW1h
Z2VQcm9wZXJ0eU1hcDo6Y29uc3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5n
SW1hZ2VQcm9wZXJ0aWVzKCkuZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJv
cGVydHlNYXA6OmNvbnN0X2l0ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQ
cm9wZXJ0aWVzKCkuYmVnaW4oKS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBD
U1NQcm9wZXJ0eUlEIGN1cnJlbnRQcm9wZXJ0eSA9ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1
cnJlbnRQcm9wZXJ0eSkgewogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdl
OiB7Ci0gICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gc3RhdGUu
c3R5bGUoKS0+YWNjZXNzQmFja2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tn
cm91bmRMYXllciA9IGJhY2tncm91bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3Ig
KEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNr
Z3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dy
b3VuZExheWVyLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVy
LT5pbWFnZSgpICYmIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkK
LSAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRM
YXllci0+aW1hZ2UoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5z
ZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
YmFja2dyb3VuZExheWVyLT5pbWFnZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKLSAg
ICAgICAgICAgIGZvciAoQ29udGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250
ZW50RGF0YSo+KHN0YXRlLnN0eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29u
dGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKENvbnRl
bnREYXRhKiBjb250ZW50RGF0YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0YXRlLnN0
eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50
RGF0YS0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2Fz
dDxJbWFnZUNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uo
c3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxvYWRlZEltYWdlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldElt
YWdlKGxvYWRlZEltYWdlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUw
NzIsNDYgKzUwODQsNDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyhT
dGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Q3Vyc29yOiB7Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29y
TGlzdCA9IHN0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkgeworICAgICAgICAgICAgaWYgKEN1cnNv
ckxpc3QqIGN1cnNvckxpc3QgPSBtX3N0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkgewogICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNv
ckxpc3QtPmF0KGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2Ug
PSBjdXJyZW50Q3Vyc29yLmltYWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bWFnZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50Q3Vyc29yLnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0
eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudEN1cnNvci5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxl
UGVuZGluZ0ltYWdlKj4oaW1hZ2UpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlm
IChzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpICYmIHN0YXRlLnN0eWxlKCktPmxpc3RT
dHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0TGlzdFN0eWxlSW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nh
c3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpKSkp
OworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBt
X3N0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5s
aXN0U3R5bGVJbWFnZSgpKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAo
c3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5ib3Jk
ZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldEJvcmRlckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VT
b3VyY2UoKSkpKTsKKyAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdl
U291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRp
bmdJbWFnZSgpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVySW1h
Z2VTb3VyY2UobG9hZFBlbmRpbmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+
KG1fc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0
OiB7Ci0gICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gc3RhdGUu
c3R5bGUoKS0+Ym94UmVmbGVjdCgpKSB7CisgICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9u
KiByZWZsZWN0aW9uID0gbV9zdGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAg
ICAgICAgICBjb25zdCBOaW5lUGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFz
aygpOwogICAgICAgICAgICAgICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2Uu
aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
U3R5bGVJbWFnZT4gbG9hZGVkSW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNf
Y2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1h
Z2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwog
ICAgICAgICAgICAgICAgICAgICByZWZsZWN0aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxv
YWRlZEltYWdlLnJlbGVhc2UoKSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5m
aWxsKCksIG1hc2tJbWFnZS5ib3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNr
SW1hZ2UuaG9yaXpvbnRhbFJ1bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewot
ICAgICAgICAgICAgaWYgKHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIHN0
YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAg
ICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVu
ZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0
eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUu
c3R5bGUoKS0+bWFza0JveEltYWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94
SW1hZ2VTb3VyY2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRl
LnN0eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19j
YXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3Vy
Y2UoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBt
YXNrTGF5ZXIgPSBzdGF0ZS5zdHlsZSgpLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsg
bWFza0xheWVyID0gbWFza0xheWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExh
eWVyKiBtYXNrTGF5ZXIgPSBtX3N0YXRlLnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFz
a0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAg
IGlmIChtYXNrTGF5ZXItPmltYWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJ
bWFnZSgpKQotICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5k
aW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0xheWVy
LT5pbWFnZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxv
YWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXIt
PmltYWdlKCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtNTEyMCwyMiArNTEzMiwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5n
SW1hZ2VzKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRlLnBlbmRp
bmdJbWFnZVByb3BlcnRpZXMoKS5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJv
cGVydGllcygpLmNsZWFyKCk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdS
ZXNvdXJjZXMoU3RhdGUmIHN0YXRlKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jl
c291cmNlcygpCiB7CiAgICAgLy8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0
aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nSW1hZ2VzKHN0YXRlKTsKKyAgICBsb2FkUGVuZGlu
Z0ltYWdlcygpOwogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIC8vIFN0YXJ0IGxvYWRp
bmcgdGhlIHNoYWRlcnMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5n
U2hhZGVycyhzdGF0ZSk7CisgICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CiAjZW5kaWYKICAgICAK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJMRShTVkcpCiAgICAgLy8gU3RhcnQgbG9h
ZGluZyB0aGUgU1ZHIERvY3VtZW50cyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9h
ZFBlbmRpbmdTVkdEb2N1bWVudHMoc3RhdGUpOworICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRz
KCk7CiAjZW5kaWYKIH0KIApAQCAtNTE3OCw2ICs1MTkwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVy
OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdAogICAgIGluZm8uYWRkTWVtYmVyKG1faW5zcGVjdG9yQ1NTT01XcmFwcGVycyk7CiAgICAg
aW5mby5hZGRNZW1iZXIobV9zY29wZVJlc29sdmVyLCAic2NvcGVSZXNvbHZlciIpOwogCisgICAg
aW5mby5hZGRNZW1iZXIobV9zdGF0ZSwgInN0YXRlIik7CisKICAgICAvLyBGSVhNRTogbW92ZSB0
aGlzIHRvIGEgcGxhY2Ugd2hlcmUgaXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBp
bmZvLmFkZE1lbWJlcihDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHlsZSwgImRlZmF1
bHRTdHlsZSIpOwogICAgIGluZm8uYWRkTWVtYmVyKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVm
YXVsdFF1aXJrc1N0eWxlLCAiZGVmYXVsdFF1aXJrc1N0eWxlIik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaAppbmRleCAzOGIyZmE2YmZkYzc4ZDRiNzQzNGJkZjUxMGIwOGI1ZWI0MWQzYmFj
Li5jOGY1OTlkZTY1NjlkMDcxMmE2Mjc0MDZkOTU1ZWRmZWZkNGU2OTQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNTU1J1bGUu
aCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgpAQCAtMTkzLDggKzE5NCwxMyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JE
b2N1bWVudChEb2N1bWVudCosIENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAorICAgIFJlbmRlclN0
eWxlKiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQorICAgIFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUo
KTsgfQorICAgIFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5yb290RWxlbWVudFN0eWxlKCk7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgeyBy
ZXR1cm4gbV9zdGF0ZS5lbGVtZW50KCk7IH0KICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJl
dHVybiBtX2RvY3VtZW50OyB9CiAgICAgU3R5bGVTY29wZVJlc29sdmVyKiBzY29wZVJlc29sdmVy
KCkgY29uc3QgeyByZXR1cm4gbV9zY29wZVJlc29sdmVyLmdldCgpOyB9CisgICAgYm9vbCBoYXNQ
YXJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlKCk7IH0KIAogICAg
IC8vIEZJWE1FOiBJdCBjb3VsZCBiZSBiZXR0ZXIgdG8gY2FsbCBtX3J1bGVTZXRzLmFwcGVuZEF1
dGhvclN0eWxlU2hlZXRzKCkgZGlyZWN0bHkgYWZ0ZXIgd2UgZmFjdG9yIFN0eWxlUnNvbHZlciBm
dXJ0aGVyLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDg4OTAKQEAgLTIyMCwxOCArMjI2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2Nv
cGVSZXNvbHZlci5nZXQoKTsKICAgICB9CiAjZW5kaWYKLSAgICBjbGFzcyBTdGF0ZTsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIGluaXRFbGVtZW50KFN0YXRlJiwgRWxlbWVudCopOwotICAgIFJlbmRl
clN0eWxlKiBsb2NhdGVTaGFyZWRTdHlsZShTdGF0ZSYpOwotICAgIGJvb2wgc3R5bGVTaGFyaW5n
Q2FuZGlkYXRlTWF0Y2hlc1J1bGVTZXQoRWxlbWVudCosIFJ1bGVTZXQqKTsKLSAgICBib29sIHN0
eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoU3RhdGUmKTsKKyAgICB2b2lkIGlu
aXRFbGVtZW50KEVsZW1lbnQqKTsKKyAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUo
KTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQq
KTsKKyAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKICAg
ICBOb2RlKiBsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0
ZWROb2RlQ291bnQpIGNvbnN0OwotICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9yU3R5
bGVTaGFyaW5nKGNvbnN0IFN0YXRlJiwgTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7Ci0g
ICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgU3RhdGUmLCBTdHlsZWRFbGVt
ZW50KikgY29uc3Q7CisgICAgU3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJp
bmcoTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQoU3R5bGVkRWxlbWVudCopIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxSZW5k
ZXJTdHlsZT4gc3R5bGVGb3JLZXlmcmFtZShTdGF0ZSYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVL
ZXlmcmFtZSosIEtleWZyYW1lVmFsdWUmKTsKIAogcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhv
ZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2
ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCkBAIC0yNTQsMjEgKzI1OSwyNSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhl
bEZvbnRTaXplLCBib29sIHNob3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwogCiBwdWJsaWM6Ci0g
ICAgdm9pZCBhcHBseUZvbnRQcm9wZXJ0eVRvU3R5bGUoUmVuZGVyU3R5bGUqLCBjb25zdCBTdHls
ZVByb3BlcnR5U2V0Kik7CisgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSosIFJlbmRlclN0eWxlKik7CiAKLSAgICB2b2lkIHVwZGF0ZUZvbnQoU3Rh
dGUmKTsKLSAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoU3RhdGUmLCBTZXR0aW5ncyopOwor
ICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKik7CisKKyAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVGb250
U3R5bGUoU2V0dGluZ3MqKTsKIAogICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9t
U3BlY2lmaWVkU2l6ZShEb2N1bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0
ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVz
ZVNtYXJ0TWluaW11bUZvckZvbnRGaXplKTsKIAotICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTaXpl
KFN0YXRlJiwgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CisgICAgdm9pZCBzZXRGb250
U2l6ZShGb250RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgZmxvYXQgZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5k
ZXJTdHlsZSosIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wg
dXNlU1ZHWm9vbVJ1bGVzKTsKIAogcHVibGljOgorICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7
CisKICAgICBzdGF0aWMgYm9vbCBjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21F
bGVtZW50KENTU1ByaW1pdGl2ZVZhbHVlKik7Ci0gICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVBy
aW1pdGl2ZVZhbHVlKGNvbnN0IFN0YXRlJiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIGZvclZp
c2l0ZWRMaW5rID0gZmFsc2UpOworICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENT
U1ByaW1pdGl2ZVZhbHVlKiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKIAog
ICAgIGJvb2wgaGFzU2VsZWN0b3JGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKICAg
ICBib29sIGhhc1NlbGVjdG9yRm9yQ2xhc3MoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CkBA
IC0yOTYsMzQgKzMwNSwzNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlTWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZSgpOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgY3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhTdGF0ZSYsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHls
ZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0
T3BlcmF0aW9ucyk7CisgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBp
blZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmls
dGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQot
ICAgIFN0eWxlU2hhZGVyKiBzdHlsZVNoYWRlcihTdGF0ZSYsIENTU1ZhbHVlKik7Ci0gICAgU3R5
bGVTaGFkZXIqIGNhY2hlZE9yUGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFN0YXRlJiwgV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUqKTsKLSAgICBib29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdChTdGF0ZSYsIENTU1ZhbHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOwotICAg
IFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFt
ZXRlcihTdGF0ZSYsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZVNo
YWRlciogc3R5bGVTaGFkZXIoQ1NTVmFsdWUqKTsKKyAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQ
ZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKKyAgICBi
b29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSosIEN1c3RvbUZpbHRl
clBhcmFtZXRlckxpc3QmKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4g
cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSop
OwogICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRl
ckFycmF5UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CiAgICAg
UGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVy
UGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7Ci0gICAgUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyKFN0YXRlJiwgY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKKyAgICBQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zv
cm1QYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKICAgICBQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
V2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwotICAgIFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRp
b25XaXRoSW5saW5lU3ludGF4KFN0YXRlJiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICBQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKFN0YXRlJiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICB2b2lkIGxvYWRQZW5kaW5n
U2hhZGVycyhTdGF0ZSYpOworICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBj
cmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFdlYktpdENTU0ZpbHRl
clZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1
c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOworICAgIHZvaWQgbG9h
ZFBlbmRpbmdTaGFkZXJzKCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgbG9h
ZFBlbmRpbmdTVkdEb2N1bWVudHMoU3RhdGUmKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9j
dW1lbnRzKCk7CiAjZW5kaWYKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKLSAgICB2
b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKFN0YXRlJik7CisgICAgdm9pZCBsb2FkUGVuZGluZ1Jl
c291cmNlcygpOwogCiBwcml2YXRlOgogICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhl
IGRlZmF1bHQgZm9udCBzaXplIGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmlj
IGZvbnQgZmFtaWx5IGhhcyBjaGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNG
YW1pbHlDaGFuZ2UoU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSk7Ci0gICAgdm9pZCBjaGVja0Zvclpvb21DaGFuZ2UoU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0
KFN0YXRlJik7CisgICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5
bGUqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hh
bmdlKFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNo
ZWNrRm9yVGV4dFNpemVBZGp1c3QoKTsKIAotICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoU3Rh
dGUmLCBSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5
bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKICAgICBz
dHJ1Y3QgUnVsZVJhbmdlIHsKICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFz
dFJ1bGVJbmRleChsYXN0UnVsZUluZGV4KSB7IH0KQEAgLTM3MCwyNSArMzc5LDI1IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWdu
ZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIFByb3BlcnR5V2hp
dGVsaXN0VHlwZSA9IFByb3BlcnR5V2hpdGVsaXN0Tm9uZSk7CiAgICAgdm9pZCBhZGRFbGVtZW50
U3R5bGVQcm9wZXJ0aWVzKE1hdGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCosIGJv
b2wgaXNDYWNoZWFibGUgPSB0cnVlKTsKIAotICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhTdGF0ZSYs
IE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlU01JTFByb3BlcnRpZXMpOwotICAgIHZvaWQgbWF0
Y2hVQVJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhT
dGF0ZSYsIE1hdGNoUmVzdWx0JiwgUnVsZVNldCopOwotICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxl
cyhTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9p
ZCBtYXRjaFVzZXJSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlS
dWxlcyk7Ci0gICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1
bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKFN0
YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1h
dGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7Cisg
ICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFSdWxl
cyhNYXRjaFJlc3VsdCYsIFJ1bGVTZXQqKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0
Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoVXNlclJ1
bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRj
aFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
CisgICAgdm9pZCBtYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpOwogCi0gICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhTdGF0ZSYsIGNvbnN0IE1h
dGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JSZWdpb24oU3RhdGUmLCBjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2
b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYsIGNvbnN0IFZlY3RvcjxSdWxl
RGF0YT4qLCBjb25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxl
Y3RNYXRjaGluZ1J1bGVzKGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOworICAgIHZv
aWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVs
ZVJhbmdlJik7CisgICAgdm9pZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiosIGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwogCiAgICAg
Ym9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICB2b2lk
IHNvcnRNYXRjaGVkUnVsZXMoU3RhdGUmKTsKLSAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNo
ZWRSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVz
KCk7CisgICAgdm9pZCBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsK
IAotICAgIGJvb2wgcnVsZU1hdGNoZXMoU3RhdGUmLCBjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYsIFNlbGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JB
dEJvdW5kYXJ5ID0gU2VsZWN0b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeSk7CisgICAg
Ym9vbCBydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNj
b3BlLCBQc2V1ZG9JZCYsIFNlbGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JBdEJvdW5kYXJ5ID0gU2Vs
ZWN0b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeSk7CiAgICAgYm9vbCBjaGVja1JlZ2lv
blNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVn
aW9uRWxlbWVudCk7Ci0gICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiwgY29u
c3QgTWF0Y2hSZXN1bHQmLCBjb25zdCBFbGVtZW50Kik7CisgICAgdm9pZCBhcHBseU1hdGNoZWRQ
cm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwogICAgIGVudW0g
U3R5bGVBcHBsaWNhdGlvblBhc3MgewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgICAg
ICBWYXJpYWJsZURlZmluaXRpb25zLApAQCAtMzk3LDExICs0MDYsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgTG93UHJpb3JpdHlQcm9wZXJ0aWVzCiAgICAgfTsKICAgICB0ZW1wbGF0ZSA8U3R5bGVB
cHBsaWNhdGlvblBhc3MgcGFzcz4KLSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3Rh
dGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwg
aW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgYXBwbHlNYXRjaGVk
UHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJ
bmRleCwgaW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgIHRlbXBsYXRlIDxT
dHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKFN0YXRl
JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBp
c0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQ
cm9wZXJ0eVdoaXRlbGlzdE5vbmUpOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0
eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQs
IGJvb2wgaW5oZXJpdGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0
ZWxpc3ROb25lKTsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICB2b2lkIHJlc29sdmVW
YXJpYWJsZXMoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBh
aXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsKKyAgICB2b2lk
IHJlc29sdmVWYXJpYWJsZXMoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBWZWN0b3I8c3RkOjpw
YWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucyk7CiAjZW5kaWYK
ICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
KTsKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC00MTEsOCArNDIwLDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBt
YXRjaGVkUnVsZXMsIGNvbnN0IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mLCBib29sIGlzTGVmdFBh
Z2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIFNldHRp
bmdzKiBkb2N1bWVudFNldHRpbmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC0+c2V0dGluZ3MoKTsg
fQogCi0gICAgYm9vbCBpc0xlZnRQYWdlKFN0YXRlJiwgaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc1JpZ2h0UGFnZShTdGF0ZSYgc3RhdGUsIGludCBwYWdlSW5kZXgpIGNvbnN0IHsg
cmV0dXJuICFpc0xlZnRQYWdlKHN0YXRlLCBwYWdlSW5kZXgpOyB9CisgICAgYm9vbCBpc0xlZnRQ
YWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJ
bmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQogICAgIGJvb2wg
aXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGlu
dCBwYWdlSW5kZXgpIGNvbnN0OwogCkBAIC00MjIsMTcgKzQzMSwxNiBAQCBwcml2YXRlOgogICAg
IEtleWZyYW1lc1J1bGVNYXAgbV9rZXlmcmFtZXNSdWxlTWFwOwogCiBwdWJsaWM6Ci0KICAgICB0
eXBlZGVmIEhhc2hNYXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJ
bWFnZVByb3BlcnR5TWFwOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykK
ICAgICB0eXBlZGVmIEhhc2hNYXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NW
R0RvY3VtZW50VmFsdWU+ID4gUGVuZGluZ1NWR0RvY3VtZW50TWFwOwogI2VuZGlmCisKICAgICBj
bGFzcyBTdGF0ZSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKICAgICBw
dWJsaWM6Ci0gICAgICAgIFN0YXRlKERvY3VtZW50KiBkb2N1bWVudCkKLSAgICAgICAgOiBtX2Rv
Y3VtZW50KGRvY3VtZW50KQotICAgICAgICAsIG1fZWxlbWVudCgwKQorICAgICAgICBTdGF0ZSgp
CisgICAgICAgIDogbV9lbGVtZW50KDApCiAgICAgICAgICwgbV9zdHlsZWRFbGVtZW50KDApCiAg
ICAgICAgICwgbV9wYXJlbnROb2RlKDApCiAgICAgICAgICwgbV9wYXJlbnRTdHlsZSgwKQpAQCAt
NDU5LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZl
KERvY3VtZW50KiwgRWxlbWVudCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGNvbnN0
IFBzZXVkb1N0eWxlUmVxdWVzdCYgPSBQc2V1ZG9TdHlsZVJlcXVlc3QoTk9QU0VVRE8pLCBSZW5k
ZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSAwKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwog
Ci0gICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7
IH0KKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
LT5kb2N1bWVudCgpOyB9CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnQ7IH0KICAgICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3R5bGVkRWxlbWVudDsgfQogICAgICAgICB2b2lkIHNldFN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQpAQCAtNTIw
LDEwICs1MjgsMTEgQEAgcHVibGljOgogCiAgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSos
IDMyPiYgbWF0Y2hlZFJ1bGVzKCkgeyByZXR1cm4gbV9tYXRjaGVkUnVsZXM7IH0KICAgICAgICAg
dm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxl
cy5hcHBlbmQocnVsZSk7IH0KLSAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBjb25zdCB7
IHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsgfQogICAgICAg
ICAKICAgICBwcml2YXRlOgotICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICAgICAg
Ly8gRklYTUUoYnVnIDEwODU2Myk6IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJldmlldywgdGhlc2Ug
bWVtYmVyCisgICAgICAgIC8vIHZhcmlhYmxlcyBhcmUgcHVibGljLiBIb3dldmVyIHdlIHNob3Vs
ZCBhZGQgbWV0aG9kcyB0byBhY2Nlc3MKKyAgICAgICAgLy8gdGhlc2UgdmFyaWFibGVzLgogICAg
ICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9z
dHlsZTsKICAgICAgICAgU3R5bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwpAQCAtNTY5LDE4
ICs1NzgsMzAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFll
dEF2YWlsYWJsZSgpIHsgcmV0dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIAotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoU3RhdGUmLCBDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSopOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUq
KTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdG
cm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7
CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9t
VmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWUqKTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZVNldFZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1
ZSopOwogI2VuZGlmCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQ
ZW5kaW5nRnJvbVZhbHVlKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1
ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU0N1cnNvckltYWdlVmFsdWUqKTsKKworICAgIGJvb2wgYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpOyB9CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0ludExlbmd0aChDU1NQ
cmltaXRpdmVWYWx1ZSosIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91
YmxlIG11bHRpcGxpZXIgPSAxKTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVu
Z3RoKENTU1ByaW1pdGl2ZVZhbHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0
eWxlLCBkb3VibGUgbXVsdGlwbGllciA9IDEpOwogCisgICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVN
YXAoKSB7IHJldHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMm
IGluc3BlY3RvckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBl
cnM7IH0KKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0
dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBGb250RGVzY3JpcHRp
b24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9udERl
c2NyaXB0aW9uKCk7IH0KKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOyB9CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5z
ZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0
ZS5zZXRFZmZlY3RpdmVab29tKGYpOyB9CisgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29s
IGIpIHsgbV9zdGF0ZS5zZXRUZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0V3JpdGlu
Z01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9kZSh3
cml0aW5nTW9kZSk7IH0KKyAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRp
b24gdGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmll
bnRhdGlvbik7IH0KICAgICAKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKICAgICAKQEAgLTU5MCwxNyArNjExLDE2IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNh
blNoYXJlU3R5bGVXaXRoQ29udHJvbChjb25zdCBTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25z
dDsKKyAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29u
c3Q7CiAKLSAgICB2b2lkIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKFN0YXRlJiwgQ1NTUHJv
cGVydHlJRCwgQ1NTVmFsdWUqKTsKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoU3RhdGUmLCBDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSopOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGFwcGx5U1ZHUHJv
cGVydHkoY29uc3QgU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQg
YXBwbHlTVkdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogI2VuZGlmCiAKLSAg
ICBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3RhdGUmLCBTdHlsZVBl
bmRpbmdJbWFnZSopOwotICAgIHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoU3RhdGUmKTsKKyAgICBQ
YXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2Uq
KTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nSW1hZ2VzKCk7CiAKICAgICBzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyosIHVu
c2lnbmVkIHNpemUpOwogICAgIHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7CkBA
IC02MTgsNyArNjM4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN3ZWVwTWF0Y2hlZFByb3BlcnRp
ZXNDYWNoZShUaW1lcjxTdHlsZVJlc29sdmVyPiopOwogCiAgICAgYm9vbCBjbGFzc05hbWVzQWZm
ZWN0ZWRCeVJ1bGVzKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIHNo
YXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3Qg
U3RhdGUmLCBTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRl
SGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqKSBjb25z
dDsKIAogICAgIHVuc2lnbmVkIG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNl
TGFzdFN3ZWVwOwogCkBAIC02NDUsOCArNjY1LDExIEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3R5
bGVCdWlsZGVyJiBtX3N0eWxlQnVpbGRlcjsKIAogICAgIE93blB0cjxTdHlsZVNjb3BlUmVzb2x2
ZXI+IG1fc2NvcGVSZXNvbHZlcjsKKyAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAgICAg
SW5zcGVjdG9yQ1NTT01XcmFwcGVycyBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7CiAKKyAgICBT
dGF0ZSBtX3N0YXRlOworCiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBmcmll
bmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXMmKTsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoZWRQ
cm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4
IDM3MGJlZGNhN2Q1Mzk1MDcxNTU3Njg1OWI3Yzg3NjE1NjljMzUyMTguLjQ0MmMxOWU2YjUzNzNh
ZjY3YjU2MWFkMmJjYmIyYTAyMDQ4M2NmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMjA2NCw3ICsy
MDY0LDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0
cmluZyYgbmV3Rm9udCkKIAogICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hh
bmRzIGludG8gdGhlIHN0eWxlLgogICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBj
YW52YXMoKS0+c3R5bGVSZXNvbHZlcigpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5Rm9udFBy
b3BlcnR5VG9TdHlsZShuZXdTdHlsZS5nZXQoKSwgcGFyc2VkU3R5bGUuZ2V0KCkpOworICAgIHN0
eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5n
ZXQoKSwgbmV3U3R5bGUuZ2V0KCkpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdldCgpKTsKKyAgICBzdHlsZVJlc29s
dmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250VmFyaWFudCwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudCku
Z2V0KCkpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShD
U1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOworCisgICAgLy8gQXMgZGVzY3JpYmVkIGluIEJV
RzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBl
bnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAorICAg
IC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBh
ZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53
ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCisgICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxs
cyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0
aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQuCisgICAgc3R5bGVSZXNvbHZlci0+dXBk
YXRlRm9udCgpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+dXBkYXRlRm9u
dCgpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOwogCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9mb250
ID0gbmV3U3R5bGUtPmZvbnQoKTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQudXBkYXRl
KHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189996</attachid>
            <date>2013-02-24 20:36:29 -0800</date>
            <delta_ts>2013-02-24 23:02:05 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-110719-20130225133245.patch</filename>
            <type>text/plain</type>
            <size>239130</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzODg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIxMWFhMWEyNjNhYWNi
ZDgyNDIyODJlZDYxZjRiYWMyZjZhZWFmZC4uNjUwMzYwMWUzNmM4ZmU3ZDQzZThkZDRjYTVlODA3
NzVkMGIxYTMzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMSBAQAorMjAxMy0wMi0yNCAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUm9sbG91dCByMTQz
NTU2LCBpdCByZWdyZXNzZWQgaHRtbDUtZnVsbC1yZW5kZXIgcGVyZi4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDcxOQorCisgICAgICAgIFVucmV2
aWV3ZWQgcm9sbG91dC4KKyAgICAgICAgCisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5jdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvTGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OmJhc2ljU2hhcGVGb3JWYWx1ZSk6CisgICAgICAgICogY3NzL0Jhc2ljU2hhcGVGdW5j
dGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0
aFN0eWxlc1Jlc29sdmVkKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5oOgorICAg
ICAgICAoQ1NTR3JhZGllbnRWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6c3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NUb1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6c3R5bGVJbWFnZSk6CisgICAgICAgICogY3NzL0NTU1RvU3R5bGVNYXAuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVG9TdHlsZU1hcDo6Q1NT
VG9TdHlsZU1hcCk6CisgICAgICAgIChDU1NUb1N0eWxlTWFwKToKKyAgICAgICAgKiBjc3MvU1ZH
Q1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjph
cHBseVNWR1Byb3BlcnR5KToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRpbmc6OmFwcGx5SW5oZXJpdFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRpbmc6OmFwcGx5SW5pdGlhbFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlFeHBhbmRpbmc6OmFwcGx5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U6
OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RGVm
YXVsdDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TnVtYmVy
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlTdHlsZUltYWdl
OjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBdXRvOjphcHBs
eUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5QXV0bzo6YXBw
bHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUF1dG86OmFw
cGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmNvbnZlcnRU
b0xlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q2xpcDo6YXBwbHlJbmhl
cml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNsaXA6OmFwcGx5SW5p
dGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDbGlwOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb2xvcjo6YXBwbHlJbmhlcml0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q29sb3I6OmFwcGx5VmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvbG9yOjphcHBseUNvbG9yVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eURpcmVjdGlvbjo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGVuZ3RoOjphcHBseVZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlTdHJpbmc6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlclJhZGl1czo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseUluaGVyaXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBseUluaXRp
YWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5RmlsbExheWVyOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoOjph
cHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250OjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udDo6YXBwbHlJ
bml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnQ6OmFwcGx5
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRTaXplOjphcHBseUlu
aGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFNpemU6OmFw
cGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlGb250U2l6
ZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFdlaWdo
dDo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Rm9udFZhcmlh
bnRMaWdhdHVyZXM6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlczo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOjphcHBseVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZTo6YXBwbHlWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6
YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRl
ckltYWdlTW9kaWZpZXI6OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZTo6YXBwbHlWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6ZW1wdHlGdW5jdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Q291bnRlcjo6YXBwbHlJbmhlcml0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUNvdW50ZXI6OmFwcGx5VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlJbmhlcml0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlJbml0aWFsVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUN1cnNvcjo6YXBwbHlWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5VGV4dEFsaWduOjphcHBseVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RGVjb3JhdGlvbjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5TGluZUhlaWdodDo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UGFnZVNpemU6OmFwcGx5SW5oZXJpdFZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlQYWdlU2l6ZTo6YXBwbHlJbml0
aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVBhZ2VTaXplOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlUZXh0RW1waGFzaXNTdHls
ZTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eVRl
eHRFbXBoYXNpc1N0eWxlOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5bGU6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlQcm9wZXJ0eUFuaW1hdGlvbjo6bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBbmltYXRpb246OmFwcGx5VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbmhlcml0VmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBwbHlJbml0aWFs
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eU91dGxpbmVTdHlsZTo6YXBw
bHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5UmVzaXplOjphcHBseVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlWZXJ0aWNhbEFsaWduOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlBc3BlY3RSYXRpbzo6YXBw
bHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUFzcGVjdFJh
dGlvOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5
QXNwZWN0UmF0aW86OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0
eVpvb206OnJlc2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3Bl
cnR5Wm9vbTo6YXBwbHlJbmhlcml0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9w
ZXJ0eVpvb206OmFwcGx5SW5pdGlhbFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlab29tOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJvcGVydHlE
aXNwbGF5Ojppc1ZhbGlkRGlzcGxheVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5UHJv
cGVydHlEaXNwbGF5OjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVByb3BlcnR5RGlzcGxheTo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXBwbHlQcm9wZXJ0eURpc3BsYXk6OmFwcGx5VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBw
bHlQcm9wZXJ0eUNsaXBQYXRoOjphcHBseVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlFeGNsdXNpb25TaGFwZTo6YXBwbHlWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaGVyaXRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBseUluaXRpYWxWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5SW1hZ2VSZXNvbHV0aW9uOjphcHBs
eVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFByb3BlcnR5SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0
eUhhbmRsZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5
SGFuZGxlcjo6YXBwbHlJbml0aWFsVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlI
YW5kbGVyOjphcHBseVZhbHVlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
b2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c29ydE1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmluaXRF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0Nh
bmRpZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmaW5kU2libGluZ0ZvclN0
eWxlU2hhcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpsb2NhdGVTaGFy
ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjprZXlmcmFtZVN0eWxlc0ZvckFuaW1h
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmRlZmF1bHRTdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpydWxlTWF0Y2hlcyk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmlzTGVmdFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5
bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYWNoZWRPclBlbmRp
bmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Z2VuZXJhdGVk
T3JQZW5kaW5nRnJvbVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNl
dE9yUGVuZGluZ0Zyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpj
dXJzb3JPclBlbmRpbmdGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpjaGVja0Zvclpvb21DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6c2V0Rm9udFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6c3R5bGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Y2Fj
aGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0
ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVS
ZXNvbHZlcjo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJlbnRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpyb290RWxlbWVudFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aGFz
UGFyZW50Tm9kZSk6CisgICAgICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmlzUmlnaHRQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6ZG9jdW1lbnQpOgorICAgICAgICAoU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSZXNvbHZlcjo6Zm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUmVzb2x2ZXI6OnBhcmVudEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpzZXRGb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSZXNvbHZlcjo6c2V0Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpz
ZXRFZmZlY3RpdmVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRl
eHRTaXplQWRqdXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFdyaXRp
bmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldFRleHRPcmllbnRh
dGlvbik6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6
CisKIDIwMTMtMDItMjQgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW01hY10gY2xlYW51cCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24gYW5k
IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBl
RnVuY3Rpb25zLmNwcAppbmRleCBhYTZiNzRmMjliYWZhMjNkYTIwMWNlZTYwZDg4OTBkMDNlMDVj
ZmQzLi4zYThmNzk1M2I2Zjk2YjAxMmY4NDMyMzdhMmUxMmEwZmRmNGNiMTIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiQ1NTQmFzaWNTaGFwZXMuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1h
cHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTk5LDEyICsxMDAsMTIgQEAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hhcGUqIGJh
c2ljU2hhcGUpCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlPFBhc3NSZWZQ
dHI8Q1NTQmFzaWNTaGFwZT4gPihiYXNpY1NoYXBlVmFsdWUucmVsZWFzZSgpKTsKIH0KIAotc3Rh
dGljIExlbmd0aCBjb252ZXJ0VG9MZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NQcmltaXRpdmVWYWx1ZSogdmFsdWUpCitzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xl
bmd0aChjb25zdCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NQcmltaXRpdmVWYWx1
ZSogdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRl
Z2VyQ29udmVyc2lvbiB8IEZpeGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24g
fCBWaWV3cG9ydFBlcmNlbnRhZ2VDb252ZXJzaW9uPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290
RWxlbWVudFN0eWxlKCksIHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgcmV0
dXJuIHZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IEZpeGVk
RmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBWaWV3cG9ydFBlcmNlbnRhZ2VD
b252ZXJzaW9uPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7CiB9
CiAKLVBhc3NSZWZQdHI8QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgY29uc3QgQ1NTQmFzaWNTaGFwZSogYmFzaWNTaGFwZVZh
bHVlKQorUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTQmFzaWNTaGFwZSogYmFzaWNTaGFw
ZVZhbHVlKQogewogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlOwogCkBAIC0xMTMs
MTQgKzExNCwxNCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShj
b25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIGNvbgogICAgICAgICBjb25zdCBDU1NC
YXNpY1NoYXBlUmVjdGFuZ2xlKiByZWN0VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NCYXNp
Y1NoYXBlUmVjdGFuZ2xlICo+KGJhc2ljU2hhcGVWYWx1ZSk7CiAgICAgICAgIFJlZlB0cjxCYXNp
Y1NoYXBlUmVjdGFuZ2xlPiByZWN0ID0gQmFzaWNTaGFwZVJlY3RhbmdsZTo6Y3JlYXRlKCk7CiAK
LSAgICAgICAgcmVjdC0+c2V0WChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+eCgp
KSk7Ci0gICAgICAgIHJlY3QtPnNldFkoY29udmVydFRvTGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUt
PnkoKSkpOwotICAgICAgICByZWN0LT5zZXRXaWR0aChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJl
Y3RWYWx1ZS0+d2lkdGgoKSkpOwotICAgICAgICByZWN0LT5zZXRIZWlnaHQoY29udmVydFRvTGVu
Z3RoKHN0YXRlLCByZWN0VmFsdWUtPmhlaWdodCgpKSk7CisgICAgICAgIHJlY3QtPnNldFgoY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eCgpKSk7CisgICAgICAgIHJl
Y3QtPnNldFkoY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RWYWx1ZS0+eSgpKSk7
CisgICAgICAgIHJlY3QtPnNldFdpZHRoKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBy
ZWN0VmFsdWUtPndpZHRoKCkpKTsKKyAgICAgICAgcmVjdC0+c2V0SGVpZ2h0KGNvbnZlcnRUb0xl
bmd0aChzdHlsZVJlc29sdmVyLCByZWN0VmFsdWUtPmhlaWdodCgpKSk7CiAgICAgICAgIGlmIChy
ZWN0VmFsdWUtPnJhZGl1c1goKSkgewotICAgICAgICAgICAgcmVjdC0+c2V0Q29ybmVyUmFkaXVz
WChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3RWYWx1ZS0+cmFkaXVzWCgpKSk7CisgICAgICAg
ICAgICByZWN0LT5zZXRDb3JuZXJSYWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVy
LCByZWN0VmFsdWUtPnJhZGl1c1goKSkpOwogICAgICAgICAgICAgaWYgKHJlY3RWYWx1ZS0+cmFk
aXVzWSgpKQotICAgICAgICAgICAgICAgIHJlY3QtPnNldENvcm5lclJhZGl1c1koY29udmVydFRv
TGVuZ3RoKHN0YXRlLCByZWN0VmFsdWUtPnJhZGl1c1koKSkpOworICAgICAgICAgICAgICAgIHJl
Y3QtPnNldENvcm5lclJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3RW
YWx1ZS0+cmFkaXVzWSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgYmFzaWNTaGFwZSA9IHJlY3Qu
cmVsZWFzZSgpOwogICAgICAgICBicmVhazsKQEAgLTEyOSw5ICsxMzAsOSBAQCBQYXNzUmVmUHRy
PEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIGNvbgogICAgICAgICBjb25zdCBDU1NCYXNpY1NoYXBlQ2lyY2xlKiBjaXJjbGVW
YWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0Jhc2ljU2hhcGVDaXJjbGUgKj4oYmFzaWNTaGFw
ZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVDaXJjbGU+IGNpcmNsZSA9IEJhc2lj
U2hhcGVDaXJjbGU6OmNyZWF0ZSgpOwogCi0gICAgICAgIGNpcmNsZS0+c2V0Q2VudGVyWChjb252
ZXJ0VG9MZW5ndGgoc3RhdGUsIGNpcmNsZVZhbHVlLT5jZW50ZXJYKCkpKTsKLSAgICAgICAgY2ly
Y2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgY2lyY2xlVmFsdWUtPmNlbnRl
clkoKSkpOwotICAgICAgICBjaXJjbGUtPnNldFJhZGl1cyhjb252ZXJ0VG9MZW5ndGgoc3RhdGUs
IGNpcmNsZVZhbHVlLT5yYWRpdXMoKSkpOworICAgICAgICBjaXJjbGUtPnNldENlbnRlclgoY29u
dmVydFRvTGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIGNpcmNsZVZhbHVlLT5jZW50ZXJYKCkpKTsKKyAg
ICAgICAgY2lyY2xlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBj
aXJjbGVWYWx1ZS0+Y2VudGVyWSgpKSk7CisgICAgICAgIGNpcmNsZS0+c2V0UmFkaXVzKGNvbnZl
cnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBjaXJjbGVWYWx1ZS0+cmFkaXVzKCkpKTsKIAogICAg
ICAgICBiYXNpY1NoYXBlID0gY2lyY2xlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0x
NDAsMTAgKzE0MSwxMCBAQCBQYXNzUmVmUHRyPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVGb3JWYWx1
ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIGNvbgogICAgICAgICBjb25zdCBD
U1NCYXNpY1NoYXBlRWxsaXBzZSogZWxsaXBzZVZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NT
QmFzaWNTaGFwZUVsbGlwc2UgKj4oYmFzaWNTaGFwZVZhbHVlKTsKICAgICAgICAgUmVmUHRyPEJh
c2ljU2hhcGVFbGxpcHNlPiBlbGxpcHNlID0gQmFzaWNTaGFwZUVsbGlwc2U6OmNyZWF0ZSgpOwog
Ci0gICAgICAgIGVsbGlwc2UtPnNldENlbnRlclgoY29udmVydFRvTGVuZ3RoKHN0YXRlLCBlbGxp
cHNlVmFsdWUtPmNlbnRlclgoKSkpOwotICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZl
cnRUb0xlbmd0aChzdGF0ZSwgZWxsaXBzZVZhbHVlLT5jZW50ZXJZKCkpKTsKLSAgICAgICAgZWxs
aXBzZS0+c2V0UmFkaXVzWChjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIGVsbGlwc2VWYWx1ZS0+cmFk
aXVzWCgpKSk7Ci0gICAgICAgIGVsbGlwc2UtPnNldFJhZGl1c1koY29udmVydFRvTGVuZ3RoKHN0
YXRlLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50
ZXJYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclgo
KSkpOworICAgICAgICBlbGxpcHNlLT5zZXRDZW50ZXJZKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJl
c29sdmVyLCBlbGxpcHNlVmFsdWUtPmNlbnRlclkoKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRS
YWRpdXNYKGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1
c1goKSkpOworICAgICAgICBlbGxpcHNlLT5zZXRSYWRpdXNZKGNvbnZlcnRUb0xlbmd0aChzdHls
ZVJlc29sdmVyLCBlbGxpcHNlVmFsdWUtPnJhZGl1c1koKSkpOwogCiAgICAgICAgIGJhc2ljU2hh
cGUgPSBlbGxpcHNlLnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTUsNyArMTU2LDcg
QEAgUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBjb24KICAgICAgICAgcG9seWdvbi0+c2V0V2luZFJ1bGUo
cG9seWdvblZhbHVlLT53aW5kUnVsZSgpKTsKICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gPiYgdmFsdWVzID0gcG9seWdvblZhbHVlLT52YWx1ZXMoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7IGkgKz0gMikKLSAg
ICAgICAgICAgIHBvbHlnb24tPmFwcGVuZFBvaW50KGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgdmFs
dWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0YXRlLCB2YWx1ZXMuYXQoaSArIDEp
LmdldCgpKSk7CisgICAgICAgICAgICBwb2x5Z29uLT5hcHBlbmRQb2ludChjb252ZXJ0VG9MZW5n
dGgoc3R5bGVSZXNvbHZlciwgdmFsdWVzLmF0KGkpLmdldCgpKSwgY29udmVydFRvTGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHZhbHVlcy5hdChpICsgMSkuZ2V0KCkpKTsKIAogICAgICAgICBiYXNpY1No
YXBlID0gcG9seWdvbi5yZWxlYXNlKCk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9CYXNpY1NoYXBlRnVuY3Rpb25zLmgKaW5kZXggZTU2MzIwNjg3NjhhNjcwMWY4MDNmYjJhZmVm
NTQ4OTg1MzFkMTFkMS4uZDM2MDdlOTA5OTI5YzM0MWIwYzA2OWQzZTVjZWI2MWYxM2YxMTcxOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5oCkBAIC0zMCw3ICszMCw2
IEBACiAjaWZuZGVmIEJhc2ljU2hhcGVGdW5jdGlvbnNfaAogI2RlZmluZSBCYXNpY1NoYXBlRnVu
Y3Rpb25zX2gKIAotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw5ICszNywxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCYXNpY1NoYXBlOwogY2xhc3MgQ1NTQmFzaWNTaGFwZTsK
IGNsYXNzIENTU1ZhbHVlOworY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gdmFsdWVGb3JCYXNpY1NoYXBlKGNvbnN0IEJhc2ljU2hhcGUqKTsKLVBhc3NSZWZQdHI8
QmFzaWNTaGFwZT4gYmFzaWNTaGFwZUZvclZhbHVlKGNvbnN0IFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiwgY29uc3QgQ1NTQmFzaWNTaGFwZSopOworUGFzc1JlZlB0cjxCYXNpY1NoYXBlPiBiYXNpY1No
YXBlRm9yVmFsdWUoY29uc3QgU3R5bGVSZXNvbHZlciosIGNvbnN0IENTU0Jhc2ljU2hhcGUqKTsK
IAogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKaW5kZXgg
ZTU2NWVmZjVhZTQxODgzNmY1ZGVkMjE0Nzc5YTA0OGNlZWRiOThkYi4uOGYxNjhhYjcyY2UzMDc1
NmRlMDM0MTc4NGRmODAwZmQzNzYwYmYyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVu
dFZhbHVlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkludFNpemVIYXNoLmgiCiAj
aW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVt
ZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtMTE0LDExICsxMTUsMTEg
QEAgc3RydWN0IEdyYWRpZW50U3RvcCB7CiAgICAgeyB9CiB9OwogCi1QYXNzUmVmUHRyPENTU0dy
YWRpZW50VmFsdWU+IENTU0dyYWRpZW50VmFsdWU6OmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKK1Bhc3NSZWZQdHI8Q1NTR3JhZGllbnRWYWx1
ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlcikKIHsKICAgICBib29sIGRlcml2ZWQgPSBmYWxzZTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zdG9wcy5zaXplKCk7IGkrKykKLSAgICAgICAgaWYg
KFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlSXNEZXJpdmVkRnJvbUVsZW1l
bnQobV9zdG9wc1tpXS5tX2NvbG9yLmdldCgpKSkgeworICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci0+Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChtX3N0b3BzW2ld
Lm1fY29sb3IuZ2V0KCkpKSB7CiAgICAgICAgICAgICBtX3N0b3BzW2ldLm1fY29sb3JJc0Rlcml2
ZWRGcm9tRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICBkZXJpdmVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM3LDcgKzEzOCw3IEBAIFBhc3NSZWZQdHI8Q1NTR3JhZGllbnRW
YWx1ZT4gQ1NTR3JhZGllbnRWYWx1ZTo6Z3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVS
CiAgICAgfQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC0+bV9zdG9wcy5z
aXplKCk7IGkrKykKLSAgICAgICAgcmVzdWx0LT5tX3N0b3BzW2ldLm1fcmVzb2x2ZWRDb2xvciA9
IFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCByZXN1bHQtPm1f
c3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CisgICAgICAgIHJlc3VsdC0+bV9zdG9wc1tpXS5tX3Jl
c29sdmVkQ29sb3IgPSBzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShyZXN1
bHQtPm1fc3RvcHNbaV0ubV9jb2xvci5nZXQoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCmluZGV4IDQ1OTgxZTJl
NTZhZmUzMWMxZjg3NmY4MDE0YTBlMmE4Y2Q4OGQxYTQuLjhlMWM3N2I2NDExMGQ5OTY3ZDM3MjFi
MWNhZmMwNWYyOWY4MTE1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFk
aWVudFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaApA
QCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgog
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAg
LTkwLDcgKzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wga25vd25Ub0JlT3BhcXVlKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0OwogCiAgICAgdm9pZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291
cmNlTG9hZGVyKikgeyB9Ci0gICAgUGFzc1JlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiBncmFkaWVu
dFdpdGhTdHlsZXNSZXNvbHZlZChTdHlsZVJlc29sdmVyOjpTdGF0ZSYpOworICAgIFBhc3NSZWZQ
dHI8Q1NTR3JhZGllbnRWYWx1ZT4gZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQoU3R5bGVSZXNv
bHZlciopOwogCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTR3JhZGllbnRWYWx1ZShDbGFzc1R5cGUgY2xh
c3NUeXBlLCBDU1NHcmFkaWVudFJlcGVhdCByZXBlYXQsIENTU0dyYWRpZW50VHlwZSBncmFkaWVu
dFR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKaW5kZXggZmRjMDRjYWZkMzA2
ZGE5NjgwMGUwYWUzNmFlODc2NjI3N2MxZmJmOS4uNzIxZmQ4ZTkwMWI1ZWJiZjFjZjZjZDc0OWZh
OGY1M2YxY2ZiYTQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVN
YXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcApAQCAtNDMs
MjIgKzQzLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU3R5bGUqIENTU1RvU3R5
bGVNYXA6OnN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9zdGF0ZS5zdHlsZSgpOworICAg
IHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZSgpOwogfQogICAgIAogUmVuZGVyU3R5bGUqIENTU1Rv
U3R5bGVNYXA6OnJvb3RFbGVtZW50U3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3N0YXRl
LnJvb3RFbGVtZW50U3R5bGUoKTsKKyAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRT
dHlsZSgpOwogfQogCiBib29sIENTU1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCk7CisgICAgcmV0dXJuIG1f
cmVzb2x2ZXItPnVzZVNWR1pvb21SdWxlcygpOwogfQogICAgIAogUGFzc1JlZlB0cjxTdHlsZUlt
YWdlPiBDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwg
Q1NTVmFsdWUqIHZhbHVlKQogewotICAgIHJldHVybiBTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdl
KG1fc3RhdGUsIHByb3BlcnR5SWQsIHZhbHVlKTsKKyAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5
bGVJbWFnZShwcm9wZXJ0eUlkLCB2YWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFw
RmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiBsYXllciwgQ1NTVmFsdWUq
IHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5kZXggN2Y4NzIwYTQ4NmM5MmNh
NGMzMGFmNjQzNGRlOGY5OGRiN2UyZGJkMy4uM2NiMTIxNTBhODQzZThhNDhlMzlhNWI1NDEzNTc1
OTI5NGM0MTY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCkBAIC0yNCw3ICsyNCw2
IEBACiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiTGVuZ3RoQm94
LmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zMyw2ICszMiw3IEBAIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgQW5pbWF0aW9uOwogY2xh
c3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHlsZUltYWdlOworY2xhc3MgU3R5bGVSZXNvbHZlcjsK
IGNsYXNzIE5pbmVQaWVjZUltYWdlOwogCiBjbGFzcyBDU1NUb1N0eWxlTWFwIHsKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgQ1NTVG9TdHlsZU1hcCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAKIHB1YmxpYzoKLSAgICBDU1NUb1N0eWxlTWFwKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSkgOiBtX3N0YXRlKHN0YXRlKSB7IH0KKyAgICBDU1NUb1N0eWxlTWFwKFN0eWxlUmVzb2x2
ZXIqIHJlc29sdmVyKSA6IG1fcmVzb2x2ZXIocmVzb2x2ZXIpIHsgfQogCiAgICAgdm9pZCBtYXBG
aWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxsTGF5ZXIqLCBDU1NWYWx1ZSopOwogICAg
IHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsK
QEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBkdXJpbmcgdGhlIHJlc29sdmUuCiAg
ICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKik7CiAKLSAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgbV9zdGF0ZTsKKyAgICBTdHlsZVJl
c29sdmVyKiBtX3Jlc29sdmVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NWR0NTU1N0eWxlU2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1N0
eWxlU2VsZWN0b3IuY3BwCmluZGV4IDkyNmM2OTFhOGJmNDY4NmRhMThjOTVhNDhjNjEzYjIxZTY2
Y2I2NmYuLmQxZTljNjBkM2I5ZGVkN2UyMGZjNzY1ZTljNzdhNDMxNmUzYjZkMTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NTdHlsZVNlbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAKQEAgLTEwMiwxMyArMTAyLDE0
IEBAIHN0YXRpYyBDb2xvciBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKFNWR0NvbG9yKiBzdmdD
b2xvciwgY29uc3QgQ29sb3ImIGZnQ29sb3IpCiAgICAgcmV0dXJuIGNvbG9yOwogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoY29uc3QgU3RhdGUmIHN0YXRlLCBDU1NQ
cm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewogICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gMDsK
ICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcHJpbWl0aXZlVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKIAorICAgIGNvbnN0
IFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgU1ZHUmVuZGVyU3R5bGUqIHN2Z3N0eWxlID0g
c3RhdGUuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKIAogICAgIGJvb2wgaXNJbmhlcml0ID0g
c3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVlLT5pc0luaGVyaXRlZFZhbHVlKCk7CkBAIC0yMzAs
MTYgKzIzMSwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5U1ZHUHJvcGVydHkoY29uc3Qg
U3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYQogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoaXNJbmhlcml0KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5
bGUqIHN2Z1BhcmVudFN0eWxlID0gc3RhdGUucGFyZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAg
ICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLT5maWxs
UGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLT5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRT
dHlsZS0+ZmlsbFBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
LCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludFR5cGUo
KSwgc3ZnUGFyZW50U3R5bGUtPmZpbGxQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLT5maWxs
UGFpbnRVcmkoKSwgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkgewotICAgICAgICAgICAgICAgIHN2Z3N0
eWxlLT5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCks
IFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
KCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQ
YWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdS
ZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUtPmlzU1ZH
UGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1BhaW50KiBzdmdQYWludCA9IHN0YXRpY19j
YXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRGaWxs
UGFpbnQoc3ZnUGFpbnQtPnBhaW50VHlwZSgpLCBjb2xvckZyb21TVkdDb2xvckNTU1ZhbHVlKHN2
Z1BhaW50LCBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpKSwgc3ZnUGFpbnQtPnVyaSgpLCBzdGF0ZS5h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBzdmdzdHlsZS0+c2V0RmlsbFBhaW50KHN2
Z1BhaW50LT5wYWludFR5cGUoKSwgY29sb3JGcm9tU1ZHQ29sb3JDU1NWYWx1ZShzdmdQYWludCwg
c3RhdGUuc3R5bGUoKS0+Y29sb3IoKSksIHN2Z1BhaW50LT51cmkoKSwgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjQ3LDE2ICsyNDgs
MTYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVNWR1Byb3BlcnR5KGNvbnN0IFN0YXRlJiBz
dGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmEKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KGlzSW5oZXJpdCkgewogICAgICAgICAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdQ
YXJlbnRTdHlsZSA9IHN0YXRlLnBhcmVudFN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAg
ICAgICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWlu
dFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUtPnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5
bGUtPnN0cm9rZVBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
LCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAg
ICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYXJlbnRTdHlsZS0+c3Ryb2tlUGFpbnRU
eXBlKCksIHN2Z1BhcmVudFN0eWxlLT5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxl
LT5zdHJva2VQYWludFVyaSgpLCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAg
ICAgc3Znc3R5bGUtPnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tl
UGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xvcigpLCBT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCksIHN0YXRlLmFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpOworICAgICAgICAgICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0
cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgp
LCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkgewogICAgICAgICAgICAgICAgIFNWR1Bh
aW50KiBzdmdQYWludCA9IHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odmFsdWUpOwotICAgICAgICAg
ICAgICAgIHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNv
bG9yRnJvbVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkp
LCBzdmdQYWludC0+dXJpKCksIHN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBz
dGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgICAgICAgICAgICAg
IHN2Z3N0eWxlLT5zZXRTdHJva2VQYWludChzdmdQYWludC0+cGFpbnRUeXBlKCksIGNvbG9yRnJv
bVNWR0NvbG9yQ1NTVmFsdWUoc3ZnUGFpbnQsIHN0YXRlLnN0eWxlKCktPmNvbG9yKCkpLCBzdmdQ
YWludC0+dXJpKCksIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBhcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTU2OSw3ICs1NzAsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
U1ZHUHJvcGVydHkoY29uc3QgU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYQog
ICAgICAgICAgICAgaW50IGJsdXIgPSBpdGVtLT5ibHVyID8gaXRlbS0+Ymx1ci0+Y29tcHV0ZUxl
bmd0aDxpbnQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSkgOiAwOwog
ICAgICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgICAgICBpZiAoaXRlbS0+Y29sb3IpCi0g
ICAgICAgICAgICAgICAgY29sb3IgPSBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVW
YWx1ZShzdGF0ZSwgaXRlbS0+Y29sb3IuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yID0g
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoaXRlbS0+Y29sb3IuZ2V0KCkpOwogCiAgICAgICAgICAg
ICAvLyAtd2Via2l0LXN2Zy1zaGFkb3cgZG9lcyBzaG91bGQgbm90IGhhdmUgYSBzcHJlYWQgb3Ig
c3R5bGUKICAgICAgICAgICAgIEFTU0VSVCghaXRlbS0+c3ByZWFkKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlQnVpbGRlci5jcHAKaW5kZXggMWJiNjEwNGVmOWUyYTY4ZTM3YWFlMmQxY2M4MGRkMjFiYjQy
MjgxZi4uNGQ4NzhiMmU5YjMyNWUyNWVlMzZhZDhjYmYyYjIwMGYyZjM4MjEwYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJSZW5k
ZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTYwLDcgKzYxLDcgQEAgY2xh
c3MgQXBwbHlQcm9wZXJ0eUV4cGFuZGluZyB7CiBwdWJsaWM6CiAKICAgICB0ZW1wbGF0ZSA8Q1NT
UHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisg
ICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7CiAgICAgICAgIGlm
IChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC02OCwy
MCArNjksMjAgQEAgcHVibGljOgogICAgICAgICBjb25zdCBTdHlsZUJ1aWxkZXImIHRhYmxlID0g
U3R5bGVCdWlsZGVyOjpzaGFyZWRTdHlsZUJ1aWxkZXIoKTsKICAgICAgICAgY29uc3QgUHJvcGVy
dHlIYW5kbGVyJiBoYW5kbGVyID0gdGFibGUucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICAgICAg
aWYgKGhhbmRsZXIuaXNWYWxpZCgpKQotICAgICAgICAgICAgaGFuZGxlci5hcHBseUluaGVyaXRW
YWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgICAgICBoYW5kbGVyLmFwcGx5SW5oZXJp
dFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAg
ICB7Ci0gICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3RhdGUpOwot
ICAgICAgICBhcHBseUluaGVyaXRWYWx1ZTx0d28+KHByb3BlcnR5SUQsIHN0YXRlKTsKLSAgICAg
ICAgYXBwbHlJbmhlcml0VmFsdWU8dGhyZWU+KHByb3BlcnR5SUQsIHN0YXRlKTsKLSAgICAgICAg
YXBwbHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3RhdGUpOwotICAgICAgICBhcHBs
eUluaGVyaXRWYWx1ZTxmaXZlPihwcm9wZXJ0eUlELCBzdGF0ZSk7CisgICAgICAgIGFwcGx5SW5o
ZXJpdFZhbHVlPG9uZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFwcGx5
SW5oZXJpdFZhbHVlPHR3bz4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIGFw
cGx5SW5oZXJpdFZhbHVlPHRocmVlPihwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAg
ICAgYXBwbHlJbmhlcml0VmFsdWU8Zm91cj4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7Cisg
ICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlPGZpdmU+KHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIp
OwogICAgIH0KIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlJ
bml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQogICAgIHsKICAgICAgICAgaWYgKGlkID09IENTU1Byb3BlcnR5SW52YWxpZCkK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTg5LDIwICs5MCwyMCBAQCBwdWJsaWM6CiAgICAgICAg
IGNvbnN0IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVp
bGRlcigpOwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5w
cm9wZXJ0eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAg
ICAgICAgICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAg
ICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNv
bHZlcik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgYXBwbHlJbml0aWFsVmFs
dWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPHR3
bz4ocHJvcGVydHlJRCwgc3RhdGUpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTx0aHJlZT4o
cHJvcGVydHlJRCwgc3RhdGUpOwotICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmb3VyPihwcm9w
ZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIGFwcGx5SW5pdGlhbFZhbHVlPGZpdmU+KHByb3BlcnR5
SUQsIHN0YXRlKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8b25lPihwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dHdvPihwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8dGhyZWU+KHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaXRpYWxWYWx1ZTxmb3VyPihw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFsVmFsdWU8Zml2
ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CiAgICAgfQogCiAgICAgdGVtcGxhdGUgPENT
U1Byb3BlcnR5SUQgaWQ+Ci0gICAgc3RhdGljIGlubGluZSB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xMTAsMTkgKzExMSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0
IFN0eWxlQnVpbGRlciYgdGFibGUgPSBTdHlsZUJ1aWxkZXI6OnNoYXJlZFN0eWxlQnVpbGRlcigp
OwogICAgICAgICBjb25zdCBQcm9wZXJ0eUhhbmRsZXImIGhhbmRsZXIgPSB0YWJsZS5wcm9wZXJ0
eUhhbmRsZXIoaWQpOwogICAgICAgICBpZiAoaGFuZGxlci5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICBoYW5kbGVyLmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKKyAgICAgICAg
ICAgIGhhbmRsZXIuYXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAoIWV4cGFuZFZhbHVlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGFwcGx5VmFs
dWU8b25lPihwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPHR3
bz4ocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTx0aHJlZT4o
cHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKLSAgICAgICAgYXBwbHlWYWx1ZTxmb3VyPihwcm9w
ZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBhcHBseVZhbHVlPGZpdmU+KHByb3BlcnR5
SUQsIHN0YXRlLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8b25lPihwcm9wZXJ0eUlELCBz
dHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dHdvPihwcm9wZXJ0eUlE
LCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8dGhyZWU+KHByb3Bl
cnR5SUQsIHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZTxmb3VyPihw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWU8Zml2
ZT4ocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwgdmFsdWUpOwogICAgIH0KICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIo
JmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQog
fTsKQEAgLTEzMyw5ICsxMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUo
UmVuZGVyU3R5bGUqIHN0eWxlLCBTZXR0ZXJUeXBlIHZhbHVlKSB7IChzdHlsZS0+KnNldHRlckZ1
bmN0aW9uKSh2YWx1ZSk7IH0KICAgICBzdGF0aWMgR2V0dGVyVHlwZSB2YWx1ZShSZW5kZXJTdHls
ZSogc3R5bGUpIHsgcmV0dXJuIChzdHlsZS0+KmdldHRlckZ1bmN0aW9uKSgpOyB9CiAgICAgc3Rh
dGljIEluaXRpYWxUeXBlIGluaXRpYWwoKSB7IHJldHVybiAoKmluaXRpYWxGdW5jdGlvbikoKTsg
fQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkgeyBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCB2YWx1ZShz
dGF0ZS5wYXJlbnRTdHlsZSgpKSk7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIHsgc2V0VmFsdWUo
c3RhdGUuc3R5bGUoKSwgaW5pdGlhbCgpKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmLCBDU1NWYWx1ZSopIHsgfQorICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXIqIHN0eWxlUmVzb2x2ZXIpIHsgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgdmFs
dWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZl
cikgeyBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBpbml0aWFsKCkpOyB9CisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiwgQ1NT
VmFsdWUqKSB7IH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7
IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFs
VmFsdWUsICZhcHBseVZhbHVlKTsgfQogfTsKIApAQCAtMTQzLDEwICsxNDQsMTAgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIEdldHRlclR5cGUsIEdldHRlclR5cGUgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
RnVuY3Rpb24pKCkgY29uc3QKIGNsYXNzIEFwcGx5UHJvcGVydHlEZWZhdWx0IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFNldHRlclR5cGUg
dmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRl
LCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgICAgIHNl
dFZhbHVlKHN0YXRlLnN0eWxlKCksICpzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCAqc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOwogICAgIH0KICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE1OSwxNiArMTYwLDE2
IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBOdW1iZXJUeXBlLCBOdW1iZXJUeXBlIChSZW5kZXJTdHls
ZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0CiBjbGFzcyBBcHBseVByb3BlcnR5TnVtYmVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIE51
bWJlclR5cGUgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3Rh
dGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZh
bHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgIGlm
IChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBpZE1hcHNUb01pbnVzT25lKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgLTEpOworICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgLTEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBz
ZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZS0+Z2V0VmFsdWU8TnVtYmVyVHlw
ZT4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRWYWx1ZTxOdW1iZXJU
eXBlPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTE4MCw3ICsxODEsNyBA
QCBwdWJsaWM6CiB0ZW1wbGF0ZSA8U3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVu
Y3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4pLCBTdHlsZUltYWdlKiAoKmluaXRpYWxGdW5jdGlvbikoKSwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eT4KIGNsYXNzIEFwcGx5UHJvcGVydHlTdHlsZUltYWdlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0ZS5zdHlsZSgpLT4q
c2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIHByb3BlcnR5
LCB2YWx1ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVz
b2x2ZXItPnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFn
ZShwcm9wZXJ0eSwgdmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpCiAgICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5
UHJvcGVydHlEZWZhdWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0
aW9uPjo6Y3JlYXRlSGFuZGxlcigpOwpAQCAtMTk3LDI4ICsxOTgsMjggQEAgcHVibGljOgogICAg
IHN0YXRpYyBib29sIGhhc0F1dG8oUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUt
PipoYXNBdXRvRnVuY3Rpb24pKCk7IH0KICAgICBzdGF0aWMgdm9pZCBzZXRBdXRvKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyAoc3R5bGUtPipzZXRBdXRvRnVuY3Rpb24pKCk7IH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgaWYgKGhh
c0F1dG8oc3RhdGUucGFyZW50U3R5bGUoKSkpCi0gICAgICAgICAgICBzZXRBdXRvKHN0YXRlLnN0
eWxlKCkpOworICAgICAgICBpZiAoaGFzQXV0byhzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
KSkKKyAgICAgICAgICAgIHNldEF1dG8oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIHZhbHVlKHN0YXRlLnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCksIHZhbHVlKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCkpKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
OjpTdGF0ZSYgc3RhdGUpIHsgc2V0QXV0byhzdGF0ZS5zdHlsZSgpKTsgfQorICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIpIHsgc2V0QXV0byhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsgfQogCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1By
b3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IGF1dG9JZGVudGl0eSkKLSAgICAgICAgICAgIHNl
dEF1dG8oc3RhdGUuc3R5bGUoKSk7CisgICAgICAgICAgICBzZXRBdXRvKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCkpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZVR5cGUgPT0gTnVtYmVyKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksICpwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlVHlwZSA9PSBDb21wdXRlTGVuZ3RoKQotICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4o
c3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSk7CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5
SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyByZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUlu
aGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZhbHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTIyNiwy
NyArMjI3LDI3IEBAIHB1YmxpYzoKIAogY2xhc3MgQXBwbHlQcm9wZXJ0eUNsaXAgewogcHJpdmF0
ZToKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0xlbmd0aChTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgTGVuZ3RoIGNv
bnZlcnRUb0xlbmd0aChTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NQcmltaXRpdmVW
YWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0
aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBGcmFjdGlvbkNv
bnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICByZXR1
cm4gdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2Vu
dENvbnZlcnNpb24gfCBGcmFjdGlvbkNvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgIH0KIHB1YmxpYzoKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpCiAgICAgewotICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdGF0ZS5w
YXJlbnRTdHlsZSgpOworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBzdHlsZVJl
c29sdmVyLT5wYXJlbnRTdHlsZSgpOwogICAgICAgICBpZiAoIXBhcmVudFN0eWxlLT5oYXNDbGlw
KCkpCi0gICAgICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3Rh
dGUpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKHBhcmVudFN0eWxlLT5jbGlwVG9w
KCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSwg
cGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXND
bGlwKHRydWUpOworICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRD
bGlwKHBhcmVudFN0eWxlLT5jbGlwVG9wKCksIHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSwgcGFy
ZW50U3R5bGUtPmNsaXBCb3R0b20oKSwgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkpOworICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5n
dGgoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAgICAg
ICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVu
Z3RoKCksIExlbmd0aCgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFz
Q2xpcChmYWxzZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI1NCwxNSArMjU1
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYg
KFJlY3QqIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0UmVjdFZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIExlbmd0aCB0b3AgPSBjb252ZXJ0VG9MZW5ndGgoc3RhdGUsIHJlY3QtPnRvcCgpKTsKLSAg
ICAgICAgICAgIExlbmd0aCByaWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdGF0ZSwgcmVjdC0+cmln
aHQoKSk7Ci0gICAgICAgICAgICBMZW5ndGggYm90dG9tID0gY29udmVydFRvTGVuZ3RoKHN0YXRl
LCByZWN0LT5ib3R0b20oKSk7Ci0gICAgICAgICAgICBMZW5ndGggbGVmdCA9IGNvbnZlcnRUb0xl
bmd0aChzdGF0ZSwgcmVjdC0+bGVmdCgpKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgICAgICBMZW5ndGggdG9wID0gY29udmVydFRv
TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHJlY3QtPnRvcCgpKTsKKyAgICAgICAgICAgIExlbmd0aCBy
aWdodCA9IGNvbnZlcnRUb0xlbmd0aChzdHlsZVJlc29sdmVyLCByZWN0LT5yaWdodCgpKTsKKyAg
ICAgICAgICAgIExlbmd0aCBib3R0b20gPSBjb252ZXJ0VG9MZW5ndGgoc3R5bGVSZXNvbHZlciwg
cmVjdC0+Ym90dG9tKCkpOworICAgICAgICAgICAgTGVuZ3RoIGxlZnQgPSBjb252ZXJ0VG9MZW5n
dGgoc3R5bGVSZXNvbHZlciwgcmVjdC0+bGVmdCgpKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnN0eWxlKCktPnNldENsaXAodG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KTsKKyAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0NsaXAodHJ1ZSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0g
ICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVu
Z3RoKCksIExlbmd0aCgpKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0NsaXAo
ZmFsc2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0Q2xpcChMZW5n
dGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMjgwLDQwICsyODEsNDAgQEAgdGVtcGxhdGUgPENvbG9ySW5oZXJpdCBpbmhlcml0Q29sb3JG
cm9tUGFyZW50LAogICAgICAgICAgIENvbG9yICgqaW5pdGlhbEZ1bmN0aW9uKSgpID0gJmRlZmF1
bHRJbml0aWFsQ29sb3I+CiBjbGFzcyBBcHBseVByb3BlcnR5Q29sb3IgewogcHVibGljOgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2
ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsKICAgICAgICAg
Ly8gVmlzaXRlZCBsaW5rIHN0eWxlIGNhbiBuZXZlciBleHBsaWNpdGx5IGluaGVyaXQgZnJvbSBw
YXJlbnQgdmlzaXRlZCBsaW5rIHN0eWxlIHNvIG5vIHNlcGFyYXRlIGdldHRlcnMgYXJlIG5lZWRl
ZC4KLSAgICAgICAgQ29sb3IgY29sb3IgPSAoc3RhdGUucGFyZW50U3R5bGUoKS0+KmdldHRlckZ1
bmN0aW9uKSgpOwotICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3RhdGUsIGNvbG9yLmlzVmFsaWQo
KSA/IGNvbG9yIDogKHN0YXRlLnBhcmVudFN0eWxlKCktPipkZWZhdWx0RnVuY3Rpb24pKCkpOwor
ICAgICAgICBDb2xvciBjb2xvciA9IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4qZ2V0
dGVyRnVuY3Rpb24pKCk7CisgICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBj
b2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT4q
ZGVmYXVsdEZ1bmN0aW9uKSgpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIGFwcGx5Q29sb3JWYWx1ZShzdGF0ZSwg
aW5pdGlhbEZ1bmN0aW9uKCkpOworICAgICAgICBhcHBseUNvbG9yVmFsdWUoc3R5bGVSZXNvbHZl
ciwgaW5pdGlhbEZ1bmN0aW9uKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUs
IENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZh
bHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgICAgICBp
ZiAoaW5oZXJpdENvbG9yRnJvbVBhcmVudCAmJiBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikKLSAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHBy
b3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgICAgIGFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5
SUQsIHN0eWxlUmVzb2x2ZXIpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzdGF0
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICAoc3RhdGUu
c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRp
dmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUpKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgKHN0YXRl
LnN0eWxlKCktPip2aXNpdGVkTGlua1NldHRlckZ1bmN0aW9uKShTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShzdGF0ZSwgcHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRM
aW5rICovIHRydWUpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+KnNldHRlckZ1bmN0aW9uKShzdHlsZVJlc29sdmVyLT5jb2xvckZyb21QcmltaXRpdmVW
YWx1ZShwcmltaXRpdmVWYWx1ZSkpOworICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXItPmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAgICAgICAgICAoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKHN0eWxlUmVzb2x2
ZXItPmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVk
TGluayAqLyB0cnVlKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUNvbG9yVmFsdWUoU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBjb25zdCBDb2xvciYgY29s
b3IpCisgICAgc3RhdGljIHZvaWQgYXBwbHlDb2xvclZhbHVlKFN0eWxlUmVzb2x2ZXIqIHN0eWxl
UmVzb2x2ZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICB7Ci0gICAgICAgIGlmIChzdGF0ZS5h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAgICAgICAgICAgIChzdGF0ZS5zdHlsZSgp
LT4qc2V0dGVyRnVuY3Rpb24pKGNvbG9yKTsKLSAgICAgICAgaWYgKHN0YXRlLmFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAgICAgIChzdGF0ZS5zdHlsZSgpLT4qdmlz
aXRlZExpbmtTZXR0ZXJGdW5jdGlvbikoY29sb3IpOworICAgICAgICBpZiAoc3R5bGVSZXNvbHZl
ci0+YXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgICAgICAoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShjb2xvcik7CisgICAgICAgIGlmIChzdHls
ZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAgICAg
ICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnZpc2l0ZWRMaW5rU2V0dGVyRnVuY3Rpb24pKGNv
bG9yKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIo
KSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0
aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtMzIyLDExICszMjMsMTEgQEAgcHVibGljOgog
dGVtcGxhdGUgPFRleHREaXJlY3Rpb24gKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyRnVuY3Rpb24pKFRleHREaXJlY3Rpb24p
LCBUZXh0RGlyZWN0aW9uICgqaW5pdGlhbEZ1bmN0aW9uKSgpPgogY2xhc3MgQXBwbHlQcm9wZXJ0
eURpcmVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUq
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAg
ewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0ZXJGdW5j
dGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24sIGluaXRp
YWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3RhdGUsIHZhbHVlKTsKLSAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLmVsZW1lbnQoKTsKLSAgICAgICAgaWYgKGVsZW1l
bnQgJiYgc3RhdGUuZWxlbWVudCgpID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpKQorICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxUZXh0RGlyZWN0aW9uLCBnZXR0
ZXJGdW5jdGlvbiwgVGV4dERpcmVjdGlvbiwgc2V0dGVyRnVuY3Rpb24sIFRleHREaXJlY3Rpb24s
IGluaXRpYWxGdW5jdGlvbj46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlciwg
dmFsdWUpOworICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3R5bGVSZXNvbHZlci0+ZWxlbWVu
dCgpOworICAgICAgICBpZiAoZWxlbWVudCAmJiBzdHlsZVJlc29sdmVyLT5lbGVtZW50KCkgPT0g
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCiAgICAgICAgICAgICBlbGVt
ZW50LT5kb2N1bWVudCgpLT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudCh0cnVlKTsK
ICAgICB9CiAKQEAgLTM1Myw3ICszNTQsNyBAQCB0ZW1wbGF0ZSA8TGVuZ3RoIChSZW5kZXJTdHls
ZTo6KmdldHRlckZ1bmN0aW9uKSgpIGNvbnN0LAogY2xhc3MgQXBwbHlQcm9wZXJ0eUxlbmd0aCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBM
ZW5ndGggdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUp
CiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0zNjEsMzkgKzM2MiwzOSBAQCBwdWJsaWM6CiAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlKj4odmFsdWUpOwogICAgICAgICBpZiAobm9uZUVuYWJsZWQgJiYgcHJpbWl0aXZlVmFsdWUt
PmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CiAgICAgICAgICAgICBpZiAobm9uZVVuZGVm
aW5lZCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoVW5k
ZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUo
KSwgTGVuZ3RoKFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBzZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGxlZ2FjeUludHJpbnNpY0VuYWJsZWQpIHsKICAgICAgICAgICAgIGlmIChwcmltaXRp
dmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUludHJpbnNpYykKLSAgICAgICAgICAgICAg
ICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoSW50cmluc2ljKSk7CisgICAgICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKEludHJpbnNpYykp
OwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NT
VmFsdWVNaW5JbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgTGVuZ3RoKE1pbkludHJpbnNpYykpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5JbnRyaW5zaWMpKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoaW50cmluc2ljRW5hYmxlZCkgewogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKLSAgICAgICAgICAg
ICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoTWluQ29udGVudCkpOworICAgICAg
ICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIExlbmd0aChNaW5Db250
ZW50KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZVdlYmtpdE1heENvbnRlbnQpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3Rh
dGUuc3R5bGUoKSwgTGVuZ3RoKE1heENvbnRlbnQpKTsKKyAgICAgICAgICAgICAgICBzZXRWYWx1
ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBMZW5ndGgoTWF4Q29udGVudCkpOwogICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVXZWJraXRG
aWxsQXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExl
bmd0aChGaWxsQXZhaWxhYmxlKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgTGVuZ3RoKEZpbGxBdmFpbGFibGUpKTsKICAgICAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlV2Via2l0Rml0Q29udGVu
dCkKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgoRml0Q29u
dGVudCkpOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IExlbmd0aChGaXRDb250ZW50KSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXV0b0VuYWJs
ZWQgJiYgcHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAg
ICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgTGVuZ3RoKCkpOworICAgICAgICAgICAgc2V0
VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVuZ3RoKCkpOwogICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgTGVuZ3RoIGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwg
c3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkp
OworICAgICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwog
ICAgICAgICAgICAgbGVuZ3RoLnNldFF1aXJrKHByaW1pdGl2ZVZhbHVlLT5pc1F1aXJrVmFsdWUo
KSk7Ci0gICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBsZW5ndGgpOworICAgICAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgbGVuZ3RoKTsKICAgICAgICAg
fSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpCi0gICAgICAgICAgICBz
ZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBMZW5ndGgocHJpbWl0aXZlVmFsdWUtPmdldERvdWJsZVZh
bHVlKCksIFBlcmNlbnQpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIExlbmd0aChwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwgUGVyY2VudCkp
OwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNDYWxjdWxhdGVkUGVyY2VudGFn
ZVdpdGhMZW5ndGgoKSkKLSAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIExlbmd0
aChwcmltaXRpdmVWYWx1ZS0+Y3NzQ2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxl
KCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKSkpOworICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpKSk7CiAgICAgICAgIGVsc2UgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKQotICAgICAgICAgICAg
c2V0VmFsdWUoc3RhdGUuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCks
IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CiAgICAgfQogCiAg
ICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTQwOCwxNiArNDA5
LDE2IEBAIHRlbXBsYXRlIDxTdHJpbmdJZGVudEJlaGF2aW9yIGlkZW50QmVoYXZpb3IsIGNvbnN0
IEF0b21pY1N0cmluZyYgKFJlbmRlclN0eWxlOjoqCiBjbGFzcyBBcHBseVByb3BlcnR5U3RyaW5n
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZh
bHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZh
bHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBw
cmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwog
ICAgICAgICBpZiAoKGlkZW50QmVoYXZpb3IgPT0gTWFwTm9uZVRvTnVsbCAmJiBwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICB8fCAoaWRlbnRC
ZWhhdmlvciA9PSBNYXBBdXRvVG9OdWxsICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0bykpCi0gICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBudWxs
QXRvbSk7CisgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBudWxs
QXRvbSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCks
IHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgp
KTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAg
ICB7CkBAIC00MzAsNyArNDMxLDcgQEAgdGVtcGxhdGUgPExlbmd0aFNpemUgKFJlbmRlclN0eWxl
OjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoKIGNsYXNzIEFw
cGx5UHJvcGVydHlCb3JkZXJSYWRpdXMgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFZh
bHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgTGVuZ3RoU2l6ZSB2YWx1ZSkgeyAoc3R5bGUtPipzZXR0
ZXJGdW5jdGlvbikodmFsdWUpOyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ0NywxNyArNDQ4
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgZWxzZSBpZiAocGFpci0+Zmlyc3QoKS0+aXNWaWV3cG9y
dFBlcmNlbnRhZ2VMZW5ndGgoKSkKICAgICAgICAgICAgIHJhZGl1c1dpZHRoID0gcGFpci0+Zmly
c3QoKS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgICAgIGVsc2UgaWYgKHBhaXIt
PmZpcnN0KCktPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpCi0gICAgICAgICAg
ICByYWRpdXNXaWR0aCA9IExlbmd0aCgocGFpci0+Zmlyc3QoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRv
Q2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgc3RhdGUu
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBM
ZW5ndGgoKHBhaXItPmZpcnN0KCktPmNzc0NhbGNWYWx1ZSgpLT50b0NhbGNWYWx1ZShzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxlbWVudFN0eWxlKCksIHN0eWxl
UmVzb2x2ZXItPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkpKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJzdCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgp
LT5lZmZlY3RpdmVab29tKCkpOworICAgICAgICAgICAgcmFkaXVzV2lkdGggPSBwYWlyLT5maXJz
dCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCkpOwogICAgICAgICBpZiAocGFpci0+c2Vjb25kKCktPmlzUGVyY2VudGFnZSgp
KQogICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gTGVuZ3RoKHBhaXItPnNlY29uZCgpLT5nZXRE
b3VibGVWYWx1ZSgpLCBQZXJjZW50KTsKICAgICAgICAgZWxzZSBpZiAocGFpci0+c2Vjb25kKCkt
PmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpCiAgICAgICAgICAgICByYWRpdXNIZWlnaHQg
PSBwYWlyLT5zZWNvbmQoKS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCk7CiAgICAgICAgIGVs
c2UgaWYgKHBhaXItPnNlY29uZCgpLT5pc0NhbGN1bGF0ZWRQZXJjZW50YWdlV2l0aExlbmd0aCgp
KQotICAgICAgICAgICAgcmFkaXVzSGVpZ2h0ID0gTGVuZ3RoKChwYWlyLT5zZWNvbmQoKS0+Y3Nz
Q2FsY1ZhbHVlKCktPnRvQ2FsY1ZhbHVlKHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50
U3R5bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOworICAgICAgICAgICAg
cmFkaXVzSGVpZ2h0ID0gTGVuZ3RoKChwYWlyLT5zZWNvbmQoKS0+Y3NzQ2FsY1ZhbHVlKCktPnRv
Q2FsY1ZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVt
ZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByYWRpdXNIZWlnaHQgPSBwYWlyLT5zZWNvbmQoKS0+
Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKSwgc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICAgICAgICAgIHJhZGl1
c0hlaWdodCA9IHBhaXItPnNlY29uZCgpLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNv
bHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwogICAgICAgICBpbnQgd2lkdGggPSBy
YWRpdXNXaWR0aC52YWx1ZSgpOwogICAgICAgICBpbnQgaGVpZ2h0ID0gcmFkaXVzSGVpZ2h0LnZh
bHVlKCk7CiAgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKQEAgLTQ2OCw3ICs0
NjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByYWRpdXNXaWR0aCA9IHJhZGl1c0hlaWdodDsg
Ly8gTnVsbCBvdXQgdGhlIG90aGVyIHZhbHVlLgogCiAgICAgICAgIExlbmd0aFNpemUgc2l6ZShy
YWRpdXNXaWR0aCwgcmFkaXVzSGVpZ2h0KTsKLSAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5bGUo
KSwgc2l6ZSk7CisgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHNpemUp
OwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAg
IHsKQEAgLTUwMiwxMSArNTAzLDExIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBULAogICAgICAgICAg
IHZvaWQgKENTU1RvU3R5bGVNYXA6OiptYXBGaWxsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciosIENTU1ZhbHVlKik+CiBjbGFzcyBBcHBseVByb3BlcnR5RmlsbExheWVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7
Ci0gICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0YXRlLnN0eWxlKCktPiphY2Nlc3NM
YXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVyKiBjdXJyQ2hpbGQgPSAoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0aW9uKSgpOwogICAgICAgICBGaWxs
TGF5ZXIqIHByZXZDaGlsZCA9IDA7Ci0gICAgICAgIGNvbnN0IEZpbGxMYXllciogY3VyclBhcmVu
dCA9IChzdGF0ZS5wYXJlbnRTdHlsZSgpLT4qbGF5ZXJzRnVuY3Rpb24pKCk7CisgICAgICAgIGNv
bnN0IEZpbGxMYXllciogY3VyclBhcmVudCA9IChzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgp
LT4qbGF5ZXJzRnVuY3Rpb24pKCk7CiAgICAgICAgIHdoaWxlIChjdXJyUGFyZW50ICYmIChjdXJy
UGFyZW50LT4qdGVzdEZ1bmN0aW9uKSgpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnJDaGlsZCkg
ewogICAgICAgICAgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllci4qLwpAQCAtNTI2
LDE5ICs1MjcsMTggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUm
IHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBGaWxsTGF5ZXIq
IGN1cnJDaGlsZCA9IChzdGF0ZS5zdHlsZSgpLT4qYWNjZXNzTGF5ZXJzRnVuY3Rpb24pKCk7Cisg
ICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPiph
Y2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKICAgICAgICAgKGN1cnJDaGlsZC0+KnNldEZ1bmN0aW9u
KSgoKmluaXRpYWxGdW5jdGlvbikoZmlsbExheWVyVHlwZSkpOwogICAgICAgICBmb3IgKGN1cnJD
aGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBjdXJyQ2hpbGQ7IGN1cnJDaGlsZCA9IGN1cnJDaGls
ZC0+bmV4dCgpKQogICAgICAgICAgICAgKGN1cnJDaGlsZC0+KmNsZWFyRnVuY3Rpb24pKCk7CiAg
ICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEZpbGxMYXllciogY3VyckNoaWxkID0gKHN0
YXRlLnN0eWxlKCktPiphY2Nlc3NMYXllcnNGdW5jdGlvbikoKTsKKyAgICAgICAgRmlsbExheWVy
KiBjdXJyQ2hpbGQgPSAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KmFjY2Vzc0xheWVyc0Z1bmN0
aW9uKSgpOwogICAgICAgICBGaWxsTGF5ZXIqIHByZXZDaGlsZCA9IDA7Ci0gICAgICAgIENTU1Rv
U3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOwogICAgICAgICBpZiAodmFsdWUtPmlzVmFsdWVMaXN0
KCkKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKICAgICAgICAgJiYgIXZhbHVlLT5pc0ltYWdl
U2V0VmFsdWUoKQpAQCAtNTUyLDEyICs1NTIsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBjdXJyQ2hpbGQgPSBuZXcgRmlsbExheWVyKGZpbGxMYXllclR5cGUpOwogICAgICAgICAg
ICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgKHN0eWxlTWFwLiptYXBGaWxsRnVuY3Rpb24pKHByb3BlcnR5
SWQsIGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKKyAg
ICAgICAgICAgICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+Km1hcEZpbGxGdW5jdGlv
bikocHJvcGVydHlJZCwgY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soaSkpOwogICAgICAgICAgICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsKICAgICAgICAg
ICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIChzdHlsZU1hcC4qbWFwRmlsbEZ1bmN0aW9uKShw
cm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZhbHVlKTsKKyAgICAgICAgICAgIChzdHlsZVJlc29sdmVy
LT5zdHlsZU1hcCgpLT4qbWFwRmlsbEZ1bmN0aW9uKShwcm9wZXJ0eUlkLCBjdXJyQ2hpbGQsIHZh
bHVlKTsKICAgICAgICAgICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOwogICAgICAg
ICB9CiAgICAgICAgIHdoaWxlIChjdXJyQ2hpbGQpIHsKQEAgLTU4Myw3ICs1ODMsNyBAQCB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwKIGNsYXNzIEFwcGx5UHJvcGVydHlDb21wdXRlTGVuZ3RoIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFQgdmFs
dWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBD
U1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewog
ICAgICAgICAvLyBub3RlOiBDU1NQcm9wZXJ0eUxldHRlci9Xb3JkU3BhY2luZyByaWdodCBub3cg
c2V0cyB0byB6ZXJvIGlmIGl0J3Mgbm90IGEgcHJpbWl0aXZlIHZhbHVlIGZvciBzb21lIHJlYXNv
bi4uLgogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCkBAIC02MDIsMTMg
KzYwMiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIH0gZWxzZSBpZiAodGhpY2tuZXNzRW5hYmxlZCAm
JiBpZGVudCA9PSBDU1NWYWx1ZVRoaWNrKSB7CiAgICAgICAgICAgICBsZW5ndGggPSA1OwogICAg
ICAgICB9IGVsc2UgaWYgKGlkZW50ID09IENTU1ZhbHVlSW52YWxpZCkgewotICAgICAgICAgICAg
ZmxvYXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdGF0ZS51c2VTVkdab29tUnVsZXMoKSkg
PyAxLjBmIDogc3RhdGUuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICAgICAgZmxv
YXQgem9vbSA9IChzdmdab29tRW5hYmxlZCAmJiBzdHlsZVJlc29sdmVyLT51c2VTVkdab29tUnVs
ZXMoKSkgPyAxLjBmIDogc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwog
CiAgICAgICAgICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49IDEgc2hvdWxk
IG5vdCBiZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAgICAgICAgIC8vIFRoaXMga2Vl
cHMgYm9yZGVyIGxpbmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAgICAgICAgbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCB6b29tKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVl
LT5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIHN0eWxlUmVzb2x2ZXIt
PnJvb3RFbGVtZW50U3R5bGUoKSwgem9vbSk7CiAgICAgICAgICAgICBpZiAoem9vbSA8IDEuMGYg
JiYgbGVuZ3RoIDwgMS4wKSB7Ci0gICAgICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLT5jb21wdXRlTGVuZ3RoPFQ+KHN0YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RF
bGVtZW50U3R5bGUoKSwgMS4wKTsKKyAgICAgICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3RoID0g
cHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
c3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpLCAxLjApOwogICAgICAgICAgICAgICAg
IGlmIChvcmlnaW5hbExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9
IDEuMDsKICAgICAgICAgICAgIH0KQEAgLTYxOCw3ICs2MTgsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBsZW5ndGggPSAwOwogICAgICAgICB9CiAKLSAgICAgICAgc2V0VmFsdWUoc3RhdGUuc3R5
bGUoKSwgbGVuZ3RoKTsKKyAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwg
bGVuZ3RoKTsKICAgICB9CiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVy
KCkKICAgICB7CkBAIC02MzAsMjggKzYzMCwyOCBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgVCAoRm9udERlc2NyaXB0aW9uOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQg
KEZvbnREZXNjcmlwdGlvbjo6KnNldHRlckZ1bmN0aW9uKShUKSwgVCBpbml0aWFsVmFsdWU+CiBj
bGFzcyBBcHBseVByb3BlcnR5Rm9udCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9u
dERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIChmb250RGVz
Y3JpcHRpb24uKnNldHRlckZ1bmN0aW9uKSgoc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCku
KmdldHRlckZ1bmN0aW9uKSgpKTsKLSAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgKGZvbnREZXNjcmlw
dGlvbi4qc2V0dGVyRnVuY3Rpb24pKChzdHlsZVJlc29sdmVyLT5wYXJlbnRGb250RGVzY3JpcHRp
b24oKS4qZ2V0dGVyRnVuY3Rpb24pKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlw
dGlvbigpOwogICAgICAgICAoZm9udERlc2NyaXB0aW9uLipzZXR0ZXJGdW5jdGlvbikoaW5pdGlh
bFZhbHVlKTsKLSAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlv
bik7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3Jp
cHRpb24pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1By
aW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUu
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgKGZvbnREZXNj
cmlwdGlvbi4qc2V0dGVyRnVuY3Rpb24pKCpwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdHlsZVJlc29s
dmVyLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBz
dGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhh
bmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVlLCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVl
KTsgfQpAQCAtNjc2LDUwICs2NzYsNTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHNpemUg
LyAxLjJmOwogICAgIH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5
bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIGZsb2F0IHNpemUgPSBzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgICAgIGZsb2F0IHNp
emUgPSBzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS5zcGVj
aWZpZWRTaXplKCk7CiAKICAgICAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5zdHls
ZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdv
cmRTaXplKHN0YXRlLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLmtleXdvcmRTaXpl
KCkpOwotICAgICAgICBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2Ny
aXB0aW9uLCBzaXplKTsKLSAgICAgICAgc3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbik7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLT5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEtleXdvcmRTaXplKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpLmtleXdvcmRTaXplKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRG
b250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAgIHsK
LSAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0YXRlLnN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBmbG9hdCBzaXplID0gU3R5bGVSZXNvbHZlcjo6
Zm9udFNpemVGb3JLZXl3b3JkKHN0YXRlLmRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmb250
RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpOworICAgICAgICBmbG9hdCBzaXplID0gc3R5bGVSZXNvbHZlci0+Zm9udFNpemVGb3JL
ZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmb250RGVz
Y3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKIAogICAgICAgICBpZiAoc2l6ZSA8IDAp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdv
cmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7Ci0gICAgICAgIFN0
eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIHNpemUpOwot
ICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAg
ICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2
YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsdWUpOwogCi0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3Jp
cHRpb24gPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoMCk7
CiAgICAgICAgIGZsb2F0IHBhcmVudFNpemUgPSAwOwogICAgICAgICBib29sIHBhcmVudElzQWJz
b2x1dGVTaXplID0gZmFsc2U7CiAgICAgICAgIGZsb2F0IHNpemUgPSAwOwogCi0gICAgICAgIGlm
IChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgICAgICBwYXJlbnRTaXplID0gc3RhdGUu
cGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAg
ICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBzdGF0ZS5wYXJlbnRTdHlsZSgpLT5mb250RGVz
Y3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOworICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKSkgeworICAgICAgICAgICAgcGFyZW50U2l6ZSA9IHN0eWxlUmVzb2x2ZXIt
PnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICAg
ICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChpbnQgaWRlbnQgPSBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSkgewpAQCAtNzMz
LDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CiAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgICAgICBzaXplID0gU3R5bGVSZXNvbHZlcjo6
Zm9udFNpemVGb3JLZXl3b3JkKHN0YXRlLmRvY3VtZW50KCksIGlkZW50LCBmb250RGVzY3JpcHRp
b24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBzaXplID0gc3R5bGVS
ZXNvbHZlci0+Zm9udFNpemVGb3JLZXl3b3JkKHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCksIGlk
ZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKTsKICAgICAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUoaWRlbnQgLSBDU1NWYWx1ZVh4U21h
bGwgKyAxKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVMYXJnZXI6CkBAIC03NTEsMTMgKzc1MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhKHByaW1pdGl2ZVZh
bHVlLT5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS0+aXNGb250UmVsYXRpdmVMZW5n
dGgoKSkpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKQotICAg
ICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
c3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUp
OworICAgICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS0+Y29tcHV0ZUxlbmd0aDxm
bG9hdD4oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVs
ZW1lbnRTdHlsZSgpLCAxLjAsIHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUtPmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZl
VmFsdWUtPmdldEZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAwLjBmOwogICAgICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVu
Z3RoKCkpCi0gICAgICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFs
dWUoKS0+dG9DYWxjVmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CisgICAgICAgICAgICAgICAgc2l6ZSA9IHBy
aW1pdGl2ZVZhbHVlLT5jc3NDYWxjVmFsdWUoKS0+dG9DYWxjVmFsdWUoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgpKS0+ZXZhbHVh
dGUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNW
aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBzaXplID0gdmFsdWVG
b3JMZW5ndGgocHJpbWl0aXZlVmFsdWUtPnZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpLCAwLCBz
dGF0ZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOworICAgICAgICAgICAgICAgIHNpemUgPSB2
YWx1ZUZvckxlbmd0aChwcmltaXRpdmVWYWx1ZS0+dmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCks
IDAsIHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03NjksOCArNzY5
LDggQEAgcHVibGljOgogICAgICAgICAvLyBDYXAgZm9udCBzaXplIGhlcmUgdG8gbWFrZSBzdXJl
IHRoYXQgZG9lc24ndCBoYXBwZW4uCiAgICAgICAgIHNpemUgPSBtaW4obWF4aW11bUFsbG93ZWRG
b250U2l6ZSwgc2l6ZSk7CiAKLSAgICAgICAgU3R5bGVSZXNvbHZlcjo6c2V0Rm9udFNpemUoc3Rh
dGUsIGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgICAgIHN0YXRlLnNldEZvbnREZXNjcmlw
dGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250U2l6
ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRGb250
RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApA
QCAtNzc5LDEyICs3NzksMTIgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Rm9udFdl
aWdodCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJp
bWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUHJpbWl0aXZl
VmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWx1ZSk7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdGF0ZS5m
b250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXItPmZvbnREZXNjcmlwdGlvbigpOwogICAgICAgICBzd2l0Y2ggKHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlk
OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03OTgsNyArNzk4LDcgQEAg
cHVibGljOgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dFdlaWdodCgqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRlLnNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAgICAgc3RhdGljIFBy
b3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKICAgICB7CkBAIC04MDksMzAgKzgwOSwzMCBA
QCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlcyB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAg
ewotICAgICAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9
IHN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBGb250RGVzY3JpcHRpb24g
Zm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci0+
cGFyZW50Rm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKIAogICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0
aW9uLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCkpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlKHBhcmVudEZvbnREZXNjcmlwdGlvbi5kaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0
b3JpY2FsTGlnYXR1cmVzU3RhdGUocGFyZW50Rm9udERlc2NyaXB0aW9uLmhpc3RvcmljYWxMaWdh
dHVyZXNTdGF0ZSgpKTsKIAotICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERl
c2NyaXB0aW9uKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0
aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLT5mb250RGVzY3JpcHRpb24oKTsKIAogICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tbW9uTGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0
aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRE
aXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVy
ZXNTdGF0ZSk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRIaXN0b3JpY2FsTGlnYXR1cmVz
U3RhdGUoRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSk7CiAKLSAgICAgICAg
c3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIHN0eWxl
UmVzb2x2ZXItPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGNv
bW1vbkxpZ2F0dXJlc1N0YXRlID0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0
ZTsKICAgICAgICAgRm9udERlc2NyaXB0aW9uOjpMaWdhdHVyZXNTdGF0ZSBkaXNjcmV0aW9uYXJ5
TGlnYXR1cmVzU3RhdGUgPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJlc1N0YXRlOwpA
QCAtODc4LDExICs4NzgsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29s
dmVyLT5mb250RGVzY3JpcHRpb24oKTsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbW1v
bkxpZ2F0dXJlc1N0YXRlKGNvbW1vbkxpZ2F0dXJlc1N0YXRlKTsKICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldERpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZShkaXNjcmV0aW9uYXJ5TGlnYXR1
cmVzU3RhdGUpOwogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSk7Ci0gICAgICAgIHN0YXRlLnNldEZvbnRE
ZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJv
cGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtODk4LDE0ICs4OTgsMTMgQEAgdGVtcGxh
dGUgPEJvcmRlckltYWdlVHlwZSBib3JkZXJJbWFnZVR5cGUsCiAgICAgICAgICAgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXJGdW5jdGlvbikoY29uc3QgTmluZVBpZWNlSW1hZ2UmKT4KIGNsYXNz
IEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIE5pbmVQaWVjZUltYWdlIGltYWdlOwogICAgICAgICBpZiAoYm9yZGVySW1hZ2VUeXBlID09
IEJvcmRlck1hc2spCiAgICAgICAgICAgICBpbWFnZS5zZXRNYXNrRGVmYXVsdHMoKTsKLSAgICAg
ICAgQ1NTVG9TdHlsZU1hcCBzdHlsZU1hcChzdGF0ZSk7Ci0gICAgICAgIHN0eWxlTWFwLm1hcE5p
bmVQaWVjZUltYWdlKHByb3BlcnR5LCB2YWx1ZSwgaW1hZ2UpOwotICAgICAgICAoc3RhdGUuc3R5
bGUoKS0+KnNldHRlckZ1bmN0aW9uKShpbWFnZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCB2YWx1ZSwgaW1hZ2UpOworICAg
ICAgICAoc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+KnNldHRlckZ1bmN0aW9uKShpbWFnZSk7CiAg
ICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTky
MiwyOSArOTIxLDI5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGlubGluZSBjb25zdCBOaW5lUGll
Y2VJbWFnZSYgZ2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IHJldHVybiB0eXBlID09IEJv
cmRlckltYWdlID8gc3R5bGUtPmJvcmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7
IH0KICAgICBzdGF0aWMgaW5saW5lIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBOaW5lUGllY2VJbWFnZSYgdmFsdWUpIHsgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2Ug
PyBzdHlsZS0+c2V0Qm9yZGVySW1hZ2UodmFsdWUpIDogc3R5bGUtPnNldE1hc2tCb3hJbWFnZSh2
YWx1ZSk7IH0KIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNv
bHZlcikKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRl
LnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAg
IGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUo
c3RhdGUucGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weU91dHNldEZyb20o
Z2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZy
b20oZ2V0VmFsdWUoc3RhdGUucGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29w
eVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBpbWFnZS5j
b3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKHN0YXRlLnBhcmVudFN0eWxlKCkpKTsKKyAgICAg
ICAgICAgIGltYWdlLmNvcHlJbWFnZVNsaWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lkdGg6
Ci0gICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdGF0ZS5w
YXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShn
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7Cisg
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAg
ICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0YXRlLnN0eWxlKCkpKTsKKyAgICAg
ICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSkp
OwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgogICAg
ICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KExlbmd0aEJveCgwKSk7CkBAIC05NjMsMjggKzk2Miwy
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXModHlwZSA9PSBC
b3JkZXJJbWFnZSA/IExlbmd0aEJveChMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVs
YXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpLCBMZW5ndGgoMSwgUmVsYXRpdmUpKSA6IExlbmd0
aEJveCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVl
KHN0YXRlLnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci0+
c3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NT
UHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBOaW5lUGll
Y2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdGF0ZS5zdHlsZSgpKSk7Ci0gICAgICAgIENTU1RvU3R5
bGVNYXAgc3R5bGVNYXAoc3RhdGUpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRW
YWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIp
IHsKICAgICAgICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoc3R5
bGVNYXAubWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAgICAgICAgICBpbWFnZS5z
ZXRPdXRzZXQoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFk
KHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAg
ICAgICAgICBzdHlsZU1hcC5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwor
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VS
ZXBlYXQodmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNs
aWNlOgotICAgICAgICAgICAgc3R5bGVNYXAubWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwg
aW1hZ2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBp
ZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMoc3R5bGVNYXAu
bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAgICAgICAgICBpbWFnZS5zZXRCb3Jk
ZXJTbGljZXMoc3R5bGVSZXNvbHZlci0+c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFk
KHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1
ZShzdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNy
ZWF0ZUhhbmRsZXIoKSB7IHJldHVybiBQcm9wZXJ0eUhhbmRsZXIoJmFwcGx5SW5oZXJpdFZhbHVl
LCAmYXBwbHlJbml0aWFsVmFsdWUsICZhcHBseVZhbHVlKTsgfQpAQCAtOTkzLDcgKzk5MSw3IEBA
IHB1YmxpYzoKIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkLCBTdHlsZUltYWdlKiAoUmVuZGVy
U3R5bGU6OipnZXR0ZXJGdW5jdGlvbikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXJGdW5jdGlvbikoUGFzc1JlZlB0cjxTdHlsZUltYWdlPiksIFN0eWxlSW1hZ2UqICgqaW5pdGlh
bEZ1bmN0aW9uKSgpPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKSB7IChzdGF0ZS5zdHlsZSgpLT4q
c2V0dGVyRnVuY3Rpb24pKFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2Uoc3RhdGUsIGlkLCB2YWx1
ZSkpOyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpIHsgKHN0eWxlUmVzb2x2ZXIt
PnN0eWxlKCktPipzZXR0ZXJGdW5jdGlvbikoc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShpZCwg
dmFsdWUpKTsgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAg
ICAgewogICAgICAgICBQcm9wZXJ0eUhhbmRsZXIgaGFuZGxlciA9IEFwcGx5UHJvcGVydHlEZWZh
dWx0QmFzZTxTdHlsZUltYWdlKiwgZ2V0dGVyRnVuY3Rpb24sIFBhc3NSZWZQdHI8U3R5bGVJbWFn
ZT4sIHNldHRlckZ1bmN0aW9uLCBTdHlsZUltYWdlKiwgaW5pdGlhbEZ1bmN0aW9uPjo6Y3JlYXRl
SGFuZGxlcigpOwpAQCAtMTAwNSwxMSArMTAwMywxMSBAQCBlbnVtIENvdW50ZXJCZWhhdmlvciB7
SW5jcmVtZW50ID0gMCwgUmVzZXR9OwogdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVy
QmVoYXZpb3I+CiBjbGFzcyBBcHBseVByb3BlcnR5Q291bnRlciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgZW1wdHlGdW5jdGlvbihDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYpIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBlbXB0eUZ1bmN0
aW9uKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29s
dmVyKQogICAgIHsKLSAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5
bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICAgICAgQ291bnRlckRpcmVjdGl2
ZU1hcCYgcGFyZW50TWFwID0gc3RhdGUucGFyZW50U3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVj
dGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRp
cmVjdGl2ZU1hcCYgcGFyZW50TWFwID0gc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+YWNj
ZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKIAogICAgICAgICB0eXBlZGVmIENvdW50ZXJEaXJlY3Rp
dmVNYXA6Oml0ZXJhdG9yIEl0ZXJhdG9yOwogICAgICAgICBJdGVyYXRvciBlbmQgPSBwYXJlbnRN
YXAuZW5kKCk7CkBAIC0xMDIyLDE0ICsxMDIwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5
SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+aXNW
YWx1ZUxpc3QoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDU1NWYWx1ZUxpc3Qq
IGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSk7CiAKLSAgICAgICAgQ291
bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVj
dGl2ZXMoKTsKKyAgICAgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKICAgICAgICAgdHlwZWRlZiBD
b3VudGVyRGlyZWN0aXZlTWFwOjppdGVyYXRvciBJdGVyYXRvcjsKIAogICAgICAgICBJdGVyYXRv
ciBlbmQgPSBtYXAuZW5kKCk7CkBAIC0xMDY1LDQyICsxMDYzLDQyIEBAIHB1YmxpYzoKIAogY2xh
c3MgQXBwbHlQcm9wZXJ0eUN1cnNvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRD
dXJzb3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOwotICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRDdXJzb3JMaXN0KHN0YXRlLnBhcmVudFN0eWxlKCktPmN1cnNvcnMoKSk7CisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEN1cnNvcihzdHlsZVJlc29sdmVyLT5wYXJl
bnRTdHlsZSgpLT5jdXJzb3IoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+Y3Vyc29ycygpKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7
Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwotICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CisgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBz
dHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJz
b3IoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPmNs
ZWFyQ3Vyc29yTGlzdCgpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5jbGVhckN1
cnNvckxpc3QoKTsKICAgICAgICAgaWYgKHZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CiAgICAgICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1
ZSk7CiAgICAgICAgICAgICBpbnQgbGVuID0gbGlzdC0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRDdXJzb3IoQ1VSU09SX0FVVE8pOworICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRPKTsKICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBDU1NWYWx1ZSog
aXRlbSA9IGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSk7CiAgICAgICAgICAgICAgICAg
aWYgKGl0ZW0tPmlzQ3Vyc29ySW1hZ2VWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIENT
U0N1cnNvckltYWdlVmFsdWUqIGltYWdlID0gc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZSo+KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZUlmU1ZHQ3Vy
c29ySXNVc2VkKHN0YXRlLmVsZW1lbnQoKSkpIC8vIEVsZW1lbnRzIHdpdGggU1ZHIGN1cnNvcnMg
YXJlIG5vdCBhbGxvd2VkIHRvIHNoYXJlIHN0eWxlLgotICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0VW5pcXVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPmFkZEN1cnNvcihTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKHN0YXRlLCBDU1NQcm9w
ZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGltYWdlLT51cGRhdGVJZlNWR0N1cnNvcklzVXNlZChzdHlsZVJlc29sdmVyLT5lbGVt
ZW50KCkpKSAvLyBFbGVtZW50cyB3aXRoIFNWRyBjdXJzb3JzIGFyZSBub3QgYWxsb3dlZCB0byBz
aGFyZSBzdHlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHls
ZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZlci0+c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNv
ciwgaW1hZ2UpLCBpbWFnZS0+aG90U3BvdCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGl0ZW0tPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KGl0ZW0pOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzSWRl
bnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEN1cnNvcigq
cHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c2V0Q3Vyc29yKCpwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVl
KCkpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLT5pc0lkZW50KCkgJiYgc3RhdGUuc3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1
cnNvcigqcHJpbWl0aXZlVmFsdWUpKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5pc0lkZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+Y3Vyc29yKCkgIT0gRUN1cnNv
cigqcHJpbWl0aXZlVmFsdWUpKQorICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxl
KCktPnNldEN1cnNvcigqcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0x
MTA5LDcgKzExMDcsNyBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlUZXh0QWxpZ24g
ewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTE3LDEzICsxMTE1LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLT5nZXRJZGVudCgpICE9IENTU1ZhbHVlV2Via2l0TWF0Y2hQYXJlbnQpCi0gICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAg
ICAgZWxzZSBpZiAoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFTVEFSVCkK
LSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBMRUZUIDogUklHSFQpOwotICAgICAgICBl
bHNlIGlmIChzdGF0ZS5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBUQUVORCkKLSAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRBbGlnbihzdGF0ZS5wYXJlbnRTdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBSSUdIVCA6IExFRlQpOworICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CisgICAg
ICAgIGVsc2UgaWYgKHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPnRleHRBbGlnbigpID09
IFRBU1RBUlQpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0QWxp
Z24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gTEVGVCA6IFJJR0hUKTsKKyAgICAgICAgZWxzZSBpZiAoc3R5bGVSZXNvbHZlci0+cGFyZW50
U3R5bGUoKS0+dGV4dEFsaWduKCkgPT0gVEFFTkQpCisgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUklHSFQgOiBMRUZUKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEFsaWduKHN0YXRlLnBhcmVudFN0eWxlKCkt
PnRleHRBbGlnbigpKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRBbGlnbihzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0QWxpZ24oKSk7CiAgICAg
fQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAt
MTEzNCw3ICsxMTMyLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dERlY29y
YXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBFVGV4dERlY29yYXRpb24g
dCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKICAgICAgICAgZm9yIChD
U1NWYWx1ZUxpc3RJdGVyYXRvciBpKHZhbHVlKTsgaS5oYXNNb3JlKCk7IGkuYWR2YW5jZSgpKSB7
CkBAIC0xMTQyLDcgKzExNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihpdGVtLT5pc1ByaW1pdGl2ZVZhbHVlKCkpOwogICAgICAgICAg
ICAgdCB8PSAqc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihpdGVtKTsKICAgICAgICAg
fQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RGVjb3JhdGlvbih0KTsKKyAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dERlY29yYXRpb24odCk7CiAgICAgfQogICAg
IHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCiAgICAgewpAQCAtMTE1Myw3
ICsxMTUxLDcgQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5TGluZUhlaWdodCB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNjQsMTUgKzExNjIsMTUgQEAgcHVibGlj
OgogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3Jt
YWwpCiAgICAgICAgICAgICBsaW5lSGVpZ2h0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5pc0xlbmd0aCgpKSB7Ci0g
ICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHN0YXRlLmRvY3VtZW50KCktPmZy
YW1lKCkpCisgICAgICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT50ZXh0U2l6ZUFkanVzdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IHN0eWxlUmVzb2x2ZXItPmRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICAg
ICAgICAgIG11bHRpcGxpZXIgKj0gZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsaW5lSGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG11bHRp
cGxpZXIpOworICAgICAgICAgICAgbGluZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT5jb21wdXRl
TGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZlci0+cm9v
dEVsZW1lbnRTdHlsZSgpLCBtdWx0aXBsaWVyKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50
YWdlIHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAg
ICAgICBsaW5lSGVpZ2h0ID0gTGVuZ3RoKChzdGF0ZS5zdHlsZSgpLT5mb250U2l6ZSgpICogcHJp
bWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAgICAgICBs
aW5lSGVpZ2h0ID0gTGVuZ3RoKChzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5mb250U2l6ZSgpICog
cHJpbWl0aXZlVmFsdWUtPmdldEludFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CiAgICAgICAgIH0g
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBudW1iZXIgYW5kIHBlcmNlbnRhZ2UgdmFsdWVzIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1l
IHR5cGUgb2YgTGVuZ3RoIChpZS4gRml4ZWQgb3IgUGVyY2VudCkuCiAgICAgICAgICAgICBsaW5l
SGVpZ2h0ID0gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLT5nZXREb3VibGVWYWx1ZSgpICogMTAwLjAs
IFBlcmNlbnQpOwpAQCAtMTE4MCw3ICsxMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgbGlu
ZUhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLT52aWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5z
ZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRMaW5lSGVpZ2h0KGxpbmVIZWlnaHQpOwogICAgIH0KICAgICBzdGF0aWMgUHJvcGVydHlI
YW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQogICAgIHsKQEAgLTEyNjcsMTEgKzEyNjUsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlcjo6U3RhdGUmKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShD
U1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFs
dWUpCiAgICAgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOwogICAg
ICAgICBMZW5ndGggd2lkdGg7CiAgICAgICAgIExlbmd0aCBoZWlnaHQ7CiAgICAgICAgIFBhZ2VT
aXplVHlwZSBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfQVVUTzsKQEAgLTEyODcsOCArMTI4NSw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAvLyA8bGVuZ3RoPnsyfQogICAgICAgICAgICAg
ICAgIGlmICghc2Vjb25kLT5pc0xlbmd0aCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBmaXJzdC0+Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0
YXRlLnN0eWxlKCksIHN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7Ci0gICAgICAgICAgICAgICAg
aGVpZ2h0ID0gc2Vjb25kLT5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3RhdGUuc3R5bGUoKSwgc3Rh
dGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0LT5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmQt
PmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29s
dmVyLT5yb290RWxlbWVudFN0eWxlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAvLyA8cGFnZS1zaXplPiA8b3JpZW50YXRpb24+CiAgICAgICAgICAgICAgICAgLy8g
VGhlIHZhbHVlIG9yZGVyIGlzIGd1YXJhbnRlZWQuIFNlZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBh
cmFtZXRlci4KQEAgLTEzMDYsNyArMTMwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNMZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIC8vIDxsZW5ndGg+
CiAgICAgICAgICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAg
ICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkpOworICAg
ICAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUtPmNvbXB1dGVMZW5n
dGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5yb290RWxl
bWVudFN0eWxlKCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAw
OgpAQCAtMTMzMiwyOSArMTMzMCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0UGFn
ZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFBhZ2VT
aXplKExlbmd0aFNpemUod2lkdGgsIGhlaWdodCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5z
dHlsZSgpLT5zZXRQYWdlU2l6ZVR5cGUocGFnZVNpemVUeXBlKTsKKyAgICAgICAgc3R5bGVSZXNv
bHZlci0+c3R5bGUoKS0+c2V0UGFnZVNpemUoTGVuZ3RoU2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAg
ICAgfQogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpIHsgcmV0dXJu
IFByb3BlcnR5SGFuZGxlcigmYXBwbHlJbmhlcml0VmFsdWUsICZhcHBseUluaXRpYWxWYWx1ZSwg
JmFwcGx5VmFsdWUpOyB9CiB9OwogCiBjbGFzcyBBcHBseVByb3BlcnR5VGV4dEVtcGhhc2lzU3R5
bGUgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQogICAgIHsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChzdGF0
ZS5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkpOwotICAgICAgICBzdGF0ZS5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0YXRlLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNp
c01hcmsoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1h
cmsoc3RhdGUucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKKyAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChzdHlsZVJlc29s
dmVyLT5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNGaWxsKCkpOworICAgICAgICBzdHlsZVJl
c29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0eWxlUmVzb2x2ZXItPnBhcmVu
dFN0eWxlKCktPnRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5
bGUoKS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYg
c3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwg
U3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0gICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNG
aWxsKCkpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRl
clN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsoKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRl
clN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1Zh
bHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgewogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0
KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOwpAQCAtMTM2OCwxMSAr
MTM2NiwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
dmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGl0ZW0pOwogICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCB2YWx1ZS0+
Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU9wZW4pCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoKnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqdmFsdWUpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzTWFyaygqdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKCp2YWx1ZSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51
bGxBdG9tKTsKKyAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTEzODEsMjAgKzEzNzksMjAgQEAgcHVibGljOgogICAgICAgICBDU1NQcmltaXRpdmVW
YWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bHVlKTsKIAogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmls
bEZpbGxlZCk7Ci0gICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJr
KFRleHRFbXBoYXNpc01hcmtDdXN0b20pOwotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7
CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxs
KFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQ3VzdG9tKTsKKyAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmso
cHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9t
TWFyayhudWxsQXRvbSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRF
bXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20pOwogCiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZU9wZW4pIHsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0ZpbGwoKnByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgICAgIHN0YXRlLnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFya0F1dG8pOworICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCgqcHJpbWl0aXZl
VmFsdWUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzTWFyayhUZXh0RW1waGFzaXNNYXJrQXV0byk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGxG
aWxsZWQpOwotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyaygq
cHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsRmlsbGVkKTsKKyAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoKnByaW1pdGl2ZVZhbHVl
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQxNywxOCArMTQxNSwxNCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGJvb2wgdGVzdChjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbikgeyByZXR1cm4g
KGFuaW1hdGlvbi0+KnRlc3RGdW5jdGlvbikoKTsgfQogICAgIHN0YXRpYyB2b2lkIGNsZWFyKEFu
aW1hdGlvbiogYW5pbWF0aW9uKSB7IChhbmltYXRpb24tPipjbGVhckZ1bmN0aW9uKSgpOyB9CiAg
ICAgc3RhdGljIFQgaW5pdGlhbCgpIHsgcmV0dXJuICgqaW5pdGlhbEZ1bmN0aW9uKSgpOyB9Ci0g
ICAgc3RhdGljIHZvaWQgbWFwKFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSwgQW5pbWF0aW9u
KiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkgCi0gICAgewotICAgICAgICBDU1NUb1N0eWxl
TWFwIHN0eWxlTWFwKHN0YXRlKTsKLSAgICAgICAgKHN0eWxlTWFwLiptYXBGdW5jdGlvbikoYW5p
bWF0aW9uLCB2YWx1ZSk7Ci0gICAgfQorICAgIHN0YXRpYyB2b2lkIG1hcChTdHlsZVJlc29sdmVy
KiBzdHlsZVJlc29sdmVyLCBBbmltYXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKSB7
IChzdHlsZVJlc29sdmVyLT5zdHlsZU1hcCgpLT4qbWFwRnVuY3Rpb24pKGFuaW1hdGlvbiwgdmFs
dWUpOyB9CiAgICAgc3RhdGljIEFuaW1hdGlvbkxpc3QqIGFjY2Vzc0FuaW1hdGlvbnMoUmVuZGVy
U3R5bGUqIHN0eWxlKSB7IHJldHVybiAoc3R5bGUtPiphbmltYXRpb25HZXR0ZXJGdW5jdGlvbiko
KTsgfQogICAgIHN0YXRpYyBjb25zdCBBbmltYXRpb25MaXN0KiBhbmltYXRpb25zKFJlbmRlclN0
eWxlKiBzdHlsZSkgeyByZXR1cm4gKHN0eWxlLT4qaW1tdXRhYmxlQW5pbWF0aW9uR2V0dGVyRnVu
Y3Rpb24pKCk7IH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3Bl
cnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
KQogICAgIHsKLSAgICAgICAgQW5pbWF0aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMo
c3RhdGUuc3R5bGUoKSk7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHBhcmVudExpc3Qg
PSBhbmltYXRpb25zKHN0YXRlLnBhcmVudFN0eWxlKCkpOworICAgICAgICBBbmltYXRpb25MaXN0
KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKKyAgICAg
ICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9IGFuaW1hdGlvbnMoc3R5bGVSZXNv
bHZlci0+cGFyZW50U3R5bGUoKSk7CiAgICAgICAgIHNpemVfdCBpID0gMCwgcGFyZW50U2l6ZSA9
IHBhcmVudExpc3QgPyBwYXJlbnRMaXN0LT5zaXplKCkgOiAwOwogICAgICAgICBmb3IgKCA7IGkg
PCBwYXJlbnRTaXplICYmIHRlc3QocGFyZW50TGlzdC0+YW5pbWF0aW9uKGkpKTsgKytpKSB7CiAg
ICAgICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkpCkBAIC0xNDQyLDkgKzE0MzYsOSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmltYXRpb24oaSkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVS
ZXNvbHZlcikKICAgICB7Ci0gICAgICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBhY2Nlc3NBbmlt
YXRpb25zKHN0YXRlLnN0eWxlKCkpOworICAgICAgICBBbmltYXRpb25MaXN0KiBsaXN0ID0gYWNj
ZXNzQW5pbWF0aW9ucyhzdHlsZVJlc29sdmVyLT5zdHlsZSgpKTsKICAgICAgICAgaWYgKGxpc3Qt
PmlzRW1wdHkoKSkKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgp
KTsKICAgICAgICAgc2V0VmFsdWUobGlzdC0+YW5pbWF0aW9uKDApLCBpbml0aWFsKCkpOwpAQCAt
MTQ1NCwyMiArMTQ0OCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjbGVhcihsaXN0LT5hbmlt
YXRpb24oaSkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVy
dHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBBbmltYXRpb25MaXN0
KiBsaXN0ID0gYWNjZXNzQW5pbWF0aW9ucyhzdGF0ZS5zdHlsZSgpKTsKKyAgICAgICAgQW5pbWF0
aW9uTGlzdCogbGlzdCA9IGFjY2Vzc0FuaW1hdGlvbnMoc3R5bGVSZXNvbHZlci0+c3R5bGUoKSk7
CiAgICAgICAgIHNpemVfdCBjaGlsZEluZGV4ID0gMDsKICAgICAgICAgaWYgKHZhbHVlLT5pc1Zh
bHVlTGlzdCgpKSB7CiAgICAgICAgICAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBp
bnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAqLwog
ICAgICAgICAgICAgZm9yIChDU1NWYWx1ZUxpc3RJdGVyYXRvciBpID0gdmFsdWU7IGkuaGFzTW9y
ZSgpOyBpLmFkdmFuY2UoKSkgewogICAgICAgICAgICAgICAgIGlmIChjaGlsZEluZGV4IDw9IGxp
c3QtPnNpemUoKSkKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6
Y3JlYXRlKCkpOwotICAgICAgICAgICAgICAgIG1hcChzdGF0ZSwgbGlzdC0+YW5pbWF0aW9uKGNo
aWxkSW5kZXgpLCBpLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcChzdHlsZVJlc29sdmVy
LCBsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIGkudmFsdWUoKSk7CiAgICAgICAgICAgICAg
ICAgKytjaGlsZEluZGV4OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
QW5pbWF0aW9uOjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBtYXAoc3RhdGUsIGxpc3QtPmFuaW1h
dGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOworICAgICAgICAgICAgbWFwKHN0eWxlUmVzb2x2ZXIs
IGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOwogICAgICAgICAgICAgY2hpbGRJ
bmRleCA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZm9yICggOyBjaGlsZEluZGV4IDwgbGlzdC0+
c2l6ZSgpOyArK2NoaWxkSW5kZXgpIHsKQEAgLTE0ODMsMjIgKzE0NzcsMjIgQEAgcHVibGljOgog
CiBjbGFzcyBBcHBseVByb3BlcnR5T3V0bGluZVN0eWxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAg
ICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJl
bmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6Omlu
aXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBz
dGF0ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5bGUsICZS
ZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0
eWxlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBs
eVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpvdXRsaW5l
U3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxl
SXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJ
c0F1dG8+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKKyAg
ICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxl
OjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lU3R5
bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+OjphcHBs
eUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2
ZXIpCiAgICAgewotICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0
bywgJlJlbmRlclN0eWxlOjpvdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5
bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0
eUlELCBzdGF0ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlclN0eWxlPjo6YXBwbHlJbml0aWFsVmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOworICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8T3V0bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjpv
dXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6c2V0T3V0bGlu
ZVN0eWxlSXNBdXRvLCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5l
U3R5bGVJc0F1dG8+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVy
KTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEVCb3JkZXJTdHlsZSwgJlJlbmRl
clN0eWxlOjpvdXRsaW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lU3R5bGUsIEVCb3JkZXJTdHlsZSwgJlJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGU+
OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0PE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlSXNBdXRv
LCBPdXRsaW5lSXNBdXRvLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVTdHlsZUlzQXV0bywgT3V0
bGluZUlzQXV0bywgJlJlbmRlclN0eWxlOjppbml0aWFsT3V0bGluZVN0eWxlSXNBdXRvPjo6YXBw
bHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSwgdmFsdWUpOwotICAgICAgICBBcHBseVByb3BlcnR5
RGVmYXVsdDxFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVy
U3R5bGUsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5k
ZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdGF0
ZSwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxPdXRsaW5lSXNBdXRvLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVTdHlsZUlzQXV0bywgT3V0bGluZUlzQXV0bywgJlJlbmRlclN0
eWxlOjpzZXRPdXRsaW5lU3R5bGVJc0F1dG8sIE91dGxpbmVJc0F1dG8sICZSZW5kZXJTdHlsZTo6
aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0bz46OmFwcGx5VmFsdWUocHJvcGVydHlJRCwgc3R5bGVS
ZXNvbHZlciwgdmFsdWUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdDxFQm9yZGVyU3R5
bGUsICZSZW5kZXJTdHlsZTo6b3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVN0eWxlLCBFQm9yZGVyU3R5bGUsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEJv
cmRlclN0eWxlPjo6YXBwbHlWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
CiAgICAgfQogCiAgICAgc3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkgeyBy
ZXR1cm4gUHJvcGVydHlIYW5kbGVyKCZhcHBseUluaGVyaXRWYWx1ZSwgJmFwcGx5SW5pdGlhbFZh
bHVlLCAmYXBwbHlWYWx1ZSk7IH0KQEAgLTE1MDYsNyArMTUwMCw3IEBAIHB1YmxpYzoKIAogY2xh
c3MgQXBwbHlQcm9wZXJ0eVJlc2l6ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVl
KiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxl
UmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAg
IGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTE1MTgsMTMgKzE1MTIsMTMgQEAgcHVibGljOgogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVBdXRvOgotICAgICAgICAgICAgaWYgKFNl
dHRpbmdzKiBzZXR0aW5ncyA9IHN0YXRlLmRvY3VtZW50KCktPnNldHRpbmdzKCkpCisgICAgICAg
ICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gc3R5bGVSZXNvbHZlci0+ZG9jdW1lbnQoKS0+
c2V0dGluZ3MoKSkKICAgICAgICAgICAgICAgICByID0gc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJl
c2l6YWJsZSgpID8gUkVTSVpFX0JPVEggOiBSRVNJWkVfTk9ORTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgciA9ICpwcmltaXRpdmVWYWx1ZTsKICAg
ICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRSZXNpemUocik7CisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldFJlc2l6ZShyKTsKICAgICB9CiAKICAgICBzdGF0aWMg
UHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRsZXIoKQpAQCAtMTUzNiw3ICsxNTMwLDcgQEAgcHVi
bGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5VmVydGljYWxBbGlnbiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1
ZSkKICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTE1NDQsOSArMTUzOCw5IEBAIHB1YmxpYzoKICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
KQotICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oKnBy
aW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLT5zdHlsZSgp
LT5zZXRWZXJ0aWNhbEFsaWduKCpwcmltaXRpdmVWYWx1ZSk7CiAKLSAgICAgICAgc3RhdGUuc3R5
bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uIHwgVmlld3BvcnRQZXJjZW50YWdlQ29udmVyc2lvbj4oc3RhdGUuc3R5bGUo
KSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBzdGF0ZS5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCkpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxl
bmd0aChwcmltaXRpdmVWYWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNp
b24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgVmlld3BvcnRQ
ZXJjZW50YWdlQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci0+cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgUHJvcGVydHlIYW5kbGVyIGNyZWF0ZUhhbmRs
ZXIoKQpAQCAtMTU1OCwzMiArMTU1MiwzMiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVy
dHlBc3BlY3RSYXRpbyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBpZiAoIXN0YXRlLnBhcmVudFN0eWxlKCktPmhh
c0FzcGVjdFJhdGlvKCkpCisgICAgICAgIGlmICghc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUo
KS0+aGFzQXNwZWN0UmF0aW8oKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8odHJ1ZSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCkt
PnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0
aW9EZW5vbWluYXRvcigpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9O
dW1lcmF0b3Ioc3RhdGUucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7Cisg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKHRydWUpOwor
ICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7
CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9y
KHN0eWxlUmVzb2x2ZXItPnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQs
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAg
IHsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0aW8oUmVuZGVyU3R5bGU6
OmluaXRpYWxIYXNBc3BlY3RSYXRpbygpKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNw
ZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21p
bmF0b3IoKSk7Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9y
KFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CisgICAgICAgIHN0
eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldEhhc0FzcGVjdFJhdGlvKFJlbmRlclN0eWxlOjppbml0
aWFsSGFzQXNwZWN0UmF0aW8oKSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEFzcGVjdFJhdGlvRGVub21pbmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rl
bm9taW5hdG9yKCkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRBc3BlY3RS
YXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkp
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5
bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5pc0FzcGVjdFJh
dGlvVmFsdWUoKSkgewotICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SGFzQXNwZWN0UmF0
aW8oZmFsc2UpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0SGFzQXNw
ZWN0UmF0aW8oZmFsc2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IENTU0FzcGVjdFJhdGlvVmFsdWUqIGFzcGVjdFJhdGlvVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NB
c3BlY3RSYXRpb1ZhbHVlKj4odmFsdWUpOwotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRIYXNB
c3BlY3RSYXRpbyh0cnVlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9E
ZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLT5kZW5vbWluYXRvclZhbHVlKCkpOwotICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVl
LT5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0
SGFzQXNwZWN0UmF0aW8odHJ1ZSk7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNl
dEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+ZGVub21pbmF0b3JWYWx1
ZSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1l
cmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS0+bnVtZXJhdG9yVmFsdWUoKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIFByb3BlcnR5SGFuZGxlciBjcmVhdGVIYW5kbGVyKCkKQEAgLTE1OTQsNDggKzE1ODgs
NDggQEAgcHVibGljOgogCiBjbGFzcyBBcHBseVByb3BlcnR5Wm9vbSB7CiBwcml2YXRlOgotICAg
IHN0YXRpYyB2b2lkIHJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3Rh
dGUpCisgICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXIqIHN0
eWxlUmVzb2x2ZXIpCiAgICAgewogICAgICAgICAvLyBSZXNldCB0aGUgem9vbSBpbiBlZmZlY3Qu
IFRoaXMgYWxsb3dzIHRoZSBzZXRab29tIG1ldGhvZCB0byBhY2N1cmF0ZWx5IGNvbXB1dGUgYSBu
ZXcgem9vbSBpbiBlZmZlY3QuCi0gICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oc3RhdGUu
cGFyZW50U3R5bGUoKSA/IHN0YXRlLnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJl
bmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0RWZm
ZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyLT5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci0+
cGFyZW50U3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOwogICAgIH0KIAogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVl
KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBzdGF0ZSkKKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHls
ZVJlc29sdmVyKQogICAgIHsKLSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0YXRlKTsKLSAg
ICAgICAgc3RhdGUuc2V0Wm9vbShzdGF0ZS5wYXJlbnRTdHlsZSgpLT56b29tKCkpOworICAgICAg
ICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgIHN0eWxlUmVzb2x2
ZXItPnNldFpvb20oc3R5bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+em9vbSgpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHls
ZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikKICAgICB7Ci0g
ICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7Ci0gICAgICAgIHN0YXRlLnNldFpvb20o
UmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20o
c3R5bGVSZXNvbHZlcik7CisgICAgICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20oUmVuZGVyU3R5
bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUo
Q1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFs
dWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKTsK
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LT5nZXRJZGVudCgpID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgICAgICByZXNldEVmZmVj
dGl2ZVpvb20oc3RhdGUpOwotICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6
aW5pdGlhbFpvb20oKSk7CisgICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNv
bHZlcik7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjpp
bml0aWFsWm9vbSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRl
bnQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRFZmZlY3RpdmVa
b29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAgICAgICAgIHN0YXRlLnNldFpv
b20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci0+c2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLT5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZURvY3VtZW50KSB7Ci0gICAgICAgICAgICBmbG9hdCBkb2Nab29tID0gc3RhdGUucm9vdEVsZW1l
bnRTdHlsZSgpID8gc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkgOiBSZW5kZXJTdHls
ZTo6aW5pdGlhbFpvb20oKTsKLSAgICAgICAgICAgIHN0YXRlLnNldEVmZmVjdGl2ZVpvb20oZG9j
Wm9vbSk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRab29tKGRvY1pvb20pOworICAgICAgICAgICAg
ZmxvYXQgZG9jWm9vbSA9IHN0eWxlUmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKSA/IHN0eWxl
UmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRp
YWxab29tKCk7CisgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5zZXRFZmZlY3RpdmVab29tKGRv
Y1pvb20pOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+c2V0Wm9vbShkb2Nab29tKTsKICAg
ICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+aXNQZXJjZW50YWdlKCkpIHsKLSAgICAg
ICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdGF0ZSk7CisgICAgICAgICAgICByZXNldEVmZmVj
dGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CiAgICAgICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9
IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUu
c2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKKyAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLT5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3Rh
dGUpOworICAgICAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwogICAg
ICAgICAgICAgaWYgKGZsb2F0IG51bWJlciA9IHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVl
KCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0Wm9vbShudW1iZXIpOworICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPnNldFpvb20obnVtYmVyKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTY0Nyw0MiArMTY0MSw0MiBAQCBwdWJsaWM6CiAKIGNsYXNzIEFwcGx5UHJvcGVydHlEaXNw
bGF5IHsKIHByaXZhdGU6Ci0gICAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWREaXNwbGF5VmFs
dWUoU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVydHlW
YWx1ZSkKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJl
c29sdmVyKiBzdHlsZVJlc29sdmVyLCBFRGlzcGxheSBkaXNwbGF5UHJvcGVydHlWYWx1ZSkKICAg
ICB7CiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgaWYgKHN0YXRlLmVsZW1lbnQoKSAmJiBzdGF0
ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpICYmIHN0YXRlLnN0eWxlKCktPnN0eWxlVHlwZSgp
ID09IE5PUFNFVURPKQorICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci0+ZWxlbWVudCgpICYmIHN0
eWxlUmVzb2x2ZXItPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkgJiYgc3R5bGVSZXNvbHZlci0+
c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pCiAgICAgICAgICAgICByZXR1cm4gKGRp
c3BsYXlQcm9wZXJ0eVZhbHVlID09IElOTElORSB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBC
TE9DSyB8fCBkaXNwbGF5UHJvcGVydHlWYWx1ZSA9PSBOT05FKTsKICNlbHNlCi0gICAgICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzdHlsZVJlc29sdmVyKTsK
ICAgICAgICAgVU5VU0VEX1BBUkFNKGRpc3BsYXlQcm9wZXJ0eVZhbHVlKTsKICNlbmRpZgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlKQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0g
c3RhdGUucGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOwotICAgICAgICBpZiAoIWlzVmFsaWREaXNw
bGF5VmFsdWUoc3RhdGUsIGRpc3BsYXkpKQorICAgICAgICBFRGlzcGxheSBkaXNwbGF5ID0gc3R5
bGVSZXNvbHZlci0+cGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOworICAgICAgICBpZiAoIWlzVmFs
aWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgICAg
IHN0eWxlUmVzb2x2ZXItPnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlcjo6U3RhdGUmIHN0YXRlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKENT
U1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5zZXREaXNwbGF5KFJlbmRlclN0eWxlOjppbml0aWFsRGlzcGxheSgp
KTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+c2V0RGlzcGxheShSZW5kZXJTdHls
ZTo6aW5pdGlhbERpc3BsYXkoKSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2
YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVz
b2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlm
ICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBFRGlzcGxheSBkaXNwbGF5ID0gKnN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsdWUpOwogCi0gICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdGF0ZSwgZGlzcGxh
eSkpCisgICAgICAgIGlmICghaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNw
bGF5KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRE
aXNwbGF5KGRpc3BsYXkpOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXREaXNw
bGF5KGRpc3BsYXkpOwogICAgIH0KIAogICAgIHN0YXRpYyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRl
SGFuZGxlcigpCkBAIC0xNjk1LDIxICsxNjg5LDIxIEBAIHRlbXBsYXRlIDxDbGlwUGF0aE9wZXJh
dGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3QsIHZvaWQgKFJlbmRl
CiBjbGFzcyBBcHBseVByb3BlcnR5Q2xpcFBhdGggewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IHNldFZhbHVlKFJlbmRlclN0eWxlKiBzdHlsZSwgUGFzc1JlZlB0cjxDbGlwUGF0aE9wZXJhdGlv
bj4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZhbHVlKTsgfQotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0
YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAg
ICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewogICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUtPmdl
dElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIDApOworICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXItPnN0
eWxlKCksIDApOwogICAgICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUtPmlzU2hhcGUo
KSkgewotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIFNoYXBlQ2xpcFBh
dGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZh
bHVlLT5nZXRTaGFwZVZhbHVlKCkpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci0+c3R5bGUoKSwgU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hh
cGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZS0+Z2V0U2hhcGVWYWx1ZSgp
KSkpOwogICAgICAgICAgICAgfQogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgICAgICBlbHNlIGlm
IChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJpbWl0aXZl
VmFsdWUtPmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBzdGF0
ZS5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxWYWx1ZSk7CisgICAgICAgICAgICAgICAg
S1VSTCB1cmwgPSBzdHlsZVJlc29sdmVyLT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChjc3NVUkxW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNuJ3Qgd29yayB3aXRoIGZv
cndhcmQgb3IgZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA0MDUpCi0gICAgICAgICAgICAgICAgc2V0VmFsdWUoc3Rh
dGUuc3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1
ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7CisgICAgICAgICAgICAgICAgc2V0VmFsdWUo
c3R5bGVSZXNvbHZlci0+c3R5bGUoKSwgUmVmZXJlbmNlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0
ZShjc3NVUkxWYWx1ZSwgdXJsLmZyYWdtZW50SWRlbnRpZmllcigpKSk7CiAgICAgICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgfQpAQCAtMTcyNiwxOCArMTcyMCwxOCBAQCB0ZW1wbGF0ZSA8RXhj
bHVzaW9uU2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyRnVuY3Rpb24pKCkgY29uc3Qs
IHZvaWQgKFJlbgogY2xhc3MgQXBwbHlQcm9wZXJ0eUV4Y2x1c2lvblNoYXBlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIFBhc3NSZWZQdHI8
RXhjbHVzaW9uU2hhcGVWYWx1ZT4gdmFsdWUpIHsgKHN0eWxlLT4qc2V0dGVyRnVuY3Rpb24pKHZh
bHVlKTsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJvcGVydHlJRCwgU3R5bGVS
ZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkgewogICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CiAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAg
ICAgIHNldFZhbHVlKHN0YXRlLnN0eWxlKCksIDApOworICAgICAgICAgICAgICAgIHNldFZhbHVl
KHN0eWxlUmVzb2x2ZXItPnN0eWxlKCksIDApOwogICAgICAgICAgICAgLy8gRklYTUUgQnVnIDEw
MjU3MTogTGF5b3V0IGZvciB0aGUgdmFsdWUgJ291dHNpZGUtc2hhcGUnIGlzIG5vdCB5ZXQgaW1w
bGVtZW50ZWQKICAgICAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlT3V0c2lkZVNoYXBlKQotICAgICAgICAgICAgICAgIHNldFZhbHVlKHN0YXRl
LnN0eWxlKCksIEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZU91dHNpZGVWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBFeGNsdXNpb25T
aGFwZVZhbHVlOjpjcmVhdGVPdXRzaWRlVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChw
cmltaXRpdmVWYWx1ZS0+aXNTaGFwZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEV4Y2x1
c2lvblNoYXBlVmFsdWU+IHNoYXBlID0gRXhjbHVzaW9uU2hhcGVWYWx1ZTo6Y3JlYXRlU2hhcGVW
YWx1ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3RhdGUsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZh
bHVlKCkpKTsKLSAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdGF0ZS5zdHlsZSgpLCBzaGFwZS5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNsdXNpb25TaGFwZVZhbHVlPiBz
aGFwZSA9IEV4Y2x1c2lvblNoYXBlVmFsdWU6OmNyZWF0ZVNoYXBlVmFsdWUoYmFzaWNTaGFwZUZv
clZhbHVlKHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlLT5nZXRTaGFwZVZhbHVlKCkpKTsK
KyAgICAgICAgICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLT5zdHlsZSgpLCBzaGFwZS5y
ZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTc1MiwyMSAr
MTc0NiwyMSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9OKQogY2xh
c3MgQXBwbHlQcm9wZXJ0eUltYWdlUmVzb2x1dGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29s
dmVyOjpTdGF0ZSYgc3RhdGUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKQogICAg
IHsKLSAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJj
ZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNv
dXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1
dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6
YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwgc3RhdGUpOwotICAgICAgICBBcHBseVByb3Bl
cnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbWFnZVJl
c29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OnNldEltYWdl
UmVzb2x1dGlvblNuYXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6aW5pdGlh
bEltYWdlUmVzb2x1dGlvblNuYXA+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUlELCBzdGF0
ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxl
OjppbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlv
biwgZmxvYXQsICZSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5o
ZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1
bHRCYXNlPEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRp
b25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJl
c29sdXRpb25Tb3VyY2UsIEltYWdlUmVzb2x1dGlvblNvdXJjZSwgJlJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlPjo6YXBwbHlJbmhlcml0VmFsdWUocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0QmFzZTxJbWFnZVJl
c29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNuYXAsIEltYWdlUmVz
b2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VS
ZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcD46
OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBB
cHBseVByb3BlcnR5RGVmYXVsdEJhc2U8ZmxvYXQsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0
aW9uLCBmbG9hdCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb24sIGZsb2F0LCAmUmVu
ZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24+OjphcHBseUluaGVyaXRWYWx1ZShwcm9w
ZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRl
JiBzdGF0ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpCiAgICAgewotICAgICAg
ICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVy
U3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVu
ZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNvdXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNl
LCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRp
YWxWYWx1ZShwcm9wZXJ0eUlELCBzdGF0ZSk7Ci0gICAgICAgIEFwcGx5UHJvcGVydHlEZWZhdWx0
QmFzZTxJbWFnZVJlc29sdXRpb25TbmFwLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNu
YXAsIEltYWdlUmVzb2x1dGlvblNuYXAsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9u
U25hcCwgSW1hZ2VSZXNvbHV0aW9uU25hcCwgJlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNv
bHV0aW9uU25hcD46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0YXRlKTsKLSAgICAg
ICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPGZsb2F0LCAmUmVuZGVyU3R5bGU6OmltYWdlUmVz
b2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6c2V0SW1hZ2VSZXNvbHV0aW9uLCBmbG9hdCwg
JlJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uPjo6YXBwbHlJbml0aWFsVmFsdWUo
cHJvcGVydHlJRCwgc3RhdGUpOworICAgICAgICBBcHBseVByb3BlcnR5RGVmYXVsdEJhc2U8SW1h
Z2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmltYWdlUmVzb2x1dGlvblNvdXJjZSwg
SW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvblNv
dXJjZSwgSW1hZ2VSZXNvbHV0aW9uU291cmNlLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJl
c29sdXRpb25Tb3VyY2U+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUlELCBzdHlsZVJlc29s
dmVyKTsKKyAgICAgICAgQXBwbHlQcm9wZXJ0eURlZmF1bHRCYXNlPEltYWdlUmVzb2x1dGlvblNu
YXAsICZSZW5kZXJTdHlsZTo6aW1hZ2VSZXNvbHV0aW9uU25hcCwgSW1hZ2VSZXNvbHV0aW9uU25h
cCwgJlJlbmRlclN0eWxlOjpzZXRJbWFnZVJlc29sdXRpb25TbmFwLCBJbWFnZVJlc29sdXRpb25T
bmFwLCAmUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwPjo6YXBwbHlJbml0
aWFsVmFsdWUocHJvcGVydHlJRCwgc3R5bGVSZXNvbHZlcik7CisgICAgICAgIEFwcGx5UHJvcGVy
dHlEZWZhdWx0QmFzZTxmbG9hdCwgJlJlbmRlclN0eWxlOjppbWFnZVJlc29sdXRpb24sIGZsb2F0
LCAmUmVuZGVyU3R5bGU6OnNldEltYWdlUmVzb2x1dGlvbiwgZmxvYXQsICZSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVzb2x1dGlvbj46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5SUQsIHN0
eWxlUmVzb2x2ZXIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoQ1NTUHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpCisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyKiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVl
LT5pc1ZhbHVlTGlzdCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc4Niw5ICsxNzgwLDkg
QEAgcHVibGljOgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJlc29sdXRpb24g
PSBwcmltaXRpdmVWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19E
UFBYKTsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRp
b25Tb3VyY2Uoc291cmNlKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0
aW9uU25hcChzbmFwKTsKLSAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9u
KHJlc29sdXRpb24pOworICAgICAgICBzdHlsZVJlc29sdmVyLT5zdHlsZSgpLT5zZXRJbWFnZVJl
c29sdXRpb25Tb3VyY2Uoc291cmNlKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5bGUoKS0+
c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci0+c3R5
bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24pOwogICAgIH0KIAogICAgIHN0YXRp
YyBQcm9wZXJ0eUhhbmRsZXIgY3JlYXRlSGFuZGxlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
LmgKaW5kZXggYjJjYzRlZTM1ZmVlZGFlYWQ3NWU3Y2E0MDU1OGU0NDBkZjcxODA4OC4uNGZmZTg1
MjM0YzEzZDBmYmIxNDQ2ZTA2ODgxYzlmN2ZlZmM3MDY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXIuaApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBTdHlsZUJ1aWxkZXJfaAogCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
QEAgLTM0LDE3ICszMywxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1ZhbHVl
OwogY2xhc3MgU3R5bGVCdWlsZGVyOworY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogY2xhc3MgUHJv
cGVydHlIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpJbmhlcml0RnVuY3Rp
b24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJik7Ci0gICAgdHlwZWRlZiB2
b2lkICgqSW5pdGlhbEZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0
ZSYpOwotICAgIHR5cGVkZWYgdm9pZCAoKkFwcGx5RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlJiwgQ1NTVmFsdWUqKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpJbmhl
cml0RnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKTsKKyAgICB0eXBlZGVm
IHZvaWQgKCpJbml0aWFsRnVuY3Rpb24pKENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqKTsK
KyAgICB0eXBlZGVmIHZvaWQgKCpBcHBseUZ1bmN0aW9uKShDU1NQcm9wZXJ0eUlELCBTdHlsZVJl
c29sdmVyKiwgQ1NTVmFsdWUqKTsKICAgICBQcm9wZXJ0eUhhbmRsZXIoKSA6IG1faW5oZXJpdCgw
KSwgbV9pbml0aWFsKDApLCBtX2FwcGx5KDApIHsgfQogICAgIFByb3BlcnR5SGFuZGxlcihJbmhl
cml0RnVuY3Rpb24gaW5oZXJpdCwgSW5pdGlhbEZ1bmN0aW9uIGluaXRpYWwsIEFwcGx5RnVuY3Rp
b24gYXBwbHkpIDogbV9pbmhlcml0KGluaGVyaXQpLCBtX2luaXRpYWwoaW5pdGlhbCksIG1fYXBw
bHkoYXBwbHkpIHsgfQotICAgIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUpIGNvbnN0IHsgQVNTRVJUKG1f
aW5oZXJpdCk7ICgqbV9pbmhlcml0KShwcm9wZXJ0eUlELCBzdGF0ZSk7IH0KLSAgICB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlKSBjb25zdCB7IEFTU0VSVChtX2luaXRpYWwpOyAoKm1faW5pdGlhbCkocHJv
cGVydHlJRCwgc3RhdGUpOyB9Ci0gICAgdm9pZCBhcHBseVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBDU1NWYWx1ZSogdmFsdWUpIGNv
bnN0IHsgQVNTRVJUKG1fYXBwbHkpOyAoKm1fYXBwbHkpKHByb3BlcnR5SUQsIHN0YXRlLCB2YWx1
ZSk7IH0KKyAgICB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QgeyBBU1NFUlQobV9pbmhlcml0
KTsgKCptX2luaGVyaXQpKHByb3BlcnR5SUQsIHN0eWxlUmVzb2x2ZXIpOyB9CisgICAgdm9pZCBh
cHBseUluaXRpYWxWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpIGNvbnN0IHsgQVNTRVJUKG1faW5pdGlhbCk7ICgqbV9pbml0aWFsKShw
cm9wZXJ0eUlELCBzdHlsZVJlc29sdmVyKTsgfQorICAgIHZvaWQgYXBwbHlWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
KiB2YWx1ZSkgY29uc3QgeyBBU1NFUlQobV9hcHBseSk7ICgqbV9hcHBseSkocHJvcGVydHlJRCwg
c3R5bGVSZXNvbHZlciwgdmFsdWUpOyB9CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gbV9pbmhlcml0ICYmIG1faW5pdGlhbCAmJiBtX2FwcGx5OyB9CiAgICAgSW5oZXJpdEZ1bmN0
aW9uIGluaGVyaXRGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5oZXJpdDsgfQogICAgIElu
aXRpYWxGdW5jdGlvbiBpbml0aWFsRnVuY3Rpb24oKSB7IHJldHVybiBtX2luaXRpYWw7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCAxZTg1MzkwOTY4YjUzOWZiNjVmMWMy
ZDBlM2ExNGI2Y2U3NWY1MDgxLi5hNmI2YjEzZDIxNDgyZGE0MDlhODY2NzEzYTI5YjRjZTc0MzBh
YWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC00Nyw3ICs0Nyw2IEBA
CiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3VwcG9ydHNSdWxlLmgi
CiAjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1RvU3R5
bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpZiBFTkFCTEUoQ1NTX1ZBUklB
QkxFUykKICNpbmNsdWRlICJDU1NWYXJpYWJsZVZhbHVlLmgiCkBAIC0xOTYsMTQgKzE5NSwxNCBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUKHBy
b3AsIFByb3ApIFwKIGlmIChpc0luaGVyaXQpIHsgXAotICAgIHN0YXRlLnN0eWxlKCktPnNldCMj
UHJvcChzdGF0ZS5wYXJlbnRTdHlsZSgpLT5wcm9wKCkpOyAgXAorICAgIG1fc3RhdGUuc3R5bGUo
KS0+c2V0IyNQcm9wKG1fc3RhdGUucGFyZW50U3R5bGUoKS0+cHJvcCgpKTsgXAogICAgIHJldHVy
bjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3Ap
IFwKIEhBTkRMRV9JTkhFUklUKHByb3AsIFByb3ApIFwKIGlmIChpc0luaXRpYWwpIHsgXAotICAg
IHN0YXRlLnN0eWxlKCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjUHJvcCgpKTsg
XAorICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQ
cm9wKCkpOyBcCiAgICAgcmV0dXJuOyBcCiB9CiAKQEAgLTIyNSw2ICsyMjQsNyBAQCBzdGF0aWMg
U3R5bGVQcm9wZXJ0eVNldCogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpCiAgICAgcmV0dXJuIHJp
Z2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAorCiBpbmxpbmUgU3RhdGljQ1NTUnVsZUxpc3QqIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjplbnN1cmVSdWxlTGlzdCgpCiB7CiAgICAgaWYgKCFtX3J1bGVM
aXN0KQpAQCAtMjcwLDYgKzI3MCw3IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9j
dW1lbnQqIGRvY3VtZW50LCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKICAgICAsIG1f
dmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKGRvY3Vt
ZW50KSkKICNlbmRpZgogICAgICwgbV9zdHlsZUJ1aWxkZXIoU3R5bGVCdWlsZGVyOjpzaGFyZWRT
dHlsZUJ1aWxkZXIoKSkKKyAgICAsIG1fc3R5bGVNYXAodGhpcykKIHsKICAgICBFbGVtZW50KiBy
b290ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogCkBAIC00NTMsMjIgKzQ1NCwyMyBA
QCBpbmxpbmUgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQog
CiBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzKFN0YXRlJiBzdGF0ZSwg
Y29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQor
dm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0Y2hpbmdSdWxlcyhjb25zdCBNYXRjaFJlcXVl
c3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBydWxlUmFuZ2UpCiB7CiAgICAgQVNTRVJUKG1h
dGNoUmVxdWVzdC5ydWxlU2V0KTsKLSAgICBBU1NFUlQoc3RhdGUuZWxlbWVudCgpKTsKKyAgICBB
U1NFUlQobV9zdGF0ZS5lbGVtZW50KCkpOwogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsK
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuZWxlbWVudCgpOwogICAgIGNvbnN0IFN0eWxl
ZEVsZW1lbnQqIHN0eWxlZEVsZW1lbnQgPSBzdGF0ZS5zdHlsZWRFbGVtZW50KCk7CiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCk7CiAg
ICAgaWYgKCFwc2V1ZG9JZC5pc0VtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKHN0eWxlZEVsZW1l
bnQpOwotICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVx
dWVzdC5ydWxlU2V0LT5zaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMocHNldWRvSWQuaW1wbCgpKSwg
bWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zv
ckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnNoYWRvd1BzZXVkb0VsZW1lbnRSdWxlcyhwc2V1
ZG9JZC5pbXBsKCkpLCBtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CiAgICAgfQogCiAjaWYgRU5B
QkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChlbGVtZW50LT5pc1dlYlZUVEVsZW1lbnQoKSkKLSAg
ICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVs
ZVNldC0+Y3VlUHNldWRvUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmN1ZVBz
ZXVkb1J1bGVzKCksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICNlbmRpZgogICAgIC8vIENo
ZWNrIHdoZXRoZXIgb3RoZXIgdHlwZXMgb2YgcnVsZXMgYXJlIGFwcGxpY2FibGUgaW4gdGhlIGN1
cnJlbnQgdHJlZSBzY29wZS4gQ3JpdGVyaWEgZm9yIHRoaXM6CiAgICAgLy8gYSkgaXQncyBhIFVB
IHJ1bGUKQEAgLTQ4NCw0MyArNDg2LDQ0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoCiAgICAg
Ly8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBl
dmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1
ZmZlci4KICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JMaXN0KHN0YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+aWRSdWxlcyhlbGVtZW50
LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdl
KTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxl
U2V0LT5pZFJ1bGVzKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSwgbWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogICAgIGlmIChzdHlsZWRFbGVtZW50ICYmIHN0eWxlZEVs
ZW1lbnQtPmhhc0NsYXNzKCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHls
ZWRFbGVtZW50LT5jbGFzc05hbWVzKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlc0Zvckxpc3Qoc3RhdGUsIG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5jbGFzc1J1
bGVzKHN0eWxlZEVsZW1lbnQtPmNsYXNzTmFtZXMoKVtpXS5pbXBsKCkpLCBtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QobWF0
Y2hSZXF1ZXN0LnJ1bGVTZXQtPmNsYXNzUnVsZXMoc3R5bGVkRWxlbWVudC0+Y2xhc3NOYW1lcygp
W2ldLmltcGwoKSksIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKICAgICB9CiAKICAgICBpZiAo
ZWxlbWVudC0+aXNMaW5rKCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChz
dGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmxpbmtQc2V1ZG9DbGFzc1J1bGVzKCksIG1hdGNo
UmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0
KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5saW5rUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRjaFJlcXVl
c3QsIHJ1bGVSYW5nZSk7CiAgICAgaWYgKFNlbGVjdG9yQ2hlY2tlcjo6bWF0Y2hlc0ZvY3VzUHNl
dWRvQ2xhc3MoZWxlbWVudCkpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChz
dGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPmZvY3VzUHNldWRvQ2xhc3NSdWxlcygpLCBtYXRj
aFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JMaXN0KHN0
YXRlLCBtYXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCku
aW1wbCgpKSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yTGlzdChzdGF0ZSwgbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQtPnVuaXZlcnNhbFJ1bGVzKCks
IG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNG
b3JMaXN0KG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5mb2N1c1BzZXVkb0NsYXNzUnVsZXMoKSwgbWF0
Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdCht
YXRjaFJlcXVlc3QucnVsZVNldC0+dGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgp
KSwgbWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9y
TGlzdChtYXRjaFJlcXVlc3QucnVsZVNldC0+dW5pdmVyc2FsUnVsZXMoKSwgbWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1
bGVzRm9yUmVnaW9uKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVl
c3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQordm9pZCBTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0ZvclJlZ2lvbihjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVs
ZVJhbmdlJiBydWxlUmFuZ2UpCiB7Ci0gICAgaWYgKCFzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkp
CisgICAgaWYgKCFtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgdW5zaWduZWQgc2l6ZSA9IG1hdGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVj
dG9yc0FuZFJ1bGVTZXRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciA9IG1h
dGNoUmVxdWVzdC5ydWxlU2V0LT5tX3JlZ2lvblNlbGVjdG9yc0FuZFJ1bGVTZXRzLmF0KGkpLnNl
bGVjdG9yOwotICAgICAgICBpZiAoY2hlY2tSZWdpb25TZWxlY3RvcihyZWdpb25TZWxlY3Rvciwg
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KHN0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKS0+bm9kZSgpKSkp
IHsKKyAgICAgICAgaWYgKGNoZWNrUmVnaW9uU2VsZWN0b3IocmVnaW9uU2VsZWN0b3IsIHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihtX3N0YXRlLnJlZ2lvbkZvclN0eWxpbmcoKS0+bm9kZSgpKSkpIHsK
ICAgICAgICAgICAgIFJ1bGVTZXQqIHJlZ2lvblJ1bGVzID0gbWF0Y2hSZXF1ZXN0LnJ1bGVTZXQt
Pm1fcmVnaW9uU2VsZWN0b3JzQW5kUnVsZVNldHMuYXQoaSkucnVsZVNldC5nZXQoKTsKICAgICAg
ICAgICAgIEFTU0VSVChyZWdpb25SdWxlcyk7Ci0gICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJlZ2lvblJ1bGVzLCBtYXRjaFJlcXVlc3QuaW5jbHVk
ZUVtcHR5UnVsZXMsIG1hdGNoUmVxdWVzdC5zY29wZSksIHJ1bGVSYW5nZSk7CisgICAgICAgICAg
ICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocmVnaW9uUnVsZXMsIG1hdGNoUmVx
dWVzdC5pbmNsdWRlRW1wdHlSdWxlcywgbWF0Y2hSZXF1ZXN0LnNjb3BlKSwgcnVsZVJhbmdlKTsK
ICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoU3RhdGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0KQordm9pZCBT
dHlsZVJlc29sdmVyOjpzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmIHJl
c3VsdCkKIHsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIFZlY3Rvcjxjb25zdCBS
dWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVzID0gc3RhdGUubWF0Y2hlZFJ1bGVzKCk7CiAgICAg
aWYgKG1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNvcnRN
YXRjaGVkUnVsZXMoc3RhdGUpOworICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKIAogICAgIGlmIChz
dGF0ZS5tb2RlKCkgPT0gU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5nUnVsZXMpIHsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hdGNoZWRSdWxlcy5zaXplKCk7ICsraSkKQEAg
LTUzNiwxOSArNTM5LDE5IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6c29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsCiAgICAgfQogfQogCi12
b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoU2NvcGVkQXV0aG9yUnVsZXMoU3RhdGUmIHN0YXRlLCBN
YXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFNjb3BlZEF1dGhvclJ1bGVzKE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAjaWYgRU5BQkxFKFNUWUxFX1NDT1BFRCkgfHwgRU5BQkxF
KFNIQURPV19ET00pCiAgICAgaWYgKCFtX3Njb3BlUmVzb2x2ZXIpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIE1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMgYnkgdHJhdmVyc2luZyB0aGUgc2Nv
cGVkIGVsZW1lbnQgc3RhY2sgKHJlYnVpbGQgaXQgaWYgaXQgZ290IGluY29uc2lzdGVudCkuCi0g
ICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5bGVzKCkgJiYgbV9zY29wZVJlc29s
dmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KHN0YXRlLmVsZW1lbnQoKSkpIHsKLSAgICAgICAg
Ym9vbCBhcHBseUF1dGhvclN0eWxlcyA9IHN0YXRlLmVsZW1lbnQoKS0+dHJlZVNjb3BlKCktPmFw
cGx5QXV0aG9yU3R5bGVzKCk7CisgICAgaWYgKG1fc2NvcGVSZXNvbHZlci0+aGFzU2NvcGVkU3R5
bGVzKCkgJiYgbV9zY29wZVJlc29sdmVyLT5lbnN1cmVTdGFja0NvbnNpc3RlbmN5KG1fc3RhdGUu
ZWxlbWVudCgpKSkgeworICAgICAgICBib29sIGFwcGx5QXV0aG9yU3R5bGVzID0gbV9zdGF0ZS5l
bGVtZW50KCktPnRyZWVTY29wZSgpLT5hcHBseUF1dGhvclN0eWxlcygpOwogICAgICAgICBib29s
IGRvY3VtZW50U2NvcGUgPSB0cnVlOwogICAgICAgICB1bnNpZ25lZCBzY29wZVNpemUgPSBtX3Nj
b3BlUmVzb2x2ZXItPnN0YWNrU2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2NvcGVTaXplOyArK2kpIHsKLSAgICAgICAgICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNs
ZWFyKCk7CisgICAgICAgICAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAg
ICAgICAgICByZXN1bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9w
ZXJ0aWVzLnNpemUoKSAtIDE7CiAKICAgICAgICAgICAgIGNvbnN0IFN0eWxlU2NvcGVSZXNvbHZl
cjo6U3RhY2tGcmFtZSYgZnJhbWUgPSBtX3Njb3BlUmVzb2x2ZXItPnN0YWNrRnJhbWVBdChpKTsK
QEAgLTU2MywxMTIgKzU2NiwxMTAgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFNjb3BlZEF1
dGhvclJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm8KIAogICAgICAg
ICAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChmcmFtZS5tX3J1bGVTZXQsIGluY2x1ZGVF
bXB0eVJ1bGVzLCBmcmFtZS5tX3Njb3BlKTsKICAgICAgICAgICAgIFJ1bGVSYW5nZSBydWxlUmFu
Z2UgPSByZXN1bHQucmFuZ2VzLmF1dGhvclJ1bGVSYW5nZSgpOwotICAgICAgICAgICAgY29sbGVj
dE1hdGNoaW5nUnVsZXMoc3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKLSAgICAgICAg
ICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJlcXVlc3QsIHJ1
bGVSYW5nZSk7Ci0gICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoc3RhdGUs
IHJlc3VsdCk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVlc3Qs
IHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlc0ZvclJlZ2lvbiht
YXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgICAgICAgICBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1hdGNoSG9zdFJ1bGVz
KHN0YXRlLCByZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaEhvc3RSdWxlcyhy
ZXN1bHQsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKICAgICBVTlVTRURfUEFSQU0oaW5jbHVkZUVt
cHR5UnVsZXMpOwogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxl
U2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoU3RhdGUmIHN0YXRlKQoraW5saW5lIGJv
b2wgU3R5bGVSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcygp
CiB7CiAjaWYgRU5BQkxFKFNIQURPV19ET00pCi0gICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlciAm
JiBtX3Njb3BlUmVzb2x2ZXItPnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMo
c3RhdGUuZWxlbWVudCgpKTsKKyAgICByZXR1cm4gbV9zY29wZVJlc29sdmVyICYmIG1fc2NvcGVS
ZXNvbHZlci0+c3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc0hvc3RSdWxlcyhtX3N0YXRlLmVs
ZW1lbnQoKSk7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKLSAgICBVTlVTRURfUEFSQU0oc3Rh
dGUpOwogI2VuZGlmCiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hIb3N0UnVsZXMoU3Rh
dGUmIHN0YXRlLCBNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQor
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEhvc3RSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBi
b29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogI2lmIEVOQUJMRShTSEFET1dfRE9NKQogICAgIEFT
U0VSVChtX3Njb3BlUmVzb2x2ZXIpOwogCi0gICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIo
KTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgcmVzdWx0LnJhbmdl
cy5sYXN0QXV0aG9yUnVsZSA9IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxOwog
CiAgICAgVmVjdG9yPFJ1bGVTZXQqPiBtYXRjaGVkUnVsZXM7Ci0gICAgbV9zY29wZVJlc29sdmVy
LT5tYXRjaEhvc3RSdWxlcyhzdGF0ZS5lbGVtZW50KCksIG1hdGNoZWRSdWxlcyk7CisgICAgbV9z
Y29wZVJlc29sdmVyLT5tYXRjaEhvc3RSdWxlcyhtX3N0YXRlLmVsZW1lbnQoKSwgbWF0Y2hlZFJ1
bGVzKTsKICAgICBpZiAobWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSA+IDA7IC0taSkg
ewogICAgICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxl
UmFuZ2UoKTsKLSAgICAgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoc3RhdGUsIE1hdGNoUmVxdWVz
dChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIHN0YXRlLmVsZW1lbnQo
KSksIHJ1bGVSYW5nZSk7CisgICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKE1hdGNoUmVxdWVz
dChtYXRjaGVkUnVsZXMuYXQoaS0xKSwgaW5jbHVkZUVtcHR5UnVsZXMsIG1fc3RhdGUuZWxlbWVu
dCgpKSwgcnVsZVJhbmdlKTsKICAgICB9Ci0gICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVz
KHN0YXRlLCByZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQp
OwogI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTShyZXN1
bHQpOwogICAgIFVOVVNFRF9QQVJBTShpbmNsdWRlRW1wdHlSdWxlcyk7CiAjZW5kaWYKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEF1dGhvclJ1bGVzKFN0YXRlJiBzdGF0ZSwgTWF0Y2hS
ZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hBdXRob3JSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKQogewotICAgIHN0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7CisgICAgbV9zdGF0
ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogICAgIHJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1
bGUgPSByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMTsKIAotICAgIGlmICghc3Rh
dGUuZWxlbWVudCgpKQorICAgIGlmICghbV9zdGF0ZS5lbGVtZW50KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIE1hdGNoIGdsb2JhbCBhdXRob3IgcnVsZXMuCiAgICAgTWF0Y2hSZXF1ZXN0
IG1hdGNoUmVxdWVzdChtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKICAgICBSdWxlUmFuZ2UgcnVsZVJhbmdlID0gcmVzdWx0LnJhbmdlcy5hdXRob3JSdWxlUmFu
Z2UoKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhzdGF0ZSwgbWF0Y2hSZXF1ZXN0LCBydWxl
UmFuZ2UpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKHN0YXRlLCBtYXRjaFJl
cXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMobWF0Y2hSZXF1ZXN0
LCBydWxlUmFuZ2UpOworICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yUmVnaW9uKG1hdGNoUmVx
dWVzdCwgcnVsZVJhbmdlKTsKICNpZiBFTkFCTEUoU0hBRE9XX0RPTSkKICAgICBWZWN0b3I8TWF0
Y2hSZXF1ZXN0PiBtYXRjaFJlcXVlc3RzOwogICAgIG1fcnVsZVNldHMuc2hhZG93RGlzdHJpYnV0
ZWRSdWxlcygpLmNvbGxlY3RNYXRjaFJlcXVlc3RzKGluY2x1ZGVFbXB0eVJ1bGVzLCBtYXRjaFJl
cXVlc3RzKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hdGNoUmVxdWVzdHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBtYXRjaFJlcXVlc3Rz
W2ldLCBydWxlUmFuZ2UpOworICAgICAgICBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhtYXRjaFJlcXVl
c3RzW2ldLCBydWxlUmFuZ2UpOwogI2VuZGlmCiAKLSAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMoc3RhdGUsIHJlc3VsdCk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHJl
c3VsdCk7CiAKLSAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHN0YXRlLCByZXN1bHQsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFNjb3BlZEF1dGhvclJ1bGVzKHJlc3VsdCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVXNlclJ1bGVzKFN0
YXRlJiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
K3ZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVc2VyUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBpZiAoIW1fcnVsZVNldHMudXNlclN0eWxl
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBzdGF0ZS5tYXRjaGVkUnVsZXMoKS5jbGVh
cigpOworICAgIG1fc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKIAogICAgIHJlc3VsdC5y
YW5nZXMubGFzdFVzZXJSdWxlID0gcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7
CiAgICAgTWF0Y2hSZXF1ZXN0IG1hdGNoUmVxdWVzdChtX3J1bGVTZXRzLnVzZXJTdHlsZSgpLCBp
bmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgUnVsZVJhbmdlIHJ1bGVSYW5nZSA9IHJlc3VsdC5yYW5n
ZXMudXNlclJ1bGVSYW5nZSgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBtYXRj
aFJlcXVlc3QsIHJ1bGVSYW5nZSk7Ci0gICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24o
c3RhdGUsIG1hdGNoUmVxdWVzdCwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0TWF0Y2hpbmdSdWxl
cyhtYXRjaFJlcXVlc3QsIHJ1bGVSYW5nZSk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JS
ZWdpb24obWF0Y2hSZXF1ZXN0LCBydWxlUmFuZ2UpOwogCi0gICAgc29ydEFuZFRyYW5zZmVyTWF0
Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxl
cyhyZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhTdGF0ZSYg
c3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIFJ1bGVTZXQqIHJ1bGVzKQordm9pZCBTdHlsZVJl
c29sdmVyOjptYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgUnVsZVNldCogcnVsZXMp
CiB7Ci0gICAgc3RhdGUubWF0Y2hlZFJ1bGVzKCkuY2xlYXIoKTsKKyAgICBtX3N0YXRlLm1hdGNo
ZWRSdWxlcygpLmNsZWFyKCk7CiAgICAgCiAgICAgcmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlID0g
cmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSAtIDE7CiAgICAgUnVsZVJhbmdlIHJ1bGVS
YW5nZSA9IHJlc3VsdC5yYW5nZXMuVUFSdWxlUmFuZ2UoKTsKLSAgICBjb2xsZWN0TWF0Y2hpbmdS
dWxlcyhzdGF0ZSwgTWF0Y2hSZXF1ZXN0KHJ1bGVzKSwgcnVsZVJhbmdlKTsKKyAgICBjb2xsZWN0
TWF0Y2hpbmdSdWxlcyhNYXRjaFJlcXVlc3QocnVsZXMpLCBydWxlUmFuZ2UpOwogCi0gICAgc29y
dEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKHN0YXRlLCByZXN1bHQpOworICAgIHNvcnRBbmRUcmFu
c2Zlck1hdGNoZWRSdWxlcyhyZXN1bHQpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxl
Y3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYgc3RhdGUsIGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIHJ1bGVzLCBjb25zdCBNYXRjaFJlcXVlc3QmIG1hdGNoUmVxdWVzdCwgUnVsZVJhbmdlJiBy
dWxlUmFuZ2UpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlz
dChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgY29uc3QgTWF0Y2hSZXF1ZXN0JiBtYXRj
aFJlcXVlc3QsIFJ1bGVSYW5nZSYgcnVsZVJhbmdlKQogewogICAgIGlmICghcnVsZXMpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgLy8gSW4gc29t
ZSBjYXNlcyB3ZSBtYXkgZW5kIHVwIGxvb2tpbmcgdXAgc3R5bGUgZm9yIHJhbmRvbSBlbGVtZW50
cyBpbiB0aGUgbWlkZGxlIG9mIGEgcmVjdXJzaXZlIHRyZWUgcmVzb2x2ZS4KICAgICAvLyBBbmNl
c3RvciBpZGVudGlmaWVyIGZpbHRlciB3b24ndCBiZSB1cC10by1kYXRlIGluIHRoYXQgY2FzZSBh
bmQgd2UgY2FuJ3QgdXNlIHRoZSBmYXN0IHBhdGguCiAgICAgYm9vbCBjYW5Vc2VGYXN0UmVqZWN0
ID0gbV9zZWxlY3RvckZpbHRlci5wYXJlbnRTdGFja0lzQ29uc2lzdGVudChzdGF0ZS5wYXJlbnRO
b2RlKCkpICYmIG1hdGNoUmVxdWVzdC5iZWhhdmlvckF0Qm91bmRhcnkgPT0gU2VsZWN0b3JDaGVj
a2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeTsKQEAgLTY4Miw3ICs2ODMsNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmNvbGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYgc3RhdGUsIGNvbnN0
IFZlY3RvcjxSdWxlRAogICAgICAgICBTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7
CiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxNYXRjaFJ1bGUoZG9jdW1lbnQoKSwgcnVsZSwgdGhpcyk7
CiAgICAgICAgIFBzZXVkb0lkIGR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKLSAgICAgICAgaWYg
KHJ1bGVNYXRjaGVzKHN0YXRlLCBydWxlRGF0YSwgbWF0Y2hSZXF1ZXN0LnNjb3BlLCBkeW5hbWlj
UHNldWRvLCBtYXRjaFJlcXVlc3QuYmVoYXZpb3JBdEJvdW5kYXJ5KSkgeworICAgICAgICBpZiAo
cnVsZU1hdGNoZXMocnVsZURhdGEsIG1hdGNoUmVxdWVzdC5zY29wZSwgZHluYW1pY1BzZXVkbywg
bWF0Y2hSZXF1ZXN0LmJlaGF2aW9yQXRCb3VuZGFyeSkpIHsKICAgICAgICAgICAgIC8vIElmIHRo
ZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUg
bm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9w
ZXJ0aWVzID0gcnVsZS0+cHJvcGVydGllcygpOwogICAgICAgICAgICAgaWYgKCFwcm9wZXJ0aWVz
IHx8IChwcm9wZXJ0aWVzLT5pc0VtcHR5KCkgJiYgIW1hdGNoUmVxdWVzdC5pbmNsdWRlRW1wdHlS
dWxlcykpIHsKQEAgLTcxMCw3ICs3MTEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNvbGxlY3RN
YXRjaGluZ1J1bGVzRm9yTGlzdChTdGF0ZSYgc3RhdGUsIGNvbnN0IFZlY3RvcjxSdWxlRAogICAg
ICAgICAgICAgICAgICAgICBydWxlUmFuZ2UuZmlyc3RSdWxlSW5kZXggPSBydWxlUmFuZ2UubGFz
dFJ1bGVJbmRleDsKIAogICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxp
c3Qgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICAgICAgICAgICAgICBzdGF0ZS5hZGRNYXRjaGVkUnVs
ZSgmcnVsZURhdGEpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuYWRkTWF0Y2hlZFJ1bGUoJnJ1
bGVEYXRhKTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZE1h
dGNoUnVsZShjb29raWUsIHRydWUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQpAQCAtNzI2LDMxICs3MjcsMzEgQEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVS
dWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKICAgICByZXR1cm4g
KHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9z
aXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsKIH0KIAotdm9pZCBTdHlsZVJl
c29sdmVyOjpzb3J0TWF0Y2hlZFJ1bGVzKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6c29ydE1hdGNoZWRSdWxlcygpCiB7Ci0gICAgc3RkOjpzb3J0KHN0YXRlLm1hdGNoZWRSdWxl
cygpLmJlZ2luKCksIHN0YXRlLm1hdGNoZWRSdWxlcygpLmVuZCgpLCBjb21wYXJlUnVsZXMpOwor
ICAgIHN0ZDo6c29ydChtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmJlZ2luKCksIG1fc3RhdGUubWF0
Y2hlZFJ1bGVzKCkuZW5kKCksIGNvbXBhcmVSdWxlcyk7CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZl
cjo6bWF0Y2hBbGxSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wg
aW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQordm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaEFsbFJ1bGVz
KE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVkZVNNSUxQcm9wZXJ0aWVzKQogewotICAg
IG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0KTsKKyAgICBtYXRjaFVBUnVsZXMocmVzdWx0KTsK
IAogICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgIGlmIChtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgbWF0Y2hVc2VyUnVsZXMoc3RhdGUsIHJlc3Vs
dCwgZmFsc2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhyZXN1bHQsIGZhbHNlKTsKIAogICAg
IC8vIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBmaXJzdCB3aXRoIHByZXNlbnRh
dGlvbmFsIGF0dHJpYnV0ZXMgbWFwcGVkIGZyb20gSFRNTC4KLSAgICBpZiAoc3RhdGUuc3R5bGVk
RWxlbWVudCgpKSB7Ci0gICAgICAgIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBz
dGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOworICAg
IGlmIChtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKSkgeworICAgICAgICBhZGRFbGVtZW50U3R5bGVQ
cm9wZXJ0aWVzKHJlc3VsdCwgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPnByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKCkpOwogCiAgICAgICAgIC8vIE5vdyB3ZSBjaGVjayBhZGRpdGlvbmFsIG1h
cHBlZCBkZWNsYXJhdGlvbnMuCiAgICAgICAgIC8vIFRhYmxlcyBhbmQgdGFibGUgY2VsbHMgc2hh
cmUgYW4gYWRkaXRpb25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3QgYmUgYXBwbGllZAogICAgICAg
ICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVu
ZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgotICAgICAgICBhZGRFbGVt
ZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5hZGRpdGlv
bmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CisgICAgICAgIGFkZEVsZW1lbnRTdHls
ZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+YWRkaXRpb25hbFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwogCi0gICAgICAgIGlmIChzdGF0ZS5zdHlsZWRF
bGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBpZiAobV9zdGF0ZS5zdHlsZWRF
bGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAgYm9vbCBpc0F1dG87Ci0g
ICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KHN0
YXRlLnN0eWxlZEVsZW1lbnQoKSktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRl
KGlzQXV0byk7CisgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hU
TUxFbGVtZW50KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+ZGlyZWN0aW9uYWxpdHlJZmhhc0Rp
ckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKICAgICAgICAgICAgIGlmIChpc0F1dG8pCiAgICAgICAg
ICAgICAgICAgYWRkTWF0Y2hlZFByb3BlcnRpZXMocmVzdWx0LCB0ZXh0RGlyZWN0aW9uID09IExU
UiA/IGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24oKSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKSk7
CiAgICAgICAgIH0KQEAgLTc1OCwyMSArNzU5LDIxIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0
Y2hBbGxSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNoUmVzdWx0JiByZXN1bHQsIGJvb2wgaW5jbHVk
CiAgICAgCiAgICAgLy8gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMgbmV4dC4KICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgIG1hdGNoQXV0aG9yUnVs
ZXMoc3RhdGUsIHJlc3VsdCwgZmFsc2UpOworICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHJlc3Vs
dCwgZmFsc2UpOwogCiAgICAgLy8gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRl
LgotICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBzdGF0ZS5zdHlsZWRFbGVt
ZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKSB7CisgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpICYm
IG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pbmxpbmVTdHlsZSgpKSB7CiAgICAgICAgIC8vIElu
bGluZSBzdHlsZSBpcyBpbW11dGFibGUgYXMgbG9uZyBhcyB0aGVyZSBpcyBubyBDU1NPTSB3cmFw
cGVyLgogICAgICAgICAvLyBGSVhNRTogTWVkaWEgY29udHJvbCBzaGFkb3cgdHJlZXMgc2VlbSB0
byBoYXZlIHByb2JsZW1zIHdpdGggY2FjaGluZy4KLSAgICAgICAgYm9vbCBpc0lubGluZVN0eWxl
Q2FjaGVhYmxlID0gIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5lU3R5bGUoKS0+aXNNdXRh
YmxlKCkgJiYgIXN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aXNJblNoYWRvd1RyZWUoKTsKKyAgICAg
ICAgYm9vbCBpc0lubGluZVN0eWxlQ2FjaGVhYmxlID0gIW1fc3RhdGUuc3R5bGVkRWxlbWVudCgp
LT5pbmxpbmVTdHlsZSgpLT5pc011dGFibGUoKSAmJiAhbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCkt
PmlzSW5TaGFkb3dUcmVlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBDb25zdGlmeS4KLSAgICAgICAg
YWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRlLnN0eWxlZEVsZW1lbnQoKS0+
aW5saW5lU3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CisgICAgICAgIGFkZEVsZW1l
bnRTdHlsZVByb3BlcnRpZXMocmVzdWx0LCBtX3N0YXRlLnN0eWxlZEVsZW1lbnQoKS0+aW5saW5l
U3R5bGUoKSwgaXNJbmxpbmVTdHlsZUNhY2hlYWJsZSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFNW
RykKICAgICAvLyBOb3cgY2hlY2sgU01JTCBhbmltYXRpb24gb3ZlcnJpZGUgc3R5bGUuCi0gICAg
aWYgKGluY2x1ZGVTTUlMUHJvcGVydGllcyAmJiBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAm
JiBzdGF0ZS5zdHlsZWRFbGVtZW50KCkgJiYgc3RhdGUuc3R5bGVkRWxlbWVudCgpLT5pc1NWR0Vs
ZW1lbnQoKSkKLSAgICAgICAgYWRkRWxlbWVudFN0eWxlUHJvcGVydGllcyhyZXN1bHQsIHN0YXRp
Y19jYXN0PFNWR0VsZW1lbnQqPihzdGF0ZS5zdHlsZWRFbGVtZW50KCkpLT5hbmltYXRlZFNNSUxT
dHlsZVByb3BlcnRpZXMoKSwgZmFsc2UgLyogaXNDYWNoZWFibGUgKi8pOworICAgIGlmIChpbmNs
dWRlU01JTFByb3BlcnRpZXMgJiYgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdGF0
ZS5zdHlsZWRFbGVtZW50KCkgJiYgbV9zdGF0ZS5zdHlsZWRFbGVtZW50KCktPmlzU1ZHRWxlbWVu
dCgpKQorICAgICAgICBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKHJlc3VsdCwgc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KG1fc3RhdGUuc3R5bGVkRWxlbWVudCgpKS0+YW5pbWF0ZWRTTUlMU3R5
bGVQcm9wZXJ0aWVzKCksIGZhbHNlIC8qIGlzQ2FjaGVhYmxlICovKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CiAjZW5kaWYKQEAgLTc5NCwxMiArNzk1
LDE0IEBAIGlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjppbml0RWxlbWVudChFbGVt
ZW50KiBlKQogICAgIG1fZWxlbWVudExpbmtTdGF0ZSA9IGUgPyBlLT5kb2N1bWVudCgpLT52aXNp
dGVkTGlua1N0YXRlKCktPmRldGVybWluZUxpbmtTdGF0ZShlKSA6IE5vdEluc2lkZUxpbms7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KFN0YXRlJiBzdGF0ZSwg
RWxlbWVudCogZSkKK2lubGluZSB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRFbGVtZW50KEVsZW1l
bnQqIGUpCiB7Ci0gICAgc3RhdGUuaW5pdEVsZW1lbnQoZSk7Ci0gICAgaWYgKGUgJiYgZSA9PSBl
LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICBlLT5kb2N1bWVudCgp
LT5zZXREaXJlY3Rpb25TZXRPbkRvY3VtZW50RWxlbWVudChmYWxzZSk7Ci0gICAgICAgIGUtPmRv
Y3VtZW50KCktPnNldFdyaXRpbmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAg
IGlmIChtX3N0YXRlLmVsZW1lbnQoKSAhPSBlKSB7CisgICAgICAgIG1fc3RhdGUuaW5pdEVsZW1l
bnQoZSk7CisgICAgICAgIGlmIChlICYmIGUgPT0gZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkpIHsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldERpcmVjdGlvblNldE9uRG9j
dW1lbnRFbGVtZW50KGZhbHNlKTsKKyAgICAgICAgICAgIGUtPmRvY3VtZW50KCktPnNldFdyaXRp
bmdNb2RlU2V0T25Eb2N1bWVudEVsZW1lbnQoZmFsc2UpOworICAgICAgICB9CiAgICAgfQogfQog
CkBAIC04ODcsMjIgKzg5MCwyNiBAQCBOb2RlKiBTdHlsZVJlc29sdmVyOjpsb2NhdGVDb3VzaW5M
aXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bgogICAgIHJldHVy
biAwOwogfQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNo
ZXNSdWxlU2V0KEVsZW1lbnQqIGUsIFJ1bGVTZXQqIHJ1bGVTZXQpCitib29sIFN0eWxlUmVzb2x2
ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVTZXQp
CiB7CiAgICAgaWYgKCFydWxlU2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9zdGF0
ZS5tYXRjaGVkUnVsZXMoKS5jbGVhcigpOwogCi0gICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7
Ci0gICAgc3RhdGUuaW5pdEVsZW1lbnQoZSk7Ci0gICAgc3RhdGUuc2V0TW9kZShTZWxlY3RvckNo
ZWNrZXI6OlNoYXJpbmdSdWxlcyk7CisgICAgbV9zdGF0ZS5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tl
cjo6U2hhcmluZ1J1bGVzKTsKICAgICBpbnQgZmlyc3RSdWxlSW5kZXggPSAtMSwgbGFzdFJ1bGVJ
bmRleCA9IC0xOwogICAgIFJ1bGVSYW5nZSBydWxlUmFuZ2UoZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgpOwotICAgIGNvbGxlY3RNYXRjaGluZ1J1bGVzKHN0YXRlLCBNYXRjaFJlcXVlc3Qo
cnVsZVNldCksIHJ1bGVSYW5nZSk7Ci0gICAgcmV0dXJuICFzdGF0ZS5tYXRjaGVkUnVsZXMoKS5p
c0VtcHR5KCk7CisgICAgY29sbGVjdE1hdGNoaW5nUnVsZXMoTWF0Y2hSZXF1ZXN0KHJ1bGVTZXQp
LCBydWxlUmFuZ2UpOworICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OlJlc29s
dmluZ1N0eWxlKTsKKyAgICBpZiAobV9zdGF0ZS5tYXRjaGVkUnVsZXMoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3N0YXRlLm1hdGNoZWRSdWxlcygpLmNsZWFyKCk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHls
ZVdpdGhDb250cm9sKGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCogZWxlbWVudCkg
Y29uc3QKK2Jvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiB0aGlzSW5wdXRFbGVtZW50ID0gZWxlbWVudC0+
dG9JbnB1dEVsZW1lbnQoKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBvdGhlcklucHV0RWxlbWVu
dCA9IHN0YXRlLmVsZW1lbnQoKS0+dG9JbnB1dEVsZW1lbnQoKTsKIApAQCAtOTU2LDggKzk2Myw5
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhFbGVtZW50KiBl
bGVtZW50KQogICAgIHJldHVybiBlbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgdG9IVE1MRWxl
bWVudChlbGVtZW50KS0+aGFzRGlyZWN0aW9uQXV0bygpOwogfQogCi1ib29sIFN0eWxlUmVzb2x2
ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMo
Y29uc3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25z
dAorYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVB
ZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0
CiB7CisgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBpZiAoc3RhdGUuZWxl
bWVudCgpLT5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUtPmVsZW1lbnREYXRhKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChzdGF0ZS5lbGVtZW50KCktPmZhc3RHZXRB
dHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0
QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpCkBAIC05OTcsOSArMTAwNSwxMCBAQCBib29s
IFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGlu
Z0F0dHJpYnV0ZXMoY29uc3QgUwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFN0eWxlUmVz
b2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChjb25zdCBTdGF0ZSYgc3RhdGUsIFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Citib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudChTdHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IGVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CisgICAgY29uc3QgU3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTEwMjksNyArMTAzOCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHls
ZVdpdGhFbGVtZW50KGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIGlmIChlbGVtZW50ID09IGVsZW1lbnQtPmRvY3VtZW50KCktPmNz
c1RhcmdldCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFzaGFyaW5nQ2FuZGlk
YXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKHN0YXRlLCBlbGVtZW50KSkK
KyAgICBpZiAoIXNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJp
YnV0ZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZWxlbWVudC0+
YWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgIT0gc3RhdGUuc3R5bGVkRWxl
bWVudCgpLT5hZGRpdGlvbmFsUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTA1MCw3ICsxMDU5LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpj
YW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoY29uc3QgU3RhdGUmIHN0YXRlLCBTdHlsZWRFbGVtZW50
KgogICAgIGlmIChpc0NvbnRyb2wgIT0gc3RhdGUuZWxlbWVudCgpLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaXNDb250cm9sICYmICFj
YW5TaGFyZVN0eWxlV2l0aENvbnRyb2woc3RhdGUsIGVsZW1lbnQpKQorICAgIGlmIChpc0NvbnRy
b2wgJiYgIWNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChlbGVtZW50KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKHN0eWxlLT50cmFuc2l0aW9ucygpIHx8IHN0eWxlLT5hbmltYXRp
b25zKCkpCkBAIC0xMDkwLDEyICsxMDk5LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hh
cmVTdHlsZVdpdGhFbGVtZW50KGNvbnN0IFN0YXRlJiBzdGF0ZSwgU3R5bGVkRWxlbWVudCoKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6
OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0IFN0YXRlJiBzdGF0ZSwgTm9kZSogbm9k
ZSwgdW5zaWduZWQmIGNvdW50KSBjb25zdAoraW5saW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVz
b2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKE5vZGUqIG5vZGUsIHVuc2lnbmVkJiBj
b3VudCkgY29uc3QKIHsKICAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2li
bGluZygpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNhblNoYXJlU3R5bGVXaXRoRWxlbWVudChzdGF0
ZSwgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpKSkKKyAgICAgICAgaWYgKGNhblNo
YXJlU3R5bGVXaXRoRWxlbWVudChzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChjb3VudCsrID09IGNTdHlsZVNlYXJjaFRo
cmVzaG9sZCkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTEwMyw4ICsxMTEyLDkgQEAgaW5s
aW5lIFN0eWxlZEVsZW1lbnQqIFN0eWxlUmVzb2x2ZXI6OmZpbmRTaWJsaW5nRm9yU3R5bGVTaGFy
aW5nKGNvbnN0IFN0YXRlJiBzdGEKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVu
dCo+KG5vZGUpOwogfQogCi1SZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVk
U3R5bGUoU3RhdGUmIHN0YXRlKQorUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNo
YXJlZFN0eWxlKCkKIHsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIGlmICghc3Rh
dGUuc3R5bGVkRWxlbWVudCgpIHx8ICFzdGF0ZS5wYXJlbnRTdHlsZSgpKQogICAgICAgICByZXR1
cm4gMDsKIApAQCAtMTEzNyw3ICsxMTQ3LDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6
OmxvY2F0ZVNoYXJlZFN0eWxlKFN0YXRlJiBzdGF0ZSkKICAgICBTdHlsZWRFbGVtZW50KiBzaGFy
ZUVsZW1lbnQgPSAwOwogICAgIE5vZGUqIGNvdXNpbkxpc3QgPSBzdGF0ZS5zdHlsZWRFbGVtZW50
KCktPnByZXZpb3VzU2libGluZygpOwogICAgIHdoaWxlIChjb3VzaW5MaXN0KSB7Ci0gICAgICAg
IHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKHN0YXRlLCBjb3VzaW5M
aXN0LCBjb3VudCk7CisgICAgICAgIHNoYXJlRWxlbWVudCA9IGZpbmRTaWJsaW5nRm9yU3R5bGVT
aGFyaW5nKGNvdXNpbkxpc3QsIGNvdW50KTsKICAgICAgICAgaWYgKHNoYXJlRWxlbWVudCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjb3VzaW5MaXN0ID0gbG9jYXRlQ291c2luTGlzdChj
b3VzaW5MaXN0LT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwpAQCAtMTE0OCwx
MyArMTE1OCwxMyBAQCBSZW5kZXJTdHlsZSogU3R5bGVSZXNvbHZlcjo6bG9jYXRlU2hhcmVkU3R5
bGUoU3RhdGUmIHN0YXRlKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENhbid0IHNoYXJl
IGlmIHNpYmxpbmcgcnVsZXMgYXBwbHkuIFRoaXMgaXMgY2hlY2tlZCBhdCB0aGUgZW5kIGFzIGl0
IHNob3VsZCByYXJlbHkgZmFpbC4KLSAgICBpZiAoc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hl
c1J1bGVTZXQoc3RhdGUuZWxlbWVudCgpLCBtX3J1bGVTZXRzLnNpYmxpbmcoKSkpCisgICAgaWYg
KHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNldHMuc2libGluZygp
KSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gQ2FuJ3Qgc2hhcmUgaWYgYXR0cmlidXRlIHJ1
bGVzIGFwcGx5LgotICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzUnVsZVNldChz
dGF0ZS5lbGVtZW50KCksIG1fcnVsZVNldHMudW5jb21tb25BdHRyaWJ1dGUoKSkpCisgICAgaWYg
KHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KG1fcnVsZVNldHMudW5jb21tb25B
dHRyaWJ1dGUoKSkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIENhbid0IHNoYXJlIGlmIEBo
b3N0IEAtcnVsZXMgYXBwbHkuCi0gICAgaWYgKHN0eWxlU2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNI
b3N0UnVsZXMoc3RhdGUpKQorICAgIGlmIChzdHlsZVNoYXJpbmdDYW5kaWRhdGVNYXRjaGVzSG9z
dFJ1bGVzKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIFRyYWNraW5nIGNoaWxkIGluZGV4
IHJlcXVpcmVzIHVuaXF1ZSBzdHlsZSBmb3IgZWFjaCBub2RlLiBUaGlzIG1heSBnZXQgc2V0IGJ5
IHRoZSBzaWJsaW5nIHJ1bGUgbWF0Y2ggYWJvdmUuCiAgICAgaWYgKHBhcmVudEVsZW1lbnRQcmV2
ZW50c1NoYXJpbmcoc3RhdGUuZWxlbWVudCgpLT5wYXJlbnRFbGVtZW50KCkpKQpAQCAtMTE2Miw3
ICsxMTcyLDcgQEAgUmVuZGVyU3R5bGUqIFN0eWxlUmVzb2x2ZXI6OmxvY2F0ZVNoYXJlZFN0eWxl
KFN0YXRlJiBzdGF0ZSkKICAgICByZXR1cm4gc2hhcmVFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwog
fQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhTdGF0ZSYgc3RhdGUsIE1hdGNo
UmVzdWx0JiByZXN1bHQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Om1hdGNoVUFSdWxlcyhNYXRjaFJl
c3VsdCYgcmVzdWx0KQogewogICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOwogCkBAIC0x
MTcxLDE1ICsxMTgxLDE1IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6bWF0Y2hVQVJ1bGVzKFN0YXRl
JiBzdGF0ZSwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKICAgICAgICAgcmVzdWx0LmlzQ2FjaGVhYmxl
ID0gZmFsc2U7CiAgICAgUnVsZVNldCogdXNlckFnZW50U3R5bGVTaGVldCA9IG1fbWVkaXVtLT5t
ZWRpYVR5cGVNYXRjaFNwZWNpZmljKCJwcmludCIpCiAgICAgICAgID8gQ1NTRGVmYXVsdFN0eWxl
U2hlZXRzOjpkZWZhdWx0UHJpbnRTdHlsZSA6IENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVs
dFN0eWxlOwotICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNo
ZWV0KTsKKyAgICBtYXRjaFVBUnVsZXMocmVzdWx0LCB1c2VyQWdlbnRTdHlsZVNoZWV0KTsKIAog
ICAgIC8vIEluIHF1aXJrcyBtb2RlLCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSBxdWlya3MgdXNl
ciBhZ2VudCBzaGVldC4KICAgICBpZiAoZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpCi0gICAg
ICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgcmVzdWx0LCBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmRl
ZmF1bHRRdWlya3NTdHlsZSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIENTU0RlZmF1
bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFF1aXJrc1N0eWxlKTsKIAogICAgIC8vIElmIGRvY3VtZW50
IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2RlIG9yIGluIHhtbCB2
aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmlldyBzb3VyY2Ugc3R5
bGUgc2hlZXQuCiAgICAgaWYgKGRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKQotICAgICAgICBt
YXRjaFVBUnVsZXMoc3RhdGUsIHJlc3VsdCwgQ1NTRGVmYXVsdFN0eWxlU2hlZXRzOjp2aWV3U291
cmNlU3R5bGUoKSk7CisgICAgICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQsIENTU0RlZmF1bHRTdHls
ZVNoZWV0czo6dmlld1NvdXJjZVN0eWxlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRTdHlsZXNG
b3JQYWdpbmF0aW9uTW9kZShQYWdpbmF0aW9uOjpNb2RlIHBhZ2luYXRpb25Nb2RlLCBSZW5kZXJT
dHlsZSogc3R5bGUpCkBAIC0xMzc3LDI4ICsxMzg3LDI1IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBSZW5k
ZXJTCiAgICAgICAgIHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwogICAgIH0KIAotICAg
IFN0YXRlIHN0YXRlKGRvY3VtZW50KCkpOwotICAgIGluaXRFbGVtZW50KHN0YXRlLCBlbGVtZW50
KTsKKyAgICBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOworICAgIGluaXRFbGVtZW50KGVsZW1lbnQp
OwogICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgZWxlbWVudCwgZGVm
YXVsdFBhcmVudCwgTk9QU0VVRE8sIHJlZ2lvbkZvclN0eWxpbmcpOwogICAgIGlmIChzaGFyaW5n
QmVoYXZpb3IgPT0gQWxsb3dTdHlsZVNoYXJpbmcgJiYgIXN0YXRlLmRpc3RyaWJ1dGVkVG9JbnNl
cnRpb25Qb2ludCgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzaGFyZWRTdHlsZSA9IGxvY2F0
ZVNoYXJlZFN0eWxlKHN0YXRlKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYXJlZFN0eWxlID0g
bG9jYXRlU2hhcmVkU3R5bGUoKTsKICAgICAgICAgaWYgKHNoYXJlZFN0eWxlKQogICAgICAgICAg
ICAgcmV0dXJuIHNoYXJlZFN0eWxlOwogICAgIH0KIAogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
Y2xvbmVGb3JQYXJlbnQ7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKIAogICAgIGlm
IChzdGF0ZS5wYXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgIHN0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZSgpOwotICAgICAgICBzdHlsZS0+aW5oZXJpdEZyb20oc3RhdGUucGFyZW50U3R5bGUoKSwg
aXNBdFNoYWRvd0JvdW5kYXJ5KGVsZW1lbnQpID8gUmVuZGVyU3R5bGU6OkF0U2hhZG93Qm91bmRh
cnkgOiBSZW5kZXJTdHlsZTo6Tm90QXRTaGFkb3dCb3VuZGFyeSk7CisgICAgICAgIHN0YXRlLnNl
dFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CisgICAgICAgIHN0YXRlLnN0eWxlKCktPmlu
aGVyaXRGcm9tKHN0YXRlLnBhcmVudFN0eWxlKCksIGlzQXRTaGFkb3dCb3VuZGFyeShlbGVtZW50
KSA/IFJlbmRlclN0eWxlOjpBdFNoYWRvd0JvdW5kYXJ5IDogUmVuZGVyU3R5bGU6Ok5vdEF0U2hh
ZG93Qm91bmRhcnkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0eWxlID0gZGVmYXVsdFN0eWxl
Rm9yRWxlbWVudCgpOwotICAgICAgICBjbG9uZUZvclBhcmVudCA9IFJlbmRlclN0eWxlOjpjbG9u
ZShzdHlsZS5nZXQoKSk7CisgICAgICAgIHN0YXRlLnNldFN0eWxlKGRlZmF1bHRTdHlsZUZvckVs
ZW1lbnQoKSk7CisgICAgICAgIGNsb25lRm9yUGFyZW50ID0gUmVuZGVyU3R5bGU6OmNsb25lKHN0
YXRlLnN0eWxlKCkpOwogICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShjbG9uZUZvclBhcmVu
dC5nZXQoKSk7CiAgICAgfQotICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlKTsKLQogICAgIC8vIGNv
bnRlbnRlZGl0YWJsZSBhdHRyaWJ1dGUgKGltcGxlbWVudGVkIGJ5IC13ZWJraXQtdXNlci1tb2Rp
ZnkpIHNob3VsZAogICAgIC8vIGJlIHByb3BhZ2F0ZWQgZnJvbSBzaGFkb3cgaG9zdCB0byBkaXN0
cmlidXRlZCBub2RlLgogICAgIGlmIChzdGF0ZS5kaXN0cmlidXRlZFRvSW5zZXJ0aW9uUG9pbnQo
KSkgewpAQCAtMTQyNiwxNCArMTQzMywxNiBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBTdHls
ZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUmVuZGVyUwogCiAg
ICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgaWYgKG1hdGNoaW5nQmVoYXZpb3IgPT0g
TWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCi0gICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwgbWF0
Y2hSZXN1bHQpOworICAgICAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOwogICAgIGVsc2UK
LSAgICAgICAgbWF0Y2hBbGxSdWxlcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIG1hdGNoaW5nQmVoYXZp
b3IgIT0gTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOworICAgICAgICBtYXRjaEFsbFJ1bGVz
KG1hdGNoUmVzdWx0LCBtYXRjaGluZ0JlaGF2aW9yICE9IE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdT
TUlMKTsKIAotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoc3RhdGUsIG1hdGNoUmVzdWx0LCBl
bGVtZW50KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50
KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0
IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgotICAgIGFkanVzdFJlbmRlclN0eWxl
KHN0YXRlLCBzdHlsZS5nZXQoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxlbWVudCk7CisgICAg
YWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUuc3R5bGUoKSwgc3RhdGUucGFyZW50U3R5bGUoKSwgZWxl
bWVudCk7CisKKyAgICBzdGF0ZS5jbGVhcigpOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJl
c29sdmUuCiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nlc3NTdHlsZVJlc29sdmVyKCk7CiAKQEAg
LTE0NDEsNDAgKzE0NTAsNDMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFJlbmRlclMKICAgICByZXR1cm4g
c3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoU3RhdGUmIHN0YXRlLCBjb25zdCBSZW5kZXJTdHlsZSog
ZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgS2V5ZnJhbWVWYWx1
ZSYga2V5ZnJhbWVWYWx1ZSkKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgY29uc3Qg
U3R5bGVLZXlmcmFtZSoga2V5ZnJhbWUsIEtleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCiB7
CiAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygp
KQogICAgICAgICBhZGRNYXRjaGVkUHJvcGVydGllcyhyZXN1bHQsIGtleWZyYW1lLT5wcm9wZXJ0
aWVzKCkpOwogCisgICAgQVNTRVJUKCFtX3N0YXRlLnN0eWxlKCkpOworCisgICAgU3RhdGUmIHN0
YXRlID0gbV9zdGF0ZTsKKwogICAgIC8vIENyZWF0ZSB0aGUgc3R5bGUKLSAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lKGVsZW1lbnRTdHlsZSk7Ci0gICAg
c3RhdGUuc2V0U3R5bGUoc3R5bGUpOworICAgIHN0YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpj
bG9uZShlbGVtZW50U3R5bGUpKTsKICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFsdWUoMCk7CiAK
ICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoICFpbXBvcnRhbnQuIFNpbmNlIHRo
ZXJlIGlzIG9ubHkgZXZlciBvbmUKICAgICAvLyBkZWNsLCB0aGVyZSdzIG5vdGhpbmcgdG8gb3Zl
cnJpZGUuIFNvIGp1c3QgYWRkIHRoZSBmaXJzdCBwcm9wZXJ0aWVzLgogICAgIGJvb2wgaW5oZXJp
dGVkT25seSA9IGZhbHNlOwogICAgIGlmIChrZXlmcmFtZS0+cHJvcGVydGllcygpKQotICAgICAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBy
ZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5o
ZXJpdGVkT25seSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5
UHJvcGVydGllcz4ocmVzdWx0LCBmYWxzZSwgMCwgcmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNp
emUoKSAtIDEsIGluaGVyaXRlZE9ubHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRp
ZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoc3RhdGUpOwor
ICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFy
ZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZQogICAgIGlmIChzdGF0ZS5saW5lSGVp
Z2h0VmFsdWUoKSkKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CisgICAgICAgIGFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBzdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSk7CiAKICAgICAv
LyBOb3cgZG8gcmVzdCBvZiB0aGUgcHJvcGVydGllcy4KICAgICBpZiAoa2V5ZnJhbWUtPnByb3Bl
cnRpZXMoKSkKLSAgICAgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3Bl
cnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihyZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CiAKICAgICAvLyBJZiBvdXIg
Zm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywK
ICAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBkYXRl
Rm9udChzdGF0ZSk7CisgICAgdXBkYXRlRm9udCgpOwogCiAgICAgLy8gU3RhcnQgbG9hZGluZyBy
ZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nUmVzb3Vy
Y2VzKHN0YXRlKTsKKyAgICBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogICAgIAogICAgIC8vIEFk
ZCBhbGwgdGhlIGFuaW1hdGluZyBwcm9wZXJ0aWVzIHRvIHRoZSBrZXlmcmFtZS4KICAgICBpZiAo
Y29uc3QgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGVEZWNsYXJhdGlvbiA9IGtleWZyYW1lLT5wcm9w
ZXJ0aWVzKCkpIHsKQEAgLTE1MTEsMTUgKzE1MjMsMTUgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpr
ZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbihFbGVtZW50KiBlLCBjb25zdCBSZW5kZXJTdHlsZSog
ZWwKIAogICAgIC8vIENvbnN0cnVjdCBhbmQgcG9wdWxhdGUgdGhlIHN0eWxlIGZvciBlYWNoIGtl
eWZyYW1lCiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+JiBrZXlmcmFt
ZXMgPSBrZXlmcmFtZXNSdWxlLT5rZXlmcmFtZXMoKTsKLSAgICBTdGF0ZSBzdGF0ZShkb2N1bWVu
dCgpKTsKLSAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7Ci0gICAgc3RhdGUuaW5pdEZvclN0eWxl
UmVzb2x2ZShkb2N1bWVudCgpLCBlKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5
ZnJhbWVzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIC8vIEFwcGx5IHRoZSBkZWNsYXJhdGlvbiB0
byB0aGUgc3R5bGUuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGxvZ2ljIGlu
IHN0eWxlRm9yRWxlbWVudAorICAgICAgICBpbml0RWxlbWVudChlKTsKKyAgICAgICAgbV9zdGF0
ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUpOworCiAgICAgICAgIGNvbnN0IFN0
eWxlS2V5ZnJhbWUqIGtleWZyYW1lID0ga2V5ZnJhbWVzW2ldLmdldCgpOwogCiAgICAgICAgIEtl
eWZyYW1lVmFsdWUga2V5ZnJhbWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5z
ZXRTdHlsZShzdHlsZUZvcktleWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBr
ZXlmcmFtZVZhbHVlKSk7CisgICAgICAgIGtleWZyYW1lVmFsdWUuc2V0U3R5bGUoc3R5bGVGb3JL
ZXlmcmFtZShlbGVtZW50U3R5bGUsIGtleWZyYW1lLCBrZXlmcmFtZVZhbHVlKSk7CiAKICAgICAg
ICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgc3R5bGUgdG8gYWxsIHRoZSBpbmRpY2F0ZWQga2V5IHRp
bWVzCiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5czsKQEAgLTE1MzksNyArMTU1MSw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxlbWVudCogZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICB6ZXJvUGVyY2VudEtleWZyYW1lLT5z
ZXRLZXlUZXh0KCIwJSIpOwogICAgICAgICB9CiAgICAgICAgIEtleWZyYW1lVmFsdWUga2V5ZnJh
bWVWYWx1ZSgwLCAwKTsKLSAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktl
eWZyYW1lKHN0YXRlLCBlbGVtZW50U3R5bGUsIHplcm9QZXJjZW50S2V5ZnJhbWUsIGtleWZyYW1l
VmFsdWUpKTsKKyAgICAgICAga2V5ZnJhbWVWYWx1ZS5zZXRTdHlsZShzdHlsZUZvcktleWZyYW1l
KGVsZW1lbnRTdHlsZSwgemVyb1BlcmNlbnRLZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOwogICAg
ICAgICBsaXN0Lmluc2VydChrZXlmcmFtZVZhbHVlKTsKICAgICB9CiAKQEAgLTE1NTEsNyArMTU2
Myw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6a2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oRWxl
bWVudCogZSwgY29uc3QgUmVuZGVyU3R5bGUqIGVsCiAgICAgICAgICAgICBodW5kcmVkUGVyY2Vu
dEtleWZyYW1lLT5zZXRLZXlUZXh0KCIxMDAlIik7CiAgICAgICAgIH0KICAgICAgICAgS2V5ZnJh
bWVWYWx1ZSBrZXlmcmFtZVZhbHVlKDEsIDApOwotICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0
eWxlKHN0eWxlRm9yS2V5ZnJhbWUoc3RhdGUsIGVsZW1lbnRTdHlsZSwgaHVuZHJlZFBlcmNlbnRL
ZXlmcmFtZSwga2V5ZnJhbWVWYWx1ZSkpOworICAgICAgICBrZXlmcmFtZVZhbHVlLnNldFN0eWxl
KHN0eWxlRm9yS2V5ZnJhbWUoZWxlbWVudFN0eWxlLCBodW5kcmVkUGVyY2VudEtleWZyYW1lLCBr
ZXlmcmFtZVZhbHVlKSk7CiAgICAgICAgIGxpc3QuaW5zZXJ0KGtleWZyYW1lVmFsdWUpOwogICAg
IH0KIH0KQEAgLTE1NjIsMjIgKzE1NzQsMjQgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5
bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0IFAKICAg
ICBpZiAoIWUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQo
KSk7Ci0gICAgaW5pdEVsZW1lbnQoc3RhdGUsIGUpOworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3Rh
dGU7CisKKyAgICBpbml0RWxlbWVudChlKTsKKwogICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29s
dmUoZG9jdW1lbnQoKSwgZSwgcGFyZW50U3R5bGUsIHBzZXVkb1N0eWxlUmVxdWVzdCk7CiAgICAg
c3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKLSAgICBzdGF0ZS5zdHlsZSgp
LT5pbmhlcml0RnJvbShzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBzdGF0ZS5zdHlsZSgpLT5p
bmhlcml0RnJvbShtX3N0YXRlLnBhcmVudFN0eWxlKCkpOwogCiAgICAgLy8gU2luY2Ugd2UgZG9u
J3QgdXNlIHBzZXVkby1lbGVtZW50cyBpbiBhbnkgb2Ygb3VyIHF1aXJrL3ByaW50IHVzZXIgYWdl
bnQgcnVsZXMsIGRvbid0IHdhc3RlIHRpbWUgd2Fsa2luZwogICAgIC8vIHRob3NlIHJ1bGVzLgog
CiAgICAgLy8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxlcy4KICAgICBNYXRjaFJlc3Vs
dCBtYXRjaFJlc3VsdDsKLSAgICBtYXRjaFVBUnVsZXMoc3RhdGUsIG1hdGNoUmVzdWx0KTsKKyAg
ICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOwogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoVXNlclJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCwg
ZmFsc2UpOwotICAgICAgICBtYXRjaEF1dGhvclJ1bGVzKHN0YXRlLCBtYXRjaFJlc3VsdCwgZmFs
c2UpOworICAgICAgICBtYXRjaFVzZXJSdWxlcyhtYXRjaFJlc3VsdCwgZmFsc2UpOworICAgICAg
ICBtYXRjaEF1dGhvclJ1bGVzKG1hdGNoUmVzdWx0LCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYg
KG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkKQEAgLTE1ODUsMTMgKzE1
OTksMTMgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5
bGVGb3JFbGVtZW50KEVsZW1lbnQqIGUsIGNvbnN0IFAKIAogICAgIHN0YXRlLnN0eWxlKCktPnNl
dFN0eWxlVHlwZShwc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQpOwogCi0gICAgYXBwbHlNYXRj
aGVkUHJvcGVydGllcyhzdGF0ZSwgbWF0Y2hSZXN1bHQsIGUpOworICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXMobWF0Y2hSZXN1bHQsIGUpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9i
amVjdCdzIGRpc3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcyku
Ci0gICAgYWRqdXN0UmVuZGVyU3R5bGUoc3RhdGUsIHN0YXRlLnN0eWxlKCksIHN0YXRlLnBhcmVu
dFN0eWxlKCksIDApOworICAgIGFkanVzdFJlbmRlclN0eWxlKHN0YXRlLnN0eWxlKCksIG1fc3Rh
dGUucGFyZW50U3R5bGUoKSwgMCk7CiAKICAgICAvLyBTdGFydCBsb2FkaW5nIHJlc291cmNlcyBy
ZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoc3RhdGUp
OworICAgIGxvYWRQZW5kaW5nUmVzb3VyY2VzKCk7CiAKICAgICBkb2N1bWVudCgpLT5kaWRBY2Nl
c3NTdHlsZVJlc29sdmVyKCk7CiAKQEAgLTE2MDEsMTMgKzE2MTUsMTIgQEAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQq
IGUsIGNvbnN0IFAKIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5
bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiB7Ci0gICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQoKSk7
Ci0gICAgc3RhdGUuaW5pdEZvclN0eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBkb2N1bWVudCgpLT5k
b2N1bWVudEVsZW1lbnQoKSk7IC8vIG1fcm9vdEVsZW1lbnRTdHlsZSB3aWxsIGJlIHNldCB0byB0
aGUgZG9jdW1lbnQgc3R5bGUuCisgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3Vt
ZW50KCksIGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKTsgLy8gbV9yb290RWxlbWVudFN0
eWxlIHdpbGwgYmUgc2V0IHRvIHRoZSBkb2N1bWVudCBzdHlsZS4KIAotICAgIHN0YXRlLnNldFN0
eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7Ci0gICAgc3RhdGUuc3R5bGUoKS0+aW5oZXJpdEZy
b20oc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpKTsKKyAgICBtX3N0YXRlLnNldFN0eWxlKFJlbmRl
clN0eWxlOjpjcmVhdGUoKSk7CisgICAgbV9zdGF0ZS5zdHlsZSgpLT5pbmhlcml0RnJvbShtX3N0
YXRlLnJvb3RFbGVtZW50U3R5bGUoKSk7CiAKLSAgICBjb25zdCBib29sIGlzTGVmdCA9IGlzTGVm
dFBhZ2Uoc3RhdGUsIHBhZ2VJbmRleCk7CisgICAgY29uc3QgYm9vbCBpc0xlZnQgPSBpc0xlZnRQ
YWdlKHBhZ2VJbmRleCk7CiAgICAgY29uc3QgYm9vbCBpc0ZpcnN0ID0gaXNGaXJzdFBhZ2UocGFn
ZUluZGV4KTsKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAg
ICAgCkBAIC0xNjE2LDQzICsxNjI5LDQyIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFnZUluZGV4KQogICAgIG1hdGNoUGFnZVJ1bGVz
KHJlc3VsdCwgbV9ydWxlU2V0cy51c2VyU3R5bGUoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsK
ICAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgYXV0aG9yIFJ1bGVTZXQgZm9yIEBwYWdl
IHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCiAgICAgbWF0Y2hQYWdlUnVsZXMocmVzdWx0
LCBtX3J1bGVTZXRzLmF1dGhvclN0eWxlKCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAg
c3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZh
bHVlKDApOwogICAgIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlOwogI2lmIEVOQUJMRShDU1Nf
VkFSSUFCTEVTKQotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9u
cz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXpl
KCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlh
YmxlRGVmaW5pdGlvbnM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKICNlbmRpZgotICAgIGFwcGx5TWF0Y2hlZFBy
b3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIHJlc3VsdCwgZmFsc2UsIDAs
IHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKKyAg
ICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwg
ZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRP
bmx5KTsKIAogICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBk
YXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KHN0YXRlKTsKKyAgICB1cGRhdGVGb250KCk7CiAK
ICAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9u
IHRoZSBmb250LXNpemUuCi0gICAgaWYgKHN0YXRlLmxpbmVIZWlnaHRWYWx1ZSgpKQotICAgICAg
ICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHN0YXRlLmxpbmVI
ZWlnaHRWYWx1ZSgpKTsKKyAgICBpZiAobV9zdGF0ZS5saW5lSGVpZ2h0VmFsdWUoKSkKKyAgICAg
ICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fc3RhdGUubGluZUhlaWdo
dFZhbHVlKCkpOwogCi0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxMb3dQcmlvcml0eVByb3Bl
cnRpZXM+KHN0YXRlLCByZXN1bHQsIGZhbHNlLCAwLCByZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMu
c2l6ZSgpIC0gMSwgaW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxM
b3dQcmlvcml0eVByb3BlcnRpZXM+KHJlc3VsdCwgZmFsc2UsIDAsIHJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5zaXplKCkgLSAxLCBpbmhlcml0ZWRPbmx5KTsKIAogICAgIC8vIFN0YXJ0IGxvYWRp
bmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jl
c291cmNlcyhzdGF0ZSk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKIAogICAgIGRvY3Vt
ZW50KCktPmRpZEFjY2Vzc1N0eWxlUmVzb2x2ZXIoKTsKIAogICAgIC8vIE5vdyByZXR1cm4gdGhl
IHN0eWxlLgotICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKKyAgICByZXR1cm4gbV9zdGF0
ZS50YWtlU3R5bGUoKTsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6ZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpCiB7Ci0gICAgU3RhdGUgc3RhdGUoZG9jdW1lbnQo
KSk7Ci0gICAgc3RhdGUuc2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZSgpKTsKKyAgICBtX3N0
YXRlLnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGUoKSk7CiAgICAgLy8gTWFrZSBzdXJlIG91
ciBmb250cyBhcmUgaW5pdGlhbGl6ZWQgaWYgd2UgZG9uJ3QgaW5oZXJpdCB0aGVtIGZyb20gb3Vy
IHBhcmVudCBzdHlsZS4KICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnRTZXR0
aW5ncygpKSB7Ci0gICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc3RhdGUsIHNldHRpbmdzKTsK
LSAgICAgICAgc3RhdGUuc3R5bGUoKS0+Zm9udCgpLnVwZGF0ZShmb250U2VsZWN0b3IoKSk7Cisg
ICAgICAgIGluaXRpYWxpemVGb250U3R5bGUoc2V0dGluZ3MpOworICAgICAgICBtX3N0YXRlLnN0
eWxlKCktPmZvbnQoKS51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwogICAgIH0gZWxzZQotICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5mb250KCkudXBkYXRlKDApOworICAgICAgICBtX3N0YXRlLnN0eWxl
KCktPmZvbnQoKS51cGRhdGUoMCk7CiAKLSAgICByZXR1cm4gc3RhdGUudGFrZVN0eWxlKCk7Cisg
ICAgcmV0dXJuIG1fc3RhdGUudGFrZVN0eWxlKCk7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yVGV4dChUZXh0KiB0ZXh0Tm9kZSkKQEAgLTE3NDcs
NyArMTc1OSw3IEBAIHN0YXRpYyBib29sIGlzRGlzcGxheUZsZXhpYmxlQm94KEVEaXNwbGF5IGRp
c3BsYXkpCiAgICAgcmV0dXJuIGRpc3BsYXkgPT0gRkxFWCB8fCBkaXNwbGF5ID09IElOTElORV9G
TEVYOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFN0YXRlJiBz
dGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVsZW1l
bnQgKmUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkanVzdFJlbmRlclN0eWxlKFJlbmRlclN0eWxl
KiBzdHlsZSwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50ICplKQogewogICAgIEFT
U0VSVChwYXJlbnRTdHlsZSk7CiAKQEAgLTE5NDAsNyArMTk1Miw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YWRqdXN0UmVuZGVyU3R5bGUoU3RhdGUmIHN0YXRlLCBSZW5kZXJTdHlsZSogc3R5bGUs
IFJlbmRlclN0CiAKICAgICAvLyBMZXQgdGhlIHRoZW1lIGFsc28gaGF2ZSBhIGNyYWNrIGF0IGFk
anVzdGluZyB0aGUgc3R5bGUuCiAgICAgaWYgKHN0eWxlLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAg
ICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWRqdXN0U3R5bGUodGhpcywgc3R5bGUs
IGUsIHN0YXRlLmhhc1VBQXBwZWFyYW5jZSgpLCBzdGF0ZS5ib3JkZXJEYXRhKCksIHN0YXRlLmJh
Y2tncm91bmREYXRhKCksIHN0YXRlLmJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgUmVuZGVy
VGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RTdHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9zdGF0
ZS5oYXNVQUFwcGVhcmFuY2UoKSwgbV9zdGF0ZS5ib3JkZXJEYXRhKCksIG1fc3RhdGUuYmFja2dy
b3VuZERhdGEoKSwgbV9zdGF0ZS5iYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICAvLyBJZiB3ZSBo
YXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0eWxlLgog
ICAgIGlmIChzdHlsZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKQEAgLTIwMjEsMTgg
KzIwMzMsMTggQEAgc3RhdGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUpCiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihuZXdGb250RGVzY3Jp
cHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQoU3RhdGUmIHN0YXRl
KQordm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKIHsKLSAgICBpZiAoIXN0YXRlLmZv
bnREaXJ0eSgpKQorICAgIGlmICghbV9zdGF0ZS5mb250RGlydHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVzdChzdGF0ZSk7Ci0gICAgUmVuZGVyU3R5bGUq
IHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKLSAgICBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
c3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKLSAgICBjaGVja0Zvclpvb21DaGFu
Z2Uoc3RhdGUsIHN0eWxlLCBzdGF0ZS5wYXJlbnRTdHlsZSgpKTsKKyAgICBjaGVja0ZvclRleHRT
aXplQWRqdXN0KCk7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV9zdGF0ZS5zdHlsZSgpOwor
ICAgIGNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShzdHlsZSwgbV9zdGF0ZS5wYXJlbnRTdHls
ZSgpKTsKKyAgICBjaGVja0Zvclpvb21DaGFuZ2Uoc3R5bGUsIG1fc3RhdGUucGFyZW50U3R5bGUo
KSk7CiAgICAgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShzdHlsZSk7CiAgICAgc3R5bGUtPmZv
bnQoKS51cGRhdGUobV9mb250U2VsZWN0b3IpOwotICAgIHN0YXRlLnNldEZvbnREaXJ0eShmYWxz
ZSk7CisgICAgbV9zdGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOwogfQogCiBQYXNzUmVmUHRyPENT
U1J1bGVMaXN0PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBl
LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTIwNDUsMzQgKzIwNTcsMzkgQEAgUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gU3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1l
bnQoRWxlbWVudCogZSwgUHMKICAgICBpZiAoIWUgfHwgIWUtPmRvY3VtZW50KCktPmhhdmVTdHls
ZXNoZWV0c0xvYWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFN0YXRlIHN0YXRlKGRv
Y3VtZW50KCkpOwotICAgIHN0YXRlLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpDb2xsZWN0aW5n
UnVsZXMpOworICAgIG1fc3RhdGUuc2V0TW9kZShTZWxlY3RvckNoZWNrZXI6OkNvbGxlY3RpbmdS
dWxlcyk7CiAKLSAgICBpbml0RWxlbWVudChzdGF0ZSwgZSk7Ci0gICAgc3RhdGUuaW5pdEZvclN0
eWxlUmVzb2x2ZShkb2N1bWVudCgpLCBlLCAwLCBwc2V1ZG9JZCk7CisgICAgaW5pdEVsZW1lbnQo
ZSk7CisgICAgbV9zdGF0ZS5pbml0Rm9yU3R5bGVSZXNvbHZlKGRvY3VtZW50KCksIGUsIDAsIHBz
ZXVkb0lkKTsKIAogICAgIE1hdGNoUmVzdWx0IGR1bW15OwogICAgIGlmIChydWxlc1RvSW5jbHVk
ZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVz
IGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAgIG1hdGNoVUFSdWxlcyhzdGF0ZSwg
ZHVtbXkpOworICAgICAgICBtYXRjaFVBUnVsZXMoZHVtbXkpOwogCiAgICAgICAgIC8vIE5vdyB3
ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVz
ZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhzdGF0ZSwgZHVtbXksIHJ1bGVz
VG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgICAgICBtYXRjaFVzZXJSdWxlcyhk
dW1teSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAgICB9CiAKICAgICBpZiAo
bV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgKHJ1bGVzVG9JbmNsdWRlICYgQXV0aG9yQ1NT
UnVsZXMpKSB7Ci0gICAgICAgIHN0YXRlLnNldFNhbWVPcmlnaW5Pbmx5KCEocnVsZXNUb0luY2x1
ZGUgJiBDcm9zc09yaWdpbkNTU1J1bGVzKSk7CisgICAgICAgIG1fc3RhdGUuc2V0U2FtZU9yaWdp
bk9ubHkoIShydWxlc1RvSW5jbHVkZSAmIENyb3NzT3JpZ2luQ1NTUnVsZXMpKTsKIAogICAgICAg
ICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KLSAgICAgICAgbWF0Y2hBdXRo
b3JSdWxlcyhzdGF0ZSwgZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7Cisg
ICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZHVtbXksIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NS
dWxlcyk7CisKKyAgICAgICAgbV9zdGF0ZS5zZXRTYW1lT3JpZ2luT25seShmYWxzZSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHN0YXRlLnRha2VSdWxlTGlzdCgpOworICAgIG1fc3RhdGUuc2V0TW9k
ZShTZWxlY3RvckNoZWNrZXI6OlJlc29sdmluZ1N0eWxlKTsKKworICAgIHJldHVybiBtX3N0YXRl
LnRha2VSdWxlTGlzdCgpOwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpydWxlTWF0
Y2hlcyhTdGF0ZSYgc3RhdGUsIGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29uc3QgQ29udGFp
bmVyTm9kZSogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBTZWxlY3RvckNoZWNrZXI6
OkJlaGF2aW9yQXRCb3VuZGFyeSBiZWhhdmlvckF0Qm91bmRhcnkpCitpbmxpbmUgYm9vbCBTdHls
ZVJlc29sdmVyOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IENv
bnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgU2VsZWN0b3JDaGVj
a2VyOjpCZWhhdmlvckF0Qm91bmRhcnkgYmVoYXZpb3JBdEJvdW5kYXJ5KQogeworICAgIFN0YXRl
JiBzdGF0ZSA9IG1fc3RhdGU7CisKICAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNl
bGVjdG9yKCkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGlzIHNlbGVjdG9yIGRvZXMgbm90IGlu
Y2x1ZGUgYW55IHBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgaWYgKHN0YXRlLnBzZXVkb1N0eWxl
UmVxdWVzdCgpLnBzZXVkb0lkICE9IE5PUFNFVURPKQpAQCAtMjExNCw3ICsyMTMxLDcgQEAgYm9v
bCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBy
ZWdpb25TZWxlY3RvciwgRWxlbWUKICAgICBpZiAoIXJlZ2lvblNlbGVjdG9yIHx8ICFyZWdpb25F
bGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTZWxlY3RvckNoZWNrZXIgc2Vs
ZWN0b3JDaGVja2VyKGRvY3VtZW50KCksIFNlbGVjdG9yQ2hlY2tlcjo6UXVlcnlpbmdSdWxlcyk7
CisgICAgU2VsZWN0b3JDaGVja2VyIHNlbGVjdG9yQ2hlY2tlcihkb2N1bWVudCgpLCBtX3N0YXRl
Lm1vZGUoKSk7CiAgICAgZm9yIChjb25zdCBDU1NTZWxlY3RvciogcyA9IHJlZ2lvblNlbGVjdG9y
OyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKSB7CiAgICAgICAgIFNlbGVjdG9yQ2hl
Y2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2luZ0NvbnRleHQocywg
cmVnaW9uRWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpWaXNpdGVkTWF0Y2hEaXNhYmxlZCk7CiAg
ICAgICAgIFBzZXVkb0lkIGlnbm9yZUR5bmFtaWNQc2V1ZG8gPSBOT1BTRVVETzsKQEAgLTIxMzks
OSArMjE1Niw5IEBAIExlbmd0aCBTdHlsZVJlc29sdmVyOjpjb252ZXJ0VG9GbG9hdExlbmd0aChD
U1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUsIFJlCiB9CiAKIHRlbXBsYXRlIDxTdHls
ZVJlc29sdmVyOjpTdHlsZUFwcGxpY2F0aW9uUGFzcyBwYXNzPgotdm9pZCBTdHlsZVJlc29sdmVy
OjphcHBseVByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBw
cm9wZXJ0aWVzLCBTdHlsZVJ1bGUqIHJ1bGUsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJp
dGVkT25seSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlIHByb3BlcnR5V2hpdGVsaXN0VHlwZSkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQq
IHByb3BlcnRpZXMsIFN0eWxlUnVsZSogcnVsZSwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhl
cml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgcHJvcGVydHlXaGl0ZWxpc3RUeXBlKQog
ewotICAgIEFTU0VSVCgocHJvcGVydHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0
UmVnaW9uKSB8fCBzdGF0ZS5yZWdpb25Gb3JTdHlsaW5nKCkpOworICAgIEFTU0VSVCgocHJvcGVy
dHlXaGl0ZWxpc3RUeXBlICE9IFByb3BlcnR5V2hpdGVsaXN0UmVnaW9uKSB8fCBtX3N0YXRlLnJl
Z2lvbkZvclN0eWxpbmcoKSk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIGNv
b2tpZSA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFByb2Nlc3NSdWxlKGRvY3VtZW50
KCksIHJ1bGUsIHRoaXMpOwogCiAgICAgdW5zaWduZWQgcHJvcGVydHlDb3VudCA9IHByb3BlcnRp
ZXMtPnByb3BlcnR5Q291bnQoKTsKQEAgLTIxNjksNyArMjE4Niw3IEBAIHZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgU3R5bGVQcm9wZXJ0eVNl
dCogcHJvcGVyCiAgICAgICAgIGNhc2UgVmFyaWFibGVEZWZpbml0aW9uczoKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKENTU1Byb3BlcnR5VmFyaWFibGUgPCBmaXJzdENTU1Byb3BlcnR5LCBD
U1NfdmFyaWFibGVfaXNfYmVmb3JlX2ZpcnN0X3Byb3BlcnR5KTsKICAgICAgICAgICAgIGlmIChw
cm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVZhcmlhYmxlKQotICAgICAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoc3RhdGUsIGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICBhcHBseVByb3BlcnR5KGN1cnJlbnQuaWQoKSwgY3VycmVudC52YWx1ZSgpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgICAgIGNhc2UgSGlnaFByaW9yaXR5UHJvcGVydGll
czoKQEAgLTIxODIsMjUgKzIxOTksMjYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXIKICNlbmRp
ZgogICAgICAgICAgICAgLy8gZ2l2ZSBzcGVjaWFsIHByaW9yaXR5IHRvIGZvbnQteHh4LCBjb2xv
ciBwcm9wZXJ0aWVzLCBldGMKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSA8IENTU1Byb3BlcnR5
TGluZUhlaWdodCkKLSAgICAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBjdXJyZW50
LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShj
dXJyZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICAvLyB3ZSBhcHBseSBs
aW5lLWhlaWdodCBsYXRlcgogICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkgPT0gQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0KQotICAgICAgICAgICAgICAgIHN0YXRlLnNldExpbmVIZWlnaHRWYWx1
ZShjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0TGluZUhlaWdo
dFZhbHVlKGN1cnJlbnQudmFsdWUoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBMb3dQcmlvcml0eVByb3BlcnRpZXM6CiAgICAgICAgICAgICBpZiAocHJvcGVydHkgPiBDU1NQ
cm9wZXJ0eUxpbmVIZWlnaHQpCi0gICAgICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwg
Y3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFwcGx5UHJv
cGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50LnZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQog
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkUHJvY2Vzc1J1bGUoY29va2llKTsKIH0K
IAogdGVtcGxhdGUgPFN0eWxlUmVzb2x2ZXI6OlN0eWxlQXBwbGljYXRpb25QYXNzIHBhc3M+Ci12
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFy
dEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSkKK3ZvaWQgU3R5bGVSZXNv
bHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIGJvb2wgaXNJbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wg
aW5oZXJpdGVkT25seSkKIHsKICAgICBpZiAoc3RhcnRJbmRleCA9PSAtMSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBpZiAoc3RhdGUuc3R5bGUo
KS0+aW5zaWRlTGluaygpICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgZm9yIChpbnQgaSA9
IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7ICsraSkgewogICAgICAgICAgICAgY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFBy
b3BlcnRpZXNbaV07CkBAIC0yMjA5LDcgKzIyMjcsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0
YwogICAgICAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGxpbmtN
YXRjaFR5cGUgJiBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CiAgICAgICAgICAgICBzdGF0
ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGxpbmtNYXRjaFR5cGUgJiBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7CiAKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydGll
czxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGlj
X2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RU
eXBlKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnRpZXM8cGFzcz4obWF0Y2hlZFByb3BlcnRp
ZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0ltcG9y
dGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBlPiht
YXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CiAgICAgICAgIH0KICAgICAgICAgc3Rh
dGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwogICAgICAgICBzdGF0ZS5z
ZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKQEAgLTIyMTcsNyArMjIz
NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdGF0ZSYg
c3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjCiAgICAgfQogICAgIGZvciAoaW50IGkgPSBz
dGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyArK2kpIHsKICAgICAgICAgY29uc3QgTWF0Y2hlZFBy
b3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRp
ZXNbaV07Ci0gICAgICAgIGFwcGx5UHJvcGVydGllczxwYXNzPihzdGF0ZSwgbWF0Y2hlZFByb3Bl
cnRpZXMucHJvcGVydGllcy5nZXQoKSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFJ1bGVzW2ldLCBpc0lt
cG9ydGFudCwgaW5oZXJpdGVkT25seSwgc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0ZWxpc3RUeXBl
PihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKSk7CisgICAgICAgIGFwcGx5UHJvcGVy
dGllczxwYXNzPihtYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzLmdldCgpLCBtYXRjaFJlc3Vs
dC5tYXRjaGVkUnVsZXNbaV0sIGlzSW1wb3J0YW50LCBpbmhlcml0ZWRPbmx5LCBzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndoaXRlbGlzdFR5cGUp
KTsKICAgICB9CiB9CiAKQEAgLTIzMTcsOSArMjMzNSwxMCBAQCBzdGF0aWMgYm9vbCBpc0NhY2hl
YWJsZUluTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBSZQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0
Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0
Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdCBFbGVt
ZW50KiBlbGVtZW50KQogewogICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBTdGF0ZSYgc3RhdGUg
PSBtX3N0YXRlOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IG1hdGNoUmVzdWx0LmlzQ2FjaGVh
YmxlID8gY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChtYXRjaFJlc3VsdC5tYXRjaGVkUHJv
cGVydGllcy5kYXRhKCksIG1hdGNoUmVzdWx0Lm1hdGNoZWRQcm9wZXJ0aWVzLnNpemUoKSkgOiAw
OwogICAgIGJvb2wgYXBwbHlJbmhlcml0ZWRPbmx5ID0gZmFsc2U7CiAgICAgY29uc3QgTWF0Y2hl
ZFByb3BlcnRpZXNDYWNoZUl0ZW0qIGNhY2hlSXRlbSA9IDA7CkBAIC0yMzQzLDEwICsyMzYyLDEw
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdGF0ZSYgc3Rh
dGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjCiAKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykK
ICAgICAvLyBGaXJzdCBhcHBseSBhbGwgdmFyaWFibGUgZGVmaW5pdGlvbnMsIGFzIHRoZXkgbWF5
IGJlIHVzZWQgZHVyaW5nIGFwcGxpY2F0aW9uIG9mIGxhdGVyIHByb3BlcnRpZXMuCi0gICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmluaXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1
bHQsIGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBh
cHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVE
ZWZpbml0aW9ucz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
Zmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5
SW5oZXJpdGVkT25seSk7Ci0gICAgYXBwbHlNYXRjaGVkUHJvcGVydGllczxWYXJpYWJsZURlZmlu
aXRpb25zPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJz
dFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRl
ZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4o
c3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUs
IG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAg
IGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZpbml0aW9ucz4obWF0Y2hSZXN1bHQs
IGZhbHNlLCAwLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGllcy5zaXplKCkgLSAxLCBhcHBs
eUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8VmFyaWFibGVEZWZp
bml0aW9ucz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1h
dGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPFZhcmlhYmxlRGVmaW5pdGlvbnM+KG1hdGNoUmVzdWx0LCB0cnVl
LCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogI2VuZGlmCiAKICAgICAvLyBOb3cgd2UgaGF2
ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBXYWxr
IHRoZSBydWxlcyBhbmQgYXBwbHkKQEAgLTIzNTQsMTAgKzIzNzMsMTAgQEAgdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiBzdGF0ZSwgY29uc3QgTWF0Y2hS
ZXN1bHQmIG1hdGMKICAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGlt
cG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBv
cnRhbnQKICAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCiAgICAgc3RhdGUuc2V0TGlu
ZUhlaWdodFZhbHVlKDApOwotICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5
UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hSZXN1bHQubWF0
Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJl
c3VsdCwgdHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0QXV0aG9yUnVsZSwgbWF0Y2hSZXN1
bHQucmFuZ2VzLmxhc3RBdXRob3JSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5
TWF0Y2hlZFByb3BlcnRpZXM8SGlnaFByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVz
dWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQu
cmFuZ2VzLmxhc3RVc2VyUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNo
ZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KHN0YXRlLCBtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNoUmVzdWx0LCBmYWxzZSwgMCwgbWF0Y2hS
ZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsK
KyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPEhpZ2hQcmlvcml0eVByb3BlcnRpZXM+KG1hdGNo
UmVzdWx0LCB0cnVlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJl
c3VsdC5yYW5nZXMubGFzdEF1dGhvclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBw
bHlNYXRjaGVkUHJvcGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VXNlclJ1bGUsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgYXBwbHlNYXRjaGVkUHJv
cGVydGllczxIaWdoUHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgdHJ1ZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKIAogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5y
ZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IHN0YXRlLnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkgewogICAgICAgICBzdGF0ZS5zZXRGb250RGlydHkodHJ1ZSk7CkBAIC0yMzY1LDMwICsy
Mzg0LDMwIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhTdGF0
ZSYgc3RhdGUsIGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjCiAgICAgfQogCiAgICAgLy8gSWYgb3Vy
IGZvbnQgZ290IGRpcnRpZWQsIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0
ZUZvbnQoc3RhdGUpOworICAgIHVwZGF0ZUZvbnQoKTsKIAogICAgIC8vIExpbmUtaGVpZ2h0IGlz
IHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZvbnQtc2l6ZS4KICAgICBp
ZiAoc3RhdGUubGluZUhlaWdodFZhbHVlKCkpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUs
IENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZhbHVlKCkpOworICAgICAg
ICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgc3RhdGUubGluZUhlaWdodFZh
bHVlKCkpOwogCiAgICAgLy8gTWFueSBwcm9wZXJ0aWVzIGRlcGVuZCBvbiB0aGUgZm9udC4gSWYg
aXQgY2hhbmdlcyB3ZSBqdXN0IGFwcGx5IGFsbCBwcm9wZXJ0aWVzLgogICAgIGlmIChjYWNoZUl0
ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUu
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpCiAgICAgICAgIGFwcGx5SW5oZXJpdGVkT25seSA9
IGZhbHNlOwogCiAgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGll
cy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3Rh
dGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBt
YXRjaFJlc3VsdC5yYW5nZXMubGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICBh
cHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4obWF0Y2hSZXN1bHQs
IGZhbHNlLCBtYXRjaFJlc3VsdC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdl
cy5sYXN0VUFSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOwogICAgIAogICAgIC8vIENhY2hlIG91
ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVy
LgogICAgIHN0YXRlLmNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogICAgIAogICAgIC8vIE5v
dyBkbyB0aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBh
bGwgdGhlICFpbXBvcnRhbnQgcHJvcGVydGllcy4KLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVz
PExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCBmYWxzZSwgbWF0Y2hS
ZXN1bHQucmFuZ2VzLmxhc3RVQVJ1bGUgKyAxLCBtYXRjaFJlc3VsdC5tYXRjaGVkUHJvcGVydGll
cy5zaXplKCkgLSAxLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihzdGF0ZSwgbWF0Y2hSZXN1bHQsIHRydWUsIG1h
dGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0
QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0
aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRj
aFJlc3VsdC5yYW5nZXMuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmxhc3RVc2Vy
UnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExv
d1ByaW9yaXR5UHJvcGVydGllcz4oc3RhdGUsIG1hdGNoUmVzdWx0LCB0cnVlLCBtYXRjaFJlc3Vs
dC5yYW5nZXMuZmlyc3RVQVJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFSdWxlLCBhcHBs
eUluaGVyaXRlZE9ubHkpOworICAgIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQ
cm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwgZmFsc2UsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0VUFS
dWxlICsgMSwgbWF0Y2hSZXN1bHQubWF0Y2hlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMSwgYXBwbHlJ
bmhlcml0ZWRPbmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJv
cGVydGllcz4obWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdEF1dGhv
clJ1bGUsIG1hdGNoUmVzdWx0LnJhbmdlcy5sYXN0QXV0aG9yUnVsZSwgYXBwbHlJbmhlcml0ZWRP
bmx5KTsKKyAgICBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzPExvd1ByaW9yaXR5UHJvcGVydGllcz4o
bWF0Y2hSZXN1bHQsIHRydWUsIG1hdGNoUmVzdWx0LnJhbmdlcy5maXJzdFVzZXJSdWxlLCBtYXRj
aFJlc3VsdC5yYW5nZXMubGFzdFVzZXJSdWxlLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGFw
cGx5TWF0Y2hlZFByb3BlcnRpZXM8TG93UHJpb3JpdHlQcm9wZXJ0aWVzPihtYXRjaFJlc3VsdCwg
dHJ1ZSwgbWF0Y2hSZXN1bHQucmFuZ2VzLmZpcnN0VUFSdWxlLCBtYXRjaFJlc3VsdC5yYW5nZXMu
bGFzdFVBUnVsZSwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgIAogICAgIC8vIFN0YXJ0IGxvYWRp
bmcgcmVzb3VyY2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KLSAgICBsb2FkUGVuZGluZ1Jl
c291cmNlcyhzdGF0ZSk7CisgICAgbG9hZFBlbmRpbmdSZXNvdXJjZXMoKTsKICAgICAKICAgICBB
U1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKICAgICAKQEAgLTI0NTgsMTAgKzI0NzcsMTAgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoVmVjdG9yPFN0eWxlUnVs
ZVBhZ2UqPiYgbWF0Y2hlZFJ1bGVzLAogICAgIH0KIH0KIAotYm9vbCBTdHlsZVJlc29sdmVyOjpp
c0xlZnRQYWdlKFN0YXRlJiBzdGF0ZSwgaW50IHBhZ2VJbmRleCkgY29uc3QKK2Jvb2wgU3R5bGVS
ZXNvbHZlcjo6aXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdAogewogICAgIGJvb2wgaXNG
aXJzdFBhZ2VMZWZ0ID0gZmFsc2U7Ci0gICAgaWYgKCFzdGF0ZS5yb290RWxlbWVudFN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICBpZiAoIW1fc3RhdGUucm9vdEVsZW1lbnRT
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgIGlzRmlyc3RQYWdlTGVm
dCA9IHRydWU7CiAKICAgICByZXR1cm4gKHBhZ2VJbmRleCArIChpc0ZpcnN0UGFnZUxlZnQgPyAx
IDogMCkpICUgMjsKQEAgLTI0NzksMzEgKzI0OTgsMTggQEAgU3RyaW5nIFN0eWxlUmVzb2x2ZXI6
OnBhZ2VOYW1lKGludCAvKiBwYWdlSW5kZXggKi8pIGNvbnN0CiAgICAgcmV0dXJuICIiOwogfQog
Ci12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKFN0YXRlJiBz
dGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFs
dWUsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1
cm47Ci0gICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVlKTsKKyAgICBpbml0RWxlbWVu
dCgwKTsKKyAgICBtX3N0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1lbnQoKSwgMCwgc3R5
bGUpOworICAgIG1fc3RhdGUuc2V0U3R5bGUoc3R5bGUpOworICAgIGFwcGx5UHJvcGVydHlUb0N1
cnJlbnRTdHlsZShpZCwgdmFsdWUpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5Rm9u
dFByb3BlcnR5VG9TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFN0eWxlUHJvcGVydHlT
ZXQqIHBhcnNlZFN0eWxlKQordm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJy
ZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIFN0YXRl
IHN0YXRlKGRvY3VtZW50KCkpOwotICAgIHN0YXRlLmluaXRGb3JTdHlsZVJlc29sdmUoZG9jdW1l
bnQoKSwgMCwgc3R5bGUpOwotICAgIHN0YXRlLnNldFN0eWxlKHN0eWxlKTsKLQotICAgIGFwcGx5
UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIHBhcnNl
ZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udEZhbWlseSkuZ2V0KCkp
OwotICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5
bGUpLmdldCgpKTsKLSAgICBhcHBseVByb3BlcnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJv
cGVydHlGb250VmFyaWFudCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlGb250VmFyaWFudCkuZ2V0KCkpOwotICAgIGFwcGx5UHJvcGVydHlXaXRoTnVsbENoZWNr
KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOwotCi0gICAgLy8gQXMgZGVzY3Jp
YmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBm
b250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBj
YWxsLAotICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUg
Zm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCi0gICAgLy8gVGhlIHVwZGF0ZUZv
bnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHBy
b3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQuCi0gICAgdXBkYXRlRm9u
dChzdGF0ZSk7Ci0gICAgYXBwbHlQcm9wZXJ0eVdpdGhOdWxsQ2hlY2soc3RhdGUsIENTU1Byb3Bl
cnR5Rm9udFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5
Rm9udFNpemUpLmdldCgpKTsKLSAgICB1cGRhdGVGb250KHN0YXRlKTsKLSAgICBhcHBseVByb3Bl
cnR5V2l0aE51bGxDaGVjayhzdGF0ZSwgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKKyAg
ICBpZiAodmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVydHkoaWQsIHZhbHVlKTsKIH0KIAogaW5s
aW5lIGJvb2wgaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKQEAg
LTI2MDYsNiArMjYxMiwxMCBAQCBpbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjppc1ZhbGlkQ3Vl
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQogLy8gd2lkdGgvaGVpZ2h0L2JvcmRlci9w
YWRkaW5nLy4uLiBmcm9tIHRoZSBSZW5kZXJTdHlsZSAtPiBmb3IgU1ZHIHRoZXNlIHZhbHVlcyB3
b3VsZCBuZXZlciBzY2FsZSwKIC8vIGlmIHdlJ2QgcGFzcyBhIDEuMCB6b29tIGZhY3RvciBldmVy
eWh3ZXJlLiBTbyB3ZSBvbmx5IHBhc3MgYSB6b29tIGZhY3RvciBvZiAxLjAgZm9yIHNwZWNpZmlj
CiAvLyBwcm9wZXJ0aWVzIHRoYXQgYXJlIE5PVCBhbGxvd2VkIHRvIHNjYWxlIHdpdGhpbiBhIHpv
b21lZCBTVkcgZG9jdW1lbnQgKGxldHRlci93b3JkLXNwYWNpbmcvZm9udC1zaXplKS4KK2Jvb2wg
U3R5bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzKCkKK3sKKyAgICByZXR1cm4gbV9zdGF0ZS5l
bGVtZW50KCkgJiYgbV9zdGF0ZS5lbGVtZW50KCktPmlzU1ZHRWxlbWVudCgpOworfQogCiBzdGF0
aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRp
dmVWYWx1ZSwgY29uc3QgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlLCBMZW5ndGgmIHdvcmtp
bmdMZW5ndGgpCiB7CkBAIC0yNzIzLDkgKzI3MzMsOSBAQCBzdGF0aWMgYm9vbCBoYXNWYXJpYWJs
ZVJlZmVyZW5jZShDU1NWYWx1ZSogdmFsdWUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IFN0eWxlUmVzb2x2ZXI6OnJlc29sdmVWYXJpYWJsZXMoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUsIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKQordm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZl
VmFyaWFibGVzKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1ZSwgVmVjdG9yPHN0ZDo6
cGFpcjxDU1NQcm9wZXJ0eUlELCBTdHJpbmc+ID4mIGtub3duRXhwcmVzc2lvbnMpCiB7Ci0gICAg
c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gZXhwcmVzc2lvbihpZCwgdmFsdWUtPnNl
cmlhbGl6ZVJlc29sdmluZ1ZhcmlhYmxlcygqc3RhdGUuc3R5bGUoKS0+dmFyaWFibGVzKCkpKTsK
KyAgICBzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwgU3RyaW5nPiBleHByZXNzaW9uKGlkLCB2YWx1
ZS0+c2VyaWFsaXplUmVzb2x2aW5nVmFyaWFibGVzKCptX3N0YXRlLnN0eWxlKCktPnZhcmlhYmxl
cygpKSk7CiAKICAgICBpZiAoa25vd25FeHByZXNzaW9ucy5jb250YWlucyhleHByZXNzaW9uKSkK
ICAgICAgICAgcmV0dXJuOyAvLyBjeWNsZSBkZXRlY3RlZC4KQEAgLTI3NDAsMjMgKzI3NTAsMjQg
QEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXNvbHZlVmFyaWFibGVzKFN0YXRlJiBzdGF0ZSwgQ1NT
UHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHYKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzdWx0U2V0LT5wcm9wZXJ0eUNvdW50KCk7IGkrKykgewogICAgICAgICBTdHlsZVByb3BlcnR5
U2V0OjpQcm9wZXJ0eVJlZmVyZW5jZSBwcm9wZXJ0eSA9IHJlc3VsdFNldC0+cHJvcGVydHlBdChp
KTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgIT0gQ1NTUHJvcGVydHlWYXJpYWJsZSAmJiBo
YXNWYXJpYWJsZVJlZmVyZW5jZShwcm9wZXJ0eS52YWx1ZSgpKSkKLSAgICAgICAgICAgIHJlc29s
dmVWYXJpYWJsZXMoc3RhdGUsIHByb3BlcnR5LmlkKCksIHByb3BlcnR5LnZhbHVlKCksIGtub3du
RXhwcmVzc2lvbnMpOworICAgICAgICAgICAgcmVzb2x2ZVZhcmlhYmxlcyhwcm9wZXJ0eS5pZCgp
LCBwcm9wZXJ0eS52YWx1ZSgpLCBrbm93bkV4cHJlc3Npb25zKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgYXBwbHlQcm9wZXJ0eShzdGF0ZSwgcHJvcGVydHkuaWQoKSwgcHJvcGVydHkudmFs
dWUoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkKCksIHByb3BlcnR5
LnZhbHVlKCkpOwogICAgIH0KIH0KICNlbmRpZgogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5
UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdWUp
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NT
VmFsdWUqIHZhbHVlKQogewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgIGlmIChpZCAh
PSBDU1NQcm9wZXJ0eVZhcmlhYmxlICYmIGhhc1ZhcmlhYmxlUmVmZXJlbmNlKHZhbHVlKSkgewog
ICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQsIFN0cmluZz4gPiBrbm93bkV4
cHJlc3Npb25zOwotICAgICAgICByZXNvbHZlVmFyaWFibGVzKHN0YXRlLCBpZCwgdmFsdWUsIGtu
b3duRXhwcmVzc2lvbnMpOworICAgICAgICByZXNvbHZlVmFyaWFibGVzKGlkLCB2YWx1ZSwga25v
d25FeHByZXNzaW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAorICAgIFN0
YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnRO
b2RlKCkgJiYgdmFsdWUtPmlzSW5oZXJpdGVkVmFsdWUoKTsKICAgICBib29sIGlzSW5pdGlhbCA9
IHZhbHVlLT5pc0luaXRpYWxWYWx1ZSgpIHx8ICghc3RhdGUucGFyZW50Tm9kZSgpICYmIHZhbHVl
LT5pc0luaGVyaXRlZFZhbHVlKCkpOwogCkBAIC0yNzg2LDExICsyNzk3LDExIEBAIHZvaWQgU3R5
bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlKiB2YWx1CiAgICAgY29uc3QgUHJvcGVydHlIYW5kbGVyJiBoYW5kbGVyID0gbV9z
dHlsZUJ1aWxkZXIucHJvcGVydHlIYW5kbGVyKGlkKTsKICAgICBpZiAoaGFuZGxlci5pc1ZhbGlk
KCkpIHsKICAgICAgICAgaWYgKGlzSW5oZXJpdCkKLSAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJ
bmhlcml0VmFsdWUoaWQsIHN0YXRlKTsKKyAgICAgICAgICAgIGhhbmRsZXIuYXBwbHlJbmhlcml0
VmFsdWUoaWQsIHRoaXMpOwogICAgICAgICBlbHNlIGlmIChpc0luaXRpYWwpCi0gICAgICAgICAg
ICBoYW5kbGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCBzdGF0ZSk7CisgICAgICAgICAgICBoYW5k
bGVyLmFwcGx5SW5pdGlhbFZhbHVlKGlkLCB0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgaGFuZGxlci5hcHBseVZhbHVlKGlkLCBzdGF0ZSwgdmFsdWUpOworICAgICAgICAgICAgaGFu
ZGxlci5hcHBseVZhbHVlKGlkLCB0aGlzLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTI4MjIsMTkgKzI4MzMsMTkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICAg
ICAgICAgICAgICBDU1NWYWx1ZSogaXRlbSA9IGkudmFsdWUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoaXRlbS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGl0ZW0tPmlzR3JhZGllbnRWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGlj
X2Nhc3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZl
ZChzdGF0ZSkuZ2V0KCkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUu
c3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoc3RhdGljX2Nh
c3Q8Q1NTR3JhZGllbnRWYWx1ZSo+KGl0ZW0pLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZCh0
aGlzKS5nZXQoKSksIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJ
bWFnZTo6Y3JlYXRlKHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqPihpdGVtKSks
IGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjaWYgRU5BQkxF
KENTU19JTUFHRV9TRVQpCiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ltYWdl
U2V0VmFsdWUoKSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250
ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgQ1NTUHJvcGVydHlDb250ZW50LCBzdGF0
aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4oaXRlbSkpLCBkaWRTZXQpOworICAgICAgICAgICAg
ICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRDb250ZW50KHNldE9yUGVuZGluZ0Zyb21WYWx1ZShD
U1NQcm9wZXJ0eUNvbnRlbnQsIHN0YXRpY19jYXN0PENTU0ltYWdlU2V0VmFsdWUqPihpdGVtKSks
IGRpZFNldCk7CiAgICAgICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAjZW5kaWYKICAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNJbWFnZVZhbHVl
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNo
ZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIENTU1Byb3BlcnR5Q29udGVudCwgc3RhdGljX2Nh
c3Q8Q1NTSW1hZ2VWYWx1ZSo+KGl0ZW0pKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Q29udGVudChjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJv
cGVydHlDb250ZW50LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oaXRlbSkpLCBkaWRTZXQp
OwogICAgICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0yOTM2LDcgKzI5NDcsNyBAQCB2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlE
IGlkLCBDU1NWYWx1ZSogdmFsdQogICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVy
aWNGYW1pbHkocGFyZW50Rm9udERlc2NyaXB0aW9uLmdlbmVyaWNGYW1pbHkoKSk7CiAgICAgICAg
ICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KHBhcmVudEZvbnREZXNjcmlwdGlvbi5maXJz
dEZhbWlseSgpKTsKICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZv
bnQocGFyZW50Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKLSAgICAgICAgICAg
IHN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAg
c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtMjk0NiwxMSArMjk1NywxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6
OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSog
dmFsdQogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3Vu
dCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZQogICAgICAgICAg
ICAgLy8gdG8gbm9uLW1vbm9zcGFjZS4KICAgICAgICAgICAgIGlmIChmb250RGVzY3JpcHRpb24u
a2V5d29yZFNpemUoKSAmJiBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKQot
ICAgICAgICAgICAgICAgIHNldEZvbnRTaXplKHN0YXRlLCBmb250RGVzY3JpcHRpb24sIGZvbnRT
aXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRp
b24ua2V5d29yZFNpemUoKSAtIDEsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgc2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFs
dWVYeFNtYWxsICsgZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCBmYWxzZSkpOwog
ICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoaW5pdGlhbERlc2Mu
Z2VuZXJpY0ZhbWlseSgpKTsKICAgICAgICAgICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1p
bHkoKS5mYW1pbHlJc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEZhbWlseShpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpKTsKLSAgICAgICAgICAgIHN0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc2V0Rm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtMzAyNSw5ICszMDM2LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3Bl
cnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICAg
ICAgLy8gSWYgY3VyckZhbWlseSBpcyBub24temVybyB0aGVuIHdlIHNldCBhdCBsZWFzdCBvbmUg
ZmFtaWx5IG9uIHRoaXMgZGVzY3JpcHRpb24uCiAgICAgICAgIGlmIChjdXJyRmFtaWx5KSB7CiAg
ICAgICAgICAgICBpZiAoZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkgJiYgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0
U2l6ZSkKLSAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShzdGF0ZSwgZm9udERlc2NyaXB0aW9u
LCBmb250U2l6ZUZvcktleXdvcmQoZG9jdW1lbnQoKSwgQ1NTVmFsdWVYeFNtYWxsICsgZm9udERl
c2NyaXB0aW9uLmtleXdvcmRTaXplKCkgLSAxLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNp
emUpKTsKKyAgICAgICAgICAgICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZvbnRT
aXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZVh4U21hbGwgKyBmb250RGVzY3JpcHRp
b24ua2V5d29yZFNpemUoKSAtIDEsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSkpOwog
Ci0gICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
KyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMDUyLDEzICszMDYzLDEzIEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gc3RhdGUucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAg
ICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KHN0YXRlLnBhcmVudFN0eWxlKCktPnNw
ZWNpZmllZExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0VmFs
dWUoMCk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0
aW9uKTsKKyAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzSW5pdGlhbCkgewogICAgICAgICAgICAgU2V0dGluZ3MqIHNl
dHRpbmdzID0gZG9jdW1lbnRTZXR0aW5ncygpOwogICAgICAgICAgICAgQVNTRVJUKHNldHRpbmdz
KTsgLy8gSWYgd2UncmUgZG9pbmcgc3R5bGUgcmVzb2x1dGlvbiwgdGhpcyBkb2N1bWVudCBzaG91
bGQgYWx3YXlzIGJlIGluIGEgZnJhbWUgYW5kIHRodXMgaGF2ZSBzZXR0aW5ncwogICAgICAgICAg
ICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBp
bml0aWFsaXplRm9udFN0eWxlKHN0YXRlLCBzZXR0aW5ncyk7CisgICAgICAgICAgICBpbml0aWFs
aXplRm9udFN0eWxlKHNldHRpbmdzKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZSkgewogICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgICAgICAgICBzdGF0ZS5zZXRMaW5lSGVpZ2h0
VmFsdWUoMCk7CkBAIC0zMDc3LDI3ICszMDg4LDI3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFVzZVByaW50ZXJGb250KGRvY3Vt
ZW50KCktPnByaW50aW5nKCkgfHwgIXNldHRpbmdzLT5zY3JlZW5Gb250U3Vic3RpdHV0aW9uRW5h
YmxlZCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgem9vbSBmYWN0b3IuCi0g
ICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShnZXRDb21wdXRl
ZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBzdGF0ZS5zdHlsZSgpLCBmb250RGVz
Y3JpcHRpb24uaXNBYnNvbHV0ZVNpemUoKSwgZm9udERlc2NyaXB0aW9uLnNwZWNpZmllZFNpemUo
KSwgc3RhdGUudXNlU1ZHWm9vbVJ1bGVzKCkpKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS5zZXRG
b250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKGdldENvbXB1dGVkU2l6ZUZyb21TcGVjaWZpZWRTaXpl
KGRvY3VtZW50KCksIHN0YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6
ZSgpLCBmb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpLCB1c2VTVkdab29tUnVsZXMoKSkp
OworICAgICAgICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pc0ZvbnRWYWx1ZSgpKSB7
CiAgICAgICAgICAgICBGb250VmFsdWUqIGZvbnQgPSBzdGF0aWNfY2FzdDxGb250VmFsdWUqPih2
YWx1ZSk7CiAgICAgICAgICAgICBpZiAoIWZvbnQtPnN0eWxlIHx8ICFmb250LT52YXJpYW50IHx8
ICFmb250LT53ZWlnaHQKICAgICAgICAgICAgICAgICB8fCAhZm9udC0+c2l6ZSB8fCAhZm9udC0+
bGluZUhlaWdodCB8fCAhZm9udC0+ZmFtaWx5KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIGFwcGx5UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlLCBmb250
LT5zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBhcHBseVByb3BlcnR5KHN0YXRlLCBDU1NQcm9w
ZXJ0eUZvbnRWYXJpYW50LCBmb250LT52YXJpYW50LmdldCgpKTsKLSAgICAgICAgICAgIGFwcGx5
UHJvcGVydHkoc3RhdGUsIENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0LmdldCgp
KTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250U3R5bGUsIGZvbnQt
PnN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlGb250
VmFyaWFudCwgZm9udC0+dmFyaWFudC5nZXQoKSk7CisgICAgICAgICAgICBhcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgZm9udC0+d2VpZ2h0LmdldCgpKTsKICAgICAgICAgICAg
IC8vIFRoZSBwcmV2aW91cyBwcm9wZXJ0aWVzIGNhbiBkaXJ0eSBvdXIgZm9udCBidXQgdGhleSBk
b24ndCB0cnkgdG8gcmVhZCB0aGUgZm9udCdzCiAgICAgICAgICAgICAvLyBwcm9wZXJ0aWVzIGJh
Y2ssIHdoaWNoIGlzIHNhZmUuIEhvd2V2ZXIgaWYgZm9udC1zaXplIGlzIHVzaW5nIHRoZSAnZXgn
IHVuaXQsIGl0IHdpbGwKICAgICAgICAgICAgIC8vIG5lZWQgcXVlcnkgdGhlIGRpcnRpZWQgZm9u
dCdzIHgtaGVpZ2h0IHRvIGdldCB0aGUgY29tcHV0ZWQgc2l6ZS4gVG8gYmUgc2FmZSBpbiB0aGlz
CiAgICAgICAgICAgICAvLyBjYXNlLCBsZXQncyBqdXN0IHVwZGF0ZSB0aGUgZm9udCBub3cuCi0g
ICAgICAgICAgICB1cGRhdGVGb250KHN0YXRlKTsKLSAgICAgICAgICAgIGFwcGx5UHJvcGVydHko
c3RhdGUsIENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnQtPnNpemUuZ2V0KCkpOworICAgICAgICAg
ICAgdXBkYXRlRm9udCgpOworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUZv
bnRTaXplLCBmb250LT5zaXplLmdldCgpKTsKIAogICAgICAgICAgICAgc3RhdGUuc2V0TGluZUhl
aWdodFZhbHVlKGZvbnQtPmxpbmVIZWlnaHQuZ2V0KCkpOwogCi0gICAgICAgICAgICBhcHBseVBy
b3BlcnR5KHN0YXRlLCBDU1NQcm9wZXJ0eUZvbnRGYW1pbHksIGZvbnQtPmZhbWlseS5nZXQoKSk7
CisgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udC0+
ZmFtaWx5LmdldCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAKQEAgLTMxMjgsNyAr
MzEzOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUs
IENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgICAgICAgICBTaGFkb3dTdHls
ZSBzaGFkb3dTdHlsZSA9IGl0ZW0tPnN0eWxlICYmIGl0ZW0tPnN0eWxlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgICAgIENvbG9yIGNvbG9y
OwogICAgICAgICAgICAgaWYgKGl0ZW0tPmNvbG9yKQotICAgICAgICAgICAgICAgIGNvbG9yID0g
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoc3RhdGUsIGl0ZW0tPmNvbG9yLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGl0ZW0tPmNvbG9yLmdl
dCgpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlLnN0eWxlKCkpCiAgICAgICAgICAgICAg
ICAgY29sb3IgPSBzdGF0ZS5zdHlsZSgpLT5jb2xvcigpOwogCkBAIC0zMTU3LDggKzMxNjgsNyBA
QCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9w
ZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdQogICAgICAgICAgICAgcmVmbGVjdGlvbi0+c2V0T2Zm
c2V0KHJlZmxlY3RWYWx1ZS0+b2Zmc2V0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3Rh
dGUuc3R5bGUoKSwgc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCB6b29tRmFjdG9yKSk7CiAgICAg
ICAgIE5pbmVQaWVjZUltYWdlIG1hc2s7CiAgICAgICAgIG1hc2suc2V0TWFza0RlZmF1bHRzKCk7
Ci0gICAgICAgIENTU1RvU3R5bGVNYXAgc3R5bGVNYXAoc3RhdGUpOwotICAgICAgICBzdHlsZU1h
cC5tYXBOaW5lUGllY2VJbWFnZShpZCwgcmVmbGVjdFZhbHVlLT5tYXNrKCksIG1hc2spOworICAg
ICAgICBtX3N0eWxlTWFwLm1hcE5pbmVQaWVjZUltYWdlKGlkLCByZWZsZWN0VmFsdWUtPm1hc2so
KSwgbWFzayk7CiAgICAgICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKICAgICAgICAg
c3RhdGUuc3R5bGUoKS0+c2V0Qm94UmVmbGVjdChyZWZsZWN0aW9uLnJlbGVhc2UoKSk7CkBAIC0z
MjUwLDE0ICszMjYwLDE0IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0
ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgICAgICAgICBz
dGF0ZS5zdHlsZSgpLT5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkp
OwogICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3RhdGUuc3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCk7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTY3JpcHQo
bG9jYWxlVG9TY3JpcHRDb2RlRm9yRm9udFNlbGVjdGlvbihzdGF0ZS5zdHlsZSgpLT5sb2NhbGUo
KSkpOwotICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsK
KyAgICAgICAgc2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0OiB7
CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRleHRTaXplQWRqdXN0LCBUZXh0
U2l6ZUFkanVzdCkKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSB8fCAhcHJpbWl0aXZlVmFs
dWUtPmdldElkZW50KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN0YXRlLnNldFRl
eHRTaXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlQXV0byk7
CisgICAgICAgIHNldFRleHRTaXplQWRqdXN0KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09
IENTU1ZhbHVlQXV0byk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjaWYgRU5BQkxFKERBU0hC
T0FSRF9TVVBQT1JUKQpAQCAtMzM4NCw3ICszMzk0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseVByb3BlcnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZh
bHUKICAgICAgICAgaWYgKCFwcmltaXRpdmVWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBwcmltaXRp
dmVWYWx1ZSk7CisgICAgICAgIENvbG9yIGNvbCA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHBy
aW1pdGl2ZVZhbHVlKTsKICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0VGFwSGlnaGxpZ2h0Q29s
b3IoY29sKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0MzksNyArMzQ0OSw3IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5
SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIG5ld0lk
ID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkLCBzdGF0ZS5z
dHlsZSgpLT5kaXJlY3Rpb24oKSwgc3RhdGUuc3R5bGUoKS0+d3JpdGluZ01vZGUoKSk7CiAgICAg
ICAgIEFTU0VSVChuZXdJZCAhPSBpZCk7Ci0gICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5KHN0
YXRlLCBuZXdJZCwgdmFsdWUpOworICAgICAgICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwg
dmFsdWUpOwogICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6CiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVBhZ2U6CkBAIC0zNDY5LDcgKzM0NzksNyBAQCB2b2lkIFN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1
ZSogdmFsdQogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTCh3cml0aW5nTW9kZSwg
V3JpdGluZ01vZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlKQotICAg
ICAgICAgICAgc3RhdGUuc2V0V3JpdGluZ01vZGUoKnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAg
ICAgIHNldFdyaXRpbmdNb2RlKCpwcmltaXRpdmVWYWx1ZSk7CiAKICAgICAgICAgLy8gRklYTUU6
IEl0IGlzIG5vdCBvayB0byBtb2RpZnkgZG9jdW1lbnQgc3RhdGUgd2hpbGUgYXBwbHlpbmcgc3R5
bGUuCiAgICAgICAgIGlmIChzdGF0ZS5lbGVtZW50KCkgJiYgc3RhdGUuZWxlbWVudCgpID09IHN0
YXRlLmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpKQpAQCAtMzQ4MSw3ICszNDkxLDcgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KFN0YXRlJiBzdGF0ZSwgQ1NTUHJvcGVy
dHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJ
QUwodGV4dE9yaWVudGF0aW9uLCBUZXh0T3JpZW50YXRpb24pOwogCiAgICAgICAgIGlmIChwcmlt
aXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHN0YXRlLnNldFRleHRPcmllbnRhdGlvbigqcHJpbWl0
aXZlVmFsdWUpOworICAgICAgICAgICAgc2V0VGV4dE9yaWVudGF0aW9uKCpwcmltaXRpdmVWYWx1
ZSk7CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1MDQsNyArMzUxNCw3IEBAIHZvaWQg
U3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQg
aWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgLy8gQ1NTIEZvbnRzIE1vZHVsZSBMZXZlbCAzCiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlICYmIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
Tm9ybWFsKSB7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oc3RhdGUuc3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkubWFrZU5vcm1hbEZlYXR1cmVTZXR0aW5ncygpKTsKKyAg
ICAgICAgICAgIHNldEZvbnREZXNjcmlwdGlvbihzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS5tYWtlTm9ybWFsRmVhdHVyZVNldHRpbmdzKCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTM1MjMsNyArMzUzMyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBw
bHlQcm9wZXJ0eShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1
CiAgICAgICAgICAgICBzZXR0aW5ncy0+YXBwZW5kKEZvbnRGZWF0dXJlKGZlYXR1cmUtPnRhZygp
LCBmZWF0dXJlLT52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEZlYXR1cmVTZXR0aW5ncyhzZXR0aW5ncy5yZWxlYXNlKCkpOwotICAgICAgICBzdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgc2V0Rm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1
MzEsNyArMzU0MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eShTdGF0ZSYg
c3RhdGUsIENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZpbHRlcjogewogICAgICAgICBIQU5ETEVfSU5IRVJJVF9BTkRfSU5JVElBTChm
aWx0ZXIsIEZpbHRlcik7CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAg
ICAgICAgaWYgKGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoc3RhdGUsIHZhbHVlLCBzdGF0ZS5zdHls
ZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJhdGlvbnMpKQorICAgICAgICBpZiAo
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgc3RhdGUuc3R5bGUoKSwgc3RhdGUucm9vdEVs
ZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKSkKICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNl
dEZpbHRlcihvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM4NTIsNzIg
KzM4NjIsNzIgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5KFN0YXRlJiBzdGF0
ZSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKICAgICBkZWZhdWx0OgogI2lmIEVO
QUJMRShTVkcpCiAgICAgICAgIC8vIFRyeSB0aGUgU1ZHIHByb3BlcnRpZXMKLSAgICAgICAgYXBw
bHlTVkdQcm9wZXJ0eShzdGF0ZSwgaWQsIHZhbHVlKTsKKyAgICAgICAgYXBwbHlTVkdQcm9wZXJ0
eShpZCwgdmFsdWUpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLVBhc3NS
ZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShTdGF0ZSYgc3RhdGUs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU1ZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKLSAg
ICAgICAgcmV0dXJuIGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1ZShzdGF0ZSwgcHJvcGVydHksIHN0
YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2FjaGVk
T3JQZW5kaW5nRnJvbVZhbHVlKHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4o
dmFsdWUpKTsKIAogICAgIGlmICh2YWx1ZS0+aXNJbWFnZUdlbmVyYXRvclZhbHVlKCkpIHsKICAg
ICAgICAgaWYgKHZhbHVlLT5pc0dyYWRpZW50VmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxD
U1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChzdGF0
ZSkuZ2V0KCkpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHN0
YXRlLCBwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSo+KHZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVkT3JQZW5kaW5nRnJvbVZhbHVlKHByb3Bl
cnR5LCBzdGF0aWNfY2FzdDxDU1NHcmFkaWVudFZhbHVlKj4odmFsdWUpLT5ncmFkaWVudFdpdGhT
dHlsZXNSZXNvbHZlZCh0aGlzKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0ZWRPclBl
bmRpbmdGcm9tVmFsdWUocHJvcGVydHksIHN0YXRpY19jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFs
dWUqPih2YWx1ZSkpOwogICAgIH0KIAogI2lmIEVOQUJMRShDU1NfSU1BR0VfU0VUKQogICAgIGlm
ICh2YWx1ZS0+aXNJbWFnZVNldFZhbHVlKCkpCi0gICAgICAgIHJldHVybiBzZXRPclBlbmRpbmdG
cm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NJbWFnZVNldFZhbHVlKj4o
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHNldE9yUGVuZGluZ0Zyb21WYWx1ZShwcm9wZXJ0eSwg
c3RhdGljX2Nhc3Q8Q1NTSW1hZ2VTZXRWYWx1ZSo+KHZhbHVlKSk7CiAjZW5kaWYKIAogICAgIGlm
ICh2YWx1ZS0+aXNDdXJzb3JJbWFnZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjdXJzb3JPclBl
bmRpbmdGcm9tVmFsdWUoc3RhdGUsIHByb3BlcnR5LCBzdGF0aWNfY2FzdDxDU1NDdXJzb3JJbWFn
ZVZhbHVlKj4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGN1cnNvck9yUGVuZGluZ0Zyb21WYWx1
ZShwcm9wZXJ0eSwgc3RhdGljX2Nhc3Q8Q1NTQ3Vyc29ySW1hZ2VWYWx1ZSo+KHZhbHVlKSk7CiAK
ICAgICByZXR1cm4gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVy
OjpjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmIHN0YXRlLCBDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBDU1NJbWFnZVZhbHVlKiB2YWx1ZSkKK1Bhc3NSZWZQdHI8U3R5bGVJbWFnZT4gU3R5
bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIENTU0ltYWdlVmFsdWUqIHZhbHVlKQogewogICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFn
ZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwogICAgIGlmIChpbWFnZSAmJiBpbWFn
ZS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGll
cygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOworICAgICAgICBtX3N0YXRlLnBlbmRpbmdJbWFnZVBy
b3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKICAgICByZXR1cm4gaW1hZ2UucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmdlbmVyYXRl
ZE9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZVJlc29sdmVyOjpnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVl
LT5pc1BlbmRpbmcoKSkgewotICAgICAgICBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
c2V0KHByb3BlcnR5LCB2YWx1ZSk7CisgICAgICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVy
dGllcygpLnNldChwcm9wZXJ0eSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gU3R5bGVQZW5kaW5n
SW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7CiAgICAgfQogICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUodmFsdWUpOwogfQogCiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCi1QYXNz
UmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnNldE9yUGVuZGluZ0Zyb21WYWx1ZShT
dGF0ZSYgc3RhdGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIENTU0ltYWdlU2V0VmFsdWUqIHZh
bHVlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpzZXRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VTZXRWYWx1ZSogdmFsdWUp
CiB7Ci0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGlu
Z0ltYWdlU2V0KHN0YXRlLmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFn
ZSA9IHZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZVNldChkb2N1bWVudCgpKTsKICAgICBpZiAo
aW1hZ2UgJiYgaW1hZ2UtPmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIHN0YXRlLnBlbmRpbmdJ
bWFnZVByb3BlcnRpZXMoKS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0ZS5w
ZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJu
IGltYWdlLnJlbGVhc2UoKTsKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IFN0
eWxlUmVzb2x2ZXI6OmN1cnNvck9yUGVuZGluZ0Zyb21WYWx1ZShTdGF0ZSYgc3RhdGUsIENTU1By
b3BlcnR5SUQgcHJvcGVydHksIENTU0N1cnNvckltYWdlVmFsdWUqIHZhbHVlKQorUGFzc1JlZlB0
cjxTdHlsZUltYWdlPiBTdHlsZVJlc29sdmVyOjpjdXJzb3JPclBlbmRpbmdGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSogdmFsdWUpCiB7Ci0gICAg
UmVmUHRyPFN0eWxlSW1hZ2U+IGltYWdlID0gdmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKHN0
YXRlLmRvY3VtZW50KCkpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBpbWFnZSA9IHZhbHVlLT5j
YWNoZWRPclBlbmRpbmdJbWFnZShkb2N1bWVudCgpKTsKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2Ut
PmlzUGVuZGluZ0ltYWdlKCkpCi0gICAgICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMo
KS5zZXQocHJvcGVydHksIHZhbHVlKTsKKyAgICAgICAgbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9w
ZXJ0aWVzKCkuc2V0KHByb3BlcnR5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGltYWdlLnJlbGVhc2Uo
KTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRl
JiBzdGF0ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdCgpCiB7
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gc3RhdGUuc3R5bGUoKTsKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBtX3N0YXRlLnN0eWxlKCk7CiAKICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRq
dXN0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM5MjcsMTggKzM5MzcsMTggQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRlJiBzdGF0ZSkKICAgICBzdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgU3R5
bGVSZXNvbHZlcjo6Y2hlY2tGb3Jab29tQ2hhbmdlKFN0YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNo
ZWNrRm9yWm9vbUNoYW5nZShSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSA9PSBwYXJlbnRTdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKICAgICBGb250RGVz
Y3JpcHRpb24gbmV3Rm9udERlc2NyaXB0aW9uKGNoaWxkRm9udCk7Ci0gICAgc2V0Rm9udFNpemUo
c3RhdGUsIG5ld0ZvbnREZXNjcmlwdGlvbiwgY2hpbGRGb250LnNwZWNpZmllZFNpemUoKSk7Cisg
ICAgc2V0Rm9udFNpemUobmV3Rm9udERlc2NyaXB0aW9uLCBjaGlsZEZvbnQuc3BlY2lmaWVkU2l6
ZSgpKTsKICAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKG5ld0ZvbnREZXNjcmlwdGlvbik7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6Y2hlY2tGb3JHZW5lcmljRmFtaWx5Q2hhbmdlKFN0
YXRlJiBzdGF0ZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUp
Cit2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0ZhbWlseUNoYW5nZShSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBjb25zdCBGb250
RGVzY3JpcHRpb24mIGNoaWxkRm9udCA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsKIApAQCAt
Mzk3MiwxMSArMzk4MiwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmNoZWNrRm9yR2VuZXJpY0Zh
bWlseUNoYW5nZShTdGF0ZSYgc3RhdGUsIFJlbmRlclN0eWxlKiBzdHlsZQogICAgIH0KIAogICAg
IEZvbnREZXNjcmlwdGlvbiBuZXdGb250RGVzY3JpcHRpb24oY2hpbGRGb250KTsKLSAgICBzZXRG
b250U2l6ZShzdGF0ZSwgbmV3Rm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBzZXRGb250U2l6
ZShuZXdGb250RGVzY3JpcHRpb24sIHNpemUpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRp
b24obmV3Rm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjppbml0aWFs
aXplRm9udFN0eWxlKFN0YXRlJiBzdGF0ZSwgU2V0dGluZ3MqIHNldHRpbmdzKQordm9pZCBTdHls
ZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKFNldHRpbmdzKiBzZXR0aW5ncykKIHsKICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHkpOwpAQCAtMzk4
OCwxNiArMzk5OCwxNiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVGb250U3R5bGUo
U3RhdGUmIHN0YXRlLCBTZXR0aW5ncyogc2V0dGluZ3MpCiAgICAgICAgIGZvbnREZXNjcmlwdGlv
bi5maXJzdEZhbWlseSgpLmFwcGVuZEZhbWlseSgwKTsKICAgICB9CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplKENTU1ZhbHVlTWVkaXVtIC0gQ1NTVmFsdWVYeFNtYWxsICsgMSk7
Ci0gICAgc2V0Rm9udFNpemUoc3RhdGUsIGZvbnREZXNjcmlwdGlvbiwgZm9udFNpemVGb3JLZXl3
b3JkKGRvY3VtZW50KCksIENTU1ZhbHVlTWVkaXVtLCBmYWxzZSkpOwotICAgIHN0YXRlLnN0eWxl
KCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwotICAg
IHN0YXRlLnNldExpbmVIZWlnaHRWYWx1ZSgwKTsKLSAgICBzdGF0ZS5zZXRGb250RGVzY3JpcHRp
b24oZm9udERlc2NyaXB0aW9uKTsKKyAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIGZv
bnRTaXplRm9yS2V5d29yZChkb2N1bWVudCgpLCBDU1NWYWx1ZU1lZGl1bSwgZmFsc2UpKTsKKyAg
ICBtX3N0YXRlLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOworICAgIG1fc3RhdGUuc2V0TGluZUhlaWdodFZhbHVlKDApOworICAgIHNldEZv
bnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OnNldEZvbnRTaXplKFN0YXRlJiBzdGF0ZSwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGZsb2F0IHNpemUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQogewogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKHNpemUpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUoZ2V0Q29tcHV0ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoc3RhdGUuZG9jdW1lbnQo
KSwgc3RhdGUuc3R5bGUoKSwgZm9udERlc2NyaXB0aW9uLmlzQWJzb2x1dGVTaXplKCksIHNpemUs
IHN0YXRlLnVzZVNWR1pvb21SdWxlcygpKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShkb2N1bWVudCgpLCBtX3N0
YXRlLnN0eWxlKCksIGZvbnREZXNjcmlwdGlvbi5pc0Fic29sdXRlU2l6ZSgpLCBzaXplLCB1c2VT
Vkdab29tUnVsZXMoKSkpOwogfQogCiBmbG9hdCBTdHlsZVJlc29sdmVyOjpnZXRDb21wdXRlZFNp
emVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1bWVudCogZG9jdW1lbnQsIFJlbmRlclN0eWxlKiBzdHls
ZSwgYm9vbCBpc0Fic29sdXRlU2l6ZSwgZmxvYXQgc3BlY2lmaWVkU2l6ZSwgYm9vbCB1c2VTVkda
b29tUnVsZXMpCkBAIC00MTk1LDExICs0MjA1LDEyIEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y29s
b3JGcm9tUHJpbWl0aXZlVmFsdWVJc0Rlcml2ZWRGcm9tRWxlbWVudChDU1NQcmltaXRpdmVWYWx1
CiAgICAgfQogfQogCi1Db2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21QcmltaXRpdmVWYWx1
ZShjb25zdCBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUsIENTU1ByaW1pdGl2ZVZhbHVlKiB2
YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykKK0NvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVk
TGluaykgY29uc3QKIHsKICAgICBpZiAodmFsdWUtPmlzUkdCQ29sb3IoKSkKICAgICAgICAgcmV0
dXJuIENvbG9yKHZhbHVlLT5nZXRSR0JBMzJWYWx1ZSgpKTsKIAorICAgIGNvbnN0IFN0YXRlJiBz
dGF0ZSA9IG1fc3RhdGU7CiAgICAgaW50IGlkZW50ID0gdmFsdWUtPmdldElkZW50KCk7CiAgICAg
c3dpdGNoIChpZGVudCkgewogICAgIGNhc2UgMDoKQEAgLTQ1NDUsOCArNDU1Niw5IEBAIHN0YXRp
YyBGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgZmlsdGVyT3BlcmF0aW9uRm9yVHlwZShX
ZWJLaXRDU1NGaWx0ZXJWYWx1CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpICYmIEVOQUJM
RShTVkcpCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKFN0YXRl
JiBzdGF0ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdTVkdEb2N1bWVudHMoKQog
eworICAgIFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5o
YXNGaWx0ZXIoKSB8fCBzdGF0ZS5wZW5kaW5nU1ZHRG9jdW1lbnRzKCkuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTQ1NzMsMjkgKzQ1ODUsMjkgQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojpsb2FkUGVuZGluZ1NWR0RvY3VtZW50cyhTdGF0ZSYgc3RhdGUpCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLVN0eWxlU2hhZGVyKiBTdHlsZVJlc29sdmVyOjpzdHlsZVNoYWRl
cihTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiB2YWx1ZSkKK1N0eWxlU2hhZGVyKiBTdHlsZVJlc29s
dmVyOjpzdHlsZVNoYWRlcihDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5pc1dl
YktpdENTU1NoYWRlclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBjYWNoZWRPclBlbmRpbmdTdHls
ZVNoYWRlckZyb21WYWx1ZShzdGF0ZSwgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUq
Pih2YWx1ZSkpOworICAgICAgICByZXR1cm4gY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJGcm9t
VmFsdWUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTU2hhZGVyVmFsdWUqPih2YWx1ZSkpOwogICAgIHJl
dHVybiAwOwogfQogCi1TdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5n
U3R5bGVTaGFkZXJGcm9tVmFsdWUoU3RhdGUmIHN0YXRlLCBXZWJLaXRDU1NTaGFkZXJWYWx1ZSog
dmFsdWUpCitTdHlsZVNoYWRlciogU3R5bGVSZXNvbHZlcjo6Y2FjaGVkT3JQZW5kaW5nU3R5bGVT
aGFkZXJGcm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqIHZhbHVlKQogewogICAgIFN0eWxl
U2hhZGVyKiBzaGFkZXIgPSB2YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nU2hhZGVyKCk7CiAgICAgaWYg
KHNoYWRlciAmJiBzaGFkZXItPmlzUGVuZGluZ1NoYWRlcigpKQotICAgICAgICBzdGF0ZS5zZXRI
YXNQZW5kaW5nU2hhZGVycyh0cnVlKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXNQZW5kaW5nU2hh
ZGVycyh0cnVlKTsKICAgICByZXR1cm4gc2hhZGVyOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmxvYWRQZW5kaW5nU2hhZGVycyhTdGF0ZSYgc3RhdGUpCit2b2lkIFN0eWxlUmVzb2x2ZXI6Omxv
YWRQZW5kaW5nU2hhZGVycygpCiB7Ci0gICAgaWYgKCFzdGF0ZS5zdHlsZSgpLT5oYXNGaWx0ZXIo
KSB8fCAhc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMoKSkKKyAgICBpZiAoIW1fc3RhdGUuc3R5bGUo
KS0+aGFzRmlsdGVyKCkgfHwgIW1fc3RhdGUuaGFzUGVuZGluZ1NoYWRlcnMoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVy
ID0gc3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRS
ZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiAKLSAgICBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gPiYgZmlsdGVyT3BlcmF0aW9ucyA9IHN0YXRlLnN0eWxlKCktPm11dGFibGVGaWx0ZXIo
KS5vcGVyYXRpb25zKCk7CisgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+ID4mIGZp
bHRlck9wZXJhdGlvbnMgPSBtX3N0YXRlLnN0eWxlKCktPm11dGFibGVGaWx0ZXIoKS5vcGVyYXRp
b25zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlck9wZXJhdGlvbnMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyT3BlcmF0
aW9uID0gZmlsdGVyT3BlcmF0aW9ucy5hdChpKTsKICAgICAgICAgaWYgKGZpbHRlck9wZXJhdGlv
bi0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7CkBAIC00
NjEyLDcgKzQ2MjQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nU2hhZGVycyhT
dGF0ZSYgc3RhdGUpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgc3RhdGUu
c2V0SGFzUGVuZGluZ1NoYWRlcnMoZmFsc2UpOworICAgIG1fc3RhdGUuc2V0SGFzUGVuZGluZ1No
YWRlcnMoZmFsc2UpOwogfQogCiBzdGF0aWMgYm9vbCBzb3J0UGFyYW1ldGVyc0J5TmFtZUNvbXBh
cmF0b3IoY29uc3QgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4mIGEsIGNvbnN0IFJlZlB0
cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+JiBiKQpAQCAtNDY1MCwxNiArNDY2MiwxNiBAQCBQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6cGFyc2VDdXN0b21G
aWx0ZXJOdW1iZXJQYXJhbWV0ZQogICAgIHJldHVybiBudW1iZXJQYXJhbWV0ZXIucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVSZXNvbHZlcjo6
cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoU3RhdGUmIHN0YXRlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIENTU1ZhbHVlTGlzdCogdmFsdWVzKQorUGFzc1JlZlB0cjxDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0KiB2YWx1ZXMpCiB7CiAgICAg
UmVmUHRyPEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcj4gdHJhbnNmb3JtUGFyYW1ldGVy
ID0gQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOjpjcmVhdGUobmFtZSk7CiAgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnModmFsdWVzLCBzdGF0ZS5zdHlsZSgpLCBzdGF0ZS5yb290RWxlbWVudFN0eWxlKCksIG9wZXJh
dGlvbnMpOworICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVzLCBtX3N0YXRlLnN0
eWxlKCksIG1fc3RhdGUucm9vdEVsZW1lbnRTdHlsZSgpLCBvcGVyYXRpb25zKTsKICAgICB0cmFu
c2Zvcm1QYXJhbWV0ZXItPnNldE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIHRy
YW5zZm9ybVBhcmFtZXRlci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihTdGF0
ZSYgc3RhdGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqIHBhcmFtZXRlclZhbHVlKQor
UGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQYXJhbWV0ZXI+IFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqIHBhcmFtZXRl
clZhbHVlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgb3RoZXIgcGFyYW1ldGVycyB0eXBl
cyBwYXJzaW5nLgogICAgIC8vIGJvb2xlYW5zOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzY0MzgKQEAgLTQ2ODIsNyArNDY5NCw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUGFyYW1ldGVyPiBTdHlsZVJlc29sdmVyOjpwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRl
cihTdGF0CiAgICAgLy8gYXJlIHRyYW5zZm9ybXMuIHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3Jt
UGFyYW1ldGVyIHdpbGwKICAgICAvLyByZXR1cm4gMCBpZiB0aGF0IGFzc3VtcHRpb24gaXMgaW5j
b3JyZWN0LgogICAgIGlmICh2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCktPmlzV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlQ3VzdG9tRmlsdGVy
VHJhbnNmb3JtUGFyYW1ldGVyKHN0YXRlLCBuYW1lLCB2YWx1ZXMpOworICAgICAgICByZXR1cm4g
cGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIobmFtZSwgdmFsdWVzKTsKIAogICAg
IC8vIFdlIGNhbiBoYXZlIG9ubHkgYXJyYXlzIG9mIGJvb2xlYW5zIG9yIG51bWJlcnMsIHNvIHVz
ZSB0aGUgZmlyc3QgdmFsdWUgdG8gY2hvb3NlIGJldHdlZW4gdGhvc2UgdHdvLgogICAgIC8vIFdl
IG5lZWQgdXAgdG8gNCB2YWx1ZXMgKGFsbCBib29sZWFucyBvciBhbGwgbnVtYmVycykuCkBAIC00
Njk5LDcgKzQ3MTEsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gU3R5bGVS
ZXNvbHZlcjo6cGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIoU3RhdAogICAgIHJldHVybiAwOwog
fQogCi1ib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChT
dGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBwYXJhbWV0ZXJzVmFsdWUsIEN1c3RvbUZpbHRlclBhcmFt
ZXRlckxpc3QmIHBhcmFtZXRlckxpc3QpCitib29sIFN0eWxlUmVzb2x2ZXI6OnBhcnNlQ3VzdG9t
RmlsdGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSogcGFyYW1ldGVyc1ZhbHVlLCBDdXN0b21GaWx0
ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJMaXN0KQogewogICAgIEhhc2hTZXQ8U3RyaW5nPiBr
bm93blBhcmFtZXRlck5hbWVzOwogICAgIENTU1ZhbHVlTGlzdEl0ZXJhdG9yIHBhcmFtZXRlckl0
ZXJhdG9yKHBhcmFtZXRlcnNWYWx1ZSk7CkBAIC00NzI0LDcgKzQ3MzYsNyBAQCBib29sIFN0eWxl
UmVzb2x2ZXI6OnBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdGF0ZSYgc3RhdGUsIENT
U1ZhbHVlKiBwYXJhbQogICAgICAgICBpZiAoIWl0ZXJhdG9yLmhhc01vcmUoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXI+IHBhcmFtZXRlciA9IHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKHN0YXRlLCBu
YW1lLCBpdGVyYXRvci52YWx1ZSgpKTsKKyAgICAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFt
ZXRlcj4gcGFyYW1ldGVyID0gcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXIobmFtZSwgaXRlcmF0
b3IudmFsdWUoKSk7CiAgICAgICAgIGlmICghcGFyYW1ldGVyKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBwYXJhbWV0ZXJMaXN0LmFwcGVuZChwYXJhbWV0ZXIucmVsZWFzZSgp
KTsKQEAgLTQ3NDMsNyArNDc1NSw3IEBAIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9u
PiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgcmV0
dXJuIDA7CiB9CiAKLVBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29s
dmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFN0YXRlJiBz
dGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlKQorUGFzc1JlZlB0cjxDdXN0
b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRlck9wZXJh
dGlvbldpdGhJbmxpbmVTeW50YXgoV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVlKQog
ewogICAgIENTU1ZhbHVlKiBzaGFkZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzaGFk
ZXJzVmFsdWUtPmlzVmFsdWVMaXN0KCkpOwpAQCAtNDc1Miw3ICs0NzY0LDcgQEAgUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUN1c3RvbUZpbHRl
ck9wZXJhdGlvbldpdGgKICAgICB1bnNpZ25lZCBzaGFkZXJzTGlzdExlbmd0aCA9IHNoYWRlcnNM
aXN0LT5sZW5ndGgoKTsKICAgICBBU1NFUlQoc2hhZGVyc0xpc3RMZW5ndGgpOwogCi0gICAgUmVm
UHRyPFN0eWxlU2hhZGVyPiB2ZXJ0ZXhTaGFkZXIgPSBzdHlsZVNoYWRlcihzdGF0ZSwgc2hhZGVy
c0xpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgIFJlZlB0cjxTdHlsZVNoYWRl
cj4gdmVydGV4U2hhZGVyID0gc3R5bGVTaGFkZXIoc2hhZGVyc0xpc3QtPml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMCkpOwogICAgIFJlZlB0cjxTdHlsZVNoYWRlcj4gZnJhZ21lbnRTaGFkZXI7CiAg
ICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUgPSBQUk9HUkFNX1RZUEVfQkxF
TkRTX0VMRU1FTlRfVEVYVFVSRTsKICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3Mg
bWl4U2V0dGluZ3M7CkBAIC00NzY1LDcgKzQ3NzcsNyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
ck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0
aAogICAgICAgICAgICAgQ1NTVmFsdWVMaXN0SXRlcmF0b3IgaXRlcmF0b3IobWl4RnVuY3Rpb24p
OwogCiAgICAgICAgICAgICBBU1NFUlQobWl4RnVuY3Rpb24tPmxlbmd0aCgpKTsKLSAgICAgICAg
ICAgIGZyYWdtZW50U2hhZGVyID0gc3R5bGVTaGFkZXIoc3RhdGUsIGl0ZXJhdG9yLnZhbHVlKCkp
OworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHlsZVNoYWRlcihpdGVyYXRvci52YWx1
ZSgpKTsKICAgICAgICAgICAgIGl0ZXJhdG9yLmFkdmFuY2UoKTsKIAogICAgICAgICAgICAgQVNT
RVJUKG1peEZ1bmN0aW9uLT5sZW5ndGgoKSA8PSAzKTsKQEAgLTQ3ODEsNyArNDc5Myw3IEBAIFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBTdHlsZVJlc29sdmVyOjpjcmVhdGVDdXN0
b21GaWx0ZXJPcGVyYXRpb25XaXRoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBwcm9ncmFtVHlwZSA9IFBST0dSQU1fVFlQRV9OT19FTEVNRU5UX1RFWFRVUkU7
Ci0gICAgICAgICAgICBmcmFnbWVudFNoYWRlciA9IHN0eWxlU2hhZGVyKHN0YXRlLCBmcmFnbWVu
dFNoYWRlck9yTWl4RnVuY3Rpb24pOworICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIgPSBzdHls
ZVNoYWRlcihmcmFnbWVudFNoYWRlck9yTWl4RnVuY3Rpb24pOwogICAgICAgICB9CiAgICAgfQog
ICAgIApAQCAtNDgzNywyMyArNDg0OSwyMyBAQCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlck9wZXJh
dGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aAogICAg
ICAgICBwYXJhbWV0ZXJzVmFsdWUgPSBmaWx0ZXJWYWx1ZS0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygyKTsKICAgICAKICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0IHBhcmFtZXRlckxpc3Q7
Ci0gICAgaWYgKHBhcmFtZXRlcnNWYWx1ZSAmJiAhcGFyc2VDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0KHN0YXRlLCBwYXJhbWV0ZXJzVmFsdWUsIHBhcmFtZXRlckxpc3QpKQorICAgIGlmIChwYXJh
bWV0ZXJzVmFsdWUgJiYgIXBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChwYXJhbWV0ZXJz
VmFsdWUsIHBhcmFtZXRlckxpc3QpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBSZWZQ
dHI8U3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtID0gU3R5bGVDdXN0b21GaWx0ZXJQ
cm9ncmFtOjpjcmVhdGUodmVydGV4U2hhZGVyLnJlbGVhc2UoKSwgZnJhZ21lbnRTaGFkZXIucmVs
ZWFzZSgpLCBwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKTsKICAgICByZXR1cm4g
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUocHJvZ3JhbS5yZWxlYXNlKCksIHBhcmFtZXRl
ckxpc3QsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpOwogfQogCi1QYXNzUmVmUHRy
PEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gU3R5bGVSZXNvbHZlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKFN0YXRlJiBzdGF0ZSwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqIGZpbHRlclZhbHVl
KQorUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IFN0eWxlUmVzb2x2ZXI6OmNyZWF0
ZUN1c3RvbUZpbHRlck9wZXJhdGlvbihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSogZmlsdGVyVmFsdWUp
CiB7CiAgICAgQVNTRVJUKGZpbHRlclZhbHVlLT5sZW5ndGgoKSk7CiAgICAgYm9vbCBpc0F0UnVs
ZVJlZmVyZW5jZVN5bnRheCA9IGZpbHRlclZhbHVlLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
LT5pc1ByaW1pdGl2ZVZhbHVlKCk7Ci0gICAgcmV0dXJuIGlzQXRSdWxlUmVmZXJlbmNlU3ludGF4
ID8gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChm
aWx0ZXJWYWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4
KHN0YXRlLCBmaWx0ZXJWYWx1ZSk7CisgICAgcmV0dXJuIGlzQXRSdWxlUmVmZXJlbmNlU3ludGF4
ID8gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5jZVN5bnRheChm
aWx0ZXJWYWx1ZSkgOiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4
KGZpbHRlclZhbHVlKTsKIH0KIAogI2VuZGlmCiAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyhTdGF0ZSYgc3RhdGUsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJT
dHlsZSogc3R5bGUsIFJlbmRlclN0eWxlKiByb290U3R5bGUsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpCitib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMo
Q1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBzdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RT
dHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKIHsKICAgICBBU1NFUlQob3V0
T3BlcmF0aW9ucy5pc0VtcHR5KCkpOwogICAgIApAQCAtNDg4Niw3ICs0ODk4LDcgQEAgYm9vbCBT
dHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0YXRlJiBzdGF0ZSwgQ1NTVmFs
dWUqIGluVmFsdWUsIFJlbmQKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChvcGVyYXRpb25UeXBlID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBvcGVyYXRpb24gPSBjcmVhdGVD
dXN0b21GaWx0ZXJPcGVyYXRpb24oc3RhdGUsIGZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IGNyZWF0ZUN1c3RvbUZpbHRl
ck9wZXJhdGlvbihmaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBpZiAoIW9wZXJhdGlvbikKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKQEAgLTQ5MDQsMTIgKzQ5
MTYsMTIgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0YXRl
JiBzdGF0ZSwgQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmQKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAgICAgV2ViS2l0Q1NTU1ZHRG9jdW1lbnRWYWx1ZSogc3ZnRG9jdW1lbnRW
YWx1ZSA9IHN0YXRpY19jYXN0PFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWUqPihhcmd1bWVudCk7
Ci0gICAgICAgICAgICBLVVJMIHVybCA9IHN0YXRlLmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN2
Z0RvY3VtZW50VmFsdWUtPnVybCgpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gbV9zdGF0ZS5k
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdmdEb2N1bWVudFZhbHVlLT51cmwoKSk7CiAKICAgICAg
ICAgICAgIFJlZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+IG9wZXJhdGlvbiA9IFJlZmVy
ZW5jZUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKHN2Z0RvY3VtZW50VmFsdWUtPnVybCgpLCB1cmwu
ZnJhZ21lbnRJZGVudGlmaWVyKCksIG9wZXJhdGlvblR5cGUpOwotICAgICAgICAgICAgaWYgKFNW
R1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT51
cmwoKSwgc3RhdGUuZG9jdW1lbnQoKSkpIHsKKyAgICAgICAgICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OmlzRXh0ZXJuYWxVUklSZWZlcmVuY2Uoc3ZnRG9jdW1lbnRWYWx1ZS0+dXJsKCksIG1fc3Rh
dGUuZG9jdW1lbnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXN2Z0RvY3VtZW50VmFsdWUt
PmxvYWRSZXF1ZXN0ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUucGVuZGluZ1NWR0Rv
Y3VtZW50cygpLnNldChvcGVyYXRpb24uZ2V0KCksIHN2Z0RvY3VtZW50VmFsdWUpOworICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnBlbmRpbmdTVkdEb2N1bWVudHMoKS5zZXQob3BlcmF0aW9u
LmdldCgpLCBzdmdEb2N1bWVudFZhbHVlKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdmdE
b2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVudCgpKQogICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb24tPnNldENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKGFkb3B0UHRyKG5ldyBDYWNo
ZWRTVkdEb2N1bWVudFJlZmVyZW5jZShzdmdEb2N1bWVudFZhbHVlLT5jYWNoZWRTVkdEb2N1bWVu
dCgpKSkpOwogICAgICAgICAgICAgfQpAQCAtNDk5Myw3ICs1MDA1LDcgQEAgYm9vbCBTdHlsZVJl
c29sdmVyOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKFN0YXRlJiBzdGF0ZSwgQ1NTVmFsdWUqIGlu
VmFsdWUsIFJlbmQKICAgICAgICAgICAgIGludCBibHVyID0gaXRlbS0+Ymx1ciA/IGl0ZW0tPmJs
dXItPmNvbXB1dGVMZW5ndGg8aW50PihzdHlsZSwgcm9vdFN0eWxlLCB6b29tRmFjdG9yKSA6IDA7
CiAgICAgICAgICAgICBDb2xvciBjb2xvcjsKICAgICAgICAgICAgIGlmIChpdGVtLT5jb2xvcikK
LSAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHN0YXRlLCBp
dGVtLT5jb2xvci5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShpdGVtLT5jb2xvci5nZXQoKSk7CiAKICAgICAgICAgICAgIG9wZXJhdGlvbnMu
b3BlcmF0aW9ucygpLmFwcGVuZChEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUobG9j
YXRpb24sIGJsdXIsIGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50
LCBvcGVyYXRpb25UeXBlKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUwMTEsOSArNTAyMyw5
IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhTdGF0ZSYgc3Rh
dGUsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kCiAKICNlbmRpZgogCi1QYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3RhdGUmIHN0YXRlLCBTdHls
ZVBlbmRpbmdJbWFnZSogcGVuZGluZ0ltYWdlKQorUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlKFN0eWxlUGVuZGluZ0ltYWdlKiBwZW5kaW5nSW1h
Z2UpCiB7Ci0gICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0g
c3RhdGUuZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKTsKKyAgICBDYWNoZWRSZXNv
dXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX3N0YXRlLmRvY3VtZW50KCktPmNh
Y2hlZFJlc291cmNlTG9hZGVyKCk7CiAKICAgICBpZiAocGVuZGluZ0ltYWdlLT5jc3NJbWFnZVZh
bHVlKCkpIHsKICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHBlbmRpbmdJbWFn
ZS0+Y3NzSW1hZ2VWYWx1ZSgpOwpAQCAtNTA0MSwyOSArNTA1MywyOSBAQCBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2UoU3RhdGUmIHN0YXRlLCBT
dHlsZVBlbmRpbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQ
ZW5kaW5nSW1hZ2VzKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRp
bmdJbWFnZXMoKQogewotICAgIGlmIChzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuaXNF
bXB0eSgpKQorICAgIGlmIChtX3N0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMoKS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOjpjb25z
dF9pdGVyYXRvcjo6S2V5cyBlbmQgPSBzdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuZW5k
KCkua2V5cygpOwotICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0ZXJh
dG9yOjpLZXlzIGl0ID0gc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmJlZ2luKCkua2V5
cygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBQZW5kaW5nSW1hZ2VQcm9wZXJ0eU1hcDo6Y29u
c3RfaXRlcmF0b3I6OktleXMgZW5kID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCku
ZW5kKCkua2V5cygpOworICAgIGZvciAoUGVuZGluZ0ltYWdlUHJvcGVydHlNYXA6OmNvbnN0X2l0
ZXJhdG9yOjpLZXlzIGl0ID0gbV9zdGF0ZS5wZW5kaW5nSW1hZ2VQcm9wZXJ0aWVzKCkuYmVnaW4o
KS5rZXlzKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGN1cnJl
bnRQcm9wZXJ0eSA9ICppdDsKIAogICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQcm9wZXJ0eSkgewog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOiB7Ci0gICAgICAgICAgICBm
b3IgKEZpbGxMYXllciogYmFja2dyb3VuZExheWVyID0gc3RhdGUuc3R5bGUoKS0+YWNjZXNzQmFj
a2dyb3VuZExheWVycygpOyBiYWNrZ3JvdW5kTGF5ZXI7IGJhY2tncm91bmRMYXllciA9IGJhY2tn
cm91bmRMYXllci0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKEZpbGxMYXllciogYmFja2dy
b3VuZExheWVyID0gbV9zdGF0ZS5zdHlsZSgpLT5hY2Nlc3NCYWNrZ3JvdW5kTGF5ZXJzKCk7IGJh
Y2tncm91bmRMYXllcjsgYmFja2dyb3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkp
IHsKICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZExheWVyLT5pbWFnZSgpICYmIGJhY2tn
cm91bmRMYXllci0+aW1hZ2UoKS0+aXNQZW5kaW5nSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0
aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZExheWVyLT5zZXRJbWFnZShsb2FkUGVuZGlu
Z0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oYmFja2dyb3VuZExheWVyLT5p
bWFnZSgpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoQ29u
dGVudERhdGEqIGNvbnRlbnREYXRhID0gY29uc3RfY2FzdDxDb250ZW50RGF0YSo+KHN0YXRlLnN0
eWxlKCktPmNvbnRlbnREYXRhKCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50
RGF0YS0+bmV4dCgpKSB7CisgICAgICAgICAgICBmb3IgKENvbnRlbnREYXRhKiBjb250ZW50RGF0
YSA9IGNvbnN0X2Nhc3Q8Q29udGVudERhdGEqPihtX3N0YXRlLnN0eWxlKCktPmNvbnRlbnREYXRh
KCkpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0YS0+bmV4dCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGNvbnRlbnREYXRhLT5pc0ltYWdlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxJbWFnZUNvbnRlbnREYXRh
Kj4oY29udGVudERhdGEpLT5pbWFnZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2Ut
PmlzUGVuZGluZ0ltYWdlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTdHls
ZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1hZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJl
ZlB0cjxTdHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nh
c3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihpbWFnZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGxvYWRlZEltYWdlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPnNldEltYWdlKGxvYWRlZEltYWdlLnJl
bGVhc2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUwNzIsNDYgKzUwODQsNDYgQEAg
dm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ0ltYWdlcyhTdGF0ZSYgc3RhdGUpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q3Vyc29y
OiB7Ci0gICAgICAgICAgICBpZiAoQ3Vyc29yTGlzdCogY3Vyc29yTGlzdCA9IHN0YXRlLnN0eWxl
KCktPmN1cnNvcnMoKSkgeworICAgICAgICAgICAgaWYgKEN1cnNvckxpc3QqIGN1cnNvckxpc3Qg
PSBtX3N0YXRlLnN0eWxlKCktPmN1cnNvcnMoKSkgewogICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY3Vyc29yTGlzdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICAgICAgQ3Vyc29yRGF0YSYgY3VycmVudEN1cnNvciA9IGN1cnNvckxpc3QtPmF0KGkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoU3R5bGVJbWFnZSogaW1hZ2UgPSBjdXJyZW50Q3Vyc29yLmlt
YWdlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nSW1h
Z2UoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3Vyc29yLnNldEltYWdl
KGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4o
aW1hZ2UpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN1cnNvci5zZXRJ
bWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4oaW1h
Z2UpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1By
b3BlcnR5TGlzdFN0eWxlSW1hZ2U6IHsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5s
aXN0U3R5bGVJbWFnZSgpICYmIHN0YXRlLnN0eWxlKCktPmxpc3RTdHlsZUltYWdlKCktPmlzUGVu
ZGluZ0ltYWdlKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuc3R5bGUoKS0+c2V0TGlzdFN0eWxl
SW1hZ2UobG9hZFBlbmRpbmdJbWFnZShzdGF0ZSwgc3RhdGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1h
Z2UqPihzdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpKSkpOworICAgICAgICAgICAgaWYg
KG1fc3RhdGUuc3R5bGUoKS0+bGlzdFN0eWxlSW1hZ2UoKSAmJiBtX3N0YXRlLnN0eWxlKCktPmxp
c3RTdHlsZUltYWdlKCktPmlzUGVuZGluZ0ltYWdlKCkpCisgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zdHlsZSgpLT5zZXRMaXN0U3R5bGVJbWFnZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0
PFN0eWxlUGVuZGluZ0ltYWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5saXN0U3R5bGVJbWFnZSgpKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlckltYWdlU291cmNlOiB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuc3R5bGUoKS0+Ym9y
ZGVySW1hZ2VTb3VyY2UoKSAmJiBzdGF0ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5p
c1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEJvcmRl
ckltYWdlU291cmNlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0YXRpY19jYXN0PFN0eWxlUGVu
ZGluZ0ltYWdlKj4oc3RhdGUuc3R5bGUoKS0+Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKKyAgICAg
ICAgICAgIGlmIChtX3N0YXRlLnN0eWxlKCktPmJvcmRlckltYWdlU291cmNlKCkgJiYgbV9zdGF0
ZS5zdHlsZSgpLT5ib3JkZXJJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc3R5bGUoKS0+c2V0Qm9yZGVySW1hZ2VTb3VyY2UobG9hZFBlbmRp
bmdJbWFnZShzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KG1fc3RhdGUuc3R5bGUoKS0+
Ym9yZGVySW1hZ2VTb3VyY2UoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0OiB7Ci0gICAgICAgICAgICBp
ZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gc3RhdGUuc3R5bGUoKS0+Ym94UmVmbGVj
dCgpKSB7CisgICAgICAgICAgICBpZiAoU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uID0gbV9z
dGF0ZS5zdHlsZSgpLT5ib3hSZWZsZWN0KCkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBOaW5l
UGllY2VJbWFnZSYgbWFza0ltYWdlID0gcmVmbGVjdGlvbi0+bWFzaygpOwogICAgICAgICAgICAg
ICAgIGlmIChtYXNrSW1hZ2UuaW1hZ2UoKSAmJiBtYXNrSW1hZ2UuaW1hZ2UoKS0+aXNQZW5kaW5n
SW1hZ2UoKSkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gbG9hZGVk
SW1hZ2UgPSBsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBzdGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJ
bWFnZSo+KG1hc2tJbWFnZS5pbWFnZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxT
dHlsZUltYWdlPiBsb2FkZWRJbWFnZSA9IGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGljX2Nhc3Q8U3R5
bGVQZW5kaW5nSW1hZ2UqPihtYXNrSW1hZ2UuaW1hZ2UoKSkpOwogICAgICAgICAgICAgICAgICAg
ICByZWZsZWN0aW9uLT5zZXRNYXNrKE5pbmVQaWVjZUltYWdlKGxvYWRlZEltYWdlLnJlbGVhc2Uo
KSwgbWFza0ltYWdlLmltYWdlU2xpY2VzKCksIG1hc2tJbWFnZS5maWxsKCksIG1hc2tJbWFnZS5i
b3JkZXJTbGljZXMoKSwgbWFza0ltYWdlLm91dHNldCgpLCBtYXNrSW1hZ2UuaG9yaXpvbnRhbFJ1
bGUoKSwgbWFza0ltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZTogewotICAgICAgICAgICAgaWYgKHN0
YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFnZVNvdXJjZSgpICYmIHN0YXRlLnN0eWxlKCktPm1hc2tC
b3hJbWFnZVNvdXJjZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAgICAgICAgIHN0YXRl
LnN0eWxlKCktPnNldE1hc2tCb3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRlLCBz
dGF0aWNfY2FzdDxTdHlsZVBlbmRpbmdJbWFnZSo+KHN0YXRlLnN0eWxlKCktPm1hc2tCb3hJbWFn
ZVNvdXJjZSgpKSkpOworICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3R5bGUoKS0+bWFza0JveElt
YWdlU291cmNlKCkgJiYgbV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKS0+aXNQ
ZW5kaW5nSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBtX3N0YXRlLnN0eWxlKCktPnNldE1hc2tC
b3hJbWFnZVNvdXJjZShsb2FkUGVuZGluZ0ltYWdlKHN0YXRpY19jYXN0PFN0eWxlUGVuZGluZ0lt
YWdlKj4obV9zdGF0ZS5zdHlsZSgpLT5tYXNrQm94SW1hZ2VTb3VyY2UoKSkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
SW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBzdGF0ZS5z
dHlsZSgpLT5hY2Nlc3NNYXNrTGF5ZXJzKCk7IG1hc2tMYXllcjsgbWFza0xheWVyID0gbWFza0xh
eWVyLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIGZvciAoRmlsbExheWVyKiBtYXNrTGF5ZXIgPSBt
X3N0YXRlLnN0eWxlKCktPmFjY2Vzc01hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIg
PSBtYXNrTGF5ZXItPm5leHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChtYXNrTGF5ZXItPmlt
YWdlKCkgJiYgbWFza0xheWVyLT5pbWFnZSgpLT5pc1BlbmRpbmdJbWFnZSgpKQotICAgICAgICAg
ICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3RhdGUsIHN0
YXRpY19jYXN0PFN0eWxlUGVuZGluZ0ltYWdlKj4obWFza0xheWVyLT5pbWFnZSgpKSkpOworICAg
ICAgICAgICAgICAgICAgICBtYXNrTGF5ZXItPnNldEltYWdlKGxvYWRQZW5kaW5nSW1hZ2Uoc3Rh
dGljX2Nhc3Q8U3R5bGVQZW5kaW5nSW1hZ2UqPihtYXNrTGF5ZXItPmltYWdlKCkpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTEyMCwyMiArNTEz
MiwyMiBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nSW1hZ2VzKFN0YXRlJiBzdGF0
ZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRlLnBlbmRpbmdJbWFnZVByb3BlcnRpZXMo
KS5jbGVhcigpOworICAgIG1fc3RhdGUucGVuZGluZ0ltYWdlUHJvcGVydGllcygpLmNsZWFyKCk7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoU3RhdGUmIHN0
YXRlKQordm9pZCBTdHlsZVJlc29sdmVyOjpsb2FkUGVuZGluZ1Jlc291cmNlcygpCiB7CiAgICAg
Ly8gU3RhcnQgbG9hZGluZyBpbWFnZXMgcmVmZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxv
YWRQZW5kaW5nSW1hZ2VzKHN0YXRlKTsKKyAgICBsb2FkUGVuZGluZ0ltYWdlcygpOwogCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQogICAgIC8vIFN0YXJ0IGxvYWRpbmcgdGhlIHNoYWRlcnMgcmVm
ZXJlbmNlZCBieSB0aGlzIHN0eWxlLgotICAgIGxvYWRQZW5kaW5nU2hhZGVycyhzdGF0ZSk7Cisg
ICAgbG9hZFBlbmRpbmdTaGFkZXJzKCk7CiAjZW5kaWYKICAgICAKICNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpICYmIEVOQUJMRShTVkcpCiAgICAgLy8gU3RhcnQgbG9hZGluZyB0aGUgU1ZHIERvY3Vt
ZW50cyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUuCi0gICAgbG9hZFBlbmRpbmdTVkdEb2N1bWVu
dHMoc3RhdGUpOworICAgIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CiAjZW5kaWYKIH0KIApA
QCAtNTE3OCw2ICs1MTkwLDggQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpyZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIGluZm8uYWRk
TWVtYmVyKG1faW5zcGVjdG9yQ1NTT01XcmFwcGVycyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9z
Y29wZVJlc29sdmVyLCAic2NvcGVSZXNvbHZlciIpOwogCisgICAgaW5mby5hZGRNZW1iZXIobV9z
dGF0ZSwgInN0YXRlIik7CisKICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIGEgcGxhY2Ugd2hl
cmUgaXQgd291bGQgYmUgY2FsbGVkIG9ubHkgb25jZT8KICAgICBpbmZvLmFkZE1lbWJlcihDU1NE
ZWZhdWx0U3R5bGVTaGVldHM6OmRlZmF1bHRTdHlsZSwgImRlZmF1bHRTdHlsZSIpOwogICAgIGlu
Zm8uYWRkTWVtYmVyKENTU0RlZmF1bHRTdHlsZVNoZWV0czo6ZGVmYXVsdFF1aXJrc1N0eWxlLCAi
ZGVmYXVsdFF1aXJrc1N0eWxlIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAz
OGIyZmE2YmZkYzc4ZDRiNzQzNGJkZjUxMGIwOGI1ZWI0MWQzYmFjLi5jOGY1OTlkZTY1NjlkMDcx
MmE2Mjc0MDZkOTU1ZWRmZWZkNGU2OTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgK
QEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NS
dWxlTGlzdC5oIgorI2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKICNpbmNsdWRlICJDU1NWYWx1
ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudFJ1bGVTZXRzLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ1NTT01XcmFwcGVycy5oIgpAQCAtMTkzLDggKzE5NCwxMyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JEb2N1bWVudChEb2N1bWVudCos
IENTU0ZvbnRTZWxlY3RvciogPSAwKTsKIAorICAgIFJlbmRlclN0eWxlKiBzdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3R5bGUoKTsgfQorICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUucGFyZW50U3R5bGUoKTsgfQorICAgIFJlbmRlclN0
eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5yb290RWxlbWVu
dFN0eWxlKCk7IH0KKyAgICBFbGVtZW50KiBlbGVtZW50KCkgeyByZXR1cm4gbV9zdGF0ZS5lbGVt
ZW50KCk7IH0KICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSB7IHJldHVybiBtX2RvY3VtZW50OyB9
CiAgICAgU3R5bGVTY29wZVJlc29sdmVyKiBzY29wZVJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4g
bV9zY29wZVJlc29sdmVyLmdldCgpOyB9CisgICAgYm9vbCBoYXNQYXJlbnROb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5wYXJlbnROb2RlKCk7IH0KIAogICAgIC8vIEZJWE1FOiBJdCBjb3Vs
ZCBiZSBiZXR0ZXIgdG8gY2FsbCBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKCkg
ZGlyZWN0bHkgYWZ0ZXIgd2UgZmFjdG9yIFN0eWxlUnNvbHZlciBmdXJ0aGVyLgogICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg4OTAKQEAgLTIyMCwxOCAr
MjI2LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2NvcGVSZXNvbHZlci5nZXQoKTsK
ICAgICB9CiAjZW5kaWYKLSAgICBjbGFzcyBTdGF0ZTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGlu
aXRFbGVtZW50KFN0YXRlJiwgRWxlbWVudCopOwotICAgIFJlbmRlclN0eWxlKiBsb2NhdGVTaGFy
ZWRTdHlsZShTdGF0ZSYpOwotICAgIGJvb2wgc3R5bGVTaGFyaW5nQ2FuZGlkYXRlTWF0Y2hlc1J1
bGVTZXQoRWxlbWVudCosIFJ1bGVTZXQqKTsKLSAgICBib29sIHN0eWxlU2hhcmluZ0NhbmRpZGF0
ZU1hdGNoZXNIb3N0UnVsZXMoU3RhdGUmKTsKKyAgICB2b2lkIGluaXRFbGVtZW50KEVsZW1lbnQq
KTsKKyAgICBSZW5kZXJTdHlsZSogbG9jYXRlU2hhcmVkU3R5bGUoKTsKKyAgICBib29sIHN0eWxl
U2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KFJ1bGVTZXQqKTsKKyAgICBib29sIHN0eWxl
U2hhcmluZ0NhbmRpZGF0ZU1hdGNoZXNIb3N0UnVsZXMoKTsKICAgICBOb2RlKiBsb2NhdGVDb3Vz
aW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQ291bnQpIGNvbnN0
OwotICAgIFN0eWxlZEVsZW1lbnQqIGZpbmRTaWJsaW5nRm9yU3R5bGVTaGFyaW5nKGNvbnN0IFN0
YXRlJiwgTm9kZSosIHVuc2lnbmVkJiBjb3VudCkgY29uc3Q7Ci0gICAgYm9vbCBjYW5TaGFyZVN0
eWxlV2l0aEVsZW1lbnQoY29uc3QgU3RhdGUmLCBTdHlsZWRFbGVtZW50KikgY29uc3Q7CisgICAg
U3R5bGVkRWxlbWVudCogZmluZFNpYmxpbmdGb3JTdHlsZVNoYXJpbmcoTm9kZSosIHVuc2lnbmVk
JiBjb3VudCkgY29uc3Q7CisgICAgYm9vbCBjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoU3R5bGVk
RWxlbWVudCopIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVGb3JL
ZXlmcmFtZShTdGF0ZSYsIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSos
IEtleWZyYW1lVmFsdWUmKTsKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktl
eWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgU3R5bGVLZXlmcmFtZSosIEtleWZyYW1l
VmFsdWUmKTsKIAogcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sg
dGhlIHNldCBvZiBydWxlcyB0aGF0IG1hdGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBw
c2V1ZG8tZWxlbWVudCkuCkBAIC0yNTQsMjEgKzI1OSwyNSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGludCBsZWdhY3lGb250U2l6ZShEb2N1bWVudCosIGludCBwaXhlbEZvbnRTaXplLCBib29sIHNo
b3VsZFVzZUZpeGVkRGVmYXVsdFNpemUpOwogCiBwdWJsaWM6Ci0gICAgdm9pZCBhcHBseUZvbnRQ
cm9wZXJ0eVRvU3R5bGUoUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZVByb3BlcnR5U2V0Kik7Cisg
ICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFJl
bmRlclN0eWxlKik7CiAKLSAgICB2b2lkIHVwZGF0ZUZvbnQoU3RhdGUmKTsKLSAgICB2b2lkIGlu
aXRpYWxpemVGb250U3R5bGUoU3RhdGUmLCBTZXR0aW5ncyopOworICAgIHZvaWQgYXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisKKyAgICB2b2lk
IHVwZGF0ZUZvbnQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUoU2V0dGluZ3MqKTsK
IAogICAgIHN0YXRpYyBmbG9hdCBnZXRDb21wdXRlZFNpemVGcm9tU3BlY2lmaWVkU2l6ZShEb2N1
bWVudCosIGZsb2F0IHpvb21GYWN0b3IsIGJvb2wgaXNBYnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNp
ZmllZFNpemUsIEVTbWFydE1pbmltdW1Gb3JGb250U2l6ZSA9IFVzZVNtYXJ0TWluaW11bUZvckZv
bnRGaXplKTsKIAotICAgIHN0YXRpYyB2b2lkIHNldEZvbnRTaXplKFN0YXRlJiwgRm9udERlc2Ny
aXB0aW9uJiwgZmxvYXQgc2l6ZSk7CisgICAgdm9pZCBzZXRGb250U2l6ZShGb250RGVzY3JpcHRp
b24mLCBmbG9hdCBzaXplKTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgZmxvYXQgZ2V0Q29tcHV0
ZWRTaXplRnJvbVNwZWNpZmllZFNpemUoRG9jdW1lbnQqLCBSZW5kZXJTdHlsZSosIGJvb2wgaXNB
YnNvbHV0ZVNpemUsIGZsb2F0IHNwZWNpZmllZFNpemUsIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKTsK
IAogcHVibGljOgorICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCk7CisKICAgICBzdGF0aWMgYm9v
bCBjb2xvckZyb21QcmltaXRpdmVWYWx1ZUlzRGVyaXZlZEZyb21FbGVtZW50KENTU1ByaW1pdGl2
ZVZhbHVlKik7Ci0gICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0
IFN0YXRlJiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIGZvclZpc2l0ZWRMaW5rID0gZmFsc2Up
OworICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlKiwg
Ym9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKIAogICAgIGJvb2wgaGFzU2VsZWN0
b3JGb3JJZChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKICAgICBib29sIGhhc1NlbGVjdG9y
Rm9yQ2xhc3MoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CkBAIC0yOTYsMzQgKzMwNSwzNCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlkYXRlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSgpOwog
CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0aW9u
cyhTdGF0ZSYsIENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgUmVuZGVy
U3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisgICAg
Ym9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHls
ZSogaW5TdHlsZSwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0
T3BlcmF0aW9ucyk7CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIFN0eWxlU2hhZGVyKiBz
dHlsZVNoYWRlcihTdGF0ZSYsIENTU1ZhbHVlKik7Ci0gICAgU3R5bGVTaGFkZXIqIGNhY2hlZE9y
UGVuZGluZ1N0eWxlU2hhZGVyRnJvbVZhbHVlKFN0YXRlJiwgV2ViS2l0Q1NTU2hhZGVyVmFsdWUq
KTsKLSAgICBib29sIHBhcnNlQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdChTdGF0ZSYsIENTU1Zh
bHVlKiwgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYpOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlclBhcmFtZXRlcihTdGF0ZSYsIGNvbnN0
IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWUqKTsKKyAgICBTdHlsZVNoYWRlciogc3R5bGVTaGFkZXIo
Q1NTVmFsdWUqKTsKKyAgICBTdHlsZVNoYWRlciogY2FjaGVkT3JQZW5kaW5nU3R5bGVTaGFkZXJG
cm9tVmFsdWUoV2ViS2l0Q1NTU2hhZGVyVmFsdWUqKTsKKyAgICBib29sIHBhcnNlQ3VzdG9tRmls
dGVyUGFyYW1ldGVyTGlzdChDU1NWYWx1ZSosIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmKTsK
KyAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZSopOwogICAgIFBhc3NSZWZQdHI8
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyPiBwYXJzZUN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7CiAgICAgUGFzc1JlZlB0cjxDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKGNvbnN0IFN0
cmluZyYgbmFtZSwgQ1NTVmFsdWVMaXN0Kik7Ci0gICAgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXI+IHBhcnNlQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKFN0YXRlJiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKKyAgICBQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlclBhcmFtZXRlcj4gcGFyc2VDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBDU1NWYWx1ZUxpc3QqKTsKICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
ck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uV2l0aEF0UnVsZVJlZmVyZW5j
ZVN5bnRheChXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOwotICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJPcGVyYXRpb25XaXRoSW5saW5lU3ludGF4
KFN0YXRlJiwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICBQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlck9wZXJhdGlvbj4gY3JlYXRlQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFN0YXRlJiwgV2ViS2l0
Q1NTRmlsdGVyVmFsdWUqKTsKLSAgICB2b2lkIGxvYWRQZW5kaW5nU2hhZGVycyhTdGF0ZSYpOwor
ICAgIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyT3BlcmF0aW9uPiBjcmVhdGVDdXN0b21GaWx0ZXJP
cGVyYXRpb25XaXRoSW5saW5lU3ludGF4KFdlYktpdENTU0ZpbHRlclZhbHVlKik7CisgICAgUGFz
c1JlZlB0cjxDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZUN1c3RvbUZpbHRlck9wZXJhdGlv
bihXZWJLaXRDU1NGaWx0ZXJWYWx1ZSopOworICAgIHZvaWQgbG9hZFBlbmRpbmdTaGFkZXJzKCk7
CiAjZW5kaWYKICNpZiBFTkFCTEUoU1ZHKQotICAgIHZvaWQgbG9hZFBlbmRpbmdTVkdEb2N1bWVu
dHMoU3RhdGUmKTsKKyAgICB2b2lkIGxvYWRQZW5kaW5nU1ZHRG9jdW1lbnRzKCk7CiAjZW5kaWYK
ICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAKLSAgICB2b2lkIGxvYWRQZW5kaW5nUmVz
b3VyY2VzKFN0YXRlJik7CisgICAgdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcygpOwogCiBwcml2
YXRlOgogICAgIC8vIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIGRlZmF1bHQgZm9udCBzaXpl
IGlmIGl0IGRldGVjdHMgdGhhdCB0aGUgY3VycmVudCBnZW5lcmljIGZvbnQgZmFtaWx5IGhhcyBj
aGFuZ2VkLiAtZHdoCi0gICAgdm9pZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoU3RhdGUm
LCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Ci0gICAgdm9pZCBjaGVj
a0Zvclpvb21DaGFuZ2UoU3RhdGUmLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7Ci0gICAgdm9pZCBjaGVja0ZvclRleHRTaXplQWRqdXN0KFN0YXRlJik7CisgICAgdm9p
ZCBjaGVja0ZvckdlbmVyaWNGYW1pbHlDaGFuZ2UoUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpOworICAgIHZvaWQgY2hlY2tGb3Jab29tQ2hhbmdlKFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICB2b2lkIGNoZWNrRm9yVGV4dFNpemVBZGp1
c3QoKTsKIAotICAgIHZvaWQgYWRqdXN0UmVuZGVyU3R5bGUoU3RhdGUmLCBSZW5kZXJTdHlsZSog
c3R5bGVUb0FkanVzdCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CisgICAg
dm9pZCBhZGp1c3RSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogc3R5bGVUb0FkanVzdCwgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlLCBFbGVtZW50Kik7CiAKICAgICBzdHJ1Y3QgUnVsZVJhbmdlIHsK
ICAgICAgICAgUnVsZVJhbmdlKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCk6IGZpcnN0UnVsZUluZGV4KGZpcnN0UnVsZUluZGV4KSwgbGFzdFJ1bGVJbmRleChsYXN0UnVs
ZUluZGV4KSB7IH0KQEAgLTM3MCwyNSArMzc5LDI1IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgYWRkTWF0Y2hlZFByb3BlcnRpZXMoTWF0Y2hSZXN1bHQmLCBjb25zdCBTdHlsZVByb3BlcnR5
U2V0KiBwcm9wZXJ0aWVzLCBTdHlsZVJ1bGUqID0gMCwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwsIFByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IFByb3Bl
cnR5V2hpdGVsaXN0Tm9uZSk7CiAgICAgdm9pZCBhZGRFbGVtZW50U3R5bGVQcm9wZXJ0aWVzKE1h
dGNoUmVzdWx0JiwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCosIGJvb2wgaXNDYWNoZWFibGUgPSB0
cnVlKTsKIAotICAgIHZvaWQgbWF0Y2hBbGxSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9v
bCBpbmNsdWRlU01JTFByb3BlcnRpZXMpOwotICAgIHZvaWQgbWF0Y2hVQVJ1bGVzKFN0YXRlJiwg
TWF0Y2hSZXN1bHQmKTsKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhTdGF0ZSYsIE1hdGNoUmVzdWx0
JiwgUnVsZVNldCopOwotICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhTdGF0ZSYsIE1hdGNoUmVz
dWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBtYXRjaFVzZXJSdWxlcyhT
dGF0ZSYsIE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgdm9pZCBt
YXRjaFNjb3BlZEF1dGhvclJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQmLCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1hdGNoSG9zdFJ1bGVzKFN0YXRlJiwgTWF0Y2hSZXN1bHQm
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hS
ZXN1bHQmLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CisgICAgdm9pZCBtYXRjaFVBUnVs
ZXMoTWF0Y2hSZXN1bHQmKTsKKyAgICB2b2lkIG1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYsIFJ1
bGVTZXQqKTsKKyAgICB2b2lkIG1hdGNoQXV0aG9yUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICB2b2lkIG1hdGNoVXNlclJ1bGVzKE1hdGNoUmVzdWx0Jiwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaFNjb3BlZEF1dGhvclJ1bGVz
KE1hdGNoUmVzdWx0JiwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaEhv
c3RSdWxlcyhNYXRjaFJlc3VsdCYsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwogCi0gICAgdm9p
ZCBjb2xsZWN0TWF0Y2hpbmdSdWxlcyhTdGF0ZSYsIGNvbnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVS
YW5nZSYpOwotICAgIHZvaWQgY29sbGVjdE1hdGNoaW5nUnVsZXNGb3JSZWdpb24oU3RhdGUmLCBj
b25zdCBNYXRjaFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKLSAgICB2b2lkIGNvbGxlY3RNYXRjaGlu
Z1J1bGVzRm9yTGlzdChTdGF0ZSYsIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBjb25zdCBNYXRj
aFJlcXVlc3QmLCBSdWxlUmFuZ2UmKTsKKyAgICB2b2lkIGNvbGxlY3RNYXRjaGluZ1J1bGVzKGNv
bnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOworICAgIHZvaWQgY29sbGVjdE1hdGNoaW5n
UnVsZXNGb3JSZWdpb24oY29uc3QgTWF0Y2hSZXF1ZXN0JiwgUnVsZVJhbmdlJik7CisgICAgdm9p
ZCBjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGNv
bnN0IE1hdGNoUmVxdWVzdCYsIFJ1bGVSYW5nZSYpOwogCiAgICAgYm9vbCBmYXN0UmVqZWN0U2Vs
ZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMo
U3RhdGUmKTsKLSAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhTdGF0ZSYsIE1h
dGNoUmVzdWx0Jik7CisgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CisgICAgdm9pZCBzb3J0
QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMoTWF0Y2hSZXN1bHQmKTsKIAotICAgIGJvb2wgcnVsZU1h
dGNoZXMoU3RhdGUmLCBjb25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3Bl
LCBQc2V1ZG9JZCYsIFNlbGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JBdEJvdW5kYXJ5ID0gU2VsZWN0
b3JDaGVja2VyOjpEb2VzTm90Q3Jvc3NCb3VuZGFyeSk7CisgICAgYm9vbCBydWxlTWF0Y2hlcyhj
b25zdCBSdWxlRGF0YSYsIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlLCBQc2V1ZG9JZCYsIFNl
bGVjdG9yQ2hlY2tlcjo6QmVoYXZpb3JBdEJvdW5kYXJ5ID0gU2VsZWN0b3JDaGVja2VyOjpEb2Vz
Tm90Q3Jvc3NCb3VuZGFyeSk7CiAgICAgYm9vbCBjaGVja1JlZ2lvblNlbGVjdG9yKGNvbnN0IENT
U1NlbGVjdG9yKiByZWdpb25TZWxlY3RvciwgRWxlbWVudCogcmVnaW9uRWxlbWVudCk7Ci0gICAg
dm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKFN0YXRlJiwgY29uc3QgTWF0Y2hSZXN1bHQmLCBj
b25zdCBFbGVtZW50Kik7CisgICAgdm9pZCBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1h
dGNoUmVzdWx0JiwgY29uc3QgRWxlbWVudCopOwogICAgIGVudW0gU3R5bGVBcHBsaWNhdGlvblBh
c3MgewogI2lmIEVOQUJMRShDU1NfVkFSSUFCTEVTKQogICAgICAgICBWYXJpYWJsZURlZmluaXRp
b25zLApAQCAtMzk3LDExICs0MDYsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgTG93UHJpb3JpdHlQ
cm9wZXJ0aWVzCiAgICAgfTsKICAgICB0ZW1wbGF0ZSA8U3R5bGVBcHBsaWNhdGlvblBhc3MgcGFz
cz4KLSAgICB2b2lkIGFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmLCBjb25zdCBNYXRjaFJl
c3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBib29s
IGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgYXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBN
YXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4
LCBib29sIGluaGVyaXRlZE9ubHkpOwogICAgIHRlbXBsYXRlIDxTdHlsZUFwcGxpY2F0aW9uUGFz
cyBwYXNzPgotICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKFN0YXRlJiwgY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCogcHJvcGVydGllcywgU3R5bGVSdWxlKiwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBp
bmhlcml0ZWRPbmx5LCBQcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPSBQcm9wZXJ0eVdoaXRlbGlzdE5v
bmUpOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHBy
b3BlcnRpZXMsIFN0eWxlUnVsZSosIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25s
eSwgUHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gUHJvcGVydHlXaGl0ZWxpc3ROb25lKTsKICNpZiBF
TkFCTEUoQ1NTX1ZBUklBQkxFUykKLSAgICB2b2lkIHJlc29sdmVWYXJpYWJsZXMoU3RhdGUmLCBD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIFZlY3RvcjxzdGQ6OnBhaXI8Q1NTUHJvcGVydHlJRCwg
U3RyaW5nPiA+JiBrbm93bkV4cHJlc3Npb25zKTsKKyAgICB2b2lkIHJlc29sdmVWYXJpYWJsZXMo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBWZWN0b3I8c3RkOjpwYWlyPENTU1Byb3BlcnR5SUQs
IFN0cmluZz4gPiYga25vd25FeHByZXNzaW9ucyk7CiAjZW5kaWYKICAgICBzdGF0aWMgYm9vbCBp
c1ZhbGlkUmVnaW9uU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKICNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCkBAIC00MTEsOCArNDIwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hdGNoUGFn
ZVJ1bGVzRm9yTGlzdChWZWN0b3I8U3R5bGVSdWxlUGFnZSo+JiBtYXRjaGVkUnVsZXMsIGNvbnN0
IFZlY3RvcjxTdHlsZVJ1bGVQYWdlKj4mLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBh
Z2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpOwogICAgIFNldHRpbmdzKiBkb2N1bWVudFNldHRp
bmdzKCkgeyByZXR1cm4gbV9kb2N1bWVudC0+c2V0dGluZ3MoKTsgfQogCi0gICAgYm9vbCBpc0xl
ZnRQYWdlKFN0YXRlJiwgaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JpZ2h0UGFn
ZShTdGF0ZSYgc3RhdGUsIGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdl
KHN0YXRlLCBwYWdlSW5kZXgpOyB9CisgICAgYm9vbCBpc0xlZnRQYWdlKGludCBwYWdlSW5kZXgp
IGNvbnN0OworICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1
cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQogICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBh
Z2VJbmRleCkgY29uc3Q7CiAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0
OwogCkBAIC00MjIsMTcgKzQzMSwxNiBAQCBwcml2YXRlOgogICAgIEtleWZyYW1lc1J1bGVNYXAg
bV9rZXlmcmFtZXNSdWxlTWFwOwogCiBwdWJsaWM6Ci0KICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NT
UHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPiA+IFBlbmRpbmdJbWFnZVByb3BlcnR5TWFwOwog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykgJiYgRU5BQkxFKFNWRykKICAgICB0eXBlZGVmIEhhc2hN
YXA8RmlsdGVyT3BlcmF0aW9uKiwgUmVmUHRyPFdlYktpdENTU1NWR0RvY3VtZW50VmFsdWU+ID4g
UGVuZGluZ1NWR0RvY3VtZW50TWFwOwogI2VuZGlmCisKICAgICBjbGFzcyBTdGF0ZSB7CiAgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlKTsKICAgICBwdWJsaWM6Ci0gICAgICAgIFN0
YXRlKERvY3VtZW50KiBkb2N1bWVudCkKLSAgICAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQot
ICAgICAgICAsIG1fZWxlbWVudCgwKQorICAgICAgICBTdGF0ZSgpCisgICAgICAgIDogbV9lbGVt
ZW50KDApCiAgICAgICAgICwgbV9zdHlsZWRFbGVtZW50KDApCiAgICAgICAgICwgbV9wYXJlbnRO
b2RlKDApCiAgICAgICAgICwgbV9wYXJlbnRTdHlsZSgwKQpAQCAtNDU5LDcgKzQ2Nyw3IEBAIHB1
YmxpYzoKICAgICAgICAgdm9pZCBpbml0Rm9yU3R5bGVSZXNvbHZlKERvY3VtZW50KiwgRWxlbWVu
dCosIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9IDAsIGNvbnN0IFBzZXVkb1N0eWxlUmVxdWVz
dCYgPSBQc2V1ZG9TdHlsZVJlcXVlc3QoTk9QU0VVRE8pLCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZv
clN0eWxpbmcgPSAwKTsKICAgICAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgICAgIERvY3VtZW50
KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKyAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5kb2N1bWVudCgpOyB9CiAg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KICAg
ICAgICAgU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGVkRWxlbWVudDsgfQogICAgICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IHN0eWxlKSB7IG1fc3R5bGUgPSBzdHlsZTsgfQpAQCAtNTIwLDEwICs1MjgsMTEgQEAgcHVi
bGljOgogCiAgICAgICAgIFZlY3Rvcjxjb25zdCBSdWxlRGF0YSosIDMyPiYgbWF0Y2hlZFJ1bGVz
KCkgeyByZXR1cm4gbV9tYXRjaGVkUnVsZXM7IH0KICAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVs
ZShjb25zdCBSdWxlRGF0YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0K
LSAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQg
JiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsgfQogICAgICAgICAKICAgICBwcml2YXRlOgot
ICAgICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICAgICAgLy8gRklYTUUoYnVnIDEwODU2
Myk6IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJldmlldywgdGhlc2UgbWVtYmVyCisgICAgICAgIC8v
IHZhcmlhYmxlcyBhcmUgcHVibGljLiBIb3dldmVyIHdlIHNob3VsZCBhZGQgbWV0aG9kcyB0byBh
Y2Nlc3MKKyAgICAgICAgLy8gdGhlc2UgdmFyaWFibGVzLgogICAgICAgICBFbGVtZW50KiBtX2Vs
ZW1lbnQ7CiAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKICAgICAgICAgU3R5
bGVkRWxlbWVudCogbV9zdHlsZWRFbGVtZW50OwpAQCAtNTY5LDE4ICs1NzgsMzAgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIFJlbmRlclN0eWxlKiBzdHlsZU5vdFlldEF2YWlsYWJsZSgpIHsgcmV0
dXJuIHNfc3R5bGVOb3RZZXRBdmFpbGFibGU7IH0KIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0
eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlSW1hZ2U+IGNhY2hlZE9yUGVuZGluZ0Zyb21WYWx1
ZShTdGF0ZSYsIENTU1Byb3BlcnR5SUQsIENTU0ltYWdlVmFsdWUqKTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBnZW5lcmF0ZWRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBD
U1NQcm9wZXJ0eUlELCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxT
dHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CisgICAgUGFz
c1JlZlB0cjxTdHlsZUltYWdlPiBjYWNoZWRPclBlbmRpbmdGcm9tVmFsdWUoQ1NTUHJvcGVydHlJ
RCwgQ1NTSW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gZ2VuZXJhdGVk
T3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUq
KTsKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1NFVCkKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHls
ZUltYWdlPiBzZXRPclBlbmRpbmdGcm9tVmFsdWUoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NJ
bWFnZVNldFZhbHVlKik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUltYWdlPiBzZXRPclBlbmRpbmdG
cm9tVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTSW1hZ2VTZXRWYWx1ZSopOwogI2VuZGlmCi0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKFN0
YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSopOworICAgIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gY3Vyc29yT3JQZW5kaW5nRnJvbVZhbHVlKENTU1Byb3BlcnR5SUQsIENT
U0N1cnNvckltYWdlVmFsdWUqKTsKKworICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KTsgfQorICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9CiAKICAg
ICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0ludExlbmd0aChDU1NQcmltaXRpdmVWYWx1ZSosIFJl
bmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIHJvb3RTdHlsZSwgZG91YmxlIG11bHRpcGxpZXIgPSAx
KTsKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUb0Zsb2F0TGVuZ3RoKENTU1ByaW1pdGl2ZVZh
bHVlKiwgUmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogcm9vdFN0eWxlLCBkb3VibGUgbXVsdGlw
bGllciA9IDEpOwogCisgICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAmbV9z
dHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09NV3Jh
cHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KKyAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUuZm9udERl
c2NyaXB0aW9uKCk7IH0KKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNj
cmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCk7IH0KKyAg
ICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOyB9
CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRab29tKGYpOyB9CisgICAg
dm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRFZmZlY3RpdmVab29t
KGYpOyB9CisgICAgdm9pZCBzZXRUZXh0U2l6ZUFkanVzdChib29sIGIpIHsgbV9zdGF0ZS5zZXRU
ZXh0U2l6ZUFkanVzdChiKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUg
d3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KKyAg
ICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9u
KSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlvbik7IH0KICAgICAK
ICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKICAg
ICAKQEAgLTU5MCwxNyArNjExLDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNhblNoYXJlU3R5bGVXaXRoQ29u
dHJvbChjb25zdCBTdGF0ZSYsIFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKKyAgICBib29sIGNhblNo
YXJlU3R5bGVXaXRoQ29udHJvbChTdHlsZWRFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2b2lkIGFw
cGx5UHJvcGVydHlXaXRoTnVsbENoZWNrKFN0YXRlJiwgQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
KTsKLSAgICB2b2lkIGFwcGx5UHJvcGVydHkoU3RhdGUmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1
ZSopOworICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwog
CiAjaWYgRU5BQkxFKFNWRykKLSAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoY29uc3QgU3RhdGUm
LCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOworICAgIHZvaWQgYXBwbHlTVkdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPFN0eWxl
SW1hZ2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3RhdGUmLCBTdHlsZVBlbmRpbmdJbWFnZSopOwotICAg
IHZvaWQgbG9hZFBlbmRpbmdJbWFnZXMoU3RhdGUmKTsKKyAgICBQYXNzUmVmUHRyPFN0eWxlSW1h
Z2U+IGxvYWRQZW5kaW5nSW1hZ2UoU3R5bGVQZW5kaW5nSW1hZ2UqKTsKKyAgICB2b2lkIGxvYWRQ
ZW5kaW5nSW1hZ2VzKCk7CiAKICAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU1hdGNoZWRQcm9w
ZXJ0aWVzSGFzaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyosIHVuc2lnbmVkIHNpemUpOwogICAg
IHN0cnVjdCBNYXRjaGVkUHJvcGVydGllc0NhY2hlSXRlbSB7CkBAIC02MTgsNyArNjM4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHN3ZWVwTWF0Y2hlZFByb3BlcnRpZXNDYWNoZShUaW1lcjxTdHls
ZVJlc29sdmVyPiopOwogCiAgICAgYm9vbCBjbGFzc05hbWVzQWZmZWN0ZWRCeVJ1bGVzKGNvbnN0
IFNwYWNlU3BsaXRTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIHNoYXJpbmdDYW5kaWRhdGVIYXNJ
ZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMoY29uc3QgU3RhdGUmLCBTdHlsZWRFbGVt
ZW50KikgY29uc3Q7CisgICAgYm9vbCBzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVB
ZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHVuc2lnbmVk
IG1fbWF0Y2hlZFByb3BlcnRpZXNDYWNoZUFkZGl0aW9uc1NpbmNlTGFzdFN3ZWVwOwogCkBAIC02
NDUsOCArNjY1LDExIEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3R5bGVCdWlsZGVyJiBtX3N0eWxl
QnVpbGRlcjsKIAogICAgIE93blB0cjxTdHlsZVNjb3BlUmVzb2x2ZXI+IG1fc2NvcGVSZXNvbHZl
cjsKKyAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFw
cGVycyBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7CiAKKyAgICBTdGF0ZSBtX3N0YXRlOworCiAg
ICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlcjsKICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmKTsKICAg
ICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgY29uc3Qg
TWF0Y2hlZFByb3BlcnRpZXMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDM3MGJlZGNhN2Q1Mzk1MDcx
NTU3Njg1OWI3Yzg3NjE1NjljMzUyMTguLjQ0MmMxOWU2YjUzNzNhZjY3YjU2MWFkMmJjYmIyYTAy
MDQ4M2NmZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMjA2NCw3ICsyMDY0LDE4IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKIAog
ICAgIC8vIE5vdyBtYXAgdGhlIGZvbnQgcHJvcGVydHkgbG9uZ2hhbmRzIGludG8gdGhlIHN0eWxl
LgogICAgIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIgPSBjYW52YXMoKS0+c3R5bGVSZXNv
bHZlcigpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5Rm9udFByb3BlcnR5VG9TdHlsZShuZXdT
dHlsZS5nZXQoKSwgcGFyc2VkU3R5bGUuZ2V0KCkpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5
UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5Rm9udEZhbWlseSwgcGFyc2VkU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KS5nZXQoKSwgbmV3U3R5bGUuZ2V0
KCkpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQ
cm9wZXJ0eUZvbnRTdHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlGb250U3R5bGUpLmdldCgpKTsKKyAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5
VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250VmFyaWFudCwgcGFyc2VkU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudCkuZ2V0KCkpOworICAgIHN0eWxl
UmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWln
aHQsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdo
dCkuZ2V0KCkpOworCisgICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZv
bnQtc2l6ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAorICAgIC8vIHdoaWNoIGFzc3VtZXMg
dGhlIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhl
cndpc2UgYSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC85NjEyMikuCisgICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhl
IGZvbnRNZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBh
bmQgbGluZS1oZWlnaHQuCisgICAgc3R5bGVSZXNvbHZlci0+dXBkYXRlRm9udCgpOworICAgIHN0
eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
aXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXpl
KS5nZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+dXBkYXRlRm9udCgpOworICAgIHN0eWxlUmVz
b2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCku
Z2V0KCkpOwogCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9mb250ID0gbmV3U3R5bGUtPmZvbnQo
KTsKICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZv
bnRTZWxlY3RvcigpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>