<?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>171590</bug_id>
          
          <creation_ts>2017-05-02 19:44:37 -0700</creation_ts>
          <short_desc>Use PassRefPtr less in CompositeEditCommand</short_desc>
          <delta_ts>2017-05-03 11:41:53 -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>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1303928</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-02 19:44:37 -0700</bug_when>
    <thetext>Use PassRefPtr less in CompositeEditCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303929</commentid>
    <comment_count>1</comment_count>
      <attachid>308881</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-02 19:47:19 -0700</bug_when>
    <thetext>Created attachment 308881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303930</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-02 19:48:16 -0700</bug_when>
    <thetext>Attachment 308881 did not pass style-queue:


ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:671:  &apos;styleToApply&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStyle&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:951:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303949</commentid>
    <comment_count>3</comment_count>
      <attachid>308885</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-02 20:43:54 -0700</bug_when>
    <thetext>Created attachment 308885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1303952</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-02 20:46:30 -0700</bug_when>
    <thetext>Attachment 308885 did not pass style-queue:


ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:671:  &apos;styleToApply&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStyle&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:951:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304030</commentid>
    <comment_count>5</comment_count>
      <attachid>308907</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-03 08:43:16 -0700</bug_when>
    <thetext>Created attachment 308907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304031</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-03 08:45:35 -0700</bug_when>
    <thetext>Attachment 308907 did not pass style-queue:


ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:671:  &apos;styleToApply&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedStyle&apos;.  [readability/naming/protected] [4]
ERROR: Source/WebCore/editing/ApplyStyleCommand.cpp:951:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 2 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304144</commentid>
    <comment_count>7</comment_count>
      <attachid>308907</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-03 11:41:51 -0700</bug_when>
    <thetext>Comment on attachment 308907
Patch

Clearing flags on attachment: 308907

Committed r216128: &lt;http://trac.webkit.org/changeset/216128&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304145</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-03 11:41:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308881</attachid>
            <date>2017-05-02 19:47:19 -0700</date>
            <delta_ts>2017-05-02 20:43:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171590-20170502194718.patch</filename>
            <type>text/plain</type>
            <size>111673</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWU2MmQxYmM3NTVhYWM4
MWEyOTE1NmRkZmU4ZDY0ZmQxZTIzNDU4ZS4uYmI3ZDdmZTM4ZDM0ZGIwMDc1YzhlMGM2MTU3NmU2
MzQ4ODNhNDc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyNSBAQAogMjAxNy0wNS0wMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFVzZSBQYXNzUmVmUHRyIGxl
c3MgaW4gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MTU5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBQYXNzUmVmUHRyIGxlc3MgaW4gQ29tcG9zaXRlRWRpdENv
bW1hbmQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHls
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc1NwYW5XaXRob3V0QXR0cmlidXRlc09y
VW5zdHlsZWRTdHlsZVNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eUZvbnRUYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpkdW1teVNwYW5BbmNlc3RvckZvck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFu
cyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5n
VXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDb25mbGljdGluZ0lubGlu
ZVN0eWxlRnJvbVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVk
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NT
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNl
c3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJ
ZklkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VF
bmRXaXRoTmV4dElmSWRlbnRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpz
aG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2FsRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4
dEluTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJl
V2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6Cisg
ICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5k
KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAg
ICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwV2hpdGVzcGFjZSk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAgICAgICog
ZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25m
bGljdGluZ1dpdGhTdHlsZU9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50TWF0Y2hl
c0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OndyYXBwaW5nU3R5bGVGb3JTZXJpYWxpemF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlh
bGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZy
b21SdWxlc0FuZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1v
dmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6OnRyeUluZGVudGluZ0Fz
TGlzdEl0ZW0pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgpOgor
ICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtT3ZlcndyaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIpOgorICAgICAgICAqIGVkaXRpbmcvTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmdldE5v
ZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHND
b21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1
bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9z
aXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2wpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlTWFya3VwSW50ZXJuYWwpOgorCisyMDE3LTA1LTAyICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKICAgICAgICAgVXNlIFBhc3NSZWZQdHIgbGVzcyBpbiBlZGl0aW5n
IGNvZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MTUzNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDQwZjY0ZTA0ZDI5OTk0YWQxNWFkYTVjZDMy
MTM0ZDZlY2Q4NjJiMTUuLjIyNTY3ZGEwMTIyMzY0ZDdmZGNmYjQ0ZTY4NmE4YjkyMzllNmNiNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNjIxLDcgKzE2MjEsNiBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKICAgICBlZGl0aW5nL01vdmVT
ZWxlY3Rpb25Db21tYW5kLmNwcAotICAgIGVkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
LmNwcAogICAgIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1Jl
bW92ZU5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNTQ2ODBhYTIyYzA0YTNmY2NkZjRhZDcxYzU0ZDg1ZDUyNDJh
ZTYxNy4uYzA4MjU3YmQ2M2MxZWM1NDQwNGI5NTg5NWNjZGMwMDBlZmNkY2IxZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzYy
Niw4ICszNjI2LDYgQEAKIAkJOTMzMDlERkEwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzMwOURBQjA5OUU2NDkxMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQuaCAqLzsgfTsKIAkJOTMzMDlERkIwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVT
ZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzA5REFDMDk5RTY0OTEwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgKi87IH07CiAJCTkzMzA5REZDMDk5RTY0OTIwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9u
Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMzMDlEQUQwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi87IH07
Ci0JCTkzMzA5RTAwMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlE
QjEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAgKi87IH07
Ci0JCTkzMzA5RTAxMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REIy
MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCAqLzsgfTsKIAkJ
OTMzMDlFMDQwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REI1MDk5RTY0OTEw
MDU2RTU4MSAvKiBSZW1vdmVOb2RlQ29tbWFuZC5jcHAgKi87IH07CiAJCTkzMzA5RTA1MDk5RTY0
OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQjYwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92
ZU5vZGVDb21tYW5kLmggKi87IH07CiAJCTkzMzA5RTA2MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCNzA5OUU2NDkxMDA1NkU1ODEgLyogUmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwICovOyB9OwpAQCAtMTE3MzYsOCAr
MTE3MzQsNiBAQAogCQk5MzMwOURBQjA5OUU2NDkxMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTMzMDlEQUMwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdmVTZWxlY3Rpb25Db21tYW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQUQwOTlFNjQ5MTAwNTZFNTgx
IC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1vdmVTZWxlY3Rpb25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTkzMzA5REIxMDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTMzMDlEQjIwOTlFNjQ5
MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQjUwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVD
b21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZU5v
ZGVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQjYwOTlF
NjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW92ZU5vZGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMzA5REI3MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTg0OCw4ICsxOTg0NCw2IEBACiAJCQkJQzZENzRBRDMwOUFBMjgyRTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovLAogCQkJCTkzMzA5REFDMDk5
RTY0OTEwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlE
QUQwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi8sCi0JCQkJOTMz
MDlEQjEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAgKi8s
Ci0JCQkJOTMzMDlEQjIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFu
ZC5oICovLAogCQkJCUQwNkMwRDhFMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21t
YW5kLmNwcCAqLywKIAkJCQlEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0
Q29tbWFuZC5oICovLAogCQkJCTkzMzA5REI1MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVOb2Rl
Q29tbWFuZC5jcHAgKi8sCkBAIC0yODg3MSw3ICsyODg2NSw2IEBACiAJCQkJQTU3OEY0M0YxREUw
QjYzMDAwM0RGQzZBIC8qIFJlamVjdGVkUHJvbWlzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNERkMzNjA2MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEOEFDQTg5MUQyMzdBQTIwMEVDQzU5RSAvKiBSZW1vdGVDb21t
YW5kTGlzdGVuZXJNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzMzA5RTAxMDk5RTY0OTIwMDU2
RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUQw
NkMwRDhGMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUwNTA5OUU2NDkyMDA1NkU1ODEgLyogUmVtb3ZlTm9kZUNvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTA3MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjc3MSw3
ICszMjc2NCw2IEBACiAJCQkJQ0RGQzM2MDUxOENBNjFDMjAwMjZFNTZGIC8qIFJlbW90ZUNvbW1h
bmRMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREZDMzYwNzE4Q0E2OTZDMDAyNkU1
NkYgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4
QUNBODgxRDIzN0FBMjAwRUNDNTlFIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lck1hYy5tbSBpbiBT
b3VyY2VzICovLAotCQkJCTkzMzA5RTAwMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDA2QzBEOTAwQ0ZEMTE0NjAwNjVG
NDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MDQwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5RTA2MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggZjdhNzQyMWU1ZTUxNzU1NWEwY2U2OGIxMmIw
ZjY1MmI0YWI4NTY5My4uNWJlYjZhYTgwZWVkMjk0ODYwYjE2ZGM0YjIzY2Y5Njg5NWI0YTBmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTc2
LDMwICs3NiwzMCBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSogbm9k
ZSkKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNwYW5FbGVtZW50Pigqbm9kZSkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5n
KCk7CiB9CiAKLXN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUo
Y29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5
IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKK3N0YXRpYyBib29sIGhhc05vQXR0cmlidXRl
T3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCYgZWxlbWVudCwgU2hvdWxk
U3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKIHsKLSAg
ICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKKyAgICBpZiAoIWVsZW1lbnQuaGFzQXR0
cmlidXRlcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHVuc2lnbmVkIG1hdGNoZWRB
dHRyaWJ1dGVzID0gMDsKLSAgICBpZiAoZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpCisgICAgaWYgKGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxl
U3BhbkNsYXNzU3RyaW5nKCkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7Ci0gICAgaWYg
KGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShzdHlsZUF0dHIpICYmIChzaG91bGRTdHlsZUF0dHJpYnV0
ZUJlRW1wdHkgPT0gQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlCi0gICAgICAgIHx8ICFlbGVt
ZW50LT5pbmxpbmVTdHlsZSgpIHx8IGVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzRW1wdHkoKSkp
CisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKHN0eWxlQXR0cikgJiYgKHNob3VsZFN0eWxl
QXR0cmlidXRlQmVFbXB0eSA9PSBBbGxvd05vbkVtcHR5U3R5bGVBdHRyaWJ1dGUKKyAgICAgICAg
fHwgIWVsZW1lbnQuaW5saW5lU3R5bGUoKSB8fCBlbGVtZW50LmlubGluZVN0eWxlKCktPmlzRW1w
dHkoKSkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAKLSAgICBBU1NFUlQobWF0Y2hl
ZEF0dHJpYnV0ZXMgPD0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKSk7Ci0gICAgcmV0dXJuIG1h
dGNoZWRBdHRyaWJ1dGVzID09IGVsZW1lbnQtPmF0dHJpYnV0ZUNvdW50KCk7CisgICAgQVNTRVJU
KG1hdGNoZWRBdHRyaWJ1dGVzIDw9IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKSk7CisgICAgcmV0
dXJuIG1hdGNoZWRBdHRyaWJ1dGVzID09IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKTsKIH0KIAot
Ym9vbCBpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKK2Jvb2wgaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRl
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFpczxIVE1MU3BhbkVsZW1lbnQ+
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGhhc05vQXR0cmli
dXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8SFRNTFNwYW5FbGVtZW50PihlbGVtZW50
KSwgQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bhbihjb25zdCBFbGVtZW50
KiBlbGVtZW50KQorc3RhdGljIGlubGluZSBib29sIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JV
bnN0eWxlZFN0eWxlU3Bhbihjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghaXM8
SFRNTFNwYW5FbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEx
LDcgKzExMSw3IEBAIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
U2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0CiAgICAgaWYgKCFpczxIVE1MRm9u
dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZShkb3duY2FzdDxIVE1MRm9udEVsZW1l
bnQ+KGVsZW1lbnQpLCBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpOworICAgIHJldHVybiBo
YXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGRvd25jYXN0PEhUTUxGb250RWxlbWVu
dD4oKmVsZW1lbnQpLCBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpOwogfQogCiBzdGF0aWMg
UmVmPEhUTUxFbGVtZW50PiBjcmVhdGVGb250RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCkBA
IC0yMDQsMjQgKzIwNCwyNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICBzd2l0Y2ggKG1fcHJvcGVydHlMZXZlbCkgewogICAgIGNhc2UgUHJvcGVydHlEZWZhdWx0OiB7
CiAgICAgICAgIC8vIEFwcGx5IHRoZSBibG9jay1jZW50cmljIHByb3BlcnRpZXMgb2YgdGhlIHN0
eWxlLgotICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gbV9zdHlsZS0+
ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOworICAgICAgICBhdXRvIGJsb2NrU3R5
bGUgPSBtX3N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgICAg
IGlmICghYmxvY2tTdHlsZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgYXBwbHlCbG9ja1N0eWxl
KGJsb2NrU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlCbG9ja1N0eWxlKGJsb2NrU3R5
bGUpOwogICAgICAgICAvLyBBcHBseSBhbnkgcmVtYWluaW5nIHN0eWxlcyB0byB0aGUgaW5saW5l
IGVsZW1lbnRzLgogICAgICAgICBpZiAoIW1fc3R5bGUtPmlzRW1wdHkoKSB8fCBtX3N0eWxlZElu
bGluZUVsZW1lbnQgfHwgbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKSB7CiAgICAg
ICAgICAgICBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKG1fc3R5bGUuZ2V0KCkpOwotICAg
ICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZShtX3N0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFw
cGx5SW5saW5lU3R5bGUoKm1fc3R5bGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEZvcmNlQmxvY2tQcm9wZXJ0aWVzOgogICAgICAgICAvLyBGb3JjZSBhbGwg
cHJvcGVydGllcyB0byBiZSBhcHBsaWVkIGFzIGJsb2NrIHN0eWxlcy4KLSAgICAgICAgYXBwbHlC
bG9ja1N0eWxlKG1fc3R5bGUuZ2V0KCkpOworICAgICAgICBhcHBseUJsb2NrU3R5bGUoKm1fc3R5
bGUpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUgKnN0eWxlKQordm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiB7CiAgICAgLy8gdXBk
YXRlIGRvY3VtZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMKICAgICAvLyBz
byB0aGF0IHdlIGF2b2lkIHRoZSBleHBlbnNlIG9mIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBl
dmVyeSBjYWxsCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgIHZpc2libGVFbmQgPSB2
aXNpYmxlRW5kLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNp
YmxlUG9zaXRpb24gYmV5b25kRW5kKGVuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpLm5leHQoKSk7
CiAgICAgd2hpbGUgKHBhcmFncmFwaFN0YXJ0LmlzTm90TnVsbCgpICYmIHBhcmFncmFwaFN0YXJ0
ICE9IGJleW9uZEVuZCkgewotICAgICAgICBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZShzdHlsZSwg
cGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgIFN0eWxlQ2hhbmdlIHN0
eWxlQ2hhbmdlKCZzdHlsZSwgcGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAg
ICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpIHx8IG1fcmVtb3ZlT25seSkgewogICAgICAg
ICAgICAgUmVmUHRyPE5vZGU+IGJsb2NrID0gZW5jbG9zaW5nQmxvY2socGFyYWdyYXBoU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIGlmICghbV9y
ZW1vdmVPbmx5KSB7CkBAIC0yNzEsOSArMjcxLDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBBU1NFUlQoIWJsb2NrIHx8IGlzPEhUTUxFbGVtZW50PigqYmxvY2spKTsKICAgICAg
ICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oYmxvY2suZ2V0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIGRvd25jYXN0PEhUTUxFbGVtZW50PihibG9jay5nZXQo
KSkpOworICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3JlbW92ZU9ubHkpCi0g
ICAgICAgICAgICAgICAgICAgIGFkZEJsb2NrU3R5bGUoc3R5bGVDaGFuZ2UsIGRvd25jYXN0PEhU
TUxFbGVtZW50PihibG9jay5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1N0
eWxlKHN0eWxlQ2hhbmdlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmJsb2NrKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChuZXh0UGFyYWdyYXBoU3RhcnQuaXNPcnBoYW4oKSkK
QEAgLTQyMCw4ICs0MjAsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZl
Rm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgICAgICAgICBzZXROb2Rl
QXR0cmlidXRlKGVsZW1lbnQuZ2V0KCksIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIpOwot
ICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bh
bihlbGVtZW50LmdldCgpKSkKKyAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoKmVsZW1l
bnQsIHN0eWxlQXR0cik7CisgICAgICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNP
clVuc3R5bGVkU3R5bGVTcGFuKCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB1bnN0eWxlZFNw
YW5zLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzMiw3
ICs0MzIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxl
Q2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBkdW1t
eVNwYW5BbmNlc3RvckZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICB3aGlsZSAobm9k
ZSAmJiAoIWlzPEVsZW1lbnQ+KCpub2RlKSB8fCAhaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0
eWxlQXR0cmlidXRlKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkpCisgICAgd2hpbGUgKG5vZGUg
JiYgKCFpczxFbGVtZW50Pigqbm9kZSkgfHwgIWlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHls
ZUF0dHJpYnV0ZShkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkpKSkKICAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICAKICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPnBhcmVudE5v
ZGUoKSA6IG51bGxwdHI7CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6Y2xlYW51cFVuc3R5bGVkQXBwbGVTdHlsZVNwYW5zKENvbnRhaW5lck5vZGUqIGR1bW15U3Bh
bkEKIAogICAgIFZlY3RvcjxFbGVtZW50Kj4gdG9SZW1vdmU7CiAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KCpkdW1teVNwYW5BbmNlc3RvcikpIHsKLSAgICAg
ICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3BhbigmY2hpbGQp
KQorICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFu
KGNoaWxkKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmY2hpbGQpOwogICAgIH0KIApA
QCAtNTMzLDEzICs1MzMsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRk
aW5nVXBUb0VuY2xvc2luZ0Jsb2NrKE5vZGUqIG5vZGUsIE5vZGUqIHVuc3AKICAgICAgICAgaWYg
KGVsZW1lbnQuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihkaXJBdHRyKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBCRE8gZWxlbWVudCwgd2Ugc2hvdWxk
IHByb2JhYmx5IGp1c3QgcmVtb3ZlIGl0IGlmIGl0IGhhcyBubwogICAgICAgICAgICAgLy8gb3Ro
ZXIgYXR0cmlidXRlcywgbGlrZSB3ZSAoc2hvdWxkKSBkbyB3aXRoIEIgYW5kIEkgZWxlbWVudHMu
Ci0gICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKCZlbGVtZW50LCBkaXJBdHRyKTsKKyAg
ICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgZGlyQXR0cik7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gaW5s
aW5lU3R5bGUgPSBjb3B5U3R5bGVPckNyZWF0ZUVtcHR5KGVsZW1lbnQuaW5saW5lU3R5bGUoKSk7
CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2Rl
QmlkaSwgQ1NTVmFsdWVOb3JtYWwpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnJlbW92ZVBy
b3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKLSAgICAgICAg
ICAgIGlmIChpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oJmVsZW1l
bnQpKQorICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0
eWxlU3BhbihlbGVtZW50KSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKCZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTU1NSw3ICs1NTUsNyBAQCBz
dGF0aWMgTm9kZSogaGlnaGVzdEVtYmVkZGluZ0FuY2VzdG9yKE5vZGUqIHN0YXJ0Tm9kZSwgTm9k
ZSogZW5jbG9zaW5nTm9kZSkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlKQordm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogewogICAg
IFJlZlB0cjxDb250YWluZXJOb2RlPiBzdGFydER1bW15U3BhbkFuY2VzdG9yOwogICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBlbmREdW1teVNwYW5BbmNlc3RvcjsKQEAgLTYxNSw3ICs2MTUsNyBA
QCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSog
c3R5bGUpCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM3MjQzNDQ+IEJvbGRpbmcgYW5kIHVuYm9s
ZGluZyBjcmVhdGVzIGV4dHJhbmVvdXMgdGFncwogICAgIFBvc2l0aW9uIHJlbW92ZVN0YXJ0ID0g
c3RhcnQudXBzdHJlYW0oKTsKICAgICBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBO
YXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKLSAgICBib29sIGhhc1RleHREaXJlY3Rpb24gPSBzdHls
ZS0+dGV4dERpcmVjdGlvbih0ZXh0RGlyZWN0aW9uKTsKKyAgICBib29sIGhhc1RleHREaXJlY3Rp
b24gPSBzdHlsZS50ZXh0RGlyZWN0aW9uKHRleHREaXJlY3Rpb24pOwogICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IHN0eWxlV2l0aG91dEVtYmVkZGluZzsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBlbWJlZGRpbmdTdHlsZTsKICAgICBpZiAoaGFzVGV4dERpcmVjdGlvbikgewpAQCAtNjM1LDE1
ICs2MzUsMTUgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0
aW5nU3R5bGUqIHN0eWxlKQogICAgICAgICAgICAgZW1iZWRkaW5nUmVtb3ZlRW5kID0gcG9zaXRp
b25JblBhcmVudEJlZm9yZU5vZGUoZW5kVW5zcGxpdEFuY2VzdG9yKS5kb3duc3RyZWFtKCk7CiAK
ICAgICAgICAgaWYgKGVtYmVkZGluZ1JlbW92ZUVuZCAhPSByZW1vdmVTdGFydCB8fCBlbWJlZGRp
bmdSZW1vdmVFbmQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBzdHlsZVdpdGhvdXRFbWJlZGRpbmcg
PSBzdHlsZS0+Y29weSgpOworICAgICAgICAgICAgc3R5bGVXaXRob3V0RW1iZWRkaW5nID0gc3R5
bGUuY29weSgpOwogICAgICAgICAgICAgZW1iZWRkaW5nU3R5bGUgPSBzdHlsZVdpdGhvdXRFbWJl
ZGRpbmctPmV4dHJhY3RBbmRSZW1vdmVUZXh0RGlyZWN0aW9uKCk7CiAKICAgICAgICAgICAgIGlm
IChjb21wYXJlUG9zaXRpb25zKGVtYmVkZGluZ1JlbW92ZVN0YXJ0LCBlbWJlZGRpbmdSZW1vdmVF
bmQpIDw9IDApCi0gICAgICAgICAgICAgICAgcmVtb3ZlSW5saW5lU3R5bGUoZW1iZWRkaW5nU3R5
bGUuZ2V0KCksIGVtYmVkZGluZ1JlbW92ZVN0YXJ0LCBlbWJlZGRpbmdSZW1vdmVFbmQpOworICAg
ICAgICAgICAgICAgIHJlbW92ZUlubGluZVN0eWxlKCplbWJlZGRpbmdTdHlsZSwgZW1iZWRkaW5n
UmVtb3ZlU3RhcnQsIGVtYmVkZGluZ1JlbW92ZUVuZCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZW1vdmVJbmxpbmVTdHlsZShzdHlsZVdpdGhvdXRFbWJlZGRpbmcgPyBzdHlsZVdpdGhvdXRF
bWJlZGRpbmcuZ2V0KCkgOiBzdHlsZSwgcmVtb3ZlU3RhcnQsIGVuZCk7CisgICAgcmVtb3ZlSW5s
aW5lU3R5bGUoc3R5bGVXaXRob3V0RW1iZWRkaW5nID8gKnN0eWxlV2l0aG91dEVtYmVkZGluZyA6
IHN0eWxlLCByZW1vdmVTdGFydCwgZW5kKTsKICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsK
ICAgICBlbmQgPSBlbmRQb3NpdGlvbigpOwogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFy
dC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKQEAgLTY2OCw3
ICs2NjgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRp
bmdTdHlsZSogc3R5bGUpCiAgICAgLy8gdG8gY2hlY2sgYSBjb21wdXRlZCBzdHlsZQogICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSBzdHlsZTsKKyAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSAmc3R5bGU7CiAgICAgaWYgKGhhc1RleHREaXJlY3Rp
b24pIHsKICAgICAgICAgLy8gQXZvaWQgYXBwbHlpbmcgdGhlIHVuaWNvZGUtYmlkaSBhbmQgZGly
ZWN0aW9uIHByb3BlcnRpZXMgYmVuZWF0aCBhbmNlc3RvcnMgdGhhdCBhbHJlYWR5IGhhdmUgdGhl
bS4KICAgICAgICAgTm9kZSogZW1iZWRkaW5nU3RhcnROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0Fu
Y2VzdG9yKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIGVuY2xvc2luZ0Jsb2NrKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpKTsKQEAgLTY4MCwxNiArNjgwLDE2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAgIEFT
U0VSVChlbWJlZGRpbmdBcHBseVN0YXJ0LmlzTm90TnVsbCgpICYmIGVtYmVkZGluZ0FwcGx5RW5k
LmlzTm90TnVsbCgpKTsKIAogICAgICAgICAgICAgaWYgKCFlbWJlZGRpbmdTdHlsZSkgewotICAg
ICAgICAgICAgICAgIHN0eWxlV2l0aG91dEVtYmVkZGluZyA9IHN0eWxlLT5jb3B5KCk7CisgICAg
ICAgICAgICAgICAgc3R5bGVXaXRob3V0RW1iZWRkaW5nID0gc3R5bGUuY29weSgpOwogICAgICAg
ICAgICAgICAgIGVtYmVkZGluZ1N0eWxlID0gc3R5bGVXaXRob3V0RW1iZWRkaW5nLT5leHRyYWN0
QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZml4
UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKGVtYmVkZGluZ1N0eWxlLmdldCgpLCBlbWJlZGRpbmdB
cHBseVN0YXJ0LCBlbWJlZGRpbmdBcHBseUVuZCk7CisgICAgICAgICAgICBmaXhSYW5nZUFuZEFw
cGx5SW5saW5lU3R5bGUoKmVtYmVkZGluZ1N0eWxlLCBlbWJlZGRpbmdBcHBseVN0YXJ0LCBlbWJl
ZGRpbmdBcHBseUVuZCk7CiAKICAgICAgICAgICAgIHN0eWxlVG9BcHBseSA9IHN0eWxlV2l0aG91
dEVtYmVkZGluZzsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZpeFJhbmdlQW5kQXBwbHlJbmxp
bmVTdHlsZShzdHlsZVRvQXBwbHkuZ2V0KCksIHN0YXJ0LCBlbmQpOworICAgIGZpeFJhbmdlQW5k
QXBwbHlJbmxpbmVTdHlsZSgqc3R5bGVUb0FwcGx5LCBzdGFydCwgZW5kKTsKIAogICAgIC8vIFJl
bW92ZSBkdW1teSBzdHlsZSBzcGFucyBjcmVhdGVkIGJ5IHNwbGl0dGluZyB0ZXh0IGVsZW1lbnRz
LgogICAgIGNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyhzdGFydER1bW15U3BhbkFuY2Vz
dG9yLmdldCgpKTsKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgICAgIGNsZWFudXBVbnN0
eWxlZEFwcGxlU3R5bGVTcGFucyhlbmREdW1teVNwYW5BbmNlc3Rvci5nZXQoKSk7CiB9CiAKLXZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5n
U3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
Cit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUoRWRp
dGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogewogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7CiAK
QEAgLTc2Niw3ICs3NjYsNyBAQCBzdHJ1Y3QgSW5saW5lUnVuVG9BcHBseVN0eWxlIHsKICAgICBT
dHlsZUNoYW5nZSBjaGFuZ2U7CiB9OwogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnROb2Rl
LCBOb2RlKiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5l
U3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBOb2RlJiBzdGFydE5vZGUsIE5v
ZGUqIHBhc3RFbmROb2RlKQogewogICAgIGlmIChtX3JlbW92ZU9ubHkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGlu
ZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgcwogICAgICAgICAg
ICAgLy8gQWRkIHRvIHRoaXMgZWxlbWVudCdzIGlubGluZSBzdHlsZSBhbmQgc2tpcCBvdmVyIGl0
cyBjb250ZW50cy4KICAgICAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVudC5pbmxp
bmVTdHlsZSgpKTsKLSAgICAgICAgICAgIGlmIChNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBvdGhl
clN0eWxlID0gc3R5bGUtPnN0eWxlKCkpCisgICAgICAgICAgICBpZiAoTXV0YWJsZVN0eWxlUHJv
cGVydGllcyogb3RoZXJTdHlsZSA9IHN0eWxlLnN0eWxlKCkpCiAgICAgICAgICAgICAgICAgaW5s
aW5lU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCpvdGhlclN0eWxlKTsKICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUt
PmFzVGV4dCgpKTsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbigqbm9kZSk7CkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5v
ZGUmIHMKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCiAgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKQotICAgICAgICBydW4uY2hhbmdlID0g
U3R5bGVDaGFuZ2Uoc3R5bGUsIHJ1bi5wb3NpdGlvbkZvclN0eWxlQ29tcHV0YXRpb24pOworICAg
ICAgICBydW4uY2hhbmdlID0gU3R5bGVDaGFuZ2UoJnN0eWxlLCBydW4ucG9zaXRpb25Gb3JTdHls
ZUNvbXB1dGF0aW9uKTsKIAogICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgewogICAgICAgICBp
ZiAocnVuLmR1bW15RWxlbWVudCkKQEAgLTg1MCwxNSArODUwLDE1IEBAIGJvb2wgQXBwbHlTdHls
ZUNvbW1hbmQ6OmlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0CiAgICAgICAgIHx8IChtX2lzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24gJiYg
bV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKGVsZW1lbnQpKTsKIH0KIAotYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHls
ZSogc3R5bGUsIE5vZGUqIHJ1blN0YXJ0LCBOb2RlKiBwYXN0RW5kTm9kZSkKK2Jvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnNob3VsZEFwcGx5SW5saW5lU3R5bGVUb1J1bihFZGl0aW5nU3R5bGUmIHN0
eWxlLCBOb2RlKiBydW5TdGFydCwgTm9kZSogcGFzdEVuZE5vZGUpCiB7Ci0gICAgQVNTRVJUKHN0
eWxlICYmIHJ1blN0YXJ0KTsKKyAgICBBU1NFUlQocnVuU3RhcnQpOwogCiAgICAgZm9yIChOb2Rl
KiBub2RlID0gcnVuU3RhcnQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNDaGlsZE5v
ZGVzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gV2UgZG9uJ3QgY29uc2lk
ZXIgbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB3ZSBuZXZl
ciBhcHBseSBzdHlsZSB3aGVuIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBpcyBz
cGVjaWZpZWQKLSAgICAgICAgaWYgKCFzdHlsZS0+c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5
bGVPZk5vZGUobm9kZSkpCisgICAgICAgIGlmICghc3R5bGUuc3R5bGVJc1ByZXNlbnRJbkNvbXB1
dGVkU3R5bGVPZk5vZGUobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
aWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcocG9z
aXRpb25CZWZvcmVOb2RlKG5vZGUpLCBtX3N0eWxlZElubGluZUVsZW1lbnQtPnRhZ1FOYW1lKCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04NjYsNyArODY2LDcgQEAgYm9vbCBBcHBs
eVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHlsZSog
c3R5bGUsIE5vZGUqIHIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSog
c3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2Rl
KiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5n
SW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSYgc3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVu
U3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2RlKiBwYXN0RW5kTm9kZSkKIHsKICAgICBB
U1NFUlQocnVuU3RhcnQgJiYgcnVuRW5kKTsKICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJ1blN0
YXJ0OwpAQCAtODk0LDcgKzg5NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNv
bmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsCiAgICAgfQog
fQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50
KEVkaXRpbmdTdHlsZSogc3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50LCBJbmxpbmVTdHlsZVJl
bW92YWxNb2RlIG1vZGUsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCitib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYg
c3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUs
IEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCiB7CiAgICAgaWYgKCFlbGVtZW50LnBhcmVu
dE5vZGUoKSB8fCAhaXNFZGl0YWJsZU5vZGUoKmVsZW1lbnQucGFyZW50Tm9kZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtOTA5LDcgKzkwOSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgSFRN
TEVsCiAgICAgfQogCiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHJlbW92ZUlt
cGxpY2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlLCAmZWxlbWVudCwgbW9kZSwgZXh0cmFjdGVkU3R5
bGUpKQorICAgIGlmIChyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChzdHlsZSwgZWxlbWVu
dCwgbW9kZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAogICAg
IGlmICghZWxlbWVudC5pc0Nvbm5lY3RlZCgpKQpAQCAtOTE3LDc2ICs5MTcsNzIgQEAgYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChFZGl0aW5nU3R5
bGUqIHN0eWxlLCBIVE1MRWwKIAogICAgIC8vIElmIHRoZSBub2RlIHdhcyBjb252ZXJ0ZWQgdG8g
YSBzcGFuLCB0aGUgc3BhbiBtYXkgc3RpbGwgY29udGFpbiByZWxldmFudAogICAgIC8vIHN0eWxl
cyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUuZy4gPGIgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xk
Jz4pCi0gICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCAmZWxlbWVudCwgbW9kZSwgZXh0cmFj
dGVkU3R5bGUpKQorICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwgZWxlbWVudCwgbW9kZSwg
ZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBy
ZW1vdmVkOwogfQogICAgIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFu
T3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYgZWxlbSkKK3ZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRl
cyhIVE1MRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoaGFzTm9BdHRyaWJ1dGVPck9ubHlT
dHlsZUF0dHJpYnV0ZShlbGVtLCBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkpKQotICAgICAg
ICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworICAgIGlmIChoYXNOb0F0dHJp
YnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQsIFN0eWxlQXR0cmlidXRlU2hvdWxkQmVF
bXB0eSkpCisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwog
ICAgIGVsc2UgewotICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbkVsZW1lbnQgPSByZXBsYWNl
RWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhlbGVtKTsKLSAg
ICAgICAgQVNTRVJUKG5ld1NwYW5FbGVtZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3Rl
ZCgpKTsKLSAgICAgICAgZWxlbSA9IG5ld1NwYW5FbGVtZW50OworICAgICAgICBIVE1MRWxlbWVu
dCogbmV3U3BhbkVsZW1lbnQgPSByZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxk
cmVuQW5kQXR0cmlidXRlcygmZWxlbWVudCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3U3Bh
bkVsZW1lbnQsIG5ld1NwYW5FbGVtZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3RlZCgp
KTsKICAgICB9CiB9Ci0gICAgCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNp
dGx5U3R5bGVkRWxlbWVudChFZGl0aW5nU3R5bGUqIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVu
dCwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0
eWxlKQorCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxl
bWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVudCwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQogewotICAg
IEFTU0VSVChzdHlsZSk7CiAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkgewogICAgICAgICBB
U1NFUlQoIWV4dHJhY3RlZFN0eWxlKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNX
aXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudChlbGVtZW50KSB8fCBzdHlsZS0+Y29uZmxpY3RzV2l0
aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBzdHls
ZS5jb25mbGljdHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudCgmZWxlbWVudCkgfHwgc3R5bGUu
Y29uZmxpY3RzV2l0aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoJmVsZW1lbnQpOwogICAgIH0K
IAogICAgIEFTU0VSVChtb2RlID09IFJlbW92ZUlmTmVlZGVkIHx8IG1vZGUgPT0gUmVtb3ZlQWx3
YXlzKTsKLSAgICBpZiAoc3R5bGUtPmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZFbGVtZW50
KGVsZW1lbnQsIGV4dHJhY3RlZFN0eWxlLCBtb2RlID09IFJlbW92ZUFsd2F5cyA/IEVkaXRpbmdT
dHlsZTo6RXh0cmFjdE1hdGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRvTm90RXh0cmFjdE1h
dGNoaW5nU3R5bGUpKSB7CisgICAgaWYgKHN0eWxlLmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxl
T2ZFbGVtZW50KCZlbGVtZW50LCBleHRyYWN0ZWRTdHlsZSwgbW9kZSA9PSBSZW1vdmVBbHdheXMg
PyBFZGl0aW5nU3R5bGU6OkV4dHJhY3RNYXRjaGluZ1N0eWxlIDogRWRpdGluZ1N0eWxlOjpEb05v
dEV4dHJhY3RNYXRjaGluZ1N0eWxlKSkgewogICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJlbW92
ZUlmV2l0aG91dEF0dHJpYnV0ZXMoZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAogICAgIC8vIHVuaWNvZGUtYmlkaSBhbmQgZGlyZWN0aW9uIGFyZSBwdXNoZWQgZG93biBz
ZXBhcmF0ZWx5IHNvIGRvbid0IHB1c2ggZG93biB3aXRoIG90aGVyIHN0eWxlcwogICAgIFZlY3Rv
cjxRdWFsaWZpZWROYW1lPiBhdHRyaWJ1dGVzOwotICAgIGlmICghc3R5bGUtPmV4dHJhY3RDb25m
bGljdGluZ0ltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoZWxlbWVudCwgZXh0cmFjdGVkU3R5bGUg
PyBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiA6IEVkaXRpbmdTdHlsZTo6
RG9Ob3RQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24sCi0gICAgICAgIGV4dHJhY3RlZFN0eWxlLCBh
dHRyaWJ1dGVzLCBtb2RlID09IFJlbW92ZUFsd2F5cyA/IEVkaXRpbmdTdHlsZTo6RXh0cmFjdE1h
dGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRvTm90RXh0cmFjdE1hdGNoaW5nU3R5bGUpKQor
ICAgIGlmICghc3R5bGUuZXh0cmFjdENvbmZsaWN0aW5nSW1wbGljaXRTdHlsZU9mQXR0cmlidXRl
cygmZWxlbWVudCwgZXh0cmFjdGVkU3R5bGUgPyBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGlu
Z0RpcmVjdGlvbiA6IEVkaXRpbmdTdHlsZTo6RG9Ob3RQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24s
CisgICAgICAgIGV4dHJhY3RlZFN0eWxlLCBhdHRyaWJ1dGVzLCBtb2RlID09IFJlbW92ZUFsd2F5
cyA/IEVkaXRpbmdTdHlsZTo6RXh0cmFjdE1hdGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRv
Tm90RXh0cmFjdE1hdGNoaW5nU3R5bGUpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpCiAgICAgICAgIHJlbW92
ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKTsKIAotICAgIGlmIChpc0VtcHR5Rm9u
dFRhZyhlbGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNw
YW4oZWxlbWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVu
dCk7CisgICAgaWYgKGlzRW1wdHlGb250VGFnKCZlbGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCisgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUs
IEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUsIEVkaXRp
bmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVD
U1NTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVudCwgSW5saW5l
U3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQogewot
ICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgaWYgKG1vZGUg
PT0gUmVtb3ZlTm9uZSkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5l
U3R5bGVPZkVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBzdHlsZS5jb25mbGljdHNX
aXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoJmVsZW1lbnQpOwogCiAgICAgUmVmUHRyPE11dGFibGVT
dHlsZVByb3BlcnRpZXM+IG5ld0lubGluZVN0eWxlOwotICAgIGlmICghc3R5bGUtPmNvbmZsaWN0
c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50LCBuZXdJbmxpbmVTdHlsZSwgZXh0cmFj
dGVkU3R5bGUpKQorICAgIGlmICghc3R5bGUuY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVt
ZW50KCZlbGVtZW50LCBuZXdJbmxpbmVTdHlsZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkKICAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOwogICAgIGVsc2UKLSAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxl
LT5hc1RleHQoKSk7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0
ciwgbmV3SW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKIAogICAgIGlmIChpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oJmVsZW1lbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhUTUxFbGVtZW50
KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5l
U3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSogbm9kZSkKK0hUTUxFbGVtZW50KiBBcHBs
eVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMTAzNyw3ICsxMDMzLDcgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSYgbm9kZSwgRWRpdGluZ1N0
eWxlKiBzdHkKICAgICBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkKG5ld0lubGluZVN0eWxlLmdldCgp
LCBub2RlLCBub2RlLCBEb05vdEFkZFN0eWxlZEVsZW1lbnQpOwogfQogCi12b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqIHN0
eWxlLCBOb2RlKiB0YXJnZXROb2RlKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25J
bmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSogdGFyZ2V0Tm9k
ZSkKIHsKICAgICBIVE1MRWxlbWVudCogaGlnaGVzdEFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9y
V2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUoc3R5bGUsIHRhcmdldE5vZGUpOwogICAgIGlmICgh
aGlnaGVzdEFuY2VzdG9yKQpAQCAtMTA4OSw3ICsxMDg1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwg
Tm9kZSoKICAgICB9CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKEVk
aXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCkKIHsKICAgICBBU1NFUlQoc3RhcnQuaXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChlbmQu
aXNOb3ROdWxsKCkpOwpAQCAtMTI1NCw3ICsxMjUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6c3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXQKICAgICB1cGRhdGVTdGFydEVuZChuZXdTdGFydCwgcG9zaXRpb25BZnRlck5vZGUoZmlyc3RU
ZXh0Tm9kZSkpOwogfQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogc3R5bGUpCitib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEVk
aXRpbmdTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTUsNyArMTI5MSw3IEBAIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsCiAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpzdGFy
dE5vZGUpOwogICAgIGF1dG8qIHN0YXJ0Q2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQoKTsKICAg
ICBBU1NFUlQoc3RhcnRDaGlsZCk7Ci0gICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygmcHJldmlv
dXNFbGVtZW50LCAmZWxlbWVudCk7CisgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91
c0VsZW1lbnQsIGVsZW1lbnQpOwogCiAgICAgaW50IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA9IHN0
YXJ0Q2hpbGQtPmNvbXB1dGVOb2RlSW5kZXgoKTsKICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVu
dCA9IHN0YXJ0Tm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0T2Zmc2V0QWRqdXN0
bWVudCA6IDA7CkBAIC0xMzI3LDcgKzEzMjMsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpt
ZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAog
ICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqZW5kTm9kZSk7CiAgICAgTm9k
ZSogbmV4dENoaWxkID0gbmV4dEVsZW1lbnQuZmlyc3RDaGlsZCgpOwogCi0gICAgbWVyZ2VJZGVu
dGljYWxFbGVtZW50cygmZWxlbWVudCwgJm5leHRFbGVtZW50KTsKKyAgICBtZXJnZUlkZW50aWNh
bEVsZW1lbnRzKGVsZW1lbnQsIG5leHRFbGVtZW50KTsKIAogICAgIGJvb2wgc2hvdWxkVXBkYXRl
U3RhcnQgPSBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kTm9kZTsKICAgICBpbnQgZW5kT2Zm
c2V0ID0gbmV4dENoaWxkID8gbmV4dENoaWxkLT5jb21wdXRlTm9kZUluZGV4KCkgOiBuZXh0RWxl
bWVudC5jb3VudENoaWxkTm9kZXMoKTsKQEAgLTEzNTksMTMgKzEzNTUsMTMgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChOb2RlJiBzdGFydE5v
ZGUsIE5vZGUmIGVuZE4KICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVu
dC0+cHJldmlvdXNTaWJsaW5nKCk7CiAKICAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxp
bmctPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LCAq
bmV4dFNpYmxpbmcpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQucHRy
KCksIGRvd25jYXN0PEVsZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSk7CisgICAgICAgIG1lcmdl
SWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgZG93bmNhc3Q8RWxlbWVudD4oKm5leHRTaWJsaW5n
KSk7CiAKICAgICBpZiAoaXM8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSAmJiBwcmV2
aW91c1NpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICBhdXRvKiBtZXJnZWRF
bGVtZW50ID0gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2libGluZygpOwogICAgICAgICBBU1NFUlQo
bWVyZ2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0
eWxlKCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoKnByZXZpb3VzU2libGluZywgKm1lcmdlZEVs
ZW1lbnQpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhkb3duY2FzdDxFbGVt
ZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCBkb3duY2FzdDxFbGVtZW50PihtZXJnZWRFbGVt
ZW50KSk7CisgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGRvd25jYXN0PEVsZW1l
bnQ+KCpwcmV2aW91c1NpYmxpbmcpLCBkb3duY2FzdDxFbGVtZW50PigqbWVyZ2VkRWxlbWVudCkp
OwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgY2FsbCB1cGRhdGVT
dGFydEVuZCBpZiB0aGUgc3RhcnQgb3IgZW5kIHdhcyBpbiB0aGUgbm9kZQpAQCAtMTM3MywyMyAr
MTM2OSwyMSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhF
bGVtZW50KE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTgogICAgIC8vIFZpc2libGVTZWxlY3Rp
b246OnZhbGlkYXRlKCkuCiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5
bGUoY29uc3QgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hhbmdlLCBIVE1MRWxlbWVudCogYmxvY2spCit2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiBz
dHlsZUNoYW5nZSwgSFRNTEVsZW1lbnQmIGJsb2NrKQogewogICAgIEFTU0VSVChzdHlsZUNoYW5n
ZS5jc3NTdHlsZSgpKTsKICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGxlZ2FjeSBzdHlsZXMgaGVy
ZS4gVGhvc2Ugc3R5bGVzLCBsaWtlIDxCPiBhbmQgPEk+LCBvbmx5IGFwcGx5IGZvcgogICAgIC8v
IGlubGluZSBjb250ZW50LgotICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgU3RyaW5nIGNzc1N0eWxlID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS0+YXNUZXh0
KCk7CiAgICAgU3RyaW5nQnVpbGRlciBjc3NUZXh0OwogICAgIGNzc1RleHQuYXBwZW5kKGNzc1N0
eWxlKTsKLSAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBkZWNsID0gYmxvY2stPmlubGlu
ZVN0eWxlKCkpIHsKKyAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBkZWNsID0gYmxvY2su
aW5saW5lU3R5bGUoKSkgewogICAgICAgICBpZiAoIWNzc1N0eWxlLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNzc1RleHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIGNzc1RleHQuYXBwZW5kKGRlY2wt
PmFzVGV4dCgpKTsKICAgICB9Ci0gICAgc2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVBdHRy
LCBjc3NUZXh0LnRvU3RyaW5nKCkpOworICAgIHNldE5vZGVBdHRyaWJ1dGUoJmJsb2NrLCBzdHls
ZUF0dHIsIGNzc1RleHQudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnQs
IE5vZGUmIGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgYWRkU3R5bGVkRWxlbWVudCkKQEAgLTE1MTgs
OSArMTUxMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhO
b2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAgICAgUG9zaXRpb24gbmV3U3Rh
cnQgPSBzdGFydDsKICAgICBQb3NpdGlvbiBuZXdFbmQgPSBlbmQ7CiAKLSAgICBWZWN0b3I8UmVm
UHRyPFRleHQ+PiB0ZXh0Tm9kZXM7CisgICAgVmVjdG9yPFJlZjxUZXh0Pj4gdGV4dE5vZGVzOwog
ICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZCgq
bm9kZSk7IHRleHROb2RlOyB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
ZygqdGV4dE5vZGUpKQotICAgICAgICB0ZXh0Tm9kZXMuYXBwZW5kKHRleHROb2RlKTsKKyAgICAg
ICAgdGV4dE5vZGVzLmFwcGVuZCgqdGV4dE5vZGUpOwogCiAgICAgZm9yIChhdXRvJiBjaGlsZFRl
eHQgOiB0ZXh0Tm9kZXMpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IGNoaWxkVGV4dC0+bmV4dFNp
YmxpbmcoKTsKQEAgLTE1MjksOSArMTUyMyw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6Ompv
aW5DaGlsZFRleHROb2RlcyhOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAg
ICAgCiAgICAgICAgIFRleHQmIG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5leHQpOwogICAg
ICAgICBpZiAoc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IgJiYgbmV4dCA9PSBzdGFydC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgICAgICBu
ZXdTdGFydCA9IFBvc2l0aW9uKGNoaWxkVGV4dC5nZXQoKSwgY2hpbGRUZXh0LT5sZW5ndGgoKSAr
IHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAgIG5ld1N0YXJ0ID0g
UG9zaXRpb24oY2hpbGRUZXh0LnB0cigpLCBjaGlsZFRleHQtPmxlbmd0aCgpICsgc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBpZiAoZW5kLmFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIG5leHQgPT0gZW5kLmNvbnRhaW5l
ck5vZGUoKSkKLSAgICAgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGNoaWxkVGV4dC5nZXQoKSwg
Y2hpbGRUZXh0LT5sZW5ndGgoKSArIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAg
ICAgICAgICBuZXdFbmQgPSBQb3NpdGlvbihjaGlsZFRleHQucHRyKCksIGNoaWxkVGV4dC0+bGVu
Z3RoKCkgKyBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBTdHJpbmcgdGV4
dFRvTW92ZSA9IG5leHRUZXh0LmRhdGEoKTsKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGNo
aWxkVGV4dCwgY2hpbGRUZXh0LT5sZW5ndGgoKSwgdGV4dFRvTW92ZSk7CiAgICAgICAgIHJlbW92
ZU5vZGUobmV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgK
aW5kZXggMjdmYWU2Njc0N2M1MzU1YjUzZTIwZDc1MWQzZWJkYmE1MWJjNWNiMC4uNDA5ZmNjZjBk
N2QyMjRkMWM3NzRkN2E4MzA1YzQzZGY4ZDdhODhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuaApAQCAtNzUsMjcgKzc1LDI3IEBAIHByaXZhdGU6CiAKICAg
ICAvLyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBib29sIGlzU3R5bGVkSW5saW5lRWxlbWVu
dFRvUmVtb3ZlKEVsZW1lbnQqKSBjb25zdDsKLSAgICBib29sIHNob3VsZEFwcGx5SW5saW5lU3R5
bGVUb1J1bihFZGl0aW5nU3R5bGUqLCBOb2RlKiBydW5TdGFydCwgTm9kZSogcGFzdEVuZE5vZGUp
OwotICAgIHZvaWQgcmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0
eWxlKiwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5FbmQsIE5vZGUq
IHBhc3RFbmROb2RlKTsKLSAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRp
dGluZ1N0eWxlKiwgSFRNTEVsZW1lbnQmLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3Zl
SWZOZWVkZWQsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUgPSBudWxscHRyKTsKLSAgICBp
bmxpbmUgYm9vbCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHls
ZSogc3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50KSB7cmV0dXJuIHJlbW92ZUlubGluZVN0eWxl
RnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZU5vbmUpO30KLSAgICB2b2lkIHJlcGxh
Y2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComKTsKLSAg
ICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KEVkaXRpbmdTdHlsZSosIEhUTUxF
bGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRT
dHlsZSk7Ci0gICAgYm9vbCByZW1vdmVDU1NTdHlsZShFZGl0aW5nU3R5bGUqLCBIVE1MRWxlbWVu
dCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxl
KiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOwotICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5j
ZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Cisg
ICAgYm9vbCBzaG91bGRBcHBseUlubGluZVN0eWxlVG9SdW4oRWRpdGluZ1N0eWxlJiwgTm9kZSog
cnVuU3RhcnQsIE5vZGUqIHBhc3RFbmROb2RlKTsKKyAgICB2b2lkIHJlbW92ZUNvbmZsaWN0aW5n
SW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSYsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQs
IFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2RlKiBwYXN0RW5kTm9kZSk7CisgICAgYm9vbCByZW1v
dmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYsIEhUTUxFbGVtZW50JiwgSW5s
aW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUlmTmVlZGVkLCBFZGl0aW5nU3R5bGUqIGV4dHJh
Y3RlZFN0eWxlID0gbnVsbHB0cik7CisgICAgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5l
U3R5bGVGcm9tRWxlbWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVu
dCkge3JldHVybiByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LCBS
ZW1vdmVOb25lKTt9CisgICAgdm9pZCByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0
dHJpYnV0ZXMoSFRNTEVsZW1lbnQmKTsKKyAgICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRF
bGVtZW50KEVkaXRpbmdTdHlsZSYsIEhUTUxFbGVtZW50JiwgSW5saW5lU3R5bGVSZW1vdmFsTW9k
ZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSk7CisgICAgYm9vbCByZW1vdmVDU1NTdHls
ZShFZGl0aW5nU3R5bGUmLCBIVE1MRWxlbWVudCYsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBS
ZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOwor
ICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHls
ZShFZGl0aW5nU3R5bGUmLCBOb2RlKik7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9QdXNo
RG93bihOb2RlJiwgRWRpdGluZ1N0eWxlKik7Ci0gICAgdm9pZCBwdXNoRG93bklubGluZVN0eWxl
QXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Ci0gICAgdm9pZCByZW1vdmVJbmxpbmVT
dHlsZShFZGl0aW5nU3R5bGUqICwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kKTsKKyAgICB2b2lkIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKEVkaXRpbmdT
dHlsZSYsIE5vZGUqKTsKKyAgICB2b2lkIHJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYs
IGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgYm9vbCBu
b2RlRnVsbHlTZWxlY3RlZChFbGVtZW50JiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKSBjb25zdDsKICAgICBib29sIG5vZGVGdWxseVVuc2VsZWN0ZWQoRWxlbWVu
dCYsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7CiAK
ICAgICAvLyBzdHlsZS1hcHBsaWNhdGlvbiBoZWxwZXJzCi0gICAgdm9pZCBhcHBseUJsb2NrU3R5
bGUoRWRpdGluZ1N0eWxlKik7CisgICAgdm9pZCBhcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxl
Jik7CiAgICAgdm9pZCBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSop
OwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqKTsKLSAgICB2b2lkIGZp
eFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRv
Tm9kZVJhbmdlKEVkaXRpbmdTdHlsZSosIE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZE5v
ZGUpOwotICAgIHZvaWQgYWRkQmxvY2tTdHlsZShjb25zdCBTdHlsZUNoYW5nZSYsIEhUTUxFbGVt
ZW50Kik7CisgICAgdm9pZCBhcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYpOworICAgIHZv
aWQgZml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYsIGNvbnN0IFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CisgICAgdm9pZCBhcHBseUlubGluZVN0
eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlJiwgTm9kZSYgc3RhcnROb2RlLCBOb2RlKiBwYXN0
RW5kTm9kZSk7CisgICAgdm9pZCBhZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiwgSFRN
TEVsZW1lbnQmKTsKICAgICB2b2lkIGFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxl
KiwgTm9kZSYgc3RhcnQsIE5vZGUmIGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgPSBBZGRTdHlsZWRF
bGVtZW50KTsKICAgICBQb3NpdGlvbiBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdl
KE5vZGUmLCBSZWZQdHI8Tm9kZT4mIGR1bW15RWxlbWVudCk7CiAgICAgdm9pZCBhcHBseUlubGlu
ZVN0eWxlQ2hhbmdlKE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTm9kZSwgU3R5bGVDaGFuZ2Um
LCBFQWRkU3R5bGVkRWxlbWVudCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCk7CiAgICAgdm9pZCBzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0RWxlbWVudEF0
RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7Ci0gICAgYm9v
bCBzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqKTsKKyAgICBi
b29sIHNob3VsZFNwbGl0VGV4dEVsZW1lbnQoRWxlbWVudCosIEVkaXRpbmdTdHlsZSYpOwogICAg
IGJvb2wgaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbik7CiAgICAgYm9vbCBtZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG1lcmdlRW5k
V2l0aE5leHRJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpOwpAQCAtMTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiBlbnVtIFNob3VsZFN0eWxlQXR0
cmlidXRlQmVFbXB0eSB7IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRyaWJ1
dGVTaG91bGRCZUVtcHR5IH07CiBib29sIGlzRW1wdHlGb250VGFnKGNvbnN0IEVsZW1lbnQqLCBT
aG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkgPSBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkp
OwogYm9vbCBpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsKLWJvb2wgaXNTdHls
ZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqKTsKK2Jvb2wg
aXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQmKTsK
IFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChEb2N1bWVudCYpOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGFjNmEzZWNmZmFkNmFlNzUzZDBkOWQ3MjZhZTYxN2E3
ODVjZDUyZmIuLmQ0MDdiMGY4ZjJlNWY2YTJhMGZmZjU1YWUxNDhiZGViNTE3YzYzZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01
Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCIK
ICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRl
ICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCkBAIC01ODIsMTAgKzU4MSwxMCBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmROb2RlKFJlZjxOb2RlPiYmIG5vZGUsIFJlZjxDb250
YWluZXJOb2RlPiYmIHBhcgogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGVuZE5vZGVD
b21tYW5kOjpjcmVhdGUoV1RGTW92ZShwYXJlbnQpLCBXVEZNb3ZlKG5vZGUpLCBlZGl0aW5nQWN0
aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5J
blJhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
Cit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYg
bm9kZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxO
b2RlPj4gY2hpbGRyZW47Ci0gICAgTm9kZSogY2hpbGQgPSBub2RlLT50cmF2ZXJzZVRvQ2hpbGRB
dChmcm9tKTsKKyAgICBOb2RlKiBjaGlsZCA9IG5vZGUudHJhdmVyc2VUb0NoaWxkQXQoZnJvbSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbTsgY2hpbGQgJiYgaSA8IHRvOyBpKyssIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CiAKQEAgLTY2NSwxNCArNjY0LDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0
RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIFBhc3NSZWZQdHI8CiAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRFbGVtZW50Q29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQs
IGF0Q2hpbGQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bWVyZ2VJZGVudGlj
YWxFbGVtZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+IHBycEZpcnN0LCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IHBycFNlY29uZCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2Fs
RWxlbWVudHMoRWxlbWVudCYgZmlyc3QsIEVsZW1lbnQmIHNlY29uZCkKIHsKLSAgICBSZWZQdHI8
RWxlbWVudD4gZmlyc3QgPSBwcnBGaXJzdDsKLSAgICBSZWZQdHI8RWxlbWVudD4gc2Vjb25kID0g
cHJwU2Vjb25kOwotICAgIEFTU0VSVCghZmlyc3QtPmlzRGVzY2VuZGFudE9mKHNlY29uZC5nZXQo
KSkgJiYgc2Vjb25kICE9IGZpcnN0KTsKLSAgICBpZiAoZmlyc3QtPm5leHRTaWJsaW5nKCkgIT0g
c2Vjb25kKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUoc2Vjb25kKTsKLSAgICAgICAgaW5zZXJ0Tm9k
ZUFmdGVyKCpzZWNvbmQsICpmaXJzdCk7CisgICAgUmVmPEVsZW1lbnQ+IHByb3RlY3RlZEZpcnN0
ID0gZmlyc3Q7CisgICAgUmVmPEVsZW1lbnQ+IHByb3RlY3RlZFNlY29uZCA9IHNlY29uZDsKKyAg
ICBBU1NFUlQoIWZpcnN0LT5pc0Rlc2NlbmRhbnRPZigmc2Vjb25kKSAmJiAmc2Vjb25kICE9ICZm
aXJzdCk7CisgICAgaWYgKGZpcnN0Lm5leHRTaWJsaW5nKCkgIT0gJnNlY29uZCkgeworICAgICAg
ICByZW1vdmVOb2RlKCZzZWNvbmQpOworICAgICAgICBpbnNlcnROb2RlQWZ0ZXIoc2Vjb25kLCBm
aXJzdCk7CiAgICAgfQogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKE1lcmdlSWRlbnRpY2Fs
RWxlbWVudHNDb21tYW5kOjpjcmVhdGUoZmlyc3QsIHNlY29uZCkpOwogfQpAQCAtNzI3LDIzICs3
MjYsMjIgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5wdXRUZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQKICAgICAgICAgc2V0RW5kaW5nU2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoc3RhcnRJbmRleCwg
c2NvcGUuZ2V0KCkpLCB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChzdGFydEluZGV4ICsgbGVuZ3Ro
LCBzY29wZS5nZXQoKSkpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0
VGV4dEludG9Ob2RlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmIHRleHQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRUZXh0SW50
b05vZGUoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7
CiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgdGV4dCwg
ZWRpdGluZ0FjdGlvbigpKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0
ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgY291bnQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVUZXh0RnJvbU5v
ZGUoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUo
bm9kZSwgb2Zmc2V0LCBjb3VudCwgZWRpdGluZ0FjdGlvbigpKSk7CiB9CiAKLXZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlKFBhc3NSZWZQdHI8VGV4dD4gcHJwTm9k
ZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFRleHQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZShU
ZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcm
IHJlcGxhY2VtZW50VGV4dCkKIHsKLSAgICBSZWZQdHI8VGV4dD4gbm9kZShwcnBOb2RlKTsKLSAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpjcmVh
dGUoV1RGTW92ZShub2RlKSwgb2Zmc2V0LCBjb3VudCkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZzZXQsIGNv
dW50KSk7CiAgICAgaWYgKCFyZXBsYWNlbWVudFRleHQuaXNFbXB0eSgpKQotICAgICAgICBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUoV1RG
TW92ZShub2RlKSwgb2Zmc2V0LCByZXBsYWNlbWVudFRleHQsIGVkaXRpbmdBY3Rpb24oKSkpOwor
ICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
OjpjcmVhdGUobm9kZSwgb2Zmc2V0LCByZXBsYWNlbWVudFRleHQsIGVkaXRpbmdBY3Rpb24oKSkp
OwogfQogCiBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4
dEluTm9kZShjb25zdCBTdHJpbmcmIHRleHQpCkBAIC03NTQsNyArNzUyLDcgQEAgUG9zaXRpb24g
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VTZWxlY3RlZFRleHRJbk5vZGUoY29uc3QgU3Ry
aW5nJiB0ZXh0KQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFJlZlB0cjxUZXh0
PiB0ZXh0Tm9kZSA9IHN0YXJ0LmNvbnRhaW5lclRleHQoKTsKLSAgICByZXBsYWNlVGV4dEluTm9k
ZSh0ZXh0Tm9kZSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVuZC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCB0ZXh0KTsKKyAg
ICByZXBsYWNlVGV4dEluTm9kZSgqdGV4dE5vZGUsIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgLSBzdGFydC5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSwgdGV4dCk7CiAKICAgICByZXR1cm4gUG9zaXRpb24odGV4dE5vZGUuZ2V0KCksIHN0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpICsgdGV4dC5sZW5ndGgoKSk7CiB9CkBAIC03Njks
MTMgKzc2NywxMyBAQCBzdGF0aWMgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IGNvcHlN
YXJrZXJzKGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TQogICAgIHJldHVybiBtYXJrZXJz
OwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNl
cnZpbmdNYXJrZXJzKFBhc3NSZWZQdHI8VGV4dD4gcHJwTm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpCit2b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFRleHQm
IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYgcmVw
bGFjZW1lbnRUZXh0KQogewotICAgIFJlZlB0cjxUZXh0PiBub2RlKHBycE5vZGUpOworICAgIFJl
ZjxUZXh0PiBwcm90ZWN0ZWROb2RlKG5vZGUpOwogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ciYgbWFya2VyQ29udHJvbGxlciA9IGRvY3VtZW50KCkubWFya2VycygpOwotICAgIGF1dG8gbWFy
a2VycyA9IGNvcHlNYXJrZXJzKG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBub2RlLCBvZmZzZXQsIG5vZGUsIG9mZnNldCArIGNvdW50KSwg
RG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSkpOworICAgIGF1dG8gbWFya2VycyA9IGNvcHlN
YXJrZXJzKG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1
bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgY291bnQpLCBEb2N1bWVudE1h
cmtlcjo6QWxsTWFya2VycygpKSk7CiAgICAgcmVwbGFjZVRleHRJbk5vZGUobm9kZSwgb2Zmc2V0
LCBjb3VudCwgcmVwbGFjZW1lbnRUZXh0KTsKLSAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0g
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBub2RlLCBvZmZzZXQsIG5vZGUsIG9mZnNldCArIHJl
cGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7CisgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJm5vZGUsIG9mZnNldCwgJm5vZGUsIG9mZnNldCArIHJl
cGxhY2VtZW50VGV4dC5sZW5ndGgoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBtYXJrZXIgOiBt
YXJrZXJzKQogI2lmIFBMQVRGT1JNKElPUykKICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRN
YXJrZXIobmV3UmFuZ2UuZ2V0KCksIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigp
LCBtYXJrZXIuYWx0ZXJuYXRpdmVzKCksIG1hcmtlci5tZXRhZGF0YSgpKTsKQEAgLTg0MiwxNCAr
ODQwLDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm8KICAgICAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHNlbGVjdGlvbiwgc21hcnRE
ZWxldGUsIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUsIHJlcGxhY2UsIGV4cGFuZEZvclNwZWNpYWxF
bGVtZW50cywgc2FuaXRpemVNYXJrdXApKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cmVtb3ZlQ1NTUHJvcGVydHkoUGFzc1JlZlB0cjxTdHlsZWRFbGVtZW50PiBlbGVtZW50LCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3Zl
Tm9kZUF0dHJpYnV0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGUpCiB7Ci0gICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgZWxlbWVudCwgcHJvcGVydHkpKTsKLX0KLQotdm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSkKLXsKLSAgICBz
ZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSwgbnVsbEF0b20pOworICAgIHNldE5v
ZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIGF0dHJpYnV0ZSwgbnVsbEF0b20pOwogfQogCiB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0cmlidXRlKFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQpAQCAtOTA2LDE0ICs4OTksMTIgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKICAgICAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKGRvd25jYXN0PFRleHQ+KG5vZGUpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgIHJlYmFsYW5jZVdo
aXRlc3BhY2VPblRleHRTdWJzdHJpbmcoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLCBwb3NpdGlvbi5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
OwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25U
ZXh0U3Vic3RyaW5nKFBhc3NSZWZQdHI8VGV4dD4gcHJwVGV4dE5vZGUsIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdo
aXRlc3BhY2VPblRleHRTdWJzdHJpbmcoVGV4dCYgdGV4dE5vZGUsIGludCBzdGFydE9mZnNldCwg
aW50IGVuZE9mZnNldCkKIHsKLSAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBwcnBUZXh0Tm9k
ZTsKLQotICAgIFN0cmluZyB0ZXh0ID0gdGV4dE5vZGUtPmRhdGEoKTsKKyAgICBTdHJpbmcgdGV4
dCA9IHRleHROb2RlLmRhdGEoKTsKICAgICBBU1NFUlQoIXRleHQuaXNFbXB0eSgpKTsKIAogICAg
IC8vIFNldCB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSB0byBkZWZpbmUgdGhlIGV4dGVudCBvZiB0
aGUgd2hpdGVzcGFjZSBzdXJyb3VuZGluZyB0ZXh0W29mZnNldF0uCkBAIC05MjksOCArOTIwLDgg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1
YnN0cmluZyhQYXNzUmVmUHRyPFRleHQ+IHAKICAgICBpZiAoIWxlbmd0aCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVVcHN0cmVhbVBvcyhQb3NpdGlvbih0
ZXh0Tm9kZS5nZXQoKSwgdXBzdHJlYW0pKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZURv
d25zdHJlYW1Qb3MoUG9zaXRpb24odGV4dE5vZGUuZ2V0KCksIGRvd25zdHJlYW0pKTsKKyAgICBW
aXNpYmxlUG9zaXRpb24gdmlzaWJsZVVwc3RyZWFtUG9zKFBvc2l0aW9uKCZ0ZXh0Tm9kZSwgdXBz
dHJlYW0pKTsKKyAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZURvd25zdHJlYW1Qb3MoUG9zaXRp
b24oJnRleHROb2RlLCBkb3duc3RyZWFtKSk7CiAgICAgCiAgICAgU3RyaW5nIHN0cmluZyA9IHRl
eHQuc3Vic3RyaW5nKHVwc3RyZWFtLCBsZW5ndGgpOwogICAgIFN0cmluZyByZWJhbGFuY2VkU3Ry
aW5nID0gc3RyaW5nV2l0aFJlYmFsYW5jZWRXaGl0ZXNwYWNlKHN0cmluZywKQEAgLTk0MCw3ICs5
MzEsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25U
ZXh0U3Vic3RyaW5nKFBhc3NSZWZQdHI8VGV4dD4gcAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRW5kT2ZQYXJhZ3JhcGgodmlz
aWJsZURvd25zdHJlYW1Qb3MpIHx8ICh1bnNpZ25lZClkb3duc3RyZWFtID09IHRleHQubGVuZ3Ro
KCkpOwogICAgIAogICAgIGlmIChzdHJpbmcgIT0gcmViYWxhbmNlZFN0cmluZykKLSAgICAgICAg
cmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycyhXVEZNb3ZlKHRleHROb2RlKSwgdXBz
dHJlYW0sIGxlbmd0aCwgcmViYWxhbmNlZFN0cmluZyk7CisgICAgICAgIHJlcGxhY2VUZXh0SW5O
b2RlUHJlc2VydmluZ01hcmtlcnModGV4dE5vZGUsIHVwc3RyZWFtLCBsZW5ndGgsIHJlYmFsYW5j
ZWRTdHJpbmcpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVz
cGFjZUF0UG9zaXRpb25Gb3JTcGxpdChQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC05NjYsOSArOTU3
LDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0
aW9uRm9yU3BsaXQoUG9zaXRpb24mIHBvc2l0aW8KICAgICBQb3NpdGlvbiBwcmV2aW91cyhwcmV2
aW91c1Zpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAgCiAgICAgaWYgKGRlcHJlY2F0
ZWRJc0NvbGxhcHNpYmxlV2hpdGVzcGFjZShwcmV2aW91c1Zpc2libGVQb3MuY2hhcmFjdGVyQWZ0
ZXIoKSkgJiYgaXM8VGV4dD4oKnByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkpICYmICFpczxIVE1M
QlJFbGVtZW50PigqcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSkpCi0gICAgICAgIHJlcGxhY2VU
ZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoZG93bmNhc3Q8VGV4dD4ocHJldmlvdXMuZGVwcmVj
YXRlZE5vZGUoKSksIHByZXZpb3VzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJy
ZWFraW5nU3BhY2VTdHJpbmcoKSk7CisgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vydmlu
Z01hcmtlcnMoZG93bmNhc3Q8VGV4dD4oKnByZXZpb3VzLmRlcHJlY2F0ZWROb2RlKCkpLCBwcmV2
aW91cy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5n
KCkpOwogICAgIGlmIChkZXByZWNhdGVkSXNDb2xsYXBzaWJsZVdoaXRlc3BhY2UodmlzaWJsZVBv
cy5jaGFyYWN0ZXJBZnRlcigpKSAmJiBpczxUZXh0PigqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSkgJiYgIWlzPEhUTUxCUkVsZW1lbnQ+KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkKLSAg
ICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyhkb3duY2FzdDxUZXh0Pihw
b3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJ
bk5vZGVQcmVzZXJ2aW5nTWFya2Vycyhkb3duY2FzdDxUZXh0PigqcG9zaXRpb24uZGVwcmVjYXRl
ZE5vZGUoKSksIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFr
aW5nU3BhY2VTdHJpbmcoKSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFs
YW5jZVdoaXRlc3BhY2UoKQpAQCAtOTgyLDE0ICs5NzMsMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZSgpCiAgICAgICAgIHJlYmFsYW5jZVdoaXRlc3Bh
Y2VBdChzZWxlY3Rpb24uZW5kKCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpk
ZWxldGVJbnNpZ25pZmljYW50VGV4dChQYXNzUmVmUHRyPFRleHQ+IHRleHROb2RlLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRl
SW5zaWduaWZpY2FudFRleHQoVGV4dCYgdGV4dE5vZGUsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQpCiB7Ci0gICAgaWYgKCF0ZXh0Tm9kZSB8fCBzdGFydCA+PSBlbmQpCisgICAgaWYgKHN0
YXJ0ID49IGVuZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlv
dXQoKTsKIAotICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRleHROb2RlLT5yZW5kZXJl
cigpOworICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRleHROb2RlLnJlbmRlcmVyKCk7
CiAgICAgaWYgKCF0ZXh0UmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAwNywxMSAr
OTk4LDExIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRU
ZXh0KFBhc3NSZWZQdHI8VGV4dD4gdGV4dE5vZGUsIHVuCiAKICAgICBpZiAoIWJveCkgewogICAg
ICAgICAvLyB3aG9sZSB0ZXh0IG5vZGUgaXMgZW1wdHkKLSAgICAgICAgcmVtb3ZlTm9kZSh0ZXh0
Tm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoJnRleHROb2RlKTsKICAgICAgICAgcmV0dXJuOyAg
ICAKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE5vZGUtPmxlbmd0aCgp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRleHROb2RlLmxlbmd0aCgpOwogICAgIGlmIChzdGFy
dCA+PSBsZW5ndGggfHwgZW5kID4gbGVuZ3RoKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwMzQs
NyArMTAyNSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNh
bnRUZXh0KFBhc3NSZWZQdHI8VGV4dD4gdGV4dE5vZGUsIHVuCiAgICAgICAgICAgICBnYXBTdGFy
dCA9IHN0ZDo6bWF4KGdhcFN0YXJ0LCBzdGFydCk7CiAgICAgICAgICAgICBnYXBFbmQgPSBzdGQ6
Om1pbihnYXBFbmQsIGVuZCk7CiAgICAgICAgICAgICBpZiAoc3RyLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgIHN0ciA9IHRleHROb2RlLT5kYXRhKCkuc3Vic3RyaW5nKHN0YXJ0LCBlbmQgLSBz
dGFydCk7CisgICAgICAgICAgICAgICAgc3RyID0gdGV4dE5vZGUuZGF0YSgpLnN1YnN0cmluZyhz
dGFydCwgZW5kIC0gc3RhcnQpOwogICAgICAgICAgICAgLy8gcmVtb3ZlIHRleHQgaW4gdGhlIGdh
cAogICAgICAgICAgICAgc3RyLnJlbW92ZShnYXBTdGFydCAtIHN0YXJ0IC0gcmVtb3ZlZCwgZ2Fw
TGVuKTsKICAgICAgICAgICAgIHJlbW92ZWQgKz0gZ2FwTGVuOwpAQCAtMTA3MSwxNyArMTA2Miwx
NyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dChj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0CiAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMoc3Rh
cnQsIGVuZCkgPj0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPFJlZlB0cjxUZXh0
Pj4gbm9kZXM7CisgICAgVmVjdG9yPFJlZjxUZXh0Pj4gbm9kZXM7CiAgICAgZm9yIChOb2RlKiBu
b2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChpczxUZXh0Pigqbm9kZSkpCi0gICAgICAgICAg
ICBub2Rlcy5hcHBlbmQoZG93bmNhc3Q8VGV4dD4obm9kZSkpOworICAgICAgICAgICAgbm9kZXMu
YXBwZW5kKGRvd25jYXN0PFRleHQ+KCpub2RlKSk7CiAgICAgICAgIGlmIChub2RlID09IGVuZC5k
ZXByZWNhdGVkTm9kZSgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgZm9yIChh
dXRvJiB0ZXh0Tm9kZSA6IG5vZGVzKSB7Ci0gICAgICAgIGludCBzdGFydE9mZnNldCA9IHRleHRO
b2RlID09IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPyBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpIDogMDsKLSAgICAgICAgaW50IGVuZE9mZnNldCA9IHRleHROb2RlID09IGVuZC5kZXBy
ZWNhdGVkTm9kZSgpID8gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgOiBzdGF0aWNfY2Fz
dDxpbnQ+KHRleHROb2RlLT5sZW5ndGgoKSk7CisgICAgICAgIGludCBzdGFydE9mZnNldCA9IHRl
eHROb2RlLnB0cigpID09IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgPyBzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpIDogMDsKKyAgICAgICAgaW50IGVuZE9mZnNldCA9IHRleHROb2RlLnB0
cigpID09IGVuZC5kZXByZWNhdGVkTm9kZSgpID8gZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0
KCkgOiBzdGF0aWNfY2FzdDxpbnQ+KHRleHROb2RlLT5sZW5ndGgoKSk7CiAgICAgICAgIGRlbGV0
ZUluc2lnbmlmaWNhbnRUZXh0KHRleHROb2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKICAg
ICB9CiB9CkBAIC0xMTQ3LDcgKzExMzgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpy
ZW1vdmVQbGFjZWhvbGRlckF0KGNvbnN0IFBvc2l0aW9uJiBwKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGRlbGV0ZVRleHRGcm9tTm9kZShkb3duY2FzdDxUZXh0PihwLmFuY2hv
ck5vZGUoKSksIHAub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIDEpOworICAgIGRlbGV0ZVRleHRG
cm9tTm9kZShkb3duY2FzdDxUZXh0PigqcC5hbmNob3JOb2RlKCkpLCBwLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpLCAxKTsKIH0KIAogUmVmPEhUTUxFbGVtZW50PiBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6aW5zZXJ0TmV3RGVmYXVsdFBhcmFncmFwaEVsZW1lbnRBdChjb25zdCBQb3NpdGlvbiYgcG9z
aXRpb24pCkBAIC0xMzM4LDcgKzEzMjksNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpj
bGVhbnVwQWZ0ZXJEZWxldGlvbihWaXNpYmxlUG9zaXRpb24gZGVzdGluYXRpb24pCiAgICAgICAg
ICAgICBpZiAodGV4dE5vZGUubGVuZ3RoKCkgPT0gMSkKICAgICAgICAgICAgICAgICByZW1vdmVO
b2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0Tm9kZSwgcG9zaXRpb24uZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSwgMSk7CisgICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRl
eHROb2RlLCBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTE2NTIsNyArMTY0Myw3IEBAIGJvb2wgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmJyZWFrT3V0T2ZFbXB0eU1haWxCbG9ja3F1b3RlZFBhcmFncmFwaCgpCiAgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSB0ZXh0Tm9kZS5wYXJlbnROb2RlKCk7CiAgICAgICAg
IC8vIFRoZSBwcmVzZXJ2ZWQgbmV3bGluZSBtdXN0IGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUg
bm9kZSwgc2luY2Ugb3RoZXJ3aXNlIHRoZSBwcmV2aW91cwogICAgICAgICAvLyBwYXJhZ3JhcGgg
d291bGQgYmUgcXVvdGVkLCBhbmQgd2UgdmVyaWZpZWQgdGhhdCBpdCB3YXNuJ3QgYWJvdmUuCi0g
ICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dE5vZGUsIDAsIDEpOworICAgICAgICBkZWxl
dGVUZXh0RnJvbU5vZGUodGV4dE5vZGUsIDAsIDEpOwogICAgICAgICBwcnVuZShwYXJlbnROb2Rl
KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuaAppbmRleCBjYTQ5NzQ0YWVlOGJlYjgxNDJmMWM3Mzk2MWJmNDZlOGY5Y2EyNzQ3Li5hYmUx
YzhiOWRjZTQ0OGY4NDVkNzgxNDhiZWYxYjIwN2UyOGY3ZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCkBAIC0xNDIsNyArMTQyLDcgQEAgcHJv
dGVjdGVkOgogICAgIHZvaWQgcmVtb3ZlU3R5bGVkRWxlbWVudChSZWY8RWxlbWVudD4mJik7CiAg
ICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oYm9vbCBzbWFydERlbGV0ZSA9IGZhbHNlLCBib29sIG1l
cmdlQmxvY2tzQWZ0ZXJEZWxldGUgPSB0cnVlLCBib29sIHJlcGxhY2UgPSBmYWxzZSwgYm9vbCBl
eHBhbmRGb3JTcGVjaWFsRWxlbWVudHMgPSB0cnVlLCBib29sIHNhbml0aXplTWFya3VwID0gdHJ1
ZSk7CiAgICAgdm9pZCBkZWxldGVTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJv
b2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1
ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0g
dHJ1ZSwgYm9vbCBzYW5pdGl6ZU1hcmt1cCA9IHRydWUpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVUZXh0RnJvbU5vZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBjb3VudCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShUZXh0JiwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCk7CiAgICAgdm9pZCBpbnB1dFRleHQoY29uc3Qg
U3RyaW5nJiwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQgPSBmYWxzZSk7CiAgICAgYm9vbCBpc1Jl
bW92YWJsZUJsb2NrKGNvbnN0IE5vZGUqKTsKICAgICB2b2lkIGluc2VydE5vZGVBZnRlcihSZWY8
Tm9kZT4mJiwgTm9kZSYgcmVmQ2hpbGQpOwpAQCAtMTUxLDE3ICsxNTEsMTYgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgaW5zZXJ0Tm9kZUJlZm9yZShSZWY8Tm9kZT4mJiwgTm9kZSYgcmVmQ2hpbGQs
IFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlID0gRG9Ob3RBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSk7CiAgICAgdm9pZCBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoYm9v
bCB1c2VEZWZhdWx0UGFyYWdyYXBoRWxlbWVudCA9IGZhbHNlLCBib29sIHBhc3RlQmxvY2txdXRv
ZUludG9VbnF1b3RlZEFyZWEgPSBmYWxzZSk7CiAgICAgdm9pZCBpbnNlcnRMaW5lQnJlYWsoKTsK
LSAgICB2b2lkIGluc2VydFRleHRJbnRvTm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBv
ZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCk7Ci0gICAgdm9pZCBtZXJnZUlkZW50aWNhbEVsZW1l
bnRzKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQdHI8RWxlbWVudD4pOworICAgIHZvaWQg
aW5zZXJ0VGV4dEludG9Ob2RlKFRleHQmLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYg
dGV4dCk7CisgICAgdm9pZCBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKEVsZW1lbnQmLCBFbGVtZW50
Jik7CiAgICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlKCk7CiAgICAgdm9pZCByZWJhbGFuY2VX
aGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRpb24mKTsKLSAgICB2b2lkIHJlYmFsYW5jZVdoaXRlc3Bh
Y2VPblRleHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQg
ZW5kT2Zmc2V0KTsKKyAgICB2b2lkIHJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmco
VGV4dCYsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCk7CiAgICAgdm9pZCBwcmVwYXJl
V2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdChQb3NpdGlvbiYpOwogICAgIGJvb2wgY2FuUmVi
YWxhbmNlKGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7CiAgICAgYm9vbCBzaG91bGRSZWJhbGFuY2VM
ZWFkaW5nV2hpdGVzcGFjZUZvcihjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICB2b2lkIHJlbW92
ZUNTU1Byb3BlcnR5KFBhc3NSZWZQdHI8U3R5bGVkRWxlbWVudD4sIENTU1Byb3BlcnR5SUQpOwot
ICAgIHZvaWQgcmVtb3ZlTm9kZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdl
KFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKKyAgICB2b2lk
IHJlbW92ZU5vZGVBdHRyaWJ1dGUoRWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSk7CisgICAgdm9pZCByZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRy
PE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIEhUTUxFbGVtZW50KiByZXBsYWNlRWxlbWVu
dFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhQYXNzUmVmUHRyPEhUTUxF
bGVtZW50Pik7CiAgICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKFBhc3NSZWZQ
dHI8Tm9kZT4sIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlID0gRG9Ob3RBc3N1
bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CkBAIC0xNjksOSArMTY4LDkgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgbW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9OZXdQYXJlbnQoTm9kZSosIE5vZGUq
IHBhc3RMYXN0Tm9kZVRvTW92ZSwgUGFzc1JlZlB0cjxFbGVtZW50PiBwcnBOZXdQYXJlbnQpOwog
ICAgIHZvaWQgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbFByZXNlcnZpbmdDaGlsZHJlbihQ
b3NpdGlvbiYsIE5vZGUmKTsKICAgICB2b2lkIHBydW5lKFBhc3NSZWZQdHI8Tm9kZT4pOwotICAg
IHZvaWQgcmVwbGFjZVRleHRJbk5vZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0
LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOworICAgIHZv
aWQgcmVwbGFjZVRleHRJbk5vZGUoVGV4dCYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291
bnQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsKICAgICBQb3NpdGlvbiByZXBsYWNl
U2VsZWN0ZWRUZXh0SW5Ob2RlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcmVwbGFjZVRleHRJ
bk5vZGVQcmVzZXJ2aW5nTWFya2VycyhQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CisgICAgdm9p
ZCByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFRleHQmLCB1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CiAgICAg
UG9zaXRpb24gcG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYpOwogICAgIHZv
aWQgc2V0Tm9kZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgIHZvaWQgc3Bs
aXRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQdHI8Tm9kZT4gYXRDaGlsZCk7
CkBAIC0xNzksNyArMTc4LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50KFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCk7CiAgICAg
dm9pZCB3cmFwQ29udGVudHNJbkR1bW15U3BhbihFbGVtZW50Jik7CiAKLSAgICB2b2lkIGRlbGV0
ZUluc2lnbmlmaWNhbnRUZXh0KFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQpOworICAgIHZvaWQgZGVsZXRlSW5zaWduaWZpY2FudFRleHQoVGV4dCYsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOwogICAgIHZvaWQgZGVsZXRlSW5zaWduaWZpY2FudFRl
eHQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICB2b2lk
IGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShjb25zdCBQb3NpdGlvbiYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5k
LmNwcAppbmRleCAzOWUwNDcwOGQxYjZiYzk1ZjU3NGZjNzlhMWJjMmZlMjFkMDk5MzYxLi5kZWY4
YWZkOTg4MThjYzNmYjc3ZjZlNTJmZDdmOGI0MmQ5ZTgzYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTMyLDIy
ICszMiwxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURlbGV0ZUZyb21UZXh0Tm9kZUNv
bW1hbmQ6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoUmVmUHRyPFRleHQ+JiYgbm9kZSwgdW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQor
RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZChSZWY8
VGV4dD4mJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFZGl0QWN0aW9u
IGVkaXRpbmdBY3Rpb24pCiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgp
LCBlZGl0aW5nQWN0aW9uKQotICAgICwgbV9ub2RlKG5vZGUpCisgICAgLCBtX25vZGUoV1RGTW92
ZShub2RlKSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1fY291bnQoY291bnQpCiB7
Ci0gICAgQVNTRVJUKG1fbm9kZSk7CiAgICAgQVNTRVJUKG1fb2Zmc2V0IDw9IG1fbm9kZS0+bGVu
Z3RoKCkpOwogICAgIEFTU0VSVChtX29mZnNldCArIG1fY291bnQgPD0gbV9ub2RlLT5sZW5ndGgo
KSk7CiB9CiAKIHZvaWQgRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0g
ICAgQVNTRVJUKG1fbm9kZSk7Ci0KLSAgICBpZiAoIWlzRWRpdGFibGVOb2RlKCptX25vZGUpKQor
ICAgIGlmICghaXNFZGl0YWJsZU5vZGUobV9ub2RlKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byByZXN1bHQgPSBtX25vZGUtPnN1YnN0cmluZ0RhdGEobV9vZmZzZXQsIG1fY291bnQpOwpA
QCAtNTksOCArNTYsNiBAQCB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHko
KQogCiB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0gICAg
QVNTRVJUKG1fbm9kZSk7Ci0KICAgICBpZiAoIW1fbm9kZS0+aGFzRWRpdGFibGVTdHlsZSgpKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTcwLDcgKzY1LDcgQEAgdm9pZCBEZWxldGVGcm9tVGV4dE5v
ZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogI2lmbmRlZiBOREVCVUcKIHZvaWQgRGVsZXRlRnJvbVRl
eHROb2RlQ29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQog
ewotICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX25vZGUuZ2V0KCksIG5vZGVzKTsKKyAgICBh
ZGROb2RlQW5kRGVzY2VuZGFudHMobV9ub2RlLnB0cigpLCBub2Rlcyk7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21t
YW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQu
aAppbmRleCA5MGM1MTQ1ZDM3Zjc4NDQxMTRiODFkOTM0YWEzZTdhOTNjOThhNTcyLi5iODFjNjJk
MzdlZTViOGVlMWQxZTk5NTMwYzQxMTFjMWY3ZWU5ZmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaApAQCAtMzMsMTMgKzMzLDEz
IEBAIGNsYXNzIFRleHQ7CiAKIGNsYXNzIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQgOiBwdWJs
aWMgU2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZD4gY3JlYXRlKFJlZlB0cjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgY291bnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiA9IEVkaXRBY3Rp
b25EZWxldGUpCisgICAgc3RhdGljIFJlZjxEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kPiBjcmVh
dGUoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uID0gRWRpdEFjdGlvbkRlbGV0ZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoV1RGTW92ZShu
b2RlKSwgb2Zmc2V0LCBjb3VudCwgZWRpdGluZ0FjdGlvbikpOwogICAgIH0KIAogcHJvdGVjdGVk
OgotICAgIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQoUmVmUHRyPFRleHQ+JiYsIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgY291bnQsIEVkaXRBY3Rpb24pOworICAgIERlbGV0ZUZyb21UZXh0
Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQs
IEVkaXRBY3Rpb24pOwogCiBwcml2YXRlOgogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwpA
QCAtNDksNyArNDksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0Tm9kZXNJbkNvbW1hbmQoSGFz
aFNldDxOb2RlKj4mKSBvdmVycmlkZTsKICNlbmRpZgogICAgIAotICAgIFJlZlB0cjxUZXh0PiBt
X25vZGU7CisgICAgUmVmPFRleHQ+IG1fbm9kZTsKICAgICB1bnNpZ25lZCBtX29mZnNldDsKICAg
ICB1bnNpZ25lZCBtX2NvdW50OwogICAgIFN0cmluZyBtX3RleHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA3YTc1ZTY5OGZl
OTNhZDJjNTU5OWI4MDAyOTg4ZTlkNGMyMWQxYzhjLi5jNWNlZTcxNDJhZWM0NDNjYzBiN2ZhYjhk
MzQwNjY3YzQ5NWNmZWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTQ0NCwxMyArNDQ0LDEzIEBAIHN0YXRpYyB2b2lkIHVw
ZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwoTm9kZSogbm9kZSwgaW50IG9mZnNldCwgaW50IGNv
dW50LCBQb3NpCiAgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChvZmZzZXQpOwogfQogCi12
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRy
PFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpCit2b2lkIERlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShUZXh0JiBub2RlLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogewogICAgIC8vIEZJWE1FOiBVcGRhdGUgdGhlIGVu
ZHBvaW50cyBvZiB0aGUgcmFuZ2UgYmVpbmcgZGVsZXRlZC4KLSAgICB1cGRhdGVQb3NpdGlvbkZv
clRleHRSZW1vdmFsKG5vZGUuZ2V0KCksIG9mZnNldCwgY291bnQsIG1fZW5kaW5nUG9zaXRpb24p
OwotICAgIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwobm9kZS5nZXQoKSwgb2Zmc2V0LCBj
b3VudCwgbV9sZWFkaW5nV2hpdGVzcGFjZSk7Ci0gICAgdXBkYXRlUG9zaXRpb25Gb3JUZXh0UmVt
b3ZhbChub2RlLmdldCgpLCBvZmZzZXQsIGNvdW50LCBtX3RyYWlsaW5nV2hpdGVzcGFjZSk7Ci0g
ICAgdXBkYXRlUG9zaXRpb25Gb3JUZXh0UmVtb3ZhbChub2RlLmdldCgpLCBvZmZzZXQsIGNvdW50
LCBtX2Rvd25zdHJlYW1FbmQpOworICAgIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwoJm5v
ZGUsIG9mZnNldCwgY291bnQsIG1fZW5kaW5nUG9zaXRpb24pOworICAgIHVwZGF0ZVBvc2l0aW9u
Rm9yVGV4dFJlbW92YWwoJm5vZGUsIG9mZnNldCwgY291bnQsIG1fbGVhZGluZ1doaXRlc3BhY2Up
OworICAgIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwoJm5vZGUsIG9mZnNldCwgY291bnQs
IG1fdHJhaWxpbmdXaGl0ZXNwYWNlKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFs
KCZub2RlLCBvZmZzZXQsIGNvdW50LCBtX2Rvd25zdHJlYW1FbmQpOwogICAgIAogICAgIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUobm9kZSwgb2Zmc2V0LCBjb3VudCk7
CiB9CkBAIC00OTUsNyArNDk1LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVHZW5lcmFsRGVsZXRlKCkKICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gc3RhcnROb2RlQ2FyZXRN
YXhPZmZzZXQgJiYgaXM8VGV4dD4oKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgVGV4dCYgdGV4dCA9
IGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpOwogICAgICAgICBpZiAodGV4dC5sZW5ndGgoKSA+
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE5vZGVDYXJldE1heE9mZnNldCkpCi0gICAgICAg
ICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIHN0YXJ0Tm9kZUNhcmV0TWF4T2Zmc2V0LCB0
ZXh0Lmxlbmd0aCgpIC0gc3RhcnROb2RlQ2FyZXRNYXhPZmZzZXQpOworICAgICAgICAgICAgZGVs
ZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0YXJ0Tm9kZUNhcmV0TWF4T2Zmc2V0LCB0ZXh0Lmxlbmd0
aCgpIC0gc3RhcnROb2RlQ2FyZXRNYXhPZmZzZXQpOwogICAgIH0KIAogICAgIGlmIChzdGFydE9m
ZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZygqc3RhcnROb2RlKSkgewpAQCAtNTEyLDkgKzUx
Miw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgICAgICBpZiAoaXM8VGV4dD4oKnN0YXJ0Tm9kZSkpIHsKICAgICAgICAgICAgICAg
ICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKICAgICAgICAgICAg
ICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKnN0YXJ0Tm9kZSk7Ci0gICAgICAgICAg
ICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCBzdGFydE9mZnNldCwgbV9kb3duc3RyZWFt
RW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CisgICAgICAgICAg
ICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSAtIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKHN0YXJ0Tm9k
ZSwgc3RhcnRPZmZzZXQsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICByZW1vdmVDaGlsZHJlbkluUmFuZ2UoKnN0YXJ0Tm9kZSwgc3Rh
cnRPZmZzZXQsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAg
ICAgICAgICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gbV91cHN0cmVhbVN0YXJ0OwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC01MzIsMTQgKzUzMiwxNCBAQCB2b2lkIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICAgICAgaWYgKGlzPFRl
eHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhh
dCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAgICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRvd25j
YXN0PFRleHQ+KCpub2RlKTsKLSAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRl
eHQsIHN0YXJ0T2Zmc2V0LCB0ZXh0Lmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOworICAgICAgICAg
ICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwgdGV4dC5sZW5ndGgo
KSAtIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG5vZGUg
PSBzdGFydE5vZGUtPnRyYXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChzdGFydE5vZGUgPT0gbV91cHN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpICYmIGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgICAgICBUZXh0JiB0
ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSk7Ci0g
ICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIDAsIG1fdXBzdHJlYW1FbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUo
dGV4dCwgMCwgbV91cHN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgLy8gaGFuZGxlIGRlbGV0aW5nIGFsbCBub2RlcyB0aGF0
IGFyZSBjb21wbGV0ZWx5IHNlbGVjdGVkCkBAIC01NzMsNyArNTczLDcgQEAgdm9pZCBEZWxldGVT
ZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAgICAgICAg
ICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAgICAgICAg
ICAgICAgICAgIFRleHQmIHRleHQgPSBkb3duY2FzdDxUZXh0PigqbV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHQsIDAsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9t
Tm9kZSh0ZXh0LCAwLCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY2hpbGRy
ZW4gb2YgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgdGhhdCBjb21lIGFmdGVyIG1f
dXBzdHJlYW1TdGFydC4KICAgICAgICAgICAgICAgICAvLyBEb24ndCB0cnkgdG8gcmVtb3ZlIGNo
aWxkcmVuIGlmIG1fdXBzdHJlYW1TdGFydCB3YXMgaW5zaWRlIG1fZG93bnN0cmVhbUVuZC5kZXBy
ZWNhdGVkTm9kZSgpCkBAIC01OTAsNyArNTkwLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG4tPmNvbXB1dGVOb2RlSW5k
ZXgoKSArIDE7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVt
b3ZlQ2hpbGRyZW5JblJhbmdlKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpLCBvZmZz
ZXQsIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKCptX2Rvd25zdHJlYW1FbmQuZGVwcmVj
YXRlZE5vZGUoKSwgb2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fZG93bnN0cmVhbUVuZCA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSwgb2Zmc2V0
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC02MDUsMTIgKzYwNSwxMiBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwV2hpdGVzcGFjZSgpCiAgICAgaWYg
KG1fbGVhZGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fbGVhZGluZ1doaXRlc3BhY2Uu
aXNSZW5kZXJlZENoYXJhY3RlcigpICYmIGlzPFRleHQ+KCptX2xlYWRpbmdXaGl0ZXNwYWNlLmRl
cHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4
dD4oKm1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAgIEFTU0VS
VCghdGV4dE5vZGUucmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigpLT5zdHlsZSgpLmNv
bGxhcHNlV2hpdGVTcGFjZSgpKTsKLSAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5n
TWFya2VycygmdGV4dE5vZGUsIG1fbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRl
eHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyh0ZXh0Tm9kZSwgbV9sZWFkaW5nV2hpdGVzcGFjZS5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwog
ICAgIH0KICAgICBpZiAobV90cmFpbGluZ1doaXRlc3BhY2UuaXNOb3ROdWxsKCkgJiYgIW1fdHJh
aWxpbmdXaGl0ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxUZXh0PigqbV90cmFp
bGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgVGV4dCYgdGV4dE5v
ZGUgPSBkb3duY2FzdDxUZXh0PigqbV90cmFpbGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZE5vZGUo
KSk7CiAgICAgICAgIEFTU0VSVCghdGV4dE5vZGUucmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS5yZW5k
ZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKLSAgICAgICAgcmVwbGFjZVRl
eHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycygmdGV4dE5vZGUsIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7
CisgICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnModGV4dE5vZGUsIG1f
dHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFr
aW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCmluZGV4IGMxN2Y2ZGVlYThmZWIzNzBjNjljNmUz
OGJiNWRiMmJiNWE2ZWQ0MTguLjZkOGE3YzIyNjM2YzRmZGExNjM3MjAwNWNmMjlhYTVhODZjNjU2
OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5oCkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclRyYW5zaWVudFN0
YXRlKCk7CiAgICAgdm9pZCBtYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRh
YmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcygpOwogICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVm
UHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlVGV4
dEZyb21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkLCB1bnNpZ25lZCkgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCkg
b3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVSZWR1bmRhbnRCbG9ja3MoKTsKIAogICAgIC8vIFRo
aXMgZnVuY3Rpb24gcHJvdmlkZXMgYWNjZXNzIHRvIG9yaWdpbmFsIHN0cmluZyBhZnRlciB0aGUg
Y29ycmVjdGlvbiBoYXMgYmVlbiBkZWxldGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nQWxsSW5PbmUuY3BwCmluZGV4IDY1MzJlMTQ3OTFmODIyYTIwYTA4YmZiYzI1NDlkY2MyMjNl
ODI0MzEuLjQyODM5ZTMxYzUwZTM5M2U2MTI0YjI5NjY4Mjc2OTI0MGNkYjA4ZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKQEAgLTU1LDcgKzU1LDYgQEAK
ICNpbmNsdWRlIDxNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8
TW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcD4KICNpbmNsdWRlIDxNb3ZlU2VsZWN0aW9uQ29t
bWFuZC5jcHA+Ci0jaW5jbHVkZSA8UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcD4KICNpbmNs
dWRlIDxSZW1vdmVGb3JtYXRDb21tYW5kLmNwcD4KICNpbmNsdWRlIDxSZW1vdmVOb2RlQ29tbWFu
ZC5jcHA+CiAjaW5jbHVkZSA8UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3Bw
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IGJlMTlmOWM0ZDky
MjE1MzBhMjJkMzQ3ZmIwYzQzZDFiOTQxZjQyNDcuLmRiN2U2NmQ4OGQ5MjI1NmRhZTYwMmNjYjgy
MjU4MzMzNDhlNmYxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAK
QEAgLTcwMSwxMyArNzAxLDEzIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUFkZGVk
QnlOb2RlKE5vZGUqIG5vZGUpCiAgICAgcmVtb3ZlRXF1aXZhbGVudFByb3BlcnRpZXMoKm5vZGVT
dHlsZSk7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUNvbmZsaWN0aW5nV2l0
aFN0eWxlT2ZOb2RlKE5vZGUqIG5vZGUpCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVD
b25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlJiBub2RlKQogewotICAgIGlmICghbm9kZSB8
fCAhbm9kZS0+cGFyZW50Tm9kZSgpIHx8ICFtX211dGFibGVTdHlsZSkKKyAgICBpZiAoIW5vZGUu
cGFyZW50Tm9kZSgpIHx8ICFtX211dGFibGVTdHlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcmVudFN0eWxlID0gY29weVByb3BlcnRp
ZXNGcm9tQ29tcHV0ZWRTdHlsZShub2RlLT5wYXJlbnROb2RlKCksIEVkaXRpbmdQcm9wZXJ0aWVz
SW5FZmZlY3QpOwotICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5vZGVTdHlsZSA9IEVkaXRpbmdT
dHlsZTo6Y3JlYXRlKG5vZGUsIEVkaXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3QpOworICAgIFJlZlB0
cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJlbnRTdHlsZSA9IGNvcHlQcm9wZXJ0aWVzRnJv
bUNvbXB1dGVkU3R5bGUobm9kZS5wYXJlbnROb2RlKCksIEVkaXRpbmdQcm9wZXJ0aWVzSW5FZmZl
Y3QpOworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IG5vZGVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6
Y3JlYXRlKCZub2RlLCBFZGl0aW5nUHJvcGVydGllc0luRWZmZWN0KTsKICAgICBub2RlU3R5bGUt
PnJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKCpwYXJlbnRTdHlsZSk7CiAKICAgICBNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSA9IG5vZGVTdHlsZS0+c3R5bGUoKTsKQEAgLTExMzMsMTUg
KzExMzMsMTUgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQo
U3R5bGVkRWxlbWVudCogZWxlbWVudCwgQ1NTUHJvcGVydHkKICAgICB9CiB9CiAKLXN0YXRpYyBp
bmxpbmUgYm9vbCBlbGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVj
bChjb25zdCBIVE1MRWxlbWVudEVxdWl2YWxlbnQqIGVxdWl2YWxlbnQsIGNvbnN0IFN0eWxlZEVs
ZW1lbnQqIGVsZW1lbnQsCitzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudE1hdGNoZXNBbmRQcm9w
ZXJ0eUlzTm90SW5JbmxpbmVTdHlsZURlY2woY29uc3QgSFRNTEVsZW1lbnRFcXVpdmFsZW50KiBl
cXVpdmFsZW50LCBjb25zdCBTdHlsZWRFbGVtZW50JiBlbGVtZW50LAogICAgIEVkaXRpbmdTdHls
ZTo6Q1NTUHJvcGVydHlPdmVycmlkZU1vZGUgbW9kZSwgRWRpdGluZ1N0eWxlJiBzdHlsZSkKIHsK
LSAgICBpZiAoIWVxdWl2YWxlbnQtPm1hdGNoZXMoKmVsZW1lbnQpKQorICAgIGlmICghZXF1aXZh
bGVudC0+bWF0Y2hlcyhlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICht
b2RlICE9IEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMgJiYgZXF1aXZhbGVudC0+cHJvcGVy
dHlFeGlzdHNJblN0eWxlKHN0eWxlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuICFlbGVtZW50LT5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFsZW50LT5wcm9wZXJ0eUV4aXN0
c0luU3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+aW5saW5lU3R5bGUoKSkuZ2V0
KCkpOworICAgIHJldHVybiAhZWxlbWVudC5pbmxpbmVTdHlsZSgpIHx8ICFlcXVpdmFsZW50LT5w
cm9wZXJ0eUV4aXN0c0luU3R5bGUoRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC5pbmxpbmVT
dHlsZSgpKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGll
cz4gZXh0cmFjdEVkaXRpbmdQcm9wZXJ0aWVzKGNvbnN0IFN0eWxlUHJvcGVydGllcyogc3R5bGUs
IEVkaXRpbmdTdHlsZTo6UHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQpA
QCAtMTE1OSwyNyArMTE1OSwyNyBAQCBzdGF0aWMgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRp
ZXM+IGV4dHJhY3RFZGl0aW5nUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcgogICAgIHJldHVy
biBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoc3R5bGUsIEFsbEVkaXRpbmdQcm9wZXJ0aWVzKTsKIH0K
IAotdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVu
dChTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlLCBQ
cm9wZXJ0aWVzVG9JbmNsdWRlIHByb3BlcnRpZXNUb0luY2x1ZGUpCit2b2lkIEVkaXRpbmdTdHls
ZTo6bWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQmIGVs
ZW1lbnQsIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUg
cHJvcGVydGllc1RvSW5jbHVkZSkKIHsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZUZy
b21SdWxlcyA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CiAgICAgc3R5bGVGcm9tUnVsZXMtPm1l
cmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKGVsZW1lbnQpOwogCi0gICAgaWYgKGVs
ZW1lbnQtPmlubGluZVN0eWxlKCkpCi0gICAgICAgIHN0eWxlRnJvbVJ1bGVzLT5tX211dGFibGVT
dHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3QoKmVsZW1lbnQtPmlubGluZVN0eWxlKCkp
OworICAgIGlmIChlbGVtZW50LmlubGluZVN0eWxlKCkpCisgICAgICAgIHN0eWxlRnJvbVJ1bGVz
LT5tX211dGFibGVTdHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3QoKmVsZW1lbnQuaW5s
aW5lU3R5bGUoKSk7CiAKICAgICBzdHlsZUZyb21SdWxlcy0+bV9tdXRhYmxlU3R5bGUgPSBleHRy
YWN0RWRpdGluZ1Byb3BlcnRpZXMoc3R5bGVGcm9tUnVsZXMtPm1fbXV0YWJsZVN0eWxlLmdldCgp
LCBwcm9wZXJ0aWVzVG9JbmNsdWRlKTsKICAgICBtZXJnZVN0eWxlKHN0eWxlRnJvbVJ1bGVzLT5t
X211dGFibGVTdHlsZS5nZXQoKSwgbW9kZSk7CiAKICAgICBmb3IgKGF1dG8mIGVxdWl2YWxlbnQg
OiBodG1sRWxlbWVudEVxdWl2YWxlbnRzKCkpIHsKICAgICAgICAgaWYgKGVsZW1lbnRNYXRjaGVz
QW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGVxdWl2YWxlbnQuZ2V0KCksIGVsZW1l
bnQsIG1vZGUsICp0aGlzKSkKLSAgICAgICAgICAgIGVxdWl2YWxlbnQtPmFkZFRvU3R5bGUoZWxl
bWVudCwgdGhpcyk7CisgICAgICAgICAgICBlcXVpdmFsZW50LT5hZGRUb1N0eWxlKCZlbGVtZW50
LCB0aGlzKTsKICAgICB9CiAKICAgICBmb3IgKGF1dG8mIGVxdWl2YWxlbnQgOiBodG1sQXR0cmli
dXRlRXF1aXZhbGVudHMoKSkgewogICAgICAgICBpZiAoZXF1aXZhbGVudC0+YXR0cmlidXRlTmFt
ZSgpID09IEhUTUxOYW1lczo6ZGlyQXR0cikKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBXZSBk
b24ndCB3YW50IHRvIGluY2x1ZGUgZGlyZWN0aW9uYWxpdHkKICAgICAgICAgaWYgKGVsZW1lbnRN
YXRjaGVzQW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGVxdWl2YWxlbnQuZ2V0KCks
IGVsZW1lbnQsIG1vZGUsICp0aGlzKSkKLSAgICAgICAgICAgIGVxdWl2YWxlbnQtPmFkZFRvU3R5
bGUoZWxlbWVudCwgdGhpcyk7CisgICAgICAgICAgICBlcXVpdmFsZW50LT5hZGRUb1N0eWxlKCZl
bGVtZW50LCB0aGlzKTsKICAgICB9CiB9CiAKQEAgLTEyMDQsNyArMTIwNCw3IEBAIFJlZjxFZGl0
aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6d3JhcHBpbmdTdHlsZUZvclNlcmlhbGl6YXRpb24oTm9k
ZSogY29udGV4dCwgYm9vCiAgICAgLy8gV2hlbiBub3QgYW5ub3RhdGluZyBmb3IgaW50ZXJjaGFu
Z2UsIHdlIG9ubHkgcHJlc2VydmUgaW5saW5lIHN0eWxlIGRlY2xhcmF0aW9ucy4KICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBjb250ZXh0OyBub2RlICYmICFub2RlLT5pc0RvY3VtZW50Tm9kZSgpOyBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50
Pigqbm9kZSkgJiYgIWlzTWFpbEJsb2NrcXVvdGUobm9kZSkpIHsKLSAgICAgICAgICAgIHdyYXBw
aW5nU3R5bGUtPm1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChkb3duY2FzdDxT
dHlsZWRFbGVtZW50Pihub2RlKSwgRWRpdGluZ1N0eWxlOjpEb05vdE92ZXJyaWRlVmFsdWVzLAor
ICAgICAgICAgICAgd3JhcHBpbmdTdHlsZS0+bWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0eWxlT2ZF
bGVtZW50KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCpub2RlKSwgRWRpdGluZ1N0eWxlOjpEb05v
dE92ZXJyaWRlVmFsdWVzLAogICAgICAgICAgICAgICAgIEVkaXRpbmdTdHlsZTo6RWRpdGluZ1By
b3BlcnRpZXNJbkVmZmVjdCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjYyLDEwICsxMjYyLDEw
IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJvcGVydGllcyog
c3R5bGUsIENTU1Byb3BlcnR5T3ZlcnJpZGVNCiAgICAgbV9mb250U2l6ZURlbHRhICs9IG9sZEZv
bnRTaXplRGVsdGE7CiB9CiAKLXN0YXRpYyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5
bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBy
dWxlc1RvSW5jbHVkZSkKK3N0YXRpYyBSZWY8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5bGVG
cm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCB1bnNpZ25lZCBydWxl
c1RvSW5jbHVkZSkKIHsKICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6
Y3JlYXRlKCk7Ci0gICAgZm9yIChhdXRvJiBtYXRjaGVkUnVsZSA6IGVsZW1lbnQtPnN0eWxlUmVz
b2x2ZXIoKS5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBydWxlc1RvSW5jbHVkZSkpIHsK
KyAgICBmb3IgKGF1dG8mIG1hdGNoZWRSdWxlIDogZWxlbWVudC5zdHlsZVJlc29sdmVyKCkuc3R5
bGVSdWxlc0ZvckVsZW1lbnQoJmVsZW1lbnQsIHJ1bGVzVG9JbmNsdWRlKSkgewogICAgICAgICBp
ZiAobWF0Y2hlZFJ1bGUtPmlzU3R5bGVSdWxlKCkpCiAgICAgICAgICAgICBzdHlsZS0+bWVyZ2VB
bmRPdmVycmlkZU9uQ29uZmxpY3Qoc3RhdGljX3BvaW50ZXJfY2FzdDxTdHlsZVJ1bGU+KG1hdGNo
ZWRSdWxlKS0+cHJvcGVydGllcygpKTsKICAgICB9CkBAIC0xMjczLDcgKzEyNzMsNyBAQCBzdGF0
aWMgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVs
ZW1lbnQoRWxlbWVudCogZWxlbQogICAgIHJldHVybiBzdHlsZTsKIH0KIAotdm9pZCBFZGl0aW5n
U3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVsZXMoU3R5bGVkRWxlbWVudCogZWxlbWVudCkKK3ZvaWQg
RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IHN0eWxlRnJvbU1hdGNoZWRS
dWxlcyA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwKICAgICAgICAg
U3R5bGVSZXNvbHZlcjo6QXV0aG9yQ1NTUnVsZXMgfCBTdHlsZVJlc29sdmVyOjpDcm9zc09yaWdp
bkNTU1J1bGVzKTsKQEAgLTEyODYsNyArMTI4Niw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgbV9tdXRhYmxlU3R5
bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXM7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbihTdHlsZWRFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKFN0
eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgbWVyZ2VTdHlsZUZyb21SdWxlcyhlbGVtZW50
KTsKIApAQCAtMTI5NCw3ICsxMjk0LDcgQEAgdm9pZCBFZGl0aW5nU3R5bGU6Om1lcmdlU3R5bGVG
cm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgLy8g
Rm9yIGV4YW1wbGU6IHN0eWxlPSJoZWlnaHQ6IDElOyBvdmVyZmxvdzogdmlzaWJsZTsiIGluIHF1
aXJrc21vZGUKICAgICAvLyBGSVhNRTogVGhlcmUgYXJlIG90aGVycyBsaWtlIHRoaXMsIHNlZSA8
cmRhcjovL3Byb2JsZW0vNTE5NTEyMz4gU2xhc2hkb3QgY29weS9wYXN0ZSBmaWRlbGl0eSBwcm9i
bGVtCiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGZyb21Db21wdXRlZFN0eWxl
ID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0gICAgQ29tcHV0ZWRTdHlsZUV4
dHJhY3RvciBjb21wdXRlZFN0eWxlKGVsZW1lbnQpOworICAgIENvbXB1dGVkU3R5bGVFeHRyYWN0
b3IgY29tcHV0ZWRTdHlsZSgmZWxlbWVudCk7CiAKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIHBy
b3BlcnR5Q291bnQgPSBtX211dGFibGVTdHlsZS0+cHJvcGVydHlDb3VudCgpOwpAQCAtMTMyMiw5
ICsxMzIyLDggQEAgc3RhdGljIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luU3R5bGUoTXV0YWJsZVN0
eWxlUHJvcGVydGllcyogc3R5bGVUb1JlbW92ZVByb3BlcnQKICAgICBzdHlsZVRvUmVtb3ZlUHJv
cGVydGllc0Zyb20tPnJlbW92ZVByb3BlcnRpZXNJblNldChwcm9wZXJ0aWVzVG9SZW1vdmUuZGF0
YSgpLCBwcm9wZXJ0aWVzVG9SZW1vdmUuc2l6ZSgpKTsKIH0KIAotdm9pZCBFZGl0aW5nU3R5bGU6
OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dChTdHlsZWRFbGVtZW50KiBlbGVtZW50LCBO
b2RlKiBjb250ZXh0KQordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5k
Q29udGV4dChTdHlsZWRFbGVtZW50JiBlbGVtZW50LCBOb2RlKiBjb250ZXh0KQogewotICAgIEFT
U0VSVChlbGVtZW50KTsKICAgICBpZiAoIW1fbXV0YWJsZVN0eWxlKQogICAgICAgICByZXR1cm47
CiAKQEAgLTEzNTMsNyArMTM1Miw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZy
b21SdWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgTm9kZSoKICAgICB9CiB9
CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0
eWxlKEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGll
c0luRWxlbWVudERlZmF1bHRTdHlsZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghbV9t
dXRhYmxlU3R5bGUgfHwgbV9tdXRhYmxlU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgKaW5kZXggMWNhMDcxMzVmNWY0MmRi
MWY2NGRjNzgwYjI2MDc5NTM0MjFmMDlmNi4uYzE3MTM4ZDQwMTdkMmU1YWEyNzRlNTg0NTY5N2E5
MzRiN2JhNjU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCkBAIC0xMjIs
NyArMTIyLDcgQEAgcHVibGljOgogICAgIFJlZjxFZGl0aW5nU3R5bGU+IGV4dHJhY3RBbmRSZW1v
dmVUZXh0RGlyZWN0aW9uKCk7CiAgICAgdm9pZCByZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKICAg
ICB2b2lkIHJlbW92ZVN0eWxlQWRkZWRCeU5vZGUoTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlU3R5
bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlKik7CisgICAgdm9pZCByZW1vdmVTdHls
ZUNvbmZsaWN0aW5nV2l0aFN0eWxlT2ZOb2RlKE5vZGUmKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVzKFQmKTsKICAgICB2b2lkIGNvbGxh
cHNlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKCk7CiAgICAgZW51bSBTaG91bGRJZ25vcmVUZXh0
T25seVByb3BlcnRpZXMgeyBJZ25vcmVUZXh0T25seVByb3BlcnRpZXMsIERvTm90SWdub3JlVGV4
dE9ubHlQcm9wZXJ0aWVzIH07CkBAIC0xNDcsMTAgKzE0NywxMCBAQCBwdWJsaWM6CiAgICAgZW51
bSBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSB7IE92ZXJyaWRlVmFsdWVzLCBEb05vdE92ZXJyaWRl
VmFsdWVzIH07CiAgICAgdm9pZCBtZXJnZUlubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1l
bnQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSA9IEFsbFBy
b3BlcnRpZXMpOwogICAgIHN0YXRpYyBSZWY8RWRpdGluZ1N0eWxlPiB3cmFwcGluZ1N0eWxlRm9y
U2VyaWFsaXphdGlvbihOb2RlKiBjb250ZXh0LCBib29sIHNob3VsZEFubm90YXRlKTsKLSAgICB2
b2lkIG1lcmdlU3R5bGVGcm9tUnVsZXMoU3R5bGVkRWxlbWVudCopOwotICAgIHZvaWQgbWVyZ2VT
dHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24oU3R5bGVkRWxlbWVudCopOwotICAgIHZvaWQg
cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KFN0eWxlZEVsZW1lbnQqLCBOb2RlKiBjb250
ZXh0KTsKLSAgICB2b2lkIHJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoRWxl
bWVudCopOworICAgIHZvaWQgbWVyZ2VTdHlsZUZyb21SdWxlcyhTdHlsZWRFbGVtZW50Jik7Cisg
ICAgdm9pZCBtZXJnZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbihTdHlsZWRFbGVtZW50
Jik7CisgICAgdm9pZCByZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVu
dCYsIE5vZGUqIGNvbnRleHQpOworICAgIHZvaWQgcmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERl
ZmF1bHRTdHlsZShFbGVtZW50Jik7CiAgICAgdm9pZCBmb3JjZUlubGluZSgpOwogICAgIGJvb2wg
Y29udmVydFBvc2l0aW9uU3R5bGUoKTsKICAgICBib29sIGlzRmxvYXRpbmcoKTsKQEAgLTE4Miw3
ICsxODIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZXh0cmFjdEZvbnRTaXplRGVsdGEoKTsKICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUcmlTdGF0ZSB0cmlTdGF0ZU9mU3R5bGUoVCYgc3R5bGVU
b0NvbXBhcmUsIFNob3VsZElnbm9yZVRleHRPbmx5UHJvcGVydGllcykgY29uc3Q7CiAgICAgYm9v
bCBjb25mbGljdHNXaXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoU3R5bGVkRWxlbWVudCosIFJlZlB0
cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiogbmV3SW5saW5lU3R5bGUsIEVkaXRpbmdTdHlsZSog
ZXh0cmFjdGVkU3R5bGUpIGNvbnN0OwotICAgIHZvaWQgbWVyZ2VJbmxpbmVBbmRJbXBsaWNpdFN0
eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQqLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSwgUHJv
cGVydGllc1RvSW5jbHVkZSk7CisgICAgdm9pZCBtZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVP
ZkVsZW1lbnQoU3R5bGVkRWxlbWVudCYsIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlLCBQcm9wZXJ0
aWVzVG9JbmNsdWRlKTsKICAgICB2b2lkIG1lcmdlU3R5bGUoY29uc3QgU3R5bGVQcm9wZXJ0aWVz
KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUpOwogCiAgICAgUmVmUHRyPE11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IG1fbXV0YWJsZVN0eWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
ZGVudE91dGRlbnRDb21tYW5kLmNwcAppbmRleCBmNGQ0Y2IzNTMxNDExZmExN2ZmNDNlYjk2Yzhm
MTJiMDBhNzIzY2JhLi4xNTYzN2Y4Y2U5NjMxY2EwZGFkOTkxY2M5ZDFhZGNmOTY3N2E0ODA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNwcApA
QCAtODMsOSArODMsOSBAQCBib29sIEluZGVudE91dGRlbnRDb21tYW5kOjp0cnlJbmRlbnRpbmdB
c0xpc3RJdGVtKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUAogICAgIG1vdmVQYXJhZ3Jh
cGhXaXRoQ2xvbmVzKHN0YXJ0LCBlbmQsIG5ld0xpc3QuZ2V0KCksIHNlbGVjdGVkTGlzdEl0ZW0u
Z2V0KCkpOwogCiAgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LmdldCgpLCBuZXdM
aXN0LmdldCgpKSkKLSAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91c0xpc3Qs
IG5ld0xpc3QpOworICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpwcmV2aW91c0xpc3Qs
ICpuZXdMaXN0KTsKICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhuZXdMaXN0LmdldCgpLCBuZXh0TGlz
dC5nZXQoKSkpCi0gICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMobmV3TGlzdCwgbmV4dExp
c3QpOworICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpuZXdMaXN0LCAqbmV4dExpc3Qp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5ZDI4OTRlM2UzNmM0YjRjMzdl
YjFiYjY3MGM1YmVmNmQ0YjFmMjI3Li42YzM3OWRkZGVhM2I1MmM3ZDNhZjBmNzUyNTg3NzVhMzBl
ODlkYmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0
Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0SW50b1Rl
eHROb2RlQ29tbWFuZC5jcHAKQEAgLTM4LDEzICszOCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6Okluc2VydEludG9UZXh0Tm9kZUNvbW1h
bmQoUmVmUHRyPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRl
eHQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK0luc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6
Okluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zm
c2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKICAgICA6
IFNpbXBsZUVkaXRDb21tYW5kKG5vZGUtPmRvY3VtZW50KCksIGVkaXRpbmdBY3Rpb24pCiAgICAg
LCBtX25vZGUoV1RGTW92ZShub2RlKSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAsIG1f
dGV4dCh0ZXh0KQogewotICAgIEFTU0VSVChtX25vZGUpOwogICAgIEFTU0VSVChtX29mZnNldCA8
PSBtX25vZGUtPmxlbmd0aCgpKTsKICAgICBBU1NFUlQoIW1fdGV4dC5pc0VtcHR5KCkpOwogfQpA
QCAtOTAsNyArODksNyBAQCB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBs
eSgpCiAKIHZvaWQgSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQo
SGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewotICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX25v
ZGUuZ2V0KCksIG5vZGVzKTsKKyAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9ub2RlLnB0cigp
LCBub2Rlcyk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaAppbmRleCA1Yjg4MjIyODhmYWE5MTQ3M2Q1NzlkNzRm
NTBkZTlkOTM0ZGIwNzMwLi4wZDE5MDVmZTg3MjZkM2Q3YTc5Yjk4NDNkNzJjNThjNzkzZmY4ZWRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydEludG9UZXh0Tm9kZUNv
bW1hbmQuaApAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBUZXh0OwogCiBjbGFzcyBJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShSZWZQdHI8VGV4
dD4mJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uID0gRWRpdEFjdGlvbkluc2VydCkKKyAgICBzdGF0aWMgUmVmPEluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShSZWY8VGV4dD4mJiBub2RlLCB1bnNpZ25lZCBv
ZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uID0gRWRp
dEFjdGlvbkluc2VydCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQoV1RGTW92ZShub2RlKSwgb2Zmc2V0LCB0ZXh0LCBlZGl0aW5n
QWN0aW9uKSk7CiAgICAgfQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3Ry
aW5nJiBpbnNlcnRlZFRleHQoKTsKIAogcHJvdGVjdGVkOgotICAgIEluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQoUmVmUHRyPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJp
bmcmIHRleHQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbik7CisgICAgSW5zZXJ0SW50b1RleHRO
b2RlQ29tbWFuZChSZWY8VGV4dD4mJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IGRvQXBwbHkoKSBvdmVycmlkZTsKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+Jikgb3ZlcnJpZGU7CiAjZW5kaWYKICAg
ICAKLSAgICBSZWZQdHI8VGV4dD4gbV9ub2RlOworICAgIFJlZjxUZXh0PiBtX25vZGU7CiAgICAg
dW5zaWduZWQgbV9vZmZzZXQ7CiAgICAgU3RyaW5nIG1fdGV4dDsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAppbmRleCBhZGQyY2Rm
NzA4N2I1ZGZjNDIzMTg0NWRhNjJlNDEwM2IzZTJmNTI1Li5lNDgyZmZlNzA0ZTJjYTk5Y2M5ZWEx
ODk5M2M2ZGI2NTZiZjJjYjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpbmVCcmVha0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIEluc2VydExp
bmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgQVNTRVJUKCF0ZXh0Tm9kZS5y
ZW5kZXJlcigpIHx8IHRleHROb2RlLnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNw
YWNlKCkpOwogICAgICAgICAgICAgLy8gRGVsZXRpbmcgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNl
IHdpbGwgcmVtb3ZlIHRleHROb2RlIGlmIGl0IGNvbnRhaW5zIG5vdGhpbmcgYnV0IGluc2lnbmlm
aWNhbnQgd2hpdGVzcGFjZS4KICAgICAgICAgICAgIGlmICh0ZXh0Tm9kZS5pc0Nvbm5lY3RlZCgp
KQotICAgICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSgmdGV4dE5vZGUsIDAsIG5vbkJy
ZWFraW5nU3BhY2VTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2Rl
KHRleHROb2RlLCAwLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgYXV0byBuYnNwTm9kZSA9IGRvY3VtZW50KCkuY3JlYXRlVGV4
dE5vZGUobm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICAgICAgICAgICAgICBhdXRvKiBu
YnNwTm9kZVB0ciA9IG5ic3BOb2RlLnB0cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAppbmRleCAzYWI5NjY1ZjBhOGIyOWZmNDk1OTI4NzBmY2FkMzg3
ZmVhNzUwODIyLi5lNDBjYjE4NzA1YzQ2YWZhZmMyYzMwODIxZDJkZTQ0NDk1ZDhkZWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApAQCAtNjksNyAr
NjksNyBAQCBSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW5kOjptZXJnZVdpdGhO
ZWlnaGJvcmluZ0xpc3RzKFBhc3NSZWZQdHI8SFRNTAogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4g
bGlzdCA9IHBhc3NlZExpc3Q7CiAgICAgRWxlbWVudCogcHJldmlvdXNMaXN0ID0gbGlzdC0+cHJl
dmlvdXNFbGVtZW50U2libGluZygpOwogICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3VzTGlz
dCwgbGlzdC5nZXQoKSkpCi0gICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNM
aXN0LCBsaXN0KTsKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygqcHJldmlvdXNMaXN0
LCAqbGlzdCk7CiAKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
NzksNyArNzksNyBAQCBSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW5kOjptZXJn
ZVdpdGhOZWlnaGJvcmluZ0xpc3RzKFBhc3NSZWZQdHI8SFRNTAogCiAgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBuZXh0TGlzdCA9IGRvd25jYXN0PEhUTUxFbGVtZW50PihzaWJsaW5nKTsKICAgICBp
ZiAoY2FuTWVyZ2VMaXN0cyhsaXN0LmdldCgpLCBuZXh0TGlzdC5nZXQoKSkpIHsKLSAgICAgICAg
bWVyZ2VJZGVudGljYWxFbGVtZW50cyhsaXN0LCBuZXh0TGlzdCk7CisgICAgICAgIG1lcmdlSWRl
bnRpY2FsRWxlbWVudHMoKmxpc3QsICpuZXh0TGlzdCk7CiAgICAgICAgIHJldHVybiBuZXh0TGlz
dDsKICAgICB9CiAgICAgcmV0dXJuIGxpc3Q7CkBAIC00MDEsNyArNDAxLDcgQEAgUmVmUHRyPEhU
TUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNp
YmxlUG9zaXRpb24mIG8KICAgICAgICAgcmV0dXJuIG1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMo
bGlzdEVsZW1lbnQpOwogCiAgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBuZXh0
TGlzdCkpCi0gICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNMaXN0LCBuZXh0
TGlzdCk7CisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoKnByZXZpb3VzTGlzdCwgKm5l
eHRMaXN0KTsKIAogICAgIHJldHVybiBsaXN0RWxlbWVudDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3Bw
CmluZGV4IDIwYWQ2YTgwMzliZmVmOGQwZTZmMTdjNzQyZTg0ODE1ZGRhZjA3NDQuLmU2MzFkNGJl
ZDRkZmE1MWUwYmY2NmZjMzAyYzBlNjFmZGYzMjI4MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcApA
QCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgaWYgKGlzPFRleHQ+KGxlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWRO
b2RlKCkpKSB7CiAgICAgICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmxlYWRp
bmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRleHROb2Rl
LnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUucmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xsYXBzZVdoaXRl
U3BhY2UoKSk7Ci0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoJnRl
eHROb2RlLCBsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBu
b25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNl
cnZpbmdNYXJrZXJzKHRleHROb2RlLCBsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgIH0KICAgICAKICAg
ICAvLyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KQEAgLTQw
Miw3ICs0MDIsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICAgICAgQVNTRVJUKCFwb3NpdGlvbkFmdGVyU3BsaXQuY29udGFpbmVyTm9k
ZSgpLT5yZW5kZXJlcigpIHx8IHBvc2l0aW9uQWZ0ZXJTcGxpdC5jb250YWluZXJOb2RlKCktPnJl
bmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpOwogICAgICAgICAgICAgZGVs
ZXRlSW5zaWduaWZpY2FudFRleHREb3duc3RyZWFtKHBvc2l0aW9uQWZ0ZXJTcGxpdCk7CiAgICAg
ICAgICAgICBpZiAoaXM8VGV4dD4oKnBvc2l0aW9uQWZ0ZXJTcGxpdC5kZXByZWNhdGVkTm9kZSgp
KSkKLSAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoZG93bmNhc3Q8VGV4dD4ocG9z
aXRpb25BZnRlclNwbGl0LmNvbnRhaW5lck5vZGUoKSksIDAsIG5vbkJyZWFraW5nU3BhY2VTdHJp
bmcoKSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRvd25jYXN0PFRleHQ+
KCpwb3NpdGlvbkFmdGVyU3BsaXQuY29udGFpbmVyTm9kZSgpKSwgMCwgbm9uQnJlYWtpbmdTcGFj
ZVN0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydFRleHRDb21tYW5kLmNwcAppbmRleCBhZDBkMjVlNDE5NWFlMzA0YWIyMzlhZjQxMjE0
NTY1Y2MyZGU0OWFkLi44YzA5MWU3NDNlMTM2ZTI2ZTk1ZTM4MTExMDIwYmFkMTk1OGVhNTBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMTIw
LDcgKzEyMCw3IEBAIGJvb2wgSW5zZXJ0VGV4dENvbW1hbmQ6OnBlcmZvcm1PdmVyd3JpdGUoY29u
c3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkCiAgICAgaWYgKCFjb3VudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVwbGFjZVRleHRJbk5vZGUodGV4dE5vZGUsIHN0
YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBjb3VudCwgdGV4dCk7CisgICAgcmVwbGFjZVRl
eHRJbk5vZGUoKnRleHROb2RlLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgY291bnQs
IHRleHQpOwogCiAgICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBQb3NpdGlvbih0ZXh0Tm9kZS5n
ZXQoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyB0ZXh0Lmxlbmd0aCgpKTsKICAg
ICBzZXRFbmRpbmdTZWxlY3Rpb25XaXRob3V0VmFsaWRhdGlvbihzdGFydCwgZW5kUG9zaXRpb24p
OwpAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICBSZWZQdHI8VGV4dD4gdGV4dE5vZGUgPSBzdGFydFBvc2l0aW9uLmNvbnRhaW5lclRl
eHQoKTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbi5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKTsKIAotICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUodGV4dE5v
ZGUsIG9mZnNldCwgbV90ZXh0KTsKKyAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0Tm9k
ZSwgb2Zmc2V0LCBtX3RleHQpOwogICAgICAgICBlbmRQb3NpdGlvbiA9IFBvc2l0aW9uKHRleHRO
b2RlLmdldCgpLCBvZmZzZXQgKyBtX3RleHQubGVuZ3RoKCkpOwogICAgICAgICBpZiAobV9tYXJr
ZXJTdXBwbGllcikKICAgICAgICAgICAgIG1fbWFya2VyU3VwcGxpZXItPmFkZE1hcmtlcnNUb1Rl
eHROb2RlKHRleHROb2RlLmdldCgpLCBvZmZzZXQsIG1fdGV4dCk7CkBAIC0yMTcsNyArMjE3LDcg
QEAgdm9pZCBJbnNlcnRUZXh0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBBU1NFUlQobV9yZWJhbGFuY2VUeXBlID09IFJlYmFsYW5jZUFsbFdoaXRlc3Bh
Y2VzKTsKICAgICAgICAgICAgIGlmIChjYW5SZWJhbGFuY2Uoc3RhcnRQb3NpdGlvbikgJiYgY2Fu
UmViYWxhbmNlKGVuZFBvc2l0aW9uKSkKLSAgICAgICAgICAgICAgICByZWJhbGFuY2VXaGl0ZXNw
YWNlT25UZXh0U3Vic3RyaW5nKHRleHROb2RlLCBzdGFydFBvc2l0aW9uLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpLCBlbmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAg
ICAgICAgICAgcmViYWxhbmNlV2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZygqdGV4dE5vZGUsIHN0
YXJ0UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVuZFBvc2l0aW9uLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQ1LDkgKzI0NSw5IEBA
IFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIoY29uc3QgUG9zaXRpb24mIHBv
cykKIAogICAgIC8vIGtlZXAgdGFicyBjb2FsZXNjZWQgaW4gdGFiIHNwYW4KICAgICBpZiAoaXNU
YWJTcGFuVGV4dE5vZGUobm9kZSkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0g
ZG93bmNhc3Q8VGV4dD4obm9kZSk7CisgICAgICAgIFJlZjxUZXh0PiB0ZXh0Tm9kZSA9IGRvd25j
YXN0PFRleHQ+KCpub2RlKTsKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHROb2RlLCBv
ZmZzZXQsICJcdCIpOwotICAgICAgICByZXR1cm4gUG9zaXRpb24odGV4dE5vZGUuZ2V0KCksIG9m
ZnNldCArIDEpOworICAgICAgICByZXR1cm4gUG9zaXRpb24odGV4dE5vZGUucHRyKCksIG9mZnNl
dCArIDEpOwogICAgIH0KICAgICAKICAgICAvLyBjcmVhdGUgbmV3IHRhYiBzcGFuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1h
bmQuY3BwCmluZGV4IDc2YzM3NmY1MTUzODAwYzRmOWY2YmRkODY5Y2UwYThhMmU5NGFjOTAuLmJm
NzIyM2NmOGIzY2UxMzNkYzM1Njk4YTBkOTQ3ZGE5MzczYjlkMGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3Bw
CkBAIC0zMCwxOSArMzAsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZDo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoUGFzc1Jl
ZlB0cjxFbGVtZW50PiBmaXJzdCwgUGFzc1JlZlB0cjxFbGVtZW50PiBzZWNvbmQpCitNZXJnZUlk
ZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoUmVm
PEVsZW1lbnQ+JiYgZmlyc3QsIFJlZjxFbGVtZW50PiYmIHNlY29uZCkKICAgICA6IFNpbXBsZUVk
aXRDb21tYW5kKGZpcnN0LT5kb2N1bWVudCgpKQotICAgICwgbV9lbGVtZW50MShmaXJzdCkKLSAg
ICAsIG1fZWxlbWVudDIoc2Vjb25kKQorICAgICwgbV9lbGVtZW50MShXVEZNb3ZlKGZpcnN0KSkK
KyAgICAsIG1fZWxlbWVudDIoV1RGTW92ZShzZWNvbmQpKQogewotICAgIEFTU0VSVChtX2VsZW1l
bnQxKTsKLSAgICBBU1NFUlQobV9lbGVtZW50Mik7CiAgICAgQVNTRVJUKG1fZWxlbWVudDEtPm5l
eHRTaWJsaW5nKCkgPT0gbV9lbGVtZW50Mik7CiB9CiAKIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmIChtX2VsZW1lbnQxLT5uZXh0U2libGlu
ZygpICE9IG1fZWxlbWVudDIgfHwgIW1fZWxlbWVudDEtPmhhc0VkaXRhYmxlU3R5bGUoKSB8fCAh
bV9lbGVtZW50Mi0+aGFzRWRpdGFibGVTdHlsZSgpKQorICAgIGlmIChtX2VsZW1lbnQxLT5uZXh0
U2libGluZygpICE9IG1fZWxlbWVudDIucHRyKCkgfHwgIW1fZWxlbWVudDEtPmhhc0VkaXRhYmxl
U3R5bGUoKSB8fCAhbV9lbGVtZW50Mi0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2F0Q2hpbGQgPSBtX2VsZW1lbnQyLT5maXJzdENoaWxkKCk7CkBAIC01OSwx
NiArNTcsMTMgQEAgdm9pZCBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9BcHBseSgp
CiAKIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmRvVW5hcHBseSgpCiB7Ci0g
ICAgQVNTRVJUKG1fZWxlbWVudDEpOwotICAgIEFTU0VSVChtX2VsZW1lbnQyKTsKLQogICAgIFJl
ZlB0cjxOb2RlPiBhdENoaWxkID0gV1RGTW92ZShtX2F0Q2hpbGQpOwogCiAgICAgYXV0byogcGFy
ZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50IHx8ICFwYXJl
bnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBhcmVu
dC0+aW5zZXJ0QmVmb3JlKCptX2VsZW1lbnQxLCBtX2VsZW1lbnQyLmdldCgpKS5oYXNFeGNlcHRp
b24oKSkKKyAgICBpZiAocGFyZW50LT5pbnNlcnRCZWZvcmUobV9lbGVtZW50MSwgbV9lbGVtZW50
Mi5wdHIoKSkuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxS
ZWY8Tm9kZT4+IGNoaWxkcmVuOwpAQCAtODIsOCArNzcsOCBAQCB2b2lkIE1lcmdlSWRlbnRpY2Fs
RWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHkoKQogI2lmbmRlZiBOREVCVUcKIHZvaWQgTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+
JiBub2RlcykKIHsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9lbGVtZW50MS5nZXQoKSwg
bm9kZXMpOwotICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnQyLmdldCgpLCBub2Rl
cyk7CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudDEucHRyKCksIG5vZGVzKTsK
KyAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9lbGVtZW50Mi5wdHIoKSwgbm9kZXMpOwogfQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuaAppbmRleCBkNTk3MmExN2Q0M2QzMWM0NDhjM2U2NWViZjdiMmY5
YmRkNWM5YjZlLi45N2E3NzMyYzQzZjc5ZjNmNzYyZjI2ZGM1MzUwZjZlOGNlZDllMTdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRz
Q29tbWFuZC5oCkBAIC0zMSwxMyArMzEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFu
ZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudDEsIFBhc3NSZWZQdHI8RWxlbWVu
dD4gZWxlbWVudDIpCisgICAgc3RhdGljIFJlZjxNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZD4gY3JlYXRlKFJlZjxFbGVtZW50PiYmIGVsZW1lbnQxLCBSZWY8RWxlbWVudD4mJiBlbGVtZW50
MikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lcmdlSWRlbnRpY2FsRWxl
bWVudHNDb21tYW5kKGVsZW1lbnQxLCBlbGVtZW50MikpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZChXVEZNb3ZlKGVsZW1lbnQxKSwg
V1RGTW92ZShlbGVtZW50MikpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgUGFzc1JlZlB0cjxFbGVtZW50
Pik7CisgICAgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoUmVmPEVsZW1lbnQ+JiYsIFJl
ZjxFbGVtZW50PiYmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZG9VbmFwcGx5KCkgb3ZlcnJpZGU7CkBAIC00Niw4ICs0Niw4IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRlOwogI2VuZGlmCiAg
ICAgCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDE7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+
IG1fZWxlbWVudDI7CisgICAgUmVmPEVsZW1lbnQ+IG1fZWxlbWVudDE7CisgICAgUmVmPEVsZW1l
bnQ+IG1fZWxlbWVudDI7CiAgICAgUmVmUHRyPE5vZGU+IG1fYXRDaGlsZDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc3MDU2NWI5ZDhkNGU0ZDM5NzNlMTUzNDdl
ZjI4NWQzMGNlNGZkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCIKLQotI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFy
YXRpb24uaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKLSNpbmNsdWRlICJTdHlsZWRF
bGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OlJlbW92ZUNTU1Byb3BlcnR5Q29tbWFu
ZChEb2N1bWVudCYgZG9jdW1lbnQsIFBhc3NSZWZQdHI8U3R5bGVkRWxlbWVudD4gZWxlbWVudCwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLSAgICA6IFNpbXBsZUVkaXRDb21tYW5kKGRvY3VtZW50
KQotICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgLCBtX3Byb3BlcnR5KHByb3BlcnR5KQot
ICAgICwgbV9pbXBvcnRhbnQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7Ci19Ci0K
LVJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6flJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZCgpCi17
Ci19Ci0KLXZvaWQgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb0FwcGx5KCkKLXsKLSAgICBj
b25zdCBTdHlsZVByb3BlcnRpZXMqIHN0eWxlID0gbV9lbGVtZW50LT5pbmxpbmVTdHlsZSgpOwot
ICAgIG1fb2xkVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShtX3Byb3BlcnR5KTsKLSAg
ICBtX2ltcG9ydGFudCA9IHN0eWxlLT5wcm9wZXJ0eUlzSW1wb3J0YW50KG1fcHJvcGVydHkpOwot
Ci0gICAgLy8gTXV0YXRlIHVzaW5nIHRoZSBDU1NPTSB3cmFwcGVyIHNvIHdlIGdldCB0aGUgc2Ft
ZSBldmVudCBiZWhhdmlvciBhcyBhIHNjcmlwdC4KLSAgICAvLyBTZXR0aW5nIHRvIG51bGwgc3Ry
aW5nIHJlbW92ZXMgdGhlIHByb3BlcnR5LiBXZSBkb24ndCBoYXZlIGludGVybmFsIHZlcnNpb24g
b2YgcmVtb3ZlUHJvcGVydHkuCi0gICAgbV9lbGVtZW50LT5jc3NvbVN0eWxlKCktPnNldFByb3Bl
cnR5SW50ZXJuYWwobV9wcm9wZXJ0eSwgU3RyaW5nKCksIGZhbHNlKTsKLX0KLQotdm9pZCBSZW1v
dmVDU1NQcm9wZXJ0eUNvbW1hbmQ6OmRvVW5hcHBseSgpCi17Ci0gICAgbV9lbGVtZW50LT5jc3Nv
bVN0eWxlKCktPnNldFByb3BlcnR5SW50ZXJuYWwobV9wcm9wZXJ0eSwgbV9vbGRWYWx1ZSwgbV9p
bXBvcnRhbnQpOwotfQotCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBSZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBub2RlcykKLXsKLSAgICBh
ZGROb2RlQW5kRGVzY2VuZGFudHMobV9lbGVtZW50LmdldCgpLCBub2Rlcyk7Ci19Ci0jZW5kaWYK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDE4NWViZjVjNjM3YjJjZjk2MDMyODcxOWVjNTJhMThkMzc3MzAxNzMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJFZGl0Q29tbWFuZC5oIgotI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTdHlsZWRF
bGVtZW50OwotCi1jbGFzcyBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxl
RWRpdENvbW1hbmQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmUHRyPFN0eWxlZEVsZW1l
bnQ+IGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQoZG9jdW1lbnQsIGVsZW1l
bnQsIHByb3BlcnR5KSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlbW92ZUNTU1Byb3BlcnR5
Q29tbWFuZChEb2N1bWVudCYsIFBhc3NSZWZQdHI8U3R5bGVkRWxlbWVudD4sIENTU1Byb3BlcnR5
SUQpOwotICAgIH5SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQoKTsKLQotICAgIHZvaWQgZG9BcHBs
eSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGU7Ci0gICAgCi0jaWZu
ZGVmIE5ERUJVRwotICAgIHZvaWQgZ2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mKSBv
dmVycmlkZTsKLSNlbmRpZgotICAgIAotICAgIFJlZlB0cjxTdHlsZWRFbGVtZW50PiBtX2VsZW1l
bnQ7Ci0gICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OwotICAgIFN0cmluZyBtX29sZFZhbHVl
OwotICAgIGJvb2wgbV9pbXBvcnRhbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CmluZGV4IDk0MTUyN2JkZTllM2MwNWMzYmVmODYxOWZmOWQ5NjM4YzM2NzE5ZDMuLjQwOTRmNTg5
MjVhYmY1MGJhNDk5ODIwMTNjNmQ3MGUwYjE2OWQ0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MTAsNyArNTEwLDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5k
S2VlcFN0eWxlU3BhbklubGluZShJbnNlcnQKICAgICAgICAgICAgICAgICAgICAgRWRpdGluZ1N0
eWxlOjpEb05vdEV4dHJhY3RNYXRjaGluZ1N0eWxlKSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBlLmcuIDxmb250IHNpemU9IjMiIHN0eWxlPSJmb250LXNpemU6IDIwcHg7Ij4gaXMgY29udmVy
dGVkIHRvIDxmb250IHN0eWxlPSJmb250LXNpemU6IDIwcHg7Ij4KICAgICAgICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBhdHRyaWJ1dGUgOiBhdHRyaWJ1dGVzKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSgqZWxlbWVudCwgYXR0cmlidXRlKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTUyMCwxOCArNTIwLDE4IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtl
ZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAgICAgICAgICAvLyBzdHlsZXMgZnJvbSBibG9j
a3F1b3RlTm9kZSBhcmUgYWxsb3dlZCB0byBvdmVycmlkZSB0aG9zZSBmcm9tIHRoZSBzb3VyY2Ug
ZG9jdW1lbnQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNDkzMDk4Nj4gYW5kIDxyZGFyOi8vcHJvYmxl
bS81MDg5MzI3Pi4KICAgICAgICAgICAgIE5vZGUqIGJsb2NrcXVvdGVOb2RlID0gaXNNYWlsUGFz
dGVBc1F1b3RhdGlvbk5vZGUoY29udGV4dCkgPyBjb250ZXh0IDogZW5jbG9zaW5nTm9kZU9mVHlw
ZShmaXJzdFBvc2l0aW9uSW5Ob2RlKGNvbnRleHQpLCBpc01haWxCbG9ja3F1b3RlLCBDYW5Dcm9z
c0VkaXRpbmdCb3VuZGFyeSk7CiAgICAgICAgICAgICBpZiAoYmxvY2txdW90ZU5vZGUpCi0gICAg
ICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4
dChlbGVtZW50LCBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKTsKKyAgICAgICAgICAgICAg
ICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KCplbGVtZW50
LCBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpKTsKIAotICAgICAgICAgICAgbmV3SW5saW5l
U3R5bGUtPnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dChlbGVtZW50LCBjb250ZXh0KTsK
KyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRl
eHQoKmVsZW1lbnQsIGNvbnRleHQpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpbmxpbmVT
dHlsZSB8fCBuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNT
dHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQpIHx8IGlzRW1wdHlG
b250VGFnKGVsZW1lbnQsIEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSkpIHsKKyAgICAgICAg
ICAgIGlmIChpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoKmVsZW1lbnQp
IHx8IGlzRW1wdHlGb250VGFnKGVsZW1lbnQsIEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSkp
IHsKICAgICAgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0cik7
CisgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKCplbGVtZW50LCBzdHlsZUF0dHIpOwog
ICAgICAgICB9IGVsc2UgaWYgKG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5wcm9wZXJ0eUNvdW50
KCkgIT0gaW5saW5lU3R5bGUtPnByb3BlcnR5Q291bnQoKSkKICAgICAgICAgICAgIHNldE5vZGVB
dHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNU
ZXh0KCkpOwogCkBAIC01NDUsNyArNTQ1LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNlcnQKICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChlbGVtZW50LT5wYXJlbnROb2RlKCkgJiYgZWxlbWVudC0+
cGFyZW50Tm9kZSgpLT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpCi0gICAgICAgICAgICByZW1v
dmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIGNvbnRlbnRlZGl0YWJsZUF0dHIpOworICAgICAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSgqZWxlbWVudCwgY29udGVudGVkaXRhYmxlQXR0cik7CiAK
ICAgICAgICAgLy8gV2ViS2l0IHVzZWQgdG8gbm90IGFkZCBkaXNwbGF5OiBpbmxpbmUgYW5kIGZs
b2F0OiBub25lIG9uIGNvcHkuCiAgICAgICAgIC8vIEtlZXAgdGhpcyBjb2RlIGFyb3VuZCBmb3Ig
YmFja3dhcmQgY29tcGF0aWJpbGl0eQpAQCAtMTI1MCw3ICsxMjUwLDcgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIG1lcmdlRW5kSWZOZWVkZWQoKTsK
IAogICAgIGlmIChOb2RlKiBtYWlsQmxvY2txdW90ZSA9IGVuY2xvc2luZ05vZGVPZlR5cGUocG9z
aXRpb25BdFN0YXJ0T2ZJbnNlcnRlZENvbnRlbnQoKS5kZWVwRXF1aXZhbGVudCgpLCBpc01haWxQ
YXN0ZUFzUXVvdGF0aW9uTm9kZSkpCi0gICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZG93bmNh
c3Q8RWxlbWVudD4obWFpbEJsb2NrcXVvdGUpLCBjbGFzc0F0dHIpOworICAgICAgICByZW1vdmVO
b2RlQXR0cmlidXRlKGRvd25jYXN0PEVsZW1lbnQ+KCptYWlsQmxvY2txdW90ZSksIGNsYXNzQXR0
cik7CiAKICAgICBpZiAoc2hvdWxkUGVyZm9ybVNtYXJ0UmVwbGFjZSgpKQogICAgICAgICBhZGRT
cGFjZXNGb3JTbWFydFJlcGxhY2UoKTsKQEAgLTEzMzMsNyArMTMzMyw3IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmFkZFNwYWNlc0ZvclNtYXJ0UmVwbGFjZSgpCiAgICAgaWYgKG5l
ZWRzVHJhaWxpbmdTcGFjZSAmJiBlbmROb2RlKSB7CiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0
ZVNwYWNlID0gIWVuZE5vZGUtPnJlbmRlcmVyKCkgfHwgZW5kTm9kZS0+cmVuZGVyZXIoKS0+c3R5
bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKGlzPFRleHQ+KCplbmROb2Rl
KSkgewotICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRvd25jYXN0PFRleHQ+KGVuZE5v
ZGUpLCBlbmRPZmZzZXQsIGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJp
bmcoKSA6ICIgIik7CisgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoZG93bmNhc3Q8VGV4
dD4oKmVuZE5vZGUpLCBlbmRPZmZzZXQsIGNvbGxhcHNlV2hpdGVTcGFjZSA/IG5vbkJyZWFraW5n
U3BhY2VTdHJpbmcoKSA6ICIgIik7CiAgICAgICAgICAgICBpZiAobV9lbmRPZkluc2VydGVkQ29u
dGVudC5jb250YWluZXJOb2RlKCkgPT0gZW5kTm9kZSkKICAgICAgICAgICAgICAgICBtX2VuZE9m
SW5zZXJ0ZWRDb250ZW50Lm1vdmVUb09mZnNldChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpICsgMSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzU3LDcgKzEz
NTcsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJl
cGxhY2UoKQogICAgIGlmIChuZWVkc0xlYWRpbmdTcGFjZSAmJiBzdGFydE5vZGUpIHsKICAgICAg
ICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSAhc3RhcnROb2RlLT5yZW5kZXJlcigpIHx8IHN0
YXJ0Tm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKTsKICAgICAg
ICAgaWYgKGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7Ci0gICAgICAgICAgICBpbnNlcnRUZXh0SW50
b05vZGUoZG93bmNhc3Q8VGV4dD4oc3RhcnROb2RlKSwgc3RhcnRPZmZzZXQsIGNvbGxhcHNlV2hp
dGVTcGFjZSA/IG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSA6ICIgIik7CisgICAgICAgICAgICBp
bnNlcnRUZXh0SW50b05vZGUoZG93bmNhc3Q8VGV4dD4oKnN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0
LCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwog
ICAgICAgICAgICAgaWYgKG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09
IHN0YXJ0Tm9kZSAmJiBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpKQogICAgICAgICAgICAgICAgIG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQubW92ZVRvT2Zmc2V0
KG1fZW5kT2ZJbnNlcnRlZENvbnRlbnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyAxKTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTE0MjgsNyArMTQyOCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9zaXRpb24oUG9zaXRpb24mIHBvc2l0aW9u
LCBQCiAKICAgICBpZiAoaXM8VGV4dD4odGV4dC0+cHJldmlvdXNTaWJsaW5nKCkpKSB7CiAgICAg
ICAgIFJlZjxUZXh0PiBwcmV2aW91cyhkb3duY2FzdDxUZXh0PigqdGV4dC0+cHJldmlvdXNTaWJs
aW5nKCkpKTsKLSAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHQsIDAsIHByZXZpb3VzLT5k
YXRhKCkpOworICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoKnRleHQsIDAsIHByZXZpb3VzLT5k
YXRhKCkpOwogCiAgICAgICAgIGlmIChwb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCiAgICAgICAg
ICAgICBwb3NpdGlvbi5tb3ZlVG9PZmZzZXQocHJldmlvdXMtPmxlbmd0aCgpICsgcG9zaXRpb24u
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlvbihQb3NpdGlv
biYgcG9zaXRpb24sIFAKICAgICBpZiAoaXM8VGV4dD4odGV4dC0+bmV4dFNpYmxpbmcoKSkpIHsK
ICAgICAgICAgUmVmPFRleHQ+IG5leHQoZG93bmNhc3Q8VGV4dD4oKnRleHQtPm5leHRTaWJsaW5n
KCkpKTsKICAgICAgICAgdW5zaWduZWQgb3JpZ2luYWxMZW5ndGggPSB0ZXh0LT5sZW5ndGgoKTsK
LSAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKHRleHQsIG9yaWdpbmFsTGVuZ3RoLCBuZXh0LT5k
YXRhKCkpOworICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoKnRleHQsIG9yaWdpbmFsTGVuZ3Ro
LCBuZXh0LT5kYXRhKCkpOwogCiAgICAgICAgIGlmICghcG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KQogICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChwb3NpdGlvbiwgbmV4
dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggYTNkMDc0NGE4OGM0MDU3
YmQ0NmIyZDRjMjhhZjUzODcwZDBjMWQyNy4uOGQ2MWU1N2FmZTAwNmU4MzQ4YThjOWEyNGE0NDFk
NTUyMGUzM2M2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMzM1LDggKzMzNSw4
IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVp
bGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlCiAKICAgICAgICAgaWYgKHNob3VsZEFwcGx5V3Jh
cHBpbmdTdHlsZShlbGVtZW50KSkgewogICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUgPSBtX3dy
YXBwaW5nU3R5bGUtPmNvcHkoKTsKLSAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQ
cm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVt
ZW50KSk7Ci0gICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGlu
Z1dpdGhTdHlsZU9mTm9kZShjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOworICAgICAg
ICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5
bGUoKmNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSk7CisgICAgICAgICAgICBuZXdJbmxp
bmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZSgqY29uc3RfY2Fz
dDxFbGVtZW50Kj4oJmVsZW1lbnQpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdJ
bmxpbmVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CiAKQEAgLTM0NSw3ICszNDUsNyBA
QCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxk
ZXImIG91dCwgY29uc3QgRWxlbWVudCYgZQogCiAgICAgICAgIGlmIChzaG91bGRBbm5vdGF0ZU9y
Rm9yY2VJbmxpbmUpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRBbm5vdGF0ZSgpKQotICAgICAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5tZXJnZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXph
dGlvbihkb3duY2FzdDxIVE1MRWxlbWVudD4oY29uc3RfY2FzdDxFbGVtZW50Kj4oJmVsZW1lbnQp
KSk7CisgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm1lcmdlU3R5bGVGcm9tUnVsZXNG
b3JTZXJpYWxpemF0aW9uKGRvd25jYXN0PEhUTUxFbGVtZW50PigqY29uc3RfY2FzdDxFbGVtZW50
Kj4oJmVsZW1lbnQpKSk7CiAKICAgICAgICAgICAgIGlmIChhZGREaXNwbGF5SW5saW5lKQogICAg
ICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5mb3JjZUlubGluZSgpOwpAQCAtNTA5LDE1ICs1
MDksMTMgQEAgc3RhdGljIGJvb2wgbmVlZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKGNvbnN0IFZp
c2libGVQb3NpdGlvbiYgdikKICAgICByZXR1cm4gaXNFbmRPZlBhcmFncmFwaCh2KSAmJiBpc1N0
YXJ0T2ZQYXJhZ3JhcGgobmV4dCkgJiYgISh1cHN0cmVhbU5vZGUtPmhhc1RhZ05hbWUoYnJUYWcp
ICYmIHVwc3RyZWFtTm9kZSA9PSBkb3duc3RyZWFtTm9kZSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
RWRpdGluZ1N0eWxlPiBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKGNvbnN0IE5v
ZGUqIG5vZGUpCitzdGF0aWMgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVGcm9tTWF0Y2hlZFJ1
bGVzQW5kSW5saW5lRGVjbChOb2RlJiBub2RlKQogewotICAgIGlmICghbm9kZS0+aXNIVE1MRWxl
bWVudCgpKQorICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIC8vIEZJWE1FOiBIYXZpbmcgdG8gY29uc3RfY2FzdCBoZXJlIGlzIHVn
bHksIGJ1dCBpdCBpcyBxdWl0ZSBhIGJpdCBvZiB3b3JrIHRvIHVudGFuZ2xlCi0gICAgLy8gdGhl
IG5vbi1jb25zdC1uZXNzIG9mIHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQuCi0gICAg
SFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBjb25zdF9jYXN0PEhUTUxFbGVtZW50Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKSk7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
c3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShlbGVtZW50LT5pbmxpbmVTdHlsZSgpKTsKKyAg
ICBhdXRvJiBlbGVtZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpOworICAgIFJlZlB0
cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC5pbmxp
bmVTdHlsZSgpKTsKICAgICBzdHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlcyhlbGVtZW50KTsKICAg
ICByZXR1cm4gc3R5bGU7CiB9CkBAIC02MjIsNyArNjIwLDcgQEAgc3RhdGljIFN0cmluZyBjcmVh
dGVNYXJrdXBJbnRlcm5hbChEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJhbmdlJiByYW5nZSwg
VmVjdG8KICAgICAgICAgLy8gQWxzbyBpbmNsdWRlIGFsbCBvZiB0aGUgYW5jZXN0b3JzIG9mIGxh
c3RDbG9zZWQgdXAgdG8gdGhpcyBzcGVjaWFsIGFuY2VzdG9yLgogICAgICAgICBmb3IgKENvbnRh
aW5lck5vZGUqIGFuY2VzdG9yID0gbGFzdENsb3NlZC0+cGFyZW50Tm9kZSgpOyBhbmNlc3Rvcjsg
YW5jZXN0b3IgPSBhbmNlc3Rvci0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoYW5j
ZXN0b3IgPT0gZnVsbHlTZWxlY3RlZFJvb3QgJiYgIWNvbnZlcnRCbG9ja3NUb0lubGluZXMpIHsK
LSAgICAgICAgICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBmdWxseVNlbGVjdGVkUm9vdFN0
eWxlID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzQW5kSW5saW5lRGVjbChmdWxseVNlbGVjdGVkUm9v
dCk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZnVsbHlTZWxlY3RlZFJv
b3RTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woKmZ1bGx5U2VsZWN0
ZWRSb290KTsKIAogICAgICAgICAgICAgICAgIC8vIEJyaW5nIHRoZSBiYWNrZ3JvdW5kIGF0dHJp
YnV0ZSBvdmVyLCBidXQgbm90IGFzIGFuIGF0dHJpYnV0ZSBiZWNhdXNlIGEgYmFja2dyb3VuZCBh
dHRyaWJ1dGUgb24gYSBkaXYKICAgICAgICAgICAgICAgICAvLyBhcHBlYXJzIHRvIGhhdmUgbm8g
ZWZmZWN0LgpAQCAtNjU2LDcgKzY1NCw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50
ZXJuYWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYgcmFuZ2UsIFZlY3RvCiAgICAg
aWYgKGFjY3VtdWxhdG9yLm5lZWRSZWxhdGl2ZVN0eWxlV3JhcHBlcigpICYmIG5lZWRzUG9zaXRp
b25TdHlsZUNvbnZlcnNpb24pIHsKICAgICAgICAgaWYgKGFjY3VtdWxhdG9yLm5lZWRDbGVhcmlu
Z0RpdigpKQogICAgICAgICAgICAgYWNjdW11bGF0b3IuYXBwZW5kU3RyaW5nKCI8ZGl2IHN0eWxl
PVwiY2xlYXI6IGJvdGg7XCI+PC9kaXY+Iik7Ci0gICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+
IHBvc2l0aW9uUmVsYXRpdmVTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURl
Y2woYm9keSk7CisgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHBvc2l0aW9uUmVsYXRpdmVT
dHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woKmJvZHkpOwogICAgICAg
ICBwb3NpdGlvblJlbGF0aXZlU3R5bGUtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
UG9zaXRpb24sIENTU1ZhbHVlUmVsYXRpdmUpOwogICAgICAgICBhY2N1bXVsYXRvci53cmFwV2l0
aFN0eWxlTm9kZShwb3NpdGlvblJlbGF0aXZlU3R5bGUtPnN0eWxlKCksIGRvY3VtZW50LCB0cnVl
KTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308885</attachid>
            <date>2017-05-02 20:43:54 -0700</date>
            <delta_ts>2017-05-03 08:43:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171590-20170502204352.patch</filename>
            <type>text/plain</type>
            <size>112193</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWU2MmQxYmM3NTVhYWM4
MWEyOTE1NmRkZmU4ZDY0ZmQxZTIzNDU4ZS4uYmI3ZDdmZTM4ZDM0ZGIwMDc1YzhlMGM2MTU3NmU2
MzQ4ODNhNDc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyNSBAQAogMjAxNy0wNS0wMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFVzZSBQYXNzUmVmUHRyIGxl
c3MgaW4gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MTU5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBQYXNzUmVmUHRyIGxlc3MgaW4gQ29tcG9zaXRlRWRpdENv
bW1hbmQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHls
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc1NwYW5XaXRob3V0QXR0cmlidXRlc09y
VW5zdHlsZWRTdHlsZVNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eUZvbnRUYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpkdW1teVNwYW5BbmNlc3RvckZvck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFu
cyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5n
VXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDb25mbGljdGluZ0lubGlu
ZVN0eWxlRnJvbVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVk
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NT
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNl
c3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJ
ZklkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VF
bmRXaXRoTmV4dElmSWRlbnRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpz
aG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2FsRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4
dEluTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJl
V2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6Cisg
ICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5k
KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAg
ICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwV2hpdGVzcGFjZSk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAgICAgICog
ZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25m
bGljdGluZ1dpdGhTdHlsZU9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50TWF0Y2hl
c0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OndyYXBwaW5nU3R5bGVGb3JTZXJpYWxpemF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlh
bGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZy
b21SdWxlc0FuZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1v
dmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6OnRyeUluZGVudGluZ0Fz
TGlzdEl0ZW0pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgpOgor
ICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtT3ZlcndyaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIpOgorICAgICAgICAqIGVkaXRpbmcvTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmdldE5v
ZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHND
b21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1
bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9z
aXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2wpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlTWFya3VwSW50ZXJuYWwpOgorCisyMDE3LTA1LTAyICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKICAgICAgICAgVXNlIFBhc3NSZWZQdHIgbGVzcyBpbiBlZGl0aW5n
IGNvZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MTUzNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDQwZjY0ZTA0ZDI5OTk0YWQxNWFkYTVjZDMy
MTM0ZDZlY2Q4NjJiMTUuLjIyNTY3ZGEwMTIyMzY0ZDdmZGNmYjQ0ZTY4NmE4YjkyMzllNmNiNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNjIxLDcgKzE2MjEsNiBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKICAgICBlZGl0aW5nL01vdmVT
ZWxlY3Rpb25Db21tYW5kLmNwcAotICAgIGVkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
LmNwcAogICAgIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1Jl
bW92ZU5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNTQ2ODBhYTIyYzA0YTNmY2NkZjRhZDcxYzU0ZDg1ZDUyNDJh
ZTYxNy4uYzA4MjU3YmQ2M2MxZWM1NDQwNGI5NTg5NWNjZGMwMDBlZmNkY2IxZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzYy
Niw4ICszNjI2LDYgQEAKIAkJOTMzMDlERkEwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzMwOURBQjA5OUU2NDkxMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQuaCAqLzsgfTsKIAkJOTMzMDlERkIwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVT
ZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzA5REFDMDk5RTY0OTEwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgKi87IH07CiAJCTkzMzA5REZDMDk5RTY0OTIwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9u
Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMzMDlEQUQwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi87IH07
Ci0JCTkzMzA5RTAwMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlE
QjEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAgKi87IH07
Ci0JCTkzMzA5RTAxMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REIy
MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCAqLzsgfTsKIAkJ
OTMzMDlFMDQwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REI1MDk5RTY0OTEw
MDU2RTU4MSAvKiBSZW1vdmVOb2RlQ29tbWFuZC5jcHAgKi87IH07CiAJCTkzMzA5RTA1MDk5RTY0
OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQjYwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92
ZU5vZGVDb21tYW5kLmggKi87IH07CiAJCTkzMzA5RTA2MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCNzA5OUU2NDkxMDA1NkU1ODEgLyogUmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwICovOyB9OwpAQCAtMTE3MzYsOCAr
MTE3MzQsNiBAQAogCQk5MzMwOURBQjA5OUU2NDkxMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTMzMDlEQUMwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdmVTZWxlY3Rpb25Db21tYW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQUQwOTlFNjQ5MTAwNTZFNTgx
IC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1vdmVTZWxlY3Rpb25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTkzMzA5REIxMDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTMzMDlEQjIwOTlFNjQ5
MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQjUwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVD
b21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZU5v
ZGVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQjYwOTlF
NjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW92ZU5vZGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMzA5REI3MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTg0OCw4ICsxOTg0NCw2IEBACiAJCQkJQzZENzRBRDMwOUFBMjgyRTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovLAogCQkJCTkzMzA5REFDMDk5
RTY0OTEwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlE
QUQwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi8sCi0JCQkJOTMz
MDlEQjEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAgKi8s
Ci0JCQkJOTMzMDlEQjIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFu
ZC5oICovLAogCQkJCUQwNkMwRDhFMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21t
YW5kLmNwcCAqLywKIAkJCQlEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0
Q29tbWFuZC5oICovLAogCQkJCTkzMzA5REI1MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVOb2Rl
Q29tbWFuZC5jcHAgKi8sCkBAIC0yODg3MSw3ICsyODg2NSw2IEBACiAJCQkJQTU3OEY0M0YxREUw
QjYzMDAwM0RGQzZBIC8qIFJlamVjdGVkUHJvbWlzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNERkMzNjA2MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEOEFDQTg5MUQyMzdBQTIwMEVDQzU5RSAvKiBSZW1vdGVDb21t
YW5kTGlzdGVuZXJNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzMzA5RTAxMDk5RTY0OTIwMDU2
RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUQw
NkMwRDhGMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUwNTA5OUU2NDkyMDA1NkU1ODEgLyogUmVtb3ZlTm9kZUNvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTA3MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjc3MSw3
ICszMjc2NCw2IEBACiAJCQkJQ0RGQzM2MDUxOENBNjFDMjAwMjZFNTZGIC8qIFJlbW90ZUNvbW1h
bmRMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREZDMzYwNzE4Q0E2OTZDMDAyNkU1
NkYgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4
QUNBODgxRDIzN0FBMjAwRUNDNTlFIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lck1hYy5tbSBpbiBT
b3VyY2VzICovLAotCQkJCTkzMzA5RTAwMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDA2QzBEOTAwQ0ZEMTE0NjAwNjVG
NDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MDQwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5RTA2MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggZjdhNzQyMWU1ZTUxNzU1NWEwY2U2OGIxMmIw
ZjY1MmI0YWI4NTY5My4uNWJlYjZhYTgwZWVkMjk0ODYwYjE2ZGM0YjIzY2Y5Njg5NWI0YTBmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTc2
LDMwICs3NiwzMCBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSogbm9k
ZSkKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNwYW5FbGVtZW50Pigqbm9kZSkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5n
KCk7CiB9CiAKLXN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUo
Y29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5
IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKK3N0YXRpYyBib29sIGhhc05vQXR0cmlidXRl
T3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCYgZWxlbWVudCwgU2hvdWxk
U3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKIHsKLSAg
ICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKKyAgICBpZiAoIWVsZW1lbnQuaGFzQXR0
cmlidXRlcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHVuc2lnbmVkIG1hdGNoZWRB
dHRyaWJ1dGVzID0gMDsKLSAgICBpZiAoZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpCisgICAgaWYgKGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxl
U3BhbkNsYXNzU3RyaW5nKCkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7Ci0gICAgaWYg
KGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShzdHlsZUF0dHIpICYmIChzaG91bGRTdHlsZUF0dHJpYnV0
ZUJlRW1wdHkgPT0gQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlCi0gICAgICAgIHx8ICFlbGVt
ZW50LT5pbmxpbmVTdHlsZSgpIHx8IGVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzRW1wdHkoKSkp
CisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKHN0eWxlQXR0cikgJiYgKHNob3VsZFN0eWxl
QXR0cmlidXRlQmVFbXB0eSA9PSBBbGxvd05vbkVtcHR5U3R5bGVBdHRyaWJ1dGUKKyAgICAgICAg
fHwgIWVsZW1lbnQuaW5saW5lU3R5bGUoKSB8fCBlbGVtZW50LmlubGluZVN0eWxlKCktPmlzRW1w
dHkoKSkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAKLSAgICBBU1NFUlQobWF0Y2hl
ZEF0dHJpYnV0ZXMgPD0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKSk7Ci0gICAgcmV0dXJuIG1h
dGNoZWRBdHRyaWJ1dGVzID09IGVsZW1lbnQtPmF0dHJpYnV0ZUNvdW50KCk7CisgICAgQVNTRVJU
KG1hdGNoZWRBdHRyaWJ1dGVzIDw9IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKSk7CisgICAgcmV0
dXJuIG1hdGNoZWRBdHRyaWJ1dGVzID09IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKTsKIH0KIAot
Ym9vbCBpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKK2Jvb2wgaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRl
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFpczxIVE1MU3BhbkVsZW1lbnQ+
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGhhc05vQXR0cmli
dXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8SFRNTFNwYW5FbGVtZW50PihlbGVtZW50
KSwgQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bhbihjb25zdCBFbGVtZW50
KiBlbGVtZW50KQorc3RhdGljIGlubGluZSBib29sIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JV
bnN0eWxlZFN0eWxlU3Bhbihjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghaXM8
SFRNTFNwYW5FbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEx
LDcgKzExMSw3IEBAIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
U2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0CiAgICAgaWYgKCFpczxIVE1MRm9u
dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZShkb3duY2FzdDxIVE1MRm9udEVsZW1l
bnQ+KGVsZW1lbnQpLCBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpOworICAgIHJldHVybiBo
YXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGRvd25jYXN0PEhUTUxGb250RWxlbWVu
dD4oKmVsZW1lbnQpLCBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpOwogfQogCiBzdGF0aWMg
UmVmPEhUTUxFbGVtZW50PiBjcmVhdGVGb250RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCkBA
IC0yMDQsMjQgKzIwNCwyNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICBzd2l0Y2ggKG1fcHJvcGVydHlMZXZlbCkgewogICAgIGNhc2UgUHJvcGVydHlEZWZhdWx0OiB7
CiAgICAgICAgIC8vIEFwcGx5IHRoZSBibG9jay1jZW50cmljIHByb3BlcnRpZXMgb2YgdGhlIHN0
eWxlLgotICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gbV9zdHlsZS0+
ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOworICAgICAgICBhdXRvIGJsb2NrU3R5
bGUgPSBtX3N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgICAg
IGlmICghYmxvY2tTdHlsZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgYXBwbHlCbG9ja1N0eWxl
KGJsb2NrU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlCbG9ja1N0eWxlKGJsb2NrU3R5
bGUpOwogICAgICAgICAvLyBBcHBseSBhbnkgcmVtYWluaW5nIHN0eWxlcyB0byB0aGUgaW5saW5l
IGVsZW1lbnRzLgogICAgICAgICBpZiAoIW1fc3R5bGUtPmlzRW1wdHkoKSB8fCBtX3N0eWxlZElu
bGluZUVsZW1lbnQgfHwgbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKSB7CiAgICAg
ICAgICAgICBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKG1fc3R5bGUuZ2V0KCkpOwotICAg
ICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZShtX3N0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFw
cGx5SW5saW5lU3R5bGUoKm1fc3R5bGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEZvcmNlQmxvY2tQcm9wZXJ0aWVzOgogICAgICAgICAvLyBGb3JjZSBhbGwg
cHJvcGVydGllcyB0byBiZSBhcHBsaWVkIGFzIGJsb2NrIHN0eWxlcy4KLSAgICAgICAgYXBwbHlC
bG9ja1N0eWxlKG1fc3R5bGUuZ2V0KCkpOworICAgICAgICBhcHBseUJsb2NrU3R5bGUoKm1fc3R5
bGUpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUgKnN0eWxlKQordm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiB7CiAgICAgLy8gdXBk
YXRlIGRvY3VtZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMKICAgICAvLyBz
byB0aGF0IHdlIGF2b2lkIHRoZSBleHBlbnNlIG9mIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBl
dmVyeSBjYWxsCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgIHZpc2libGVFbmQgPSB2
aXNpYmxlRW5kLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNp
YmxlUG9zaXRpb24gYmV5b25kRW5kKGVuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpLm5leHQoKSk7
CiAgICAgd2hpbGUgKHBhcmFncmFwaFN0YXJ0LmlzTm90TnVsbCgpICYmIHBhcmFncmFwaFN0YXJ0
ICE9IGJleW9uZEVuZCkgewotICAgICAgICBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZShzdHlsZSwg
cGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgIFN0eWxlQ2hhbmdlIHN0
eWxlQ2hhbmdlKCZzdHlsZSwgcGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAg
ICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpIHx8IG1fcmVtb3ZlT25seSkgewogICAgICAg
ICAgICAgUmVmUHRyPE5vZGU+IGJsb2NrID0gZW5jbG9zaW5nQmxvY2socGFyYWdyYXBoU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIGlmICghbV9y
ZW1vdmVPbmx5KSB7CkBAIC0yNzEsOSArMjcxLDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBBU1NFUlQoIWJsb2NrIHx8IGlzPEhUTUxFbGVtZW50PigqYmxvY2spKTsKICAgICAg
ICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oYmxvY2suZ2V0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIGRvd25jYXN0PEhUTUxFbGVtZW50PihibG9jay5nZXQo
KSkpOworICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3JlbW92ZU9ubHkpCi0g
ICAgICAgICAgICAgICAgICAgIGFkZEJsb2NrU3R5bGUoc3R5bGVDaGFuZ2UsIGRvd25jYXN0PEhU
TUxFbGVtZW50PihibG9jay5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1N0
eWxlKHN0eWxlQ2hhbmdlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmJsb2NrKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChuZXh0UGFyYWdyYXBoU3RhcnQuaXNPcnBoYW4oKSkK
QEAgLTQyMCw4ICs0MjAsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZl
Rm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgICAgICAgICBzZXROb2Rl
QXR0cmlidXRlKGVsZW1lbnQuZ2V0KCksIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIpOwot
ICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bh
bihlbGVtZW50LmdldCgpKSkKKyAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoKmVsZW1l
bnQsIHN0eWxlQXR0cik7CisgICAgICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNP
clVuc3R5bGVkU3R5bGVTcGFuKCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB1bnN0eWxlZFNw
YW5zLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzMiw3
ICs0MzIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxl
Q2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBkdW1t
eVNwYW5BbmNlc3RvckZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICB3aGlsZSAobm9k
ZSAmJiAoIWlzPEVsZW1lbnQ+KCpub2RlKSB8fCAhaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0
eWxlQXR0cmlidXRlKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkpCisgICAgd2hpbGUgKG5vZGUg
JiYgKCFpczxFbGVtZW50Pigqbm9kZSkgfHwgIWlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHls
ZUF0dHJpYnV0ZShkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkpKSkKICAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICAKICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPnBhcmVudE5v
ZGUoKSA6IG51bGxwdHI7CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6Y2xlYW51cFVuc3R5bGVkQXBwbGVTdHlsZVNwYW5zKENvbnRhaW5lck5vZGUqIGR1bW15U3Bh
bkEKIAogICAgIFZlY3RvcjxFbGVtZW50Kj4gdG9SZW1vdmU7CiAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KCpkdW1teVNwYW5BbmNlc3RvcikpIHsKLSAgICAg
ICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3BhbigmY2hpbGQp
KQorICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFu
KGNoaWxkKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmY2hpbGQpOwogICAgIH0KIApA
QCAtNTMzLDEzICs1MzMsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRk
aW5nVXBUb0VuY2xvc2luZ0Jsb2NrKE5vZGUqIG5vZGUsIE5vZGUqIHVuc3AKICAgICAgICAgaWYg
KGVsZW1lbnQuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihkaXJBdHRyKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBCRE8gZWxlbWVudCwgd2Ugc2hvdWxk
IHByb2JhYmx5IGp1c3QgcmVtb3ZlIGl0IGlmIGl0IGhhcyBubwogICAgICAgICAgICAgLy8gb3Ro
ZXIgYXR0cmlidXRlcywgbGlrZSB3ZSAoc2hvdWxkKSBkbyB3aXRoIEIgYW5kIEkgZWxlbWVudHMu
Ci0gICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKCZlbGVtZW50LCBkaXJBdHRyKTsKKyAg
ICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgZGlyQXR0cik7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gaW5s
aW5lU3R5bGUgPSBjb3B5U3R5bGVPckNyZWF0ZUVtcHR5KGVsZW1lbnQuaW5saW5lU3R5bGUoKSk7
CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2Rl
QmlkaSwgQ1NTVmFsdWVOb3JtYWwpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnJlbW92ZVBy
b3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKLSAgICAgICAg
ICAgIGlmIChpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oJmVsZW1l
bnQpKQorICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0
eWxlU3BhbihlbGVtZW50KSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKCZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTU1NSw3ICs1NTUsNyBAQCBz
dGF0aWMgTm9kZSogaGlnaGVzdEVtYmVkZGluZ0FuY2VzdG9yKE5vZGUqIHN0YXJ0Tm9kZSwgTm9k
ZSogZW5jbG9zaW5nTm9kZSkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlKQordm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogewogICAg
IFJlZlB0cjxDb250YWluZXJOb2RlPiBzdGFydER1bW15U3BhbkFuY2VzdG9yOwogICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBlbmREdW1teVNwYW5BbmNlc3RvcjsKQEAgLTYxNSw3ICs2MTUsNyBA
QCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSog
c3R5bGUpCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM3MjQzNDQ+IEJvbGRpbmcgYW5kIHVuYm9s
ZGluZyBjcmVhdGVzIGV4dHJhbmVvdXMgdGFncwogICAgIFBvc2l0aW9uIHJlbW92ZVN0YXJ0ID0g
c3RhcnQudXBzdHJlYW0oKTsKICAgICBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBO
YXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKLSAgICBib29sIGhhc1RleHREaXJlY3Rpb24gPSBzdHls
ZS0+dGV4dERpcmVjdGlvbih0ZXh0RGlyZWN0aW9uKTsKKyAgICBib29sIGhhc1RleHREaXJlY3Rp
b24gPSBzdHlsZS50ZXh0RGlyZWN0aW9uKHRleHREaXJlY3Rpb24pOwogICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IHN0eWxlV2l0aG91dEVtYmVkZGluZzsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBlbWJlZGRpbmdTdHlsZTsKICAgICBpZiAoaGFzVGV4dERpcmVjdGlvbikgewpAQCAtNjM1LDE1
ICs2MzUsMTUgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0
aW5nU3R5bGUqIHN0eWxlKQogICAgICAgICAgICAgZW1iZWRkaW5nUmVtb3ZlRW5kID0gcG9zaXRp
b25JblBhcmVudEJlZm9yZU5vZGUoZW5kVW5zcGxpdEFuY2VzdG9yKS5kb3duc3RyZWFtKCk7CiAK
ICAgICAgICAgaWYgKGVtYmVkZGluZ1JlbW92ZUVuZCAhPSByZW1vdmVTdGFydCB8fCBlbWJlZGRp
bmdSZW1vdmVFbmQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBzdHlsZVdpdGhvdXRFbWJlZGRpbmcg
PSBzdHlsZS0+Y29weSgpOworICAgICAgICAgICAgc3R5bGVXaXRob3V0RW1iZWRkaW5nID0gc3R5
bGUuY29weSgpOwogICAgICAgICAgICAgZW1iZWRkaW5nU3R5bGUgPSBzdHlsZVdpdGhvdXRFbWJl
ZGRpbmctPmV4dHJhY3RBbmRSZW1vdmVUZXh0RGlyZWN0aW9uKCk7CiAKICAgICAgICAgICAgIGlm
IChjb21wYXJlUG9zaXRpb25zKGVtYmVkZGluZ1JlbW92ZVN0YXJ0LCBlbWJlZGRpbmdSZW1vdmVF
bmQpIDw9IDApCi0gICAgICAgICAgICAgICAgcmVtb3ZlSW5saW5lU3R5bGUoZW1iZWRkaW5nU3R5
bGUuZ2V0KCksIGVtYmVkZGluZ1JlbW92ZVN0YXJ0LCBlbWJlZGRpbmdSZW1vdmVFbmQpOworICAg
ICAgICAgICAgICAgIHJlbW92ZUlubGluZVN0eWxlKCplbWJlZGRpbmdTdHlsZSwgZW1iZWRkaW5n
UmVtb3ZlU3RhcnQsIGVtYmVkZGluZ1JlbW92ZUVuZCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZW1vdmVJbmxpbmVTdHlsZShzdHlsZVdpdGhvdXRFbWJlZGRpbmcgPyBzdHlsZVdpdGhvdXRF
bWJlZGRpbmcuZ2V0KCkgOiBzdHlsZSwgcmVtb3ZlU3RhcnQsIGVuZCk7CisgICAgcmVtb3ZlSW5s
aW5lU3R5bGUoc3R5bGVXaXRob3V0RW1iZWRkaW5nID8gKnN0eWxlV2l0aG91dEVtYmVkZGluZyA6
IHN0eWxlLCByZW1vdmVTdGFydCwgZW5kKTsKICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsK
ICAgICBlbmQgPSBlbmRQb3NpdGlvbigpOwogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFy
dC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKQEAgLTY2OCw3
ICs2NjgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRp
bmdTdHlsZSogc3R5bGUpCiAgICAgLy8gdG8gY2hlY2sgYSBjb21wdXRlZCBzdHlsZQogICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSBzdHlsZTsKKyAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSAmc3R5bGU7CiAgICAgaWYgKGhhc1RleHREaXJlY3Rp
b24pIHsKICAgICAgICAgLy8gQXZvaWQgYXBwbHlpbmcgdGhlIHVuaWNvZGUtYmlkaSBhbmQgZGly
ZWN0aW9uIHByb3BlcnRpZXMgYmVuZWF0aCBhbmNlc3RvcnMgdGhhdCBhbHJlYWR5IGhhdmUgdGhl
bS4KICAgICAgICAgTm9kZSogZW1iZWRkaW5nU3RhcnROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0Fu
Y2VzdG9yKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIGVuY2xvc2luZ0Jsb2NrKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpKTsKQEAgLTY4MCwxNiArNjgwLDE2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAgIEFT
U0VSVChlbWJlZGRpbmdBcHBseVN0YXJ0LmlzTm90TnVsbCgpICYmIGVtYmVkZGluZ0FwcGx5RW5k
LmlzTm90TnVsbCgpKTsKIAogICAgICAgICAgICAgaWYgKCFlbWJlZGRpbmdTdHlsZSkgewotICAg
ICAgICAgICAgICAgIHN0eWxlV2l0aG91dEVtYmVkZGluZyA9IHN0eWxlLT5jb3B5KCk7CisgICAg
ICAgICAgICAgICAgc3R5bGVXaXRob3V0RW1iZWRkaW5nID0gc3R5bGUuY29weSgpOwogICAgICAg
ICAgICAgICAgIGVtYmVkZGluZ1N0eWxlID0gc3R5bGVXaXRob3V0RW1iZWRkaW5nLT5leHRyYWN0
QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZml4
UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKGVtYmVkZGluZ1N0eWxlLmdldCgpLCBlbWJlZGRpbmdB
cHBseVN0YXJ0LCBlbWJlZGRpbmdBcHBseUVuZCk7CisgICAgICAgICAgICBmaXhSYW5nZUFuZEFw
cGx5SW5saW5lU3R5bGUoKmVtYmVkZGluZ1N0eWxlLCBlbWJlZGRpbmdBcHBseVN0YXJ0LCBlbWJl
ZGRpbmdBcHBseUVuZCk7CiAKICAgICAgICAgICAgIHN0eWxlVG9BcHBseSA9IHN0eWxlV2l0aG91
dEVtYmVkZGluZzsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZpeFJhbmdlQW5kQXBwbHlJbmxp
bmVTdHlsZShzdHlsZVRvQXBwbHkuZ2V0KCksIHN0YXJ0LCBlbmQpOworICAgIGZpeFJhbmdlQW5k
QXBwbHlJbmxpbmVTdHlsZSgqc3R5bGVUb0FwcGx5LCBzdGFydCwgZW5kKTsKIAogICAgIC8vIFJl
bW92ZSBkdW1teSBzdHlsZSBzcGFucyBjcmVhdGVkIGJ5IHNwbGl0dGluZyB0ZXh0IGVsZW1lbnRz
LgogICAgIGNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyhzdGFydER1bW15U3BhbkFuY2Vz
dG9yLmdldCgpKTsKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgICAgIGNsZWFudXBVbnN0
eWxlZEFwcGxlU3R5bGVTcGFucyhlbmREdW1teVNwYW5BbmNlc3Rvci5nZXQoKSk7CiB9CiAKLXZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5n
U3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
Cit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUoRWRp
dGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogewogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7CiAK
QEAgLTc2Niw3ICs3NjYsNyBAQCBzdHJ1Y3QgSW5saW5lUnVuVG9BcHBseVN0eWxlIHsKICAgICBT
dHlsZUNoYW5nZSBjaGFuZ2U7CiB9OwogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnROb2Rl
LCBOb2RlKiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5l
U3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBOb2RlJiBzdGFydE5vZGUsIE5v
ZGUqIHBhc3RFbmROb2RlKQogewogICAgIGlmIChtX3JlbW92ZU9ubHkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGlu
ZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgcwogICAgICAgICAg
ICAgLy8gQWRkIHRvIHRoaXMgZWxlbWVudCdzIGlubGluZSBzdHlsZSBhbmQgc2tpcCBvdmVyIGl0
cyBjb250ZW50cy4KICAgICAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVudC5pbmxp
bmVTdHlsZSgpKTsKLSAgICAgICAgICAgIGlmIChNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBvdGhl
clN0eWxlID0gc3R5bGUtPnN0eWxlKCkpCisgICAgICAgICAgICBpZiAoTXV0YWJsZVN0eWxlUHJv
cGVydGllcyogb3RoZXJTdHlsZSA9IHN0eWxlLnN0eWxlKCkpCiAgICAgICAgICAgICAgICAgaW5s
aW5lU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCpvdGhlclN0eWxlKTsKICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUt
PmFzVGV4dCgpKTsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbigqbm9kZSk7CkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5v
ZGUmIHMKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCiAgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKQotICAgICAgICBydW4uY2hhbmdlID0g
U3R5bGVDaGFuZ2Uoc3R5bGUsIHJ1bi5wb3NpdGlvbkZvclN0eWxlQ29tcHV0YXRpb24pOworICAg
ICAgICBydW4uY2hhbmdlID0gU3R5bGVDaGFuZ2UoJnN0eWxlLCBydW4ucG9zaXRpb25Gb3JTdHls
ZUNvbXB1dGF0aW9uKTsKIAogICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgewogICAgICAgICBp
ZiAocnVuLmR1bW15RWxlbWVudCkKQEAgLTg1MCwxNSArODUwLDE1IEBAIGJvb2wgQXBwbHlTdHls
ZUNvbW1hbmQ6OmlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0CiAgICAgICAgIHx8IChtX2lzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24gJiYg
bV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKGVsZW1lbnQpKTsKIH0KIAotYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHls
ZSogc3R5bGUsIE5vZGUqIHJ1blN0YXJ0LCBOb2RlKiBwYXN0RW5kTm9kZSkKK2Jvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnNob3VsZEFwcGx5SW5saW5lU3R5bGVUb1J1bihFZGl0aW5nU3R5bGUmIHN0
eWxlLCBOb2RlKiBydW5TdGFydCwgTm9kZSogcGFzdEVuZE5vZGUpCiB7Ci0gICAgQVNTRVJUKHN0
eWxlICYmIHJ1blN0YXJ0KTsKKyAgICBBU1NFUlQocnVuU3RhcnQpOwogCiAgICAgZm9yIChOb2Rl
KiBub2RlID0gcnVuU3RhcnQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNDaGlsZE5v
ZGVzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gV2UgZG9uJ3QgY29uc2lk
ZXIgbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB3ZSBuZXZl
ciBhcHBseSBzdHlsZSB3aGVuIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBpcyBz
cGVjaWZpZWQKLSAgICAgICAgaWYgKCFzdHlsZS0+c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5
bGVPZk5vZGUobm9kZSkpCisgICAgICAgIGlmICghc3R5bGUuc3R5bGVJc1ByZXNlbnRJbkNvbXB1
dGVkU3R5bGVPZk5vZGUobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
aWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcocG9z
aXRpb25CZWZvcmVOb2RlKG5vZGUpLCBtX3N0eWxlZElubGluZUVsZW1lbnQtPnRhZ1FOYW1lKCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04NjYsNyArODY2LDcgQEAgYm9vbCBBcHBs
eVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHlsZSog
c3R5bGUsIE5vZGUqIHIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSog
c3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2Rl
KiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5n
SW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSYgc3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVu
U3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2RlKiBwYXN0RW5kTm9kZSkKIHsKICAgICBB
U1NFUlQocnVuU3RhcnQgJiYgcnVuRW5kKTsKICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJ1blN0
YXJ0OwpAQCAtODk0LDcgKzg5NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNv
bmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsCiAgICAgfQog
fQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50
KEVkaXRpbmdTdHlsZSogc3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50LCBJbmxpbmVTdHlsZVJl
bW92YWxNb2RlIG1vZGUsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCitib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYg
c3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUs
IEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCiB7CiAgICAgaWYgKCFlbGVtZW50LnBhcmVu
dE5vZGUoKSB8fCAhaXNFZGl0YWJsZU5vZGUoKmVsZW1lbnQucGFyZW50Tm9kZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtOTA5LDcgKzkwOSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgSFRN
TEVsCiAgICAgfQogCiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHJlbW92ZUlt
cGxpY2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlLCAmZWxlbWVudCwgbW9kZSwgZXh0cmFjdGVkU3R5
bGUpKQorICAgIGlmIChyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChzdHlsZSwgZWxlbWVu
dCwgbW9kZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAogICAg
IGlmICghZWxlbWVudC5pc0Nvbm5lY3RlZCgpKQpAQCAtOTE3LDc2ICs5MTcsNzIgQEAgYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChFZGl0aW5nU3R5
bGUqIHN0eWxlLCBIVE1MRWwKIAogICAgIC8vIElmIHRoZSBub2RlIHdhcyBjb252ZXJ0ZWQgdG8g
YSBzcGFuLCB0aGUgc3BhbiBtYXkgc3RpbGwgY29udGFpbiByZWxldmFudAogICAgIC8vIHN0eWxl
cyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUuZy4gPGIgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xk
Jz4pCi0gICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCAmZWxlbWVudCwgbW9kZSwgZXh0cmFj
dGVkU3R5bGUpKQorICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwgZWxlbWVudCwgbW9kZSwg
ZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBy
ZW1vdmVkOwogfQogICAgIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFu
T3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYgZWxlbSkKK3ZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRl
cyhIVE1MRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoaGFzTm9BdHRyaWJ1dGVPck9ubHlT
dHlsZUF0dHJpYnV0ZShlbGVtLCBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkpKQotICAgICAg
ICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworICAgIGlmIChoYXNOb0F0dHJp
YnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQsIFN0eWxlQXR0cmlidXRlU2hvdWxkQmVF
bXB0eSkpCisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwog
ICAgIGVsc2UgewotICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbkVsZW1lbnQgPSByZXBsYWNl
RWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhlbGVtKTsKLSAg
ICAgICAgQVNTRVJUKG5ld1NwYW5FbGVtZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3Rl
ZCgpKTsKLSAgICAgICAgZWxlbSA9IG5ld1NwYW5FbGVtZW50OworICAgICAgICBIVE1MRWxlbWVu
dCogbmV3U3BhbkVsZW1lbnQgPSByZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxk
cmVuQW5kQXR0cmlidXRlcygmZWxlbWVudCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3U3Bh
bkVsZW1lbnQsIG5ld1NwYW5FbGVtZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3RlZCgp
KTsKICAgICB9CiB9Ci0gICAgCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNp
dGx5U3R5bGVkRWxlbWVudChFZGl0aW5nU3R5bGUqIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVu
dCwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0
eWxlKQorCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxl
bWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVudCwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQogewotICAg
IEFTU0VSVChzdHlsZSk7CiAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkgewogICAgICAgICBB
U1NFUlQoIWV4dHJhY3RlZFN0eWxlKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNX
aXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudChlbGVtZW50KSB8fCBzdHlsZS0+Y29uZmxpY3RzV2l0
aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBzdHls
ZS5jb25mbGljdHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudCgmZWxlbWVudCkgfHwgc3R5bGUu
Y29uZmxpY3RzV2l0aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoJmVsZW1lbnQpOwogICAgIH0K
IAogICAgIEFTU0VSVChtb2RlID09IFJlbW92ZUlmTmVlZGVkIHx8IG1vZGUgPT0gUmVtb3ZlQWx3
YXlzKTsKLSAgICBpZiAoc3R5bGUtPmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZFbGVtZW50
KGVsZW1lbnQsIGV4dHJhY3RlZFN0eWxlLCBtb2RlID09IFJlbW92ZUFsd2F5cyA/IEVkaXRpbmdT
dHlsZTo6RXh0cmFjdE1hdGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRvTm90RXh0cmFjdE1h
dGNoaW5nU3R5bGUpKSB7CisgICAgaWYgKHN0eWxlLmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxl
T2ZFbGVtZW50KCZlbGVtZW50LCBleHRyYWN0ZWRTdHlsZSwgbW9kZSA9PSBSZW1vdmVBbHdheXMg
PyBFZGl0aW5nU3R5bGU6OkV4dHJhY3RNYXRjaGluZ1N0eWxlIDogRWRpdGluZ1N0eWxlOjpEb05v
dEV4dHJhY3RNYXRjaGluZ1N0eWxlKSkgewogICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJlbW92
ZUlmV2l0aG91dEF0dHJpYnV0ZXMoZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAogICAgIC8vIHVuaWNvZGUtYmlkaSBhbmQgZGlyZWN0aW9uIGFyZSBwdXNoZWQgZG93biBz
ZXBhcmF0ZWx5IHNvIGRvbid0IHB1c2ggZG93biB3aXRoIG90aGVyIHN0eWxlcwogICAgIFZlY3Rv
cjxRdWFsaWZpZWROYW1lPiBhdHRyaWJ1dGVzOwotICAgIGlmICghc3R5bGUtPmV4dHJhY3RDb25m
bGljdGluZ0ltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoZWxlbWVudCwgZXh0cmFjdGVkU3R5bGUg
PyBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiA6IEVkaXRpbmdTdHlsZTo6
RG9Ob3RQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24sCi0gICAgICAgIGV4dHJhY3RlZFN0eWxlLCBh
dHRyaWJ1dGVzLCBtb2RlID09IFJlbW92ZUFsd2F5cyA/IEVkaXRpbmdTdHlsZTo6RXh0cmFjdE1h
dGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRvTm90RXh0cmFjdE1hdGNoaW5nU3R5bGUpKQor
ICAgIGlmICghc3R5bGUuZXh0cmFjdENvbmZsaWN0aW5nSW1wbGljaXRTdHlsZU9mQXR0cmlidXRl
cygmZWxlbWVudCwgZXh0cmFjdGVkU3R5bGUgPyBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGlu
Z0RpcmVjdGlvbiA6IEVkaXRpbmdTdHlsZTo6RG9Ob3RQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24s
CisgICAgICAgIGV4dHJhY3RlZFN0eWxlLCBhdHRyaWJ1dGVzLCBtb2RlID09IFJlbW92ZUFsd2F5
cyA/IEVkaXRpbmdTdHlsZTo6RXh0cmFjdE1hdGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRv
Tm90RXh0cmFjdE1hdGNoaW5nU3R5bGUpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpCiAgICAgICAgIHJlbW92
ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKTsKIAotICAgIGlmIChpc0VtcHR5Rm9u
dFRhZyhlbGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNw
YW4oZWxlbWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVu
dCk7CisgICAgaWYgKGlzRW1wdHlGb250VGFnKCZlbGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCisgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUs
IEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUsIEVkaXRp
bmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVD
U1NTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVudCwgSW5saW5l
U3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQogewot
ICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgaWYgKG1vZGUg
PT0gUmVtb3ZlTm9uZSkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5l
U3R5bGVPZkVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBzdHlsZS5jb25mbGljdHNX
aXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoJmVsZW1lbnQpOwogCiAgICAgUmVmUHRyPE11dGFibGVT
dHlsZVByb3BlcnRpZXM+IG5ld0lubGluZVN0eWxlOwotICAgIGlmICghc3R5bGUtPmNvbmZsaWN0
c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50LCBuZXdJbmxpbmVTdHlsZSwgZXh0cmFj
dGVkU3R5bGUpKQorICAgIGlmICghc3R5bGUuY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVt
ZW50KCZlbGVtZW50LCBuZXdJbmxpbmVTdHlsZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkKICAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOwogICAgIGVsc2UKLSAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxl
LT5hc1RleHQoKSk7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0
ciwgbmV3SW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKIAogICAgIGlmIChpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oJmVsZW1lbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhUTUxFbGVtZW50
KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5l
U3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSogbm9kZSkKK0hUTUxFbGVtZW50KiBBcHBs
eVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMTAzNyw3ICsxMDMzLDcgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSYgbm9kZSwgRWRpdGluZ1N0
eWxlKiBzdHkKICAgICBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkKG5ld0lubGluZVN0eWxlLmdldCgp
LCBub2RlLCBub2RlLCBEb05vdEFkZFN0eWxlZEVsZW1lbnQpOwogfQogCi12b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqIHN0
eWxlLCBOb2RlKiB0YXJnZXROb2RlKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25J
bmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSogdGFyZ2V0Tm9k
ZSkKIHsKICAgICBIVE1MRWxlbWVudCogaGlnaGVzdEFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9y
V2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUoc3R5bGUsIHRhcmdldE5vZGUpOwogICAgIGlmICgh
aGlnaGVzdEFuY2VzdG9yKQpAQCAtMTA4OSw3ICsxMDg1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwg
Tm9kZSoKICAgICB9CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKEVk
aXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCkKIHsKICAgICBBU1NFUlQoc3RhcnQuaXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChlbmQu
aXNOb3ROdWxsKCkpOwpAQCAtMTI1NCw3ICsxMjUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6c3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXQKICAgICB1cGRhdGVTdGFydEVuZChuZXdTdGFydCwgcG9zaXRpb25BZnRlck5vZGUoZmlyc3RU
ZXh0Tm9kZSkpOwogfQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogc3R5bGUpCitib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEVk
aXRpbmdTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTUsNyArMTI5MSw3IEBAIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsCiAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpzdGFy
dE5vZGUpOwogICAgIGF1dG8qIHN0YXJ0Q2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQoKTsKICAg
ICBBU1NFUlQoc3RhcnRDaGlsZCk7Ci0gICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygmcHJldmlv
dXNFbGVtZW50LCAmZWxlbWVudCk7CisgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91
c0VsZW1lbnQsIGVsZW1lbnQpOwogCiAgICAgaW50IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA9IHN0
YXJ0Q2hpbGQtPmNvbXB1dGVOb2RlSW5kZXgoKTsKICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVu
dCA9IHN0YXJ0Tm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0T2Zmc2V0QWRqdXN0
bWVudCA6IDA7CkBAIC0xMzI3LDcgKzEzMjMsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpt
ZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAog
ICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqZW5kTm9kZSk7CiAgICAgTm9k
ZSogbmV4dENoaWxkID0gbmV4dEVsZW1lbnQuZmlyc3RDaGlsZCgpOwogCi0gICAgbWVyZ2VJZGVu
dGljYWxFbGVtZW50cygmZWxlbWVudCwgJm5leHRFbGVtZW50KTsKKyAgICBtZXJnZUlkZW50aWNh
bEVsZW1lbnRzKGVsZW1lbnQsIG5leHRFbGVtZW50KTsKIAogICAgIGJvb2wgc2hvdWxkVXBkYXRl
U3RhcnQgPSBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kTm9kZTsKICAgICBpbnQgZW5kT2Zm
c2V0ID0gbmV4dENoaWxkID8gbmV4dENoaWxkLT5jb21wdXRlTm9kZUluZGV4KCkgOiBuZXh0RWxl
bWVudC5jb3VudENoaWxkTm9kZXMoKTsKQEAgLTEzNTksMTMgKzEzNTUsMTMgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChOb2RlJiBzdGFydE5v
ZGUsIE5vZGUmIGVuZE4KICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVu
dC0+cHJldmlvdXNTaWJsaW5nKCk7CiAKICAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxp
bmctPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LCAq
bmV4dFNpYmxpbmcpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQucHRy
KCksIGRvd25jYXN0PEVsZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSk7CisgICAgICAgIG1lcmdl
SWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgZG93bmNhc3Q8RWxlbWVudD4oKm5leHRTaWJsaW5n
KSk7CiAKICAgICBpZiAoaXM8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSAmJiBwcmV2
aW91c1NpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICBhdXRvKiBtZXJnZWRF
bGVtZW50ID0gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2libGluZygpOwogICAgICAgICBBU1NFUlQo
bWVyZ2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0
eWxlKCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoKnByZXZpb3VzU2libGluZywgKm1lcmdlZEVs
ZW1lbnQpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhkb3duY2FzdDxFbGVt
ZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCBkb3duY2FzdDxFbGVtZW50PihtZXJnZWRFbGVt
ZW50KSk7CisgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGRvd25jYXN0PEVsZW1l
bnQ+KCpwcmV2aW91c1NpYmxpbmcpLCBkb3duY2FzdDxFbGVtZW50PigqbWVyZ2VkRWxlbWVudCkp
OwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgY2FsbCB1cGRhdGVT
dGFydEVuZCBpZiB0aGUgc3RhcnQgb3IgZW5kIHdhcyBpbiB0aGUgbm9kZQpAQCAtMTM3MywyMyAr
MTM2OSwyMSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhF
bGVtZW50KE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTgogICAgIC8vIFZpc2libGVTZWxlY3Rp
b246OnZhbGlkYXRlKCkuCiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5
bGUoY29uc3QgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hhbmdlLCBIVE1MRWxlbWVudCogYmxvY2spCit2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiBz
dHlsZUNoYW5nZSwgSFRNTEVsZW1lbnQmIGJsb2NrKQogewogICAgIEFTU0VSVChzdHlsZUNoYW5n
ZS5jc3NTdHlsZSgpKTsKICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGxlZ2FjeSBzdHlsZXMgaGVy
ZS4gVGhvc2Ugc3R5bGVzLCBsaWtlIDxCPiBhbmQgPEk+LCBvbmx5IGFwcGx5IGZvcgogICAgIC8v
IGlubGluZSBjb250ZW50LgotICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgU3RyaW5nIGNzc1N0eWxlID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS0+YXNUZXh0
KCk7CiAgICAgU3RyaW5nQnVpbGRlciBjc3NUZXh0OwogICAgIGNzc1RleHQuYXBwZW5kKGNzc1N0
eWxlKTsKLSAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBkZWNsID0gYmxvY2stPmlubGlu
ZVN0eWxlKCkpIHsKKyAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBkZWNsID0gYmxvY2su
aW5saW5lU3R5bGUoKSkgewogICAgICAgICBpZiAoIWNzc1N0eWxlLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNzc1RleHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIGNzc1RleHQuYXBwZW5kKGRlY2wt
PmFzVGV4dCgpKTsKICAgICB9Ci0gICAgc2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVBdHRy
LCBjc3NUZXh0LnRvU3RyaW5nKCkpOworICAgIHNldE5vZGVBdHRyaWJ1dGUoJmJsb2NrLCBzdHls
ZUF0dHIsIGNzc1RleHQudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnQs
IE5vZGUmIGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgYWRkU3R5bGVkRWxlbWVudCkKQEAgLTE1MTgs
OSArMTUxMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhO
b2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAgICAgUG9zaXRpb24gbmV3U3Rh
cnQgPSBzdGFydDsKICAgICBQb3NpdGlvbiBuZXdFbmQgPSBlbmQ7CiAKLSAgICBWZWN0b3I8UmVm
UHRyPFRleHQ+PiB0ZXh0Tm9kZXM7CisgICAgVmVjdG9yPFJlZjxUZXh0Pj4gdGV4dE5vZGVzOwog
ICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZCgq
bm9kZSk7IHRleHROb2RlOyB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
ZygqdGV4dE5vZGUpKQotICAgICAgICB0ZXh0Tm9kZXMuYXBwZW5kKHRleHROb2RlKTsKKyAgICAg
ICAgdGV4dE5vZGVzLmFwcGVuZCgqdGV4dE5vZGUpOwogCiAgICAgZm9yIChhdXRvJiBjaGlsZFRl
eHQgOiB0ZXh0Tm9kZXMpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IGNoaWxkVGV4dC0+bmV4dFNp
YmxpbmcoKTsKQEAgLTE1MjksOSArMTUyMyw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6Ompv
aW5DaGlsZFRleHROb2RlcyhOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAg
ICAgCiAgICAgICAgIFRleHQmIG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5leHQpOwogICAg
ICAgICBpZiAoc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IgJiYgbmV4dCA9PSBzdGFydC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgICAgICBu
ZXdTdGFydCA9IFBvc2l0aW9uKGNoaWxkVGV4dC5nZXQoKSwgY2hpbGRUZXh0LT5sZW5ndGgoKSAr
IHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAgIG5ld1N0YXJ0ID0g
UG9zaXRpb24oY2hpbGRUZXh0LnB0cigpLCBjaGlsZFRleHQtPmxlbmd0aCgpICsgc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBpZiAoZW5kLmFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIG5leHQgPT0gZW5kLmNvbnRhaW5l
ck5vZGUoKSkKLSAgICAgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGNoaWxkVGV4dC5nZXQoKSwg
Y2hpbGRUZXh0LT5sZW5ndGgoKSArIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAg
ICAgICAgICBuZXdFbmQgPSBQb3NpdGlvbihjaGlsZFRleHQucHRyKCksIGNoaWxkVGV4dC0+bGVu
Z3RoKCkgKyBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBTdHJpbmcgdGV4
dFRvTW92ZSA9IG5leHRUZXh0LmRhdGEoKTsKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGNo
aWxkVGV4dCwgY2hpbGRUZXh0LT5sZW5ndGgoKSwgdGV4dFRvTW92ZSk7CiAgICAgICAgIHJlbW92
ZU5vZGUobmV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgK
aW5kZXggMjdmYWU2Njc0N2M1MzU1YjUzZTIwZDc1MWQzZWJkYmE1MWJjNWNiMC4uNDA5ZmNjZjBk
N2QyMjRkMWM3NzRkN2E4MzA1YzQzZGY4ZDdhODhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuaApAQCAtNzUsMjcgKzc1LDI3IEBAIHByaXZhdGU6CiAKICAg
ICAvLyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBib29sIGlzU3R5bGVkSW5saW5lRWxlbWVu
dFRvUmVtb3ZlKEVsZW1lbnQqKSBjb25zdDsKLSAgICBib29sIHNob3VsZEFwcGx5SW5saW5lU3R5
bGVUb1J1bihFZGl0aW5nU3R5bGUqLCBOb2RlKiBydW5TdGFydCwgTm9kZSogcGFzdEVuZE5vZGUp
OwotICAgIHZvaWQgcmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0
eWxlKiwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5FbmQsIE5vZGUq
IHBhc3RFbmROb2RlKTsKLSAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRp
dGluZ1N0eWxlKiwgSFRNTEVsZW1lbnQmLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3Zl
SWZOZWVkZWQsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUgPSBudWxscHRyKTsKLSAgICBp
bmxpbmUgYm9vbCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHls
ZSogc3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50KSB7cmV0dXJuIHJlbW92ZUlubGluZVN0eWxl
RnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZU5vbmUpO30KLSAgICB2b2lkIHJlcGxh
Y2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComKTsKLSAg
ICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KEVkaXRpbmdTdHlsZSosIEhUTUxF
bGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRT
dHlsZSk7Ci0gICAgYm9vbCByZW1vdmVDU1NTdHlsZShFZGl0aW5nU3R5bGUqLCBIVE1MRWxlbWVu
dCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxl
KiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOwotICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5j
ZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Cisg
ICAgYm9vbCBzaG91bGRBcHBseUlubGluZVN0eWxlVG9SdW4oRWRpdGluZ1N0eWxlJiwgTm9kZSog
cnVuU3RhcnQsIE5vZGUqIHBhc3RFbmROb2RlKTsKKyAgICB2b2lkIHJlbW92ZUNvbmZsaWN0aW5n
SW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSYsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQs
IFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2RlKiBwYXN0RW5kTm9kZSk7CisgICAgYm9vbCByZW1v
dmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYsIEhUTUxFbGVtZW50JiwgSW5s
aW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUlmTmVlZGVkLCBFZGl0aW5nU3R5bGUqIGV4dHJh
Y3RlZFN0eWxlID0gbnVsbHB0cik7CisgICAgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5l
U3R5bGVGcm9tRWxlbWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVu
dCkge3JldHVybiByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LCBS
ZW1vdmVOb25lKTt9CisgICAgdm9pZCByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0
dHJpYnV0ZXMoSFRNTEVsZW1lbnQmKTsKKyAgICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRF
bGVtZW50KEVkaXRpbmdTdHlsZSYsIEhUTUxFbGVtZW50JiwgSW5saW5lU3R5bGVSZW1vdmFsTW9k
ZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSk7CisgICAgYm9vbCByZW1vdmVDU1NTdHls
ZShFZGl0aW5nU3R5bGUmLCBIVE1MRWxlbWVudCYsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBS
ZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOwor
ICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHls
ZShFZGl0aW5nU3R5bGUmLCBOb2RlKik7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9QdXNo
RG93bihOb2RlJiwgRWRpdGluZ1N0eWxlKik7Ci0gICAgdm9pZCBwdXNoRG93bklubGluZVN0eWxl
QXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Ci0gICAgdm9pZCByZW1vdmVJbmxpbmVT
dHlsZShFZGl0aW5nU3R5bGUqICwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kKTsKKyAgICB2b2lkIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKEVkaXRpbmdT
dHlsZSYsIE5vZGUqKTsKKyAgICB2b2lkIHJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYs
IGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgYm9vbCBu
b2RlRnVsbHlTZWxlY3RlZChFbGVtZW50JiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKSBjb25zdDsKICAgICBib29sIG5vZGVGdWxseVVuc2VsZWN0ZWQoRWxlbWVu
dCYsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7CiAK
ICAgICAvLyBzdHlsZS1hcHBsaWNhdGlvbiBoZWxwZXJzCi0gICAgdm9pZCBhcHBseUJsb2NrU3R5
bGUoRWRpdGluZ1N0eWxlKik7CisgICAgdm9pZCBhcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxl
Jik7CiAgICAgdm9pZCBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSop
OwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqKTsKLSAgICB2b2lkIGZp
eFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRv
Tm9kZVJhbmdlKEVkaXRpbmdTdHlsZSosIE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZE5v
ZGUpOwotICAgIHZvaWQgYWRkQmxvY2tTdHlsZShjb25zdCBTdHlsZUNoYW5nZSYsIEhUTUxFbGVt
ZW50Kik7CisgICAgdm9pZCBhcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYpOworICAgIHZv
aWQgZml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYsIGNvbnN0IFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CisgICAgdm9pZCBhcHBseUlubGluZVN0
eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlJiwgTm9kZSYgc3RhcnROb2RlLCBOb2RlKiBwYXN0
RW5kTm9kZSk7CisgICAgdm9pZCBhZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiwgSFRN
TEVsZW1lbnQmKTsKICAgICB2b2lkIGFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxl
KiwgTm9kZSYgc3RhcnQsIE5vZGUmIGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgPSBBZGRTdHlsZWRF
bGVtZW50KTsKICAgICBQb3NpdGlvbiBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdl
KE5vZGUmLCBSZWZQdHI8Tm9kZT4mIGR1bW15RWxlbWVudCk7CiAgICAgdm9pZCBhcHBseUlubGlu
ZVN0eWxlQ2hhbmdlKE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTm9kZSwgU3R5bGVDaGFuZ2Um
LCBFQWRkU3R5bGVkRWxlbWVudCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCk7CiAgICAgdm9pZCBzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0RWxlbWVudEF0
RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7Ci0gICAgYm9v
bCBzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqKTsKKyAgICBi
b29sIHNob3VsZFNwbGl0VGV4dEVsZW1lbnQoRWxlbWVudCosIEVkaXRpbmdTdHlsZSYpOwogICAg
IGJvb2wgaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbik7CiAgICAgYm9vbCBtZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG1lcmdlRW5k
V2l0aE5leHRJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpOwpAQCAtMTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiBlbnVtIFNob3VsZFN0eWxlQXR0
cmlidXRlQmVFbXB0eSB7IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRyaWJ1
dGVTaG91bGRCZUVtcHR5IH07CiBib29sIGlzRW1wdHlGb250VGFnKGNvbnN0IEVsZW1lbnQqLCBT
aG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkgPSBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkp
OwogYm9vbCBpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsKLWJvb2wgaXNTdHls
ZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqKTsKK2Jvb2wg
aXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQmKTsK
IFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChEb2N1bWVudCYpOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGFjNmEzZWNmZmFkNmFlNzUzZDBkOWQ3MjZhZTYxN2E3
ODVjZDUyZmIuLjhhYWJiMzJjZjQ1OTc1OWJlMGIxNDNjNjA5OTZiMjIxODU4NWE3MWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01
Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCIK
ICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRl
ICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCkBAIC01ODIsMTAgKzU4MSwxMCBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmROb2RlKFJlZjxOb2RlPiYmIG5vZGUsIFJlZjxDb250
YWluZXJOb2RlPiYmIHBhcgogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGVuZE5vZGVD
b21tYW5kOjpjcmVhdGUoV1RGTW92ZShwYXJlbnQpLCBXVEZNb3ZlKG5vZGUpLCBlZGl0aW5nQWN0
aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5J
blJhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
Cit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYg
bm9kZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxO
b2RlPj4gY2hpbGRyZW47Ci0gICAgTm9kZSogY2hpbGQgPSBub2RlLT50cmF2ZXJzZVRvQ2hpbGRB
dChmcm9tKTsKKyAgICBOb2RlKiBjaGlsZCA9IG5vZGUudHJhdmVyc2VUb0NoaWxkQXQoZnJvbSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbTsgY2hpbGQgJiYgaSA8IHRvOyBpKyssIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CiAKQEAgLTY2NSwxNCArNjY0LDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0
RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIFBhc3NSZWZQdHI8CiAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRFbGVtZW50Q29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQs
IGF0Q2hpbGQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bWVyZ2VJZGVudGlj
YWxFbGVtZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+IHBycEZpcnN0LCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IHBycFNlY29uZCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2Fs
RWxlbWVudHMoRWxlbWVudCYgZmlyc3QsIEVsZW1lbnQmIHNlY29uZCkKIHsKLSAgICBSZWZQdHI8
RWxlbWVudD4gZmlyc3QgPSBwcnBGaXJzdDsKLSAgICBSZWZQdHI8RWxlbWVudD4gc2Vjb25kID0g
cHJwU2Vjb25kOwotICAgIEFTU0VSVCghZmlyc3QtPmlzRGVzY2VuZGFudE9mKHNlY29uZC5nZXQo
KSkgJiYgc2Vjb25kICE9IGZpcnN0KTsKLSAgICBpZiAoZmlyc3QtPm5leHRTaWJsaW5nKCkgIT0g
c2Vjb25kKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUoc2Vjb25kKTsKLSAgICAgICAgaW5zZXJ0Tm9k
ZUFmdGVyKCpzZWNvbmQsICpmaXJzdCk7CisgICAgUmVmPEVsZW1lbnQ+IHByb3RlY3RlZEZpcnN0
ID0gZmlyc3Q7CisgICAgUmVmPEVsZW1lbnQ+IHByb3RlY3RlZFNlY29uZCA9IHNlY29uZDsKKyAg
ICBBU1NFUlQoIWZpcnN0LmlzRGVzY2VuZGFudE9mKCZzZWNvbmQpICYmICZzZWNvbmQgIT0gJmZp
cnN0KTsKKyAgICBpZiAoZmlyc3QubmV4dFNpYmxpbmcoKSAhPSAmc2Vjb25kKSB7CisgICAgICAg
IHJlbW92ZU5vZGUoJnNlY29uZCk7CisgICAgICAgIGluc2VydE5vZGVBZnRlcihzZWNvbmQsIGZp
cnN0KTsKICAgICB9CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQ6OmNyZWF0ZShmaXJzdCwgc2Vjb25kKSk7CiB9CkBAIC03MjcsMjMgKzcy
NiwyMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChzdGFydEluZGV4LCBz
Y29wZS5nZXQoKSksIHZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0SW5kZXggKyBsZW5ndGgs
IHNjb3BlLmdldCgpKSkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRU
ZXh0SW50b05vZGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0
IFN0cmluZyYgdGV4dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRv
Tm9kZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsK
ICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQogICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUobm9kZSwgb2Zmc2V0LCB0ZXh0LCBl
ZGl0aW5nQWN0aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRl
VGV4dEZyb21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBjb3VudCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9k
ZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogewogICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShu
b2RlLCBvZmZzZXQsIGNvdW50LCBlZGl0aW5nQWN0aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGUoUGFzc1JlZlB0cjxUZXh0PiBwcnBOb2Rl
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50VGV4dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlKFRl
eHQmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRUZXh0KQogewotICAgIFJlZlB0cjxUZXh0PiBub2RlKHBycE5vZGUpOwotICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0
ZShXVEZNb3ZlKG5vZGUpLCBvZmZzZXQsIGNvdW50KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgY291
bnQpKTsKICAgICBpZiAoIXJlcGxhY2VtZW50VGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShXVEZN
b3ZlKG5vZGUpLCBvZmZzZXQsIHJlcGxhY2VtZW50VGV4dCwgZWRpdGluZ0FjdGlvbigpKSk7Cisg
ICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6
OmNyZWF0ZShub2RlLCBvZmZzZXQsIHJlcGxhY2VtZW50VGV4dCwgZWRpdGluZ0FjdGlvbigpKSk7
CiB9CiAKIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlU2VsZWN0ZWRUZXh0
SW5Ob2RlKGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTc1NCw3ICs3NTIsNyBAQCBQb3NpdGlvbiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZShjb25zdCBTdHJp
bmcmIHRleHQpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUmVmUHRyPFRleHQ+
IHRleHROb2RlID0gc3RhcnQuY29udGFpbmVyVGV4dCgpOwotICAgIHJlcGxhY2VUZXh0SW5Ob2Rl
KHRleHROb2RlLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpIC0gc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHRleHQpOworICAg
IHJlcGxhY2VUZXh0SW5Ob2RlKCp0ZXh0Tm9kZSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCB0ZXh0KTsKIAogICAgIHJldHVybiBQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgc3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyB0ZXh0Lmxlbmd0aCgpKTsKIH0KQEAgLTc2OSwx
MyArNzY3LDEzIEBAIHN0YXRpYyBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gY29weU1h
cmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNCiAgICAgcmV0dXJuIG1hcmtlcnM7
CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vy
dmluZ01hcmtlcnMoUGFzc1JlZlB0cjxUZXh0PiBwcnBOb2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCkKK3ZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYg
bm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFRleHQpCiB7Ci0gICAgUmVmUHRyPFRleHQ+IG5vZGUocHJwTm9kZSk7CisgICAgUmVm
PFRleHQ+IHByb3RlY3RlZE5vZGUobm9kZSk7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
JiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgYXV0byBtYXJr
ZXJzID0gY29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgY291bnQpLCBE
b2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKSk7CisgICAgYXV0byBtYXJrZXJzID0gY29weU1h
cmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyBjb3VudCksIERvY3VtZW50TWFy
a2VyOjpBbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZzZXQs
IGNvdW50LCByZXBsYWNlbWVudFRleHQpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgcmVw
bGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgcmVw
bGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1h
cmtlcnMpCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1h
cmtlcihuZXdSYW5nZS5nZXQoKSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCks
IG1hcmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1ldGFkYXRhKCkpOwpAQCAtODQyLDE0ICs4
NDAsOSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiAmc2VsZWN0aW9uLCBibwogICAgICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoc2VsZWN0aW9uLCBzbWFydERl
bGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFjZSwgZXhwYW5kRm9yU3BlY2lhbEVs
ZW1lbnRzLCBzYW5pdGl6ZU1hcmt1cCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZW1vdmVDU1NQcm9wZXJ0eShQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IGVsZW1lbnQsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHkpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVO
b2RlQXR0cmlidXRlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBlbGVtZW50LCBwcm9wZXJ0eSkpOwotfQotCi12b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQXR0cmlidXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQotewotICAgIHNl
dE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLCBudWxsQXRvbSk7CisgICAgc2V0Tm9k
ZUF0dHJpYnV0ZSgmZWxlbWVudCwgYXR0cmlidXRlLCBudWxsQXRvbSk7CiB9CiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBl
bGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCkBAIC05MDYsMTQgKzg5OSwxMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZWJhbGFuY2VXaGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJz
dHJpbmcoZG93bmNhc3Q8VGV4dD4obm9kZSksIHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgcmViYWxhbmNlV2hp
dGVzcGFjZU9uVGV4dFN1YnN0cmluZyhkb3duY2FzdDxUZXh0Pigqbm9kZSksIHBvc2l0aW9uLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VPblRl
eHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiBwcnBUZXh0Tm9kZSwgaW50IHN0YXJ0T2Zmc2V0
LCBpbnQgZW5kT2Zmc2V0KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hp
dGVzcGFjZU9uVGV4dFN1YnN0cmluZyhUZXh0JiB0ZXh0Tm9kZSwgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgZW5kT2Zmc2V0KQogewotICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IHBycFRleHROb2Rl
OwotCi0gICAgU3RyaW5nIHRleHQgPSB0ZXh0Tm9kZS0+ZGF0YSgpOworICAgIFN0cmluZyB0ZXh0
ID0gdGV4dE5vZGUuZGF0YSgpOwogICAgIEFTU0VSVCghdGV4dC5pc0VtcHR5KCkpOwogCiAgICAg
Ly8gU2V0IHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIHRvIGRlZmluZSB0aGUgZXh0ZW50IG9mIHRo
ZSB3aGl0ZXNwYWNlIHN1cnJvdW5kaW5nIHRleHRbb2Zmc2V0XS4KQEAgLTkyOSw4ICs5MjAsOCBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKFBhc3NSZWZQdHI8VGV4dD4gcAogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVVwc3RyZWFtUG9zKFBvc2l0aW9uKHRl
eHROb2RlLmdldCgpLCB1cHN0cmVhbSkpOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRG93
bnN0cmVhbVBvcyhQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgZG93bnN0cmVhbSkpOworICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlVXBzdHJlYW1Qb3MoUG9zaXRpb24oJnRleHROb2RlLCB1cHN0
cmVhbSkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRG93bnN0cmVhbVBvcyhQb3NpdGlv
bigmdGV4dE5vZGUsIGRvd25zdHJlYW0pKTsKICAgICAKICAgICBTdHJpbmcgc3RyaW5nID0gdGV4
dC5zdWJzdHJpbmcodXBzdHJlYW0sIGxlbmd0aCk7CiAgICAgU3RyaW5nIHJlYmFsYW5jZWRTdHJp
bmcgPSBzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2Uoc3RyaW5nLApAQCAtOTQwLDcgKzkz
MSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VPblRl
eHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiBwCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmRPZlBhcmFncmFwaCh2aXNp
YmxlRG93bnN0cmVhbVBvcykgfHwgKHVuc2lnbmVkKWRvd25zdHJlYW0gPT0gdGV4dC5sZW5ndGgo
KSk7CiAgICAgCiAgICAgaWYgKHN0cmluZyAhPSByZWJhbGFuY2VkU3RyaW5nKQotICAgICAgICBy
ZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFdURk1vdmUodGV4dE5vZGUpLCB1cHN0
cmVhbSwgbGVuZ3RoLCByZWJhbGFuY2VkU3RyaW5nKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5v
ZGVQcmVzZXJ2aW5nTWFya2Vycyh0ZXh0Tm9kZSwgdXBzdHJlYW0sIGxlbmd0aCwgcmViYWxhbmNl
ZFN0cmluZyk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0ZXNw
YWNlQXRQb3NpdGlvbkZvclNwbGl0KFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTk2Niw5ICs5NTcs
OSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRp
b25Gb3JTcGxpdChQb3NpdGlvbiYgcG9zaXRpbwogICAgIFBvc2l0aW9uIHByZXZpb3VzKHByZXZp
b3VzVmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAKICAgICBpZiAoZGVwcmVjYXRl
ZElzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHByZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRl
cigpKSAmJiBpczxUZXh0PigqcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhUTUxC
UkVsZW1lbnQ+KCpwcmV2aW91cy5kZXByZWNhdGVkTm9kZSgpKSkKLSAgICAgICAgcmVwbGFjZVRl
eHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyhkb3duY2FzdDxUZXh0PihwcmV2aW91cy5kZXByZWNh
dGVkTm9kZSgpKSwgcHJldmlvdXMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5n
TWFya2Vycyhkb3duY2FzdDxUZXh0PigqcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSksIHByZXZp
b3VzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmco
KSk7CiAgICAgaWYgKGRlcHJlY2F0ZWRJc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSh2aXNpYmxlUG9z
LmNoYXJhY3RlckFmdGVyKCkpICYmIGlzPFRleHQ+KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
KSAmJiAhaXM8SFRNTEJSRWxlbWVudD4oKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKQotICAg
ICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKGRvd25jYXN0PFRleHQ+KHBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpLCBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICByZXBsYWNlVGV4dElu
Tm9kZVByZXNlcnZpbmdNYXJrZXJzKGRvd25jYXN0PFRleHQ+KCpwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtp
bmdTcGFjZVN0cmluZygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxh
bmNlV2hpdGVzcGFjZSgpCkBAIC05ODIsMTQgKzk3MywxNCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlKCkKICAgICAgICAgcmViYWxhbmNlV2hpdGVzcGFj
ZUF0KHNlbGVjdGlvbi5lbmQoKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRl
bGV0ZUluc2lnbmlmaWNhbnRUZXh0KFBhc3NSZWZQdHI8VGV4dD4gdGV4dE5vZGUsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJ
bnNpZ25pZmljYW50VGV4dChUZXh0JiB0ZXh0Tm9kZSwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCkKIHsKLSAgICBpZiAoIXRleHROb2RlIHx8IHN0YXJ0ID49IGVuZCkKKyAgICBpZiAoc3Rh
cnQgPj0gZW5kKQogICAgICAgICByZXR1cm47CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91
dCgpOwogCi0gICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGV4dE5vZGUtPnJlbmRlcmVy
KCk7CisgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGV4dE5vZGUucmVuZGVyZXIoKTsK
ICAgICBpZiAoIXRleHRSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA3LDExICs5
OTgsMTEgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRl
eHQoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0Tm9kZSwgdW4KIAogICAgIGlmICghYm94KSB7CiAgICAg
ICAgIC8vIHdob2xlIHRleHQgbm9kZSBpcyBlbXB0eQotICAgICAgICByZW1vdmVOb2RlKHRleHRO
b2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgmdGV4dE5vZGUpOwogICAgICAgICByZXR1cm47ICAg
IAogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE5vZGUubGVuZ3RoKCk7CiAgICAgaWYgKHN0YXJ0
ID49IGxlbmd0aCB8fCBlbmQgPiBsZW5ndGgpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAzNCw3
ICsxMDI1LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2Fu
dFRleHQoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0Tm9kZSwgdW4KICAgICAgICAgICAgIGdhcFN0YXJ0
ID0gc3RkOjptYXgoZ2FwU3RhcnQsIHN0YXJ0KTsKICAgICAgICAgICAgIGdhcEVuZCA9IHN0ZDo6
bWluKGdhcEVuZCwgZW5kKTsKICAgICAgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgc3RyID0gdGV4dE5vZGUtPmRhdGEoKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0
YXJ0KTsKKyAgICAgICAgICAgICAgICBzdHIgPSB0ZXh0Tm9kZS5kYXRhKCkuc3Vic3RyaW5nKHN0
YXJ0LCBlbmQgLSBzdGFydCk7CiAgICAgICAgICAgICAvLyByZW1vdmUgdGV4dCBpbiB0aGUgZ2Fw
CiAgICAgICAgICAgICBzdHIucmVtb3ZlKGdhcFN0YXJ0IC0gc3RhcnQgLSByZW1vdmVkLCBnYXBM
ZW4pOwogICAgICAgICAgICAgcmVtb3ZlZCArPSBnYXBMZW47CkBAIC0xMDU3LDcgKzEwNDgsNyBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dChQYXNz
UmVmUHRyPFRleHQ+IHRleHROb2RlLCB1bgogICAgICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgd2Ug
YXJlIG5vdCBnb2luZyB0byBkZWxldGUgYWxsIG9mIHRoZSB0ZXh0IGluIHRoZSBub2RlLgogICAg
ICAgICAgICAgLy8gSWYgd2Ugd2VyZSwgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgYWJvdmUg
d2l0aCB0aGUgY2FsbCB0byAKICAgICAgICAgICAgIC8vIHJlbW92ZU5vZGUgYW5kIHJldHVybi4K
LSAgICAgICAgICAgIEFTU0VSVChzdGFydCA+IDAgfHwgZW5kIC0gc3RhcnQgPCB0ZXh0Tm9kZS0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXJ0ID4gMCB8fCBlbmQgLSBzdGFydCA8
IHRleHROb2RlLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0
Tm9kZSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNzEsMTcg
KzEwNjIsMTcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2Fu
dFRleHQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAogICAgIGlmIChjb21wYXJlUG9zaXRp
b25zKHN0YXJ0LCBlbmQpID49IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWZQ
dHI8VGV4dD4+IG5vZGVzOworICAgIFZlY3RvcjxSZWY8VGV4dD4+IG5vZGVzOwogICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBpZiAoaXM8VGV4dD4oKm5vZGUpKQotICAg
ICAgICAgICAgbm9kZXMuYXBwZW5kKGRvd25jYXN0PFRleHQ+KG5vZGUpKTsKKyAgICAgICAgICAg
IG5vZGVzLmFwcGVuZChkb3duY2FzdDxUZXh0Pigqbm9kZSkpOwogICAgICAgICBpZiAobm9kZSA9
PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGZvciAoYXV0byYgdGV4dE5vZGUgOiBub2RlcykgewotICAgICAgICBpbnQgc3RhcnRPZmZzZXQg
PSB0ZXh0Tm9kZSA9PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA6IDA7Ci0gICAgICAgIGludCBlbmRPZmZzZXQgPSB0ZXh0Tm9kZSA9PSBl
bmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogc3Rh
dGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVuZ3RoKCkpOworICAgICAgICBpbnQgc3RhcnRPZmZz
ZXQgPSB0ZXh0Tm9kZS5wdHIoKSA9PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CisgICAgICAgIGludCBlbmRPZmZzZXQgPSB0ZXh0
Tm9kZS5wdHIoKSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpIDogc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVuZ3RoKCkpOwogICAgICAg
ICBkZWxldGVJbnNpZ25pZmljYW50VGV4dCh0ZXh0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CiAgICAgfQogfQpAQCAtMTE0Nyw3ICsxMTM4LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdChjb25zdCBQb3NpdGlvbiYgcCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBkZWxldGVUZXh0RnJvbU5vZGUoZG93bmNhc3Q8VGV4dD4o
cC5hbmNob3JOb2RlKCkpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCAxKTsKKyAgICBkZWxl
dGVUZXh0RnJvbU5vZGUoZG93bmNhc3Q8VGV4dD4oKnAuYW5jaG9yTm9kZSgpKSwgcC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgMSk7CiB9CiAKIFJlZjxIVE1MRWxlbWVudD4gQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQpAQCAtMTMzOCw3ICsxMzI5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6Y2xlYW51cEFmdGVyRGVsZXRpb24oVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9uKQog
ICAgICAgICAgICAgaWYgKHRleHROb2RlLmxlbmd0aCgpID09IDEpCiAgICAgICAgICAgICAgICAg
cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG5vZGUpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dE5vZGUsIHBvc2l0aW9uLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEpOworICAgICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9t
Tm9kZSh0ZXh0Tm9kZSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUyLDcgKzE2NDMsNyBAQCBib29sIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgoKQogICAg
ICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gdGV4dE5vZGUucGFyZW50Tm9kZSgpOwog
ICAgICAgICAvLyBUaGUgcHJlc2VydmVkIG5ld2xpbmUgbXVzdCBiZSB0aGUgZmlyc3QgdGhpbmcg
aW4gdGhlIG5vZGUsIHNpbmNlIG90aGVyd2lzZSB0aGUgcHJldmlvdXMKICAgICAgICAgLy8gcGFy
YWdyYXBoIHdvdWxkIGJlIHF1b3RlZCwgYW5kIHdlIHZlcmlmaWVkIHRoYXQgaXQgd2Fzbid0IGFi
b3ZlLgotICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHROb2RlLCAwLCAxKTsKKyAgICAg
ICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHROb2RlLCAwLCAxKTsKICAgICAgICAgcHJ1bmUocGFy
ZW50Tm9kZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmgKaW5kZXggY2E0OTc0NGFlZThiZWI4MTQyZjFjNzM5NjFiZjQ2ZThmOWNhMjc0
Ny4uYWJlMWM4YjlkY2U0NDhmODQ1ZDc4MTQ4YmVmMWIyMDdlMjhmN2VlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaApAQCAtMTQyLDcgKzE0Miw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJlbW92ZVN0eWxlZEVsZW1lbnQoUmVmPEVsZW1lbnQ+
JiYpOwogICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwg
Ym9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2Us
IGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gdHJ1ZSwgYm9vbCBzYW5pdGl6ZU1hcmt1
cCA9IHRydWUpOwogICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVt
ZW50cyA9IHRydWUsIGJvb2wgc2FuaXRpemVNYXJrdXAgPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlVGV4dEZyb21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgY291bnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoVGV4
dCYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpOwogICAgIHZvaWQgaW5wdXRUZXh0
KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0ID0gZmFsc2UpOwogICAgIGJv
b2wgaXNSZW1vdmFibGVCbG9jayhjb25zdCBOb2RlKik7CiAgICAgdm9pZCBpbnNlcnROb2RlQWZ0
ZXIoUmVmPE5vZGU+JiYsIE5vZGUmIHJlZkNoaWxkKTsKQEAgLTE1MSwxNyArMTUxLDE2IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGluc2VydE5vZGVCZWZvcmUoUmVmPE5vZGU+JiYsIE5vZGUmIHJl
ZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yKGJvb2wgdXNlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQgPSBmYWxzZSwgYm9vbCBwYXN0ZUJs
b2NrcXV0b2VJbnRvVW5xdW90ZWRBcmVhID0gZmFsc2UpOwogICAgIHZvaWQgaW5zZXJ0TGluZUJy
ZWFrKCk7Ci0gICAgdm9pZCBpbnNlcnRUZXh0SW50b05vZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5z
aWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpOwotICAgIHZvaWQgbWVyZ2VJZGVudGlj
YWxFbGVtZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAg
ICB2b2lkIGluc2VydFRleHRJbnRvTm9kZShUZXh0JiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBT
dHJpbmcmIHRleHQpOworICAgIHZvaWQgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhFbGVtZW50Jiwg
RWxlbWVudCYpOwogICAgIHZvaWQgcmViYWxhbmNlV2hpdGVzcGFjZSgpOwogICAgIHZvaWQgcmVi
YWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCByZWJhbGFuY2VX
aGl0ZXNwYWNlT25UZXh0U3Vic3RyaW5nKFBhc3NSZWZQdHI8VGV4dD4sIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCk7CisgICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKFRleHQmLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOwogICAgIHZvaWQg
cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mKTsKICAgICBib29s
IGNhblJlYmFsYW5jZShjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUmVi
YWxhbmNlTGVhZGluZ1doaXRlc3BhY2VGb3IoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdm9p
ZCByZW1vdmVDU1NQcm9wZXJ0eShQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+LCBDU1NQcm9wZXJ0
eUlEKTsKLSAgICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50Piwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkcmVu
SW5SYW5nZShQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7Cisg
ICAgdm9pZCByZW1vdmVOb2RlQXR0cmlidXRlKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpOworICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKE5vZGUmLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZU5vZGUoUGFz
c1JlZlB0cjxOb2RlPiwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05v
dEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAgICBIVE1MRWxlbWVudCogcmVwbGFj
ZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4pOwogICAgIHZvaWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQ
YXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERv
Tm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwpAQCAtMTY5LDkgKzE2OCw5IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KE5vZGUq
LCBOb2RlKiBwYXN0TGFzdE5vZGVUb01vdmUsIFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwTmV3UGFy
ZW50KTsKICAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWxQcmVzZXJ2aW5nQ2hp
bGRyZW4oUG9zaXRpb24mLCBOb2RlJik7CiAgICAgdm9pZCBwcnVuZShQYXNzUmVmUHRyPE5vZGU+
KTsKLSAgICB2b2lkIHJlcGxhY2VUZXh0SW5Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsK
KyAgICB2b2lkIHJlcGxhY2VUZXh0SW5Ob2RlKFRleHQmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUG9zaXRpb24g
cmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOwor
ICAgIHZvaWQgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycyhUZXh0JiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQp
OwogICAgIFBvc2l0aW9uIHBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mKTsK
ICAgICB2b2lkIHNldE5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2
b2lkIHNwbGl0RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPE5vZGU+IGF0
Q2hpbGQpOwpAQCAtMTc5LDcgKzE3OCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudChQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZzZXQp
OwogICAgIHZvaWQgd3JhcENvbnRlbnRzSW5EdW1teVNwYW4oRWxlbWVudCYpOwogCi0gICAgdm9p
ZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dChQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKTsKKyAgICB2b2lkIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQm
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKICAgICB2b2lkIGRlbGV0ZUluc2lnbmlm
aWNhbnRUZXh0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAg
ICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oY29uc3QgUG9zaXRpb24m
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5v
ZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZC5jcHAKaW5kZXggMzllMDQ3MDhkMWI2YmM5NWY1NzRmYzc5YTFiYzJmZTIxZDA5OTM2
MS4uZGVmOGFmZDk4ODE4Y2MzZmI3N2Y2ZTUyZmQ3ZjhiNDJkOWU4M2M3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCkBA
IC0zMiwyMiArMzIsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EZWxldGVGcm9tVGV4
dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmIG5v
ZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKK0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1h
bmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDogU2ltcGxlRWRpdENvbW1hbmQobm9kZS0+ZG9j
dW1lbnQoKSwgZWRpdGluZ0FjdGlvbikKLSAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9ub2Rl
KFdURk1vdmUobm9kZSkpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgLCBtX2NvdW50KGNv
dW50KQogewotICAgIEFTU0VSVChtX25vZGUpOwogICAgIEFTU0VSVChtX29mZnNldCA8PSBtX25v
ZGUtPmxlbmd0aCgpKTsKICAgICBBU1NFUlQobV9vZmZzZXQgKyBtX2NvdW50IDw9IG1fbm9kZS0+
bGVuZ3RoKCkpOwogfQogCiB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHko
KQogewotICAgIEFTU0VSVChtX25vZGUpOwotCi0gICAgaWYgKCFpc0VkaXRhYmxlTm9kZSgqbV9u
b2RlKSkKKyAgICBpZiAoIWlzRWRpdGFibGVOb2RlKG1fbm9kZSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGF1dG8gcmVzdWx0ID0gbV9ub2RlLT5zdWJzdHJpbmdEYXRhKG1fb2Zmc2V0LCBtX2Nv
dW50KTsKQEAgLTU5LDggKzU2LDYgQEAgdm9pZCBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpk
b0FwcGx5KCkKIAogdm9pZCBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQog
ewotICAgIEFTU0VSVChtX25vZGUpOwotCiAgICAgaWYgKCFtX25vZGUtPmhhc0VkaXRhYmxlU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03MCw3ICs2NSw3IEBAIHZvaWQgRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIERlbGV0
ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBu
b2RlcykKIHsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9ub2RlLmdldCgpLCBub2Rlcyk7
CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fbm9kZS5wdHIoKSwgbm9kZXMpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kLmgKaW5kZXggOTBjNTE0NWQzN2Y3ODQ0MTE0YjgxZDkzNGFhM2U3YTkzYzk4YTU3Mi4u
YjgxYzYyZDM3ZWU1YjhlZTFkMWU5OTUzMGM0MTExYzFmN2VlOWZhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmgKQEAgLTMzLDEz
ICszMywxMyBAQCBjbGFzcyBUZXh0OwogCiBjbGFzcyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5k
IDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERl
bGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShSZWZQdHI8VGV4dD4mJiBub2RlLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24gPSBF
ZGl0QWN0aW9uRGVsZXRlKQorICAgIHN0YXRpYyBSZWY8RGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZD4gY3JlYXRlKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291
bnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiA9IEVkaXRBY3Rpb25EZWxldGUpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKFdU
Rk1vdmUobm9kZSksIG9mZnNldCwgY291bnQsIGVkaXRpbmdBY3Rpb24pKTsKICAgICB9CiAKIHBy
b3RlY3RlZDoKLSAgICBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFZGl0QWN0aW9uKTsKKyAgICBEZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGNvdW50LCBFZGl0QWN0aW9uKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVy
cmlkZTsKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldE5vZGVzSW5Db21t
YW5kKEhhc2hTZXQ8Tm9kZSo+Jikgb3ZlcnJpZGU7CiAjZW5kaWYKICAgICAKLSAgICBSZWZQdHI8
VGV4dD4gbV9ub2RlOworICAgIFJlZjxUZXh0PiBtX25vZGU7CiAgICAgdW5zaWduZWQgbV9vZmZz
ZXQ7CiAgICAgdW5zaWduZWQgbV9jb3VudDsKICAgICBTdHJpbmcgbV90ZXh0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggN2E3
NWU2OThmZTkzYWQyYzU1OTliODAwMjk4OGU5ZDRjMjFkMWM4Yy4uYzVjZWU3MTQyYWVjNDQzY2Mw
YjdmYWI4ZDM0MDY2N2M0OTVjZmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00NDQsMTMgKzQ0NCwxMyBAQCBzdGF0aWMg
dm9pZCB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKE5vZGUqIG5vZGUsIGludCBvZmZzZXQs
IGludCBjb3VudCwgUG9zaQogICAgICAgICBwb3NpdGlvbi5tb3ZlVG9PZmZzZXQob2Zmc2V0KTsK
IH0KIAotdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoUGFz
c1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQordm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCYgbm9kZSwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICAvLyBGSVhNRTogVXBkYXRl
IHRoZSBlbmRwb2ludHMgb2YgdGhlIHJhbmdlIGJlaW5nIGRlbGV0ZWQuCi0gICAgdXBkYXRlUG9z
aXRpb25Gb3JUZXh0UmVtb3ZhbChub2RlLmdldCgpLCBvZmZzZXQsIGNvdW50LCBtX2VuZGluZ1Bv
c2l0aW9uKTsKLSAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKG5vZGUuZ2V0KCksIG9m
ZnNldCwgY291bnQsIG1fbGVhZGluZ1doaXRlc3BhY2UpOwotICAgIHVwZGF0ZVBvc2l0aW9uRm9y
VGV4dFJlbW92YWwobm9kZS5nZXQoKSwgb2Zmc2V0LCBjb3VudCwgbV90cmFpbGluZ1doaXRlc3Bh
Y2UpOwotICAgIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwobm9kZS5nZXQoKSwgb2Zmc2V0
LCBjb3VudCwgbV9kb3duc3RyZWFtRW5kKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1v
dmFsKCZub2RlLCBvZmZzZXQsIGNvdW50LCBtX2VuZGluZ1Bvc2l0aW9uKTsKKyAgICB1cGRhdGVQ
b3NpdGlvbkZvclRleHRSZW1vdmFsKCZub2RlLCBvZmZzZXQsIGNvdW50LCBtX2xlYWRpbmdXaGl0
ZXNwYWNlKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKCZub2RlLCBvZmZzZXQs
IGNvdW50LCBtX3RyYWlsaW5nV2hpdGVzcGFjZSk7CisgICAgdXBkYXRlUG9zaXRpb25Gb3JUZXh0
UmVtb3ZhbCgmbm9kZSwgb2Zmc2V0LCBjb3VudCwgbV9kb3duc3RyZWFtRW5kKTsKICAgICAKICAg
ICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKG5vZGUsIG9mZnNldCwg
Y291bnQpOwogfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IHN0YXJ0Tm9k
ZUNhcmV0TWF4T2Zmc2V0ICYmIGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgIFRleHQm
IHRleHQgPSBkb3duY2FzdDxUZXh0Pigqc3RhcnROb2RlKTsKICAgICAgICAgaWYgKHRleHQubGVu
Z3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnROb2RlQ2FyZXRNYXhPZmZzZXQpKQot
ICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCBzdGFydE5vZGVDYXJldE1heE9m
ZnNldCwgdGV4dC5sZW5ndGgoKSAtIHN0YXJ0Tm9kZUNhcmV0TWF4T2Zmc2V0KTsKKyAgICAgICAg
ICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE5vZGVDYXJldE1heE9mZnNldCwgdGV4
dC5sZW5ndGgoKSAtIHN0YXJ0Tm9kZUNhcmV0TWF4T2Zmc2V0KTsKICAgICB9CiAKICAgICBpZiAo
c3RhcnRPZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcoKnN0YXJ0Tm9kZSkpIHsKQEAgLTUx
Miw5ICs1MTIsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxE
ZWxldGUoKQogICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAg
ICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpOwotICAg
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dCwgc3RhcnRPZmZzZXQsIG1fZG93
bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc3RhcnRPZmZzZXQpOworICAg
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwgbV9kb3du
c3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShz
dGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKCpzdGFydE5v
ZGUsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IG1fdXBzdHJlYW1TdGFydDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTMyLDE0ICs1MzIsMTQgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAgIGlm
IChpczxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBu
b2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAogICAgICAgICAgICAgICAgIFRleHQmIHRleHQg
PSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21O
b2RlKCZ0ZXh0LCBzdGFydE9mZnNldCwgdGV4dC5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgc3RhcnRPZmZzZXQsIHRleHQu
bGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBub2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChzdGFydE9mZnNldCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnROb2RlID09IG1fdXBzdHJlYW1FbmQu
ZGVwcmVjYXRlZE5vZGUoKSAmJiBpczxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICAgICAg
VGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCptX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkpOwotICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCAwLCBtX3Vwc3RyZWFt
RW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICAgICAgZGVsZXRlVGV4dEZy
b21Ob2RlKHRleHQsIDAsIG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGhhbmRsZSBkZWxldGluZyBhbGwgbm9k
ZXMgdGhhdCBhcmUgY29tcGxldGVseSBzZWxlY3RlZApAQCAtNTczLDcgKzU3Myw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAogICAg
ICAgICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0
cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCAwLCBtX2Rvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVU
ZXh0RnJvbU5vZGUodGV4dCwgMCwgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gUmVtb3Zl
IGNoaWxkcmVuIG9mIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpIHRoYXQgY29tZSBh
ZnRlciBtX3Vwc3RyZWFtU3RhcnQuCiAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgdHJ5IHRvIHJl
bW92ZSBjaGlsZHJlbiBpZiBtX3Vwc3RyZWFtU3RhcnQgd2FzIGluc2lkZSBtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZE5vZGUoKQpAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBuLT5jb21wdXRl
Tm9kZUluZGV4KCkgKyAxOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUo
KSwgb2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZSgqbV9kb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWROb2RlKCksIG9mZnNldCwgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBtX2Rvd25zdHJlYW1FbmQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCks
IG9mZnNldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNjA1LDEyICs2
MDUsMTIgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpmaXh1cFdoaXRlc3BhY2UoKQog
ICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX2xlYWRpbmdXaGl0
ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxUZXh0PigqbV9sZWFkaW5nV2hpdGVz
cGFjZS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25j
YXN0PFRleHQ+KCptX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAg
ICBBU1NFUlQoIXRleHROb2RlLnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUucmVuZGVyZXIoKS0+c3R5
bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7Ci0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJl
c2VydmluZ01hcmtlcnMoJnRleHROb2RlLCBtX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CisgICAgICAgIHJl
cGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnModGV4dE5vZGUsIG1fbGVhZGluZ1doaXRl
c3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZygpKTsKICAgICB9CiAgICAgaWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYm
ICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgaXM8VGV4dD4o
Km1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIFRleHQm
IHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRleHROb2RlLnJlbmRlcmVyKCkgfHwgdGV4dE5v
ZGUucmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7Ci0gICAgICAgIHJl
cGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoJnRleHROb2RlLCBtX3RyYWlsaW5nV2hp
dGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3Ry
aW5nKCkpOworICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKHRleHRO
b2RlLCBtX3RyYWlsaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBu
b25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCBjMTdmNmRlZWE4ZmViMzcw
YzY5YzZlMzhiYjVkYjJiYjVhNmVkNDE4Li42ZDhhN2MyMjYzNmM0ZmRhMTYzNzIwMDVjZjI5YWE1
YTg2YzY1NjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuaApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUcmFu
c2llbnRTdGF0ZSgpOwogICAgIHZvaWQgbWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVu
T2ZFZGl0YWJsZVJvb3RUb1ByZXZlbnRTdHlsZUxvc3MoKTsKICAgICB2b2lkIHJlbW92ZU5vZGUo
UGFzc1JlZlB0cjxOb2RlPiwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBE
b05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
bGV0ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCwgdW5zaWduZWQpIG92
ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlVGV4dEZyb21Ob2RlKFRleHQmLCB1bnNpZ25lZCwgdW5z
aWduZWQpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50QmxvY2tzKCk7CiAKICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byBvcmlnaW5hbCBzdHJpbmcgYWZ0
ZXIgdGhlIGNvcnJlY3Rpb24gaGFzIGJlZW4gZGVsZXRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ0FsbEluT25lLmNwcAppbmRleCA2NTMyZTE0NzkxZjgyMmEyMGEwOGJmYmMyNTQ5
ZGNjMjIzZTgyNDMxLi40MjgzOWUzMWM1MGUzOTNlNjEyNGIyOTY2ODI3NjkyNDBjZGIwOGUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSA8TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwPgogI2lu
Y2x1ZGUgPE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA+CiAjaW5jbHVkZSA8TW92ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwPgotI2luY2x1ZGUgPFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHA+
CiAjaW5jbHVkZSA8UmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8UmVtb3ZlTm9k
ZUNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21t
YW5kLmNwcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBiZTE5
ZjljNGQ5MjIxNTMwYTIyZDM0N2ZiMGM0M2QxYjk0MWY0MjQ3Li5kYjdlNjZkODhkOTIyNTZkYWU2
MDJjY2I4MjI1ODMzMzQ4ZTZmMTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwCkBAIC03MDEsMTMgKzcwMSwxMyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5
bGVBZGRlZEJ5Tm9kZShOb2RlKiBub2RlKQogICAgIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVz
KCpub2RlU3R5bGUpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25mbGlj
dGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKQordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92
ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAo
IW5vZGUgfHwgIW5vZGUtPnBhcmVudE5vZGUoKSB8fCAhbV9tdXRhYmxlU3R5bGUpCisgICAgaWYg
KCFub2RlLnBhcmVudE5vZGUoKSB8fCAhbV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJlbnRTdHlsZSA9IGNvcHlQ
cm9wZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpLCBFZGl0aW5nUHJv
cGVydGllc0luRWZmZWN0KTsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBub2RlU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShub2RlLCBFZGl0aW5nUHJvcGVydGllc0luRWZmZWN0KTsKKyAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyZW50U3R5bGUgPSBjb3B5UHJvcGVy
dGllc0Zyb21Db21wdXRlZFN0eWxlKG5vZGUucGFyZW50Tm9kZSgpLCBFZGl0aW5nUHJvcGVydGll
c0luRWZmZWN0KTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBub2RlU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZSgmbm9kZSwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7CiAgICAgbm9k
ZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcygqcGFyZW50U3R5bGUpOwogCiAgICAg
TXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGUgPSBub2RlU3R5bGUtPnN0eWxlKCk7CkBAIC0x
MTMzLDE1ICsxMTMzLDE1IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUlubGluZVN0eWxlT2ZF
bGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIENTU1Byb3BlcnR5CiAgICAgfQogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVT
dHlsZURlY2woY29uc3QgSFRNTEVsZW1lbnRFcXVpdmFsZW50KiBlcXVpdmFsZW50LCBjb25zdCBT
dHlsZWRFbGVtZW50KiBlbGVtZW50LAorc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRNYXRjaGVz
QW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGNvbnN0IEhUTUxFbGVtZW50RXF1aXZh
bGVudCogZXF1aXZhbGVudCwgY29uc3QgU3R5bGVkRWxlbWVudCYgZWxlbWVudCwKICAgICBFZGl0
aW5nU3R5bGU6OkNTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUsIEVkaXRpbmdTdHlsZSYgc3R5
bGUpCiB7Ci0gICAgaWYgKCFlcXVpdmFsZW50LT5tYXRjaGVzKCplbGVtZW50KSkKKyAgICBpZiAo
IWVxdWl2YWxlbnQtPm1hdGNoZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAobW9kZSAhPSBFZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzICYmIGVxdWl2YWxlbnQt
PnByb3BlcnR5RXhpc3RzSW5TdHlsZShzdHlsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiAhZWxlbWVudC0+aW5saW5lU3R5bGUoKSB8fCAhZXF1aXZhbGVudC0+cHJvcGVy
dHlFeGlzdHNJblN0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQtPmlubGluZVN0eWxl
KCkpLmdldCgpKTsKKyAgICByZXR1cm4gIWVsZW1lbnQuaW5saW5lU3R5bGUoKSB8fCAhZXF1aXZh
bGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQu
aW5saW5lU3R5bGUoKSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgUmVmUHRyPE11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IGV4dHJhY3RFZGl0aW5nUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMq
IHN0eWxlLCBFZGl0aW5nU3R5bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5j
bHVkZSkKQEAgLTExNTksMjcgKzExNTksMjcgQEAgc3RhdGljIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBleHRyYWN0RWRpdGluZ1Byb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXIKICAg
ICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlLCBBbGxFZGl0aW5nUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVP
ZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUg
bW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQordm9pZCBFZGl0
aW5nU3R5bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVt
ZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlLCBQcm9wZXJ0aWVzVG9J
bmNsdWRlIHByb3BlcnRpZXNUb0luY2x1ZGUpCiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
c3R5bGVGcm9tUnVsZXMgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAgIHN0eWxlRnJvbVJ1
bGVzLT5tZXJnZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbihlbGVtZW50KTsKIAotICAg
IGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQotICAgICAgICBzdHlsZUZyb21SdWxlcy0+bV9t
dXRhYmxlU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCplbGVtZW50LT5pbmxpbmVT
dHlsZSgpKTsKKyAgICBpZiAoZWxlbWVudC5pbmxpbmVTdHlsZSgpKQorICAgICAgICBzdHlsZUZy
b21SdWxlcy0+bV9tdXRhYmxlU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCplbGVt
ZW50LmlubGluZVN0eWxlKCkpOwogCiAgICAgc3R5bGVGcm9tUnVsZXMtPm1fbXV0YWJsZVN0eWxl
ID0gZXh0cmFjdEVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlRnJvbVJ1bGVzLT5tX211dGFibGVTdHls
ZS5nZXQoKSwgcHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAgbWVyZ2VTdHlsZShzdHlsZUZyb21S
dWxlcy0+bV9tdXRhYmxlU3R5bGUuZ2V0KCksIG1vZGUpOwogCiAgICAgZm9yIChhdXRvJiBlcXVp
dmFsZW50IDogaHRtbEVsZW1lbnRFcXVpdmFsZW50cygpKSB7CiAgICAgICAgIGlmIChlbGVtZW50
TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChlcXVpdmFsZW50LmdldCgp
LCBlbGVtZW50LCBtb2RlLCAqdGhpcykpCi0gICAgICAgICAgICBlcXVpdmFsZW50LT5hZGRUb1N0
eWxlKGVsZW1lbnQsIHRoaXMpOworICAgICAgICAgICAgZXF1aXZhbGVudC0+YWRkVG9TdHlsZSgm
ZWxlbWVudCwgdGhpcyk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBlcXVpdmFsZW50IDogaHRt
bEF0dHJpYnV0ZUVxdWl2YWxlbnRzKCkpIHsKICAgICAgICAgaWYgKGVxdWl2YWxlbnQtPmF0dHJp
YnV0ZU5hbWUoKSA9PSBIVE1MTmFtZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsg
Ly8gV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGRpcmVjdGlvbmFsaXR5CiAgICAgICAgIGlmIChl
bGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChlcXVpdmFsZW50
LmdldCgpLCBlbGVtZW50LCBtb2RlLCAqdGhpcykpCi0gICAgICAgICAgICBlcXVpdmFsZW50LT5h
ZGRUb1N0eWxlKGVsZW1lbnQsIHRoaXMpOworICAgICAgICAgICAgZXF1aXZhbGVudC0+YWRkVG9T
dHlsZSgmZWxlbWVudCwgdGhpcyk7CiAgICAgfQogfQogCkBAIC0xMjA0LDcgKzEyMDQsNyBAQCBS
ZWY8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OndyYXBwaW5nU3R5bGVGb3JTZXJpYWxpemF0
aW9uKE5vZGUqIGNvbnRleHQsIGJvbwogICAgIC8vIFdoZW4gbm90IGFubm90YXRpbmcgZm9yIGlu
dGVyY2hhbmdlLCB3ZSBvbmx5IHByZXNlcnZlIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMuCiAg
ICAgZm9yIChOb2RlKiBub2RlID0gY29udGV4dDsgbm9kZSAmJiAhbm9kZS0+aXNEb2N1bWVudE5v
ZGUoKTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoaXM8U3R5bGVk
RWxlbWVudD4oKm5vZGUpICYmICFpc01haWxCbG9ja3F1b3RlKG5vZGUpKSB7Ci0gICAgICAgICAg
ICB3cmFwcGluZ1N0eWxlLT5tZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoZG93
bmNhc3Q8U3R5bGVkRWxlbWVudD4obm9kZSksIEVkaXRpbmdTdHlsZTo6RG9Ob3RPdmVycmlkZVZh
bHVlcywKKyAgICAgICAgICAgIHdyYXBwaW5nU3R5bGUtPm1lcmdlSW5saW5lQW5kSW1wbGljaXRT
dHlsZU9mRWxlbWVudChkb3duY2FzdDxTdHlsZWRFbGVtZW50Pigqbm9kZSksIEVkaXRpbmdTdHls
ZTo6RG9Ob3RPdmVycmlkZVZhbHVlcywKICAgICAgICAgICAgICAgICBFZGl0aW5nU3R5bGU6OkVk
aXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3QpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI2MiwxMCAr
MTI2MiwxMCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShjb25zdCBTdHlsZVByb3Bl
cnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTQogICAgIG1fZm9udFNpemVEZWx0YSAr
PSBvbGRGb250U2l6ZURlbHRhOwogfQogCi1zdGF0aWMgUmVmPE11dGFibGVTdHlsZVByb3BlcnRp
ZXM+IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgdW5z
aWduZWQgcnVsZXNUb0luY2x1ZGUpCitzdGF0aWMgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgdW5zaWdu
ZWQgcnVsZXNUb0luY2x1ZGUpCiB7CiAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBlbGVtZW50LT5z
dHlsZVJlc29sdmVyKCkuc3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcnVsZXNUb0luY2x1
ZGUpKSB7CisgICAgZm9yIChhdXRvJiBtYXRjaGVkUnVsZSA6IGVsZW1lbnQuc3R5bGVSZXNvbHZl
cigpLnN0eWxlUnVsZXNGb3JFbGVtZW50KCZlbGVtZW50LCBydWxlc1RvSW5jbHVkZSkpIHsKICAg
ICAgICAgaWYgKG1hdGNoZWRSdWxlLT5pc1N0eWxlUnVsZSgpKQogICAgICAgICAgICAgc3R5bGUt
Pm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KHN0YXRpY19wb2ludGVyX2Nhc3Q8U3R5bGVSdWxl
PihtYXRjaGVkUnVsZSktPnByb3BlcnRpZXMoKSk7CiAgICAgfQpAQCAtMTI3Myw3ICsxMjczLDcg
QEAgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21NYXRjaGVkUnVs
ZXNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW0KICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQg
RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQp
Cit2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlcyhTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21N
YXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsCiAg
ICAgICAgIFN0eWxlUmVzb2x2ZXI6OkF1dGhvckNTU1J1bGVzIHwgU3R5bGVSZXNvbHZlcjo6Q3Jv
c3NPcmlnaW5DU1NSdWxlcyk7CkBAIC0xMjg2LDcgKzEyODYsNyBAQCB2b2lkIEVkaXRpbmdTdHls
ZTo6bWVyZ2VTdHlsZUZyb21SdWxlcyhTdHlsZWRFbGVtZW50KiBlbGVtZW50KQogICAgIG1fbXV0
YWJsZVN0eWxlID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzOwogfQogCi12b2lkIEVkaXRpbmdTdHls
ZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24oU3R5bGVkRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXph
dGlvbihTdHlsZWRFbGVtZW50JiBlbGVtZW50KQogewogICAgIG1lcmdlU3R5bGVGcm9tUnVsZXMo
ZWxlbWVudCk7CiAKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbihTdHlsZWRFbGVtZW50KiBlbGVtZW50KQog
ICAgIC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0OiAxJTsgb3ZlcmZsb3c6IHZpc2libGU7
IiBpbiBxdWlya3Ntb2RlCiAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlcnMgbGlrZSB0aGlz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTUxMjM+IFNsYXNoZG90IGNvcHkvcGFzdGUgZmlkZWxp
dHkgcHJvYmxlbQogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBmcm9tQ29tcHV0
ZWRTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIENvbXB1dGVk
U3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShlbGVtZW50KTsKKyAgICBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUoJmVsZW1lbnQpOwogCiAgICAgewogICAgICAgICB1bnNp
Z25lZCBwcm9wZXJ0eUNvdW50ID0gbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5Q291bnQoKTsKQEAg
LTEzMjIsOSArMTMyMiw4IEBAIHN0YXRpYyB2b2lkIHJlbW92ZVByb3BlcnRpZXNJblN0eWxlKE11
dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlVG9SZW1vdmVQcm9wZXJ0CiAgICAgc3R5bGVUb1Jl
bW92ZVByb3BlcnRpZXNGcm9tLT5yZW1vdmVQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGllc1RvUmVt
b3ZlLmRhdGEoKSwgcHJvcGVydGllc1RvUmVtb3ZlLnNpemUoKSk7CiB9CiAKLXZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCwgTm9kZSogY29udGV4dCkKK3ZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21S
dWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCYgZWxlbWVudCwgTm9kZSogY29udGV4dCkKIHsK
LSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgaWYgKCFtX211dGFibGVTdHlsZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMzUzLDcgKzEzNTIsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3Zl
U3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIE5vZGUqCiAg
ICAgfQogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERl
ZmF1bHRTdHlsZShFbGVtZW50KiBlbGVtZW50KQordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVBy
b3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBp
ZiAoIW1fbXV0YWJsZVN0eWxlIHx8IG1fbXV0YWJsZVN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCmluZGV4IDFjYTA3MTM1
ZjVmNDJkYjFmNjRkYzc4MGIyNjA3OTUzNDIxZjA5ZjYuLmMxNzEzOGQ0MDE3ZDJlNWFhMjc0ZTU4
NDU2OTdhOTM0YjdiYTY1NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaApA
QCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICBSZWY8RWRpdGluZ1N0eWxlPiBleHRyYWN0
QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigpOwogICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCk7CiAgICAgdm9pZCByZW1vdmVTdHlsZUFkZGVkQnlOb2RlKE5vZGUqKTsKLSAgICB2b2lkIHJl
bW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSopOworICAgIHZvaWQgcmVt
b3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhUJik7CiAgICAgdm9p
ZCBjb2xsYXBzZVRleHREZWNvcmF0aW9uUHJvcGVydGllcygpOwogICAgIGVudW0gU2hvdWxkSWdu
b3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHsgSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzLCBEb05vdEln
bm9yZVRleHRPbmx5UHJvcGVydGllcyB9OwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAgcHVibGljOgog
ICAgIGVudW0gQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUgeyBPdmVycmlkZVZhbHVlcywgRG9Ob3RP
dmVycmlkZVZhbHVlcyB9OwogICAgIHZvaWQgbWVyZ2VJbmxpbmVTdHlsZU9mRWxlbWVudChTdHls
ZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUg
PSBBbGxQcm9wZXJ0aWVzKTsKICAgICBzdGF0aWMgUmVmPEVkaXRpbmdTdHlsZT4gd3JhcHBpbmdT
dHlsZUZvclNlcmlhbGl6YXRpb24oTm9kZSogY29udGV4dCwgYm9vbCBzaG91bGRBbm5vdGF0ZSk7
Ci0gICAgdm9pZCBtZXJnZVN0eWxlRnJvbVJ1bGVzKFN0eWxlZEVsZW1lbnQqKTsKLSAgICB2b2lk
IG1lcmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKFN0eWxlZEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dChTdHlsZWRFbGVtZW50KiwgTm9k
ZSogY29udGV4dCk7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0
eWxlKEVsZW1lbnQqKTsKKyAgICB2b2lkIG1lcmdlU3R5bGVGcm9tUnVsZXMoU3R5bGVkRWxlbWVu
dCYpOworICAgIHZvaWQgbWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24oU3R5bGVk
RWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KFN0eWxl
ZEVsZW1lbnQmLCBOb2RlKiBjb250ZXh0KTsKKyAgICB2b2lkIHJlbW92ZVByb3BlcnRpZXNJbkVs
ZW1lbnREZWZhdWx0U3R5bGUoRWxlbWVudCYpOwogICAgIHZvaWQgZm9yY2VJbmxpbmUoKTsKICAg
ICBib29sIGNvbnZlcnRQb3NpdGlvblN0eWxlKCk7CiAgICAgYm9vbCBpc0Zsb2F0aW5nKCk7CkBA
IC0xODIsNyArMTgyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4dHJhY3RGb250U2l6ZURlbHRh
KCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxlKFQm
IHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0Owog
ICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQq
LCBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4qIG5ld0lubGluZVN0eWxlLCBFZGl0aW5n
U3R5bGUqIGV4dHJhY3RlZFN0eWxlKSBjb25zdDsKLSAgICB2b2lkIG1lcmdlSW5saW5lQW5kSW1w
bGljaXRTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1v
ZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUpOworICAgIHZvaWQgbWVyZ2VJbmxpbmVBbmRJbXBsaWNp
dFN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQmLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSwg
UHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAgdm9pZCBtZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJv
cGVydGllcyosIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlKTsKIAogICAgIFJlZlB0cjxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBtX211dGFibGVTdHlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKaW5kZXggZjRkNGNiMzUzMTQxMWZhMTdmZjQz
ZWI5NmM4ZjEyYjAwYTcyM2NiYS4uMTU2MzdmOGNlOTYzMWNhMGRhZDk5MWNjOWQxYWRjZjk2Nzdh
NDgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5jcHAKQEAgLTgzLDkgKzgzLDkgQEAgYm9vbCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6dHJ5SW5k
ZW50aW5nQXNMaXN0SXRlbShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFAKICAgICBtb3Zl
UGFyYWdyYXBoV2l0aENsb25lcyhzdGFydCwgZW5kLCBuZXdMaXN0LmdldCgpLCBzZWxlY3RlZExp
c3RJdGVtLmdldCgpKTsKIAogICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3VzTGlzdC5nZXQo
KSwgbmV3TGlzdC5nZXQoKSkpCi0gICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlv
dXNMaXN0LCBuZXdMaXN0KTsKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygqcHJldmlv
dXNMaXN0LCAqbmV3TGlzdCk7CiAgICAgaWYgKGNhbk1lcmdlTGlzdHMobmV3TGlzdC5nZXQoKSwg
bmV4dExpc3QuZ2V0KCkpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKG5ld0xpc3Qs
IG5leHRMaXN0KTsKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygqbmV3TGlzdCwgKm5l
eHRMaXN0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggOWQyODk0ZTNlMzZj
NGI0YzM3ZWIxYmI2NzBjNWJlZjZkNGIxZjIyNy4uNmMzNzlkZGRlYTNiNTJjN2QzYWYwZjc1MjU4
Nzc1YTMwZTg5ZGJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC0zOCwxMyArMzgsMTIgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRvVGV4dE5v
ZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCitJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24p
CiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpLCBlZGl0aW5nQWN0aW9u
KQogICAgICwgbV9ub2RlKFdURk1vdmUobm9kZSkpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAg
ICAgLCBtX3RleHQodGV4dCkKIHsKLSAgICBBU1NFUlQobV9ub2RlKTsKICAgICBBU1NFUlQobV9v
ZmZzZXQgPD0gbV9ub2RlLT5sZW5ndGgoKSk7CiAgICAgQVNTRVJUKCFtX3RleHQuaXNFbXB0eSgp
KTsKIH0KQEAgLTkwLDcgKzg5LDcgQEAgdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpk
b1VuYXBwbHkoKQogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5D
b21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBub2RlcykKIHsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFu
dHMobV9ub2RlLmdldCgpLCBub2Rlcyk7CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fbm9k
ZS5wdHIoKSwgbm9kZXMpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgKaW5kZXggNWI4ODIyMjg4ZmFhOTE0NzNk
NTc5ZDc0ZjUwZGU5ZDkzNGRiMDczMC4uMGQxOTA1ZmU4NzI2ZDNkN2E3OWI5ODQzZDcyYzU4Yzc5
M2ZmOGVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmgKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgVGV4dDsKIAogY2xhc3MgSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kPiBjcmVhdGUoUmVm
UHRyPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbiA9IEVkaXRBY3Rpb25JbnNlcnQpCisgICAgc3RhdGljIFJl
ZjxJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kPiBjcmVhdGUoUmVmPFRleHQ+JiYgbm9kZSwgdW5z
aWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
biA9IEVkaXRBY3Rpb25JbnNlcnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFdURk1vdmUobm9kZSksIG9mZnNldCwgdGV4dCwg
ZWRpdGluZ0FjdGlvbikpOwogICAgIH0KQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0KCk7CiAKIHByb3RlY3RlZDoKLSAgICBJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pOworICAgIEluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmIHRleHQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbik7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRlOwogI2Vu
ZGlmCiAgICAgCi0gICAgUmVmUHRyPFRleHQ+IG1fbm9kZTsKKyAgICBSZWY8VGV4dD4gbV9ub2Rl
OwogICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwogICAgIFN0cmluZyBtX3RleHQ7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXgg
YWRkMmNkZjcwODdiNWRmYzQyMzE4NDVkYTYyZTQxMDNiM2UyZjUyNS4uZTQ4MmZmZTcwNGUyY2E5
OWNjOWVhMTg5OTNjNmRiNjU2YmYyY2IxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBJ
bnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIEFTU0VSVCghdGV4
dE5vZGUucmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNl
V2hpdGVTcGFjZSgpKTsKICAgICAgICAgICAgIC8vIERlbGV0aW5nIGluc2lnbmlmaWNhbnQgd2hp
dGVzcGFjZSB3aWxsIHJlbW92ZSB0ZXh0Tm9kZSBpZiBpdCBjb250YWlucyBub3RoaW5nIGJ1dCBp
bnNpZ25pZmljYW50IHdoaXRlc3BhY2UuCiAgICAgICAgICAgICBpZiAodGV4dE5vZGUuaXNDb25u
ZWN0ZWQoKSkKLSAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoJnRleHROb2RlLCAw
LCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZSh0ZXh0Tm9kZSwgMCwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGF1dG8gbmJzcE5vZGUgPSBkb2N1bWVudCgpLmNy
ZWF0ZVRleHROb2RlKG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAg
YXV0byogbmJzcE5vZGVQdHIgPSBuYnNwTm9kZS5wdHIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggM2FiOTY2NWYwYThiMjlmZjQ5NTkyODcw
ZmNhZDM4N2ZlYTc1MDgyMi4uZTQwY2IxODcwNWM0NmFmYWZjMmMzMDgyMWQyZGU0NDQ5NWQ4ZGVl
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAg
LTY5LDcgKzY5LDcgQEAgUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bWVy
Z2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhQYXNzUmVmUHRyPEhUTUwKICAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGxpc3QgPSBwYXNzZWRMaXN0OwogICAgIEVsZW1lbnQqIHByZXZpb3VzTGlzdCA9IGxp
c3QtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2
aW91c0xpc3QsIGxpc3QuZ2V0KCkpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHBy
ZXZpb3VzTGlzdCwgbGlzdCk7CisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoKnByZXZp
b3VzTGlzdCwgKmxpc3QpOwogCiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTc5LDcgKzc5LDcgQEAgUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFu
ZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhQYXNzUmVmUHRyPEhUTUwKIAogICAgIFJlZlB0
cjxIVE1MRWxlbWVudD4gbmV4dExpc3QgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oc2libGluZyk7
CiAgICAgaWYgKGNhbk1lcmdlTGlzdHMobGlzdC5nZXQoKSwgbmV4dExpc3QuZ2V0KCkpKSB7Ci0g
ICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMobGlzdCwgbmV4dExpc3QpOworICAgICAgICBt
ZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpsaXN0LCAqbmV4dExpc3QpOwogICAgICAgICByZXR1cm4g
bmV4dExpc3Q7CiAgICAgfQogICAgIHJldHVybiBsaXN0OwpAQCAtNDAxLDcgKzQwMSw3IEBAIFJl
ZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBvCiAgICAgICAgIHJldHVybiBtZXJnZVdpdGhOZWlnaGJvcmlu
Z0xpc3RzKGxpc3RFbGVtZW50KTsKIAogICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3VzTGlz
dCwgbmV4dExpc3QpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlz
dCwgbmV4dExpc3QpOworICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpwcmV2aW91c0xp
c3QsICpuZXh0TGlzdCk7CiAKICAgICByZXR1cm4gbGlzdEVsZW1lbnQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAppbmRleCAyMGFkNmE4MDM5YmZlZjhkMGU2ZjE3Yzc0MmU4NDgxNWRkYWYwNzQ0Li5l
NjMxZDRiZWQ0ZGZhNTFlMGJmNjZmYzMwMmMwZTYxZmRmMzIyODMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZC5jcHAKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChpczxUZXh0PihsZWFkaW5nV2hpdGVzcGFjZS5kZXBy
ZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KCpsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgQVNTRVJUKCF0
ZXh0Tm9kZS5yZW5kZXJlcigpIHx8IHRleHROb2RlLnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFw
c2VXaGl0ZVNwYWNlKCkpOwotICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJr
ZXJzKCZ0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5v
ZGVQcmVzZXJ2aW5nTWFya2Vycyh0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUu
CkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgICAgIEFTU0VSVCghcG9zaXRpb25BZnRlclNwbGl0LmNvbnRh
aW5lck5vZGUoKS0+cmVuZGVyZXIoKSB8fCBwb3NpdGlvbkFmdGVyU3BsaXQuY29udGFpbmVyTm9k
ZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAg
ICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShwb3NpdGlvbkFmdGVyU3BsaXQp
OwogICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpwb3NpdGlvbkFmdGVyU3BsaXQuZGVwcmVjYXRl
ZE5vZGUoKSkpCi0gICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRvd25jYXN0PFRl
eHQ+KHBvc2l0aW9uQWZ0ZXJTcGxpdC5jb250YWluZXJOb2RlKCkpLCAwLCBub25CcmVha2luZ1Nw
YWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZShkb3duY2Fz
dDxUZXh0PigqcG9zaXRpb25BZnRlclNwbGl0LmNvbnRhaW5lck5vZGUoKSksIDAsIG5vbkJyZWFr
aW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggYWQwZDI1ZTQxOTVhZTMwNGFiMjM5
YWY0MTIxNDU2NWNjMmRlNDlhZC4uOGMwOTFlNzQzZTEzNmUyNmU5NWUzODExMTAyMGJhZDE5NThl
YTUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAK
QEAgLTEyMCw3ICsxMjAsNyBAQCBib29sIEluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtT3Zlcndy
aXRlKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZAogICAgIGlmICghY291
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHRleHRO
b2RlLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgY291bnQsIHRleHQpOworICAgIHJl
cGxhY2VUZXh0SW5Ob2RlKCp0ZXh0Tm9kZSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGNvdW50LCB0ZXh0KTsKIAogICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gUG9zaXRpb24odGV4
dE5vZGUuZ2V0KCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpICsgdGV4dC5sZW5ndGgo
KSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnQsIGVuZFBv
c2l0aW9uKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gc3RhcnRQb3NpdGlvbi5jb250
YWluZXJUZXh0KCk7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG9mZnNldCA9IHN0YXJ0UG9zaXRp
b24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAKLSAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2Rl
KHRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CisgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSgq
dGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKICAgICAgICAgZW5kUG9zaXRpb24gPSBQb3NpdGlv
bih0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0ICsgbV90ZXh0Lmxlbmd0aCgpKTsKICAgICAgICAgaWYg
KG1fbWFya2VyU3VwcGxpZXIpCiAgICAgICAgICAgICBtX21hcmtlclN1cHBsaWVyLT5hZGRNYXJr
ZXJzVG9UZXh0Tm9kZSh0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0LCBtX3RleHQpOwpAQCAtMjE3LDcg
KzIxNyw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQVNTRVJUKG1fcmViYWxhbmNlVHlwZSA9PSBSZWJhbGFuY2VBbGxX
aGl0ZXNwYWNlcyk7CiAgICAgICAgICAgICBpZiAoY2FuUmViYWxhbmNlKHN0YXJ0UG9zaXRpb24p
ICYmIGNhblJlYmFsYW5jZShlbmRQb3NpdGlvbikpCi0gICAgICAgICAgICAgICAgcmViYWxhbmNl
V2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZyh0ZXh0Tm9kZSwgc3RhcnRQb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZW5kUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwor
ICAgICAgICAgICAgICAgIHJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoKnRleHRO
b2RlLCBzdGFydFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlbmRQb3NpdGlvbi5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI0NSw5ICsy
NDUsOSBAQCBQb3NpdGlvbiBJbnNlcnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0
aW9uJiBwb3MpCiAKICAgICAvLyBrZWVwIHRhYnMgY29hbGVzY2VkIGluIHRhYiBzcGFuCiAgICAg
aWYgKGlzVGFiU3BhblRleHROb2RlKG5vZGUpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0
Tm9kZSA9IGRvd25jYXN0PFRleHQ+KG5vZGUpOworICAgICAgICBSZWY8VGV4dD4gdGV4dE5vZGUg
PSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CiAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0
Tm9kZSwgb2Zmc2V0LCAiXHQiKTsKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLmdl
dCgpLCBvZmZzZXQgKyAxKTsKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLnB0cigp
LCBvZmZzZXQgKyAxKTsKICAgICB9CiAgICAgCiAgICAgLy8gY3JlYXRlIG5ldyB0YWIgc3Bhbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRz
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVu
dHNDb21tYW5kLmNwcAppbmRleCA3NmMzNzZmNTE1MzgwMGM0ZjlmNmJkZDg2OWNlMGE4YTJlOTRh
YzkwLi5iZjcyMjNjZjhiM2NlMTMzZGMzNTY5OGEwZDk0N2RhOTM3M2I5ZDBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kLmNwcApAQCAtMzAsMTkgKzMwLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTWVy
Z2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5k
KFBhc3NSZWZQdHI8RWxlbWVudD4gZmlyc3QsIFBhc3NSZWZQdHI8RWxlbWVudD4gc2Vjb25kKQor
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kKFJlZjxFbGVtZW50PiYmIGZpcnN0LCBSZWY8RWxlbWVudD4mJiBzZWNvbmQpCiAgICAgOiBT
aW1wbGVFZGl0Q29tbWFuZChmaXJzdC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fZWxlbWVudDEoZmly
c3QpCi0gICAgLCBtX2VsZW1lbnQyKHNlY29uZCkKKyAgICAsIG1fZWxlbWVudDEoV1RGTW92ZShm
aXJzdCkpCisgICAgLCBtX2VsZW1lbnQyKFdURk1vdmUoc2Vjb25kKSkKIHsKLSAgICBBU1NFUlQo
bV9lbGVtZW50MSk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudDIpOwogICAgIEFTU0VSVChtX2VsZW1l
bnQxLT5uZXh0U2libGluZygpID09IG1fZWxlbWVudDIpOwogfQogCiB2b2lkIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAobV9lbGVtZW50MS0+bmV4
dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5oYXNFZGl0YWJsZVN0eWxl
KCkgfHwgIW1fZWxlbWVudDItPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAobV9lbGVtZW50
MS0+bmV4dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyLnB0cigpIHx8ICFtX2VsZW1lbnQxLT5oYXNF
ZGl0YWJsZVN0eWxlKCkgfHwgIW1fZWxlbWVudDItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9hdENoaWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpOwpA
QCAtNTksMTYgKzU3LDEzIEBAIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmRv
QXBwbHkoKQogCiB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHko
KQogewotICAgIEFTU0VSVChtX2VsZW1lbnQxKTsKLSAgICBBU1NFUlQobV9lbGVtZW50Mik7Ci0K
ICAgICBSZWZQdHI8Tm9kZT4gYXRDaGlsZCA9IFdURk1vdmUobV9hdENoaWxkKTsKIAogICAgIGF1
dG8qIHBhcmVudCA9IG1fZWxlbWVudDItPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVudCB8
fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChwYXJlbnQtPmluc2VydEJlZm9yZSgqbV9lbGVtZW50MSwgbV9lbGVtZW50Mi5nZXQoKSkuaGFz
RXhjZXB0aW9uKCkpCisgICAgaWYgKHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEsIG1f
ZWxlbWVudDIucHRyKCkpLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICBW
ZWN0b3I8UmVmPE5vZGU+PiBjaGlsZHJlbjsKQEAgLTgyLDggKzc3LDggQEAgdm9pZCBNZXJnZUlk
ZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICNpZm5kZWYgTkRFQlVHCiB2b2lk
IE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0
PE5vZGUqPiYgbm9kZXMpCiB7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudDEu
Z2V0KCksIG5vZGVzKTsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9lbGVtZW50Mi5nZXQo
KSwgbm9kZXMpOworICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnQxLnB0cigpLCBu
b2Rlcyk7CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudDIucHRyKCksIG5vZGVz
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgKaW5kZXggZDU5NzJhMTdkNDNkMzFjNDQ4YzNlNjVl
YmY3YjJmOWJkZDVjOWI2ZS4uOTdhNzczMmM0M2Y3OWYzZjc2MmYyNmRjNTM1MGY2ZThjZWQ5ZTE3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1l
bnRzQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQuaApAQCAtMzEsMTMgKzMxLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRp
dENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVyZ2VJZGVudGljYWxFbGVtZW50
c0NvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQxLCBQYXNzUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQyKQorICAgIHN0YXRpYyBSZWY8TWVyZ2VJZGVudGljYWxFbGVtZW50
c0NvbW1hbmQ+IGNyZWF0ZShSZWY8RWxlbWVudD4mJiBlbGVtZW50MSwgUmVmPEVsZW1lbnQ+JiYg
ZWxlbWVudDIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZXJnZUlkZW50
aWNhbEVsZW1lbnRzQ29tbWFuZChlbGVtZW50MSwgZWxlbWVudDIpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoV1RGTW92ZShlbGVt
ZW50MSksIFdURk1vdmUoZWxlbWVudDIpKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIE1lcmdl
SWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQdHI8
RWxlbWVudD4pOworICAgIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKFJlZjxFbGVtZW50
PiYmLCBSZWY8RWxlbWVudD4mJik7CiAKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlOwpAQCAtNDYsOCArNDYsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZ2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mKSBvdmVycmlkZTsKICNl
bmRpZgogICAgIAotICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQxOwotICAgIFJlZlB0cjxF
bGVtZW50PiBtX2VsZW1lbnQyOworICAgIFJlZjxFbGVtZW50PiBtX2VsZW1lbnQxOworICAgIFJl
ZjxFbGVtZW50PiBtX2VsZW1lbnQyOwogICAgIFJlZlB0cjxOb2RlPiBtX2F0Q2hpbGQ7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFu
ZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NzA1NjViOWQ4ZDRlNGQzOTcz
ZTE1MzQ3ZWYyODVkMzBjZTRmZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1h
bmQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCi0KLSNpbmNsdWRlICJDU1NTdHls
ZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0jaW5jbHVkZSAi
U3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpSZW1vdmVDU1NQcm9wZXJ0
eUNvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IGVs
ZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi0gICAgOiBTaW1wbGVFZGl0Q29tbWFuZChk
b2N1bWVudCkKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9wcm9wZXJ0eShwcm9w
ZXJ0eSkKLSAgICAsIG1faW1wb3J0YW50KGZhbHNlKQotewotICAgIEFTU0VSVChtX2VsZW1lbnQp
OwotfQotCi1SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6On5SZW1vdmVDU1NQcm9wZXJ0eUNvbW1h
bmQoKQotewotfQotCi12b2lkIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6ZG9BcHBseSgpCi17
Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSA9IG1fZWxlbWVudC0+aW5saW5lU3R5
bGUoKTsKLSAgICBtX29sZFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobV9wcm9wZXJ0
eSk7Ci0gICAgbV9pbXBvcnRhbnQgPSBzdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChtX3Byb3Bl
cnR5KTsKLQotICAgIC8vIE11dGF0ZSB1c2luZyB0aGUgQ1NTT00gd3JhcHBlciBzbyB3ZSBnZXQg
dGhlIHNhbWUgZXZlbnQgYmVoYXZpb3IgYXMgYSBzY3JpcHQuCi0gICAgLy8gU2V0dGluZyB0byBu
dWxsIHN0cmluZyByZW1vdmVzIHRoZSBwcm9wZXJ0eS4gV2UgZG9uJ3QgaGF2ZSBpbnRlcm5hbCB2
ZXJzaW9uIG9mIHJlbW92ZVByb3BlcnR5LgotICAgIG1fZWxlbWVudC0+Y3Nzb21TdHlsZSgpLT5z
ZXRQcm9wZXJ0eUludGVybmFsKG1fcHJvcGVydHksIFN0cmluZygpLCBmYWxzZSk7Ci19Ci0KLXZv
aWQgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb1VuYXBwbHkoKQotewotICAgIG1fZWxlbWVu
dC0+Y3Nzb21TdHlsZSgpLT5zZXRQcm9wZXJ0eUludGVybmFsKG1fcHJvcGVydHksIG1fb2xkVmFs
dWUsIG1faW1wb3J0YW50KTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgUmVtb3ZlQ1NTUHJv
cGVydHlDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCi17
Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudC5nZXQoKSwgbm9kZXMpOwotfQot
I2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAxODVlYmY1YzYzN2IyY2Y5NjAzMjg3MTllYzUyYTE4ZDM3NzMwMTczLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLSNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
U3R5bGVkRWxlbWVudDsKLQotY2xhc3MgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kIDogcHVibGlj
IFNpbXBsZUVkaXRDb21tYW5kIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW92ZUNTU1By
b3BlcnR5Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZlB0cjxTdHls
ZWRFbGVtZW50PiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKGRvY3VtZW50
LCBlbGVtZW50LCBwcm9wZXJ0eSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZW1vdmVDU1NQ
cm9wZXJ0eUNvbW1hbmQoRG9jdW1lbnQmLCBQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+LCBDU1NQ
cm9wZXJ0eUlEKTsKLSAgICB+UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKCk7Ci0KLSAgICB2b2lk
IGRvQXBwbHkoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlOwotICAg
IAotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9k
ZSo+Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICAKLSAgICBSZWZQdHI8U3R5bGVkRWxlbWVudD4g
bV9lbGVtZW50OwotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLSAgICBTdHJpbmcgbV9v
bGRWYWx1ZTsKLSAgICBib29sIG1faW1wb3J0YW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAppbmRleCA5NDE1MjdiZGU5ZTNjMDVjM2JlZjg2MTlmZjlkOTYzOGMzNjcxOWQzLi40
MDk0ZjU4OTI1YWJmNTBiYTQ5OTgyMDEzYzZkNzBlMGIxNjlkNGU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTEwLDcg
KzUxMCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0
eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAgICAgICAgICAgICAgICAgIEVk
aXRpbmdTdHlsZTo6RG9Ob3RFeHRyYWN0TWF0Y2hpbmdTdHlsZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gZS5nLiA8Zm9udCBzaXplPSIzIiBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+IGlz
IGNvbnZlcnRlZCB0byA8Zm9udCBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogYXR0cmlidXRlcykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0dHJp
YnV0ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC01MjAsMTggKzUy
MCwxOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHls
ZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydAogICAgICAgICAgICAgLy8gc3R5bGVzIGZy
b20gYmxvY2txdW90ZU5vZGUgYXJlIGFsbG93ZWQgdG8gb3ZlcnJpZGUgdGhvc2UgZnJvbSB0aGUg
c291cmNlIGRvY3VtZW50LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5MzA5ODY+IGFuZCA8cmRhcjov
L3Byb2JsZW0vNTA4OTMyNz4uCiAgICAgICAgICAgICBOb2RlKiBibG9ja3F1b3RlTm9kZSA9IGlz
TWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnRleHQpID8gY29udGV4dCA6IGVuY2xvc2luZ05v
ZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluTm9kZShjb250ZXh0KSwgaXNNYWlsQmxvY2txdW90ZSwg
Q2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICAgICAgaWYgKGJsb2NrcXVvdGVOb2Rl
KQotICAgICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVTdHlsZUZyb21SdWxlc0Fu
ZENvbnRleHQoZWxlbWVudCwgZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgICAg
ICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dCgq
ZWxlbWVudCwgZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSk7CiAKLSAgICAgICAgICAgIG5l
d0lubGluZVN0eWxlLT5yZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoZWxlbWVudCwgY29u
dGV4dCk7CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVGcm9tUnVsZXNB
bmRDb250ZXh0KCplbGVtZW50LCBjb250ZXh0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgh
aW5saW5lU3R5bGUgfHwgbmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
aWYgKGlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0ZShlbGVtZW50KSB8fCBp
c0VtcHR5Rm9udFRhZyhlbGVtZW50LCBBbGxvd05vbkVtcHR5U3R5bGVBdHRyaWJ1dGUpKSB7Cisg
ICAgICAgICAgICBpZiAoaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKCpl
bGVtZW50KSB8fCBpc0VtcHR5Rm9udFRhZyhlbGVtZW50LCBBbGxvd05vbkVtcHR5U3R5bGVBdHRy
aWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHls
ZUF0dHIpOworICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSgqZWxlbWVudCwgc3R5bGVB
dHRyKTsKICAgICAgICAgfSBlbHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+cHJvcGVy
dHlDb3VudCgpICE9IGlubGluZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpCiAgICAgICAgICAgICBz
ZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxl
KCktPmFzVGV4dCgpKTsKIApAQCAtNTQ1LDcgKzU0NSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5z
ZXJ0CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgpICYmIGVs
ZW1lbnQtPnBhcmVudE5vZGUoKS0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKQotICAgICAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBjb250ZW50ZWRpdGFibGVBdHRyKTsKKyAg
ICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoKmVsZW1lbnQsIGNvbnRlbnRlZGl0YWJsZUF0
dHIpOwogCiAgICAgICAgIC8vIFdlYktpdCB1c2VkIHRvIG5vdCBhZGQgZGlzcGxheTogaW5saW5l
IGFuZCBmbG9hdDogbm9uZSBvbiBjb3B5LgogICAgICAgICAvLyBLZWVwIHRoaXMgY29kZSBhcm91
bmQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKQEAgLTEyNTAsNyArMTI1MCw3IEBAIHZvaWQg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBtZXJnZUVuZElmTmVl
ZGVkKCk7CiAKICAgICBpZiAoTm9kZSogbWFpbEJsb2NrcXVvdGUgPSBlbmNsb3NpbmdOb2RlT2ZU
eXBlKHBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQoKSwg
aXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUpKQotICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRl
KGRvd25jYXN0PEVsZW1lbnQ+KG1haWxCbG9ja3F1b3RlKSwgY2xhc3NBdHRyKTsKKyAgICAgICAg
cmVtb3ZlTm9kZUF0dHJpYnV0ZShkb3duY2FzdDxFbGVtZW50PigqbWFpbEJsb2NrcXVvdGUpLCBj
bGFzc0F0dHIpOwogCiAgICAgaWYgKHNob3VsZFBlcmZvcm1TbWFydFJlcGxhY2UoKSkKICAgICAg
ICAgYWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKCk7CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2b2lk
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKQogICAg
IGlmIChuZWVkc1RyYWlsaW5nU3BhY2UgJiYgZW5kTm9kZSkgewogICAgICAgICBib29sIGNvbGxh
cHNlV2hpdGVTcGFjZSA9ICFlbmROb2RlLT5yZW5kZXJlcigpIHx8IGVuZE5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmIChpczxUZXh0Pigq
ZW5kTm9kZSkpIHsKLSAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZShkb3duY2FzdDxUZXh0
PihlbmROb2RlKSwgZW5kT2Zmc2V0LCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1Nw
YWNlU3RyaW5nKCkgOiAiICIpOworICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRvd25j
YXN0PFRleHQ+KCplbmROb2RlKSwgZW5kT2Zmc2V0LCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25C
cmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwogICAgICAgICAgICAgaWYgKG1fZW5kT2ZJbnNl
cnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09IGVuZE5vZGUpCiAgICAgICAgICAgICAgICAg
bV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZkluc2VydGVkQ29udGVu
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTM1
Nyw3ICsxMzU3LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2VzRm9y
U21hcnRSZXBsYWNlKCkKICAgICBpZiAobmVlZHNMZWFkaW5nU3BhY2UgJiYgc3RhcnROb2RlKSB7
CiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlID0gIXN0YXJ0Tm9kZS0+cmVuZGVyZXIo
KSB8fCBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7
CiAgICAgICAgIGlmIChpczxUZXh0Pigqc3RhcnROb2RlKSkgewotICAgICAgICAgICAgaW5zZXJ0
VGV4dEludG9Ob2RlKGRvd25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb2xs
YXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOworICAgICAg
ICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpLCBzdGFy
dE9mZnNldCwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpIDog
IiAiKTsKICAgICAgICAgICAgIGlmIChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LmNvbnRhaW5lck5v
ZGUoKSA9PSBzdGFydE5vZGUgJiYgbV9lbmRPZkluc2VydGVkQ29udGVudC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSkKICAgICAgICAgICAgICAgICBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm1vdmVU
b09mZnNldChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpICsg
MSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDI4LDcgKzE0MjgsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9uKFBvc2l0aW9uJiBw
b3NpdGlvbiwgUAogCiAgICAgaWYgKGlzPFRleHQ+KHRleHQtPnByZXZpb3VzU2libGluZygpKSkg
ewogICAgICAgICBSZWY8VGV4dD4gcHJldmlvdXMoZG93bmNhc3Q8VGV4dD4oKnRleHQtPnByZXZp
b3VzU2libGluZygpKSk7Ci0gICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCAwLCBwcmV2
aW91cy0+ZGF0YSgpKTsKKyAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0LCAwLCBwcmV2
aW91cy0+ZGF0YSgpKTsKIAogICAgICAgICBpZiAocG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQog
ICAgICAgICAgICAgcG9zaXRpb24ubW92ZVRvT2Zmc2V0KHByZXZpb3VzLT5sZW5ndGgoKSArIHBv
c2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9zaXRpb24o
UG9zaXRpb24mIHBvc2l0aW9uLCBQCiAgICAgaWYgKGlzPFRleHQ+KHRleHQtPm5leHRTaWJsaW5n
KCkpKSB7CiAgICAgICAgIFJlZjxUZXh0PiBuZXh0KGRvd25jYXN0PFRleHQ+KCp0ZXh0LT5uZXh0
U2libGluZygpKSk7CiAgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsTGVuZ3RoID0gdGV4dC0+bGVu
Z3RoKCk7Ci0gICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCBvcmlnaW5hbExlbmd0aCwg
bmV4dC0+ZGF0YSgpKTsKKyAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0LCBvcmlnaW5h
bExlbmd0aCwgbmV4dC0+ZGF0YSgpKTsKIAogICAgICAgICBpZiAoIXBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvcikKICAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwocG9zaXRp
b24sIG5leHQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJr
dXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IGEzZDA3NDRh
ODhjNDA1N2JkNDZiMmQ0YzI4YWY1Mzg3MGQwYzFkMjcuLjhkNjFlNTdhZmUwMDZlODM0OGE4Yzlh
MjRhNDQxZDU1MjBlMzNjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTMzNSw4
ICszMzUsOCBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZQogCiAgICAgICAgIGlmIChzaG91bGRB
cHBseVdyYXBwaW5nU3R5bGUoZWxlbWVudCkpIHsKICAgICAgICAgICAgIG5ld0lubGluZVN0eWxl
ID0gbV93cmFwcGluZ1N0eWxlLT5jb3B5KCk7Ci0gICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+
cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1bHRTdHlsZShjb25zdF9jYXN0PEVsZW1lbnQq
PigmZWxlbWVudCkpOwotICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlQ29u
ZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoY29uc3RfY2FzdDxFbGVtZW50Kj4oJmVsZW1lbnQpKTsK
KyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVm
YXVsdFN0eWxlKCpjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOworICAgICAgICAgICAg
bmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoKmNv
bnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogCkBAIC0zNDUsNyAr
MzQ1LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJp
bmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGUKIAogICAgICAgICBpZiAoc2hvdWxkQW5u
b3RhdGVPckZvcmNlSW5saW5lKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkK
LSAgICAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNl
cmlhbGl6YXRpb24oZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZl
bGVtZW50KSkpOworICAgICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5tZXJnZVN0eWxlRnJv
bVJ1bGVzRm9yU2VyaWFsaXphdGlvbihkb3duY2FzdDxIVE1MRWxlbWVudD4oKmNvbnN0X2Nhc3Q8
RWxlbWVudCo+KCZlbGVtZW50KSkpOwogCiAgICAgICAgICAgICBpZiAoYWRkRGlzcGxheUlubGlu
ZSkKICAgICAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+Zm9yY2VJbmxpbmUoKTsKQEAgLTUw
OSwxNSArNTA5LDEzIEBAIHN0YXRpYyBib29sIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHYpCiAgICAgcmV0dXJuIGlzRW5kT2ZQYXJhZ3JhcGgodikg
JiYgaXNTdGFydE9mUGFyYWdyYXBoKG5leHQpICYmICEodXBzdHJlYW1Ob2RlLT5oYXNUYWdOYW1l
KGJyVGFnKSAmJiB1cHN0cmVhbU5vZGUgPT0gZG93bnN0cmVhbU5vZGUpOwogfQogCi1zdGF0aWMg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzQW5kSW5saW5lRGVjbChj
b25zdCBOb2RlKiBub2RlKQorc3RhdGljIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlRnJvbU1h
dGNoZWRSdWxlc0FuZElubGluZURlY2woTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBGSVhNRTogSGF2aW5nIHRvIGNvbnN0X2Nhc3QgaGVy
ZSBpcyB1Z2x5LCBidXQgaXQgaXMgcXVpdGUgYSBiaXQgb2Ygd29yayB0byB1bnRhbmdsZQotICAg
IC8vIHRoZSBub24tY29uc3QtbmVzcyBvZiBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50
LgotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHN0
YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSkpOwotICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+aW5saW5lU3R5bGUo
KSk7CisgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKKyAg
ICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1l
bnQuaW5saW5lU3R5bGUoKSk7CiAgICAgc3R5bGUtPm1lcmdlU3R5bGVGcm9tUnVsZXMoZWxlbWVu
dCk7CiAgICAgcmV0dXJuIHN0eWxlOwogfQpAQCAtNjIyLDcgKzYyMCw3IEBAIHN0YXRpYyBTdHJp
bmcgY3JlYXRlTWFya3VwSW50ZXJuYWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYg
cmFuZ2UsIFZlY3RvCiAgICAgICAgIC8vIEFsc28gaW5jbHVkZSBhbGwgb2YgdGhlIGFuY2VzdG9y
cyBvZiBsYXN0Q2xvc2VkIHVwIHRvIHRoaXMgc3BlY2lhbCBhbmNlc3Rvci4KICAgICAgICAgZm9y
IChDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IGxhc3RDbG9zZWQtPnBhcmVudE5vZGUoKTsgYW5j
ZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICAgICAg
aWYgKGFuY2VzdG9yID09IGZ1bGx5U2VsZWN0ZWRSb290ICYmICFjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZnVsbHlTZWxlY3Rl
ZFJvb3RTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woZnVsbHlTZWxl
Y3RlZFJvb3QpOworICAgICAgICAgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGZ1bGx5U2Vs
ZWN0ZWRSb290U3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKCpmdWxs
eVNlbGVjdGVkUm9vdCk7CiAKICAgICAgICAgICAgICAgICAvLyBCcmluZyB0aGUgYmFja2dyb3Vu
ZCBhdHRyaWJ1dGUgb3ZlciwgYnV0IG5vdCBhcyBhbiBhdHRyaWJ1dGUgYmVjYXVzZSBhIGJhY2tn
cm91bmQgYXR0cmlidXRlIG9uIGEgZGl2CiAgICAgICAgICAgICAgICAgLy8gYXBwZWFycyB0byBo
YXZlIG5vIGVmZmVjdC4KQEAgLTY1Niw3ICs2NTQsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0ZU1h
cmt1cEludGVybmFsKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmFuZ2UmIHJhbmdlLCBWZWN0
bwogICAgIGlmIChhY2N1bXVsYXRvci5uZWVkUmVsYXRpdmVTdHlsZVdyYXBwZXIoKSAmJiBuZWVk
c1Bvc2l0aW9uU3R5bGVDb252ZXJzaW9uKSB7CiAgICAgICAgIGlmIChhY2N1bXVsYXRvci5uZWVk
Q2xlYXJpbmdEaXYoKSkKICAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZFN0cmluZygiPGRp
diBzdHlsZT1cImNsZWFyOiBib3RoO1wiPjwvZGl2PiIpOwotICAgICAgICBSZWZQdHI8RWRpdGlu
Z1N0eWxlPiBwb3NpdGlvblJlbGF0aXZlU3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJ
bmxpbmVEZWNsKGJvZHkpOworICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBwb3NpdGlvblJl
bGF0aXZlU3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKCpib2R5KTsK
ICAgICAgICAgcG9zaXRpb25SZWxhdGl2ZVN0eWxlLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZVJlbGF0aXZlKTsKICAgICAgICAgYWNjdW11bGF0b3Iu
d3JhcFdpdGhTdHlsZU5vZGUocG9zaXRpb25SZWxhdGl2ZVN0eWxlLT5zdHlsZSgpLCBkb2N1bWVu
dCwgdHJ1ZSk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>308907</attachid>
            <date>2017-05-03 08:43:16 -0700</date>
            <delta_ts>2017-05-03 11:41:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171590-20170503084316.patch</filename>
            <type>text/plain</type>
            <size>112253</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MDc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWU2MmQxYmM3NTVhYWM4
MWEyOTE1NmRkZmU4ZDY0ZmQxZTIzNDU4ZS4uYmI3ZDdmZTM4ZDM0ZGIwMDc1YzhlMGM2MTU3NmU2
MzQ4ODNhNDc2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEyNSBAQAogMjAxNy0wNS0wMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFVzZSBQYXNzUmVmUHRyIGxl
c3MgaW4gQ29tcG9zaXRlRWRpdENvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MTU5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBQYXNzUmVmUHRyIGxlc3MgaW4gQ29tcG9zaXRlRWRpdENv
bW1hbmQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHls
ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjppc1NwYW5XaXRob3V0QXR0cmlidXRlc09y
VW5zdHlsZWRTdHlsZVNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNFbXB0eUZvbnRUYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5QmxvY2tTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpkdW1teVNwYW5BbmNlc3RvckZvck5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFu
cyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5n
VXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVDb25mbGljdGluZ0lubGlu
ZVN0eWxlRnJvbVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVt
b3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVk
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NT
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmhpZ2hlc3RBbmNl
c3RvcldpdGhDb25mbGljdGluZ0lubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNob3VsZFNwbGl0VGV4dEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJ
ZklkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VF
bmRXaXRoTmV4dElmSWRlbnRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
U3R5bGVDb21tYW5kOjpqb2luQ2hpbGRUZXh0Tm9kZXMpOgorICAgICAgICAqIGVkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpz
aG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2FsRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRvTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4
dEluTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFj
ZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJl
V2hpdGVzcGFjZUF0UG9zaXRpb25Gb3JTcGxpdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZVBsYWNlaG9sZGVyQXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6Cisg
ICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRp
bmcvRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxl
dGVGcm9tVGV4dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5k
KToKKyAgICAgICAgKiBlZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAg
ICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmZpeHVwV2hpdGVzcGFjZSk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAgICAgICog
ZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25m
bGljdGluZ1dpdGhTdHlsZU9mTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50TWF0Y2hl
c0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbCk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0aW5nU3R5bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OndyYXBwaW5nU3R5bGVGb3JTZXJpYWxpemF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlh
bGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZy
b21SdWxlc0FuZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpyZW1v
dmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKToKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRpbmdTdHlsZS5oOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6OnRyeUluZGVudGluZ0Fz
TGlzdEl0ZW0pOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydEludG9UZXh0Tm9k
ZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Om1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgpOgor
ICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5
KToKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtT3ZlcndyaXRlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydFRleHRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIpOgorICAgICAgICAqIGVkaXRpbmcvTWVyZ2VJZGVu
dGljYWxFbGVtZW50c0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6OmdldE5v
ZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHND
b21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKiBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1
bmRhbnRTdHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9z
aXRpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2wpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlTWFya3VwSW50ZXJuYWwpOgorCisyMDE3LTA1LTAyICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CisKICAgICAgICAgVXNlIFBhc3NSZWZQdHIgbGVzcyBpbiBlZGl0aW5n
IGNvZGUKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MTUzNAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDQwZjY0ZTA0ZDI5OTk0YWQxNWFkYTVjZDMy
MTM0ZDZlY2Q4NjJiMTUuLjIyNTY3ZGEwMTIyMzY0ZDdmZGNmYjQ0ZTY4NmE4YjkyMzllNmNiNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNjIxLDcgKzE2MjEsNiBAQCBzZXQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKICAgICBlZGl0aW5nL01vdmVT
ZWxlY3Rpb25Db21tYW5kLmNwcAotICAgIGVkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5k
LmNwcAogICAgIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1Jl
bW92ZU5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbkNvbW1hbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggNTQ2ODBhYTIyYzA0YTNmY2NkZjRhZDcxYzU0ZDg1ZDUyNDJh
ZTYxNy4uYzA4MjU3YmQ2M2MxZWM1NDQwNGI5NTg5NWNjZGMwMDBlZmNkY2IxZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzYy
Niw4ICszNjI2LDYgQEAKIAkJOTMzMDlERkEwOTlFNjQ5MjAwNTZFNTgxIC8qIE1lcmdlSWRlbnRp
Y2FsRWxlbWVudHNDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzMwOURBQjA5OUU2NDkxMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQuaCAqLzsgfTsKIAkJOTMzMDlERkIwOTlFNjQ5MjAwNTZFNTgxIC8qIE1vdmVT
ZWxlY3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzMzA5REFDMDk5RTY0OTEwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgKi87IH07CiAJCTkzMzA5REZDMDk5RTY0OTIwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9u
Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTMzMDlEQUQwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi87IH07
Ci0JCTkzMzA5RTAwMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlE
QjEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAgKi87IH07
Ci0JCTkzMzA5RTAxMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REIy
MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCAqLzsgfTsKIAkJ
OTMzMDlFMDQwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMzA5REI1MDk5RTY0OTEw
MDU2RTU4MSAvKiBSZW1vdmVOb2RlQ29tbWFuZC5jcHAgKi87IH07CiAJCTkzMzA5RTA1MDk5RTY0
OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEQjYwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92
ZU5vZGVDb21tYW5kLmggKi87IH07CiAJCTkzMzA5RTA2MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOURCNzA5OUU2NDkxMDA1NkU1ODEgLyogUmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuY3BwICovOyB9OwpAQCAtMTE3MzYsOCAr
MTE3MzQsNiBAQAogCQk5MzMwOURBQjA5OUU2NDkxMDA1NkU1ODEgLyogTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVyZ2VJ
ZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTMzMDlEQUMwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdmVTZWxlY3Rpb25Db21tYW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQUQwOTlFNjQ5MTAwNTZFNTgx
IC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1vdmVTZWxlY3Rpb25Db21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTkzMzA5REIxMDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3ZlQ1NTUHJvcGVydHlD
b21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTMzMDlEQjIwOTlFNjQ5
MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQjUwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVD
b21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW92ZU5v
ZGVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEQjYwOTlF
NjQ5MTAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW92ZU5vZGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMzA5REI3MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xOTg0OCw4ICsxOTg0NCw2IEBACiAJCQkJQzZENzRBRDMwOUFBMjgyRTAw
MEIwQTUyIC8qIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oICovLAogCQkJCTkzMzA5REFDMDk5
RTY0OTEwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAgKi8sCiAJCQkJOTMzMDlE
QUQwOTlFNjQ5MTAwNTZFNTgxIC8qIE1vdmVTZWxlY3Rpb25Db21tYW5kLmggKi8sCi0JCQkJOTMz
MDlEQjEwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAgKi8s
Ci0JCQkJOTMzMDlEQjIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFu
ZC5oICovLAogCQkJCUQwNkMwRDhFMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21t
YW5kLmNwcCAqLywKIAkJCQlEMDZDMEQ4RDBDRkQxMTQ2MDA2NUY0M0YgLyogUmVtb3ZlRm9ybWF0
Q29tbWFuZC5oICovLAogCQkJCTkzMzA5REI1MDk5RTY0OTEwMDU2RTU4MSAvKiBSZW1vdmVOb2Rl
Q29tbWFuZC5jcHAgKi8sCkBAIC0yODg3MSw3ICsyODg2NSw2IEBACiAJCQkJQTU3OEY0M0YxREUw
QjYzMDAwM0RGQzZBIC8qIFJlamVjdGVkUHJvbWlzZVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUNERkMzNjA2MThDQTYxQzIwMDI2RTU2RiAvKiBSZW1vdGVDb21tYW5kTGlzdGVuZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEOEFDQTg5MUQyMzdBQTIwMEVDQzU5RSAvKiBSZW1vdGVDb21t
YW5kTGlzdGVuZXJNYWMuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzMzA5RTAxMDk5RTY0OTIwMDU2
RTU4MSAvKiBSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUQw
NkMwRDhGMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOUUwNTA5OUU2NDkyMDA1NkU1ODEgLyogUmVtb3ZlTm9kZUNvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTA3MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjc3MSw3
ICszMjc2NCw2IEBACiAJCQkJQ0RGQzM2MDUxOENBNjFDMjAwMjZFNTZGIC8qIFJlbW90ZUNvbW1h
bmRMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDREZDMzYwNzE4Q0E2OTZDMDAyNkU1
NkYgLyogUmVtb3RlQ29tbWFuZExpc3RlbmVySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4
QUNBODgxRDIzN0FBMjAwRUNDNTlFIC8qIFJlbW90ZUNvbW1hbmRMaXN0ZW5lck1hYy5tbSBpbiBT
b3VyY2VzICovLAotCQkJCTkzMzA5RTAwMDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDA2QzBEOTAwQ0ZEMTE0NjAwNjVG
NDNGIC8qIFJlbW92ZUZvcm1hdENvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlF
MDQwOTlFNjQ5MjAwNTZFNTgxIC8qIFJlbW92ZU5vZGVDb21tYW5kLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzMzA5RTA2MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggZjdhNzQyMWU1ZTUxNzU1NWEwY2U2OGIxMmIw
ZjY1MmI0YWI4NTY5My4uNWJlYjZhYTgwZWVkMjk0ODYwYjE2ZGM0YjIzY2Y5Njg5NWI0YTBmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTc2
LDMwICs3NiwzMCBAQCBib29sIGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4oY29uc3QgTm9kZSogbm9k
ZSkKICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTFNwYW5FbGVtZW50Pigqbm9kZSkuYXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5n
KCk7CiB9CiAKLXN0YXRpYyBib29sIGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUo
Y29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVudCwgU2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5
IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKK3N0YXRpYyBib29sIGhhc05vQXR0cmlidXRl
T3JPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgU3R5bGVkRWxlbWVudCYgZWxlbWVudCwgU2hvdWxk
U3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSkKIHsKLSAg
ICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkKKyAgICBpZiAoIWVsZW1lbnQuaGFzQXR0
cmlidXRlcygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHVuc2lnbmVkIG1hdGNoZWRB
dHRyaWJ1dGVzID0gMDsKLSAgICBpZiAoZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9u
aXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpCisgICAgaWYgKGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihjbGFzc0F0dHIpID09IHN0eWxl
U3BhbkNsYXNzU3RyaW5nKCkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7Ci0gICAgaWYg
KGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShzdHlsZUF0dHIpICYmIChzaG91bGRTdHlsZUF0dHJpYnV0
ZUJlRW1wdHkgPT0gQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlCi0gICAgICAgIHx8ICFlbGVt
ZW50LT5pbmxpbmVTdHlsZSgpIHx8IGVsZW1lbnQtPmlubGluZVN0eWxlKCktPmlzRW1wdHkoKSkp
CisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKHN0eWxlQXR0cikgJiYgKHNob3VsZFN0eWxl
QXR0cmlidXRlQmVFbXB0eSA9PSBBbGxvd05vbkVtcHR5U3R5bGVBdHRyaWJ1dGUKKyAgICAgICAg
fHwgIWVsZW1lbnQuaW5saW5lU3R5bGUoKSB8fCBlbGVtZW50LmlubGluZVN0eWxlKCktPmlzRW1w
dHkoKSkpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAKLSAgICBBU1NFUlQobWF0Y2hl
ZEF0dHJpYnV0ZXMgPD0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKSk7Ci0gICAgcmV0dXJuIG1h
dGNoZWRBdHRyaWJ1dGVzID09IGVsZW1lbnQtPmF0dHJpYnV0ZUNvdW50KCk7CisgICAgQVNTRVJU
KG1hdGNoZWRBdHRyaWJ1dGVzIDw9IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKSk7CisgICAgcmV0
dXJuIG1hdGNoZWRBdHRyaWJ1dGVzID09IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKTsKIH0KIAot
Ym9vbCBpc1N0eWxlU3Bhbk9yU3BhbldpdGhPbmx5U3R5bGVBdHRyaWJ1dGUoY29uc3QgRWxlbWVu
dCogZWxlbWVudCkKK2Jvb2wgaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRl
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKCFpczxIVE1MU3BhbkVsZW1lbnQ+
KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGhhc05vQXR0cmli
dXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoZG93bmNhc3Q8SFRNTFNwYW5FbGVtZW50PihlbGVtZW50
KSwgQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlKTsKIH0KIAotc3RhdGljIGlubGluZSBib29s
IGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bhbihjb25zdCBFbGVtZW50
KiBlbGVtZW50KQorc3RhdGljIGlubGluZSBib29sIGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JV
bnN0eWxlZFN0eWxlU3Bhbihjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghaXM8
SFRNTFNwYW5FbGVtZW50PihlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEx
LDcgKzExMSw3IEBAIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3QgRWxlbWVudCogZWxlbWVudCwg
U2hvdWxkU3R5bGVBdHRyaWJ1dGVCZUVtcHR5IHNob3VsZFN0CiAgICAgaWYgKCFpczxIVE1MRm9u
dEVsZW1lbnQ+KGVsZW1lbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
aGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZShkb3duY2FzdDxIVE1MRm9udEVsZW1l
bnQ+KGVsZW1lbnQpLCBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpOworICAgIHJldHVybiBo
YXNOb0F0dHJpYnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGRvd25jYXN0PEhUTUxGb250RWxlbWVu
dD4oKmVsZW1lbnQpLCBzaG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkpOwogfQogCiBzdGF0aWMg
UmVmPEhUTUxFbGVtZW50PiBjcmVhdGVGb250RWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQpCkBA
IC0yMDQsMjQgKzIwNCwyNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICBzd2l0Y2ggKG1fcHJvcGVydHlMZXZlbCkgewogICAgIGNhc2UgUHJvcGVydHlEZWZhdWx0OiB7
CiAgICAgICAgIC8vIEFwcGx5IHRoZSBibG9jay1jZW50cmljIHByb3BlcnRpZXMgb2YgdGhlIHN0
eWxlLgotICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gbV9zdHlsZS0+
ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOworICAgICAgICBhdXRvIGJsb2NrU3R5
bGUgPSBtX3N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgICAg
IGlmICghYmxvY2tTdHlsZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgYXBwbHlCbG9ja1N0eWxl
KGJsb2NrU3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgYXBwbHlCbG9ja1N0eWxlKGJsb2NrU3R5
bGUpOwogICAgICAgICAvLyBBcHBseSBhbnkgcmVtYWluaW5nIHN0eWxlcyB0byB0aGUgaW5saW5l
IGVsZW1lbnRzLgogICAgICAgICBpZiAoIW1fc3R5bGUtPmlzRW1wdHkoKSB8fCBtX3N0eWxlZElu
bGluZUVsZW1lbnQgfHwgbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKSB7CiAgICAg
ICAgICAgICBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKG1fc3R5bGUuZ2V0KCkpOwotICAg
ICAgICAgICAgYXBwbHlJbmxpbmVTdHlsZShtX3N0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGFw
cGx5SW5saW5lU3R5bGUoKm1fc3R5bGUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICBjYXNlIEZvcmNlQmxvY2tQcm9wZXJ0aWVzOgogICAgICAgICAvLyBGb3JjZSBhbGwg
cHJvcGVydGllcyB0byBiZSBhcHBsaWVkIGFzIGJsb2NrIHN0eWxlcy4KLSAgICAgICAgYXBwbHlC
bG9ja1N0eWxlKG1fc3R5bGUuZ2V0KCkpOworICAgICAgICBhcHBseUJsb2NrU3R5bGUoKm1fc3R5
bGUpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFwcGx5QmxvY2tTdHlsZShFZGl0aW5nU3R5bGUgKnN0eWxlKQordm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUpCiB7CiAgICAgLy8gdXBk
YXRlIGRvY3VtZW50IGxheW91dCBvbmNlIGJlZm9yZSByZW1vdmluZyBzdHlsZXMKICAgICAvLyBz
byB0aGF0IHdlIGF2b2lkIHRoZSBleHBlbnNlIG9mIHVwZGF0aW5nIGJlZm9yZSBlYWNoIGFuZCBl
dmVyeSBjYWxsCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgIHZpc2libGVFbmQgPSB2
aXNpYmxlRW5kLnByZXZpb3VzKENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KTsKICAgICBWaXNp
YmxlUG9zaXRpb24gYmV5b25kRW5kKGVuZE9mUGFyYWdyYXBoKHZpc2libGVFbmQpLm5leHQoKSk7
CiAgICAgd2hpbGUgKHBhcmFncmFwaFN0YXJ0LmlzTm90TnVsbCgpICYmIHBhcmFncmFwaFN0YXJ0
ICE9IGJleW9uZEVuZCkgewotICAgICAgICBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZShzdHlsZSwg
cGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgIFN0eWxlQ2hhbmdlIHN0
eWxlQ2hhbmdlKCZzdHlsZSwgcGFyYWdyYXBoU3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CiAgICAg
ICAgIGlmIChzdHlsZUNoYW5nZS5jc3NTdHlsZSgpIHx8IG1fcmVtb3ZlT25seSkgewogICAgICAg
ICAgICAgUmVmUHRyPE5vZGU+IGJsb2NrID0gZW5jbG9zaW5nQmxvY2socGFyYWdyYXBoU3RhcnQu
ZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIGlmICghbV9y
ZW1vdmVPbmx5KSB7CkBAIC0yNzEsOSArMjcxLDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
YXBwbHlCbG9ja1N0eWxlKEVkaXRpbmdTdHlsZSAqc3R5bGUpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBBU1NFUlQoIWJsb2NrIHx8IGlzPEhUTUxFbGVtZW50PigqYmxvY2spKTsKICAgICAg
ICAgICAgIGlmIChpczxIVE1MRWxlbWVudD4oYmxvY2suZ2V0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlQ1NTU3R5bGUoc3R5bGUsIGRvd25jYXN0PEhUTUxFbGVtZW50PihibG9jay5nZXQo
KSkpOworICAgICAgICAgICAgICAgIHJlbW92ZUNTU1N0eWxlKHN0eWxlLCBkb3duY2FzdDxIVE1M
RWxlbWVudD4oKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3JlbW92ZU9ubHkpCi0g
ICAgICAgICAgICAgICAgICAgIGFkZEJsb2NrU3R5bGUoc3R5bGVDaGFuZ2UsIGRvd25jYXN0PEhU
TUxFbGVtZW50PihibG9jay5nZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1N0
eWxlKHN0eWxlQ2hhbmdlLCBkb3duY2FzdDxIVE1MRWxlbWVudD4oKmJsb2NrKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGlmIChuZXh0UGFyYWdyYXBoU3RhcnQuaXNPcnBoYW4oKSkK
QEAgLTQyMCw4ICs0MjAsOCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZl
Rm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgICAgICAgICBzZXROb2Rl
QXR0cmlidXRlKGVsZW1lbnQuZ2V0KCksIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgp
KTsKICAgICAgICAgfQogICAgICAgICBpZiAoaW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIpOwot
ICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bh
bihlbGVtZW50LmdldCgpKSkKKyAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoKmVsZW1l
bnQsIHN0eWxlQXR0cik7CisgICAgICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNP
clVuc3R5bGVkU3R5bGVTcGFuKCplbGVtZW50KSkKICAgICAgICAgICAgICAgICB1bnN0eWxlZFNw
YW5zLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzMiw3
ICs0MzIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxl
Q2hhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBkdW1t
eVNwYW5BbmNlc3RvckZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICB3aGlsZSAobm9k
ZSAmJiAoIWlzPEVsZW1lbnQ+KCpub2RlKSB8fCAhaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0
eWxlQXR0cmlidXRlKGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKSkpCisgICAgd2hpbGUgKG5vZGUg
JiYgKCFpczxFbGVtZW50Pigqbm9kZSkgfHwgIWlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHls
ZUF0dHJpYnV0ZShkb3duY2FzdDxFbGVtZW50Pigqbm9kZSkpKSkKICAgICAgICAgbm9kZSA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICAKICAgICByZXR1cm4gbm9kZSA/IG5vZGUtPnBhcmVudE5v
ZGUoKSA6IG51bGxwdHI7CkBAIC00NTAsNyArNDUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6Y2xlYW51cFVuc3R5bGVkQXBwbGVTdHlsZVNwYW5zKENvbnRhaW5lck5vZGUqIGR1bW15U3Bh
bkEKIAogICAgIFZlY3RvcjxFbGVtZW50Kj4gdG9SZW1vdmU7CiAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuT2ZUeXBlPEVsZW1lbnQ+KCpkdW1teVNwYW5BbmNlc3RvcikpIHsKLSAgICAg
ICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3BhbigmY2hpbGQp
KQorICAgICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFu
KGNoaWxkKSkKICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmY2hpbGQpOwogICAgIH0KIApA
QCAtNTMzLDEzICs1MzMsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRk
aW5nVXBUb0VuY2xvc2luZ0Jsb2NrKE5vZGUqIG5vZGUsIE5vZGUqIHVuc3AKICAgICAgICAgaWYg
KGVsZW1lbnQuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihkaXJBdHRyKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBCRE8gZWxlbWVudCwgd2Ugc2hvdWxk
IHByb2JhYmx5IGp1c3QgcmVtb3ZlIGl0IGlmIGl0IGhhcyBubwogICAgICAgICAgICAgLy8gb3Ro
ZXIgYXR0cmlidXRlcywgbGlrZSB3ZSAoc2hvdWxkKSBkbyB3aXRoIEIgYW5kIEkgZWxlbWVudHMu
Ci0gICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKCZlbGVtZW50LCBkaXJBdHRyKTsKKyAg
ICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgZGlyQXR0cik7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gaW5s
aW5lU3R5bGUgPSBjb3B5U3R5bGVPckNyZWF0ZUVtcHR5KGVsZW1lbnQuaW5saW5lU3R5bGUoKSk7
CiAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2Rl
QmlkaSwgQ1NTVmFsdWVOb3JtYWwpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnJlbW92ZVBy
b3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKLSAgICAgICAg
ICAgIGlmIChpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oJmVsZW1l
bnQpKQorICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0
eWxlU3BhbihlbGVtZW50KSkKICAgICAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKCZlbGVtZW50KTsKICAgICAgICAgfQogICAgIH0KQEAgLTU1NSw3ICs1NTUsNyBAQCBz
dGF0aWMgTm9kZSogaGlnaGVzdEVtYmVkZGluZ0FuY2VzdG9yKE5vZGUqIHN0YXJ0Tm9kZSwgTm9k
ZSogZW5jbG9zaW5nTm9kZSkKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlKQordm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlKQogewogICAg
IFJlZlB0cjxDb250YWluZXJOb2RlPiBzdGFydER1bW15U3BhbkFuY2VzdG9yOwogICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBlbmREdW1teVNwYW5BbmNlc3RvcjsKQEAgLTYxNSw3ICs2MTUsNyBA
QCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSog
c3R5bGUpCiAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzM3MjQzNDQ+IEJvbGRpbmcgYW5kIHVuYm9s
ZGluZyBjcmVhdGVzIGV4dHJhbmVvdXMgdGFncwogICAgIFBvc2l0aW9uIHJlbW92ZVN0YXJ0ID0g
c3RhcnQudXBzdHJlYW0oKTsKICAgICBXcml0aW5nRGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSBO
YXR1cmFsV3JpdGluZ0RpcmVjdGlvbjsKLSAgICBib29sIGhhc1RleHREaXJlY3Rpb24gPSBzdHls
ZS0+dGV4dERpcmVjdGlvbih0ZXh0RGlyZWN0aW9uKTsKKyAgICBib29sIGhhc1RleHREaXJlY3Rp
b24gPSBzdHlsZS50ZXh0RGlyZWN0aW9uKHRleHREaXJlY3Rpb24pOwogICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IHN0eWxlV2l0aG91dEVtYmVkZGluZzsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBlbWJlZGRpbmdTdHlsZTsKICAgICBpZiAoaGFzVGV4dERpcmVjdGlvbikgewpAQCAtNjM1LDE1
ICs2MzUsMTUgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZShFZGl0
aW5nU3R5bGUqIHN0eWxlKQogICAgICAgICAgICAgZW1iZWRkaW5nUmVtb3ZlRW5kID0gcG9zaXRp
b25JblBhcmVudEJlZm9yZU5vZGUoZW5kVW5zcGxpdEFuY2VzdG9yKS5kb3duc3RyZWFtKCk7CiAK
ICAgICAgICAgaWYgKGVtYmVkZGluZ1JlbW92ZUVuZCAhPSByZW1vdmVTdGFydCB8fCBlbWJlZGRp
bmdSZW1vdmVFbmQgIT0gZW5kKSB7Ci0gICAgICAgICAgICBzdHlsZVdpdGhvdXRFbWJlZGRpbmcg
PSBzdHlsZS0+Y29weSgpOworICAgICAgICAgICAgc3R5bGVXaXRob3V0RW1iZWRkaW5nID0gc3R5
bGUuY29weSgpOwogICAgICAgICAgICAgZW1iZWRkaW5nU3R5bGUgPSBzdHlsZVdpdGhvdXRFbWJl
ZGRpbmctPmV4dHJhY3RBbmRSZW1vdmVUZXh0RGlyZWN0aW9uKCk7CiAKICAgICAgICAgICAgIGlm
IChjb21wYXJlUG9zaXRpb25zKGVtYmVkZGluZ1JlbW92ZVN0YXJ0LCBlbWJlZGRpbmdSZW1vdmVF
bmQpIDw9IDApCi0gICAgICAgICAgICAgICAgcmVtb3ZlSW5saW5lU3R5bGUoZW1iZWRkaW5nU3R5
bGUuZ2V0KCksIGVtYmVkZGluZ1JlbW92ZVN0YXJ0LCBlbWJlZGRpbmdSZW1vdmVFbmQpOworICAg
ICAgICAgICAgICAgIHJlbW92ZUlubGluZVN0eWxlKCplbWJlZGRpbmdTdHlsZSwgZW1iZWRkaW5n
UmVtb3ZlU3RhcnQsIGVtYmVkZGluZ1JlbW92ZUVuZCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICByZW1vdmVJbmxpbmVTdHlsZShzdHlsZVdpdGhvdXRFbWJlZGRpbmcgPyBzdHlsZVdpdGhvdXRF
bWJlZGRpbmcuZ2V0KCkgOiBzdHlsZSwgcmVtb3ZlU3RhcnQsIGVuZCk7CisgICAgcmVtb3ZlSW5s
aW5lU3R5bGUoc3R5bGVXaXRob3V0RW1iZWRkaW5nID8gKnN0eWxlV2l0aG91dEVtYmVkZGluZyA6
IHN0eWxlLCByZW1vdmVTdGFydCwgZW5kKTsKICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24oKTsK
ICAgICBlbmQgPSBlbmRQb3NpdGlvbigpOwogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFy
dC5pc09ycGhhbigpIHx8IGVuZC5pc051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKQEAgLTY2OCw3
ICs2NjgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlKEVkaXRp
bmdTdHlsZSogc3R5bGUpCiAgICAgLy8gdG8gY2hlY2sgYSBjb21wdXRlZCBzdHlsZQogICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSBzdHlsZTsKKyAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiBzdHlsZVRvQXBwbHkgPSAmc3R5bGU7CiAgICAgaWYgKGhhc1RleHREaXJlY3Rp
b24pIHsKICAgICAgICAgLy8gQXZvaWQgYXBwbHlpbmcgdGhlIHVuaWNvZGUtYmlkaSBhbmQgZGly
ZWN0aW9uIHByb3BlcnRpZXMgYmVuZWF0aCBhbmNlc3RvcnMgdGhhdCBhbHJlYWR5IGhhdmUgdGhl
bS4KICAgICAgICAgTm9kZSogZW1iZWRkaW5nU3RhcnROb2RlID0gaGlnaGVzdEVtYmVkZGluZ0Fu
Y2VzdG9yKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIGVuY2xvc2luZ0Jsb2NrKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpKTsKQEAgLTY4MCwxNiArNjgwLDE2IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1h
bmQ6OmFwcGx5SW5saW5lU3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgICAgIEFT
U0VSVChlbWJlZGRpbmdBcHBseVN0YXJ0LmlzTm90TnVsbCgpICYmIGVtYmVkZGluZ0FwcGx5RW5k
LmlzTm90TnVsbCgpKTsKIAogICAgICAgICAgICAgaWYgKCFlbWJlZGRpbmdTdHlsZSkgewotICAg
ICAgICAgICAgICAgIHN0eWxlV2l0aG91dEVtYmVkZGluZyA9IHN0eWxlLT5jb3B5KCk7CisgICAg
ICAgICAgICAgICAgc3R5bGVXaXRob3V0RW1iZWRkaW5nID0gc3R5bGUuY29weSgpOwogICAgICAg
ICAgICAgICAgIGVtYmVkZGluZ1N0eWxlID0gc3R5bGVXaXRob3V0RW1iZWRkaW5nLT5leHRyYWN0
QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZml4
UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKGVtYmVkZGluZ1N0eWxlLmdldCgpLCBlbWJlZGRpbmdB
cHBseVN0YXJ0LCBlbWJlZGRpbmdBcHBseUVuZCk7CisgICAgICAgICAgICBmaXhSYW5nZUFuZEFw
cGx5SW5saW5lU3R5bGUoKmVtYmVkZGluZ1N0eWxlLCBlbWJlZGRpbmdBcHBseVN0YXJ0LCBlbWJl
ZGRpbmdBcHBseUVuZCk7CiAKICAgICAgICAgICAgIHN0eWxlVG9BcHBseSA9IHN0eWxlV2l0aG91
dEVtYmVkZGluZzsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZpeFJhbmdlQW5kQXBwbHlJbmxp
bmVTdHlsZShzdHlsZVRvQXBwbHkuZ2V0KCksIHN0YXJ0LCBlbmQpOworICAgIGZpeFJhbmdlQW5k
QXBwbHlJbmxpbmVTdHlsZSgqc3R5bGVUb0FwcGx5LCBzdGFydCwgZW5kKTsKIAogICAgIC8vIFJl
bW92ZSBkdW1teSBzdHlsZSBzcGFucyBjcmVhdGVkIGJ5IHNwbGl0dGluZyB0ZXh0IGVsZW1lbnRz
LgogICAgIGNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyhzdGFydER1bW15U3BhbkFuY2Vz
dG9yLmdldCgpKTsKQEAgLTY5Nyw3ICs2OTcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUpCiAgICAgICAgIGNsZWFudXBVbnN0
eWxlZEFwcGxlU3R5bGVTcGFucyhlbmREdW1teVNwYW5BbmNlc3Rvci5nZXQoKSk7CiB9CiAKLXZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5n
U3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQp
Cit2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUoRWRp
dGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYg
ZW5kKQogewogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7CiAK
QEAgLTc2Niw3ICs3NjYsNyBAQCBzdHJ1Y3QgSW5saW5lUnVuVG9BcHBseVN0eWxlIHsKICAgICBT
dHlsZUNoYW5nZSBjaGFuZ2U7CiB9OwogCi12b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlu
bGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnROb2Rl
LCBOb2RlKiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5l
U3R5bGVUb05vZGVSYW5nZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBOb2RlJiBzdGFydE5vZGUsIE5v
ZGUqIHBhc3RFbmROb2RlKQogewogICAgIGlmIChtX3JlbW92ZU9ubHkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTc5MCw3ICs3OTAsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGlu
ZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgcwogICAgICAgICAg
ICAgLy8gQWRkIHRvIHRoaXMgZWxlbWVudCdzIGlubGluZSBzdHlsZSBhbmQgc2tpcCBvdmVyIGl0
cyBjb250ZW50cy4KICAgICAgICAgICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8
SFRNTEVsZW1lbnQ+KCpub2RlKTsKICAgICAgICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVudC5pbmxp
bmVTdHlsZSgpKTsKLSAgICAgICAgICAgIGlmIChNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBvdGhl
clN0eWxlID0gc3R5bGUtPnN0eWxlKCkpCisgICAgICAgICAgICBpZiAoTXV0YWJsZVN0eWxlUHJv
cGVydGllcyogb3RoZXJTdHlsZSA9IHN0eWxlLnN0eWxlKCkpCiAgICAgICAgICAgICAgICAgaW5s
aW5lU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCpvdGhlclN0eWxlKTsKICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUt
PmFzVGV4dCgpKTsKICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbigqbm9kZSk7CkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSogc3R5bGUsIE5v
ZGUmIHMKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCiAgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKQotICAgICAgICBydW4uY2hhbmdlID0g
U3R5bGVDaGFuZ2Uoc3R5bGUsIHJ1bi5wb3NpdGlvbkZvclN0eWxlQ29tcHV0YXRpb24pOworICAg
ICAgICBydW4uY2hhbmdlID0gU3R5bGVDaGFuZ2UoJnN0eWxlLCBydW4ucG9zaXRpb25Gb3JTdHls
ZUNvbXB1dGF0aW9uKTsKIAogICAgIGZvciAoYXV0byYgcnVuIDogcnVucykgewogICAgICAgICBp
ZiAocnVuLmR1bW15RWxlbWVudCkKQEAgLTg1MCwxNSArODUwLDE1IEBAIGJvb2wgQXBwbHlTdHls
ZUNvbW1hbmQ6OmlzU3R5bGVkSW5saW5lRWxlbWVudFRvUmVtb3ZlKEVsZW1lbnQqIGVsZW1lbnQp
IGNvbnN0CiAgICAgICAgIHx8IChtX2lzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24gJiYg
bV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKGVsZW1lbnQpKTsKIH0KIAotYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHls
ZSogc3R5bGUsIE5vZGUqIHJ1blN0YXJ0LCBOb2RlKiBwYXN0RW5kTm9kZSkKK2Jvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnNob3VsZEFwcGx5SW5saW5lU3R5bGVUb1J1bihFZGl0aW5nU3R5bGUmIHN0
eWxlLCBOb2RlKiBydW5TdGFydCwgTm9kZSogcGFzdEVuZE5vZGUpCiB7Ci0gICAgQVNTRVJUKHN0
eWxlICYmIHJ1blN0YXJ0KTsKKyAgICBBU1NFUlQocnVuU3RhcnQpOwogCiAgICAgZm9yIChOb2Rl
KiBub2RlID0gcnVuU3RhcnQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNDaGlsZE5v
ZGVzKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gV2UgZG9uJ3QgY29uc2lk
ZXIgbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB3ZSBuZXZl
ciBhcHBseSBzdHlsZSB3aGVuIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBpcyBz
cGVjaWZpZWQKLSAgICAgICAgaWYgKCFzdHlsZS0+c3R5bGVJc1ByZXNlbnRJbkNvbXB1dGVkU3R5
bGVPZk5vZGUobm9kZSkpCisgICAgICAgIGlmICghc3R5bGUuc3R5bGVJc1ByZXNlbnRJbkNvbXB1
dGVkU3R5bGVPZk5vZGUobm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
aWYgKG1fc3R5bGVkSW5saW5lRWxlbWVudCAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcocG9z
aXRpb25CZWZvcmVOb2RlKG5vZGUpLCBtX3N0eWxlZElubGluZUVsZW1lbnQtPnRhZ1FOYW1lKCkp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC04NjYsNyArODY2LDcgQEAgYm9vbCBBcHBs
eVN0eWxlQ29tbWFuZDo6c2hvdWxkQXBwbHlJbmxpbmVTdHlsZVRvUnVuKEVkaXRpbmdTdHlsZSog
c3R5bGUsIE5vZGUqIHIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSog
c3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2Rl
KiBwYXN0RW5kTm9kZSkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNvbmZsaWN0aW5n
SW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSYgc3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVu
U3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2RlKiBwYXN0RW5kTm9kZSkKIHsKICAgICBB
U1NFUlQocnVuU3RhcnQgJiYgcnVuRW5kKTsKICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IHJ1blN0
YXJ0OwpAQCAtODk0LDcgKzg5NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNv
bmZsaWN0aW5nSW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSogc3R5bGUsCiAgICAgfQog
fQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50
KEVkaXRpbmdTdHlsZSogc3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50LCBJbmxpbmVTdHlsZVJl
bW92YWxNb2RlIG1vZGUsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCitib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYg
c3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUs
IEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCiB7CiAgICAgaWYgKCFlbGVtZW50LnBhcmVu
dE5vZGUoKSB8fCAhaXNFZGl0YWJsZU5vZGUoKmVsZW1lbnQucGFyZW50Tm9kZSgpKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtOTA5LDcgKzkwOSw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1h
bmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgSFRN
TEVsCiAgICAgfQogCiAgICAgYm9vbCByZW1vdmVkID0gZmFsc2U7Ci0gICAgaWYgKHJlbW92ZUlt
cGxpY2l0bHlTdHlsZWRFbGVtZW50KHN0eWxlLCAmZWxlbWVudCwgbW9kZSwgZXh0cmFjdGVkU3R5
bGUpKQorICAgIGlmIChyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudChzdHlsZSwgZWxlbWVu
dCwgbW9kZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAogICAg
IGlmICghZWxlbWVudC5pc0Nvbm5lY3RlZCgpKQpAQCAtOTE3LDc2ICs5MTcsNzIgQEAgYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudChFZGl0aW5nU3R5
bGUqIHN0eWxlLCBIVE1MRWwKIAogICAgIC8vIElmIHRoZSBub2RlIHdhcyBjb252ZXJ0ZWQgdG8g
YSBzcGFuLCB0aGUgc3BhbiBtYXkgc3RpbGwgY29udGFpbiByZWxldmFudAogICAgIC8vIHN0eWxl
cyB3aGljaCBtdXN0IGJlIHJlbW92ZWQgKGUuZy4gPGIgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBib2xk
Jz4pCi0gICAgaWYgKHJlbW92ZUNTU1N0eWxlKHN0eWxlLCAmZWxlbWVudCwgbW9kZSwgZXh0cmFj
dGVkU3R5bGUpKQorICAgIGlmIChyZW1vdmVDU1NTdHlsZShzdHlsZSwgZWxlbWVudCwgbW9kZSwg
ZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICByZW1vdmVkID0gdHJ1ZTsKIAogICAgIHJldHVybiBy
ZW1vdmVkOwogfQogICAgIAotdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFu
T3JSZW1vdmVJZldpdGhvdXRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50KiYgZWxlbSkKK3ZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRl
cyhIVE1MRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoaGFzTm9BdHRyaWJ1dGVPck9ubHlT
dHlsZUF0dHJpYnV0ZShlbGVtLCBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkpKQotICAgICAg
ICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW0pOworICAgIGlmIChoYXNOb0F0dHJp
YnV0ZU9yT25seVN0eWxlQXR0cmlidXRlKGVsZW1lbnQsIFN0eWxlQXR0cmlidXRlU2hvdWxkQmVF
bXB0eSkpCisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwog
ICAgIGVsc2UgewotICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbkVsZW1lbnQgPSByZXBsYWNl
RWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhlbGVtKTsKLSAg
ICAgICAgQVNTRVJUKG5ld1NwYW5FbGVtZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3Rl
ZCgpKTsKLSAgICAgICAgZWxlbSA9IG5ld1NwYW5FbGVtZW50OworICAgICAgICBIVE1MRWxlbWVu
dCogbmV3U3BhbkVsZW1lbnQgPSByZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxk
cmVuQW5kQXR0cmlidXRlcygmZWxlbWVudCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3U3Bh
bkVsZW1lbnQsIG5ld1NwYW5FbGVtZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3RlZCgp
KTsKICAgICB9CiB9Ci0gICAgCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNp
dGx5U3R5bGVkRWxlbWVudChFZGl0aW5nU3R5bGUqIHN0eWxlLCBIVE1MRWxlbWVudCogZWxlbWVu
dCwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0
eWxlKQorCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxl
bWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVudCwgSW5saW5lU3R5
bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQogewotICAg
IEFTU0VSVChzdHlsZSk7CiAgICAgaWYgKG1vZGUgPT0gUmVtb3ZlTm9uZSkgewogICAgICAgICBB
U1NFUlQoIWV4dHJhY3RlZFN0eWxlKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNX
aXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudChlbGVtZW50KSB8fCBzdHlsZS0+Y29uZmxpY3RzV2l0
aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBzdHls
ZS5jb25mbGljdHNXaXRoSW1wbGljaXRTdHlsZU9mRWxlbWVudCgmZWxlbWVudCkgfHwgc3R5bGUu
Y29uZmxpY3RzV2l0aEltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoJmVsZW1lbnQpOwogICAgIH0K
IAogICAgIEFTU0VSVChtb2RlID09IFJlbW92ZUlmTmVlZGVkIHx8IG1vZGUgPT0gUmVtb3ZlQWx3
YXlzKTsKLSAgICBpZiAoc3R5bGUtPmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZFbGVtZW50
KGVsZW1lbnQsIGV4dHJhY3RlZFN0eWxlLCBtb2RlID09IFJlbW92ZUFsd2F5cyA/IEVkaXRpbmdT
dHlsZTo6RXh0cmFjdE1hdGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRvTm90RXh0cmFjdE1h
dGNoaW5nU3R5bGUpKSB7CisgICAgaWYgKHN0eWxlLmNvbmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxl
T2ZFbGVtZW50KCZlbGVtZW50LCBleHRyYWN0ZWRTdHlsZSwgbW9kZSA9PSBSZW1vdmVBbHdheXMg
PyBFZGl0aW5nU3R5bGU6OkV4dHJhY3RNYXRjaGluZ1N0eWxlIDogRWRpdGluZ1N0eWxlOjpEb05v
dEV4dHJhY3RNYXRjaGluZ1N0eWxlKSkgewogICAgICAgICByZXBsYWNlV2l0aFNwYW5PclJlbW92
ZUlmV2l0aG91dEF0dHJpYnV0ZXMoZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAogICAgIC8vIHVuaWNvZGUtYmlkaSBhbmQgZGlyZWN0aW9uIGFyZSBwdXNoZWQgZG93biBz
ZXBhcmF0ZWx5IHNvIGRvbid0IHB1c2ggZG93biB3aXRoIG90aGVyIHN0eWxlcwogICAgIFZlY3Rv
cjxRdWFsaWZpZWROYW1lPiBhdHRyaWJ1dGVzOwotICAgIGlmICghc3R5bGUtPmV4dHJhY3RDb25m
bGljdGluZ0ltcGxpY2l0U3R5bGVPZkF0dHJpYnV0ZXMoZWxlbWVudCwgZXh0cmFjdGVkU3R5bGUg
PyBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbiA6IEVkaXRpbmdTdHlsZTo6
RG9Ob3RQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24sCi0gICAgICAgIGV4dHJhY3RlZFN0eWxlLCBh
dHRyaWJ1dGVzLCBtb2RlID09IFJlbW92ZUFsd2F5cyA/IEVkaXRpbmdTdHlsZTo6RXh0cmFjdE1h
dGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRvTm90RXh0cmFjdE1hdGNoaW5nU3R5bGUpKQor
ICAgIGlmICghc3R5bGUuZXh0cmFjdENvbmZsaWN0aW5nSW1wbGljaXRTdHlsZU9mQXR0cmlidXRl
cygmZWxlbWVudCwgZXh0cmFjdGVkU3R5bGUgPyBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGlu
Z0RpcmVjdGlvbiA6IEVkaXRpbmdTdHlsZTo6RG9Ob3RQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24s
CisgICAgICAgIGV4dHJhY3RlZFN0eWxlLCBhdHRyaWJ1dGVzLCBtb2RlID09IFJlbW92ZUFsd2F5
cyA/IEVkaXRpbmdTdHlsZTo6RXh0cmFjdE1hdGNoaW5nU3R5bGUgOiBFZGl0aW5nU3R5bGU6OkRv
Tm90RXh0cmFjdE1hdGNoaW5nU3R5bGUpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKICAgICBmb3IgKGF1dG8mIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZXMpCiAgICAgICAgIHJlbW92
ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKTsKIAotICAgIGlmIChpc0VtcHR5Rm9u
dFRhZyhlbGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNw
YW4oZWxlbWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVu
dCk7CisgICAgaWYgKGlzRW1wdHlGb250VGFnKCZlbGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCisgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUs
IEhUTUxFbGVtZW50KiBlbGVtZW50LCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlIG1vZGUsIEVkaXRp
bmdTdHlsZSogZXh0cmFjdGVkU3R5bGUpCitib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVD
U1NTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVudCwgSW5saW5l
U3R5bGVSZW1vdmFsTW9kZSBtb2RlLCBFZGl0aW5nU3R5bGUqIGV4dHJhY3RlZFN0eWxlKQogewot
ICAgIEFTU0VSVChzdHlsZSk7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotCiAgICAgaWYgKG1vZGUg
PT0gUmVtb3ZlTm9uZSkKLSAgICAgICAgcmV0dXJuIHN0eWxlLT5jb25mbGljdHNXaXRoSW5saW5l
U3R5bGVPZkVsZW1lbnQoZWxlbWVudCk7CisgICAgICAgIHJldHVybiBzdHlsZS5jb25mbGljdHNX
aXRoSW5saW5lU3R5bGVPZkVsZW1lbnQoJmVsZW1lbnQpOwogCiAgICAgUmVmUHRyPE11dGFibGVT
dHlsZVByb3BlcnRpZXM+IG5ld0lubGluZVN0eWxlOwotICAgIGlmICghc3R5bGUtPmNvbmZsaWN0
c1dpdGhJbmxpbmVTdHlsZU9mRWxlbWVudChlbGVtZW50LCBuZXdJbmxpbmVTdHlsZSwgZXh0cmFj
dGVkU3R5bGUpKQorICAgIGlmICghc3R5bGUuY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVt
ZW50KCZlbGVtZW50LCBuZXdJbmxpbmVTdHlsZSwgZXh0cmFjdGVkU3R5bGUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkKICAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIpOwogICAgIGVsc2UKLSAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxl
LT5hc1RleHQoKSk7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0
ciwgbmV3SW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKIAogICAgIGlmIChpc1NwYW5XaXRob3V0QXR0
cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oJmVsZW1lbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUhUTUxFbGVtZW50
KiBBcHBseVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5l
U3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSogbm9kZSkKK0hUTUxFbGVtZW50KiBBcHBs
eVN0eWxlQ29tbWFuZDo6aGlnaGVzdEFuY2VzdG9yV2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMTAzNyw3ICsxMDMzLDcgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSYgbm9kZSwgRWRpdGluZ1N0
eWxlKiBzdHkKICAgICBhZGRJbmxpbmVTdHlsZUlmTmVlZGVkKG5ld0lubGluZVN0eWxlLmdldCgp
LCBub2RlLCBub2RlLCBEb05vdEFkZFN0eWxlZEVsZW1lbnQpOwogfQogCi12b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjpwdXNoRG93bklubGluZVN0eWxlQXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqIHN0
eWxlLCBOb2RlKiB0YXJnZXROb2RlKQordm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cHVzaERvd25J
bmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSogdGFyZ2V0Tm9k
ZSkKIHsKICAgICBIVE1MRWxlbWVudCogaGlnaGVzdEFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9y
V2l0aENvbmZsaWN0aW5nSW5saW5lU3R5bGUoc3R5bGUsIHRhcmdldE5vZGUpOwogICAgIGlmICgh
aGlnaGVzdEFuY2VzdG9yKQpAQCAtMTA4OSw3ICsxMDg1LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6cHVzaERvd25JbmxpbmVTdHlsZUFyb3VuZE5vZGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwg
Tm9kZSoKICAgICB9CiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0
eWxlKEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXRpb24mIGVuZCkKK3ZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlKEVk
aXRpbmdTdHlsZSYgc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCkKIHsKICAgICBBU1NFUlQoc3RhcnQuaXNOb3ROdWxsKCkpOwogICAgIEFTU0VSVChlbmQu
aXNOb3ROdWxsKCkpOwpAQCAtMTI1NCw3ICsxMjUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6c3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
aXQKICAgICB1cGRhdGVTdGFydEVuZChuZXdTdGFydCwgcG9zaXRpb25BZnRlck5vZGUoZmlyc3RU
ZXh0Tm9kZSkpOwogfQogCi1ib29sIEFwcGx5U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdTdHlsZSogc3R5bGUpCitib29sIEFwcGx5
U3R5bGVDb21tYW5kOjpzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIEVk
aXRpbmdTdHlsZSYgc3R5bGUpCiB7CiAgICAgaWYgKCFpczxIVE1MRWxlbWVudD4oZWxlbWVudCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyOTUsNyArMTI5MSw3IEBAIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6Om1lcmdlU3RhcnRXaXRoUHJldmlvdXNJZklkZW50aWNhbChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsCiAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpzdGFy
dE5vZGUpOwogICAgIGF1dG8qIHN0YXJ0Q2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQoKTsKICAg
ICBBU1NFUlQoc3RhcnRDaGlsZCk7Ci0gICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygmcHJldmlv
dXNFbGVtZW50LCAmZWxlbWVudCk7CisgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhwcmV2aW91
c0VsZW1lbnQsIGVsZW1lbnQpOwogCiAgICAgaW50IHN0YXJ0T2Zmc2V0QWRqdXN0bWVudCA9IHN0
YXJ0Q2hpbGQtPmNvbXB1dGVOb2RlSW5kZXgoKTsKICAgICBpbnQgZW5kT2Zmc2V0QWRqdXN0bWVu
dCA9IHN0YXJ0Tm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IHN0YXJ0T2Zmc2V0QWRqdXN0
bWVudCA6IDA7CkBAIC0xMzI3LDcgKzEzMjMsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpt
ZXJnZUVuZFdpdGhOZXh0SWZJZGVudGljYWwoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAog
ICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50PigqZW5kTm9kZSk7CiAgICAgTm9k
ZSogbmV4dENoaWxkID0gbmV4dEVsZW1lbnQuZmlyc3RDaGlsZCgpOwogCi0gICAgbWVyZ2VJZGVu
dGljYWxFbGVtZW50cygmZWxlbWVudCwgJm5leHRFbGVtZW50KTsKKyAgICBtZXJnZUlkZW50aWNh
bEVsZW1lbnRzKGVsZW1lbnQsIG5leHRFbGVtZW50KTsKIAogICAgIGJvb2wgc2hvdWxkVXBkYXRl
U3RhcnQgPSBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kTm9kZTsKICAgICBpbnQgZW5kT2Zm
c2V0ID0gbmV4dENoaWxkID8gbmV4dENoaWxkLT5jb21wdXRlTm9kZUluZGV4KCkgOiBuZXh0RWxl
bWVudC5jb3VudENoaWxkTm9kZXMoKTsKQEAgLTEzNTksMTMgKzEzNTUsMTMgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChOb2RlJiBzdGFydE5v
ZGUsIE5vZGUmIGVuZE4KICAgICBSZWZQdHI8Tm9kZT4gcHJldmlvdXNTaWJsaW5nID0gZWxlbWVu
dC0+cHJldmlvdXNTaWJsaW5nKCk7CiAKICAgICBpZiAobmV4dFNpYmxpbmcgJiYgbmV4dFNpYmxp
bmctPmhhc0VkaXRhYmxlU3R5bGUoKSAmJiBhcmVJZGVudGljYWxFbGVtZW50cyhlbGVtZW50LCAq
bmV4dFNpYmxpbmcpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGVsZW1lbnQucHRy
KCksIGRvd25jYXN0PEVsZW1lbnQ+KG5leHRTaWJsaW5nLmdldCgpKSk7CisgICAgICAgIG1lcmdl
SWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgZG93bmNhc3Q8RWxlbWVudD4oKm5leHRTaWJsaW5n
KSk7CiAKICAgICBpZiAoaXM8RWxlbWVudD4ocHJldmlvdXNTaWJsaW5nLmdldCgpKSAmJiBwcmV2
aW91c1NpYmxpbmctPmhhc0VkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICBhdXRvKiBtZXJnZWRF
bGVtZW50ID0gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2libGluZygpOwogICAgICAgICBBU1NFUlQo
bWVyZ2VkRWxlbWVudCk7CiAgICAgICAgIGlmIChtZXJnZWRFbGVtZW50LT5oYXNFZGl0YWJsZVN0
eWxlKCkgJiYgYXJlSWRlbnRpY2FsRWxlbWVudHMoKnByZXZpb3VzU2libGluZywgKm1lcmdlZEVs
ZW1lbnQpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhkb3duY2FzdDxFbGVt
ZW50PihwcmV2aW91c1NpYmxpbmcuZ2V0KCkpLCBkb3duY2FzdDxFbGVtZW50PihtZXJnZWRFbGVt
ZW50KSk7CisgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKGRvd25jYXN0PEVsZW1l
bnQ+KCpwcmV2aW91c1NpYmxpbmcpLCBkb3duY2FzdDxFbGVtZW50PigqbWVyZ2VkRWxlbWVudCkp
OwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgY2FsbCB1cGRhdGVT
dGFydEVuZCBpZiB0aGUgc3RhcnQgb3IgZW5kIHdhcyBpbiB0aGUgbm9kZQpAQCAtMTM3MywyMyAr
MTM2OSwyMSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhF
bGVtZW50KE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTgogICAgIC8vIFZpc2libGVTZWxlY3Rp
b246OnZhbGlkYXRlKCkuCiB9CiAKLXZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZEJsb2NrU3R5
bGUoY29uc3QgU3R5bGVDaGFuZ2UmIHN0eWxlQ2hhbmdlLCBIVE1MRWxlbWVudCogYmxvY2spCit2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiBz
dHlsZUNoYW5nZSwgSFRNTEVsZW1lbnQmIGJsb2NrKQogewogICAgIEFTU0VSVChzdHlsZUNoYW5n
ZS5jc3NTdHlsZSgpKTsKICAgICAvLyBEbyBub3QgY2hlY2sgZm9yIGxlZ2FjeSBzdHlsZXMgaGVy
ZS4gVGhvc2Ugc3R5bGVzLCBsaWtlIDxCPiBhbmQgPEk+LCBvbmx5IGFwcGx5IGZvcgogICAgIC8v
IGlubGluZSBjb250ZW50LgotICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgU3RyaW5nIGNzc1N0eWxlID0gc3R5bGVDaGFuZ2UuY3NzU3R5bGUoKS0+YXNUZXh0
KCk7CiAgICAgU3RyaW5nQnVpbGRlciBjc3NUZXh0OwogICAgIGNzc1RleHQuYXBwZW5kKGNzc1N0
eWxlKTsKLSAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBkZWNsID0gYmxvY2stPmlubGlu
ZVN0eWxlKCkpIHsKKyAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBkZWNsID0gYmxvY2su
aW5saW5lU3R5bGUoKSkgewogICAgICAgICBpZiAoIWNzc1N0eWxlLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIGNzc1RleHQuYXBwZW5kKCcgJyk7CiAgICAgICAgIGNzc1RleHQuYXBwZW5kKGRlY2wt
PmFzVGV4dCgpKTsKICAgICB9Ci0gICAgc2V0Tm9kZUF0dHJpYnV0ZShibG9jaywgc3R5bGVBdHRy
LCBjc3NUZXh0LnRvU3RyaW5nKCkpOworICAgIHNldE5vZGVBdHRyaWJ1dGUoJmJsb2NrLCBzdHls
ZUF0dHIsIGNzc1RleHQudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnQs
IE5vZGUmIGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgYWRkU3R5bGVkRWxlbWVudCkKQEAgLTE1MTgs
OSArMTUxMiw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhO
b2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAgICAgUG9zaXRpb24gbmV3U3Rh
cnQgPSBzdGFydDsKICAgICBQb3NpdGlvbiBuZXdFbmQgPSBlbmQ7CiAKLSAgICBWZWN0b3I8UmVm
UHRyPFRleHQ+PiB0ZXh0Tm9kZXM7CisgICAgVmVjdG9yPFJlZjxUZXh0Pj4gdGV4dE5vZGVzOwog
ICAgIGZvciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZCgq
bm9kZSk7IHRleHROb2RlOyB0ZXh0Tm9kZSA9IFRleHROb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
ZygqdGV4dE5vZGUpKQotICAgICAgICB0ZXh0Tm9kZXMuYXBwZW5kKHRleHROb2RlKTsKKyAgICAg
ICAgdGV4dE5vZGVzLmFwcGVuZCgqdGV4dE5vZGUpOwogCiAgICAgZm9yIChhdXRvJiBjaGlsZFRl
eHQgOiB0ZXh0Tm9kZXMpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IGNoaWxkVGV4dC0+bmV4dFNp
YmxpbmcoKTsKQEAgLTE1MjksOSArMTUyMyw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6Ompv
aW5DaGlsZFRleHROb2RlcyhOb2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAg
ICAgCiAgICAgICAgIFRleHQmIG5leHRUZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm5leHQpOwogICAg
ICAgICBpZiAoc3RhcnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0
SW5BbmNob3IgJiYgbmV4dCA9PSBzdGFydC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgICAgICBu
ZXdTdGFydCA9IFBvc2l0aW9uKGNoaWxkVGV4dC5nZXQoKSwgY2hpbGRUZXh0LT5sZW5ndGgoKSAr
IHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgICAgIG5ld1N0YXJ0ID0g
UG9zaXRpb24oY2hpbGRUZXh0LnB0cigpLCBjaGlsZFRleHQtPmxlbmd0aCgpICsgc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBpZiAoZW5kLmFuY2hvclR5cGUoKSA9PSBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIG5leHQgPT0gZW5kLmNvbnRhaW5l
ck5vZGUoKSkKLSAgICAgICAgICAgIG5ld0VuZCA9IFBvc2l0aW9uKGNoaWxkVGV4dC5nZXQoKSwg
Y2hpbGRUZXh0LT5sZW5ndGgoKSArIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAg
ICAgICAgICBuZXdFbmQgPSBQb3NpdGlvbihjaGlsZFRleHQucHRyKCksIGNoaWxkVGV4dC0+bGVu
Z3RoKCkgKyBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBTdHJpbmcgdGV4
dFRvTW92ZSA9IG5leHRUZXh0LmRhdGEoKTsKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGNo
aWxkVGV4dCwgY2hpbGRUZXh0LT5sZW5ndGgoKSwgdGV4dFRvTW92ZSk7CiAgICAgICAgIHJlbW92
ZU5vZGUobmV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgK
aW5kZXggMjdmYWU2Njc0N2M1MzU1YjUzZTIwZDc1MWQzZWJkYmE1MWJjNWNiMC4uNDA5ZmNjZjBk
N2QyMjRkMWM3NzRkN2E4MzA1YzQzZGY4ZDdhODhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuaApAQCAtNzUsMjcgKzc1LDI3IEBAIHByaXZhdGU6CiAKICAg
ICAvLyBzdHlsZS1yZW1vdmFsIGhlbHBlcnMKICAgICBib29sIGlzU3R5bGVkSW5saW5lRWxlbWVu
dFRvUmVtb3ZlKEVsZW1lbnQqKSBjb25zdDsKLSAgICBib29sIHNob3VsZEFwcGx5SW5saW5lU3R5
bGVUb1J1bihFZGl0aW5nU3R5bGUqLCBOb2RlKiBydW5TdGFydCwgTm9kZSogcGFzdEVuZE5vZGUp
OwotICAgIHZvaWQgcmVtb3ZlQ29uZmxpY3RpbmdJbmxpbmVTdHlsZUZyb21SdW4oRWRpdGluZ1N0
eWxlKiwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5FbmQsIE5vZGUq
IHBhc3RFbmROb2RlKTsKLSAgICBib29sIHJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRp
dGluZ1N0eWxlKiwgSFRNTEVsZW1lbnQmLCBJbmxpbmVTdHlsZVJlbW92YWxNb2RlID0gUmVtb3Zl
SWZOZWVkZWQsIEVkaXRpbmdTdHlsZSogZXh0cmFjdGVkU3R5bGUgPSBudWxscHRyKTsKLSAgICBp
bmxpbmUgYm9vbCBzaG91bGRSZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHls
ZSogc3R5bGUsIEhUTUxFbGVtZW50JiBlbGVtZW50KSB7cmV0dXJuIHJlbW92ZUlubGluZVN0eWxl
RnJvbUVsZW1lbnQoc3R5bGUsIGVsZW1lbnQsIFJlbW92ZU5vbmUpO30KLSAgICB2b2lkIHJlcGxh
Y2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudComKTsKLSAg
ICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRFbGVtZW50KEVkaXRpbmdTdHlsZSosIEhUTUxF
bGVtZW50KiwgSW5saW5lU3R5bGVSZW1vdmFsTW9kZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRT
dHlsZSk7Ci0gICAgYm9vbCByZW1vdmVDU1NTdHlsZShFZGl0aW5nU3R5bGUqLCBIVE1MRWxlbWVu
dCosIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBSZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxl
KiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOwotICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5j
ZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Cisg
ICAgYm9vbCBzaG91bGRBcHBseUlubGluZVN0eWxlVG9SdW4oRWRpdGluZ1N0eWxlJiwgTm9kZSog
cnVuU3RhcnQsIE5vZGUqIHBhc3RFbmROb2RlKTsKKyAgICB2b2lkIHJlbW92ZUNvbmZsaWN0aW5n
SW5saW5lU3R5bGVGcm9tUnVuKEVkaXRpbmdTdHlsZSYsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQs
IFJlZlB0cjxOb2RlPiYgcnVuRW5kLCBOb2RlKiBwYXN0RW5kTm9kZSk7CisgICAgYm9vbCByZW1v
dmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYsIEhUTUxFbGVtZW50JiwgSW5s
aW5lU3R5bGVSZW1vdmFsTW9kZSA9IFJlbW92ZUlmTmVlZGVkLCBFZGl0aW5nU3R5bGUqIGV4dHJh
Y3RlZFN0eWxlID0gbnVsbHB0cik7CisgICAgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlSW5saW5l
U3R5bGVGcm9tRWxlbWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVu
dCkge3JldHVybiByZW1vdmVJbmxpbmVTdHlsZUZyb21FbGVtZW50KHN0eWxlLCBlbGVtZW50LCBS
ZW1vdmVOb25lKTt9CisgICAgdm9pZCByZXBsYWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0
dHJpYnV0ZXMoSFRNTEVsZW1lbnQmKTsKKyAgICBib29sIHJlbW92ZUltcGxpY2l0bHlTdHlsZWRF
bGVtZW50KEVkaXRpbmdTdHlsZSYsIEhUTUxFbGVtZW50JiwgSW5saW5lU3R5bGVSZW1vdmFsTW9k
ZSwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSk7CisgICAgYm9vbCByZW1vdmVDU1NTdHls
ZShFZGl0aW5nU3R5bGUmLCBIVE1MRWxlbWVudCYsIElubGluZVN0eWxlUmVtb3ZhbE1vZGUgPSBS
ZW1vdmVJZk5lZWRlZCwgRWRpdGluZ1N0eWxlKiBleHRyYWN0ZWRTdHlsZSA9IG51bGxwdHIpOwor
ICAgIEhUTUxFbGVtZW50KiBoaWdoZXN0QW5jZXN0b3JXaXRoQ29uZmxpY3RpbmdJbmxpbmVTdHls
ZShFZGl0aW5nU3R5bGUmLCBOb2RlKik7CiAgICAgdm9pZCBhcHBseUlubGluZVN0eWxlVG9QdXNo
RG93bihOb2RlJiwgRWRpdGluZ1N0eWxlKik7Ci0gICAgdm9pZCBwdXNoRG93bklubGluZVN0eWxl
QXJvdW5kTm9kZShFZGl0aW5nU3R5bGUqLCBOb2RlKik7Ci0gICAgdm9pZCByZW1vdmVJbmxpbmVT
dHlsZShFZGl0aW5nU3R5bGUqICwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kKTsKKyAgICB2b2lkIHB1c2hEb3duSW5saW5lU3R5bGVBcm91bmROb2RlKEVkaXRpbmdT
dHlsZSYsIE5vZGUqKTsKKyAgICB2b2lkIHJlbW92ZUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYs
IGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAgICAgYm9vbCBu
b2RlRnVsbHlTZWxlY3RlZChFbGVtZW50JiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKSBjb25zdDsKICAgICBib29sIG5vZGVGdWxseVVuc2VsZWN0ZWQoRWxlbWVu
dCYsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkgY29uc3Q7CiAK
ICAgICAvLyBzdHlsZS1hcHBsaWNhdGlvbiBoZWxwZXJzCi0gICAgdm9pZCBhcHBseUJsb2NrU3R5
bGUoRWRpdGluZ1N0eWxlKik7CisgICAgdm9pZCBhcHBseUJsb2NrU3R5bGUoRWRpdGluZ1N0eWxl
Jik7CiAgICAgdm9pZCBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdTdHlsZSop
OwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqKTsKLSAgICB2b2lkIGZp
eFJhbmdlQW5kQXBwbHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwotICAgIHZvaWQgYXBwbHlJbmxpbmVTdHlsZVRv
Tm9kZVJhbmdlKEVkaXRpbmdTdHlsZSosIE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZE5v
ZGUpOwotICAgIHZvaWQgYWRkQmxvY2tTdHlsZShjb25zdCBTdHlsZUNoYW5nZSYsIEhUTUxFbGVt
ZW50Kik7CisgICAgdm9pZCBhcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYpOworICAgIHZv
aWQgZml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKEVkaXRpbmdTdHlsZSYsIGNvbnN0IFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CisgICAgdm9pZCBhcHBseUlubGluZVN0
eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlJiwgTm9kZSYgc3RhcnROb2RlLCBOb2RlKiBwYXN0
RW5kTm9kZSk7CisgICAgdm9pZCBhZGRCbG9ja1N0eWxlKGNvbnN0IFN0eWxlQ2hhbmdlJiwgSFRN
TEVsZW1lbnQmKTsKICAgICB2b2lkIGFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxl
KiwgTm9kZSYgc3RhcnQsIE5vZGUmIGVuZCwgRUFkZFN0eWxlZEVsZW1lbnQgPSBBZGRTdHlsZWRF
bGVtZW50KTsKICAgICBQb3NpdGlvbiBwb3NpdGlvblRvQ29tcHV0ZUlubGluZVN0eWxlQ2hhbmdl
KE5vZGUmLCBSZWZQdHI8Tm9kZT4mIGR1bW15RWxlbWVudCk7CiAgICAgdm9pZCBhcHBseUlubGlu
ZVN0eWxlQ2hhbmdlKE5vZGUmIHN0YXJ0Tm9kZSwgTm9kZSYgZW5kTm9kZSwgU3R5bGVDaGFuZ2Um
LCBFQWRkU3R5bGVkRWxlbWVudCk7CkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24m
IGVuZCk7CiAgICAgdm9pZCBzcGxpdFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpOwogICAgIHZvaWQgc3BsaXRUZXh0RWxlbWVudEF0
RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7Ci0gICAgYm9v
bCBzaG91bGRTcGxpdFRleHRFbGVtZW50KEVsZW1lbnQqLCBFZGl0aW5nU3R5bGUqKTsKKyAgICBi
b29sIHNob3VsZFNwbGl0VGV4dEVsZW1lbnQoRWxlbWVudCosIEVkaXRpbmdTdHlsZSYpOwogICAg
IGJvb2wgaXNWYWxpZENhcmV0UG9zaXRpb25JblRleHROb2RlKGNvbnN0IFBvc2l0aW9uJiBwb3Np
dGlvbik7CiAgICAgYm9vbCBtZXJnZVN0YXJ0V2l0aFByZXZpb3VzSWZJZGVudGljYWwoY29uc3Qg
UG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKTsKICAgICBib29sIG1lcmdlRW5k
V2l0aE5leHRJZklkZW50aWNhbChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQpOwpAQCAtMTMzLDcgKzEzMyw3IEBAIHByaXZhdGU6CiBlbnVtIFNob3VsZFN0eWxlQXR0
cmlidXRlQmVFbXB0eSB7IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRyaWJ1
dGVTaG91bGRCZUVtcHR5IH07CiBib29sIGlzRW1wdHlGb250VGFnKGNvbnN0IEVsZW1lbnQqLCBT
aG91bGRTdHlsZUF0dHJpYnV0ZUJlRW1wdHkgPSBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkp
OwogYm9vbCBpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUqKTsKLWJvb2wgaXNTdHls
ZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQqKTsKK2Jvb2wg
aXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRlKGNvbnN0IEVsZW1lbnQmKTsK
IFJlZjxIVE1MRWxlbWVudD4gY3JlYXRlU3R5bGVTcGFuRWxlbWVudChEb2N1bWVudCYpOwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IGFjNmEzZWNmZmFkNmFlNzUzZDBkOWQ3MjZhZTYxN2E3
ODVjZDUyZmIuLjhhYWJiMzJjZjQ1OTc1OWJlMGIxNDNjNjA5OTZiMjIxODU4NWE3MWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC01
Niw3ICs1Niw2IEBACiAjaW5jbHVkZSAiTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCIK
ICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRl
ICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFu
ZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCkBAIC01ODIsMTAgKzU4MSwxMCBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjphcHBlbmROb2RlKFJlZjxOb2RlPiYmIG5vZGUsIFJlZjxDb250
YWluZXJOb2RlPiYmIHBhcgogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGVuZE5vZGVD
b21tYW5kOjpjcmVhdGUoV1RGTW92ZShwYXJlbnQpLCBXVEZNb3ZlKG5vZGUpLCBlZGl0aW5nQWN0
aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5J
blJhbmdlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
Cit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVDaGlsZHJlbkluUmFuZ2UoTm9kZSYg
bm9kZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxO
b2RlPj4gY2hpbGRyZW47Ci0gICAgTm9kZSogY2hpbGQgPSBub2RlLT50cmF2ZXJzZVRvQ2hpbGRB
dChmcm9tKTsKKyAgICBOb2RlKiBjaGlsZCA9IG5vZGUudHJhdmVyc2VUb0NoaWxkQXQoZnJvbSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbTsgY2hpbGQgJiYgaSA8IHRvOyBpKyssIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CiAKQEAgLTY2NSwxNCArNjY0LDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0
RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIFBhc3NSZWZQdHI8CiAgICAgYXBw
bHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRFbGVtZW50Q29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQs
IGF0Q2hpbGQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bWVyZ2VJZGVudGlj
YWxFbGVtZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+IHBycEZpcnN0LCBQYXNzUmVmUHRyPEVsZW1l
bnQ+IHBycFNlY29uZCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1lcmdlSWRlbnRpY2Fs
RWxlbWVudHMoRWxlbWVudCYgZmlyc3QsIEVsZW1lbnQmIHNlY29uZCkKIHsKLSAgICBSZWZQdHI8
RWxlbWVudD4gZmlyc3QgPSBwcnBGaXJzdDsKLSAgICBSZWZQdHI8RWxlbWVudD4gc2Vjb25kID0g
cHJwU2Vjb25kOwotICAgIEFTU0VSVCghZmlyc3QtPmlzRGVzY2VuZGFudE9mKHNlY29uZC5nZXQo
KSkgJiYgc2Vjb25kICE9IGZpcnN0KTsKLSAgICBpZiAoZmlyc3QtPm5leHRTaWJsaW5nKCkgIT0g
c2Vjb25kKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUoc2Vjb25kKTsKLSAgICAgICAgaW5zZXJ0Tm9k
ZUFmdGVyKCpzZWNvbmQsICpmaXJzdCk7CisgICAgUmVmPEVsZW1lbnQ+IHByb3RlY3RlZEZpcnN0
ID0gZmlyc3Q7CisgICAgUmVmPEVsZW1lbnQ+IHByb3RlY3RlZFNlY29uZCA9IHNlY29uZDsKKyAg
ICBBU1NFUlQoIWZpcnN0LmlzRGVzY2VuZGFudE9mKCZzZWNvbmQpICYmICZzZWNvbmQgIT0gJmZp
cnN0KTsKKyAgICBpZiAoZmlyc3QubmV4dFNpYmxpbmcoKSAhPSAmc2Vjb25kKSB7CisgICAgICAg
IHJlbW92ZU5vZGUoJnNlY29uZCk7CisgICAgICAgIGluc2VydE5vZGVBZnRlcihzZWNvbmQsIGZp
cnN0KTsKICAgICB9CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoTWVyZ2VJZGVudGljYWxF
bGVtZW50c0NvbW1hbmQ6OmNyZWF0ZShmaXJzdCwgc2Vjb25kKSk7CiB9CkBAIC03MjcsMjMgKzcy
NiwyMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnB1dFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rp
b24oVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChzdGFydEluZGV4LCBz
Y29wZS5nZXQoKSksIHZpc2libGVQb3NpdGlvbkZvckluZGV4KHN0YXJ0SW5kZXggKyBsZW5ndGgs
IHNjb3BlLmdldCgpKSkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRU
ZXh0SW50b05vZGUoUGFzc1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0
IFN0cmluZyYgdGV4dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFRleHRJbnRv
Tm9kZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsK
ICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQogICAgICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0
ZShJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpjcmVhdGUobm9kZSwgb2Zmc2V0LCB0ZXh0LCBl
ZGl0aW5nQWN0aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRl
VGV4dEZyb21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBjb3VudCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9k
ZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQogewogICAgIGFw
cGx5Q29tbWFuZFRvQ29tcG9zaXRlKERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShu
b2RlLCBvZmZzZXQsIGNvdW50LCBlZGl0aW5nQWN0aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVwbGFjZVRleHRJbk5vZGUoUGFzc1JlZlB0cjxUZXh0PiBwcnBOb2Rl
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2Vt
ZW50VGV4dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlKFRl
eHQmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYg
cmVwbGFjZW1lbnRUZXh0KQogewotICAgIFJlZlB0cjxUZXh0PiBub2RlKHBycE5vZGUpOwotICAg
IGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0
ZShXVEZNb3ZlKG5vZGUpLCBvZmZzZXQsIGNvdW50KSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoRGVsZXRlRnJvbVRleHROb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIG9mZnNldCwgY291
bnQpKTsKICAgICBpZiAoIXJlcGxhY2VtZW50VGV4dC5pc0VtcHR5KCkpCi0gICAgICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShXVEZN
b3ZlKG5vZGUpLCBvZmZzZXQsIHJlcGxhY2VtZW50VGV4dCwgZWRpdGluZ0FjdGlvbigpKSk7Cisg
ICAgICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6
OmNyZWF0ZShub2RlLCBvZmZzZXQsIHJlcGxhY2VtZW50VGV4dCwgZWRpdGluZ0FjdGlvbigpKSk7
CiB9CiAKIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlU2VsZWN0ZWRUZXh0
SW5Ob2RlKGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTc1NCw3ICs3NTIsNyBAQCBQb3NpdGlvbiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZShjb25zdCBTdHJp
bmcmIHRleHQpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUmVmUHRyPFRleHQ+
IHRleHROb2RlID0gc3RhcnQuY29udGFpbmVyVGV4dCgpOwotICAgIHJlcGxhY2VUZXh0SW5Ob2Rl
KHRleHROb2RlLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgZW5kLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpIC0gc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIHRleHQpOworICAg
IHJlcGxhY2VUZXh0SW5Ob2RlKCp0ZXh0Tm9kZSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSAtIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpLCB0ZXh0KTsKIAogICAgIHJldHVybiBQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgc3Rh
cnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgKyB0ZXh0Lmxlbmd0aCgpKTsKIH0KQEAgLTc2OSwx
MyArNzY3LDEzIEBAIHN0YXRpYyBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gY29weU1h
cmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNCiAgICAgcmV0dXJuIG1hcmtlcnM7
CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vy
dmluZ01hcmtlcnMoUGFzc1JlZlB0cjxUZXh0PiBwcnBOb2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCkKK3ZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYg
bm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudFRleHQpCiB7Ci0gICAgUmVmUHRyPFRleHQ+IG5vZGUocHJwTm9kZSk7CisgICAgUmVm
PFRleHQ+IHByb3RlY3RlZE5vZGUobm9kZSk7CiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
JiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgYXV0byBtYXJr
ZXJzID0gY29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgY291bnQpLCBE
b2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKSk7CisgICAgYXV0byBtYXJrZXJzID0gY29weU1h
cmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJrZXJzSW5SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyBjb3VudCksIERvY3VtZW50TWFy
a2VyOjpBbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZzZXQs
IGNvdW50LCByZXBsYWNlbWVudFRleHQpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIG5vZGUsIG9mZnNldCwgbm9kZSwgb2Zmc2V0ICsgcmVw
bGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgcmVw
bGFjZW1lbnRUZXh0Lmxlbmd0aCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIG1hcmtlciA6IG1h
cmtlcnMpCiAjaWYgUExBVEZPUk0oSU9TKQogICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1h
cmtlcihuZXdSYW5nZS5nZXQoKSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRlc2NyaXB0aW9uKCks
IG1hcmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1ldGFkYXRhKCkpOwpAQCAtODQyLDE0ICs4
NDAsOSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiAmc2VsZWN0aW9uLCBibwogICAgICAgICBhcHBseUNvbW1hbmRUb0Nv
bXBvc2l0ZShEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoc2VsZWN0aW9uLCBzbWFydERl
bGV0ZSwgbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSwgcmVwbGFjZSwgZXhwYW5kRm9yU3BlY2lhbEVs
ZW1lbnRzLCBzYW5pdGl6ZU1hcmt1cCkpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZW1vdmVDU1NQcm9wZXJ0eShQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+IGVsZW1lbnQsIENT
U1Byb3BlcnR5SUQgcHJvcGVydHkpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVO
b2RlQXR0cmlidXRlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSkKIHsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBlbGVtZW50LCBwcm9wZXJ0eSkpOwotfQotCi12b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQXR0cmlidXRlKFBhc3NSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQotewotICAgIHNl
dE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLCBudWxsQXRvbSk7CisgICAgc2V0Tm9k
ZUF0dHJpYnV0ZSgmZWxlbWVudCwgYXR0cmlidXRlLCBudWxsQXRvbSk7CiB9CiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBl
bGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCkBAIC05MDYsMTQgKzg5OSwxMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZWJhbGFuY2VXaGl0ZXNwYWNlQXQoY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJz
dHJpbmcoZG93bmNhc3Q8VGV4dD4obm9kZSksIHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9k
ZSgpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgcmViYWxhbmNlV2hp
dGVzcGFjZU9uVGV4dFN1YnN0cmluZyhkb3duY2FzdDxUZXh0Pigqbm9kZSksIHBvc2l0aW9uLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpLCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7
CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VPblRl
eHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiBwcnBUZXh0Tm9kZSwgaW50IHN0YXJ0T2Zmc2V0
LCBpbnQgZW5kT2Zmc2V0KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hp
dGVzcGFjZU9uVGV4dFN1YnN0cmluZyhUZXh0JiB0ZXh0Tm9kZSwgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgZW5kT2Zmc2V0KQogewotICAgIFJlZlB0cjxUZXh0PiB0ZXh0Tm9kZSA9IHBycFRleHROb2Rl
OwotCi0gICAgU3RyaW5nIHRleHQgPSB0ZXh0Tm9kZS0+ZGF0YSgpOworICAgIFN0cmluZyB0ZXh0
ID0gdGV4dE5vZGUuZGF0YSgpOwogICAgIEFTU0VSVCghdGV4dC5pc0VtcHR5KCkpOwogCiAgICAg
Ly8gU2V0IHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIHRvIGRlZmluZSB0aGUgZXh0ZW50IG9mIHRo
ZSB3aGl0ZXNwYWNlIHN1cnJvdW5kaW5nIHRleHRbb2Zmc2V0XS4KQEAgLTkyOSw4ICs5MjAsOCBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKFBhc3NSZWZQdHI8VGV4dD4gcAogICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1
cm47CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVVwc3RyZWFtUG9zKFBvc2l0aW9uKHRl
eHROb2RlLmdldCgpLCB1cHN0cmVhbSkpOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRG93
bnN0cmVhbVBvcyhQb3NpdGlvbih0ZXh0Tm9kZS5nZXQoKSwgZG93bnN0cmVhbSkpOworICAgIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlVXBzdHJlYW1Qb3MoUG9zaXRpb24oJnRleHROb2RlLCB1cHN0
cmVhbSkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRG93bnN0cmVhbVBvcyhQb3NpdGlv
bigmdGV4dE5vZGUsIGRvd25zdHJlYW0pKTsKICAgICAKICAgICBTdHJpbmcgc3RyaW5nID0gdGV4
dC5zdWJzdHJpbmcodXBzdHJlYW0sIGxlbmd0aCk7CiAgICAgU3RyaW5nIHJlYmFsYW5jZWRTdHJp
bmcgPSBzdHJpbmdXaXRoUmViYWxhbmNlZFdoaXRlc3BhY2Uoc3RyaW5nLApAQCAtOTQwLDcgKzkz
MSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VPblRl
eHRTdWJzdHJpbmcoUGFzc1JlZlB0cjxUZXh0PiBwCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFbmRPZlBhcmFncmFwaCh2aXNp
YmxlRG93bnN0cmVhbVBvcykgfHwgKHVuc2lnbmVkKWRvd25zdHJlYW0gPT0gdGV4dC5sZW5ndGgo
KSk7CiAgICAgCiAgICAgaWYgKHN0cmluZyAhPSByZWJhbGFuY2VkU3RyaW5nKQotICAgICAgICBy
ZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFdURk1vdmUodGV4dE5vZGUpLCB1cHN0
cmVhbSwgbGVuZ3RoLCByZWJhbGFuY2VkU3RyaW5nKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5v
ZGVQcmVzZXJ2aW5nTWFya2Vycyh0ZXh0Tm9kZSwgdXBzdHJlYW0sIGxlbmd0aCwgcmViYWxhbmNl
ZFN0cmluZyk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnByZXBhcmVXaGl0ZXNw
YWNlQXRQb3NpdGlvbkZvclNwbGl0KFBvc2l0aW9uJiBwb3NpdGlvbikKQEAgLTk2Niw5ICs5NTcs
OSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcmVwYXJlV2hpdGVzcGFjZUF0UG9zaXRp
b25Gb3JTcGxpdChQb3NpdGlvbiYgcG9zaXRpbwogICAgIFBvc2l0aW9uIHByZXZpb3VzKHByZXZp
b3VzVmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpKTsKICAgICAKICAgICBpZiAoZGVwcmVjYXRl
ZElzQ29sbGFwc2libGVXaGl0ZXNwYWNlKHByZXZpb3VzVmlzaWJsZVBvcy5jaGFyYWN0ZXJBZnRl
cigpKSAmJiBpczxUZXh0PigqcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSkgJiYgIWlzPEhUTUxC
UkVsZW1lbnQ+KCpwcmV2aW91cy5kZXByZWNhdGVkTm9kZSgpKSkKLSAgICAgICAgcmVwbGFjZVRl
eHRJbk5vZGVQcmVzZXJ2aW5nTWFya2Vycyhkb3duY2FzdDxUZXh0PihwcmV2aW91cy5kZXByZWNh
dGVkTm9kZSgpKSwgcHJldmlvdXMuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJl
YWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5n
TWFya2Vycyhkb3duY2FzdDxUZXh0PigqcHJldmlvdXMuZGVwcmVjYXRlZE5vZGUoKSksIHByZXZp
b3VzLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmco
KSk7CiAgICAgaWYgKGRlcHJlY2F0ZWRJc0NvbGxhcHNpYmxlV2hpdGVzcGFjZSh2aXNpYmxlUG9z
LmNoYXJhY3RlckFmdGVyKCkpICYmIGlzPFRleHQ+KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgp
KSAmJiAhaXM8SFRNTEJSRWxlbWVudD4oKnBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpKQotICAg
ICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKGRvd25jYXN0PFRleHQ+KHBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCkpLCBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICByZXBsYWNlVGV4dElu
Tm9kZVByZXNlcnZpbmdNYXJrZXJzKGRvd25jYXN0PFRleHQ+KCpwb3NpdGlvbi5kZXByZWNhdGVk
Tm9kZSgpKSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtp
bmdTcGFjZVN0cmluZygpKTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxh
bmNlV2hpdGVzcGFjZSgpCkBAIC05ODIsMTQgKzk3MywxNCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjpyZWJhbGFuY2VXaGl0ZXNwYWNlKCkKICAgICAgICAgcmViYWxhbmNlV2hpdGVzcGFj
ZUF0KHNlbGVjdGlvbi5lbmQoKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRl
bGV0ZUluc2lnbmlmaWNhbnRUZXh0KFBhc3NSZWZQdHI8VGV4dD4gdGV4dE5vZGUsIHVuc2lnbmVk
IHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJ
bnNpZ25pZmljYW50VGV4dChUZXh0JiB0ZXh0Tm9kZSwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCkKIHsKLSAgICBpZiAoIXRleHROb2RlIHx8IHN0YXJ0ID49IGVuZCkKKyAgICBpZiAoc3Rh
cnQgPj0gZW5kKQogICAgICAgICByZXR1cm47CiAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91
dCgpOwogCi0gICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGV4dE5vZGUtPnJlbmRlcmVy
KCk7CisgICAgUmVuZGVyVGV4dCogdGV4dFJlbmRlcmVyID0gdGV4dE5vZGUucmVuZGVyZXIoKTsK
ICAgICBpZiAoIXRleHRSZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDA3LDExICs5
OTgsMTEgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2FudFRl
eHQoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0Tm9kZSwgdW4KIAogICAgIGlmICghYm94KSB7CiAgICAg
ICAgIC8vIHdob2xlIHRleHQgbm9kZSBpcyBlbXB0eQotICAgICAgICByZW1vdmVOb2RlKHRleHRO
b2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgmdGV4dE5vZGUpOwogICAgICAgICByZXR1cm47ICAg
IAogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7
CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dE5vZGUubGVuZ3RoKCk7CiAgICAgaWYgKHN0YXJ0
ID49IGxlbmd0aCB8fCBlbmQgPiBsZW5ndGgpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTAzNCw3
ICsxMDI1LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2Fu
dFRleHQoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0Tm9kZSwgdW4KICAgICAgICAgICAgIGdhcFN0YXJ0
ID0gc3RkOjptYXgoZ2FwU3RhcnQsIHN0YXJ0KTsKICAgICAgICAgICAgIGdhcEVuZCA9IHN0ZDo6
bWluKGdhcEVuZCwgZW5kKTsKICAgICAgICAgICAgIGlmIChzdHIuaXNOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgc3RyID0gdGV4dE5vZGUtPmRhdGEoKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0
YXJ0KTsKKyAgICAgICAgICAgICAgICBzdHIgPSB0ZXh0Tm9kZS5kYXRhKCkuc3Vic3RyaW5nKHN0
YXJ0LCBlbmQgLSBzdGFydCk7CiAgICAgICAgICAgICAvLyByZW1vdmUgdGV4dCBpbiB0aGUgZ2Fw
CiAgICAgICAgICAgICBzdHIucmVtb3ZlKGdhcFN0YXJ0IC0gc3RhcnQgLSByZW1vdmVkLCBnYXBM
ZW4pOwogICAgICAgICAgICAgcmVtb3ZlZCArPSBnYXBMZW47CkBAIC0xMDU3LDcgKzEwNDgsNyBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dChQYXNz
UmVmUHRyPFRleHQ+IHRleHROb2RlLCB1bgogICAgICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgd2Ug
YXJlIG5vdCBnb2luZyB0byBkZWxldGUgYWxsIG9mIHRoZSB0ZXh0IGluIHRoZSBub2RlLgogICAg
ICAgICAgICAgLy8gSWYgd2Ugd2VyZSwgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIGRvbmUgYWJvdmUg
d2l0aCB0aGUgY2FsbCB0byAKICAgICAgICAgICAgIC8vIHJlbW92ZU5vZGUgYW5kIHJldHVybi4K
LSAgICAgICAgICAgIEFTU0VSVChzdGFydCA+IDAgfHwgZW5kIC0gc3RhcnQgPCB0ZXh0Tm9kZS0+
bGVuZ3RoKCkpOworICAgICAgICAgICAgQVNTRVJUKHN0YXJ0ID4gMCB8fCBlbmQgLSBzdGFydCA8
IHRleHROb2RlLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0
Tm9kZSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNzEsMTcg
KzEwNjIsMTcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWduaWZpY2Fu
dFRleHQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdAogICAgIGlmIChjb21wYXJlUG9zaXRp
b25zKHN0YXJ0LCBlbmQpID49IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxSZWZQ
dHI8VGV4dD4+IG5vZGVzOworICAgIFZlY3RvcjxSZWY8VGV4dD4+IG5vZGVzOwogICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBpZiAoaXM8VGV4dD4oKm5vZGUpKQotICAg
ICAgICAgICAgbm9kZXMuYXBwZW5kKGRvd25jYXN0PFRleHQ+KG5vZGUpKTsKKyAgICAgICAgICAg
IG5vZGVzLmFwcGVuZChkb3duY2FzdDxUZXh0Pigqbm9kZSkpOwogICAgICAgICBpZiAobm9kZSA9
PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGZvciAoYXV0byYgdGV4dE5vZGUgOiBub2RlcykgewotICAgICAgICBpbnQgc3RhcnRPZmZzZXQg
PSB0ZXh0Tm9kZSA9PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKSA6IDA7Ci0gICAgICAgIGludCBlbmRPZmZzZXQgPSB0ZXh0Tm9kZSA9PSBl
bmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIDogc3Rh
dGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVuZ3RoKCkpOworICAgICAgICBpbnQgc3RhcnRPZmZz
ZXQgPSB0ZXh0Tm9kZS5wdHIoKSA9PSBzdGFydC5kZXByZWNhdGVkTm9kZSgpID8gc3RhcnQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA6IDA7CisgICAgICAgIGludCBlbmRPZmZzZXQgPSB0ZXh0
Tm9kZS5wdHIoKSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSA/IGVuZC5kZXByZWNhdGVkRWRpdGlu
Z09mZnNldCgpIDogc3RhdGljX2Nhc3Q8aW50Pih0ZXh0Tm9kZS0+bGVuZ3RoKCkpOwogICAgICAg
ICBkZWxldGVJbnNpZ25pZmljYW50VGV4dCh0ZXh0Tm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCk7CiAgICAgfQogfQpAQCAtMTE0Nyw3ICsxMTM4LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdChjb25zdCBQb3NpdGlvbiYgcCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBkZWxldGVUZXh0RnJvbU5vZGUoZG93bmNhc3Q8VGV4dD4o
cC5hbmNob3JOb2RlKCkpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCAxKTsKKyAgICBkZWxl
dGVUZXh0RnJvbU5vZGUoZG93bmNhc3Q8VGV4dD4oKnAuYW5jaG9yTm9kZSgpKSwgcC5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgMSk7CiB9CiAKIFJlZjxIVE1MRWxlbWVudD4gQ29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5ld0RlZmF1bHRQYXJhZ3JhcGhFbGVtZW50QXQoY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uKQpAQCAtMTMzOCw3ICsxMzI5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6Y2xlYW51cEFmdGVyRGVsZXRpb24oVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9uKQog
ICAgICAgICAgICAgaWYgKHRleHROb2RlLmxlbmd0aCgpID09IDEpCiAgICAgICAgICAgICAgICAg
cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG5vZGUpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dE5vZGUsIHBvc2l0aW9uLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEpOworICAgICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9t
Tm9kZSh0ZXh0Tm9kZSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xNjUyLDcgKzE2NDMsNyBAQCBib29sIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgoKQogICAg
ICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gdGV4dE5vZGUucGFyZW50Tm9kZSgpOwog
ICAgICAgICAvLyBUaGUgcHJlc2VydmVkIG5ld2xpbmUgbXVzdCBiZSB0aGUgZmlyc3QgdGhpbmcg
aW4gdGhlIG5vZGUsIHNpbmNlIG90aGVyd2lzZSB0aGUgcHJldmlvdXMKICAgICAgICAgLy8gcGFy
YWdyYXBoIHdvdWxkIGJlIHF1b3RlZCwgYW5kIHdlIHZlcmlmaWVkIHRoYXQgaXQgd2Fzbid0IGFi
b3ZlLgotICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUoJnRleHROb2RlLCAwLCAxKTsKKyAgICAg
ICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHROb2RlLCAwLCAxKTsKICAgICAgICAgcHJ1bmUocGFy
ZW50Tm9kZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmgKaW5kZXggY2E0OTc0NGFlZThiZWI4MTQyZjFjNzM5NjFiZjQ2ZThmOWNhMjc0
Ny4uYWJlMWM4YjlkY2U0NDhmODQ1ZDc4MTQ4YmVmMWIyMDdlMjhmN2VlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaApAQCAtMTQyLDcgKzE0Miw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHJlbW92ZVN0eWxlZEVsZW1lbnQoUmVmPEVsZW1lbnQ+
JiYpOwogICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwg
Ym9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2Us
IGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gdHJ1ZSwgYm9vbCBzYW5pdGl6ZU1hcmt1
cCA9IHRydWUpOwogICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIGJvb2wgbWVyZ2VCbG9ja3NBZnRlckRlbGV0
ZSA9IHRydWUsIGJvb2wgcmVwbGFjZSA9IGZhbHNlLCBib29sIGV4cGFuZEZvclNwZWNpYWxFbGVt
ZW50cyA9IHRydWUsIGJvb2wgc2FuaXRpemVNYXJrdXAgPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlVGV4dEZyb21Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgY291bnQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0RnJvbU5vZGUoVGV4
dCYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQpOwogICAgIHZvaWQgaW5wdXRUZXh0
KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0SW5zZXJ0ZWRUZXh0ID0gZmFsc2UpOwogICAgIGJv
b2wgaXNSZW1vdmFibGVCbG9jayhjb25zdCBOb2RlKik7CiAgICAgdm9pZCBpbnNlcnROb2RlQWZ0
ZXIoUmVmPE5vZGU+JiYsIE5vZGUmIHJlZkNoaWxkKTsKQEAgLTE1MSwxNyArMTUxLDE2IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGluc2VydE5vZGVCZWZvcmUoUmVmPE5vZGU+JiYsIE5vZGUmIHJl
ZkNoaWxkLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yKGJvb2wgdXNlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQgPSBmYWxzZSwgYm9vbCBwYXN0ZUJs
b2NrcXV0b2VJbnRvVW5xdW90ZWRBcmVhID0gZmFsc2UpOwogICAgIHZvaWQgaW5zZXJ0TGluZUJy
ZWFrKCk7Ci0gICAgdm9pZCBpbnNlcnRUZXh0SW50b05vZGUoUGFzc1JlZlB0cjxUZXh0PiwgdW5z
aWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQpOwotICAgIHZvaWQgbWVyZ2VJZGVudGlj
YWxFbGVtZW50cyhQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+KTsKKyAg
ICB2b2lkIGluc2VydFRleHRJbnRvTm9kZShUZXh0JiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBT
dHJpbmcmIHRleHQpOworICAgIHZvaWQgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhFbGVtZW50Jiwg
RWxlbWVudCYpOwogICAgIHZvaWQgcmViYWxhbmNlV2hpdGVzcGFjZSgpOwogICAgIHZvaWQgcmVi
YWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCByZWJhbGFuY2VX
aGl0ZXNwYWNlT25UZXh0U3Vic3RyaW5nKFBhc3NSZWZQdHI8VGV4dD4sIGludCBzdGFydE9mZnNl
dCwgaW50IGVuZE9mZnNldCk7CisgICAgdm9pZCByZWJhbGFuY2VXaGl0ZXNwYWNlT25UZXh0U3Vi
c3RyaW5nKFRleHQmLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQpOwogICAgIHZvaWQg
cHJlcGFyZVdoaXRlc3BhY2VBdFBvc2l0aW9uRm9yU3BsaXQoUG9zaXRpb24mKTsKICAgICBib29s
IGNhblJlYmFsYW5jZShjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogICAgIGJvb2wgc2hvdWxkUmVi
YWxhbmNlTGVhZGluZ1doaXRlc3BhY2VGb3IoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdm9p
ZCByZW1vdmVDU1NQcm9wZXJ0eShQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+LCBDU1NQcm9wZXJ0
eUlEKTsKLSAgICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50Piwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkcmVu
SW5SYW5nZShQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7Cisg
ICAgdm9pZCByZW1vdmVOb2RlQXR0cmlidXRlKEVsZW1lbnQmLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpOworICAgIHZvaWQgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKE5vZGUmLCB1bnNp
Z25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZU5vZGUoUGFz
c1JlZlB0cjxOb2RlPiwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05v
dEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAgICBIVE1MRWxlbWVudCogcmVwbGFj
ZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4pOwogICAgIHZvaWQgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihQ
YXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERv
Tm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwpAQCAtMTY5LDkgKzE2OCw5IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KE5vZGUq
LCBOb2RlKiBwYXN0TGFzdE5vZGVUb01vdmUsIFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwTmV3UGFy
ZW50KTsKICAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWxQcmVzZXJ2aW5nQ2hp
bGRyZW4oUG9zaXRpb24mLCBOb2RlJik7CiAgICAgdm9pZCBwcnVuZShQYXNzUmVmUHRyPE5vZGU+
KTsKLSAgICB2b2lkIHJlcGxhY2VUZXh0SW5Ob2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVk
IG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsK
KyAgICB2b2lkIHJlcGxhY2VUZXh0SW5Ob2RlKFRleHQmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2ln
bmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUG9zaXRpb24g
cmVwbGFjZVNlbGVjdGVkVGV4dEluTm9kZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHJlcGxh
Y2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoUGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOwor
ICAgIHZvaWQgcmVwbGFjZVRleHRJbk5vZGVQcmVzZXJ2aW5nTWFya2VycyhUZXh0JiwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQp
OwogICAgIFBvc2l0aW9uIHBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mKTsK
ICAgICB2b2lkIHNldE5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKICAgICB2
b2lkIHNwbGl0RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPE5vZGU+IGF0
Q2hpbGQpOwpAQCAtMTc5LDcgKzE3OCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudChQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZzZXQp
OwogICAgIHZvaWQgd3JhcENvbnRlbnRzSW5EdW1teVNwYW4oRWxlbWVudCYpOwogCi0gICAgdm9p
ZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dChQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKTsKKyAgICB2b2lkIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQm
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKICAgICB2b2lkIGRlbGV0ZUluc2lnbmlm
aWNhbnRUZXh0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCk7CiAg
ICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dERvd25zdHJlYW0oY29uc3QgUG9zaXRpb24m
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5v
ZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHROb2Rl
Q29tbWFuZC5jcHAKaW5kZXggMzllMDQ3MDhkMWI2YmM5NWY1NzRmYzc5YTFiYzJmZTIxZDA5OTM2
MS4uZGVmOGFmZDk4ODE4Y2MzZmI3N2Y2ZTUyZmQ3ZjhiNDJkOWU4M2M3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwCkBA
IC0zMiwyMiArMzIsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1EZWxldGVGcm9tVGV4
dE5vZGVDb21tYW5kOjpEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmIG5v
ZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbikKK0RlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1h
bmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgRWRp
dEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDogU2ltcGxlRWRpdENvbW1hbmQobm9kZS0+ZG9j
dW1lbnQoKSwgZWRpdGluZ0FjdGlvbikKLSAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9ub2Rl
KFdURk1vdmUobm9kZSkpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgLCBtX2NvdW50KGNv
dW50KQogewotICAgIEFTU0VSVChtX25vZGUpOwogICAgIEFTU0VSVChtX29mZnNldCA8PSBtX25v
ZGUtPmxlbmd0aCgpKTsKICAgICBBU1NFUlQobV9vZmZzZXQgKyBtX2NvdW50IDw9IG1fbm9kZS0+
bGVuZ3RoKCkpOwogfQogCiB2b2lkIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHko
KQogewotICAgIEFTU0VSVChtX25vZGUpOwotCi0gICAgaWYgKCFpc0VkaXRhYmxlTm9kZSgqbV9u
b2RlKSkKKyAgICBpZiAoIWlzRWRpdGFibGVOb2RlKG1fbm9kZSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGF1dG8gcmVzdWx0ID0gbV9ub2RlLT5zdWJzdHJpbmdEYXRhKG1fb2Zmc2V0LCBtX2Nv
dW50KTsKQEAgLTU5LDggKzU2LDYgQEAgdm9pZCBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpk
b0FwcGx5KCkKIAogdm9pZCBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQog
ewotICAgIEFTU0VSVChtX25vZGUpOwotCiAgICAgaWYgKCFtX25vZGUtPmhhc0VkaXRhYmxlU3R5
bGUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC03MCw3ICs2NSw3IEBAIHZvaWQgRGVsZXRlRnJv
bVRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIERlbGV0
ZUZyb21UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBu
b2RlcykKIHsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9ub2RlLmdldCgpLCBub2Rlcyk7
CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fbm9kZS5wdHIoKSwgbm9kZXMpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlRnJvbVRleHRO
b2RlQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVD
b21tYW5kLmgKaW5kZXggOTBjNTE0NWQzN2Y3ODQ0MTE0YjgxZDkzNGFhM2U3YTkzYzk4YTU3Mi4u
YjgxYzYyZDM3ZWU1YjhlZTFkMWU5OTUzMGM0MTExYzFmN2VlOWZhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmgKQEAgLTMzLDEz
ICszMywxMyBAQCBjbGFzcyBUZXh0OwogCiBjbGFzcyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5k
IDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPERl
bGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShSZWZQdHI8VGV4dD4mJiBub2RlLCB1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24gPSBF
ZGl0QWN0aW9uRGVsZXRlKQorICAgIHN0YXRpYyBSZWY8RGVsZXRlRnJvbVRleHROb2RlQ29tbWFu
ZD4gY3JlYXRlKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291
bnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiA9IEVkaXRBY3Rpb25EZWxldGUpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKFdU
Rk1vdmUobm9kZSksIG9mZnNldCwgY291bnQsIGVkaXRpbmdBY3Rpb24pKTsKICAgICB9CiAKIHBy
b3RlY3RlZDoKLSAgICBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmLCB1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBFZGl0QWN0aW9uKTsKKyAgICBEZWxldGVG
cm9tVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVk
IGNvdW50LCBFZGl0QWN0aW9uKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVy
cmlkZTsKQEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldE5vZGVzSW5Db21t
YW5kKEhhc2hTZXQ8Tm9kZSo+Jikgb3ZlcnJpZGU7CiAjZW5kaWYKICAgICAKLSAgICBSZWZQdHI8
VGV4dD4gbV9ub2RlOworICAgIFJlZjxUZXh0PiBtX25vZGU7CiAgICAgdW5zaWduZWQgbV9vZmZz
ZXQ7CiAgICAgdW5zaWduZWQgbV9jb3VudDsKICAgICBTdHJpbmcgbV90ZXh0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggN2E3
NWU2OThmZTkzYWQyYzU1OTliODAwMjk4OGU5ZDRjMjFkMWM4Yy4uYzVjZWU3MTQyYWVjNDQzY2Mw
YjdmYWI4ZDM0MDY2N2M0OTVjZmVkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC00NDQsMTMgKzQ0NCwxMyBAQCBzdGF0aWMg
dm9pZCB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKE5vZGUqIG5vZGUsIGludCBvZmZzZXQs
IGludCBjb3VudCwgUG9zaQogICAgICAgICBwb3NpdGlvbi5tb3ZlVG9PZmZzZXQob2Zmc2V0KTsK
IH0KIAotdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoUGFz
c1JlZlB0cjxUZXh0PiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50KQordm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCYgbm9kZSwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCkKIHsKICAgICAvLyBGSVhNRTogVXBkYXRl
IHRoZSBlbmRwb2ludHMgb2YgdGhlIHJhbmdlIGJlaW5nIGRlbGV0ZWQuCi0gICAgdXBkYXRlUG9z
aXRpb25Gb3JUZXh0UmVtb3ZhbChub2RlLmdldCgpLCBvZmZzZXQsIGNvdW50LCBtX2VuZGluZ1Bv
c2l0aW9uKTsKLSAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKG5vZGUuZ2V0KCksIG9m
ZnNldCwgY291bnQsIG1fbGVhZGluZ1doaXRlc3BhY2UpOwotICAgIHVwZGF0ZVBvc2l0aW9uRm9y
VGV4dFJlbW92YWwobm9kZS5nZXQoKSwgb2Zmc2V0LCBjb3VudCwgbV90cmFpbGluZ1doaXRlc3Bh
Y2UpOwotICAgIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwobm9kZS5nZXQoKSwgb2Zmc2V0
LCBjb3VudCwgbV9kb3duc3RyZWFtRW5kKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1v
dmFsKCZub2RlLCBvZmZzZXQsIGNvdW50LCBtX2VuZGluZ1Bvc2l0aW9uKTsKKyAgICB1cGRhdGVQ
b3NpdGlvbkZvclRleHRSZW1vdmFsKCZub2RlLCBvZmZzZXQsIGNvdW50LCBtX2xlYWRpbmdXaGl0
ZXNwYWNlKTsKKyAgICB1cGRhdGVQb3NpdGlvbkZvclRleHRSZW1vdmFsKCZub2RlLCBvZmZzZXQs
IGNvdW50LCBtX3RyYWlsaW5nV2hpdGVzcGFjZSk7CisgICAgdXBkYXRlUG9zaXRpb25Gb3JUZXh0
UmVtb3ZhbCgmbm9kZSwgb2Zmc2V0LCBjb3VudCwgbV9kb3duc3RyZWFtRW5kKTsKICAgICAKICAg
ICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKG5vZGUsIG9mZnNldCwg
Y291bnQpOwogfQpAQCAtNDk1LDcgKzQ5NSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IHN0YXJ0Tm9k
ZUNhcmV0TWF4T2Zmc2V0ICYmIGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAgIFRleHQm
IHRleHQgPSBkb3duY2FzdDxUZXh0Pigqc3RhcnROb2RlKTsKICAgICAgICAgaWYgKHRleHQubGVu
Z3RoKCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnROb2RlQ2FyZXRNYXhPZmZzZXQpKQot
ICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCBzdGFydE5vZGVDYXJldE1heE9m
ZnNldCwgdGV4dC5sZW5ndGgoKSAtIHN0YXJ0Tm9kZUNhcmV0TWF4T2Zmc2V0KTsKKyAgICAgICAg
ICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE5vZGVDYXJldE1heE9mZnNldCwgdGV4
dC5sZW5ndGgoKSAtIHN0YXJ0Tm9kZUNhcmV0TWF4T2Zmc2V0KTsKICAgICB9CiAKICAgICBpZiAo
c3RhcnRPZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcoKnN0YXJ0Tm9kZSkpIHsKQEAgLTUx
Miw5ICs1MTIsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxE
ZWxldGUoKQogICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpzdGFydE5vZGUpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAg
ICAgICAgICAgICAgVGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpOwotICAg
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSgmdGV4dCwgc3RhcnRPZmZzZXQsIG1fZG93
bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpIC0gc3RhcnRPZmZzZXQpOworICAg
ICAgICAgICAgICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwgbV9kb3du
c3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgLSBzdGFydE9mZnNldCk7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShz
dGFydE5vZGUsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRyZW5JblJhbmdlKCpzdGFydE5v
ZGUsIHN0YXJ0T2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSk7CiAgICAgICAgICAgICAgICAgbV9lbmRpbmdQb3NpdGlvbiA9IG1fdXBzdHJlYW1TdGFydDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTMyLDE0ICs1MzIsMTQgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKICAgICAgICAgICAgIGlm
IChpczxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBu
b2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAogICAgICAgICAgICAgICAgIFRleHQmIHRleHQg
PSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7Ci0gICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21O
b2RlKCZ0ZXh0LCBzdGFydE9mZnNldCwgdGV4dC5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0KTsKKyAg
ICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgc3RhcnRPZmZzZXQsIHRleHQu
bGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKm5vZGUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBub2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChzdGFydE9mZnNldCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnROb2RlID09IG1fdXBzdHJlYW1FbmQu
ZGVwcmVjYXRlZE5vZGUoKSAmJiBpczxUZXh0Pigqc3RhcnROb2RlKSkgewogICAgICAgICAgICAg
VGV4dCYgdGV4dCA9IGRvd25jYXN0PFRleHQ+KCptX3Vwc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2Rl
KCkpOwotICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCAwLCBtX3Vwc3RyZWFt
RW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICAgICAgZGVsZXRlVGV4dEZy
b21Ob2RlKHRleHQsIDAsIG1fdXBzdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGhhbmRsZSBkZWxldGluZyBhbGwgbm9k
ZXMgdGhhdCBhcmUgY29tcGxldGVseSBzZWxlY3RlZApAQCAtNTczLDcgKzU3Myw3IEBAIHZvaWQg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAogICAg
ICAgICAgICAgICAgICAgICBUZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKm1fZG93bnN0cmVh
bUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZG93bnN0
cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKCZ0ZXh0LCAwLCBtX2Rvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVU
ZXh0RnJvbU5vZGUodGV4dCwgMCwgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gUmVtb3Zl
IGNoaWxkcmVuIG9mIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpIHRoYXQgY29tZSBh
ZnRlciBtX3Vwc3RyZWFtU3RhcnQuCiAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgdHJ5IHRvIHJl
bW92ZSBjaGlsZHJlbiBpZiBtX3Vwc3RyZWFtU3RhcnQgd2FzIGluc2lkZSBtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZE5vZGUoKQpAQCAtNTkwLDcgKzU5MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBuLT5jb21wdXRl
Tm9kZUluZGV4KCkgKyAxOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUo
KSwgb2Zmc2V0LCBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkcmVuSW5SYW5nZSgqbV9kb3duc3RyZWFtRW5k
LmRlcHJlY2F0ZWROb2RlKCksIG9mZnNldCwgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBtX2Rvd25zdHJlYW1FbmQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCks
IG9mZnNldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNjA1LDEyICs2
MDUsMTIgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpmaXh1cFdoaXRlc3BhY2UoKQog
ICAgIGlmIChtX2xlYWRpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYmICFtX2xlYWRpbmdXaGl0
ZXNwYWNlLmlzUmVuZGVyZWRDaGFyYWN0ZXIoKSAmJiBpczxUZXh0PigqbV9sZWFkaW5nV2hpdGVz
cGFjZS5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25j
YXN0PFRleHQ+KCptX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgICAg
ICBBU1NFUlQoIXRleHROb2RlLnJlbmRlcmVyKCkgfHwgdGV4dE5vZGUucmVuZGVyZXIoKS0+c3R5
bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7Ci0gICAgICAgIHJlcGxhY2VUZXh0SW5Ob2RlUHJl
c2VydmluZ01hcmtlcnMoJnRleHROb2RlLCBtX2xlYWRpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCksIDEsIG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CisgICAgICAgIHJl
cGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnModGV4dE5vZGUsIG1fbGVhZGluZ1doaXRl
c3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmlu
ZygpKTsKICAgICB9CiAgICAgaWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNlLmlzTm90TnVsbCgpICYm
ICFtX3RyYWlsaW5nV2hpdGVzcGFjZS5pc1JlbmRlcmVkQ2hhcmFjdGVyKCkgJiYgaXM8VGV4dD4o
Km1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0ZWROb2RlKCkpKSB7CiAgICAgICAgIFRleHQm
IHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKm1fdHJhaWxpbmdXaGl0ZXNwYWNlLmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgICAgICBBU1NFUlQoIXRleHROb2RlLnJlbmRlcmVyKCkgfHwgdGV4dE5v
ZGUucmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSk7Ci0gICAgICAgIHJl
cGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoJnRleHROb2RlLCBtX3RyYWlsaW5nV2hp
dGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBub25CcmVha2luZ1NwYWNlU3Ry
aW5nKCkpOworICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKHRleHRO
b2RlLCBtX3RyYWlsaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCAxLCBu
b25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCBjMTdmNmRlZWE4ZmViMzcw
YzY5YzZlMzhiYjVkYjJiYjVhNmVkNDE4Li42ZDhhN2MyMjYzNmM0ZmRhMTYzNzIwMDVjZjI5YWE1
YTg2YzY1NjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQuaApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUcmFu
c2llbnRTdGF0ZSgpOwogICAgIHZvaWQgbWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVu
T2ZFZGl0YWJsZVJvb3RUb1ByZXZlbnRTdHlsZUxvc3MoKTsKICAgICB2b2lkIHJlbW92ZU5vZGUo
UGFzc1JlZlB0cjxOb2RlPiwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBE
b05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
bGV0ZVRleHRGcm9tTm9kZShQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCwgdW5zaWduZWQpIG92
ZXJyaWRlOworICAgIHZvaWQgZGVsZXRlVGV4dEZyb21Ob2RlKFRleHQmLCB1bnNpZ25lZCwgdW5z
aWduZWQpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlUmVkdW5kYW50QmxvY2tzKCk7CiAKICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGFjY2VzcyB0byBvcmlnaW5hbCBzdHJpbmcgYWZ0
ZXIgdGhlIGNvcnJlY3Rpb24gaGFzIGJlZW4gZGVsZXRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ0FsbEluT25lLmNwcAppbmRleCA2NTMyZTE0NzkxZjgyMmEyMGEwOGJmYmMyNTQ5
ZGNjMjIzZTgyNDMxLi40MjgzOWUzMWM1MGUzOTNlNjEyNGIyOTY2ODI3NjkyNDBjZGIwOGUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCkBAIC01NSw3ICs1
NSw2IEBACiAjaW5jbHVkZSA8TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuY3BwPgogI2lu
Y2x1ZGUgPE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHA+CiAjaW5jbHVkZSA8TW92ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwPgotI2luY2x1ZGUgPFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHA+
CiAjaW5jbHVkZSA8UmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8UmVtb3ZlTm9k
ZUNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21t
YW5kLmNwcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBiZTE5
ZjljNGQ5MjIxNTMwYTIyZDM0N2ZiMGM0M2QxYjk0MWY0MjQ3Li5kYjdlNjZkODhkOTIyNTZkYWU2
MDJjY2I4MjI1ODMzMzQ4ZTZmMTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwCkBAIC03MDEsMTMgKzcwMSwxMyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5
bGVBZGRlZEJ5Tm9kZShOb2RlKiBub2RlKQogICAgIHJlbW92ZUVxdWl2YWxlbnRQcm9wZXJ0aWVz
KCpub2RlU3R5bGUpOwogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlU3R5bGVDb25mbGlj
dGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKQordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92
ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAo
IW5vZGUgfHwgIW5vZGUtPnBhcmVudE5vZGUoKSB8fCAhbV9tdXRhYmxlU3R5bGUpCisgICAgaWYg
KCFub2RlLnBhcmVudE5vZGUoKSB8fCAhbV9tdXRhYmxlU3R5bGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJlbnRTdHlsZSA9IGNvcHlQ
cm9wZXJ0aWVzRnJvbUNvbXB1dGVkU3R5bGUobm9kZS0+cGFyZW50Tm9kZSgpLCBFZGl0aW5nUHJv
cGVydGllc0luRWZmZWN0KTsKLSAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBub2RlU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShub2RlLCBFZGl0aW5nUHJvcGVydGllc0luRWZmZWN0KTsKKyAg
ICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gcGFyZW50U3R5bGUgPSBjb3B5UHJvcGVy
dGllc0Zyb21Db21wdXRlZFN0eWxlKG5vZGUucGFyZW50Tm9kZSgpLCBFZGl0aW5nUHJvcGVydGll
c0luRWZmZWN0KTsKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBub2RlU3R5bGUgPSBFZGl0aW5n
U3R5bGU6OmNyZWF0ZSgmbm9kZSwgRWRpdGluZ1Byb3BlcnRpZXNJbkVmZmVjdCk7CiAgICAgbm9k
ZVN0eWxlLT5yZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcygqcGFyZW50U3R5bGUpOwogCiAgICAg
TXV0YWJsZVN0eWxlUHJvcGVydGllcyogc3R5bGUgPSBub2RlU3R5bGUtPnN0eWxlKCk7CkBAIC0x
MTMzLDE1ICsxMTMzLDE1IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUlubGluZVN0eWxlT2ZF
bGVtZW50KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIENTU1Byb3BlcnR5CiAgICAgfQogfQogCi1z
dGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudE1hdGNoZXNBbmRQcm9wZXJ0eUlzTm90SW5JbmxpbmVT
dHlsZURlY2woY29uc3QgSFRNTEVsZW1lbnRFcXVpdmFsZW50KiBlcXVpdmFsZW50LCBjb25zdCBT
dHlsZWRFbGVtZW50KiBlbGVtZW50LAorc3RhdGljIGlubGluZSBib29sIGVsZW1lbnRNYXRjaGVz
QW5kUHJvcGVydHlJc05vdEluSW5saW5lU3R5bGVEZWNsKGNvbnN0IEhUTUxFbGVtZW50RXF1aXZh
bGVudCogZXF1aXZhbGVudCwgY29uc3QgU3R5bGVkRWxlbWVudCYgZWxlbWVudCwKICAgICBFZGl0
aW5nU3R5bGU6OkNTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlIG1vZGUsIEVkaXRpbmdTdHlsZSYgc3R5
bGUpCiB7Ci0gICAgaWYgKCFlcXVpdmFsZW50LT5tYXRjaGVzKCplbGVtZW50KSkKKyAgICBpZiAo
IWVxdWl2YWxlbnQtPm1hdGNoZXMoZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpZiAobW9kZSAhPSBFZGl0aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzICYmIGVxdWl2YWxlbnQt
PnByb3BlcnR5RXhpc3RzSW5TdHlsZShzdHlsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiAhZWxlbWVudC0+aW5saW5lU3R5bGUoKSB8fCAhZXF1aXZhbGVudC0+cHJvcGVy
dHlFeGlzdHNJblN0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQtPmlubGluZVN0eWxl
KCkpLmdldCgpKTsKKyAgICByZXR1cm4gIWVsZW1lbnQuaW5saW5lU3R5bGUoKSB8fCAhZXF1aXZh
bGVudC0+cHJvcGVydHlFeGlzdHNJblN0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVsZW1lbnQu
aW5saW5lU3R5bGUoKSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgUmVmUHRyPE11dGFibGVTdHlsZVBy
b3BlcnRpZXM+IGV4dHJhY3RFZGl0aW5nUHJvcGVydGllcyhjb25zdCBTdHlsZVByb3BlcnRpZXMq
IHN0eWxlLCBFZGl0aW5nU3R5bGU6OlByb3BlcnRpZXNUb0luY2x1ZGUgcHJvcGVydGllc1RvSW5j
bHVkZSkKQEAgLTExNTksMjcgKzExNTksMjcgQEAgc3RhdGljIFJlZlB0cjxNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBleHRyYWN0RWRpdGluZ1Byb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXIKICAg
ICByZXR1cm4gY29weUVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlLCBBbGxFZGl0aW5nUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVP
ZkVsZW1lbnQoU3R5bGVkRWxlbWVudCogZWxlbWVudCwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUg
bW9kZSwgUHJvcGVydGllc1RvSW5jbHVkZSBwcm9wZXJ0aWVzVG9JbmNsdWRlKQordm9pZCBFZGl0
aW5nU3R5bGU6Om1lcmdlSW5saW5lQW5kSW1wbGljaXRTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVt
ZW50JiBlbGVtZW50LCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSBtb2RlLCBQcm9wZXJ0aWVzVG9J
bmNsdWRlIHByb3BlcnRpZXNUb0luY2x1ZGUpCiB7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
c3R5bGVGcm9tUnVsZXMgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogICAgIHN0eWxlRnJvbVJ1
bGVzLT5tZXJnZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbihlbGVtZW50KTsKIAotICAg
IGlmIChlbGVtZW50LT5pbmxpbmVTdHlsZSgpKQotICAgICAgICBzdHlsZUZyb21SdWxlcy0+bV9t
dXRhYmxlU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCplbGVtZW50LT5pbmxpbmVT
dHlsZSgpKTsKKyAgICBpZiAoZWxlbWVudC5pbmxpbmVTdHlsZSgpKQorICAgICAgICBzdHlsZUZy
b21SdWxlcy0+bV9tdXRhYmxlU3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KCplbGVt
ZW50LmlubGluZVN0eWxlKCkpOwogCiAgICAgc3R5bGVGcm9tUnVsZXMtPm1fbXV0YWJsZVN0eWxl
ID0gZXh0cmFjdEVkaXRpbmdQcm9wZXJ0aWVzKHN0eWxlRnJvbVJ1bGVzLT5tX211dGFibGVTdHls
ZS5nZXQoKSwgcHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAgbWVyZ2VTdHlsZShzdHlsZUZyb21S
dWxlcy0+bV9tdXRhYmxlU3R5bGUuZ2V0KCksIG1vZGUpOwogCiAgICAgZm9yIChhdXRvJiBlcXVp
dmFsZW50IDogaHRtbEVsZW1lbnRFcXVpdmFsZW50cygpKSB7CiAgICAgICAgIGlmIChlbGVtZW50
TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChlcXVpdmFsZW50LmdldCgp
LCBlbGVtZW50LCBtb2RlLCAqdGhpcykpCi0gICAgICAgICAgICBlcXVpdmFsZW50LT5hZGRUb1N0
eWxlKGVsZW1lbnQsIHRoaXMpOworICAgICAgICAgICAgZXF1aXZhbGVudC0+YWRkVG9TdHlsZSgm
ZWxlbWVudCwgdGhpcyk7CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBlcXVpdmFsZW50IDogaHRt
bEF0dHJpYnV0ZUVxdWl2YWxlbnRzKCkpIHsKICAgICAgICAgaWYgKGVxdWl2YWxlbnQtPmF0dHJp
YnV0ZU5hbWUoKSA9PSBIVE1MTmFtZXM6OmRpckF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsg
Ly8gV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGRpcmVjdGlvbmFsaXR5CiAgICAgICAgIGlmIChl
bGVtZW50TWF0Y2hlc0FuZFByb3BlcnR5SXNOb3RJbklubGluZVN0eWxlRGVjbChlcXVpdmFsZW50
LmdldCgpLCBlbGVtZW50LCBtb2RlLCAqdGhpcykpCi0gICAgICAgICAgICBlcXVpdmFsZW50LT5h
ZGRUb1N0eWxlKGVsZW1lbnQsIHRoaXMpOworICAgICAgICAgICAgZXF1aXZhbGVudC0+YWRkVG9T
dHlsZSgmZWxlbWVudCwgdGhpcyk7CiAgICAgfQogfQogCkBAIC0xMjA0LDcgKzEyMDQsNyBAQCBS
ZWY8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OndyYXBwaW5nU3R5bGVGb3JTZXJpYWxpemF0
aW9uKE5vZGUqIGNvbnRleHQsIGJvbwogICAgIC8vIFdoZW4gbm90IGFubm90YXRpbmcgZm9yIGlu
dGVyY2hhbmdlLCB3ZSBvbmx5IHByZXNlcnZlIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMuCiAg
ICAgZm9yIChOb2RlKiBub2RlID0gY29udGV4dDsgbm9kZSAmJiAhbm9kZS0+aXNEb2N1bWVudE5v
ZGUoKTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAgICBpZiAoaXM8U3R5bGVk
RWxlbWVudD4oKm5vZGUpICYmICFpc01haWxCbG9ja3F1b3RlKG5vZGUpKSB7Ci0gICAgICAgICAg
ICB3cmFwcGluZ1N0eWxlLT5tZXJnZUlubGluZUFuZEltcGxpY2l0U3R5bGVPZkVsZW1lbnQoZG93
bmNhc3Q8U3R5bGVkRWxlbWVudD4obm9kZSksIEVkaXRpbmdTdHlsZTo6RG9Ob3RPdmVycmlkZVZh
bHVlcywKKyAgICAgICAgICAgIHdyYXBwaW5nU3R5bGUtPm1lcmdlSW5saW5lQW5kSW1wbGljaXRT
dHlsZU9mRWxlbWVudChkb3duY2FzdDxTdHlsZWRFbGVtZW50Pigqbm9kZSksIEVkaXRpbmdTdHls
ZTo6RG9Ob3RPdmVycmlkZVZhbHVlcywKICAgICAgICAgICAgICAgICBFZGl0aW5nU3R5bGU6OkVk
aXRpbmdQcm9wZXJ0aWVzSW5FZmZlY3QpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI2MiwxMCAr
MTI2MiwxMCBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZShjb25zdCBTdHlsZVByb3Bl
cnRpZXMqIHN0eWxlLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTQogICAgIG1fZm9udFNpemVEZWx0YSAr
PSBvbGRGb250U2l6ZURlbHRhOwogfQogCi1zdGF0aWMgUmVmPE11dGFibGVTdHlsZVByb3BlcnRp
ZXM+IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgdW5z
aWduZWQgcnVsZXNUb0luY2x1ZGUpCitzdGF0aWMgUmVmPE11dGFibGVTdHlsZVByb3BlcnRpZXM+
IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgdW5zaWdu
ZWQgcnVsZXNUb0luY2x1ZGUpCiB7CiAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3Bl
cnRpZXM6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBlbGVtZW50LT5z
dHlsZVJlc29sdmVyKCkuc3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcnVsZXNUb0luY2x1
ZGUpKSB7CisgICAgZm9yIChhdXRvJiBtYXRjaGVkUnVsZSA6IGVsZW1lbnQuc3R5bGVSZXNvbHZl
cigpLnN0eWxlUnVsZXNGb3JFbGVtZW50KCZlbGVtZW50LCBydWxlc1RvSW5jbHVkZSkpIHsKICAg
ICAgICAgaWYgKG1hdGNoZWRSdWxlLT5pc1N0eWxlUnVsZSgpKQogICAgICAgICAgICAgc3R5bGUt
Pm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KHN0YXRpY19wb2ludGVyX2Nhc3Q8U3R5bGVSdWxl
PihtYXRjaGVkUnVsZSktPnByb3BlcnRpZXMoKSk7CiAgICAgfQpAQCAtMTI3Myw3ICsxMjczLDcg
QEAgc3RhdGljIFJlZjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21NYXRjaGVkUnVs
ZXNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW0KICAgICByZXR1cm4gc3R5bGU7CiB9CiAKLXZvaWQg
RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQp
Cit2b2lkIEVkaXRpbmdTdHlsZTo6bWVyZ2VTdHlsZUZyb21SdWxlcyhTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBzdHlsZUZyb21N
YXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsCiAg
ICAgICAgIFN0eWxlUmVzb2x2ZXI6OkF1dGhvckNTU1J1bGVzIHwgU3R5bGVSZXNvbHZlcjo6Q3Jv
c3NPcmlnaW5DU1NSdWxlcyk7CkBAIC0xMjg2LDcgKzEyODYsNyBAQCB2b2lkIEVkaXRpbmdTdHls
ZTo6bWVyZ2VTdHlsZUZyb21SdWxlcyhTdHlsZWRFbGVtZW50KiBlbGVtZW50KQogICAgIG1fbXV0
YWJsZVN0eWxlID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzOwogfQogCi12b2lkIEVkaXRpbmdTdHls
ZTo6bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24oU3R5bGVkRWxlbWVudCogZWxl
bWVudCkKK3ZvaWQgRWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXph
dGlvbihTdHlsZWRFbGVtZW50JiBlbGVtZW50KQogewogICAgIG1lcmdlU3R5bGVGcm9tUnVsZXMo
ZWxlbWVudCk7CiAKQEAgLTEyOTQsNyArMTI5NCw3IEBAIHZvaWQgRWRpdGluZ1N0eWxlOjptZXJn
ZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbihTdHlsZWRFbGVtZW50KiBlbGVtZW50KQog
ICAgIC8vIEZvciBleGFtcGxlOiBzdHlsZT0iaGVpZ2h0OiAxJTsgb3ZlcmZsb3c6IHZpc2libGU7
IiBpbiBxdWlya3Ntb2RlCiAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlcnMgbGlrZSB0aGlz
LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTUxMjM+IFNsYXNoZG90IGNvcHkvcGFzdGUgZmlkZWxp
dHkgcHJvYmxlbQogICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBmcm9tQ29tcHV0
ZWRTdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwotICAgIENvbXB1dGVk
U3R5bGVFeHRyYWN0b3IgY29tcHV0ZWRTdHlsZShlbGVtZW50KTsKKyAgICBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yIGNvbXB1dGVkU3R5bGUoJmVsZW1lbnQpOwogCiAgICAgewogICAgICAgICB1bnNp
Z25lZCBwcm9wZXJ0eUNvdW50ID0gbV9tdXRhYmxlU3R5bGUtPnByb3BlcnR5Q291bnQoKTsKQEAg
LTEzMjIsOSArMTMyMiw4IEBAIHN0YXRpYyB2b2lkIHJlbW92ZVByb3BlcnRpZXNJblN0eWxlKE11
dGFibGVTdHlsZVByb3BlcnRpZXMqIHN0eWxlVG9SZW1vdmVQcm9wZXJ0CiAgICAgc3R5bGVUb1Jl
bW92ZVByb3BlcnRpZXNGcm9tLT5yZW1vdmVQcm9wZXJ0aWVzSW5TZXQocHJvcGVydGllc1RvUmVt
b3ZlLmRhdGEoKSwgcHJvcGVydGllc1RvUmVtb3ZlLnNpemUoKSk7CiB9CiAKLXZvaWQgRWRpdGlu
Z1N0eWxlOjpyZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCogZWxl
bWVudCwgTm9kZSogY29udGV4dCkKK3ZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVTdHlsZUZyb21S
dWxlc0FuZENvbnRleHQoU3R5bGVkRWxlbWVudCYgZWxlbWVudCwgTm9kZSogY29udGV4dCkKIHsK
LSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgaWYgKCFtX211dGFibGVTdHlsZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMzUzLDcgKzEzNTIsNyBAQCB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3Zl
U3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQsIE5vZGUqCiAg
ICAgfQogfQogCi12b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERl
ZmF1bHRTdHlsZShFbGVtZW50KiBlbGVtZW50KQordm9pZCBFZGl0aW5nU3R5bGU6OnJlbW92ZVBy
b3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBp
ZiAoIW1fbXV0YWJsZVN0eWxlIHx8IG1fbXV0YWJsZVN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCmluZGV4IDFjYTA3MTM1
ZjVmNDJkYjFmNjRkYzc4MGIyNjA3OTUzNDIxZjA5ZjYuLmMxNzEzOGQ0MDE3ZDJlNWFhMjc0ZTU4
NDU2OTdhOTM0YjdiYTY1NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaApA
QCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICBSZWY8RWRpdGluZ1N0eWxlPiBleHRyYWN0
QW5kUmVtb3ZlVGV4dERpcmVjdGlvbigpOwogICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCk7CiAgICAgdm9pZCByZW1vdmVTdHlsZUFkZGVkQnlOb2RlKE5vZGUqKTsKLSAgICB2b2lkIHJl
bW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSopOworICAgIHZvaWQgcmVt
b3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlJik7CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCByZW1vdmVFcXVpdmFsZW50UHJvcGVydGllcyhUJik7CiAgICAgdm9p
ZCBjb2xsYXBzZVRleHREZWNvcmF0aW9uUHJvcGVydGllcygpOwogICAgIGVudW0gU2hvdWxkSWdu
b3JlVGV4dE9ubHlQcm9wZXJ0aWVzIHsgSWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzLCBEb05vdEln
bm9yZVRleHRPbmx5UHJvcGVydGllcyB9OwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAgcHVibGljOgog
ICAgIGVudW0gQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUgeyBPdmVycmlkZVZhbHVlcywgRG9Ob3RP
dmVycmlkZVZhbHVlcyB9OwogICAgIHZvaWQgbWVyZ2VJbmxpbmVTdHlsZU9mRWxlbWVudChTdHls
ZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1vZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUg
PSBBbGxQcm9wZXJ0aWVzKTsKICAgICBzdGF0aWMgUmVmPEVkaXRpbmdTdHlsZT4gd3JhcHBpbmdT
dHlsZUZvclNlcmlhbGl6YXRpb24oTm9kZSogY29udGV4dCwgYm9vbCBzaG91bGRBbm5vdGF0ZSk7
Ci0gICAgdm9pZCBtZXJnZVN0eWxlRnJvbVJ1bGVzKFN0eWxlZEVsZW1lbnQqKTsKLSAgICB2b2lk
IG1lcmdlU3R5bGVGcm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKFN0eWxlZEVsZW1lbnQqKTsKLSAg
ICB2b2lkIHJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4dChTdHlsZWRFbGVtZW50KiwgTm9k
ZSogY29udGV4dCk7Ci0gICAgdm9pZCByZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50RGVmYXVsdFN0
eWxlKEVsZW1lbnQqKTsKKyAgICB2b2lkIG1lcmdlU3R5bGVGcm9tUnVsZXMoU3R5bGVkRWxlbWVu
dCYpOworICAgIHZvaWQgbWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24oU3R5bGVk
RWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlU3R5bGVGcm9tUnVsZXNBbmRDb250ZXh0KFN0eWxl
ZEVsZW1lbnQmLCBOb2RlKiBjb250ZXh0KTsKKyAgICB2b2lkIHJlbW92ZVByb3BlcnRpZXNJbkVs
ZW1lbnREZWZhdWx0U3R5bGUoRWxlbWVudCYpOwogICAgIHZvaWQgZm9yY2VJbmxpbmUoKTsKICAg
ICBib29sIGNvbnZlcnRQb3NpdGlvblN0eWxlKCk7CiAgICAgYm9vbCBpc0Zsb2F0aW5nKCk7CkBA
IC0xODIsNyArMTgyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4dHJhY3RGb250U2l6ZURlbHRh
KCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVHJpU3RhdGUgdHJpU3RhdGVPZlN0eWxlKFQm
IHN0eWxlVG9Db21wYXJlLCBTaG91bGRJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpIGNvbnN0Owog
ICAgIGJvb2wgY29uZmxpY3RzV2l0aElubGluZVN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQq
LCBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4qIG5ld0lubGluZVN0eWxlLCBFZGl0aW5n
U3R5bGUqIGV4dHJhY3RlZFN0eWxlKSBjb25zdDsKLSAgICB2b2lkIG1lcmdlSW5saW5lQW5kSW1w
bGljaXRTdHlsZU9mRWxlbWVudChTdHlsZWRFbGVtZW50KiwgQ1NTUHJvcGVydHlPdmVycmlkZU1v
ZGUsIFByb3BlcnRpZXNUb0luY2x1ZGUpOworICAgIHZvaWQgbWVyZ2VJbmxpbmVBbmRJbXBsaWNp
dFN0eWxlT2ZFbGVtZW50KFN0eWxlZEVsZW1lbnQmLCBDU1NQcm9wZXJ0eU92ZXJyaWRlTW9kZSwg
UHJvcGVydGllc1RvSW5jbHVkZSk7CiAgICAgdm9pZCBtZXJnZVN0eWxlKGNvbnN0IFN0eWxlUHJv
cGVydGllcyosIENTU1Byb3BlcnR5T3ZlcnJpZGVNb2RlKTsKIAogICAgIFJlZlB0cjxNdXRhYmxl
U3R5bGVQcm9wZXJ0aWVzPiBtX211dGFibGVTdHlsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKaW5kZXggZjRkNGNiMzUzMTQxMWZhMTdmZjQz
ZWI5NmM4ZjEyYjAwYTcyM2NiYS4uMTU2MzdmOGNlOTYzMWNhMGRhZDk5MWNjOWQxYWRjZjk2Nzdh
NDgwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFu
ZC5jcHAKQEAgLTgzLDkgKzgzLDkgQEAgYm9vbCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6dHJ5SW5k
ZW50aW5nQXNMaXN0SXRlbShjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFAKICAgICBtb3Zl
UGFyYWdyYXBoV2l0aENsb25lcyhzdGFydCwgZW5kLCBuZXdMaXN0LmdldCgpLCBzZWxlY3RlZExp
c3RJdGVtLmdldCgpKTsKIAogICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3VzTGlzdC5nZXQo
KSwgbmV3TGlzdC5nZXQoKSkpCi0gICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlv
dXNMaXN0LCBuZXdMaXN0KTsKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygqcHJldmlv
dXNMaXN0LCAqbmV3TGlzdCk7CiAgICAgaWYgKGNhbk1lcmdlTGlzdHMobmV3TGlzdC5nZXQoKSwg
bmV4dExpc3QuZ2V0KCkpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKG5ld0xpc3Qs
IG5leHRMaXN0KTsKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cygqbmV3TGlzdCwgKm5l
eHRMaXN0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggOWQyODk0ZTNlMzZj
NGI0YzM3ZWIxYmI2NzBjNWJlZjZkNGIxZjIyNy4uNmMzNzlkZGRlYTNiNTJjN2QzYWYwZjc1MjU4
Nzc1YTMwZTg5ZGJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJ
bnRvVGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dEludG9UZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC0zOCwxMyArMzgsMTIgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpJbnNlcnRJbnRvVGV4dE5v
ZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCitJbnNlcnRJbnRvVGV4dE5vZGVD
b21tYW5kOjpJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIG5vZGUsIHVuc2ln
bmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24p
CiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChub2RlLT5kb2N1bWVudCgpLCBlZGl0aW5nQWN0aW9u
KQogICAgICwgbV9ub2RlKFdURk1vdmUobm9kZSkpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAg
ICAgLCBtX3RleHQodGV4dCkKIHsKLSAgICBBU1NFUlQobV9ub2RlKTsKICAgICBBU1NFUlQobV9v
ZmZzZXQgPD0gbV9ub2RlLT5sZW5ndGgoKSk7CiAgICAgQVNTRVJUKCFtX3RleHQuaXNFbXB0eSgp
KTsKIH0KQEAgLTkwLDcgKzg5LDcgQEAgdm9pZCBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kOjpk
b1VuYXBwbHkoKQogCiB2b2lkIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5D
b21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBub2RlcykKIHsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFu
dHMobV9ub2RlLmdldCgpLCBub2Rlcyk7CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fbm9k
ZS5wdHIoKSwgbm9kZXMpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvSW5zZXJ0SW50b1RleHROb2RlQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kLmgKaW5kZXggNWI4ODIyMjg4ZmFhOTE0NzNk
NTc5ZDc0ZjUwZGU5ZDkzNGRiMDczMC4uMGQxOTA1ZmU4NzI2ZDNkN2E3OWI5ODQzZDcyYzU4Yzc5
M2ZmOGVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRJbnRvVGV4
dE5vZGVDb21tYW5kLmgKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgVGV4dDsKIAogY2xhc3MgSW5z
ZXJ0SW50b1RleHROb2RlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kPiBjcmVhdGUoUmVm
UHRyPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIEVk
aXRBY3Rpb24gZWRpdGluZ0FjdGlvbiA9IEVkaXRBY3Rpb25JbnNlcnQpCisgICAgc3RhdGljIFJl
ZjxJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kPiBjcmVhdGUoUmVmPFRleHQ+JiYgbm9kZSwgdW5z
aWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
biA9IEVkaXRBY3Rpb25JbnNlcnQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5kKFdURk1vdmUobm9kZSksIG9mZnNldCwgdGV4dCwg
ZWRpdGluZ0FjdGlvbikpOwogICAgIH0KQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFN0cmluZyYgaW5zZXJ0ZWRUZXh0KCk7CiAKIHByb3RlY3RlZDoKLSAgICBJbnNlcnRJbnRv
VGV4dE5vZGVDb21tYW5kKFJlZlB0cjxUZXh0PiYmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pOworICAgIEluc2VydElu
dG9UZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmIHRleHQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbik7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CkBAIC01NCw3ICs1NCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRlOwogI2Vu
ZGlmCiAgICAgCi0gICAgUmVmUHRyPFRleHQ+IG1fbm9kZTsKKyAgICBSZWY8VGV4dD4gbV9ub2Rl
OwogICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwogICAgIFN0cmluZyBtX3RleHQ7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAKaW5kZXgg
YWRkMmNkZjcwODdiNWRmYzQyMzE4NDVkYTYyZTQxMDNiM2UyZjUyNS4uZTQ4MmZmZTcwNGUyY2E5
OWNjOWVhMTg5OTNjNmRiNjU2YmYyY2IxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBJ
bnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIEFTU0VSVCghdGV4
dE5vZGUucmVuZGVyZXIoKSB8fCB0ZXh0Tm9kZS5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNl
V2hpdGVTcGFjZSgpKTsKICAgICAgICAgICAgIC8vIERlbGV0aW5nIGluc2lnbmlmaWNhbnQgd2hp
dGVzcGFjZSB3aWxsIHJlbW92ZSB0ZXh0Tm9kZSBpZiBpdCBjb250YWlucyBub3RoaW5nIGJ1dCBp
bnNpZ25pZmljYW50IHdoaXRlc3BhY2UuCiAgICAgICAgICAgICBpZiAodGV4dE5vZGUuaXNDb25u
ZWN0ZWQoKSkKLSAgICAgICAgICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoJnRleHROb2RlLCAw
LCBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGluc2VydFRleHRJ
bnRvTm9kZSh0ZXh0Tm9kZSwgMCwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGF1dG8gbmJzcE5vZGUgPSBkb2N1bWVudCgpLmNy
ZWF0ZVRleHROb2RlKG5vbkJyZWFraW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAg
YXV0byogbmJzcE5vZGVQdHIgPSBuYnNwTm9kZS5wdHIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggM2FiOTY2NWYwYThiMjlmZjQ5NTkyODcw
ZmNhZDM4N2ZlYTc1MDgyMi4uZTQwY2IxODcwNWM0NmFmYWZjMmMzMDgyMWQyZGU0NDQ5NWQ4ZGVl
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAg
LTY5LDcgKzY5LDcgQEAgUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFuZDo6bWVy
Z2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhQYXNzUmVmUHRyPEhUTUwKICAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGxpc3QgPSBwYXNzZWRMaXN0OwogICAgIEVsZW1lbnQqIHByZXZpb3VzTGlzdCA9IGxp
c3QtPnByZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2
aW91c0xpc3QsIGxpc3QuZ2V0KCkpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHBy
ZXZpb3VzTGlzdCwgbGlzdCk7CisgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMoKnByZXZp
b3VzTGlzdCwgKmxpc3QpOwogCiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTc5LDcgKzc5LDcgQEAgUmVmUHRyPEhUTUxFbGVtZW50PiBJbnNlcnRMaXN0Q29tbWFu
ZDo6bWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhQYXNzUmVmUHRyPEhUTUwKIAogICAgIFJlZlB0
cjxIVE1MRWxlbWVudD4gbmV4dExpc3QgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oc2libGluZyk7
CiAgICAgaWYgKGNhbk1lcmdlTGlzdHMobGlzdC5nZXQoKSwgbmV4dExpc3QuZ2V0KCkpKSB7Ci0g
ICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMobGlzdCwgbmV4dExpc3QpOworICAgICAgICBt
ZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpsaXN0LCAqbmV4dExpc3QpOwogICAgICAgICByZXR1cm4g
bmV4dExpc3Q7CiAgICAgfQogICAgIHJldHVybiBsaXN0OwpAQCAtNDAxLDcgKzQwMSw3IEBAIFJl
ZlB0cjxIVE1MRWxlbWVudD4gSW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgoY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBvCiAgICAgICAgIHJldHVybiBtZXJnZVdpdGhOZWlnaGJvcmlu
Z0xpc3RzKGxpc3RFbGVtZW50KTsKIAogICAgIGlmIChjYW5NZXJnZUxpc3RzKHByZXZpb3VzTGlz
dCwgbmV4dExpc3QpKQotICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlz
dCwgbmV4dExpc3QpOworICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKCpwcmV2aW91c0xp
c3QsICpuZXh0TGlzdCk7CiAKICAgICByZXR1cm4gbGlzdEVsZW1lbnQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21t
YW5kLmNwcAppbmRleCAyMGFkNmE4MDM5YmZlZjhkMGU2ZjE3Yzc0MmU4NDgxNWRkYWYwNzQ0Li5l
NjMxZDRiZWQ0ZGZhNTFlMGJmNjZmYzMwMmMwZTYxZmRmMzIyODMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFu
ZC5jcHAKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChpczxUZXh0PihsZWFkaW5nV2hpdGVzcGFjZS5kZXBy
ZWNhdGVkTm9kZSgpKSkgewogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KCpsZWFkaW5nV2hpdGVzcGFjZS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgQVNTRVJUKCF0
ZXh0Tm9kZS5yZW5kZXJlcigpIHx8IHRleHROb2RlLnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFw
c2VXaGl0ZVNwYWNlKCkpOwotICAgICAgICByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJr
ZXJzKCZ0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVRleHRJbk5v
ZGVQcmVzZXJ2aW5nTWFya2Vycyh0ZXh0Tm9kZSwgbGVhZGluZ1doaXRlc3BhY2UuZGVwcmVjYXRl
ZEVkaXRpbmdPZmZzZXQoKSwgMSwgbm9uQnJlYWtpbmdTcGFjZVN0cmluZygpKTsKICAgICB9CiAg
ICAgCiAgICAgLy8gU3BsaXQgYXQgcG9zIGlmIGluIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IG5vZGUu
CkBAIC00MDIsNyArNDAyLDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgICAgIEFTU0VSVCghcG9zaXRpb25BZnRlclNwbGl0LmNvbnRh
aW5lck5vZGUoKS0+cmVuZGVyZXIoKSB8fCBwb3NpdGlvbkFmdGVyU3BsaXQuY29udGFpbmVyTm9k
ZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKTsKICAgICAgICAg
ICAgIGRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0RG93bnN0cmVhbShwb3NpdGlvbkFmdGVyU3BsaXQp
OwogICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCpwb3NpdGlvbkFmdGVyU3BsaXQuZGVwcmVjYXRl
ZE5vZGUoKSkpCi0gICAgICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRvd25jYXN0PFRl
eHQ+KHBvc2l0aW9uQWZ0ZXJTcGxpdC5jb250YWluZXJOb2RlKCkpLCAwLCBub25CcmVha2luZ1Nw
YWNlU3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZShkb3duY2Fz
dDxUZXh0PigqcG9zaXRpb25BZnRlclNwbGl0LmNvbnRhaW5lck5vZGUoKSksIDAsIG5vbkJyZWFr
aW5nU3BhY2VTdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXggYWQwZDI1ZTQxOTVhZTMwNGFiMjM5
YWY0MTIxNDU2NWNjMmRlNDlhZC4uOGMwOTFlNzQzZTEzNmUyNmU5NWUzODExMTAyMGJhZDE5NThl
YTUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAK
QEAgLTEyMCw3ICsxMjAsNyBAQCBib29sIEluc2VydFRleHRDb21tYW5kOjpwZXJmb3JtT3Zlcndy
aXRlKGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZAogICAgIGlmICghY291
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlcGxhY2VUZXh0SW5Ob2RlKHRleHRO
b2RlLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSwgY291bnQsIHRleHQpOworICAgIHJl
cGxhY2VUZXh0SW5Ob2RlKCp0ZXh0Tm9kZSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGNvdW50LCB0ZXh0KTsKIAogICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gUG9zaXRpb24odGV4
dE5vZGUuZ2V0KCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpICsgdGV4dC5sZW5ndGgo
KSk7CiAgICAgc2V0RW5kaW5nU2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24oc3RhcnQsIGVuZFBv
c2l0aW9uKTsKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gc3RhcnRQb3NpdGlvbi5jb250
YWluZXJUZXh0KCk7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG9mZnNldCA9IHN0YXJ0UG9zaXRp
b24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAKLSAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2Rl
KHRleHROb2RlLCBvZmZzZXQsIG1fdGV4dCk7CisgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSgq
dGV4dE5vZGUsIG9mZnNldCwgbV90ZXh0KTsKICAgICAgICAgZW5kUG9zaXRpb24gPSBQb3NpdGlv
bih0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0ICsgbV90ZXh0Lmxlbmd0aCgpKTsKICAgICAgICAgaWYg
KG1fbWFya2VyU3VwcGxpZXIpCiAgICAgICAgICAgICBtX21hcmtlclN1cHBsaWVyLT5hZGRNYXJr
ZXJzVG9UZXh0Tm9kZSh0ZXh0Tm9kZS5nZXQoKSwgb2Zmc2V0LCBtX3RleHQpOwpAQCAtMjE3LDcg
KzIxNyw3IEBAIHZvaWQgSW5zZXJ0VGV4dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQVNTRVJUKG1fcmViYWxhbmNlVHlwZSA9PSBSZWJhbGFuY2VBbGxX
aGl0ZXNwYWNlcyk7CiAgICAgICAgICAgICBpZiAoY2FuUmViYWxhbmNlKHN0YXJ0UG9zaXRpb24p
ICYmIGNhblJlYmFsYW5jZShlbmRQb3NpdGlvbikpCi0gICAgICAgICAgICAgICAgcmViYWxhbmNl
V2hpdGVzcGFjZU9uVGV4dFN1YnN0cmluZyh0ZXh0Tm9kZSwgc3RhcnRQb3NpdGlvbi5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZW5kUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwor
ICAgICAgICAgICAgICAgIHJlYmFsYW5jZVdoaXRlc3BhY2VPblRleHRTdWJzdHJpbmcoKnRleHRO
b2RlLCBzdGFydFBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlbmRQb3NpdGlvbi5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI0NSw5ICsy
NDUsOSBAQCBQb3NpdGlvbiBJbnNlcnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0
aW9uJiBwb3MpCiAKICAgICAvLyBrZWVwIHRhYnMgY29hbGVzY2VkIGluIHRhYiBzcGFuCiAgICAg
aWYgKGlzVGFiU3BhblRleHROb2RlKG5vZGUpKSB7Ci0gICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0
Tm9kZSA9IGRvd25jYXN0PFRleHQ+KG5vZGUpOworICAgICAgICBSZWY8VGV4dD4gdGV4dE5vZGUg
PSBkb3duY2FzdDxUZXh0Pigqbm9kZSk7CiAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0
Tm9kZSwgb2Zmc2V0LCAiXHQiKTsKLSAgICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLmdl
dCgpLCBvZmZzZXQgKyAxKTsKKyAgICAgICAgcmV0dXJuIFBvc2l0aW9uKHRleHROb2RlLnB0cigp
LCBvZmZzZXQgKyAxKTsKICAgICB9CiAgICAgCiAgICAgLy8gY3JlYXRlIG5ldyB0YWIgc3Bhbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVsZW1lbnRz
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVu
dHNDb21tYW5kLmNwcAppbmRleCA3NmMzNzZmNTE1MzgwMGM0ZjlmNmJkZDg2OWNlMGE4YTJlOTRh
YzkwLi5kNjFkZWI3ZjgxYTgxMjcxNzEwOTc4NGI4MTZjYjM4NmQxOGI3YmEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kLmNwcApAQCAtMzAsMTkgKzMwLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTWVy
Z2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5k
KFBhc3NSZWZQdHI8RWxlbWVudD4gZmlyc3QsIFBhc3NSZWZQdHI8RWxlbWVudD4gc2Vjb25kKQor
TWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6Ok1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21t
YW5kKFJlZjxFbGVtZW50PiYmIGZpcnN0LCBSZWY8RWxlbWVudD4mJiBzZWNvbmQpCiAgICAgOiBT
aW1wbGVFZGl0Q29tbWFuZChmaXJzdC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fZWxlbWVudDEoZmly
c3QpCi0gICAgLCBtX2VsZW1lbnQyKHNlY29uZCkKKyAgICAsIG1fZWxlbWVudDEoV1RGTW92ZShm
aXJzdCkpCisgICAgLCBtX2VsZW1lbnQyKFdURk1vdmUoc2Vjb25kKSkKIHsKLSAgICBBU1NFUlQo
bV9lbGVtZW50MSk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudDIpOwotICAgIEFTU0VSVChtX2VsZW1l
bnQxLT5uZXh0U2libGluZygpID09IG1fZWxlbWVudDIpOworICAgIEFTU0VSVChtX2VsZW1lbnQx
LT5uZXh0U2libGluZygpID09IG1fZWxlbWVudDIucHRyKCkpOwogfQogCiB2b2lkIE1lcmdlSWRl
bnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAobV9lbGVtZW50MS0+
bmV4dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyIHx8ICFtX2VsZW1lbnQxLT5oYXNFZGl0YWJsZVN0
eWxlKCkgfHwgIW1fZWxlbWVudDItPmhhc0VkaXRhYmxlU3R5bGUoKSkKKyAgICBpZiAobV9lbGVt
ZW50MS0+bmV4dFNpYmxpbmcoKSAhPSBtX2VsZW1lbnQyLnB0cigpIHx8ICFtX2VsZW1lbnQxLT5o
YXNFZGl0YWJsZVN0eWxlKCkgfHwgIW1fZWxlbWVudDItPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9hdENoaWxkID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgp
OwpAQCAtNTksMTYgKzU3LDEzIEBAIHZvaWQgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6
OmRvQXBwbHkoKQogCiB2b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpkb1VuYXBw
bHkoKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQxKTsKLSAgICBBU1NFUlQobV9lbGVtZW50Mik7
Ci0KICAgICBSZWZQdHI8Tm9kZT4gYXRDaGlsZCA9IFdURk1vdmUobV9hdENoaWxkKTsKIAogICAg
IGF1dG8qIHBhcmVudCA9IG1fZWxlbWVudDItPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIXBhcmVu
dCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChwYXJlbnQtPmluc2VydEJlZm9yZSgqbV9lbGVtZW50MSwgbV9lbGVtZW50Mi5nZXQoKSku
aGFzRXhjZXB0aW9uKCkpCisgICAgaWYgKHBhcmVudC0+aW5zZXJ0QmVmb3JlKG1fZWxlbWVudDEs
IG1fZWxlbWVudDIucHRyKCkpLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBWZWN0b3I8UmVmPE5vZGU+PiBjaGlsZHJlbjsKQEAgLTgyLDggKzc3LDggQEAgdm9pZCBNZXJn
ZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICNpZm5kZWYgTkRFQlVHCiB2
b2lkIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNo
U2V0PE5vZGUqPiYgbm9kZXMpCiB7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVu
dDEuZ2V0KCksIG5vZGVzKTsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9lbGVtZW50Mi5n
ZXQoKSwgbm9kZXMpOworICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnQxLnB0cigp
LCBub2Rlcyk7CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudDIucHRyKCksIG5v
ZGVzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01l
cmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01l
cmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgKaW5kZXggZDU5NzJhMTdkNDNkMzFjNDQ4YzNl
NjVlYmY3YjJmOWJkZDVjOWI2ZS4uOTdhNzczMmM0M2Y3OWYzZjc2MmYyNmRjNTM1MGY2ZThjZWQ5
ZTE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NZXJnZUlkZW50aWNhbEVs
ZW1lbnRzQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuaApAQCAtMzEsMTMgKzMxLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQgOiBwdWJsaWMgU2ltcGxl
RWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQxLCBQYXNzUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQyKQorICAgIHN0YXRpYyBSZWY8TWVyZ2VJZGVudGljYWxFbGVt
ZW50c0NvbW1hbmQ+IGNyZWF0ZShSZWY8RWxlbWVudD4mJiBlbGVtZW50MSwgUmVmPEVsZW1lbnQ+
JiYgZWxlbWVudDIpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZXJnZUlk
ZW50aWNhbEVsZW1lbnRzQ29tbWFuZChlbGVtZW50MSwgZWxlbWVudDIpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQoV1RGTW92ZShl
bGVtZW50MSksIFdURk1vdmUoZWxlbWVudDIpKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIE1l
cmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQ
dHI8RWxlbWVudD4pOworICAgIE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kKFJlZjxFbGVt
ZW50PiYmLCBSZWY8RWxlbWVudD4mJik7CiAKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlOwpAQCAtNDYsOCArNDYsOCBAQCBwcml2YXRl
OgogICAgIHZvaWQgZ2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mKSBvdmVycmlkZTsK
ICNlbmRpZgogICAgIAotICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQxOwotICAgIFJlZlB0
cjxFbGVtZW50PiBtX2VsZW1lbnQyOworICAgIFJlZjxFbGVtZW50PiBtX2VsZW1lbnQxOworICAg
IFJlZjxFbGVtZW50PiBtX2VsZW1lbnQyOwogICAgIFJlZlB0cjxOb2RlPiBtX2F0Q2hpbGQ7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29t
bWFuZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NzA1NjViOWQ4ZDRlNGQz
OTczZTE1MzQ3ZWYyODVkMzBjZTRmZGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNSwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCi0KLSNpbmNsdWRlICJDU1NT
dHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCi0jaW5jbHVk
ZSAiU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpSZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQoRG9jdW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+
IGVsZW1lbnQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi0gICAgOiBTaW1wbGVFZGl0Q29tbWFu
ZChkb2N1bWVudCkKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9wcm9wZXJ0eShw
cm9wZXJ0eSkKLSAgICAsIG1faW1wb3J0YW50KGZhbHNlKQotewotICAgIEFTU0VSVChtX2VsZW1l
bnQpOwotfQotCi1SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQ6On5SZW1vdmVDU1NQcm9wZXJ0eUNv
bW1hbmQoKQotewotfQotCi12b2lkIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZDo6ZG9BcHBseSgp
Ci17Ci0gICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSA9IG1fZWxlbWVudC0+aW5saW5l
U3R5bGUoKTsKLSAgICBtX29sZFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobV9wcm9w
ZXJ0eSk7Ci0gICAgbV9pbXBvcnRhbnQgPSBzdHlsZS0+cHJvcGVydHlJc0ltcG9ydGFudChtX3By
b3BlcnR5KTsKLQotICAgIC8vIE11dGF0ZSB1c2luZyB0aGUgQ1NTT00gd3JhcHBlciBzbyB3ZSBn
ZXQgdGhlIHNhbWUgZXZlbnQgYmVoYXZpb3IgYXMgYSBzY3JpcHQuCi0gICAgLy8gU2V0dGluZyB0
byBudWxsIHN0cmluZyByZW1vdmVzIHRoZSBwcm9wZXJ0eS4gV2UgZG9uJ3QgaGF2ZSBpbnRlcm5h
bCB2ZXJzaW9uIG9mIHJlbW92ZVByb3BlcnR5LgotICAgIG1fZWxlbWVudC0+Y3Nzb21TdHlsZSgp
LT5zZXRQcm9wZXJ0eUludGVybmFsKG1fcHJvcGVydHksIFN0cmluZygpLCBmYWxzZSk7Ci19Ci0K
LXZvaWQgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kOjpkb1VuYXBwbHkoKQotewotICAgIG1fZWxl
bWVudC0+Y3Nzb21TdHlsZSgpLT5zZXRQcm9wZXJ0eUludGVybmFsKG1fcHJvcGVydHksIG1fb2xk
VmFsdWUsIG1faW1wb3J0YW50KTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLXZvaWQgUmVtb3ZlQ1NT
UHJvcGVydHlDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMp
Ci17Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudC5nZXQoKSwgbm9kZXMpOwot
fQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxODVlYmY1YzYzN2IyY2Y5NjAzMjg3MTllYzUyYTE4ZDM3NzMwMTczLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLSNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgU3R5bGVkRWxlbWVudDsKLQotY2xhc3MgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kIDogcHVi
bGljIFNpbXBsZUVkaXRDb21tYW5kIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW92ZUNT
U1Byb3BlcnR5Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZlB0cjxT
dHlsZWRFbGVtZW50PiBlbGVtZW50LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKGRvY3Vt
ZW50LCBlbGVtZW50LCBwcm9wZXJ0eSkpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBSZW1vdmVD
U1NQcm9wZXJ0eUNvbW1hbmQoRG9jdW1lbnQmLCBQYXNzUmVmUHRyPFN0eWxlZEVsZW1lbnQ+LCBD
U1NQcm9wZXJ0eUlEKTsKLSAgICB+UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kKCk7Ci0KLSAgICB2
b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlOwot
ICAgIAotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8
Tm9kZSo+Jikgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICAKLSAgICBSZWZQdHI8U3R5bGVkRWxlbWVu
dD4gbV9lbGVtZW50OwotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLSAgICBTdHJpbmcg
bV9vbGRWYWx1ZTsKLSAgICBib29sIG1faW1wb3J0YW50OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAppbmRleCA5NDE1MjdiZGU5ZTNjMDVjM2JlZjg2MTlmZjlkOTYzOGMzNjcxOWQz
Li40MDk0ZjU4OTI1YWJmNTBiYTQ5OTgyMDEzYzZkNzBlMGIxNjlkNGU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTEw
LDcgKzUxMCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFu
dFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAgICAgICAgICAgICAgICAg
IEVkaXRpbmdTdHlsZTo6RG9Ob3RFeHRyYWN0TWF0Y2hpbmdTdHlsZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gZS5nLiA8Zm9udCBzaXplPSIzIiBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+
IGlzIGNvbnZlcnRlZCB0byA8Zm9udCBzdHlsZT0iZm9udC1zaXplOiAyMHB4OyI+CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAoYXV0byYgYXR0cmlidXRlIDogYXR0cmlidXRlcykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0
dHJpYnV0ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC01MjAsMTgg
KzUyMCwxOCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRT
dHlsZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKEluc2VydAogICAgICAgICAgICAgLy8gc3R5bGVz
IGZyb20gYmxvY2txdW90ZU5vZGUgYXJlIGFsbG93ZWQgdG8gb3ZlcnJpZGUgdGhvc2UgZnJvbSB0
aGUgc291cmNlIGRvY3VtZW50LCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzQ5MzA5ODY+IGFuZCA8cmRh
cjovL3Byb2JsZW0vNTA4OTMyNz4uCiAgICAgICAgICAgICBOb2RlKiBibG9ja3F1b3RlTm9kZSA9
IGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnRleHQpID8gY29udGV4dCA6IGVuY2xvc2lu
Z05vZGVPZlR5cGUoZmlyc3RQb3NpdGlvbkluTm9kZShjb250ZXh0KSwgaXNNYWlsQmxvY2txdW90
ZSwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogICAgICAgICAgICAgaWYgKGJsb2NrcXVvdGVO
b2RlKQotICAgICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVTdHlsZUZyb21SdWxl
c0FuZENvbnRleHQoZWxlbWVudCwgZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAg
ICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlRnJvbVJ1bGVzQW5kQ29udGV4
dCgqZWxlbWVudCwgZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSk7CiAKLSAgICAgICAgICAg
IG5ld0lubGluZVN0eWxlLT5yZW1vdmVTdHlsZUZyb21SdWxlc0FuZENvbnRleHQoZWxlbWVudCwg
Y29udGV4dCk7CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVGcm9tUnVs
ZXNBbmRDb250ZXh0KCplbGVtZW50LCBjb250ZXh0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghaW5saW5lU3R5bGUgfHwgbmV3SW5saW5lU3R5bGUtPmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgaWYgKGlzU3R5bGVTcGFuT3JTcGFuV2l0aE9ubHlTdHlsZUF0dHJpYnV0ZShlbGVtZW50KSB8
fCBpc0VtcHR5Rm9udFRhZyhlbGVtZW50LCBBbGxvd05vbkVtcHR5U3R5bGVBdHRyaWJ1dGUpKSB7
CisgICAgICAgICAgICBpZiAoaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0cmlidXRl
KCplbGVtZW50KSB8fCBpc0VtcHR5Rm9udFRhZyhlbGVtZW50LCBBbGxvd05vbkVtcHR5U3R5bGVB
dHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBz
dHlsZUF0dHIpOworICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSgqZWxlbWVudCwgc3R5
bGVBdHRyKTsKICAgICAgICAgfSBlbHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+c3R5bGUoKS0+cHJv
cGVydHlDb3VudCgpICE9IGlubGluZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpCiAgICAgICAgICAg
ICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0
eWxlKCktPmFzVGV4dCgpKTsKIApAQCAtNTQ1LDcgKzU0NSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUo
SW5zZXJ0CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZWxlbWVudC0+cGFyZW50Tm9kZSgpICYm
IGVsZW1lbnQtPnBhcmVudE5vZGUoKS0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKQotICAgICAg
ICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShlbGVtZW50LCBjb250ZW50ZWRpdGFibGVBdHRyKTsK
KyAgICAgICAgICAgIHJlbW92ZU5vZGVBdHRyaWJ1dGUoKmVsZW1lbnQsIGNvbnRlbnRlZGl0YWJs
ZUF0dHIpOwogCiAgICAgICAgIC8vIFdlYktpdCB1c2VkIHRvIG5vdCBhZGQgZGlzcGxheTogaW5s
aW5lIGFuZCBmbG9hdDogbm9uZSBvbiBjb3B5LgogICAgICAgICAvLyBLZWVwIHRoaXMgY29kZSBh
cm91bmQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKQEAgLTEyNTAsNyArMTI1MCw3IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBtZXJnZUVuZElm
TmVlZGVkKCk7CiAKICAgICBpZiAoTm9kZSogbWFpbEJsb2NrcXVvdGUgPSBlbmNsb3NpbmdOb2Rl
T2ZUeXBlKHBvc2l0aW9uQXRTdGFydE9mSW5zZXJ0ZWRDb250ZW50KCkuZGVlcEVxdWl2YWxlbnQo
KSwgaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUpKQotICAgICAgICByZW1vdmVOb2RlQXR0cmli
dXRlKGRvd25jYXN0PEVsZW1lbnQ+KG1haWxCbG9ja3F1b3RlKSwgY2xhc3NBdHRyKTsKKyAgICAg
ICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZShkb3duY2FzdDxFbGVtZW50PigqbWFpbEJsb2NrcXVvdGUp
LCBjbGFzc0F0dHIpOwogCiAgICAgaWYgKHNob3VsZFBlcmZvcm1TbWFydFJlcGxhY2UoKSkKICAg
ICAgICAgYWRkU3BhY2VzRm9yU21hcnRSZXBsYWNlKCk7CkBAIC0xMzMzLDcgKzEzMzMsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjphZGRTcGFjZXNGb3JTbWFydFJlcGxhY2UoKQog
ICAgIGlmIChuZWVkc1RyYWlsaW5nU3BhY2UgJiYgZW5kTm9kZSkgewogICAgICAgICBib29sIGNv
bGxhcHNlV2hpdGVTcGFjZSA9ICFlbmROb2RlLT5yZW5kZXJlcigpIHx8IGVuZE5vZGUtPnJlbmRl
cmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CiAgICAgICAgIGlmIChpczxUZXh0
PigqZW5kTm9kZSkpIHsKLSAgICAgICAgICAgIGluc2VydFRleHRJbnRvTm9kZShkb3duY2FzdDxU
ZXh0PihlbmROb2RlKSwgZW5kT2Zmc2V0LCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2lu
Z1NwYWNlU3RyaW5nKCkgOiAiICIpOworICAgICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRv
d25jYXN0PFRleHQ+KCplbmROb2RlKSwgZW5kT2Zmc2V0LCBjb2xsYXBzZVdoaXRlU3BhY2UgPyBu
b25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOwogICAgICAgICAgICAgaWYgKG1fZW5kT2ZJ
bnNlcnRlZENvbnRlbnQuY29udGFpbmVyTm9kZSgpID09IGVuZE5vZGUpCiAgICAgICAgICAgICAg
ICAgbV9lbmRPZkluc2VydGVkQ29udGVudC5tb3ZlVG9PZmZzZXQobV9lbmRPZkluc2VydGVkQ29u
dGVudC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSArIDEpOwogICAgICAgICB9IGVsc2UgewpAQCAt
MTM1Nyw3ICsxMzU3LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6YWRkU3BhY2Vz
Rm9yU21hcnRSZXBsYWNlKCkKICAgICBpZiAobmVlZHNMZWFkaW5nU3BhY2UgJiYgc3RhcnROb2Rl
KSB7CiAgICAgICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlID0gIXN0YXJ0Tm9kZS0+cmVuZGVy
ZXIoKSB8fCBzdGFydE5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNl
KCk7CiAgICAgICAgIGlmIChpczxUZXh0Pigqc3RhcnROb2RlKSkgewotICAgICAgICAgICAgaW5z
ZXJ0VGV4dEludG9Ob2RlKGRvd25jYXN0PFRleHQ+KHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBj
b2xsYXBzZVdoaXRlU3BhY2UgPyBub25CcmVha2luZ1NwYWNlU3RyaW5nKCkgOiAiICIpOworICAg
ICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGRvd25jYXN0PFRleHQ+KCpzdGFydE5vZGUpLCBz
dGFydE9mZnNldCwgY29sbGFwc2VXaGl0ZVNwYWNlID8gbm9uQnJlYWtpbmdTcGFjZVN0cmluZygp
IDogIiAiKTsKICAgICAgICAgICAgIGlmIChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50LmNvbnRhaW5l
ck5vZGUoKSA9PSBzdGFydE5vZGUgJiYgbV9lbmRPZkluc2VydGVkQ29udGVudC5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSkKICAgICAgICAgICAgICAgICBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm1v
dmVUb09mZnNldChtX2VuZE9mSW5zZXJ0ZWRDb250ZW50Lm9mZnNldEluQ29udGFpbmVyTm9kZSgp
ICsgMSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNDI4LDcgKzE0MjgsNyBAQCB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9uKFBvc2l0aW9u
JiBwb3NpdGlvbiwgUAogCiAgICAgaWYgKGlzPFRleHQ+KHRleHQtPnByZXZpb3VzU2libGluZygp
KSkgewogICAgICAgICBSZWY8VGV4dD4gcHJldmlvdXMoZG93bmNhc3Q8VGV4dD4oKnRleHQtPnBy
ZXZpb3VzU2libGluZygpKSk7Ci0gICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCAwLCBw
cmV2aW91cy0+ZGF0YSgpKTsKKyAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0LCAwLCBw
cmV2aW91cy0+ZGF0YSgpKTsKIAogICAgICAgICBpZiAocG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KQogICAgICAgICAgICAgcG9zaXRpb24ubW92ZVRvT2Zmc2V0KHByZXZpb3VzLT5sZW5ndGgoKSAr
IHBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKQEAgLTE0NDgsNyArMTQ0OCw3IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9zaXRp
b24oUG9zaXRpb24mIHBvc2l0aW9uLCBQCiAgICAgaWYgKGlzPFRleHQ+KHRleHQtPm5leHRTaWJs
aW5nKCkpKSB7CiAgICAgICAgIFJlZjxUZXh0PiBuZXh0KGRvd25jYXN0PFRleHQ+KCp0ZXh0LT5u
ZXh0U2libGluZygpKSk7CiAgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsTGVuZ3RoID0gdGV4dC0+
bGVuZ3RoKCk7Ci0gICAgICAgIGluc2VydFRleHRJbnRvTm9kZSh0ZXh0LCBvcmlnaW5hbExlbmd0
aCwgbmV4dC0+ZGF0YSgpKTsKKyAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKCp0ZXh0LCBvcmln
aW5hbExlbmd0aCwgbmV4dC0+ZGF0YSgpKTsKIAogICAgICAgICBpZiAoIXBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcikKICAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwocG9z
aXRpb24sIG5leHQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IGEzZDA3
NDRhODhjNDA1N2JkNDZiMmQ0YzI4YWY1Mzg3MGQwYzFkMjcuLjhkNjFlNTdhZmUwMDZlODM0OGE4
YzlhMjRhNDQxZDU1MjBlMzNjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFya3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTMz
NSw4ICszMzUsOCBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZQogCiAgICAgICAgIGlmIChzaG91
bGRBcHBseVdyYXBwaW5nU3R5bGUoZWxlbWVudCkpIHsKICAgICAgICAgICAgIG5ld0lubGluZVN0
eWxlID0gbV93cmFwcGluZ1N0eWxlLT5jb3B5KCk7Ci0gICAgICAgICAgICBuZXdJbmxpbmVTdHls
ZS0+cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1bHRTdHlsZShjb25zdF9jYXN0PEVsZW1l
bnQqPigmZWxlbWVudCkpOwotICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxl
Q29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoY29uc3RfY2FzdDxFbGVtZW50Kj4oJmVsZW1lbnQp
KTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0aWVzSW5FbGVtZW50
RGVmYXVsdFN0eWxlKCpjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOworICAgICAgICAg
ICAgbmV3SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUo
KmNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgbmV3SW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOwogCkBAIC0zNDUs
NyArMzQ1LDcgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChT
dHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGUKIAogICAgICAgICBpZiAoc2hvdWxk
QW5ub3RhdGVPckZvcmNlSW5saW5lKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUo
KSkKLSAgICAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlc0Zv
clNlcmlhbGl6YXRpb24oZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGNvbnN0X2Nhc3Q8RWxlbWVudCo+
KCZlbGVtZW50KSkpOworICAgICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5tZXJnZVN0eWxl
RnJvbVJ1bGVzRm9yU2VyaWFsaXphdGlvbihkb3duY2FzdDxIVE1MRWxlbWVudD4oKmNvbnN0X2Nh
c3Q8RWxlbWVudCo+KCZlbGVtZW50KSkpOwogCiAgICAgICAgICAgICBpZiAoYWRkRGlzcGxheUlu
bGluZSkKICAgICAgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+Zm9yY2VJbmxpbmUoKTsKQEAg
LTUwOSwxNSArNTA5LDEzIEBAIHN0YXRpYyBib29sIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRl
cihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHYpCiAgICAgcmV0dXJuIGlzRW5kT2ZQYXJhZ3JhcGgo
dikgJiYgaXNTdGFydE9mUGFyYWdyYXBoKG5leHQpICYmICEodXBzdHJlYW1Ob2RlLT5oYXNUYWdO
YW1lKGJyVGFnKSAmJiB1cHN0cmVhbU5vZGUgPT0gZG93bnN0cmVhbU5vZGUpOwogfQogCi1zdGF0
aWMgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzQW5kSW5saW5lRGVj
bChjb25zdCBOb2RlKiBub2RlKQorc3RhdGljIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlRnJv
bU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUt
PmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBGSVhNRTogSGF2aW5nIHRvIGNvbnN0X2Nhc3Qg
aGVyZSBpcyB1Z2x5LCBidXQgaXQgaXMgcXVpdGUgYSBiaXQgb2Ygd29yayB0byB1bnRhbmdsZQot
ICAgIC8vIHRoZSBub24tY29uc3QtbmVzcyBvZiBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVt
ZW50LgotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+
KHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSkpOwotICAgIFJlZlB0cjxFZGl0
aW5nU3R5bGU+IHN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZWxlbWVudC0+aW5saW5lU3R5
bGUoKSk7CisgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsK
KyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKGVs
ZW1lbnQuaW5saW5lU3R5bGUoKSk7CiAgICAgc3R5bGUtPm1lcmdlU3R5bGVGcm9tUnVsZXMoZWxl
bWVudCk7CiAgICAgcmV0dXJuIHN0eWxlOwogfQpAQCAtNjIyLDcgKzYyMCw3IEBAIHN0YXRpYyBT
dHJpbmcgY3JlYXRlTWFya3VwSW50ZXJuYWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5n
ZSYgcmFuZ2UsIFZlY3RvCiAgICAgICAgIC8vIEFsc28gaW5jbHVkZSBhbGwgb2YgdGhlIGFuY2Vz
dG9ycyBvZiBsYXN0Q2xvc2VkIHVwIHRvIHRoaXMgc3BlY2lhbCBhbmNlc3Rvci4KICAgICAgICAg
Zm9yIChDb250YWluZXJOb2RlKiBhbmNlc3RvciA9IGxhc3RDbG9zZWQtPnBhcmVudE5vZGUoKTsg
YW5jZXN0b3I7IGFuY2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudE5vZGUoKSkgewogICAgICAgICAg
ICAgaWYgKGFuY2VzdG9yID09IGZ1bGx5U2VsZWN0ZWRSb290ICYmICFjb252ZXJ0QmxvY2tzVG9J
bmxpbmVzKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gZnVsbHlTZWxl
Y3RlZFJvb3RTdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woZnVsbHlT
ZWxlY3RlZFJvb3QpOworICAgICAgICAgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGZ1bGx5
U2VsZWN0ZWRSb290U3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKCpm
dWxseVNlbGVjdGVkUm9vdCk7CiAKICAgICAgICAgICAgICAgICAvLyBCcmluZyB0aGUgYmFja2dy
b3VuZCBhdHRyaWJ1dGUgb3ZlciwgYnV0IG5vdCBhcyBhbiBhdHRyaWJ1dGUgYmVjYXVzZSBhIGJh
Y2tncm91bmQgYXR0cmlidXRlIG9uIGEgZGl2CiAgICAgICAgICAgICAgICAgLy8gYXBwZWFycyB0
byBoYXZlIG5vIGVmZmVjdC4KQEAgLTY1Niw3ICs2NTQsNyBAQCBzdGF0aWMgU3RyaW5nIGNyZWF0
ZU1hcmt1cEludGVybmFsKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmFuZ2UmIHJhbmdlLCBW
ZWN0bwogICAgIGlmIChhY2N1bXVsYXRvci5uZWVkUmVsYXRpdmVTdHlsZVdyYXBwZXIoKSAmJiBu
ZWVkc1Bvc2l0aW9uU3R5bGVDb252ZXJzaW9uKSB7CiAgICAgICAgIGlmIChhY2N1bXVsYXRvci5u
ZWVkQ2xlYXJpbmdEaXYoKSkKICAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZFN0cmluZygi
PGRpdiBzdHlsZT1cImNsZWFyOiBib3RoO1wiPjwvZGl2PiIpOwotICAgICAgICBSZWZQdHI8RWRp
dGluZ1N0eWxlPiBwb3NpdGlvblJlbGF0aXZlU3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNB
bmRJbmxpbmVEZWNsKGJvZHkpOworICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBwb3NpdGlv
blJlbGF0aXZlU3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKCpib2R5
KTsKICAgICAgICAgcG9zaXRpb25SZWxhdGl2ZVN0eWxlLT5zdHlsZSgpLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1ZVJlbGF0aXZlKTsKICAgICAgICAgYWNjdW11bGF0
b3Iud3JhcFdpdGhTdHlsZU5vZGUocG9zaXRpb25SZWxhdGl2ZVN0eWxlLT5zdHlsZSgpLCBkb2N1
bWVudCwgdHJ1ZSk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>