<?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>203361</bug_id>
          
          <creation_ts>2019-10-24 04:16:37 -0700</creation_ts>
          <short_desc>Move property cascade out of StyleResolver</short_desc>
          <delta_ts>2019-10-24 09:08:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1583304</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-24 04:16:37 -0700</bug_when>
    <thetext>Factor it into a file of its own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583313</commentid>
    <comment_count>1</comment_count>
      <attachid>381800</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-24 04:32:01 -0700</bug_when>
    <thetext>Created attachment 381800
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583345</commentid>
    <comment_count>2</comment_count>
      <attachid>381808</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-24 07:43:42 -0700</bug_when>
    <thetext>Created attachment 381808
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583379</commentid>
    <comment_count>3</comment_count>
      <attachid>381808</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-24 09:07:03 -0700</bug_when>
    <thetext>Comment on attachment 381808
patch

Clearing flags on attachment: 381808

Committed r251540: &lt;https://trac.webkit.org/changeset/251540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583380</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-24 09:07:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583381</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-24 09:08:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/56581318&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381800</attachid>
            <date>2019-10-24 04:32:01 -0700</date>
            <delta_ts>2019-10-24 07:43:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>propertycascade-separate.patch</filename>
            <type>text/plain</type>
            <size>53976</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMzVlMGMxOGZkNS4uMDFmMTViYTljODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OSBAQAorMjAxOS0xMC0yNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBwcm9wZXJ0eSBjYXNjYWRlIG91dCBvZiBTdHlsZVJlc29sdmVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMzNjEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgU3R5
bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzIC0+IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUg
YW5kIG1vdmUgaXQgaW50byBhIGZpbGUgb2YgaXRzIG93bi4KKworICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1h
dGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhc2Nh
ZGVkUHJvcGVydGllc0ZvclJvbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBw
bHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFwcGx5
UHJvcGVydHlJblBhcnNlT3JkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxp
ZE1hcmtlclN0eWxlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxp
ZEN1ZVN0eWxlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpDYXNjYWRlZFByb3BlcnRpZXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpoYXNQ
cm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpDYXNjYWRlZFByb3BlcnRpZXM6OnByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6aGFzQ3VzdG9tUHJvcGVydHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2Fk
ZWRQcm9wZXJ0aWVzOjpjdXN0b21Qcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OnNldFByb3BlcnR5SW50
ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2Fk
ZWRQcm9wZXJ0aWVzOjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpzZXREZWZlcnJlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE1hdGNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3Bl
cnRpZXM6OmFkZE5vcm1hbE1hdGNoZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aGFz
SW1wb3J0YW50UHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFudE1hdGNoZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjph
cHBseURlZmVycmVkUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OlByb3BlcnR5OjphcHBseSk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjphdXRob3JSb2xsYmFjayBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXNlclJvbGxiYWNrIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBdXRob3JSb2xsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VXNlclJvbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6Y3VzdG9tUHJv
cGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYXNj
YWRlTGV2ZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c2V0Q2FzY2FkZUxldmVsKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNh
c2NhZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaG91bGRBcHBseVBy
b3BlcnR5SW5QYXJzZU9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjppc1ZhbGlkTWFy
a2VyU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6aXNWYWxpZEN1ZVN0
eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6
UHJvcGVydHlDYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU6OnNldFByb3BlcnR5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU6OnNldERlZmVycmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU6OmFkZE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpkZWNsYXJhdGlvbnNGb3JD
YXNjYWRlTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6
YWRkTm9ybWFsTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6aGFzSW1wb3J0YW50
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjph
ZGRJbXBvcnRhbnRNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5OjphcHBseSk6CisgICAgICAgICogc3R5bGUvUHJv
cGVydHlDYXNjYWRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5
Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJv
cGVydHlDYXNjYWRlOjpoYXNQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UHJvcGVydHlDYXNjYWRlOjpoYXNDdXN0b21Qcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpjdXN0b21Qcm9wZXJ0eSBjb25zdCk6CisKIDIw
MTktMTAtMjQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgTWF0Y2hSZXN1bHQgYW5kIHJlbGF0ZWQgdHlwZXMgb3V0IG9mIFN0eWxlUmVzb2x2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggNmI2MjIxMWQ4MzIuLmVkYjYzMGRiMmNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjMzNyw2ICsyMzM3LDcgQEAgc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNw
cAogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCiBzdHlsZS9JZENoYW5nZUludmFs
aWRhdGlvbi5jcHAKIHN0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAKK3N0eWxlL1Byb3BlcnR5
Q2FzY2FkZS5jcHAKIHN0eWxlL1N0eWxlQ2hhbmdlLmNwcAogc3R5bGUvU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5jcHAKIHN0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTI5YTIwZmQzOWEu
LjM5Y2ViZWMzMzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00ODMyLDYgKzQ4MzIsNyBAQAogCQlFNEE4MTREQTFDNzBFMTBE
MDBCRjg1QUMgLyogQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEE4MTREOTFDNzBFMTBEMDBCRjg1QUMg
LyogQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmggKi87IH07CiAJCUU0QTgxNEUwMUM3MzM4
RUIwMEJGODVBQyAvKiBJZENoYW5nZUludmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBODE0REYxQzczMzhFQjAwQkY4NUFDIC8qIElk
Q2hhbmdlSW52YWxpZGF0aW9uLmggKi87IH07CiAJCUU0QThEMjE2MjI1NzhEQjcwMEE4NDYzQyAv
KiBFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRBOEQyMTQyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRBQkFCRTQyMzYxQTMy
OTAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBQkFCRTIyMzYxQTMyOTAwRkE0MzQ1IC8qIFByb3BlcnR5
Q2FzY2FkZS5oICovOyB9OwogCQlFNEFFN0MxNjE3RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEFFN0MxNTE3RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0ZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRBRTdDMUExN0QyMzIzNTAw
MDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFN0MxOTE3RDIzMjM1MDAwOUZCMzEgLyogRWxl
bWVudEFuY2VzdG9ySXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFNEFGQ0ZBNTBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkNGQTQw
REFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLzsgfTsKQEAgLTE1MTQxLDYgKzE1MTQy
LDggQEAKIAkJRTRBODE0REYxQzczMzhFQjAwQkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkQ2hhbmdlSW52YWxpZGF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QThEMjE0MjI1NzhEQTAwMEE4NDYz
QyAvKiBFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVu
dFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEE4RDIxNTIyNTc4REEw
MDBBODQ2M0MgLyogRXZlbnRSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXZlbnRSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NEFCQUJFMjIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNEFCQUJFNTIzNjFBMzQyMDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0QUU3QzE1MTdEMUJCOTUwMDA5RkIzMSAvKiBFbGVtZW50SXRl
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUU3QzE5MTdEMjMyMzUwMDA5RkIz
MSAvKiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNEFGQ0ZBNDBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbml0QmV6aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNjg3Miw2ICsyNjg3NSw4IEBACiAJCQkJRTRBODE0REYxQzczMzhFQjAw
QkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmggKi8sCiAJCQkJMUMwMTA2RkUxOTI1OTRE
RjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5jcHAgKi8sCiAJCQkJMUMwMTA2RkYxOTI1
OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5oICovLAorCQkJCUU0QUJBQkU1MjM2
MUEzNDIwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuY3BwICovLAorCQkJCUU0QUJBQkUyMjM2
MUEzMjkwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuaCAqLywKIAkJCQlFNDAxRTBBNTFDM0Mw
Q0Y3MDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuY3BwICovLAogCQkJCUU0MDFFMEEzMUMzQzBCODMw
MEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovLAogCQkJCUU0RDU4RUI2MTdCNEVEODkwMENCRENB
OCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLywKQEAgLTI5MDQ1LDYgKzI5MDUwLDcg
QEAKIAkJCQk3NTlDQjgzNzE5MkRBOTE5MDAxMkJDNjQgLyogQ29udHJvbFN0YXRlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkQzMTYwMjkxMkIwMjY3NjAwQzFBMzU5IC8qIENvbnZvbHZlck5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUQ4QjYxNTJGMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUU0QUJBQkU0MjM2MUEzMjkwMEZBNDM0NSAvKiBQcm9wZXJ0
eUNhc2NhZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNDI0Qzk0MTY0QjUyQzgwMEYzMkQ0MCAv
KiBDb29raWVKYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBNTY5OTcwMjA4NkM2MTkwMDBFMDQz
MyAvKiBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDE1NDM0YTBjZTcxLi43NTA2
N2U5ZDM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMzczLDcgKzM3
Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVG
b3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSoKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
Ym90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQogICAg
IC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZp
cnN0IHByb3BlcnRpZXMuCi0gICAgQ2FzY2FkZWRQcm9wZXJ0aWVzIGNhc2NhZGUoZGlyZWN0aW9u
LCB3cml0aW5nTW9kZSk7CisgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBjYXNjYWRlKGRpcmVj
dGlvbiwgd3JpdGluZ01vZGUpOwogICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhyZXN1bHQs
IENhc2NhZGVMZXZlbDo6QXV0aG9yTGV2ZWwpOwogCiAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5
U3RhdGUgYXBwbHlTdGF0ZSB7IHRoaXMsICZjYXNjYWRlLCAmcmVzdWx0IH07CkBAIC01NzksNyAr
NTc5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBXcml0aW5nTW9kZSB3cml0aW5nTW9kZTsKICAg
ICBleHRyYWN0RGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKm1fc3RhdGUuc3R5bGUoKSwgcmVzdWx0
LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKIAotICAgIENhc2NhZGVkUHJvcGVydGllcyBjYXNj
YWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOworICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUg
Y2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKICAgICBjYXNjYWRlLmFkZE5vcm1hbE1h
dGNoZXMocmVzdWx0LCBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsKTsKIAogICAgIEFwcGx5Q2Fz
Y2FkZWRQcm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9
OwpAQCAtMTIyNCwzOSArMTIyNCw2IEBAIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gU3R5bGVS
ZXNvbHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVuCiAgICAgcmV0
dXJuIGNvbGxlY3Rvci5tYXRjaGVkUnVsZUxpc3QoKTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxk
QXBwbHlQcm9wZXJ0eUluUGFyc2VPcmRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi17Ci0g
ICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tn
cm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcDoKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZE9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZE9yaWdpbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNp
emU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2U6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2U6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckltYWdlU291cmNlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91
dHNldDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VSZXBlYXQ6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJv
eFNoYWRvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm94U2hhZG93OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb25MaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblN0eWxlOgotICAg
IGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlUZXh0RGVjb3JhdGlvblNraXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVQ
b3NpdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU9mZnNldDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25UaGlja25lc3M6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiBzdGF0aWMgYm9vbCBlbGVtZW50VHlw
ZUhhc0FwcGVhcmFuY2VGcm9tVUFTdHlsZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAg
IC8vIE5PVEU6IFRoaXMgaXMganVzdCBhIGhhcmQtY29kZWQgbGlzdCBvZiBlbGVtZW50cyB0aGF0
IGhhdmUgc29tZSAtd2Via2l0LWFwcGVhcmFuY2UgdmFsdWUgaW4gaHRtbC5jc3MKQEAgLTE0MTUs
NyArMTM4Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIC8vIEZpbmQgb3V0
IGlmIHRoZXJlJ3MgYSAtd2Via2l0LWFwcGVhcmFuY2UgcHJvcGVydHkgaW4gZWZmZWN0IGZyb20g
dGhlIFVBIHNoZWV0LgogICAgICAgICAvLyBJZiBzbywgd2UgY2FjaGUgdGhlIGJvcmRlciBhbmQg
YmFja2dyb3VuZCBzdHlsZXMgc28gdGhhdCBSZW5kZXJUaGVtZTo6YWRqdXN0U3R5bGUoKQogICAg
ICAgICAvLyBjYW4gbG9vayBhdCB0aGVtIGxhdGVyIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBh
IHN0eWxlZCBmb3JtIGNvbnRyb2wgb3Igbm90LgotICAgICAgICBDYXNjYWRlZFByb3BlcnRpZXMg
Y2FzY2FkZShkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKKyAgICAgICAgU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSBjYXNjYWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwogICAgICAgICBjYXNjYWRl
LmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2
ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7CiAgICAgICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0
Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhl
cml0ZWRPbmx5KTsKIApAQCAtMTQ0Miw3ICsxNDA5LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKICAgICAgICAgc3RhdGUuY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7CiAgICAgfQogCi0g
ICAgQ2FzY2FkZWRQcm9wZXJ0aWVzIGNhc2NhZGUoZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7Cisg
ICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBjYXNjYWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUp
OwogICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVs
OjpVc2VyQWdlbnRMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKICAgICBjYXNjYWRlLmFkZE5v
cm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckxldmVsLCBhcHBseUlu
aGVyaXRlZE9ubHkpOwogICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwg
Q2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKQEAgLTE1MzQs
ODEgKzE1MDEsNiBAQCBpbmxpbmUgYm9vbCBpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEIGlkKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gaHR0cHM6Ly93d3cudzMu
b3JnL1RSL2Nzcy1wc2V1ZG8tNC8jbWFya2VyLXBzZXVkbyAoRWRpdG9yJ3MgRHJhZnQsIDI1IEp1
bHkgMjAxNykKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkTWFya2VyU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkKQotewotICAgIHN3aXRjaCAoaWQpIHsKLSAgICBjYXNlIENTU1Byb3Bl
cnR5Q29sb3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGYW1pbHk6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUZvbnRGZWF0dXJlU2V0dGluZ3M6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXpl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
Rm9udFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3ludGhlc2lzOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVybmF0ZXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50Q2FwczoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRFYXN0QXNpYW46
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50TGlnYXR1cmVzOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250VmFyaWFudE51bWVyaWM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJp
YW50UG9zaXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6Ci0jaWYgRU5BQkxF
KFZBUklBVElPTl9GT05UUykKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udE9wdGljYWxTaXppbmc6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYXRpb25TZXR0aW5nczoKLSNlbmRpZgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotc3RhdGljIGlu
bGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCi17Ci0g
ICAgc3dpdGNoIChpZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKLSAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZENsaXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKLSAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRSZXBlYXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udEZhbWlseToKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlh
bnRDYXBzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgotICAgIGNhc2UgQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPcGFjaXR5OgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlPdXRsaW5lOgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91
dGxpbmVTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVdpZHRoOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlWaXNpYmlsaXR5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgot
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICBjYXNlIENTU1Byb3BlcnR5
VGV4dFNoYWRvdzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGU6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVBhaW50T3JkZXI6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVqb2lu
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lY2FwOgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlTdHJva2VDb2xvcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlV2lkdGg6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKIC8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZm
ZXJlbnQgd2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBp
bnN0ZWFkCiAvLyBvZiBlYWNoIGluZGl2aWR1YWwgbGVuZ3RoIHZhbHVlIGluIHRoZSByZW5kZXIg
c3R5bGUgLyB0cmVlLiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0aCooKQogLy8gbXVs
dGlwbGllcyBlYWNoIHJlc29sdmVkIGxlbmd0aCB3aXRoIHRoZSB6b29tIG11bHRpcGxpZXIgLSBz
byBmb3IgU1ZHIHdlIG5lZWQgdG8gZGlzYWJsZSB0aGF0LgpAQCAtMTYyOCwyMCArMTUyMCwxOSBA
QCBib29sIFN0eWxlUmVzb2x2ZXI6OnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0CiAg
ICAgcmV0dXJuIGlzPFNWR0VsZW1lbnQ+KG1fc3RhdGUuZWxlbWVudCgpKSAmJiAhKGlzPFNWR1NW
R0VsZW1lbnQ+KCptX3N0YXRlLmVsZW1lbnQoKSkgJiYgbV9zdGF0ZS5lbGVtZW50KCktPnBhcmVu
dE5vZGUoKSk7CiB9CiAKLVN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllcyogU3R5bGVS
ZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2soY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0KQorU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSogU3R5bGVSZXNvbHZlcjo6Y2Fz
Y2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2soY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0
KQogewotICAgIEFTU0VSVChjYXNjYWRlTGV2ZWwoKSAhPSBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2Vu
dExldmVsKTsKLQogICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uOwogICAgIFdyaXRpbmdNb2Rl
IHdyaXRpbmdNb2RlOwogICAgIGV4dHJhY3REaXJlY3Rpb25BbmRXcml0aW5nTW9kZSgqc3RhdGUo
KS5zdHlsZSgpLCBtYXRjaFJlc3VsdCwgZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKLSAgICBp
ZiAoY2FzY2FkZUxldmVsKCkgPT0gQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbCkgewotICAgICAg
ICBDYXNjYWRlZFByb3BlcnRpZXMqIGF1dGhvclJvbGxiYWNrID0gc3RhdGUoKS5hdXRob3JSb2xs
YmFjaygpOworICAgIHN3aXRjaCAoc3RhdGUoKS5jYXNjYWRlTGV2ZWwoKSkgeworICAgIGNhc2Ug
Q2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbDogeworICAgICAgICBhdXRvKiBhdXRob3JSb2xsYmFj
ayA9IHN0YXRlKCkuYXV0aG9yUm9sbGJhY2soKTsKICAgICAgICAgaWYgKGF1dGhvclJvbGxiYWNr
KQogICAgICAgICAgICAgcmV0dXJuIGF1dGhvclJvbGxiYWNrOwogCi0gICAgICAgIGF1dG8gbmV3
QXV0aG9yUm9sbGJhY2sobWFrZVVuaXF1ZTxDYXNjYWRlZFByb3BlcnRpZXM+KGRpcmVjdGlvbiwg
d3JpdGluZ01vZGUpKTsKKyAgICAgICAgYXV0byBuZXdBdXRob3JSb2xsYmFjayA9IG1ha2VVbmlx
dWU8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4oZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7CiAKICAg
ICAgICAgLy8gVGhpcyBzcGVjaWFsIHJvbGxiYWNrIGNhc2NhZGUgY29udGFpbnMgVUEgcnVsZXMg
YW5kIHVzZXIgcnVsZXMgYnV0IG5vIGF1dGhvciBydWxlcy4KICAgICAgICAgbmV3QXV0aG9yUm9s
bGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFn
ZW50TGV2ZWwsIGZhbHNlKTsKQEAgLTE2NTMsMTIgKzE1NDQsMTIgQEAgU3R5bGVSZXNvbHZlcjo6
Q2FzY2FkZWRQcm9wZXJ0aWVzKiBTdHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3BlcnRpZXNGb3JS
b2xsYmFjaygKICAgICAgICAgcmV0dXJuIHN0YXRlKCkuYXV0aG9yUm9sbGJhY2soKTsKICAgICB9
CiAKLSAgICBpZiAoY2FzY2FkZUxldmVsKCkgPT0gQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWwpIHsK
LSAgICAgICAgQ2FzY2FkZWRQcm9wZXJ0aWVzKiB1c2VyUm9sbGJhY2sgPSBzdGF0ZSgpLnVzZXJS
b2xsYmFjaygpOworICAgIGNhc2UgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWw6IHsKKyAgICAgICAg
YXV0byogdXNlclJvbGxiYWNrID0gc3RhdGUoKS51c2VyUm9sbGJhY2soKTsKICAgICAgICAgaWYg
KHVzZXJSb2xsYmFjaykKICAgICAgICAgICAgIHJldHVybiB1c2VyUm9sbGJhY2s7CiAKLSAgICAg
ICAgYXV0byBuZXdVc2VyUm9sbGJhY2sobWFrZVVuaXF1ZTxDYXNjYWRlZFByb3BlcnRpZXM+KGRp
cmVjdGlvbiwgd3JpdGluZ01vZGUpKTsKKyAgICAgICAgYXV0byBuZXdVc2VyUm9sbGJhY2sgPSBt
YWtlVW5pcXVlPFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU+KGRpcmVjdGlvbiwgd3JpdGluZ01vZGUp
OwogCiAgICAgICAgIC8vIFRoaXMgc3BlY2lhbCByb2xsYmFjayBjYXNjYWRlIGNvbnRhaW5zIG9u
bHkgVUEgcnVsZXMuCiAgICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyht
YXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOwpAQCAtMTY2
OCw2ICsxNTU5LDEwIEBAIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllcyogU3R5bGVS
ZXNvbHZlcjo6Y2FzY2FkZWRQcm9wZXJ0aWVzRm9yUm9sbGJhY2soCiAgICAgICAgIHJldHVybiBz
dGF0ZSgpLnVzZXJSb2xsYmFjaygpOwogICAgIH0KIAorICAgIGNhc2UgQ2FzY2FkZUxldmVsOjpV
c2VyQWdlbnRMZXZlbDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0xNzE4LDcgKzE2MTMsNyBAQCB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHVlLCBBcHBseUNhc2NhZAogICAgIGJvb2wgaXNSZXZlcnQgPSB2YWx1ZVRvQ2hlY2tG
b3JJbmhlcml0SW5pdGlhbC0+aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJ
RCA9PSBDU1NWYWx1ZVJldmVydDsKIAogICAgIGlmIChpc1JldmVydCkgewotICAgICAgICBpZiAo
Y2FzY2FkZUxldmVsKCkgPT0gQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCB8fCAhbWF0Y2hS
ZXN1bHQpCisgICAgICAgIGlmIChzdGF0ZS5jYXNjYWRlTGV2ZWwoKSA9PSBDYXNjYWRlTGV2ZWw6
OlVzZXJBZ2VudExldmVsIHx8ICFtYXRjaFJlc3VsdCkKICAgICAgICAgICAgIGlzVW5zZXQgPSB0
cnVlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBjb3JyZWN0IHJv
bGxiYWNrIG9iamVjdCBmcm9tIHRoZSBzdGF0ZSwgYnVpbGRpbmcgaXQgaWYgbmVjZXNzYXJ5LgpA
QCAtMjEzNSwyMjUgKzIwMzAsNiBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9w
ZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIGluVmFsdWUsIEZpbHRlck9wZXJhdAogICAgIHJldHVy
biB0cnVlOwogfQogCi1TdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OkNhc2NhZGVk
UHJvcGVydGllcyhUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGUpCi0gICAgOiBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCi0gICAgLCBtX3dyaXRpbmdNb2RlKHdy
aXRpbmdNb2RlKQotewotfQotCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFBy
b3BlcnRpZXM6Omhhc1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKGlkIDwgbV9wcm9wZXJ0eUlzUHJlc2VudC5zaXplKCkpOwotICAgIHJldHVybiBtX3Byb3Bl
cnR5SXNQcmVzZW50W2lkXTsKLX0KLQotaW5saW5lIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJv
cGVydGllczo6UHJvcGVydHkmIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6cHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICByZXR1cm4gbV9wcm9wZXJ0aWVzW2lkXTsK
LX0KLQotaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpoYXND
dXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
Y3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKTsKLX0KLQotaW5saW5lIFN0eWxlUmVzb2x2
ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6UHJvcGVydHkgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQ
cm9wZXJ0aWVzOjpjdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fY3VzdG9tUHJvcGVydGllcy5nZXQobmFtZSk7Ci19Ci0KLXZvaWQgU3R5bGVS
ZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpzZXRQcm9wZXJ0eUludGVybmFsKFByb3BlcnR5
JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIGNzc1ZhbHVlLCB1bnNpZ25l
ZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBTdHlsZTo6U2NvcGVP
cmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKQotewotICAgIEFTU0VSVChsaW5rTWF0Y2hUeXBlIDw9
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpOwotICAgIHByb3BlcnR5LmlkID0gaWQ7Ci0gICAg
cHJvcGVydHkubGV2ZWwgPSBjYXNjYWRlTGV2ZWw7Ci0gICAgcHJvcGVydHkuc3R5bGVTY29wZU9y
ZGluYWwgPSBzdHlsZVNjb3BlT3JkaW5hbDsKLSAgICBpZiAobGlua01hdGNoVHlwZSA9PSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoQWxsKSB7Ci0gICAgICAgIHByb3BlcnR5LmNzc1ZhbHVlWzBdID0g
JmNzc1ZhbHVlOwotICAgICAgICBwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoTGlua10gPSAmY3NzVmFsdWU7Ci0gICAgICAgIHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9y
Q2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSA9ICZjc3NWYWx1ZTsKLSAgICB9IGVsc2UKLSAgICAgICAg
cHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoVHlwZV0gPSAmY3NzVmFsdWU7Ci19Ci0KLXZvaWQg
U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpzZXQoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUmIGNzc1ZhbHVlLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwg
Y2FzY2FkZUxldmVsLCBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKQotewot
ICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkKSkKLSAgICAg
ICAgaWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQsIG1f
ZGlyZWN0aW9uLCBtX3dyaXRpbmdNb2RlKTsKLQotICAgIEFTU0VSVCghc2hvdWxkQXBwbHlQcm9w
ZXJ0eUluUGFyc2VPcmRlcihpZCkpOwotCi0gICAgYXV0byYgcHJvcGVydHkgPSBtX3Byb3BlcnRp
ZXNbaWRdOwotICAgIEFTU0VSVChpZCA8IG1fcHJvcGVydHlJc1ByZXNlbnQuc2l6ZSgpKTsKLSAg
ICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsKLSAgICAgICAgbV9wcm9wZXJ0eUlzUHJl
c2VudC5zZXQoaWQpOwotICAgICAgICBjb25zdCBhdXRvJiBjdXN0b21WYWx1ZSA9IGRvd25jYXN0
PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KGNzc1ZhbHVlKTsKLSAgICAgICAgYm9vbCBoYXNWYWx1
ZSA9IGN1c3RvbVByb3BlcnRpZXMoKS5jb250YWlucyhjdXN0b21WYWx1ZS5uYW1lKCkpOwotICAg
ICAgICBpZiAoIWhhc1ZhbHVlKSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eTsKLSAg
ICAgICAgICAgIHByb3BlcnR5LmlkID0gaWQ7Ci0gICAgICAgICAgICBtZW1zZXQocHJvcGVydHku
Y3NzVmFsdWUsIDAsIHNpemVvZihwcm9wZXJ0eS5jc3NWYWx1ZSkpOwotICAgICAgICAgICAgc2V0
UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0eSwgaWQsIGNzc1ZhbHVlLCBsaW5rTWF0Y2hUeXBlLCBj
YXNjYWRlTGV2ZWwsIHN0eWxlU2NvcGVPcmRpbmFsKTsKLSAgICAgICAgICAgIGN1c3RvbVByb3Bl
cnRpZXMoKS5zZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnRpZXMoKS5n
ZXQoY3VzdG9tVmFsdWUubmFtZSgpKTsKLSAgICAgICAgICAgIHNldFByb3BlcnR5SW50ZXJuYWwo
cHJvcGVydHksIGlkLCBjc3NWYWx1ZSwgbGlua01hdGNoVHlwZSwgY2FzY2FkZUxldmVsLCBzdHls
ZVNjb3BlT3JkaW5hbCk7Ci0gICAgICAgICAgICBjdXN0b21Qcm9wZXJ0aWVzKCkuc2V0KGN1c3Rv
bVZhbHVlLm5hbWUoKSwgcHJvcGVydHkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1fcHJvcGVydHlJc1ByZXNlbnRbaWRdKQotICAgICAgICBtZW1zZXQo
cHJvcGVydHkuY3NzVmFsdWUsIDAsIHNpemVvZihwcm9wZXJ0eS5jc3NWYWx1ZSkpOwotICAgIG1f
cHJvcGVydHlJc1ByZXNlbnQuc2V0KGlkKTsKLSAgICBzZXRQcm9wZXJ0eUludGVybmFsKHByb3Bl
cnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUsIGNhc2NhZGVMZXZlbCwgc3R5bGVTY29w
ZU9yZGluYWwpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6
c2V0RGVmZXJyZWQoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIGNzc1ZhbHVlLCB1bnNpZ25l
ZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBTdHlsZTo6U2NvcGVP
cmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKQotewotICAgIEFTU0VSVCghQ1NTUHJvcGVydHk6Omlz
RGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShpZCkpOwotICAgIEFTU0VSVChzaG91bGRBcHBseVByb3Bl
cnR5SW5QYXJzZU9yZGVyKGlkKSk7Ci0KLSAgICBQcm9wZXJ0eSBwcm9wZXJ0eTsKLSAgICBtZW1z
ZXQocHJvcGVydHkuY3NzVmFsdWUsIDAsIHNpemVvZihwcm9wZXJ0eS5jc3NWYWx1ZSkpOwotICAg
IHNldFByb3BlcnR5SW50ZXJuYWwocHJvcGVydHksIGlkLCBjc3NWYWx1ZSwgbGlua01hdGNoVHlw
ZSwgY2FzY2FkZUxldmVsLCBzdHlsZVNjb3BlT3JkaW5hbCk7Ci0gICAgbV9kZWZlcnJlZFByb3Bl
cnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKLX0KLQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2Nh
ZGVkUHJvcGVydGllczo6YWRkTWF0Y2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQ
cm9wZXJ0aWVzLCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0YW50LCBi
b29sIGluaGVyaXRlZE9ubHkpCi17Ci0gICAgYXV0byYgc3R5bGVQcm9wZXJ0aWVzID0gKm1hdGNo
ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXM7Ci0gICAgYXV0byBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUg
PSBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1hdGNoZWRQcm9wZXJ0aWVzLndo
aXRlbGlzdFR5cGUpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgY291bnQgPSBzdHlsZVBy
b3BlcnRpZXMucHJvcGVydHlDb3VudCgpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBhdXRv
IGN1cnJlbnQgPSBzdHlsZVByb3BlcnRpZXMucHJvcGVydHlBdChpKTsKLSAgICAgICAgaWYgKGlz
SW1wb3J0YW50ICE9IGN1cnJlbnQuaXNJbXBvcnRhbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoaW5oZXJpdGVkT25seSAmJiAhY3VycmVudC5pc0luaGVyaXRlZCgpKSB7
Ci0gICAgICAgICAgICAvLyBXZSBhcHBseSB0aGUgaW5oZXJpdGVkIHByb3BlcnRpZXMgb25seSB3
aGVuIHVzaW5nIHRoZSBwcm9wZXJ0eSBjYWNoZS4KLSAgICAgICAgICAgIC8vIEEgbWF0Y2ggd2l0
aCBhIHZhbHVlIHRoYXQgaXMgZXhwbGljaXRlbHkgaW5oZXJpdGVkIHNob3VsZCBuZXZlciBoYXZl
IGJlZW4gY2FjaGVkLgotICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LnZhbHVlKCktPmlzSW5o
ZXJpdGVkVmFsdWUoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAg
ICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjdXJyZW50LmlkKCk7Ci0KLSNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCi0gICAgICAgIGlmIChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPT0gUHJvcGVy
dHlXaGl0ZWxpc3RDdWUgJiYgIWlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KHByb3BlcnR5SUQpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0jZW5kaWYKLSAgICAgICAgaWYgKHByb3BlcnR5V2hpdGVs
aXN0VHlwZSA9PSBQcm9wZXJ0eVdoaXRlbGlzdE1hcmtlciAmJiAhaXNWYWxpZE1hcmtlclN0eWxl
UHJvcGVydHkocHJvcGVydHlJRCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBp
ZiAoc2hvdWxkQXBwbHlQcm9wZXJ0eUluUGFyc2VPcmRlcihwcm9wZXJ0eUlEKSkKLSAgICAgICAg
ICAgIHNldERlZmVycmVkKHByb3BlcnR5SUQsICpjdXJyZW50LnZhbHVlKCksIG1hdGNoZWRQcm9w
ZXJ0aWVzLmxpbmtNYXRjaFR5cGUsIGNhc2NhZGVMZXZlbCwgbWF0Y2hlZFByb3BlcnRpZXMuc3R5
bGVTY29wZU9yZGluYWwpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXQocHJvcGVydHlJ
RCwgKmN1cnJlbnQudmFsdWUoKSwgbWF0Y2hlZFByb3BlcnRpZXMubGlua01hdGNoVHlwZSwgY2Fz
Y2FkZUxldmVsLCBtYXRjaGVkUHJvcGVydGllcy5zdHlsZVNjb3BlT3JkaW5hbCk7Ci0gICAgfQot
fQotCi0KLXN0YXRpYyBhdXRvJiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKQotewotICAg
IHN3aXRjaCAoY2FzY2FkZUxldmVsKSB7Ci0gICAgY2FzZSBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2Vu
dExldmVsOiByZXR1cm4gbWF0Y2hSZXN1bHQudXNlckFnZW50RGVjbGFyYXRpb25zOwotICAgIGNh
c2UgQ2FzY2FkZUxldmVsOjpVc2VyTGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2VyRGVjbGFy
YXRpb25zOwotICAgIGNhc2UgQ2FzY2FkZUxldmVsOjpBdXRob3JMZXZlbDogcmV0dXJuIG1hdGNo
UmVzdWx0LmF1dGhvckRlY2xhcmF0aW9uczsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIG1hdGNoUmVzdWx0LmF1dGhvckRlY2xhcmF0aW9uczsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE5vcm1hbE1hdGNoZXMoY29u
c3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBi
b29sIGluaGVyaXRlZE9ubHkpCi17Ci0gICAgZm9yIChhdXRvJiBtYXRjaGVkRGVjbGFyYXRpb25z
IDogZGVjbGFyYXRpb25zRm9yQ2FzY2FkZUxldmVsKG1hdGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWwp
KQotICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25zLCBjYXNjYWRlTGV2ZWwsIGZh
bHNlLCBpbmhlcml0ZWRPbmx5KTsKLX0KLQotc3RhdGljIGJvb2wgaGFzSW1wb3J0YW50UHJvcGVy
dGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMmIHByb3BlcnRpZXMpCi17Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMCwgY291bnQgPSBwcm9wZXJ0aWVzLnByb3BlcnR5Q291bnQoKTsgaSA8IGNvdW50
OyArK2kpIHsKLSAgICAgICAgaWYgKHByb3BlcnRpZXMucHJvcGVydHlBdChpKS5pc0ltcG9ydGFu
dCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFu
dE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWwgY2Fz
Y2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkpCi17Ci0gICAgc3RydWN0IEluZGV4QW5kT3Jk
aW5hbCB7Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4OwotICAgICAgICBTdHlsZTo6U2NvcGVPcmRp
bmFsIG9yZGluYWw7Ci0gICAgfTsKLSAgICBWZWN0b3I8SW5kZXhBbmRPcmRpbmFsPiBpbXBvcnRh
bnRNYXRjaGVzOwotICAgIGJvb2wgaGFzTWF0Y2hlc0Zyb21PdGhlclNjb3BlcyA9IGZhbHNlOwot
Ci0gICAgYXV0byYgbWF0Y2hlZERlY2xhcmF0aW9ucyA9IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVM
ZXZlbChtYXRjaFJlc3VsdCwgY2FzY2FkZUxldmVsKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtYXRjaGVkRGVjbGFyYXRpb25zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcyA9IG1hdGNoZWREZWNsYXJhdGlv
bnNbaV07Ci0KLSAgICAgICAgaWYgKCFoYXNJbXBvcnRhbnRQcm9wZXJ0aWVzKCptYXRjaGVkUHJv
cGVydGllcy5wcm9wZXJ0aWVzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlt
cG9ydGFudE1hdGNoZXMuYXBwZW5kKHsgaSwgbWF0Y2hlZFByb3BlcnRpZXMuc3R5bGVTY29wZU9y
ZGluYWwgfSk7Ci0KLSAgICAgICAgaWYgKG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRp
bmFsICE9IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQpCi0gICAgICAgICAgICBoYXNNYXRj
aGVzRnJvbU90aGVyU2NvcGVzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoaW1wb3J0YW50TWF0
Y2hlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChoYXNNYXRjaGVzRnJv
bU90aGVyU2NvcGVzKSB7Ci0gICAgICAgIC8vIEZvciAhaW1wb3J0YW50IHByb3BlcnRpZXMgYSBs
YXRlciBzaGFkb3cgdHJlZSB3aW5zLgotICAgICAgICAvLyBNYXRjaCByZXN1bHRzIGFyZSBzb3J0
ZWQgaW4gcmV2ZXJzZSB0cmVlIGNvbnRleHQgb3JkZXIgc28gdGhpcyBpcyBub3QgbmVlZGVkIGZv
ciBub3JtYWwgcHJvcGVydGllcy4KLSAgICAgICAgc3RkOjpzdGFibGVfc29ydChpbXBvcnRhbnRN
YXRjaGVzLmJlZ2luKCksIGltcG9ydGFudE1hdGNoZXMuZW5kKCksIFtdIChjb25zdCBJbmRleEFu
ZE9yZGluYWwmIGEsIGNvbnN0IEluZGV4QW5kT3JkaW5hbCYgYikgewotICAgICAgICAgICAgcmV0
dXJuIGEub3JkaW5hbCA8IGIub3JkaW5hbDsKLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgZm9y
IChhdXRvJiBtYXRjaCA6IGltcG9ydGFudE1hdGNoZXMpCi0gICAgICAgIGFkZE1hdGNoKG1hdGNo
ZWREZWNsYXJhdGlvbnNbbWF0Y2guaW5kZXhdLCBjYXNjYWRlTGV2ZWwsIHRydWUsIGluaGVyaXRl
ZE9ubHkpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YXBw
bHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIsIEFwcGx5Q2FzY2Fk
ZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQotewotICAgIGZvciAoYXV0byYgcHJvcGVydHkg
OiBtX2RlZmVycmVkUHJvcGVydGllcykKLSAgICAgICAgcHJvcGVydHkuYXBwbHkocmVzb2x2ZXIs
IGFwcGx5U3RhdGUpOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGll
czo6UHJvcGVydHk6OmFwcGx5KFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBBcHBseUNhc2NhZGVk
UHJvcGVydHlTdGF0ZSYgYXBwbHlTdGF0ZSkKLXsKLSAgICBTdGF0ZSYgc3RhdGUgPSByZXNvbHZl
ci5zdGF0ZSgpOwotICAgIHN0YXRlLnNldENhc2NhZGVMZXZlbChsZXZlbCk7Ci0gICAgc3RhdGUu
c2V0U3R5bGVTY29wZU9yZGluYWwoc3R5bGVTY29wZU9yZGluYWwpOwotCi0gICAgaWYgKGNzc1Zh
bHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0XSkgewotICAgICAgICBzdGF0ZS5zZXRB
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICByZXNvbHZlci5hcHBs
eVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0sIGFw
cGx5U3RhdGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hMaW5rXSkgewotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
dHJ1ZSk7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
ZmFsc2UpOwotICAgICAgICByZXNvbHZlci5hcHBseVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoTGlua10sIGFwcGx5U3RhdGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hMaW5rKTsKLSAgICB9Ci0KLSAgICBpZiAoY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFZpc2l0ZWRdKSB7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZShmYWxzZSk7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUodHJ1ZSk7Ci0gICAgICAgIHJlc29sdmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1Nl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSwgYXBwbHlTdGF0ZSwgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaFZpc2l0ZWQpOwotICAgIH0KLQotICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSh0cnVlKTsKLSAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKGZhbHNlKTsKLX0KLQogdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseUNhc2NhZGVkQ3Vz
dG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0
ZSYgc3RhdGUpCiB7CiAgICAgaWYgKHN0YXRlLmFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRh
aW5zKG5hbWUpIHx8ICFzdGF0ZS5jYXNjYWRlLT5jdXN0b21Qcm9wZXJ0aWVzKCkuY29udGFpbnMo
bmFtZSkpCkBAIC0yNDQyLDcgKzIxMTgsNiBAQCBpbmxpbmUgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseUNhc2NhZGVkUHJvcGVydGllc0ltcGwoaW50IGZpcnN0UHJvcGVydHksIGludCBsYQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIEFTU0VSVChwcm9wZXJ0eUlEICE9IENTU1Byb3Bl
cnR5Q3VzdG9tKTsKICAgICAgICAgYXV0byYgcHJvcGVydHkgPSBzdGF0ZS5jYXNjYWRlLT5wcm9w
ZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICAgICAgQVNTRVJUKCFzaG91bGRBcHBseVByb3BlcnR5SW5Q
YXJzZU9yZGVyKHByb3BlcnR5SUQpKTsKIAogICAgICAgICBpZiAoVHJhY2tDeWNsZXMgPT0gQ3Vz
dG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpEaXNhYmxlZCkgewogICAgICAgICAgICAgLy8gSWYg
d2UgZG9uJ3QgaGF2ZSBhbnkgY3VzdG9tIHByb3BlcnRpZXMsIHRoZW4gdGhlcmUgY2FuJ3QgYmUg
YW55IGN5Y2xlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDkwNWQyYTM4ZDYz
Li4zYmZhOWM4ZGZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgor
I2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiUnVsZVNldC5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgpAQCAtOTQs
MTIgKzk1LDYgQEAgZW51bSBjbGFzcyBSdWxlTWF0Y2hpbmdCZWhhdmlvcjogdWludDhfdCB7CiAg
ICAgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMsCiB9OwogCi1lbnVtIGNsYXNzIENhc2NhZGVMZXZl
bDogdWludDhfdCB7Ci0gICAgVXNlckFnZW50TGV2ZWwsCi0gICAgQXV0aG9yTGV2ZWwsCi0gICAg
VXNlckxldmVsCi19OwotCiBzdHJ1Y3QgRWxlbWVudFN0eWxlIHsKICAgICBFbGVtZW50U3R5bGUo
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZW5kZXJTdHlsZSwgc3RkOjp1bmlxdWVfcHRy
PFN0eWxlOjpSZWxhdGlvbnM+IHJlbGF0aW9ucyA9IHsgfSkKICAgICAgICAgOiByZW5kZXJTdHls
ZShXVEZNb3ZlKHJlbmRlclN0eWxlKSkKQEAgLTE1MSw3ICsxNDYsNiBAQCBwdWJsaWM6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRl
clN0eWxlKiwgY29uc3QgU3R5bGVSdWxlS2V5ZnJhbWUqLCBLZXlmcmFtZVZhbHVlJik7CiAgICAg
Ym9vbCBpc0FuaW1hdGlvbk5hbWVWYWxpZChjb25zdCBTdHJpbmcmKTsKIAotcHVibGljOgogICAg
IC8vIFRoZXNlIG1ldGhvZHMgd2lsbCBnaXZlIGJhY2sgdGhlIHNldCBvZiBydWxlcyB0aGF0IG1h
dGNoZWQgZm9yIGEgZ2l2ZW4gZWxlbWVudCAob3IgYSBwc2V1ZG8tZWxlbWVudCkuCiAgICAgZW51
bSBDU1NSdWxlRmlsdGVyIHsKICAgICAgICAgVUFBbmRVc2VyQ1NTUnVsZXMgICA9IDEgPDwgMSwK
QEAgLTE2Myw3ICsxNTcsNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+
PiBzdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW50KiwgdW5zaWduZWQgcnVsZXNUb0lu
Y2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVs
ZT4+IHBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqLCBQc2V1ZG9JZCwg
dW5zaWduZWQgcnVsZXNUb0luY2x1ZGUgPSBBbGxCdXRFbXB0eUNTU1J1bGVzKTsKIAotcHVibGlj
OgogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUq
LCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+KTsKICAgICB2b2lkIGFwcGx5UHJvcGVydHlU
b0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSopOwogCkBAIC0xNzIsNyArMTY1
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiwgZmxvYXQgc2l6ZSk7CiAKLXB1YmxpYzoKICAgICBib29sIHVzZVNWR1pvb21SdWxlcygp
IGNvbnN0OwogICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3Q7CiAKQEAg
LTIwOCw0OCArMjAwLDYgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJDYWNoZWRQcm9wZXJ0aWVz
QWZmZWN0ZWRCeVZpZXdwb3J0VW5pdHMoKTsKIAogICAgIGJvb2wgY3JlYXRlRmlsdGVyT3BlcmF0
aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0
aW9ucyk7Ci0gICAgCi0gICAgY2xhc3MgQ2FzY2FkZWRQcm9wZXJ0aWVzIHsKLSAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAgICAgICBDYXNjYWRlZFByb3Bl
cnRpZXMoVGV4dERpcmVjdGlvbiwgV3JpdGluZ01vZGUpOwotCi0gICAgICAgIHN0cnVjdCBQcm9w
ZXJ0eSB7Ci0gICAgICAgICAgICB2b2lkIGFwcGx5KFN0eWxlUmVzb2x2ZXImLCBBcHBseUNhc2Nh
ZGVkUHJvcGVydHlTdGF0ZSYpOwotCi0gICAgICAgICAgICBDU1NQcm9wZXJ0eUlEIGlkOwotICAg
ICAgICAgICAgQ2FzY2FkZUxldmVsIGxldmVsOwotICAgICAgICAgICAgU3R5bGU6OlNjb3BlT3Jk
aW5hbCBzdHlsZVNjb3BlT3JkaW5hbDsKLSAgICAgICAgICAgIENTU1ZhbHVlKiBjc3NWYWx1ZVsz
XTsKLSAgICAgICAgfTsKLQotICAgICAgICBib29sIGhhc1Byb3BlcnR5KENTU1Byb3BlcnR5SUQp
IGNvbnN0OwotICAgICAgICBQcm9wZXJ0eSYgcHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAg
ICAgICAgdm9pZCBhZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxl
dmVsLCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgYWRkSW1wb3J0
YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0
ZWRPbmx5ID0gZmFsc2UpOwotCi0gICAgICAgIHZvaWQgYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMo
U3R5bGVSZXNvbHZlciYsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KLSAgICAgICAg
SGFzaE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0eT4mIGN1c3RvbVByb3BlcnRpZXMoKSB7IHJldHVy
biBtX2N1c3RvbVByb3BlcnRpZXM7IH0KLSAgICAgICAgYm9vbCBoYXNDdXN0b21Qcm9wZXJ0eShj
b25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICAgICAgUHJvcGVydHkgY3VzdG9tUHJvcGVydHkoY29u
c3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQg
YWRkTWF0Y2goY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaXNJ
bXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSk7Ci0gICAgICAgIHZvaWQgc2V0KENTU1Byb3Bl
cnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBT
dHlsZTo6U2NvcGVPcmRpbmFsKTsKLSAgICAgICAgdm9pZCBzZXREZWZlcnJlZChDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5
bGU6OlNjb3BlT3JkaW5hbCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldFByb3BlcnR5SW50ZXJu
YWwoUHJvcGVydHkmLCBDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRj
aFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCk7Ci0KLSAgICAgICAgUHJv
cGVydHkgbV9wcm9wZXJ0aWVzW251bUNTU1Byb3BlcnRpZXMgKyAyXTsKLSAgICAgICAgc3RkOjpi
aXRzZXQ8bnVtQ1NTUHJvcGVydGllcyArIDI+IG1fcHJvcGVydHlJc1ByZXNlbnQ7Ci0KLSAgICAg
ICAgVmVjdG9yPFByb3BlcnR5LCA4PiBtX2RlZmVycmVkUHJvcGVydGllczsKLSAgICAgICAgSGFz
aE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0eT4gbV9jdXN0b21Qcm9wZXJ0aWVzOwotCi0gICAgICAg
IFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgICAgIFdyaXRpbmdNb2RlIG1fd3JpdGlu
Z01vZGU7Ci0gICAgfTsKIAogICAgIHZvaWQgYXBwbHlDYXNjYWRlZFByb3BlcnRpZXMoaW50IGZp
cnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVydHksIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRl
Jik7CiAgICAgdm9pZCBhcHBseUNhc2NhZGVkQ3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBu
YW1lLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwpAQCAtMjc4LDcgKzIyOCw3IEBAIHBy
aXZhdGU6CiAgICAgdGVtcGxhdGU8Q3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nPgogICAgIGlu
bGluZSB2b2lkIGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbChpbnQgZmlyc3RQcm9wZXJ0eSwg
aW50IGxhc3RQcm9wZXJ0eSwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsKIAotICAgIHZv
aWQgY2FzY2FkZU1hdGNoZXMoQ2FzY2FkZWRQcm9wZXJ0aWVzJiwgY29uc3QgTWF0Y2hSZXN1bHQm
LCBib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpbmhl
cml0ZWRPbmx5KTsKKyAgICB2b2lkIGNhc2NhZGVNYXRjaGVzKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmLCBjb25zdCBNYXRjaFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwg
aW50IGVuZEluZGV4LCBib29sIGluaGVyaXRlZE9ubHkpOwogCiAgICAgRG9jdW1lbnRSdWxlU2V0
cyBtX3J1bGVTZXRzOwogCkBAIC0zNDEsMTEgKzI5MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIFN0
eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVybiBtX3N0
eWxlU2NvcGVPcmRpbmFsOyB9CiAgICAgICAgIHZvaWQgc2V0U3R5bGVTY29wZU9yZGluYWwoU3R5
bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCkgeyBtX3N0eWxlU2NvcGVPcmRpbmFs
ID0gc3R5bGVTY29wZU9yZGluYWw7IH0KIAotICAgICAgICBDYXNjYWRlZFByb3BlcnRpZXMqIGF1
dGhvclJvbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hdXRob3JSb2xsYmFjay5nZXQoKTsgfQot
ICAgICAgICBDYXNjYWRlZFByb3BlcnRpZXMqIHVzZXJSb2xsYmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlclJvbGxiYWNrLmdldCgpOyB9CisgICAgICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUq
IGF1dGhvclJvbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hdXRob3JSb2xsYmFjay5nZXQoKTsg
fQorICAgICAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlKiB1c2VyUm9sbGJhY2soKSBjb25zdCB7
IHJldHVybiBtX3VzZXJSb2xsYmFjay5nZXQoKTsgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBz
ZXRBdXRob3JSb2xsYmFjayhzdGQ6OnVuaXF1ZV9wdHI8Q2FzY2FkZWRQcm9wZXJ0aWVzPiYgcm9s
bGJhY2spIHsgbV9hdXRob3JSb2xsYmFjayA9IFdURk1vdmUocm9sbGJhY2spOyB9Ci0gICAgICAg
IHZvaWQgc2V0VXNlclJvbGxiYWNrKHN0ZDo6dW5pcXVlX3B0cjxDYXNjYWRlZFByb3BlcnRpZXM+
JiByb2xsYmFjaykgeyBtX3VzZXJSb2xsYmFjayA9IFdURk1vdmUocm9sbGJhY2spOyB9CisgICAg
ICAgIHZvaWQgc2V0QXV0aG9yUm9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGU+JiByb2xsYmFjaykgeyBtX2F1dGhvclJvbGxiYWNrID0gV1RGTW92ZShyb2xsYmFj
ayk7IH0KKyAgICAgICAgdm9pZCBzZXRVc2VyUm9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGU+JiByb2xsYmFjaykgeyBtX3VzZXJSb2xsYmFjayA9IFdURk1vdmUo
cm9sbGJhY2spOyB9CiAKICAgICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmls
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckZpbHRlcjsgfQogICAgICAgICAKQEAgLTM1
Nyw4ICszMDcsOCBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3BhcmVu
dFN0eWxlIHsgbnVsbHB0ciB9OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IG1fb3duZWRQYXJlbnRTdHlsZTsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fcm9vdEVs
ZW1lbnRTdHlsZSB7IG51bGxwdHIgfTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhc2NhZGVk
UHJvcGVydGllcz4gbV9hdXRob3JSb2xsYmFjazsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
c2NhZGVkUHJvcGVydGllcz4gbV91c2VyUm9sbGJhY2s7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxTdHlsZTo6UHJvcGVydHlDYXNjYWRlPiBtX2F1dGhvclJvbGxiYWNrOworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U3R5bGU6OlByb3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2s7CiAKICAg
ICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIG1fc2VsZWN0b3JGaWx0ZXIgeyBudWxscHRyIH07
CiAKQEAgLTM4OCwxMCArMzM4LDcgQEAgcHVibGljOgogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKTsgfQogICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
OyB9CiAKLSAgICBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5jYXNjYWRlTGV2ZWwoKTsgfQotICAgIHZvaWQgc2V0Q2FzY2FkZUxldmVsKENhc2NhZGVM
ZXZlbCBsZXZlbCkgeyBtX3N0YXRlLnNldENhc2NhZGVMZXZlbChsZXZlbCk7IH0KLSAgICAKLSAg
ICBDYXNjYWRlZFByb3BlcnRpZXMqIGNhc2NhZGVkUHJvcGVydGllc0ZvclJvbGxiYWNrKGNvbnN0
IE1hdGNoUmVzdWx0Jik7CisgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSogY2FzY2FkZWRQcm9w
ZXJ0aWVzRm9yUm9sbGJhY2soY29uc3QgTWF0Y2hSZXN1bHQmKTsKIAogICAgIENTU1RvU3R5bGVN
YXAqIHN0eWxlTWFwKCkgeyByZXR1cm4gJm1fc3R5bGVNYXA7IH0KICAgICBJbnNwZWN0b3JDU1NP
TVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JD
U1NPTVdyYXBwZXJzOyB9CkBAIC00MDcsMTEgKzM1NCwxMSBAQCBwdWJsaWM6CiAKICAgICBib29s
IGFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1dG9zaXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50Jik7CiAKKyAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFs
dWUqLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYsIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01h
dGNoTWFzayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKwogcHJpdmF0ZToKICAg
ICB2b2lkIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwogCi0gICAgdm9pZCBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUm
LCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
RGVmYXVsdCk7Ci0KICAgICB2b2lkIGFwcGx5U1ZHUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NT
VmFsdWUqKTsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlTWF0Y2hlZFByb3BlcnRpZXNI
YXNoKGNvbnN0IE1hdGNoUmVzdWx0Jik7CkBAIC00NzYsNyArNDIzLDcgQEAgcHJpdmF0ZToKIC8v
IHByb3BlcnRpZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgogc3RydWN0IEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlIHsKICAgICBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyOwotICAgIFN0eWxl
UmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllcyogY2FzY2FkZTsKKyAgICBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlKiBjYXNjYWRlOwogICAgIGNvbnN0IE1hdGNoUmVzdWx0KiBtYXRjaFJlc3VsdDsK
ICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07CiAg
ICAgSGFzaFNldDxTdHJpbmc+IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzID0geyB9OwpAQCAtNDg0
LDcgKzQzMSw2IEBAIHN0cnVjdCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSB7CiAgICAgSGFz
aFNldDxTdHJpbmc+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tID0geyB9OwogfTsKIAotCiBp
bmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNTZWxlY3RvckZvckF0dHJpYnV0ZShjb25zdCBF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nICZhdHRyaWJ1dGVOYW1lKSBjb25zdAog
ewogICAgIEFTU0VSVCghYXR0cmlidXRlTmFtZS5pc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmFiMzc3NGU5ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvUHJvcGVydHlDYXNjYWRlLmNwcApAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKKworI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0
eWxlIHsKKworc3RhdGljIGlubGluZSBib29sIHNob3VsZEFwcGx5UHJvcGVydHlJblBhcnNlT3Jk
ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQoreworICAgIHN3aXRjaCAocHJvcGVydHlJRCkg
eworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcDoKKyAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZENsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tn
cm91bmRPcmlnaW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW46CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kU2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2U6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZVNsaWNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNvdXJjZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQ6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckltYWdlUmVwZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdp
ZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJveFNoYWRvdzoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b246CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uTGluZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb25TdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERl
Y29yYXRpb25Db2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25Ta2lwOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lUG9zaXRpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHRVbmRlcmxpbmVPZmZzZXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNv
cmF0aW9uVGhpY2tuZXNzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1wc2V1ZG8tNC8jbWFya2Vy
LXBzZXVkbyAoRWRpdG9yJ3MgRHJhZnQsIDI1IEp1bHkgMjAxNykKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc1ZhbGlkTWFya2VyU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQoreworICAgIHN3
aXRjaCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUZvbnRGYW1pbHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRGZWF0dXJlU2V0dGluZ3M6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250
U3RyZXRjaDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0eWxlOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlGb250U3ludGhlc2lzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEFsdGVy
bmF0ZXM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwczoKKyAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFZhcmlhbnRFYXN0QXNpYW46CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50TGlnYXR1cmVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudE51bWVyaWM6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50UG9zaXRpb246CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eUZvbnRXZWlnaHQ6CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udE9wdGljYWxTaXppbmc6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRW
YXJpYXRpb25TZXR0aW5nczoKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpCit7CisgICAgc3dpdGNoIChpZCkgeworICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0
YWNobWVudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXA6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZEltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblg6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRSZXBlYXQ6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRTaXplOgorICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udDoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKKyAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFNpemU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlGb250V2VpZ2h0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlMaW5lSGVpZ2h0OgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlPcGFjaXR5OgorICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lOgorICAgIGNh
c2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVP
ZmZzZXQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZToKKyAgICBjYXNlIENTU1By
b3BlcnR5T3V0bGluZVdpZHRoOgorICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmlsaXR5OgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVj
b3JhdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKKyAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVBhaW50T3JkZXI6CisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVqb2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJv
a2VMaW5lY2FwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VDb2xvcjoKKyAgICBjYXNlIENT
U1Byb3BlcnR5U3Ryb2tlV2lkdGg6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwor
UHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24s
IFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKQorICAgIDogbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQor
ICAgICwgbV93cml0aW5nTW9kZSh3cml0aW5nTW9kZSkKK3sKK30KKworUHJvcGVydHlDYXNjYWRl
Ojp+UHJvcGVydHlDYXNjYWRlKCkgPSBkZWZhdWx0OworCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6
c2V0UHJvcGVydHlJbnRlcm5hbChQcm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlJiBjc3NWYWx1ZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVs
IGNhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCkKK3sK
KyAgICBBU1NFUlQobGlua01hdGNoVHlwZSA8PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsKTsK
KyAgICBwcm9wZXJ0eS5pZCA9IGlkOworICAgIHByb3BlcnR5LmxldmVsID0gY2FzY2FkZUxldmVs
OworICAgIHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFsID0gc3R5bGVTY29wZU9yZGluYWw7Cisg
ICAgaWYgKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCkgeworICAg
ICAgICBwcm9wZXJ0eS5jc3NWYWx1ZVswXSA9ICZjc3NWYWx1ZTsKKyAgICAgICAgcHJvcGVydHku
Y3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmtdID0gJmNzc1ZhbHVlOworICAgICAg
ICBwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0gPSAmY3Nz
VmFsdWU7CisgICAgfSBlbHNlCisgICAgICAgIHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaFR5
cGVdID0gJmNzc1ZhbHVlOworfQorCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6c2V0KENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlJiBjc3NWYWx1ZSwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgQ2Fz
Y2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3Jk
aW5hbCkKK3sKKyAgICBpZiAoQ1NTUHJvcGVydHk6OmlzRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShp
ZCkpCisgICAgICAgIGlkID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25Bd2FyZVByb3Bl
cnR5KGlkLCBtX2RpcmVjdGlvbiwgbV93cml0aW5nTW9kZSk7CisKKyAgICBBU1NFUlQoIXNob3Vs
ZEFwcGx5UHJvcGVydHlJblBhcnNlT3JkZXIoaWQpKTsKKworICAgIGF1dG8mIHByb3BlcnR5ID0g
bV9wcm9wZXJ0aWVzW2lkXTsKKyAgICBBU1NFUlQoaWQgPCBtX3Byb3BlcnR5SXNQcmVzZW50LnNp
emUoKSk7CisgICAgaWYgKGlkID09IENTU1Byb3BlcnR5Q3VzdG9tKSB7CisgICAgICAgIG1fcHJv
cGVydHlJc1ByZXNlbnQuc2V0KGlkKTsKKyAgICAgICAgY29uc3QgYXV0byYgY3VzdG9tVmFsdWUg
PSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPihjc3NWYWx1ZSk7CisgICAgICAgIGJv
b2wgaGFzVmFsdWUgPSBjdXN0b21Qcm9wZXJ0aWVzKCkuY29udGFpbnMoY3VzdG9tVmFsdWUubmFt
ZSgpKTsKKyAgICAgICAgaWYgKCFoYXNWYWx1ZSkgeworICAgICAgICAgICAgUHJvcGVydHkgcHJv
cGVydHk7CisgICAgICAgICAgICBwcm9wZXJ0eS5pZCA9IGlkOworICAgICAgICAgICAgbWVtc2V0
KHByb3BlcnR5LmNzc1ZhbHVlLCAwLCBzaXplb2YocHJvcGVydHkuY3NzVmFsdWUpKTsKKyAgICAg
ICAgICAgIHNldFByb3BlcnR5SW50ZXJuYWwocHJvcGVydHksIGlkLCBjc3NWYWx1ZSwgbGlua01h
dGNoVHlwZSwgY2FzY2FkZUxldmVsLCBzdHlsZVNjb3BlT3JkaW5hbCk7CisgICAgICAgICAgICBj
dXN0b21Qcm9wZXJ0aWVzKCkuc2V0KGN1c3RvbVZhbHVlLm5hbWUoKSwgcHJvcGVydHkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHJvcGVydHkgcHJvcGVydHkgPSBjdXN0b21Qcm9w
ZXJ0aWVzKCkuZ2V0KGN1c3RvbVZhbHVlLm5hbWUoKSk7CisgICAgICAgICAgICBzZXRQcm9wZXJ0
eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUsIGNhc2NhZGVM
ZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOworICAgICAgICAgICAgY3VzdG9tUHJvcGVydGllcygp
LnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Byb3BlcnR5SXNQcmVzZW50W2lkXSkKKyAgICAg
ICAgbWVtc2V0KHByb3BlcnR5LmNzc1ZhbHVlLCAwLCBzaXplb2YocHJvcGVydHkuY3NzVmFsdWUp
KTsKKyAgICBtX3Byb3BlcnR5SXNQcmVzZW50LnNldChpZCk7CisgICAgc2V0UHJvcGVydHlJbnRl
cm5hbChwcm9wZXJ0eSwgaWQsIGNzc1ZhbHVlLCBsaW5rTWF0Y2hUeXBlLCBjYXNjYWRlTGV2ZWws
IHN0eWxlU2NvcGVPcmRpbmFsKTsKK30KKwordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldERlZmVy
cmVkKENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiBjc3NWYWx1ZSwgdW5zaWduZWQgbGlua01h
dGNoVHlwZSwgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgU3R5bGU6OlNjb3BlT3JkaW5hbCBz
dHlsZVNjb3BlT3JkaW5hbCkKK3sKKyAgICBBU1NFUlQoIUNTU1Byb3BlcnR5Ojppc0RpcmVjdGlv
bkF3YXJlUHJvcGVydHkoaWQpKTsKKyAgICBBU1NFUlQoc2hvdWxkQXBwbHlQcm9wZXJ0eUluUGFy
c2VPcmRlcihpZCkpOworCisgICAgUHJvcGVydHkgcHJvcGVydHk7CisgICAgbWVtc2V0KHByb3Bl
cnR5LmNzc1ZhbHVlLCAwLCBzaXplb2YocHJvcGVydHkuY3NzVmFsdWUpKTsKKyAgICBzZXRQcm9w
ZXJ0eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUsIGNhc2Nh
ZGVMZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOworICAgIG1fZGVmZXJyZWRQcm9wZXJ0aWVzLmFw
cGVuZChwcm9wZXJ0eSk7Cit9CisKKwordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFkZE1hdGNoKGNv
bnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiBtYXRjaGVkUHJvcGVydGllcywgQ2FzY2FkZUxldmVsIGNh
c2NhZGVMZXZlbCwgYm9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KQoreworICAg
IGF1dG8mIHN0eWxlUHJvcGVydGllcyA9ICptYXRjaGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzOwor
ICAgIGF1dG8gcHJvcGVydHlXaGl0ZWxpc3RUeXBlID0gc3RhdGljX2Nhc3Q8UHJvcGVydHlXaGl0
ZWxpc3RUeXBlPihtYXRjaGVkUHJvcGVydGllcy53aGl0ZWxpc3RUeXBlKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDAsIGNvdW50ID0gc3R5bGVQcm9wZXJ0aWVzLnByb3BlcnR5Q291bnQoKTsg
aSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBjdXJyZW50ID0gc3R5bGVQcm9wZXJ0aWVz
LnByb3BlcnR5QXQoaSk7CisgICAgICAgIGlmIChpc0ltcG9ydGFudCAhPSBjdXJyZW50LmlzSW1w
b3J0YW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGluaGVyaXRlZE9u
bHkgJiYgIWN1cnJlbnQuaXNJbmhlcml0ZWQoKSkgeworICAgICAgICAgICAgLy8gSW5oZXJpdGVk
IG9ubHkgbW9kZSBpcyB1c2VkIGFmdGVyIG1hdGNoZWQgcHJvcGVydGllcyBjYWNoZSBoaXQuCisg
ICAgICAgICAgICAvLyBBIG1hdGNoIHdpdGggYSB2YWx1ZSB0aGF0IGlzIGV4cGxpY2l0bHkgaW5o
ZXJpdGVkIHNob3VsZCBuZXZlciBoYXZlIGJlZW4gY2FjaGVkLgorICAgICAgICAgICAgQVNTRVJU
KCFjdXJyZW50LnZhbHVlKCktPmlzSW5oZXJpdGVkVmFsdWUoKSk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjdXJy
ZW50LmlkKCk7CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgICAgIGlmIChwcm9wZXJ0
eVdoaXRlbGlzdFR5cGUgPT0gUHJvcGVydHlXaGl0ZWxpc3RDdWUgJiYgIWlzVmFsaWRDdWVTdHls
ZVByb3BlcnR5KHByb3BlcnR5SUQpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAg
ICAgICAgaWYgKHByb3BlcnR5V2hpdGVsaXN0VHlwZSA9PSBQcm9wZXJ0eVdoaXRlbGlzdE1hcmtl
ciAmJiAhaXNWYWxpZE1hcmtlclN0eWxlUHJvcGVydHkocHJvcGVydHlJRCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAoc2hvdWxkQXBwbHlQcm9wZXJ0eUluUGFyc2VPcmRl
cihwcm9wZXJ0eUlEKSkKKyAgICAgICAgICAgIHNldERlZmVycmVkKHByb3BlcnR5SUQsICpjdXJy
ZW50LnZhbHVlKCksIG1hdGNoZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGUsIGNhc2NhZGVMZXZl
bCwgbWF0Y2hlZFByb3BlcnRpZXMuc3R5bGVTY29wZU9yZGluYWwpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzZXQocHJvcGVydHlJRCwgKmN1cnJlbnQudmFsdWUoKSwgbWF0Y2hlZFByb3Bl
cnRpZXMubGlua01hdGNoVHlwZSwgY2FzY2FkZUxldmVsLCBtYXRjaGVkUHJvcGVydGllcy5zdHls
ZVNjb3BlT3JkaW5hbCk7CisgICAgfQorfQorCitzdGF0aWMgYXV0byYgZGVjbGFyYXRpb25zRm9y
Q2FzY2FkZUxldmVsKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVs
IGNhc2NhZGVMZXZlbCkKK3sKKyAgICBzd2l0Y2ggKGNhc2NhZGVMZXZlbCkgeworICAgIGNhc2Ug
Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbDogcmV0dXJuIG1hdGNoUmVzdWx0LnVzZXJBZ2Vu
dERlY2xhcmF0aW9uczsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6VXNlckxldmVsOiByZXR1cm4g
bWF0Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9uczsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0
aG9yTGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC5hdXRob3JEZWNsYXJhdGlvbnM7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYXRjaFJlc3VsdC5hdXRob3JE
ZWNsYXJhdGlvbnM7Cit9CisKK3ZvaWQgUHJvcGVydHlDYXNjYWRlOjphZGROb3JtYWxNYXRjaGVz
KGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZl
bCwgYm9vbCBpbmhlcml0ZWRPbmx5KQoreworICAgIGZvciAoYXV0byYgbWF0Y2hlZERlY2xhcmF0
aW9ucyA6IGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChtYXRjaFJlc3VsdCwgY2FzY2FkZUxl
dmVsKSkKKyAgICAgICAgYWRkTWF0Y2gobWF0Y2hlZERlY2xhcmF0aW9ucywgY2FzY2FkZUxldmVs
LCBmYWxzZSwgaW5oZXJpdGVkT25seSk7Cit9CisKK3N0YXRpYyBib29sIGhhc0ltcG9ydGFudFBy
b3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDAsIGNvdW50ID0gcHJvcGVydGllcy5wcm9wZXJ0eUNvdW50KCk7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgIGlmIChwcm9wZXJ0aWVzLnByb3BlcnR5QXQoaSkuaXNJbXBv
cnRhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUHJvcGVydHlDYXNjYWRlOjphZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0
IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgYm9v
bCBpbmhlcml0ZWRPbmx5KQoreworICAgIHN0cnVjdCBJbmRleEFuZE9yZGluYWwgeworICAgICAg
ICB1bnNpZ25lZCBpbmRleDsKKyAgICAgICAgU3R5bGU6OlNjb3BlT3JkaW5hbCBvcmRpbmFsOwor
ICAgIH07CisgICAgVmVjdG9yPEluZGV4QW5kT3JkaW5hbD4gaW1wb3J0YW50TWF0Y2hlczsKKyAg
ICBib29sIGhhc01hdGNoZXNGcm9tT3RoZXJTY29wZXMgPSBmYWxzZTsKKworICAgIGF1dG8mIG1h
dGNoZWREZWNsYXJhdGlvbnMgPSBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1
bHQsIGNhc2NhZGVMZXZlbCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hl
ZERlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVy
dGllcyYgbWF0Y2hlZFByb3BlcnRpZXMgPSBtYXRjaGVkRGVjbGFyYXRpb25zW2ldOworCisgICAg
ICAgIGlmICghaGFzSW1wb3J0YW50UHJvcGVydGllcygqbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVy
dGllcykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpbXBvcnRhbnRNYXRjaGVz
LmFwcGVuZCh7IGksIG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRpbmFsIH0pOworCisg
ICAgICAgIGlmIChtYXRjaGVkUHJvcGVydGllcy5zdHlsZVNjb3BlT3JkaW5hbCAhPSBTdHlsZTo6
U2NvcGVPcmRpbmFsOjpFbGVtZW50KQorICAgICAgICAgICAgaGFzTWF0Y2hlc0Zyb21PdGhlclNj
b3BlcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGltcG9ydGFudE1hdGNoZXMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaGFzTWF0Y2hlc0Zyb21PdGhlclNjb3Blcykg
eworICAgICAgICAvLyBGb3IgIWltcG9ydGFudCBwcm9wZXJ0aWVzIGEgbGF0ZXIgc2hhZG93IHRy
ZWUgd2lucy4KKyAgICAgICAgLy8gTWF0Y2ggcmVzdWx0cyBhcmUgc29ydGVkIGluIHJldmVyc2Ug
dHJlZSBjb250ZXh0IG9yZGVyIHNvIHRoaXMgaXMgbm90IG5lZWRlZCBmb3Igbm9ybWFsIHByb3Bl
cnRpZXMuCisgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoaW1wb3J0YW50TWF0Y2hlcy5iZWdpbigp
LCBpbXBvcnRhbnRNYXRjaGVzLmVuZCgpLCBbXSAoY29uc3QgSW5kZXhBbmRPcmRpbmFsJiBhLCBj
b25zdCBJbmRleEFuZE9yZGluYWwmIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhLm9yZGluYWwg
PCBiLm9yZGluYWw7CisgICAgICAgIH0pOworICAgIH0KKworICAgIGZvciAoYXV0byYgbWF0Y2gg
OiBpbXBvcnRhbnRNYXRjaGVzKQorICAgICAgICBhZGRNYXRjaChtYXRjaGVkRGVjbGFyYXRpb25z
W21hdGNoLmluZGV4XSwgY2FzY2FkZUxldmVsLCB0cnVlLCBpbmhlcml0ZWRPbmx5KTsKK30KKwor
dm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKFN0eWxlUmVzb2x2
ZXImIHJlc29sdmVyLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYgYXBwbHlTdGF0ZSkKK3sK
KyAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogbV9kZWZlcnJlZFByb3BlcnRpZXMpCisgICAgICAg
IHByb3BlcnR5LmFwcGx5KHJlc29sdmVyLCBhcHBseVN0YXRlKTsKK30KKwordm9pZCBQcm9wZXJ0
eUNhc2NhZGU6OlByb3BlcnR5OjphcHBseShTdHlsZVJlc29sdmVyJiByZXNvbHZlciwgQXBwbHlD
YXNjYWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCit7CisgICAgU3R5bGVSZXNvbHZlcjo6
U3RhdGUmIHN0YXRlID0gcmVzb2x2ZXIuc3RhdGUoKTsKKyAgICBzdGF0ZS5zZXRDYXNjYWRlTGV2
ZWwobGV2ZWwpOworICAgIHN0YXRlLnNldFN0eWxlU2NvcGVPcmRpbmFsKHN0eWxlU2NvcGVPcmRp
bmFsKTsKKworICAgIGlmIChjc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0p
IHsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwor
ICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsK
KyAgICAgICAgcmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaERlZmF1bHRdLCBhcHBseVN0YXRlLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVm
YXVsdCk7CisgICAgfQorCisgICAgaWYgKHN0YXRlLnN0eWxlKCktPmluc2lkZUxpbmsoKSA9PSBJ
bnNpZGVMaW5rOjpOb3RJbnNpZGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjc3NWYWx1
ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlua10pIHsKKyAgICAgICAgc3RhdGUuc2V0QXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOworICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKKyAgICAgICAgcmVzb2x2ZXIuYXBwbHlQcm9w
ZXJ0eShpZCwgY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmtdLCBhcHBseVN0YXRl
LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAgfQorCisgICAgaWYgKGNzc1ZhbHVl
W1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSkgeworICAgICAgICBzdGF0ZS5zZXRBcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoZmFsc2UpOworICAgICAgICBzdGF0ZS5zZXRBcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOworICAgICAgICByZXNvbHZlci5hcHBseVBy
b3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0sIGFwcGx5
U3RhdGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsKKyAgICB9CisKKyAgICBzdGF0
ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgc3RhdGUuc2V0QXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7Cit9CisKK30KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjAxMDJhZDI0NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCisjaW5jbHVk
ZSA8Yml0c2V0PgorI2luY2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBTdHlsZVJlc29sdmVyOworc3RydWN0IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0
YXRlOworCitlbnVtIGNsYXNzIENhc2NhZGVMZXZlbCA6IHVpbnQ4X3QgeworICAgIFVzZXJBZ2Vu
dExldmVsLAorICAgIFVzZXJMZXZlbCwKKyAgICBBdXRob3JMZXZlbAorfTsKKworbmFtZXNwYWNl
IFN0eWxlIHsKKworY2xhc3MgUHJvcGVydHlDYXNjYWRlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eUNhc2NhZGUoVGV4dERpcmVjdGlvbiwgV3Jp
dGluZ01vZGUpOworICAgIH5Qcm9wZXJ0eUNhc2NhZGUoKTsKKworICAgIHN0cnVjdCBQcm9wZXJ0
eSB7CisgICAgICAgIHZvaWQgYXBwbHkoU3R5bGVSZXNvbHZlciYsIEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlJik7CisKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBpZDsKKyAgICAgICAgQ2FzY2Fk
ZUxldmVsIGxldmVsOworICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRp
bmFsOworICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWVbM107CisgICAgfTsKKworICAgIGJvb2wg
aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Q7CisgICAgUHJvcGVydHkmIHByb3BlcnR5
KENTU1Byb3BlcnR5SUQpOworCisgICAgdm9pZCBhZGROb3JtYWxNYXRjaGVzKGNvbnN0IE1hdGNo
UmVzdWx0JiwgQ2FzY2FkZUxldmVsLCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CisgICAg
dm9pZCBhZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxldmVs
LCBib29sIGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7CisKKyAgICB2b2lkIGFwcGx5RGVmZXJyZWRQ
cm9wZXJ0aWVzKFN0eWxlUmVzb2x2ZXImLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwor
CisgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0eT4mIGN1c3RvbVByb3BlcnRpZXMoKSB7
IHJldHVybiBtX2N1c3RvbVByb3BlcnRpZXM7IH0KKyAgICBib29sIGhhc0N1c3RvbVByb3BlcnR5
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIFByb3BlcnR5IGN1c3RvbVByb3BlcnR5KGNvbnN0
IFN0cmluZyYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgYWRkTWF0Y2goY29uc3QgTWF0
Y2hlZFByb3BlcnRpZXMmLCBDYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5o
ZXJpdGVkT25seSk7CisgICAgdm9pZCBzZXQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNp
Z25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOwor
ICAgIHZvaWQgc2V0RGVmZXJyZWQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBs
aW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOworICAgIHN0
YXRpYyB2b2lkIHNldFByb3BlcnR5SW50ZXJuYWwoUHJvcGVydHkmLCBDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSYsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCwgU3R5bGU6OlNj
b3BlT3JkaW5hbCk7CisKKyAgICBQcm9wZXJ0eSBtX3Byb3BlcnRpZXNbbnVtQ1NTUHJvcGVydGll
cyArIDJdOworICAgIHN0ZDo6Yml0c2V0PG51bUNTU1Byb3BlcnRpZXMgKyAyPiBtX3Byb3BlcnR5
SXNQcmVzZW50OworCisgICAgVmVjdG9yPFByb3BlcnR5LCA4PiBtX2RlZmVycmVkUHJvcGVydGll
czsKKyAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFByb3BlcnR5PiBtX2N1c3RvbVByb3BlcnRpZXM7
CisKKyAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOworICAgIFdyaXRpbmdNb2RlIG1fd3Jp
dGluZ01vZGU7Cit9OworCitpbmxpbmUgYm9vbCBQcm9wZXJ0eUNhc2NhZGU6Omhhc1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlkIDwgbV9wcm9wZXJ0eUlz
UHJlc2VudC5zaXplKCkpOworICAgIHJldHVybiBtX3Byb3BlcnR5SXNQcmVzZW50W2lkXTsKK30K
KworaW5saW5lIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHkmIFByb3BlcnR5Q2FzY2FkZTo6cHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0aWVzW2lkXTsK
K30KKworaW5saW5lIGJvb2wgUHJvcGVydHlDYXNjYWRlOjpoYXNDdXN0b21Qcm9wZXJ0eShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY3VzdG9tUHJvcGVydGllcy5j
b250YWlucyhuYW1lKTsKK30KKworaW5saW5lIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHkgUHJv
cGVydHlDYXNjYWRlOjpjdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY3VzdG9tUHJvcGVydGllcy5nZXQobmFtZSk7Cit9CisKK30KK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381808</attachid>
            <date>2019-10-24 07:43:42 -0700</date>
            <delta_ts>2019-10-24 09:07:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>propertycascade-separate-2.patch</filename>
            <type>text/plain</type>
            <size>57160</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkMzVlMGMxOGZkNS4uMDFmMTViYTljODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OSBAQAorMjAxOS0xMC0yNCAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTW92ZSBwcm9wZXJ0eSBjYXNjYWRlIG91dCBvZiBTdHlsZVJlc29sdmVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMzNjEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgU3R5
bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzIC0+IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUg
YW5kIG1vdmUgaXQgaW50byBhIGZpbGUgb2YgaXRzIG93bi4KKworICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZUZvcktleWZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseU1h
dGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNhc2Nh
ZGVkUHJvcGVydGllc0ZvclJvbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OmFwcGx5UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBw
bHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEFwcGx5
UHJvcGVydHlJblBhcnNlT3JkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxp
ZE1hcmtlclN0eWxlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxp
ZEN1ZVN0eWxlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpDYXNjYWRlZFByb3BlcnRpZXMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpoYXNQ
cm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpDYXNjYWRlZFByb3BlcnRpZXM6OnByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6aGFzQ3VzdG9tUHJvcGVydHkg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2Fk
ZWRQcm9wZXJ0aWVzOjpjdXN0b21Qcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OnNldFByb3BlcnR5SW50
ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2Fk
ZWRQcm9wZXJ0aWVzOjpzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpzZXREZWZlcnJlZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZE1hdGNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3Bl
cnRpZXM6OmFkZE5vcm1hbE1hdGNoZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aGFz
SW1wb3J0YW50UHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OmFkZEltcG9ydGFudE1hdGNoZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjph
cHBseURlZmVycmVkUHJvcGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OlByb3BlcnR5OjphcHBseSk6IERlbGV0ZWQu
CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjphdXRob3JSb2xsYmFjayBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6dXNlclJvbGxiYWNrIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBdXRob3JSb2xsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VXNlclJvbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6Y3VzdG9tUHJv
cGVydGllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjYXNj
YWRlTGV2ZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6c2V0Q2FzY2FkZUxldmVsKTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNh
c2NhZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpzaG91bGRBcHBseVBy
b3BlcnR5SW5QYXJzZU9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjppc1ZhbGlkTWFy
a2VyU3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6aXNWYWxpZEN1ZVN0
eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6
UHJvcGVydHlDYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU6OnNldFByb3BlcnR5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU6OnNldERlZmVycmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGU6OmFkZE1hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpkZWNsYXJhdGlvbnNGb3JD
YXNjYWRlTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6
YWRkTm9ybWFsTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6aGFzSW1wb3J0YW50
UHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjph
ZGRJbXBvcnRhbnRNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGU6OmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5OjphcHBseSk6CisgICAgICAgICogc3R5bGUvUHJv
cGVydHlDYXNjYWRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5
Q2FzY2FkZTo6Y3VzdG9tUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJv
cGVydHlDYXNjYWRlOjpoYXNQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6UHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
UHJvcGVydHlDYXNjYWRlOjpoYXNDdXN0b21Qcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpjdXN0b21Qcm9wZXJ0eSBjb25zdCk6CisKIDIw
MTktMTAtMjQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgTWF0Y2hSZXN1bHQgYW5kIHJlbGF0ZWQgdHlwZXMgb3V0IG9mIFN0eWxlUmVzb2x2ZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggNmI2MjIxMWQ4MzIuLmVkYjYzMGRiMmNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMjMzNyw2ICsyMzM3LDcgQEAgc3R5bGUvQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmNw
cAogc3R5bGUvQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCiBzdHlsZS9JZENoYW5nZUludmFs
aWRhdGlvbi5jcHAKIHN0eWxlL0lubGluZVRleHRCb3hTdHlsZS5jcHAKK3N0eWxlL1Byb3BlcnR5
Q2FzY2FkZS5jcHAKIHN0eWxlL1N0eWxlQ2hhbmdlLmNwcAogc3R5bGUvU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5jcHAKIHN0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMTI5YTIwZmQzOWEu
LjM5Y2ViZWMzMzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC00ODMyLDYgKzQ4MzIsNyBAQAogCQlFNEE4MTREQTFDNzBFMTBE
MDBCRjg1QUMgLyogQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEE4MTREOTFDNzBFMTBEMDBCRjg1QUMg
LyogQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmggKi87IH07CiAJCUU0QTgxNEUwMUM3MzM4
RUIwMEJGODVBQyAvKiBJZENoYW5nZUludmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBODE0REYxQzczMzhFQjAwQkY4NUFDIC8qIElk
Q2hhbmdlSW52YWxpZGF0aW9uLmggKi87IH07CiAJCUU0QThEMjE2MjI1NzhEQjcwMEE4NDYzQyAv
KiBFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTRBOEQyMTQyMjU3OERBMDAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTRBQkFCRTQyMzYxQTMy
OTAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBQkFCRTIyMzYxQTMyOTAwRkE0MzQ1IC8qIFByb3BlcnR5
Q2FzY2FkZS5oICovOyB9OwogCQlFNEFFN0MxNjE3RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEFFN0MxNTE3RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0ZXJhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRBRTdDMUExN0QyMzIzNTAw
MDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFN0MxOTE3RDIzMjM1MDAwOUZCMzEgLyogRWxl
bWVudEFuY2VzdG9ySXRlcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlFNEFGQ0ZBNTBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkNGQTQw
REFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLzsgfTsKQEAgLTE1MTQxLDYgKzE1MTQy
LDggQEAKIAkJRTRBODE0REYxQzczMzhFQjAwQkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkQ2hhbmdlSW52YWxpZGF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QThEMjE0MjI1NzhEQTAwMEE4NDYz
QyAvKiBFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVu
dFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEE4RDIxNTIyNTc4REEw
MDBBODQ2M0MgLyogRXZlbnRSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXZlbnRSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
NEFCQUJFMjIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFNEFCQUJFNTIzNjFBMzQyMDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0QUU3QzE1MTdEMUJCOTUwMDA5RkIzMSAvKiBFbGVtZW50SXRl
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUU3QzE5MTdEMjMyMzUwMDA5RkIz
MSAvKiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNEFGQ0ZBNDBEQUYyOUEzMDBGNUY1NUMgLyogVW5pdEJlemllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbml0QmV6aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNjg3Miw2ICsyNjg3NSw4IEBACiAJCQkJRTRBODE0REYxQzczMzhFQjAw
QkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmggKi8sCiAJCQkJMUMwMTA2RkUxOTI1OTRE
RjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5jcHAgKi8sCiAJCQkJMUMwMTA2RkYxOTI1
OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5oICovLAorCQkJCUU0QUJBQkU1MjM2
MUEzNDIwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuY3BwICovLAorCQkJCUU0QUJBQkUyMjM2
MUEzMjkwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuaCAqLywKIAkJCQlFNDAxRTBBNTFDM0Mw
Q0Y3MDBGMzREMTAgLyogU3R5bGVDaGFuZ2UuY3BwICovLAogCQkJCUU0MDFFMEEzMUMzQzBCODMw
MEYzNEQxMCAvKiBTdHlsZUNoYW5nZS5oICovLAogCQkJCUU0RDU4RUI2MTdCNEVEODkwMENCRENB
OCAvKiBTdHlsZUZvbnRTaXplRnVuY3Rpb25zLmNwcCAqLywKQEAgLTI5MDQ1LDYgKzI5MDUwLDcg
QEAKIAkJCQk3NTlDQjgzNzE5MkRBOTE5MDAxMkJDNjQgLyogQ29udHJvbFN0YXRlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkQzMTYwMjkxMkIwMjY3NjAwQzFBMzU5IC8qIENvbnZvbHZlck5vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUQ4QjYxNTJGMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUu
aCBpbiBIZWFkZXJzICovLAorCQkJCUU0QUJBQkU0MjM2MUEzMjkwMEZBNDM0NSAvKiBQcm9wZXJ0
eUNhc2NhZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNDI0Qzk0MTY0QjUyQzgwMEYzMkQ0MCAv
KiBDb29raWVKYXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBNTY5OTcwMjA4NkM2MTkwMDBFMDQz
MyAvKiBDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzNEMDIxMkQxMzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDE1NDM0YTBjZTcxLi5mZTZi
NmQ5OGU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMzczLDggKzM3
Myw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVG
b3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSoKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
Ym90aGVyIHdpdGggIWltcG9ydGFudC4gU2luY2UgdGhlcmUgaXMgb25seSBldmVyIG9uZQogICAg
IC8vIGRlY2wsIHRoZXJlJ3Mgbm90aGluZyB0byBvdmVycmlkZS4gU28ganVzdCBhZGQgdGhlIGZp
cnN0IHByb3BlcnRpZXMuCi0gICAgQ2FzY2FkZWRQcm9wZXJ0aWVzIGNhc2NhZGUoZGlyZWN0aW9u
LCB3cml0aW5nTW9kZSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKHJlc3VsdCwgQ2Fz
Y2FkZUxldmVsOjpBdXRob3JMZXZlbCk7CisgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBjYXNj
YWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOworICAgIGNhc2NhZGUuYWRkTm9ybWFsTWF0Y2hl
cyhyZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OkF1dGhvcik7CiAKICAgICBBcHBseUNhc2Nh
ZGVkUHJvcGVydHlTdGF0ZSBhcHBseVN0YXRlIHsgdGhpcywgJmNhc2NhZGUsICZyZXN1bHQgfTsK
ICAgICBhcHBseUNhc2NhZGVkUHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFBy
aW9yaXR5UHJvcGVydHksIGFwcGx5U3RhdGUpOwpAQCAtNTc5LDggKzU3OSw4IEBAIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKGludCBwYWdl
SW5kZXgpCiAgICAgV3JpdGluZ01vZGUgd3JpdGluZ01vZGU7CiAgICAgZXh0cmFjdERpcmVjdGlv
bkFuZFdyaXRpbmdNb2RlKCptX3N0YXRlLnN0eWxlKCksIHJlc3VsdCwgZGlyZWN0aW9uLCB3cml0
aW5nTW9kZSk7CiAKLSAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShkaXJlY3Rpb24sIHdy
aXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMocmVzdWx0LCBDYXNjYWRl
TGV2ZWw6OkF1dGhvckxldmVsKTsKKyAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUo
ZGlyZWN0aW9uLCB3cml0aW5nTW9kZSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKHJl
c3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yKTsKIAogICAgIEFwcGx5Q2FzY2FkZWRQ
cm9wZXJ0eVN0YXRlIGFwcGx5U3RhdGUgeyB0aGlzLCAmY2FzY2FkZSwgJnJlc3VsdCB9OwogICAg
IGFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3Jp
dHlQcm9wZXJ0eSwgYXBwbHlTdGF0ZSk7CkBAIC0xMjI0LDM5ICsxMjI0LDYgQEAgVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVu
dChjb25zdCBFbGVtZW4KICAgICByZXR1cm4gY29sbGVjdG9yLm1hdGNoZWRSdWxlTGlzdCgpOwog
fQogCi1zdGF0aWMgYm9vbCBzaG91bGRBcHBseVByb3BlcnR5SW5QYXJzZU9yZGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCkKLXsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKLSAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENsaXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDbGlwOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2lu
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgotICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlOgotICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJJbWFnZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VT
bGljZToKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVJlcGVhdDoKLSAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aDoKLSAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hT
aGFkb3c6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uOgotICAgIGNh
c2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbkxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRl
eHREZWNvcmF0aW9uU3R5bGU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29s
b3I6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uU2tpcDoKLSAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dFVuZGVybGluZVBvc2l0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
VW5kZXJsaW5lT2Zmc2V0OgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNr
bmVzczoKLSAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
IHN0YXRpYyBib29sIGVsZW1lbnRUeXBlSGFzQXBwZWFyYW5jZUZyb21VQVN0eWxlKGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gTk9URTogVGhpcyBpcyBqdXN0IGEgaGFyZC1jb2Rl
ZCBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgaGF2ZSBzb21lIC13ZWJraXQtYXBwZWFyYW5jZSB2YWx1
ZSBpbiBodG1sLmNzcwpAQCAtMTQxNSw5ICsxMzgyLDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKICAgICAgICAgLy8gRmluZCBvdXQgaWYgdGhlcmUncyBhIC13ZWJraXQtYXBwZWFyYW5jZSBw
cm9wZXJ0eSBpbiBlZmZlY3QgZnJvbSB0aGUgVUEgc2hlZXQuCiAgICAgICAgIC8vIElmIHNvLCB3
ZSBjYWNoZSB0aGUgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIHN0eWxlcyBzbyB0aGF0IFJlbmRlclRo
ZW1lOjphZGp1c3RTdHlsZSgpCiAgICAgICAgIC8vIGNhbiBsb29rIGF0IHRoZW0gbGF0ZXIgdG8g
ZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgc3R5bGVkIGZvcm0gY29udHJvbCBvciBub3QuCi0gICAg
ICAgIENhc2NhZGVkUHJvcGVydGllcyBjYXNjYWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwot
ICAgICAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZl
bDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgICAgIGNhc2NhZGUu
YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRM
ZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSBjYXNjYWRlKGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOworICAgICAgICBjYXNjYWRlLmFkZE5v
cm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
YXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAgICAgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVz
KG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQsIGFwcGx5SW5oZXJp
dGVkT25seSk7CiAKICAgICAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0
ZSB7IHRoaXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKIApAQCAtMTQ0MiwxMyArMTQwOSwx
MyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0
Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgICAgICBzdGF0ZS5jYWNoZUJvcmRlckFu
ZEJhY2tncm91bmQoKTsKICAgICB9CiAKLSAgICBDYXNjYWRlZFByb3BlcnRpZXMgY2FzY2FkZShk
aXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKLSAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0
Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25s
eSk7Ci0gICAgY2FzY2FkZS5hZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2
ZWw6OlVzZXJMZXZlbCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKLSAgICBjYXNjYWRlLmFkZE5vcm1h
bE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6QXV0aG9yTGV2ZWwsIGFwcGx5SW5o
ZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0
LCBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsLCBhcHBseUluaGVyaXRlZE9ubHkpOwotICAgIGNh
c2NhZGUuYWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxldmVsOjpVc2Vy
TGV2ZWwsIGFwcGx5SW5oZXJpdGVkT25seSk7Ci0gICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRj
aGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVsLCBhcHBseUluaGVy
aXRlZE9ubHkpOworICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZShkaXJlY3Rpb24s
IHdyaXRpbmdNb2RlKTsKKyAgICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQs
IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgYXBwbHlJbmhlcml0ZWRPbmx5KTsKKyAg
ICBjYXNjYWRlLmFkZE5vcm1hbE1hdGNoZXMobWF0Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2
ZWw6OlVzZXIsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2FzY2FkZS5hZGROb3JtYWxNYXRj
aGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJp
dGVkT25seSk7CisgICAgY2FzY2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBT
dHlsZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IsIGFwcGx5SW5oZXJpdGVkT25seSk7CisgICAgY2Fz
Y2FkZS5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVs
OjpVc2VyLCBhcHBseUluaGVyaXRlZE9ubHkpOworICAgIGNhc2NhZGUuYWRkSW1wb3J0YW50TWF0
Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBhcHBseUlu
aGVyaXRlZE9ubHkpOwogCiAgICAgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUgYXBwbHlTdGF0
ZSB7IHRoaXMsICZjYXNjYWRlLCAmbWF0Y2hSZXN1bHQgfTsKIApAQCAtMTUzNCw4MSArMTUwMSw2
IEBAIGlubGluZSBib29sIGlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KENTU1Byb3BlcnR5SUQg
aWQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvY3Nz
LXBzZXVkby00LyNtYXJrZXItcHNldWRvIChFZGl0b3IncyBEcmFmdCwgMjUgSnVseSAyMDE3KQot
c3RhdGljIGlubGluZSBib29sIGlzVmFsaWRNYXJrZXJTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
SUQgaWQpCi17Ci0gICAgc3dpdGNoIChpZCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoK
LSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseToKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dEZlYXR1cmVTZXR0aW5nczoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eUZvbnRTdHJldGNoOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTeW50aGVzaXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRWYXJpYW50QWx0ZXJuYXRlczoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRD
YXBzOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudEVhc3RBc2lhbjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnRMaWdhdHVyZXM6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZv
bnRWYXJpYW50TnVtZXJpYzoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnRQb3NpdGlv
bjoKLSAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKLSNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250T3B0aWNhbFNpemluZzoKLSAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFZhcmlhdGlvblNldHRpbmdzOgotI2VuZGlmCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkKLXsKLSAgICBzd2l0Y2gg
KGlkKSB7Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmQ6Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRBdHRhY2htZW50OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q2xpcDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRP
cmlnaW46Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbjoKLSAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uWToKLSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdDoK
LSAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eUNvbG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250OgotICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250RmFtaWx5OgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6ZToKLSAgICBjYXNlIENTU1By
b3BlcnR5Rm9udFN0eWxlOgotICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHM6Ci0g
ICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQ6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eU91dGxpbmU6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcjoKLSAgICBjYXNlIENT
U1Byb3BlcnR5T3V0bGluZU9mZnNldDoKLSAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZVN0eWxl
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0
eVZpc2liaWxpdHk6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdoaXRlU3BhY2U6Ci0gICAgY2FzZSBD
U1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0U2hhZG93
OgotICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZToKLSAgICBjYXNlIENTU1Byb3BlcnR5
UGFpbnRPcmRlcjoKLSAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWpvaW46Ci0gICAgY2Fz
ZSBDU1NQcm9wZXJ0eVN0cm9rZUxpbmVjYXA6Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZUNv
bG9yOgotICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VXaWR0aDoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLSNlbmRpZgogLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkg
Y29tcGFyZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKIC8v
IG9mIGVhY2ggaW5kaXZpZHVhbCBsZW5ndGggdmFsdWUgaW4gdGhlIHJlbmRlciBzdHlsZSAvIHRy
ZWUuIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoKigpCiAvLyBtdWx0aXBsaWVzIGVh
Y2ggcmVzb2x2ZWQgbGVuZ3RoIHdpdGggdGhlIHpvb20gbXVsdGlwbGllciAtIHNvIGZvciBTVkcg
d2UgbmVlZCB0byBkaXNhYmxlIHRoYXQuCkBAIC0xNjI4LDQ2ICsxNTIwLDQ5IEBAIGJvb2wgU3R5
bGVSZXNvbHZlcjo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4g
aXM8U1ZHRWxlbWVudD4obV9zdGF0ZS5lbGVtZW50KCkpICYmICEoaXM8U1ZHU1ZHRWxlbWVudD4o
Km1fc3RhdGUuZWxlbWVudCgpKSAmJiBtX3N0YXRlLmVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpKTsK
IH0KIAotU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzKiBTdHlsZVJlc29sdmVyOjpj
YXNjYWRlZFByb3BlcnRpZXNGb3JSb2xsYmFjayhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1
bHQpCitTdHlsZTo6UHJvcGVydHlDYXNjYWRlKiBTdHlsZVJlc29sdmVyOjpjYXNjYWRlZFByb3Bl
cnRpZXNGb3JSb2xsYmFjayhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQpCiB7Ci0gICAg
QVNTRVJUKGNhc2NhZGVMZXZlbCgpICE9IENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWwpOwot
CiAgICAgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUgd3JpdGluZ01v
ZGU7CiAgICAgZXh0cmFjdERpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCpzdGF0ZSgpLnN0eWxlKCks
IG1hdGNoUmVzdWx0LCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKIAotICAgIGlmIChjYXNjYWRl
TGV2ZWwoKSA9PSBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsKSB7Ci0gICAgICAgIENhc2NhZGVk
UHJvcGVydGllcyogYXV0aG9yUm9sbGJhY2sgPSBzdGF0ZSgpLmF1dGhvclJvbGxiYWNrKCk7Cisg
ICAgc3dpdGNoIChzdGF0ZSgpLmNhc2NhZGVMZXZlbCgpKSB7CisgICAgY2FzZSBTdHlsZTo6Q2Fz
Y2FkZUxldmVsOjpBdXRob3I6IHsKKyAgICAgICAgYXV0byogYXV0aG9yUm9sbGJhY2sgPSBzdGF0
ZSgpLmF1dGhvclJvbGxiYWNrKCk7CiAgICAgICAgIGlmIChhdXRob3JSb2xsYmFjaykKICAgICAg
ICAgICAgIHJldHVybiBhdXRob3JSb2xsYmFjazsKIAotICAgICAgICBhdXRvIG5ld0F1dGhvclJv
bGxiYWNrKG1ha2VVbmlxdWU8Q2FzY2FkZWRQcm9wZXJ0aWVzPihkaXJlY3Rpb24sIHdyaXRpbmdN
b2RlKSk7CisgICAgICAgIGF1dG8gbmV3QXV0aG9yUm9sbGJhY2sgPSBtYWtlVW5pcXVlPFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGU+KGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwogCiAgICAgICAgIC8v
IFRoaXMgc3BlY2lhbCByb2xsYmFjayBjYXNjYWRlIGNvbnRhaW5zIFVBIHJ1bGVzIGFuZCB1c2Vy
IHJ1bGVzIGJ1dCBubyBhdXRob3IgcnVsZXMuCi0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5h
ZGROb3JtYWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExldmVs
LCBmYWxzZSk7Ci0gICAgICAgIG5ld0F1dGhvclJvbGxiYWNrLT5hZGROb3JtYWxNYXRjaGVzKG1h
dGNoUmVzdWx0LCBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZlbCwgZmFsc2UpOwotICAgICAgICBuZXdB
dXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgQ2FzY2FkZUxl
dmVsOjpVc2VyTGV2ZWwsIGZhbHNlKTsKLSAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZElt
cG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6VXNlckFnZW50TGV2ZWws
IGZhbHNlKTsKKyAgICAgICAgbmV3QXV0aG9yUm9sbGJhY2stPmFkZE5vcm1hbE1hdGNoZXMobWF0
Y2hSZXN1bHQsIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgZmFsc2UpOworICAgICAg
ICBuZXdBdXRob3JSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6
OkNhc2NhZGVMZXZlbDo6VXNlciwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+
YWRkSW1wb3J0YW50TWF0Y2hlcyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNl
ciwgZmFsc2UpOworICAgICAgICBuZXdBdXRob3JSb2xsYmFjay0+YWRkSW1wb3J0YW50TWF0Y2hl
cyhtYXRjaFJlc3VsdCwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBmYWxzZSk7CiAK
ICAgICAgICAgc3RhdGUoKS5zZXRBdXRob3JSb2xsYmFjayhuZXdBdXRob3JSb2xsYmFjayk7CiAg
ICAgICAgIHJldHVybiBzdGF0ZSgpLmF1dGhvclJvbGxiYWNrKCk7CiAgICAgfQogCi0gICAgaWYg
KGNhc2NhZGVMZXZlbCgpID09IENhc2NhZGVMZXZlbDo6VXNlckxldmVsKSB7Ci0gICAgICAgIENh
c2NhZGVkUHJvcGVydGllcyogdXNlclJvbGxiYWNrID0gc3RhdGUoKS51c2VyUm9sbGJhY2soKTsK
KyAgICBjYXNlIFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXI6IHsKKyAgICAgICAgYXV0byogdXNl
clJvbGxiYWNrID0gc3RhdGUoKS51c2VyUm9sbGJhY2soKTsKICAgICAgICAgaWYgKHVzZXJSb2xs
YmFjaykKICAgICAgICAgICAgIHJldHVybiB1c2VyUm9sbGJhY2s7CiAKLSAgICAgICAgYXV0byBu
ZXdVc2VyUm9sbGJhY2sobWFrZVVuaXF1ZTxDYXNjYWRlZFByb3BlcnRpZXM+KGRpcmVjdGlvbiwg
d3JpdGluZ01vZGUpKTsKKyAgICAgICAgYXV0byBuZXdVc2VyUm9sbGJhY2sgPSBtYWtlVW5pcXVl
PFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU+KGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwogCiAgICAg
ICAgIC8vIFRoaXMgc3BlY2lhbCByb2xsYmFjayBjYXNjYWRlIGNvbnRhaW5zIG9ubHkgVUEgcnVs
ZXMuCi0gICAgICAgIG5ld1VzZXJSb2xsYmFjay0+YWRkTm9ybWFsTWF0Y2hlcyhtYXRjaFJlc3Vs
dCwgQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCwgZmFsc2UpOwotICAgICAgICBuZXdVc2Vy
Um9sbGJhY2stPmFkZEltcG9ydGFudE1hdGNoZXMobWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbDo6
VXNlckFnZW50TGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgbmV3VXNlclJvbGxiYWNrLT5hZGROb3Jt
YWxNYXRjaGVzKG1hdGNoUmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQsIGZh
bHNlKTsKKyAgICAgICAgbmV3VXNlclJvbGxiYWNrLT5hZGRJbXBvcnRhbnRNYXRjaGVzKG1hdGNo
UmVzdWx0LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQsIGZhbHNlKTsKIAogICAgICAg
ICBzdGF0ZSgpLnNldFVzZXJSb2xsYmFjayhuZXdVc2VyUm9sbGJhY2spOwogICAgICAgICByZXR1
cm4gc3RhdGUoKS51c2VyUm9sbGJhY2soKTsKICAgICB9CiAKKyAgICBjYXNlIFN0eWxlOjpDYXNj
YWRlTGV2ZWw6OlVzZXJBZ2VudDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBAIC0xNzE4LDcgKzE2MTMs
NyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUqIHZhbHVlLCBBcHBseUNhc2NhZAogICAgIGJvb2wgaXNSZXZlcnQgPSB2YWx1ZVRv
Q2hlY2tGb3JJbmhlcml0SW5pdGlhbC0+aXNSZXZlcnRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5
VmFsdWVJRCA9PSBDU1NWYWx1ZVJldmVydDsKIAogICAgIGlmIChpc1JldmVydCkgewotICAgICAg
ICBpZiAoY2FzY2FkZUxldmVsKCkgPT0gQ2FzY2FkZUxldmVsOjpVc2VyQWdlbnRMZXZlbCB8fCAh
bWF0Y2hSZXN1bHQpCisgICAgICAgIGlmIChzdGF0ZS5jYXNjYWRlTGV2ZWwoKSA9PSBTdHlsZTo6
Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfHwgIW1hdGNoUmVzdWx0KQogICAgICAgICAgICAgaXNV
bnNldCA9IHRydWU7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGNv
cnJlY3Qgcm9sbGJhY2sgb2JqZWN0IGZyb20gdGhlIHN0YXRlLCBidWlsZGluZyBpdCBpZiBuZWNl
c3NhcnkuCkBAIC0yMTM1LDIyNSArMjAzMCw2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgaW5WYWx1ZSwgRmlsdGVyT3BlcmF0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLVN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6
Q2FzY2FkZWRQcm9wZXJ0aWVzKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkKLSAgICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKLSAgICAsIG1fd3JpdGlu
Z01vZGUod3JpdGluZ01vZGUpCi17Ci19Ci0KLWlubGluZSBib29sIFN0eWxlUmVzb2x2ZXI6OkNh
c2NhZGVkUHJvcGVydGllczo6aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoaWQgPCBtX3Byb3BlcnR5SXNQcmVzZW50LnNpemUoKSk7Ci0gICAgcmV0dXJu
IG1fcHJvcGVydHlJc1ByZXNlbnRbaWRdOwotfQotCi1pbmxpbmUgU3R5bGVSZXNvbHZlcjo6Q2Fz
Y2FkZWRQcm9wZXJ0aWVzOjpQcm9wZXJ0eSYgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0
aWVzOjpwcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQotewotICAgIHJldHVybiBtX3Byb3BlcnRp
ZXNbaWRdOwotfQotCi1pbmxpbmUgYm9vbCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRp
ZXM6Omhhc0N1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9jdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpOwotfQotCi1pbmxpbmUgU3R5
bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjpQcm9wZXJ0eSBTdHlsZVJlc29sdmVyOjpD
YXNjYWRlZFByb3BlcnRpZXM6OmN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jdXN0b21Qcm9wZXJ0aWVzLmdldChuYW1lKTsKLX0KLQotdm9p
ZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OnNldFByb3BlcnR5SW50ZXJuYWwo
UHJvcGVydHkmIHByb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgY3NzVmFsdWUs
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIFN0eWxl
OjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwpCi17Ci0gICAgQVNTRVJUKGxpbmtNYXRj
aFR5cGUgPD0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaEFsbCk7Ci0gICAgcHJvcGVydHkuaWQgPSBp
ZDsKLSAgICBwcm9wZXJ0eS5sZXZlbCA9IGNhc2NhZGVMZXZlbDsKLSAgICBwcm9wZXJ0eS5zdHls
ZVNjb3BlT3JkaW5hbCA9IHN0eWxlU2NvcGVPcmRpbmFsOwotICAgIGlmIChsaW5rTWF0Y2hUeXBl
ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hBbGwpIHsKLSAgICAgICAgcHJvcGVydHkuY3NzVmFs
dWVbMF0gPSAmY3NzVmFsdWU7Ci0gICAgICAgIHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hMaW5rXSA9ICZjc3NWYWx1ZTsKLSAgICAgICAgcHJvcGVydHkuY3NzVmFsdWVb
U2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRdID0gJmNzc1ZhbHVlOwotICAgIH0gZWxzZQot
ICAgICAgICBwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hUeXBlXSA9ICZjc3NWYWx1ZTsKLX0K
LQotdm9pZCBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXM6OnNldChDU1NQcm9wZXJ0
eUlEIGlkLCBDU1NWYWx1ZSYgY3NzVmFsdWUsIHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2Nh
ZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGlu
YWwpCi17Ci0gICAgaWYgKENTU1Byb3BlcnR5Ojppc0RpcmVjdGlvbkF3YXJlUHJvcGVydHkoaWQp
KQotICAgICAgICBpZCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0
eShpZCwgbV9kaXJlY3Rpb24sIG1fd3JpdGluZ01vZGUpOwotCi0gICAgQVNTRVJUKCFzaG91bGRB
cHBseVByb3BlcnR5SW5QYXJzZU9yZGVyKGlkKSk7Ci0KLSAgICBhdXRvJiBwcm9wZXJ0eSA9IG1f
cHJvcGVydGllc1tpZF07Ci0gICAgQVNTRVJUKGlkIDwgbV9wcm9wZXJ0eUlzUHJlc2VudC5zaXpl
KCkpOwotICAgIGlmIChpZCA9PSBDU1NQcm9wZXJ0eUN1c3RvbSkgewotICAgICAgICBtX3Byb3Bl
cnR5SXNQcmVzZW50LnNldChpZCk7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGN1c3RvbVZhbHVlID0g
ZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oY3NzVmFsdWUpOwotICAgICAgICBib29s
IGhhc1ZhbHVlID0gY3VzdG9tUHJvcGVydGllcygpLmNvbnRhaW5zKGN1c3RvbVZhbHVlLm5hbWUo
KSk7Ci0gICAgICAgIGlmICghaGFzVmFsdWUpIHsKLSAgICAgICAgICAgIFByb3BlcnR5IHByb3Bl
cnR5OwotICAgICAgICAgICAgcHJvcGVydHkuaWQgPSBpZDsKLSAgICAgICAgICAgIG1lbXNldChw
cm9wZXJ0eS5jc3NWYWx1ZSwgMCwgc2l6ZW9mKHByb3BlcnR5LmNzc1ZhbHVlKSk7Ci0gICAgICAg
ICAgICBzZXRQcm9wZXJ0eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRj
aFR5cGUsIGNhc2NhZGVMZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOwotICAgICAgICAgICAgY3Vz
dG9tUHJvcGVydGllcygpLnNldChjdXN0b21WYWx1ZS5uYW1lKCksIHByb3BlcnR5KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFByb3BlcnR5IHByb3BlcnR5ID0gY3VzdG9tUHJvcGVy
dGllcygpLmdldChjdXN0b21WYWx1ZS5uYW1lKCkpOwotICAgICAgICAgICAgc2V0UHJvcGVydHlJ
bnRlcm5hbChwcm9wZXJ0eSwgaWQsIGNzc1ZhbHVlLCBsaW5rTWF0Y2hUeXBlLCBjYXNjYWRlTGV2
ZWwsIHN0eWxlU2NvcGVPcmRpbmFsKTsKLSAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMoKS5z
ZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBwcm9wZXJ0eSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghbV9wcm9wZXJ0eUlzUHJlc2VudFtpZF0pCi0gICAgICAg
IG1lbXNldChwcm9wZXJ0eS5jc3NWYWx1ZSwgMCwgc2l6ZW9mKHByb3BlcnR5LmNzc1ZhbHVlKSk7
Ci0gICAgbV9wcm9wZXJ0eUlzUHJlc2VudC5zZXQoaWQpOwotICAgIHNldFByb3BlcnR5SW50ZXJu
YWwocHJvcGVydHksIGlkLCBjc3NWYWx1ZSwgbGlua01hdGNoVHlwZSwgY2FzY2FkZUxldmVsLCBz
dHlsZVNjb3BlT3JkaW5hbCk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9w
ZXJ0aWVzOjpzZXREZWZlcnJlZChDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgY3NzVmFsdWUs
IHVuc2lnbmVkIGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIFN0eWxl
OjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwpCi17Ci0gICAgQVNTRVJUKCFDU1NQcm9w
ZXJ0eTo6aXNEaXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkKSk7Ci0gICAgQVNTRVJUKHNob3VsZEFw
cGx5UHJvcGVydHlJblBhcnNlT3JkZXIoaWQpKTsKLQotICAgIFByb3BlcnR5IHByb3BlcnR5Owot
ICAgIG1lbXNldChwcm9wZXJ0eS5jc3NWYWx1ZSwgMCwgc2l6ZW9mKHByb3BlcnR5LmNzc1ZhbHVl
KSk7Ci0gICAgc2V0UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0eSwgaWQsIGNzc1ZhbHVlLCBsaW5r
TWF0Y2hUeXBlLCBjYXNjYWRlTGV2ZWwsIHN0eWxlU2NvcGVPcmRpbmFsKTsKLSAgICBtX2RlZmVy
cmVkUHJvcGVydGllcy5hcHBlbmQocHJvcGVydHkpOwotfQotCi0KLXZvaWQgU3R5bGVSZXNvbHZl
cjo6Q2FzY2FkZWRQcm9wZXJ0aWVzOjphZGRNYXRjaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyYg
bWF0Y2hlZFByb3BlcnRpZXMsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBv
cnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSkKLXsKLSAgICBhdXRvJiBzdHlsZVByb3BlcnRpZXMg
PSAqbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllczsKLSAgICBhdXRvIHByb3BlcnR5V2hpdGVs
aXN0VHlwZSA9IHN0YXRpY19jYXN0PFByb3BlcnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3Bl
cnRpZXMud2hpdGVsaXN0VHlwZSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9
IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUNvdW50KCk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAg
ICAgIGF1dG8gY3VycmVudCA9IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpOwotICAgICAg
ICBpZiAoaXNJbXBvcnRhbnQgIT0gY3VycmVudC5pc0ltcG9ydGFudCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChpbmhlcml0ZWRPbmx5ICYmICFjdXJyZW50LmlzSW5oZXJp
dGVkKCkpIHsKLSAgICAgICAgICAgIC8vIFdlIGFwcGx5IHRoZSBpbmhlcml0ZWQgcHJvcGVydGll
cyBvbmx5IHdoZW4gdXNpbmcgdGhlIHByb3BlcnR5IGNhY2hlLgotICAgICAgICAgICAgLy8gQSBt
YXRjaCB3aXRoIGEgdmFsdWUgdGhhdCBpcyBleHBsaWNpdGVseSBpbmhlcml0ZWQgc2hvdWxkIG5l
dmVyIGhhdmUgYmVlbiBjYWNoZWQuCi0gICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQudmFsdWUo
KS0+aXNJbmhlcml0ZWRWYWx1ZSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGN1cnJlbnQuaWQoKTsKLQotI2lm
IEVOQUJMRShWSURFT19UUkFDSykKLSAgICAgICAgaWYgKHByb3BlcnR5V2hpdGVsaXN0VHlwZSA9
PSBQcm9wZXJ0eVdoaXRlbGlzdEN1ZSAmJiAhaXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkocHJvcGVy
dHlJRCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICBpZiAocHJvcGVy
dHlXaGl0ZWxpc3RUeXBlID09IFByb3BlcnR5V2hpdGVsaXN0TWFya2VyICYmICFpc1ZhbGlkTWFy
a2VyU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIGlmIChzaG91bGRBcHBseVByb3BlcnR5SW5QYXJzZU9yZGVyKHByb3BlcnR5SUQpKQot
ICAgICAgICAgICAgc2V0RGVmZXJyZWQocHJvcGVydHlJRCwgKmN1cnJlbnQudmFsdWUoKSwgbWF0
Y2hlZFByb3BlcnRpZXMubGlua01hdGNoVHlwZSwgY2FzY2FkZUxldmVsLCBtYXRjaGVkUHJvcGVy
dGllcy5zdHlsZVNjb3BlT3JkaW5hbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldChw
cm9wZXJ0eUlELCAqY3VycmVudC52YWx1ZSgpLCBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hU
eXBlLCBjYXNjYWRlTGV2ZWwsIG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRpbmFsKTsK
LSAgICB9Ci19Ci0KLQotc3RhdGljIGF1dG8mIGRlY2xhcmF0aW9uc0ZvckNhc2NhZGVMZXZlbChj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwp
Ci17Ci0gICAgc3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKLSAgICBjYXNlIENhc2NhZGVMZXZlbDo6
VXNlckFnZW50TGV2ZWw6IHJldHVybiBtYXRjaFJlc3VsdC51c2VyQWdlbnREZWNsYXJhdGlvbnM7
Ci0gICAgY2FzZSBDYXNjYWRlTGV2ZWw6OlVzZXJMZXZlbDogcmV0dXJuIG1hdGNoUmVzdWx0LnVz
ZXJEZWNsYXJhdGlvbnM7Ci0gICAgY2FzZSBDYXNjYWRlTGV2ZWw6OkF1dGhvckxldmVsOiByZXR1
cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOwotICAgIH0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOwot
fQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRkTm9ybWFsTWF0
Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRl
TGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSkKLXsKLSAgICBmb3IgKGF1dG8mIG1hdGNoZWREZWNs
YXJhdGlvbnMgOiBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQsIGNhc2Nh
ZGVMZXZlbCkpCi0gICAgICAgIGFkZE1hdGNoKG1hdGNoZWREZWNsYXJhdGlvbnMsIGNhc2NhZGVM
ZXZlbCwgZmFsc2UsIGluaGVyaXRlZE9ubHkpOwotfQotCi1zdGF0aWMgYm9vbCBoYXNJbXBvcnRh
bnRQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlDb3VudCgpOyBp
IDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAocHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpLmlz
SW1wb3J0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFN0eWxlUmVzb2x2ZXI6OkNhc2NhZGVkUHJvcGVydGllczo6YWRk
SW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2NhZGVM
ZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSkKLXsKLSAgICBzdHJ1Y3QgSW5k
ZXhBbmRPcmRpbmFsIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXg7Ci0gICAgICAgIFN0eWxlOjpT
Y29wZU9yZGluYWwgb3JkaW5hbDsKLSAgICB9OwotICAgIFZlY3RvcjxJbmRleEFuZE9yZGluYWw+
IGltcG9ydGFudE1hdGNoZXM7Ci0gICAgYm9vbCBoYXNNYXRjaGVzRnJvbU90aGVyU2NvcGVzID0g
ZmFsc2U7Ci0KLSAgICBhdXRvJiBtYXRjaGVkRGVjbGFyYXRpb25zID0gZGVjbGFyYXRpb25zRm9y
Q2FzY2FkZUxldmVsKG1hdGNoUmVzdWx0LCBjYXNjYWRlTGV2ZWwpOwotCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1hdGNoZWREZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgTWF0Y2hlZFByb3BlcnRpZXMmIG1hdGNoZWRQcm9wZXJ0aWVzID0gbWF0Y2hlZERl
Y2xhcmF0aW9uc1tpXTsKLQotICAgICAgICBpZiAoIWhhc0ltcG9ydGFudFByb3BlcnRpZXMoKm1h
dGNoZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaW1wb3J0YW50TWF0Y2hlcy5hcHBlbmQoeyBpLCBtYXRjaGVkUHJvcGVydGllcy5zdHls
ZVNjb3BlT3JkaW5hbCB9KTsKLQotICAgICAgICBpZiAobWF0Y2hlZFByb3BlcnRpZXMuc3R5bGVT
Y29wZU9yZGluYWwgIT0gU3R5bGU6OlNjb3BlT3JkaW5hbDo6RWxlbWVudCkKLSAgICAgICAgICAg
IGhhc01hdGNoZXNGcm9tT3RoZXJTY29wZXMgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChpbXBv
cnRhbnRNYXRjaGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGhhc01h
dGNoZXNGcm9tT3RoZXJTY29wZXMpIHsKLSAgICAgICAgLy8gRm9yICFpbXBvcnRhbnQgcHJvcGVy
dGllcyBhIGxhdGVyIHNoYWRvdyB0cmVlIHdpbnMuCi0gICAgICAgIC8vIE1hdGNoIHJlc3VsdHMg
YXJlIHNvcnRlZCBpbiByZXZlcnNlIHRyZWUgY29udGV4dCBvcmRlciBzbyB0aGlzIGlzIG5vdCBu
ZWVkZWQgZm9yIG5vcm1hbCBwcm9wZXJ0aWVzLgotICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGlt
cG9ydGFudE1hdGNoZXMuYmVnaW4oKSwgaW1wb3J0YW50TWF0Y2hlcy5lbmQoKSwgW10gKGNvbnN0
IEluZGV4QW5kT3JkaW5hbCYgYSwgY29uc3QgSW5kZXhBbmRPcmRpbmFsJiBiKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gYS5vcmRpbmFsIDwgYi5vcmRpbmFsOwotICAgICAgICB9KTsKLSAgICB9Ci0K
LSAgICBmb3IgKGF1dG8mIG1hdGNoIDogaW1wb3J0YW50TWF0Y2hlcykKLSAgICAgICAgYWRkTWF0
Y2gobWF0Y2hlZERlY2xhcmF0aW9uc1ttYXRjaC5pbmRleF0sIGNhc2NhZGVMZXZlbCwgdHJ1ZSwg
aW5oZXJpdGVkT25seSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQcm9wZXJ0
aWVzOjphcHBseURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiByZXNvbHZlciwgQXBw
bHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmIGFwcGx5U3RhdGUpCi17Ci0gICAgZm9yIChhdXRvJiBw
cm9wZXJ0eSA6IG1fZGVmZXJyZWRQcm9wZXJ0aWVzKQotICAgICAgICBwcm9wZXJ0eS5hcHBseShy
ZXNvbHZlciwgYXBwbHlTdGF0ZSk7Ci19Ci0KLXZvaWQgU3R5bGVSZXNvbHZlcjo6Q2FzY2FkZWRQ
cm9wZXJ0aWVzOjpQcm9wZXJ0eTo6YXBwbHkoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIsIEFwcGx5
Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQotewotICAgIFN0YXRlJiBzdGF0ZSA9
IHJlc29sdmVyLnN0YXRlKCk7Ci0gICAgc3RhdGUuc2V0Q2FzY2FkZUxldmVsKGxldmVsKTsKLSAg
ICBzdGF0ZS5zZXRTdHlsZVNjb3BlT3JkaW5hbChzdHlsZVNjb3BlT3JkaW5hbCk7Ci0KLSAgICBp
ZiAoY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHRdKSB7Ci0gICAgICAgIHN0
YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgc3RhdGUu
c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7Ci0gICAgICAgIHJlc29s
dmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZh
dWx0XSwgYXBwbHlTdGF0ZSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwotICAgIH0K
LQotICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90
SW5zaWRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoY3NzVmFsdWVbU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbmtdKSB7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSh0cnVlKTsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZShmYWxzZSk7Ci0gICAgICAgIHJlc29sdmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1Zh
bHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSwgYXBwbHlTdGF0ZSwgU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbmspOwotICAgIH0KLQotICAgIGlmIChjc3NWYWx1ZVtTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZF0pIHsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKGZhbHNlKTsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSh0cnVlKTsKLSAgICAgICAgcmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eShpZCwgY3Nz
VmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRdLCBhcHBseVN0YXRlLCBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7Ci0gICAgfQotCi0gICAgc3RhdGUuc2V0QXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotfQotCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5Q2Fz
Y2FkZWRDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUsIEFwcGx5Q2FzY2FkZWRQcm9w
ZXJ0eVN0YXRlJiBzdGF0ZSkKIHsKICAgICBpZiAoc3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRp
ZXMuY29udGFpbnMobmFtZSkgfHwgIXN0YXRlLmNhc2NhZGUtPmN1c3RvbVByb3BlcnRpZXMoKS5j
b250YWlucyhuYW1lKSkKQEAgLTI0NDIsNyArMjExOCw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFwcGx5Q2FzY2FkZWRQcm9wZXJ0aWVzSW1wbChpbnQgZmlyc3RQcm9wZXJ0eSwgaW50
IGxhCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgQVNTRVJUKHByb3BlcnR5SUQgIT0g
Q1NTUHJvcGVydHlDdXN0b20pOwogICAgICAgICBhdXRvJiBwcm9wZXJ0eSA9IHN0YXRlLmNhc2Nh
ZGUtPnByb3BlcnR5KHByb3BlcnR5SUQpOwotICAgICAgICBBU1NFUlQoIXNob3VsZEFwcGx5UHJv
cGVydHlJblBhcnNlT3JkZXIocHJvcGVydHlJRCkpOwogCiAgICAgICAgIGlmIChUcmFja0N5Y2xl
cyA9PSBDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc6OkRpc2FibGVkKSB7CiAgICAgICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXN0b20gcHJvcGVydGllcywgdGhlbiB0aGVyZSBj
YW4ndCBiZSBhbnkgY3ljbGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggOTA1
ZDJhMzhkNjMuLmZkYzVmYjNkODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNTU09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVh
dG9yLmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgi
CkBAIC05NCwxMiArOTUsNiBAQCBlbnVtIGNsYXNzIFJ1bGVNYXRjaGluZ0JlaGF2aW9yOiB1aW50
OF90IHsKICAgICBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcywKIH07CiAKLWVudW0gY2xhc3MgQ2Fz
Y2FkZUxldmVsOiB1aW50OF90IHsKLSAgICBVc2VyQWdlbnRMZXZlbCwKLSAgICBBdXRob3JMZXZl
bCwKLSAgICBVc2VyTGV2ZWwKLX07Ci0KIHN0cnVjdCBFbGVtZW50U3R5bGUgewogICAgIEVsZW1l
bnRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlbmRlclN0eWxlLCBzdGQ6OnVu
aXF1ZV9wdHI8U3R5bGU6OlJlbGF0aW9ucz4gcmVsYXRpb25zID0geyB9KQogICAgICAgICA6IHJl
bmRlclN0eWxlKFdURk1vdmUocmVuZGVyU3R5bGUpKQpAQCAtMTUxLDcgKzE0Niw2IEBAIHB1Ymxp
YzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yS2V5ZnJhbWUoY29u
c3QgUmVuZGVyU3R5bGUqLCBjb25zdCBTdHlsZVJ1bGVLZXlmcmFtZSosIEtleWZyYW1lVmFsdWUm
KTsKICAgICBib29sIGlzQW5pbWF0aW9uTmFtZVZhbGlkKGNvbnN0IFN0cmluZyYpOwogCi1wdWJs
aWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB3aWxsIGdpdmUgYmFjayB0aGUgc2V0IG9mIHJ1bGVz
IHRoYXQgbWF0Y2hlZCBmb3IgYSBnaXZlbiBlbGVtZW50IChvciBhIHBzZXVkby1lbGVtZW50KS4K
ICAgICBlbnVtIENTU1J1bGVGaWx0ZXIgewogICAgICAgICBVQUFuZFVzZXJDU1NSdWxlcyAgID0g
MSA8PCAxLApAQCAtMTYzLDcgKzE1Nyw2IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVmUHRyPFN0
eWxlUnVsZT4+IHN0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqLCB1bnNpZ25lZCBy
dWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwogICAgIFZlY3RvcjxSZWZQdHI8
U3R5bGVSdWxlPj4gcHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVudCosIFBz
ZXVkb0lkLCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSA9IEFsbEJ1dEVtcHR5Q1NTUnVsZXMpOwog
Ci1wdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQgYXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKQEAgLTE3
Miw3ICsxNjUsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEZvbnRTaXplKEZvbnRDYXNjYWRl
RGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKIAotcHVibGljOgogICAgIGJvb2wgdXNlU1ZHWm9v
bVJ1bGVzKCkgY29uc3Q7CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSBjb25z
dDsKIApAQCAtMjA4LDQ4ICsyMDAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckNhY2hlZFBy
b3BlcnRpZXNBZmZlY3RlZEJ5Vmlld3BvcnRVbml0cygpOwogCiAgICAgYm9vbCBjcmVhdGVGaWx0
ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiBpblZhbHVlLCBGaWx0ZXJPcGVyYXRpb25zJiBv
dXRPcGVyYXRpb25zKTsKLSAgICAKLSAgICBjbGFzcyBDYXNjYWRlZFByb3BlcnRpZXMgewotICAg
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENhc2Nh
ZGVkUHJvcGVydGllcyhUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7Ci0KLSAgICAgICAgc3Ry
dWN0IFByb3BlcnR5IHsKLSAgICAgICAgICAgIHZvaWQgYXBwbHkoU3R5bGVSZXNvbHZlciYsIEFw
cGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7Ci0KLSAgICAgICAgICAgIENTU1Byb3BlcnR5SUQg
aWQ7Ci0gICAgICAgICAgICBDYXNjYWRlTGV2ZWwgbGV2ZWw7Ci0gICAgICAgICAgICBTdHlsZTo6
U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsOwotICAgICAgICAgICAgQ1NTVmFsdWUqIGNz
c1ZhbHVlWzNdOwotICAgICAgICB9OwotCi0gICAgICAgIGJvb2wgaGFzUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCkgY29uc3Q7Ci0gICAgICAgIFByb3BlcnR5JiBwcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
KTsKLQotICAgICAgICB2b2lkIGFkZE5vcm1hbE1hdGNoZXMoY29uc3QgTWF0Y2hSZXN1bHQmLCBD
YXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJpdGVkT25seSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBh
ZGRJbXBvcnRhbnRNYXRjaGVzKGNvbnN0IE1hdGNoUmVzdWx0JiwgQ2FzY2FkZUxldmVsLCBib29s
IGluaGVyaXRlZE9ubHkgPSBmYWxzZSk7Ci0KLSAgICAgICAgdm9pZCBhcHBseURlZmVycmVkUHJv
cGVydGllcyhTdHlsZVJlc29sdmVyJiwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsKLQot
ICAgICAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFByb3BlcnR5PiYgY3VzdG9tUHJvcGVydGllcygp
IHsgcmV0dXJuIG1fY3VzdG9tUHJvcGVydGllczsgfQotICAgICAgICBib29sIGhhc0N1c3RvbVBy
b3BlcnR5KGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICBQcm9wZXJ0eSBjdXN0b21Qcm9w
ZXJ0eShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgdm9pZCBhZGRNYXRjaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyYsIENhc2NhZGVMZXZlbCwg
Ym9vbCBpc0ltcG9ydGFudCwgYm9vbCBpbmhlcml0ZWRPbmx5KTsKLSAgICAgICAgdm9pZCBzZXQo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRl
TGV2ZWwsIFN0eWxlOjpTY29wZU9yZGluYWwpOwotICAgICAgICB2b2lkIHNldERlZmVycmVkKENT
U1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxl
dmVsLCBTdHlsZTo6U2NvcGVPcmRpbmFsKTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0UHJvcGVy
dHlJbnRlcm5hbChQcm9wZXJ0eSYsIENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlJiwgdW5zaWduZWQg
bGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBTdHlsZTo6U2NvcGVPcmRpbmFsKTsKLQotICAg
ICAgICBQcm9wZXJ0eSBtX3Byb3BlcnRpZXNbbnVtQ1NTUHJvcGVydGllcyArIDJdOwotICAgICAg
ICBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0aWVzICsgMj4gbV9wcm9wZXJ0eUlzUHJlc2VudDsK
LQotICAgICAgICBWZWN0b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOwotICAg
ICAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFByb3BlcnR5PiBtX2N1c3RvbVByb3BlcnRpZXM7Ci0K
LSAgICAgICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAgICAgICAgV3JpdGluZ01vZGUg
bV93cml0aW5nTW9kZTsKLSAgICB9OwogCiAgICAgdm9pZCBhcHBseUNhc2NhZGVkUHJvcGVydGll
cyhpbnQgZmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSwgQXBwbHlDYXNjYWRlZFByb3Bl
cnR5U3RhdGUmKTsKICAgICB2b2lkIGFwcGx5Q2FzY2FkZWRDdXN0b21Qcm9wZXJ0eShjb25zdCBT
dHJpbmcmIG5hbWUsIEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJik7CkBAIC0yNzgsNyArMjI4
LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxDdXN0b21Qcm9wZXJ0eUN5Y2xlVHJhY2tpbmc+
CiAgICAgaW5saW5lIHZvaWQgYXBwbHlDYXNjYWRlZFByb3BlcnRpZXNJbXBsKGludCBmaXJzdFBy
b3BlcnR5LCBpbnQgbGFzdFByb3BlcnR5LCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYpOwog
Ci0gICAgdm9pZCBjYXNjYWRlTWF0Y2hlcyhDYXNjYWRlZFByb3BlcnRpZXMmLCBjb25zdCBNYXRj
aFJlc3VsdCYsIGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4LCBi
b29sIGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgY2FzY2FkZU1hdGNoZXMoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYsIGNvbnN0IE1hdGNoUmVzdWx0JiwgYm9vbCBpbXBvcnRhbnQsIGludCBzdGFy
dEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaW5oZXJpdGVkT25seSk7CiAKICAgICBEb2N1bWVu
dFJ1bGVTZXRzIG1fcnVsZVNldHM7CiAKQEAgLTMzNiwxNiArMjg2LDE2IEBAIHB1YmxpYzoKIAog
ICAgICAgICBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOyB9
CiAKLSAgICAgICAgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FzY2FkZUxldmVsOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2FzY2FkZUxldmVsKENhc2NhZGVMZXZl
bCBsZXZlbCkgeyBtX2Nhc2NhZGVMZXZlbCA9IGxldmVsOyB9CisgICAgICAgIFN0eWxlOjpDYXNj
YWRlTGV2ZWwgY2FzY2FkZUxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9jYXNjYWRlTGV2ZWw7IH0K
KyAgICAgICAgdm9pZCBzZXRDYXNjYWRlTGV2ZWwoU3R5bGU6OkNhc2NhZGVMZXZlbCBsZXZlbCkg
eyBtX2Nhc2NhZGVMZXZlbCA9IGxldmVsOyB9CiAgICAgICAgIFN0eWxlOjpTY29wZU9yZGluYWwg
c3R5bGVTY29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2NvcGVPcmRpbmFsOyB9
CiAgICAgICAgIHZvaWQgc2V0U3R5bGVTY29wZU9yZGluYWwoU3R5bGU6OlNjb3BlT3JkaW5hbCBz
dHlsZVNjb3BlT3JkaW5hbCkgeyBtX3N0eWxlU2NvcGVPcmRpbmFsID0gc3R5bGVTY29wZU9yZGlu
YWw7IH0KIAotICAgICAgICBDYXNjYWRlZFByb3BlcnRpZXMqIGF1dGhvclJvbGxiYWNrKCkgY29u
c3QgeyByZXR1cm4gbV9hdXRob3JSb2xsYmFjay5nZXQoKTsgfQotICAgICAgICBDYXNjYWRlZFBy
b3BlcnRpZXMqIHVzZXJSb2xsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclJvbGxiYWNrLmdl
dCgpOyB9CisgICAgICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUqIGF1dGhvclJvbGxiYWNrKCkg
Y29uc3QgeyByZXR1cm4gbV9hdXRob3JSb2xsYmFjay5nZXQoKTsgfQorICAgICAgICBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlKiB1c2VyUm9sbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3VzZXJSb2xs
YmFjay5nZXQoKTsgfQogICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRBdXRob3JSb2xsYmFjayhz
dGQ6OnVuaXF1ZV9wdHI8Q2FzY2FkZWRQcm9wZXJ0aWVzPiYgcm9sbGJhY2spIHsgbV9hdXRob3JS
b2xsYmFjayA9IFdURk1vdmUocm9sbGJhY2spOyB9Ci0gICAgICAgIHZvaWQgc2V0VXNlclJvbGxi
YWNrKHN0ZDo6dW5pcXVlX3B0cjxDYXNjYWRlZFByb3BlcnRpZXM+JiByb2xsYmFjaykgeyBtX3Vz
ZXJSb2xsYmFjayA9IFdURk1vdmUocm9sbGJhY2spOyB9CisgICAgICAgIHZvaWQgc2V0QXV0aG9y
Um9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU+JiByb2xsYmFj
aykgeyBtX2F1dGhvclJvbGxiYWNrID0gV1RGTW92ZShyb2xsYmFjayk7IH0KKyAgICAgICAgdm9p
ZCBzZXRVc2VyUm9sbGJhY2soc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU+
JiByb2xsYmFjaykgeyBtX3VzZXJSb2xsYmFjayA9IFdURk1vdmUocm9sbGJhY2spOyB9CiAKICAg
ICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3RvckZpbHRlcjsgfQogICAgICAgICAKQEAgLTM1Nyw4ICszMDcsOCBAQCBwdWJs
aWM6CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3BhcmVudFN0eWxlIHsgbnVsbHB0ciB9
OwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fb3duZWRQYXJlbnRTdHls
ZTsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1fcm9vdEVsZW1lbnRTdHlsZSB7IG51bGxw
dHIgfTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhc2NhZGVkUHJvcGVydGllcz4gbV9hdXRo
b3JSb2xsYmFjazsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhc2NhZGVkUHJvcGVydGllcz4g
bV91c2VyUm9sbGJhY2s7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHlsZTo6UHJvcGVydHlD
YXNjYWRlPiBtX2F1dGhvclJvbGxiYWNrOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6
OlByb3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2s7CiAKICAgICAgICAgY29uc3QgU2VsZWN0
b3JGaWx0ZXIqIG1fc2VsZWN0b3JGaWx0ZXIgeyBudWxscHRyIH07CiAKQEAgLTM3MSw3ICszMjEs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFN0eWxlOjpTY29wZU9yZGluYWwgbV9zdHlsZVNjb3BlT3Jk
aW5hbCB7IFN0eWxlOjpTY29wZU9yZGluYWw6OkVsZW1lbnQgfTsKIAogICAgICAgICBJbnNpZGVM
aW5rIG1fZWxlbWVudExpbmtTdGF0ZSB7IEluc2lkZUxpbms6Ok5vdEluc2lkZSB9OwotICAgICAg
ICBDYXNjYWRlTGV2ZWwgbV9jYXNjYWRlTGV2ZWwgeyBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudExl
dmVsIH07CisgICAgICAgIFN0eWxlOjpDYXNjYWRlTGV2ZWwgbV9jYXNjYWRlTGV2ZWwgeyBTdHls
ZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfTsKIAogICAgICAgICBib29sIG1fYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlIHsgdHJ1ZSB9OwogICAgICAgICBib29sIG1fYXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZSB7IGZhbHNlIH07CkBAIC0zODgsMTAgKzMzOCw3IEBAIHB1Ymxp
YzoKICAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCk7IH0KICAgICBib29sIGFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKTsgfQogCi0gICAgQ2FzY2FkZUxldmVsIGNhc2Nh
ZGVMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY2FzY2FkZUxldmVsKCk7IH0KLSAgICB2
b2lkIHNldENhc2NhZGVMZXZlbChDYXNjYWRlTGV2ZWwgbGV2ZWwpIHsgbV9zdGF0ZS5zZXRDYXNj
YWRlTGV2ZWwobGV2ZWwpOyB9Ci0gICAgCi0gICAgQ2FzY2FkZWRQcm9wZXJ0aWVzKiBjYXNjYWRl
ZFByb3BlcnRpZXNGb3JSb2xsYmFjayhjb25zdCBNYXRjaFJlc3VsdCYpOworICAgIFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUqIGNhc2NhZGVkUHJvcGVydGllc0ZvclJvbGxiYWNrKGNvbnN0IE1hdGNo
UmVzdWx0Jik7CiAKICAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsgcmV0dXJuICZtX3N0
eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFw
cGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsgfQpAQCAtNDA3LDExICsz
NTQsMTEgQEAgcHVibGljOgogCiAgICAgYm9vbCBhZGp1c3RSZW5kZXJTdHlsZUZvclRleHRBdXRv
c2l6aW5nKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYpOwogCisgICAgdm9pZCBhcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKiwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3Rh
dGUmLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoRGVmYXVsdCk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBjYWNoZUJvcmRlckFuZEJhY2tncm91
bmQoKTsKIAotICAgIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSos
IEFwcGx5Q2FzY2FkZWRQcm9wZXJ0eVN0YXRlJiwgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hN
YXNrID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwotCiAgICAgdm9pZCBhcHBseVNW
R1Byb3BlcnR5KENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAKICAgICBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZU1hdGNoZWRQcm9wZXJ0aWVzSGFzaChjb25zdCBNYXRjaFJlc3VsdCYpOwpAQCAt
NDc2LDcgKzQyMyw3IEBAIHByaXZhdGU6CiAvLyBwcm9wZXJ0aWVzIGhhdmUgYmVlbiByZXNvbHZl
ZC4KIHN0cnVjdCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSB7CiAgICAgU3R5bGVSZXNvbHZl
ciogc3R5bGVSZXNvbHZlcjsKLSAgICBTdHlsZVJlc29sdmVyOjpDYXNjYWRlZFByb3BlcnRpZXMq
IGNhc2NhZGU7CisgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSogY2FzY2FkZTsKICAgICBjb25z
dCBNYXRjaFJlc3VsdCogbWF0Y2hSZXN1bHQ7CiAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+
IGFwcGxpZWRQcm9wZXJ0aWVzID0geyB9OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBhcHBsaWVkQ3Vz
dG9tUHJvcGVydGllcyA9IHsgfTsKQEAgLTQ4NCw3ICs0MzEsNiBAQCBzdHJ1Y3QgQXBwbHlDYXNj
YWRlZFByb3BlcnR5U3RhdGUgewogICAgIEhhc2hTZXQ8U3RyaW5nPiBpblByb2dyZXNzUHJvcGVy
dGllc0N1c3RvbSA9IHsgfTsKIH07CiAKLQogaW5saW5lIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFz
U2VsZWN0b3JGb3JBdHRyaWJ1dGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0
cmluZyAmYXR0cmlidXRlTmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQoIWF0dHJpYnV0ZU5hbWUu
aXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2Fz
Y2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41M2NkNjAxYjU4NgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAKQEAgLTAs
MCArMSwzNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHJvcGVydHlDYXNjYWRlLmgiCisKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBTdHlsZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRBcHBseVByb3BlcnR5SW5QYXJzZU9yZGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkK
K3sKKyAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZENsaXA6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kT3JpZ2luOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3Jv
dW5kU2l6ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZToKKyAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlT3V0c2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVJlcGVhdDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0Qm94U2hhZG93OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaGFkb3c6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbkxpbmU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uU3R5bGU6
CisgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uQ29sb3I6CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uU2tpcDoKKyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFVuZGVy
bGluZVBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0Ogor
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzczoKKyAgICBjYXNlIENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb246CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIGh0dHBzOi8vd3d3Lncz
Lm9yZy9UUi9jc3MtcHNldWRvLTQvI21hcmtlci1wc2V1ZG8gKEVkaXRvcidzIERyYWZ0LCAyNSBK
dWx5IDIwMTcpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZE1hcmtlclN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBpZCkKK3sKKyAgICBzd2l0Y2ggKGlkKSB7CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbG9yOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OgorICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250RmVhdHVyZVNldHRpbmdzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U2l6
ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN0cmV0Y2g6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRTdHlsZToKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFN5bnRoZXNpczoKKyAgICBjYXNl
IENTU1Byb3BlcnR5Rm9udFZhcmlhbnRBbHRlcm5hdGVzOgorICAgIGNhc2UgQ1NTUHJvcGVydHlG
b250VmFyaWFudENhcHM6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50RWFzdEFzaWFu
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWFudExpZ2F0dXJlczoKKyAgICBjYXNlIENT
U1Byb3BlcnR5Rm9udFZhcmlhbnROdW1lcmljOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFy
aWFudFBvc2l0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250V2VpZ2h0OgorI2lmIEVOQUJM
RShWQVJJQVRJT05fRk9OVFMpCisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRPcHRpY2FsU2l6aW5n
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlGb250VmFyaWF0aW9uU2V0dGluZ3M6CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1ZhbGlkQ3VlU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkKQorewor
ICAgIHN3aXRjaCAoaWQpIHsKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKKyAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRDbGlwOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKKyAgICBjYXNlIENTU1Byb3BlcnR5
QmFja2dyb3VuZE9yaWdpbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9u
OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgorICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kUmVwZWF0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZToKKyAgICBjYXNl
IENTU1Byb3BlcnR5Q29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnQ6CisgICAgY2FzZSBD
U1NQcm9wZXJ0eUZvbnRGYW1pbHk6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTaXplOgorICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJp
YW50Q2FwczoKKyAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKKyAgICBjYXNlIENTU1By
b3BlcnR5TGluZUhlaWdodDoKKyAgICBjYXNlIENTU1Byb3BlcnR5T3BhY2l0eToKKyAgICBjYXNl
IENTU1Byb3BlcnR5T3V0bGluZToKKyAgICBjYXNlIENTU1Byb3BlcnR5T3V0bGluZUNvbG9yOgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgorICAgIGNhc2UgQ1NTUHJvcGVydHlP
dXRsaW5lU3R5bGU6CisgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aDoKKyAgICBjYXNl
IENTU1Byb3BlcnR5VmlzaWJpbGl0eToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2hpdGVTcGFjZToK
KyAgICBjYXNlIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb246CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVRleHRTaGFkb3c6CisgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclN0eWxlOgorICAgIGNhc2Ug
Q1NTUHJvcGVydHlQYWludE9yZGVyOgorICAgIGNhc2UgQ1NTUHJvcGVydHlTdHJva2VMaW5lam9p
bjoKKyAgICBjYXNlIENTU1Byb3BlcnR5U3Ryb2tlTGluZWNhcDoKKyAgICBjYXNlIENTU1Byb3Bl
cnR5U3Ryb2tlQ29sb3I6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVN0cm9rZVdpZHRoOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK1Byb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNj
YWRlKFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkKKyAg
ICA6IG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKKyAgICAsIG1fd3JpdGluZ01vZGUod3JpdGluZ01v
ZGUpCit7Cit9CisKK1Byb3BlcnR5Q2FzY2FkZTo6flByb3BlcnR5Q2FzY2FkZSgpID0gZGVmYXVs
dDsKKwordm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnNldFByb3BlcnR5SW50ZXJuYWwoUHJvcGVydHkm
IHByb3BlcnR5LCBDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgY3NzVmFsdWUsIHVuc2lnbmVk
IGxpbmtNYXRjaFR5cGUsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIFNjb3BlT3JkaW5hbCBz
dHlsZVNjb3BlT3JkaW5hbCkKK3sKKyAgICBBU1NFUlQobGlua01hdGNoVHlwZSA8PSBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoQWxsKTsKKyAgICBwcm9wZXJ0eS5pZCA9IGlkOworICAgIHByb3BlcnR5
LmxldmVsID0gY2FzY2FkZUxldmVsOworICAgIHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFsID0g
c3R5bGVTY29wZU9yZGluYWw7CisgICAgaWYgKGxpbmtNYXRjaFR5cGUgPT0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaEFsbCkgeworICAgICAgICBwcm9wZXJ0eS5jc3NWYWx1ZVswXSA9ICZjc3NWYWx1
ZTsKKyAgICAgICAgcHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmtd
ID0gJmNzc1ZhbHVlOworICAgICAgICBwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoVmlzaXRlZF0gPSAmY3NzVmFsdWU7CisgICAgfSBlbHNlCisgICAgICAgIHByb3BlcnR5
LmNzc1ZhbHVlW2xpbmtNYXRjaFR5cGVdID0gJmNzc1ZhbHVlOworfQorCit2b2lkIFByb3BlcnR5
Q2FzY2FkZTo6c2V0KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiBjc3NWYWx1ZSwgdW5zaWdu
ZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCwgU2NvcGVPcmRpbmFs
IHN0eWxlU2NvcGVPcmRpbmFsKQoreworICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNEaXJlY3Rpb25B
d2FyZVByb3BlcnR5KGlkKSkKKyAgICAgICAgaWQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVj
dGlvbkF3YXJlUHJvcGVydHkoaWQsIG1fZGlyZWN0aW9uLCBtX3dyaXRpbmdNb2RlKTsKKworICAg
IEFTU0VSVCghc2hvdWxkQXBwbHlQcm9wZXJ0eUluUGFyc2VPcmRlcihpZCkpOworCisgICAgYXV0
byYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbaWRdOworICAgIEFTU0VSVChpZCA8IG1fcHJvcGVy
dHlJc1ByZXNlbnQuc2l6ZSgpKTsKKyAgICBpZiAoaWQgPT0gQ1NTUHJvcGVydHlDdXN0b20pIHsK
KyAgICAgICAgbV9wcm9wZXJ0eUlzUHJlc2VudC5zZXQoaWQpOworICAgICAgICBjb25zdCBhdXRv
JiBjdXN0b21WYWx1ZSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KGNzc1ZhbHVl
KTsKKyAgICAgICAgYm9vbCBoYXNWYWx1ZSA9IGN1c3RvbVByb3BlcnRpZXMoKS5jb250YWlucyhj
dXN0b21WYWx1ZS5uYW1lKCkpOworICAgICAgICBpZiAoIWhhc1ZhbHVlKSB7CisgICAgICAgICAg
ICBQcm9wZXJ0eSBwcm9wZXJ0eTsKKyAgICAgICAgICAgIHByb3BlcnR5LmlkID0gaWQ7CisgICAg
ICAgICAgICBtZW1zZXQocHJvcGVydHkuY3NzVmFsdWUsIDAsIHNpemVvZihwcm9wZXJ0eS5jc3NW
YWx1ZSkpOworICAgICAgICAgICAgc2V0UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0eSwgaWQsIGNz
c1ZhbHVlLCBsaW5rTWF0Y2hUeXBlLCBjYXNjYWRlTGV2ZWwsIHN0eWxlU2NvcGVPcmRpbmFsKTsK
KyAgICAgICAgICAgIGN1c3RvbVByb3BlcnRpZXMoKS5zZXQoY3VzdG9tVmFsdWUubmFtZSgpLCBw
cm9wZXJ0eSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQcm9wZXJ0eSBwcm9wZXJ0
eSA9IGN1c3RvbVByb3BlcnRpZXMoKS5nZXQoY3VzdG9tVmFsdWUubmFtZSgpKTsKKyAgICAgICAg
ICAgIHNldFByb3BlcnR5SW50ZXJuYWwocHJvcGVydHksIGlkLCBjc3NWYWx1ZSwgbGlua01hdGNo
VHlwZSwgY2FzY2FkZUxldmVsLCBzdHlsZVNjb3BlT3JkaW5hbCk7CisgICAgICAgICAgICBjdXN0
b21Qcm9wZXJ0aWVzKCkuc2V0KGN1c3RvbVZhbHVlLm5hbWUoKSwgcHJvcGVydHkpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcHJvcGVydHlJc1ByZXNl
bnRbaWRdKQorICAgICAgICBtZW1zZXQocHJvcGVydHkuY3NzVmFsdWUsIDAsIHNpemVvZihwcm9w
ZXJ0eS5jc3NWYWx1ZSkpOworICAgIG1fcHJvcGVydHlJc1ByZXNlbnQuc2V0KGlkKTsKKyAgICBz
ZXRQcm9wZXJ0eUludGVybmFsKHByb3BlcnR5LCBpZCwgY3NzVmFsdWUsIGxpbmtNYXRjaFR5cGUs
IGNhc2NhZGVMZXZlbCwgc3R5bGVTY29wZU9yZGluYWwpOworfQorCit2b2lkIFByb3BlcnR5Q2Fz
Y2FkZTo6c2V0RGVmZXJyZWQoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIGNzc1ZhbHVlLCB1
bnNpZ25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsLCBTY29wZU9y
ZGluYWwgc3R5bGVTY29wZU9yZGluYWwpCit7CisgICAgQVNTRVJUKCFDU1NQcm9wZXJ0eTo6aXNE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KGlkKSk7CisgICAgQVNTRVJUKHNob3VsZEFwcGx5UHJvcGVy
dHlJblBhcnNlT3JkZXIoaWQpKTsKKworICAgIFByb3BlcnR5IHByb3BlcnR5OworICAgIG1lbXNl
dChwcm9wZXJ0eS5jc3NWYWx1ZSwgMCwgc2l6ZW9mKHByb3BlcnR5LmNzc1ZhbHVlKSk7CisgICAg
c2V0UHJvcGVydHlJbnRlcm5hbChwcm9wZXJ0eSwgaWQsIGNzc1ZhbHVlLCBsaW5rTWF0Y2hUeXBl
LCBjYXNjYWRlTGV2ZWwsIHN0eWxlU2NvcGVPcmRpbmFsKTsKKyAgICBtX2RlZmVycmVkUHJvcGVy
dGllcy5hcHBlbmQocHJvcGVydHkpOworfQorCisKK3ZvaWQgUHJvcGVydHlDYXNjYWRlOjphZGRN
YXRjaChjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFByb3BlcnRpZXMsIENhc2NhZGVM
ZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaXNJbXBvcnRhbnQsIGJvb2wgaW5oZXJpdGVkT25seSkK
K3sKKyAgICBhdXRvJiBzdHlsZVByb3BlcnRpZXMgPSAqbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVy
dGllczsKKyAgICBhdXRvIHByb3BlcnR5V2hpdGVsaXN0VHlwZSA9IHN0YXRpY19jYXN0PFByb3Bl
cnR5V2hpdGVsaXN0VHlwZT4obWF0Y2hlZFByb3BlcnRpZXMud2hpdGVsaXN0VHlwZSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBjb3VudCA9IHN0eWxlUHJvcGVydGllcy5wcm9wZXJ0eUNv
dW50KCk7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gY3VycmVudCA9IHN0eWxlUHJv
cGVydGllcy5wcm9wZXJ0eUF0KGkpOworICAgICAgICBpZiAoaXNJbXBvcnRhbnQgIT0gY3VycmVu
dC5pc0ltcG9ydGFudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmhl
cml0ZWRPbmx5ICYmICFjdXJyZW50LmlzSW5oZXJpdGVkKCkpIHsKKyAgICAgICAgICAgIC8vIElu
aGVyaXRlZCBvbmx5IG1vZGUgaXMgdXNlZCBhZnRlciBtYXRjaGVkIHByb3BlcnRpZXMgY2FjaGUg
aGl0LgorICAgICAgICAgICAgLy8gQSBtYXRjaCB3aXRoIGEgdmFsdWUgdGhhdCBpcyBleHBsaWNp
dGx5IGluaGVyaXRlZCBzaG91bGQgbmV2ZXIgaGF2ZSBiZWVuIGNhY2hlZC4KKyAgICAgICAgICAg
IEFTU0VSVCghY3VycmVudC52YWx1ZSgpLT5pc0luaGVyaXRlZFZhbHVlKCkpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
ID0gY3VycmVudC5pZCgpOworCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgICAgICBpZiAo
cHJvcGVydHlXaGl0ZWxpc3RUeXBlID09IFByb3BlcnR5V2hpdGVsaXN0Q3VlICYmICFpc1ZhbGlk
Q3VlU3R5bGVQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2Vu
ZGlmCisgICAgICAgIGlmIChwcm9wZXJ0eVdoaXRlbGlzdFR5cGUgPT0gUHJvcGVydHlXaGl0ZWxp
c3RNYXJrZXIgJiYgIWlzVmFsaWRNYXJrZXJTdHlsZVByb3BlcnR5KHByb3BlcnR5SUQpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHNob3VsZEFwcGx5UHJvcGVydHlJblBh
cnNlT3JkZXIocHJvcGVydHlJRCkpCisgICAgICAgICAgICBzZXREZWZlcnJlZChwcm9wZXJ0eUlE
LCAqY3VycmVudC52YWx1ZSgpLCBtYXRjaGVkUHJvcGVydGllcy5saW5rTWF0Y2hUeXBlLCBjYXNj
YWRlTGV2ZWwsIG1hdGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRpbmFsKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2V0KHByb3BlcnR5SUQsICpjdXJyZW50LnZhbHVlKCksIG1hdGNo
ZWRQcm9wZXJ0aWVzLmxpbmtNYXRjaFR5cGUsIGNhc2NhZGVMZXZlbCwgbWF0Y2hlZFByb3BlcnRp
ZXMuc3R5bGVTY29wZU9yZGluYWwpOworICAgIH0KK30KKworc3RhdGljIGF1dG8mIGRlY2xhcmF0
aW9uc0ZvckNhc2NhZGVMZXZlbChjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2Nh
ZGVMZXZlbCBjYXNjYWRlTGV2ZWwpCit7CisgICAgc3dpdGNoIChjYXNjYWRlTGV2ZWwpIHsKKyAg
ICBjYXNlIENhc2NhZGVMZXZlbDo6VXNlckFnZW50OiByZXR1cm4gbWF0Y2hSZXN1bHQudXNlckFn
ZW50RGVjbGFyYXRpb25zOworICAgIGNhc2UgQ2FzY2FkZUxldmVsOjpVc2VyOiByZXR1cm4gbWF0
Y2hSZXN1bHQudXNlckRlY2xhcmF0aW9uczsKKyAgICBjYXNlIENhc2NhZGVMZXZlbDo6QXV0aG9y
OiByZXR1cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRpb25zOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWF0Y2hSZXN1bHQuYXV0aG9yRGVjbGFyYXRp
b25zOworfQorCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YWRkTm9ybWFsTWF0Y2hlcyhjb25zdCBN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wg
aW5oZXJpdGVkT25seSkKK3sKKyAgICBmb3IgKGF1dG8mIG1hdGNoZWREZWNsYXJhdGlvbnMgOiBk
ZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQsIGNhc2NhZGVMZXZlbCkpCisg
ICAgICAgIGFkZE1hdGNoKG1hdGNoZWREZWNsYXJhdGlvbnMsIGNhc2NhZGVMZXZlbCwgZmFsc2Us
IGluaGVyaXRlZE9ubHkpOworfQorCitzdGF0aWMgYm9vbCBoYXNJbXBvcnRhbnRQcm9wZXJ0aWVz
KGNvbnN0IFN0eWxlUHJvcGVydGllcyYgcHJvcGVydGllcykKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBjb3VudCA9IHByb3BlcnRpZXMucHJvcGVydHlDb3VudCgpOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICBpZiAocHJvcGVydGllcy5wcm9wZXJ0eUF0KGkpLmlzSW1wb3J0YW50KCkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQsIENhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwsIGJvb2wgaW5oZXJp
dGVkT25seSkKK3sKKyAgICBzdHJ1Y3QgSW5kZXhBbmRPcmRpbmFsIHsKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXg7CisgICAgICAgIFNjb3BlT3JkaW5hbCBvcmRpbmFsOworICAgIH07CisgICAgVmVj
dG9yPEluZGV4QW5kT3JkaW5hbD4gaW1wb3J0YW50TWF0Y2hlczsKKyAgICBib29sIGhhc01hdGNo
ZXNGcm9tT3RoZXJTY29wZXMgPSBmYWxzZTsKKworICAgIGF1dG8mIG1hdGNoZWREZWNsYXJhdGlv
bnMgPSBkZWNsYXJhdGlvbnNGb3JDYXNjYWRlTGV2ZWwobWF0Y2hSZXN1bHQsIGNhc2NhZGVMZXZl
bCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZERlY2xhcmF0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBNYXRjaGVkUHJvcGVydGllcyYgbWF0Y2hlZFBy
b3BlcnRpZXMgPSBtYXRjaGVkRGVjbGFyYXRpb25zW2ldOworCisgICAgICAgIGlmICghaGFzSW1w
b3J0YW50UHJvcGVydGllcygqbWF0Y2hlZFByb3BlcnRpZXMucHJvcGVydGllcykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpbXBvcnRhbnRNYXRjaGVzLmFwcGVuZCh7IGksIG1h
dGNoZWRQcm9wZXJ0aWVzLnN0eWxlU2NvcGVPcmRpbmFsIH0pOworCisgICAgICAgIGlmIChtYXRj
aGVkUHJvcGVydGllcy5zdHlsZVNjb3BlT3JkaW5hbCAhPSBTY29wZU9yZGluYWw6OkVsZW1lbnQp
CisgICAgICAgICAgICBoYXNNYXRjaGVzRnJvbU90aGVyU2NvcGVzID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoaW1wb3J0YW50TWF0Y2hlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChoYXNNYXRjaGVzRnJvbU90aGVyU2NvcGVzKSB7CisgICAgICAgIC8vIEZvciAhaW1w
b3J0YW50IHByb3BlcnRpZXMgYSBsYXRlciBzaGFkb3cgdHJlZSB3aW5zLgorICAgICAgICAvLyBN
YXRjaCByZXN1bHRzIGFyZSBzb3J0ZWQgaW4gcmV2ZXJzZSB0cmVlIGNvbnRleHQgb3JkZXIgc28g
dGhpcyBpcyBub3QgbmVlZGVkIGZvciBub3JtYWwgcHJvcGVydGllcy4KKyAgICAgICAgc3RkOjpz
dGFibGVfc29ydChpbXBvcnRhbnRNYXRjaGVzLmJlZ2luKCksIGltcG9ydGFudE1hdGNoZXMuZW5k
KCksIFtdIChjb25zdCBJbmRleEFuZE9yZGluYWwmIGEsIGNvbnN0IEluZGV4QW5kT3JkaW5hbCYg
YikgeworICAgICAgICAgICAgcmV0dXJuIGEub3JkaW5hbCA8IGIub3JkaW5hbDsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBtYXRjaCA6IGltcG9ydGFudE1hdGNoZXMpCisg
ICAgICAgIGFkZE1hdGNoKG1hdGNoZWREZWNsYXJhdGlvbnNbbWF0Y2guaW5kZXhdLCBjYXNjYWRl
TGV2ZWwsIHRydWUsIGluaGVyaXRlZE9ubHkpOworfQorCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6
YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoU3R5bGVSZXNvbHZlciYgcmVzb2x2ZXIsIEFwcGx5Q2Fz
Y2FkZWRQcm9wZXJ0eVN0YXRlJiBhcHBseVN0YXRlKQoreworICAgIGZvciAoYXV0byYgcHJvcGVy
dHkgOiBtX2RlZmVycmVkUHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydHkuYXBwbHkocmVzb2x2
ZXIsIGFwcGx5U3RhdGUpOworfQorCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHk6OmFw
cGx5KFN0eWxlUmVzb2x2ZXImIHJlc29sdmVyLCBBcHBseUNhc2NhZGVkUHJvcGVydHlTdGF0ZSYg
YXBwbHlTdGF0ZSkKK3sKKyAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUgPSByZXNvbHZl
ci5zdGF0ZSgpOworICAgIHN0YXRlLnNldENhc2NhZGVMZXZlbChsZXZlbCk7CisgICAgc3RhdGUu
c2V0U3R5bGVTY29wZU9yZGluYWwoc3R5bGVTY29wZU9yZGluYWwpOworCisgICAgaWYgKGNzc1Zh
bHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0XSkgeworICAgICAgICBzdGF0ZS5zZXRB
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOworICAgICAgICByZXNvbHZlci5hcHBs
eVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0sIGFw
cGx5U3RhdGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKKyAgICB9CisKKyAgICBp
ZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hMaW5rXSkgeworICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
dHJ1ZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
ZmFsc2UpOworICAgICAgICByZXNvbHZlci5hcHBseVByb3BlcnR5KGlkLCBjc3NWYWx1ZVtTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoTGlua10sIGFwcGx5U3RhdGUsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hMaW5rKTsKKyAgICB9CisKKyAgICBpZiAoY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRj
aFZpc2l0ZWRdKSB7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZShmYWxzZSk7CisgICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUodHJ1ZSk7CisgICAgICAgIHJlc29sdmVyLmFwcGx5UHJvcGVydHkoaWQsIGNzc1ZhbHVlW1Nl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSwgYXBwbHlTdGF0ZSwgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaFZpc2l0ZWQpOworICAgIH0KKworICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSh0cnVlKTsKKyAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKGZhbHNlKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5
bGUvUHJvcGVydHlDYXNjYWRlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2Nh
ZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGU5ZDYyYTkyZGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUu
aApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCIKKyNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVkZSA8
d3RmL0JpdG1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0eWxlUmVzb2x2
ZXI7CitzdHJ1Y3QgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGU7CisKK25hbWVzcGFjZSBTdHls
ZSB7CisKK2VudW0gY2xhc3MgQ2FzY2FkZUxldmVsIDogdWludDhfdCB7CisgICAgVXNlckFnZW50
LAorICAgIFVzZXIsCisgICAgQXV0aG9yCit9OworCitjbGFzcyBQcm9wZXJ0eUNhc2NhZGUgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5Q2FzY2Fk
ZShUZXh0RGlyZWN0aW9uLCBXcml0aW5nTW9kZSk7CisgICAgflByb3BlcnR5Q2FzY2FkZSgpOwor
CisgICAgc3RydWN0IFByb3BlcnR5IHsKKyAgICAgICAgdm9pZCBhcHBseShTdHlsZVJlc29sdmVy
JiwgQXBwbHlDYXNjYWRlZFByb3BlcnR5U3RhdGUmKTsKKworICAgICAgICBDU1NQcm9wZXJ0eUlE
IGlkOworICAgICAgICBDYXNjYWRlTGV2ZWwgbGV2ZWw7CisgICAgICAgIFNjb3BlT3JkaW5hbCBz
dHlsZVNjb3BlT3JkaW5hbDsKKyAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlWzNdOworICAgIH07
CisKKyAgICBib29sIGhhc1Byb3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0OworICAgIFByb3Bl
cnR5JiBwcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKKworICAgIHZvaWQgYWRkTm9ybWFsTWF0Y2hl
cyhjb25zdCBNYXRjaFJlc3VsdCYsIENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0g
ZmFsc2UpOworICAgIHZvaWQgYWRkSW1wb3J0YW50TWF0Y2hlcyhjb25zdCBNYXRjaFJlc3VsdCYs
IENhc2NhZGVMZXZlbCwgYm9vbCBpbmhlcml0ZWRPbmx5ID0gZmFsc2UpOworCisgICAgdm9pZCBh
cHBseURlZmVycmVkUHJvcGVydGllcyhTdHlsZVJlc29sdmVyJiwgQXBwbHlDYXNjYWRlZFByb3Bl
cnR5U3RhdGUmKTsKKworICAgIEhhc2hNYXA8QXRvbVN0cmluZywgUHJvcGVydHk+JiBjdXN0b21Q
cm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9jdXN0b21Qcm9wZXJ0aWVzOyB9CisgICAgYm9vbCBoYXND
dXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBQcm9wZXJ0eSBjdXN0b21Q
cm9wZXJ0eShjb25zdCBTdHJpbmcmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGFkZE1h
dGNoKGNvbnN0IE1hdGNoZWRQcm9wZXJ0aWVzJiwgQ2FzY2FkZUxldmVsLCBib29sIGlzSW1wb3J0
YW50LCBib29sIGluaGVyaXRlZE9ubHkpOworICAgIHZvaWQgc2V0KENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBTY29wZU9yZGlu
YWwpOworICAgIHZvaWQgc2V0RGVmZXJyZWQoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCB1bnNp
Z25lZCBsaW5rTWF0Y2hUeXBlLCBDYXNjYWRlTGV2ZWwsIFNjb3BlT3JkaW5hbCk7CisgICAgc3Rh
dGljIHZvaWQgc2V0UHJvcGVydHlJbnRlcm5hbChQcm9wZXJ0eSYsIENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlJiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSwgQ2FzY2FkZUxldmVsLCBTY29wZU9yZGlu
YWwpOworCisgICAgUHJvcGVydHkgbV9wcm9wZXJ0aWVzW251bUNTU1Byb3BlcnRpZXMgKyAyXTsK
KyAgICBzdGQ6OmJpdHNldDxudW1DU1NQcm9wZXJ0aWVzICsgMj4gbV9wcm9wZXJ0eUlzUHJlc2Vu
dDsKKworICAgIFZlY3RvcjxQcm9wZXJ0eSwgOD4gbV9kZWZlcnJlZFByb3BlcnRpZXM7CisgICAg
SGFzaE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0eT4gbV9jdXN0b21Qcm9wZXJ0aWVzOworCisgICAg
VGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsKKyAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2Rl
OworfTsKKworaW5saW5lIGJvb2wgUHJvcGVydHlDYXNjYWRlOjpoYXNQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIGlkKSBjb25zdAoreworICAgIEFTU0VSVChpZCA8IG1fcHJvcGVydHlJc1ByZXNlbnQu
c2l6ZSgpKTsKKyAgICByZXR1cm4gbV9wcm9wZXJ0eUlzUHJlc2VudFtpZF07Cit9CisKK2lubGlu
ZSBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5JiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQpCit7CisgICAgcmV0dXJuIG1fcHJvcGVydGllc1tpZF07Cit9CisKK2lu
bGluZSBib29sIFByb3BlcnR5Q2FzY2FkZTo6aGFzQ3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAoreworICAgIHJldHVybiBtX2N1c3RvbVByb3BlcnRpZXMuY29udGFpbnMo
bmFtZSk7Cit9CisKK2lubGluZSBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5IFByb3BlcnR5Q2Fz
Y2FkZTo6Y3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIHJl
dHVybiBtX2N1c3RvbVByb3BlcnRpZXMuZ2V0KG5hbWUpOworfQorCit9Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>